From 300ff5d8ac12a5515234e68aa8a03637ba181937 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Fri, 17 Apr 2020 15:36:13 -0400 Subject: [PATCH] runtime: allow proflock and mheap.speciallock above globalAlloc.mutex During schedinit, these may occur in: mProf_Malloc stkbucket newBucket persistentalloc persistentalloc1 mProf_Malloc setprofilebucket fixalloc.alloc persistentalloc persistentalloc1 These seem to be legitimate lock orderings. Additionally, mheap.speciallock had a defined rank, but it was never actually used. That is fixed now. Updates #38474 Change-Id: I0f6e981852eac66dafb72159f426476509620a65 Reviewed-on: https://go-review.googlesource.com/c/go/+/228786 Run-TryBot: Michael Pratt TryBot-Result: Gobot Gobot Reviewed-by: Dan Scales --- src/runtime/lockrank.go | 12 ++++++------ src/runtime/mheap.go | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/runtime/lockrank.go b/src/runtime/lockrank.go index 784f4236f4..d96369b1a5 100644 --- a/src/runtime/lockrank.go +++ b/src/runtime/lockrank.go @@ -76,9 +76,9 @@ const ( // Memory-related non-leaf locks lockRankWbufSpans lockRankMheap + lockRankMheapSpecial // Memory-related leaf locks - lockRankMheapSpecial lockRankGlobalAlloc // Other leaf locks @@ -144,11 +144,11 @@ var lockNames = []string{ lockRankDefer: "defer", lockRankSudog: "sudog", - lockRankWbufSpans: "wbufSpans", - lockRankMheap: "mheap", - + lockRankWbufSpans: "wbufSpans", + lockRankMheap: "mheap", lockRankMheapSpecial: "mheapSpecial", - lockRankGlobalAlloc: "globalAlloc.mutex", + + lockRankGlobalAlloc: "globalAlloc.mutex", lockRankGFree: "gFree", @@ -221,7 +221,7 @@ var lockPartialOrder [][]lockRank = [][]lockRank{ lockRankWbufSpans: {lockRankScavenge, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankSched, lockRankAllg, lockRankPollDesc, lockRankTimers, lockRankItab, lockRankReflectOffs, lockRankHchan, lockRankNotifyList, lockRankTraceStrings, lockRankMspanSpecial, lockRankProf, lockRankRoot, lockRankDefer, lockRankSudog}, lockRankMheap: {lockRankScavenge, lockRankSweepWaiters, lockRankAssistQueue, lockRankCpuprof, lockRankSweep, lockRankSched, lockRankAllg, lockRankAllp, lockRankPollDesc, lockRankTimers, lockRankItab, lockRankReflectOffs, lockRankNotifyList, lockRankTraceBuf, lockRankTraceStrings, lockRankHchan, lockRankMspanSpecial, lockRankProf, lockRankGcBitsArenas, lockRankRoot, lockRankMcentral, lockRankStackpool, lockRankStackLarge, lockRankDefer, lockRankSudog, lockRankWbufSpans}, lockRankMheapSpecial: {lockRankScavenge, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankItab, lockRankReflectOffs, lockRankNotifyList, lockRankTraceBuf, lockRankTraceStrings, lockRankHchan}, - lockRankGlobalAlloc: {lockRankSpine, lockRankMheap}, + lockRankGlobalAlloc: {lockRankProf, lockRankSpine, lockRankMheap, lockRankMheapSpecial}, lockRankGFree: {lockRankSched}, diff --git a/src/runtime/mheap.go b/src/runtime/mheap.go index 9774dfb282..9bb33b2000 100644 --- a/src/runtime/mheap.go +++ b/src/runtime/mheap.go @@ -673,6 +673,7 @@ func (h *mheap) init() { lockInit(&h.lock, lockRankMheap) lockInit(&h.sweepSpans[0].spineLock, lockRankSpine) lockInit(&h.sweepSpans[1].spineLock, lockRankSpine) + lockInit(&h.speciallock, lockRankMheapSpecial) h.spanalloc.init(unsafe.Sizeof(mspan{}), recordspan, unsafe.Pointer(h), &memstats.mspan_sys) h.cachealloc.init(unsafe.Sizeof(mcache{}), nil, nil, &memstats.mcache_sys) -- 2.50.0