aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/mwbbuf.go
diff options
context:
space:
mode:
authorMichael Pratt <mpratt@google.com>2020-10-14 17:18:27 -0400
committerMichael Pratt <mpratt@google.com>2020-10-15 15:55:19 +0000
commit2517f4946b42b8deedb864c884f1b41311d45850 (patch)
treefcd02112f74fc6f5fd816c989a0a7641cd0b10df /src/runtime/mwbbuf.go
parentaa161e799df7e1eba99d2be10271e76b6f758142 (diff)
downloadgo-2517f4946b42b8deedb864c884f1b41311d45850.tar.gz
go-2517f4946b42b8deedb864c884f1b41311d45850.zip
runtime: remove debugCachedWork
debugCachedWork and all of its dependent fields and code were added to aid in debugging issue #27993. Now that the source of the problem is known and mitigated (via the extra work check after STW in gcMarkDone), these extra checks are no longer required and simply make the code more difficult to follow. Remove it all. Updates #27993 Change-Id: I594beedd5ca61733ba9cc9eaad8f80ea92df1a0d Reviewed-on: https://go-review.googlesource.com/c/go/+/262350 Trust: Michael Pratt <mpratt@google.com> Run-TryBot: Michael Pratt <mpratt@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Austin Clements <austin@google.com>
Diffstat (limited to 'src/runtime/mwbbuf.go')
-rw-r--r--src/runtime/mwbbuf.go32
1 files changed, 2 insertions, 30 deletions
diff --git a/src/runtime/mwbbuf.go b/src/runtime/mwbbuf.go
index 632769c114..6efc00007d 100644
--- a/src/runtime/mwbbuf.go
+++ b/src/runtime/mwbbuf.go
@@ -57,12 +57,6 @@ type wbBuf struct {
// on. This must be a multiple of wbBufEntryPointers because
// the write barrier only checks for overflow once per entry.
buf [wbBufEntryPointers * wbBufEntries]uintptr
-
- // debugGen causes the write barrier buffer to flush after
- // every write barrier if equal to gcWorkPauseGen. This is for
- // debugging #27993. This is only set if debugCachedWork is
- // set.
- debugGen uint32
}
const (
@@ -86,7 +80,7 @@ const (
func (b *wbBuf) reset() {
start := uintptr(unsafe.Pointer(&b.buf[0]))
b.next = start
- if writeBarrier.cgo || (debugCachedWork && (throwOnGCWork || b.debugGen == atomic.Load(&gcWorkPauseGen))) {
+ if writeBarrier.cgo {
// Effectively disable the buffer by forcing a flush
// on every barrier.
b.end = uintptr(unsafe.Pointer(&b.buf[wbBufEntryPointers]))
@@ -204,32 +198,10 @@ func wbBufFlush(dst *uintptr, src uintptr) {
// Switch to the system stack so we don't have to worry about
// the untyped stack slots or safe points.
systemstack(func() {
- if debugCachedWork {
- // For debugging, include the old value of the
- // slot and some other data in the traceback.
- wbBuf := &getg().m.p.ptr().wbBuf
- var old uintptr
- if dst != nil {
- // dst may be nil in direct calls to wbBufFlush.
- old = *dst
- }
- wbBufFlush1Debug(old, wbBuf.buf[0], wbBuf.buf[1], &wbBuf.buf[0], wbBuf.next)
- } else {
- wbBufFlush1(getg().m.p.ptr())
- }
+ wbBufFlush1(getg().m.p.ptr())
})
}
-// wbBufFlush1Debug is a temporary function for debugging issue
-// #27993. It exists solely to add some context to the traceback.
-//
-//go:nowritebarrierrec
-//go:systemstack
-//go:noinline
-func wbBufFlush1Debug(old, buf1, buf2 uintptr, start *uintptr, next uintptr) {
- wbBufFlush1(getg().m.p.ptr())
-}
-
// wbBufFlush1 flushes p's write barrier buffer to the GC work queue.
//
// This must not have write barriers because it is part of the write