1
0
mirror of https://github.com/golang/go synced 2024-11-23 18:50:05 -07:00

runtime: change maxSearchAddr into a helper function

This avoids a dependency on the compiler statically initializing
maxSearchAddr, which is necessary so we can disable the (overly
aggressive and spec non-conforming) optimizations in cmd/compile and
gccgo.

Updates #51913.

Change-Id: I424e62c81c722bb179ed8d2d8e188274a1aeb7b6
Reviewed-on: https://go-review.googlesource.com/c/go/+/396194
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Austin Clements <austin@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
Matthew Dempsky 2022-03-28 09:30:41 -07:00
parent f12461cb0f
commit ccb798741b
2 changed files with 12 additions and 7 deletions

View File

@ -83,11 +83,16 @@ const (
pallocChunksL1Shift = pallocChunksL2Bits
)
// Maximum searchAddr value, which indicates that the heap has no free space.
// maxSearchAddr returns the maximum searchAddr value, which indicates
// that the heap has no free space.
//
// We alias maxOffAddr just to make it clear that this is the maximum address
// This function exists just to make it clear that this is the maximum address
// for the page allocator's search space. See maxOffAddr for details.
var maxSearchAddr = maxOffAddr
//
// It's a function (rather than a variable) because it needs to be
// usable before package runtime's dynamic initialization is complete.
// See #51913 for details.
func maxSearchAddr() offAddr { return maxOffAddr }
// Global chunk index.
//
@ -319,7 +324,7 @@ func (p *pageAlloc) init(mheapLock *mutex, sysStat *sysMemStat) {
p.sysInit()
// Start with the searchAddr in a state indicating there's no free memory.
p.searchAddr = maxSearchAddr
p.searchAddr = maxSearchAddr()
// Set the mheapLock.
p.mheapLock = mheapLock
@ -745,7 +750,7 @@ nextLevel:
}
if l == 0 {
// We're at level zero, so that means we've exhausted our search.
return 0, maxSearchAddr
return 0, maxSearchAddr()
}
// We're not at level zero, and we exhausted the level we were looking in.
@ -839,7 +844,7 @@ func (p *pageAlloc) alloc(npages uintptr) (addr uintptr, scav uintptr) {
// exhausted. Otherwise, the heap still might have free
// space in it, just not enough contiguous space to
// accommodate npages.
p.searchAddr = maxSearchAddr
p.searchAddr = maxSearchAddr()
}
return 0, 0
}

View File

@ -143,7 +143,7 @@ func (p *pageAlloc) allocToCache() pageCache {
if addr == 0 {
// We failed to find adequate free space, so mark the searchAddr as OoM
// and return an empty pageCache.
p.searchAddr = maxSearchAddr
p.searchAddr = maxSearchAddr()
return pageCache{}
}
ci := chunkIndex(addr)