Commit 197aa9e6 authored by Rick Hudson's avatar Rick Hudson

runtime: remove unused quiesce code

This is dead code. If you want to quiesce the system the
preferred way is to use forEachP(func(*p){}).

Change-Id: Ic7677a5dd55e3639b99e78ddeb2c71dd1dd091fa
Reviewed-on: https://go-review.googlesource.com/10267Reviewed-by: default avatarAustin Clements <austin@google.com>
parent ae3e3610
...@@ -60,7 +60,7 @@ func gcmarkwb_m(slot *uintptr, ptr uintptr) { ...@@ -60,7 +60,7 @@ func gcmarkwb_m(slot *uintptr, ptr uintptr) {
default: default:
throw("gcphasework in bad gcphase") throw("gcphasework in bad gcphase")
case _GCoff, _GCquiesce, _GCstw, _GCsweep, _GCscan: case _GCoff, _GCstw, _GCsweep, _GCscan:
// ok // ok
case _GCmark, _GCmarktermination: case _GCmark, _GCmarktermination:
......
...@@ -206,7 +206,6 @@ var gcBlackenEnabled uint32 ...@@ -206,7 +206,6 @@ var gcBlackenEnabled uint32
const ( const (
_GCoff = iota // GC not running, write barrier disabled _GCoff = iota // GC not running, write barrier disabled
_GCquiesce // unused state
_GCstw // unused state _GCstw // unused state
_GCscan // GC collecting roots into workbufs, write barrier disabled _GCscan // GC collecting roots into workbufs, write barrier disabled
_GCmark // GC marking from workbufs, write barrier ENABLED _GCmark // GC marking from workbufs, write barrier ENABLED
......
...@@ -261,7 +261,7 @@ func gcphasework(gp *g) { ...@@ -261,7 +261,7 @@ func gcphasework(gp *g) {
switch gcphase { switch gcphase {
default: default:
throw("gcphasework in bad gcphase") throw("gcphasework in bad gcphase")
case _GCoff, _GCquiesce, _GCstw, _GCsweep: case _GCoff, _GCstw, _GCsweep:
// No work. // No work.
case _GCscan: case _GCscan:
// scan the stack, mark the objects, put pointers in work buffers // scan the stack, mark the objects, put pointers in work buffers
......
...@@ -465,69 +465,6 @@ func stopscanstart(gp *g) { ...@@ -465,69 +465,6 @@ func stopscanstart(gp *g) {
} }
} }
// Runs on g0 and does the actual work after putting the g back on the run queue.
func mquiesce(gpmaster *g) {
// enqueue the calling goroutine.
restartg(gpmaster)
activeglen := len(allgs)
for i := 0; i < activeglen; i++ {
gp := allgs[i]
if readgstatus(gp) == _Gdead {
gp.gcworkdone = true // noop scan.
} else {
gp.gcworkdone = false
}
stopscanstart(gp)
}
// Check that the G's gcwork (such as scanning) has been done. If not do it now.
// You can end up doing work here if the page trap on a Grunning Goroutine has
// not been sprung or in some race situations. For example a runnable goes dead
// and is started up again with a gp->gcworkdone set to false.
for i := 0; i < activeglen; i++ {
gp := allgs[i]
for !gp.gcworkdone {
status := readgstatus(gp)
if status == _Gdead {
//do nothing, scan not needed.
gp.gcworkdone = true // scan is a noop
break
}
if status == _Grunning && gp.stackguard0 == uintptr(stackPreempt) && notetsleep(&sched.stopnote, 100*1000) { // nanosecond arg
noteclear(&sched.stopnote)
} else {
stopscanstart(gp)
}
}
}
for i := 0; i < activeglen; i++ {
gp := allgs[i]
status := readgstatus(gp)
if isscanstatus(status) {
print("mstopandscang:bottom: post scan bad status gp=", gp, " has status ", hex(status), "\n")
dumpgstatus(gp)
}
if !gp.gcworkdone && status != _Gdead {
print("mstopandscang:bottom: post scan gp=", gp, "->gcworkdone still false\n")
dumpgstatus(gp)
}
}
schedule() // Never returns.
}
// quiesce moves all the goroutines to a GC safepoint which for now is a at preemption point.
// If the global gcphase is GCmark quiesce will ensure that all of the goroutine's stacks
// have been scanned before it returns.
func quiesce(mastergp *g) {
castogscanstatus(mastergp, _Grunning, _Gscanenqueue)
// Now move this to the g0 (aka m) stack.
// g0 will potentially scan this thread and put mastergp on the runqueue
mcall(mquiesce)
}
// stopTheWorld stops all P's from executing goroutines, interrupting // stopTheWorld stops all P's from executing goroutines, interrupting
// all goroutines at GC safe points and records reason as the reason // all goroutines at GC safe points and records reason as the reason
// for the stop. On return, only the current goroutine's P is running. // for the stop. On return, only the current goroutine's P is running.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment