mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: remove mcache field from m
Having an mcache field in both m and p is confusing, so remove it from m. Always use mcache field from p. Use new variable mcache0 during bootstrap. Change-Id: If2cba9f8bb131d911d512b61fd883a86cf62cc98 Reviewed-on: https://go-review.googlesource.com/c/go/+/205239 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Austin Clements <austin@google.com>
This commit is contained in:
parent
7802b55176
commit
3093959ee1
7 changed files with 54 additions and 43 deletions
|
|
@ -82,6 +82,7 @@ var modinfo string
|
|||
var (
|
||||
m0 m
|
||||
g0 g
|
||||
mcache0 *mcache
|
||||
raceprocctx0 uintptr
|
||||
)
|
||||
|
||||
|
|
@ -2957,7 +2958,6 @@ func reentersyscall(pc, sp uintptr) {
|
|||
|
||||
_g_.m.syscalltick = _g_.m.p.ptr().syscalltick
|
||||
_g_.sysblocktraced = true
|
||||
_g_.m.mcache = nil
|
||||
pp := _g_.m.p.ptr()
|
||||
pp.m = 0
|
||||
_g_.m.oldp.set(pp)
|
||||
|
|
@ -3083,9 +3083,6 @@ func exitsyscall() {
|
|||
oldp := _g_.m.oldp.ptr()
|
||||
_g_.m.oldp = 0
|
||||
if exitsyscallfast(oldp) {
|
||||
if _g_.m.mcache == nil {
|
||||
throw("lost mcache")
|
||||
}
|
||||
if trace.enabled {
|
||||
if oldp != _g_.m.p.ptr() || _g_.m.syscalltick != _g_.m.p.ptr().syscalltick {
|
||||
systemstack(traceGoStart)
|
||||
|
|
@ -3136,10 +3133,6 @@ func exitsyscall() {
|
|||
// Call the scheduler.
|
||||
mcall(exitsyscall0)
|
||||
|
||||
if _g_.m.mcache == nil {
|
||||
throw("lost mcache")
|
||||
}
|
||||
|
||||
// Scheduler returned, so we're allowed to run now.
|
||||
// Delete the syscallsp information that we left for
|
||||
// the garbage collector during the system call.
|
||||
|
|
@ -4033,10 +4026,12 @@ func (pp *p) init(id int32) {
|
|||
pp.wbBuf.reset()
|
||||
if pp.mcache == nil {
|
||||
if id == 0 {
|
||||
if getg().m.mcache == nil {
|
||||
if mcache0 == nil {
|
||||
throw("missing mcache?")
|
||||
}
|
||||
pp.mcache = getg().m.mcache // bootstrap
|
||||
// Use the bootstrap mcache0. Only one P will get
|
||||
// mcache0: the one with ID 0.
|
||||
pp.mcache = mcache0
|
||||
} else {
|
||||
pp.mcache = allocmcache()
|
||||
}
|
||||
|
|
@ -4216,7 +4211,6 @@ func procresize(nprocs int32) *p {
|
|||
_g_.m.p.ptr().m = 0
|
||||
}
|
||||
_g_.m.p = 0
|
||||
_g_.m.mcache = nil
|
||||
p := allp[0]
|
||||
p.m = 0
|
||||
p.status = _Pidle
|
||||
|
|
@ -4226,6 +4220,9 @@ func procresize(nprocs int32) *p {
|
|||
}
|
||||
}
|
||||
|
||||
// g.m.p is now set, so we no longer need mcache0 for bootstrapping.
|
||||
mcache0 = nil
|
||||
|
||||
// release resources from unused P's
|
||||
for i := nprocs; i < old; i++ {
|
||||
p := allp[i]
|
||||
|
|
@ -4291,7 +4288,7 @@ func acquirep(_p_ *p) {
|
|||
func wirep(_p_ *p) {
|
||||
_g_ := getg()
|
||||
|
||||
if _g_.m.p != 0 || _g_.m.mcache != nil {
|
||||
if _g_.m.p != 0 {
|
||||
throw("wirep: already in go")
|
||||
}
|
||||
if _p_.m != 0 || _p_.status != _Pidle {
|
||||
|
|
@ -4302,7 +4299,6 @@ func wirep(_p_ *p) {
|
|||
print("wirep: p->m=", _p_.m, "(", id, ") p->status=", _p_.status, "\n")
|
||||
throw("wirep: invalid p state")
|
||||
}
|
||||
_g_.m.mcache = _p_.mcache
|
||||
_g_.m.p.set(_p_)
|
||||
_p_.m.set(_g_.m)
|
||||
_p_.status = _Prunning
|
||||
|
|
@ -4312,19 +4308,18 @@ func wirep(_p_ *p) {
|
|||
func releasep() *p {
|
||||
_g_ := getg()
|
||||
|
||||
if _g_.m.p == 0 || _g_.m.mcache == nil {
|
||||
if _g_.m.p == 0 {
|
||||
throw("releasep: invalid arg")
|
||||
}
|
||||
_p_ := _g_.m.p.ptr()
|
||||
if _p_.m.ptr() != _g_.m || _p_.mcache != _g_.m.mcache || _p_.status != _Prunning {
|
||||
print("releasep: m=", _g_.m, " m->p=", _g_.m.p.ptr(), " p->m=", hex(_p_.m), " m->mcache=", _g_.m.mcache, " p->mcache=", _p_.mcache, " p->status=", _p_.status, "\n")
|
||||
if _p_.m.ptr() != _g_.m || _p_.status != _Prunning {
|
||||
print("releasep: m=", _g_.m, " m->p=", _g_.m.p.ptr(), " p->m=", hex(_p_.m), " p->status=", _p_.status, "\n")
|
||||
throw("releasep: invalid p state")
|
||||
}
|
||||
if trace.enabled {
|
||||
traceProcStop(_g_.m.p.ptr())
|
||||
}
|
||||
_g_.m.p = 0
|
||||
_g_.m.mcache = nil
|
||||
_p_.m = 0
|
||||
_p_.status = _Pidle
|
||||
return _p_
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue