diff options
Diffstat (limited to 'src/runtime/runtime2.go')
| -rw-r--r-- | src/runtime/runtime2.go | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/runtime/runtime2.go b/src/runtime/runtime2.go index 6b9f49d503..4318930d9c 100644 --- a/src/runtime/runtime2.go +++ b/src/runtime/runtime2.go @@ -619,13 +619,18 @@ type m struct { // Up to 10 locks held by this m, maintained by the lock ranking code. locksHeldLen int locksHeld [10]heldLockInfo +} + +const mRedZoneSize = (16 << 3) * asanenabledBit // redZoneSize(2048) + +type mPadded struct { + m // Size the runtime.m structure so it fits in the 2048-byte size class, and // not in the next-smallest (1792-byte) size class. That leaves the 11 low // bits of muintptr values available for flags, as required for // GOEXPERIMENT=spinbitmutex. - _ [goexperiment.SpinbitMutexInt * 64 * goarch.PtrSize / 8]byte - _ [goexperiment.SpinbitMutexInt * 700 * (2 - goarch.PtrSize/4)]byte + _ [goexperiment.SpinbitMutexInt * (2048 - mallocHeaderSize - mRedZoneSize - unsafe.Sizeof(m{}))]byte } type p struct { |
