runtime: factor our oneNewExtraM trace code

In the interest of further cleaning up the trace.go API, move the trace
logic in oneNewExtraM into its own function.

Change-Id: I5cf478cb8cd0d301ee3b068347ed48ce768b8882
Reviewed-on: https://go-review.googlesource.com/c/go/+/494186
Reviewed-by: Michael Pratt <mpratt@google.com>
Run-TryBot: Michael Knyszek <mknyszek@google.com>
Auto-Submit: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
Michael Anthony Knyszek 2023-05-10 03:14:22 +00:00 committed by Gopher Robot
parent 54031132c8
commit c890d40d0d
2 changed files with 14 additions and 6 deletions

View File

@ -2004,12 +2004,7 @@ func oneNewExtraM() {
gp.racectx = racegostart(abi.FuncPCABIInternal(newextram) + sys.PCQuantum) gp.racectx = racegostart(abi.FuncPCABIInternal(newextram) + sys.PCQuantum)
} }
if traceEnabled() { if traceEnabled() {
// Trigger two trace events for the locked g in the extra m, traceOneNewExtraM(gp)
// since the next event of the g will be traceEvGoSysExit in exitsyscall,
// while calling from C thread to Go.
traceGoCreate(gp, 0) // no start pc
gp.traceseq++
traceEvent(traceEvGoInSyscall, -1, gp.goid)
} }
// put on allg for garbage collector // put on allg for garbage collector
allgadd(gp) allgadd(gp)

View File

@ -1713,3 +1713,16 @@ func startPCforTrace(pc uintptr) uintptr {
} }
return f.datap.textAddr(*(*uint32)(w)) return f.datap.textAddr(*(*uint32)(w))
} }
// traceOneNewExtraM registers the fact that a new extra M was created with
// the tracer. This matters if the M (which has an attached G) is used while
// the trace is still active because if it is, we need the fact that it exists
// to show up in the final trace.
func traceOneNewExtraM(gp *g) {
// Trigger two trace events for the locked g in the extra m,
// since the next event of the g will be traceEvGoSysExit in exitsyscall,
// while calling from C thread to Go.
traceGoCreate(gp, 0) // no start pc
gp.traceseq++
traceEvent(traceEvGoInSyscall, -1, gp.goid)
}