mirror of
https://github.com/golang/go.git
synced 2025-05-26 01:41:25 +00: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:
parent
f12461cb0f
commit
ccb798741b
@ -83,11 +83,16 @@ const (
|
|||||||
pallocChunksL1Shift = pallocChunksL2Bits
|
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.
|
// 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.
|
// Global chunk index.
|
||||||
//
|
//
|
||||||
@ -319,7 +324,7 @@ func (p *pageAlloc) init(mheapLock *mutex, sysStat *sysMemStat) {
|
|||||||
p.sysInit()
|
p.sysInit()
|
||||||
|
|
||||||
// Start with the searchAddr in a state indicating there's no free memory.
|
// Start with the searchAddr in a state indicating there's no free memory.
|
||||||
p.searchAddr = maxSearchAddr
|
p.searchAddr = maxSearchAddr()
|
||||||
|
|
||||||
// Set the mheapLock.
|
// Set the mheapLock.
|
||||||
p.mheapLock = mheapLock
|
p.mheapLock = mheapLock
|
||||||
@ -745,7 +750,7 @@ nextLevel:
|
|||||||
}
|
}
|
||||||
if l == 0 {
|
if l == 0 {
|
||||||
// We're at level zero, so that means we've exhausted our search.
|
// 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.
|
// 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
|
// exhausted. Otherwise, the heap still might have free
|
||||||
// space in it, just not enough contiguous space to
|
// space in it, just not enough contiguous space to
|
||||||
// accommodate npages.
|
// accommodate npages.
|
||||||
p.searchAddr = maxSearchAddr
|
p.searchAddr = maxSearchAddr()
|
||||||
}
|
}
|
||||||
return 0, 0
|
return 0, 0
|
||||||
}
|
}
|
||||||
|
@ -143,7 +143,7 @@ func (p *pageAlloc) allocToCache() pageCache {
|
|||||||
if addr == 0 {
|
if addr == 0 {
|
||||||
// We failed to find adequate free space, so mark the searchAddr as OoM
|
// We failed to find adequate free space, so mark the searchAddr as OoM
|
||||||
// and return an empty pageCache.
|
// and return an empty pageCache.
|
||||||
p.searchAddr = maxSearchAddr
|
p.searchAddr = maxSearchAddr()
|
||||||
return pageCache{}
|
return pageCache{}
|
||||||
}
|
}
|
||||||
ci := chunkIndex(addr)
|
ci := chunkIndex(addr)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user