]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: make work.bytesMarked 8-byte aligned
authorCherry Zhang <cherryyz@google.com>
Mon, 14 Nov 2016 23:24:37 +0000 (18:24 -0500)
committerCherry Zhang <cherryyz@google.com>
Mon, 21 Nov 2016 20:25:17 +0000 (20:25 +0000)
Make atomic access on 32-bit architectures happy.

Updates #17786.

Change-Id: I42de63ff1381af42124dc51befc887160f71797d
Reviewed-on: https://go-review.googlesource.com/33235
Run-TryBot: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Austin Clements <austin@google.com>
src/runtime/mgc.go

index f97b589839f6ce04cc80142f151b8a1503cba8fb..cc79d4cfff377b764b7d863806f0d1670cf7f241 100644 (file)
@@ -781,6 +781,22 @@ var work struct {
        empty uint64                   // lock-free list of empty blocks workbuf
        pad0  [sys.CacheLineSize]uint8 // prevents false-sharing between full/empty and nproc/nwait
 
+       // bytesMarked is the number of bytes marked this cycle. This
+       // includes bytes blackened in scanned objects, noscan objects
+       // that go straight to black, and permagrey objects scanned by
+       // markroot during the concurrent scan phase. This is updated
+       // atomically during the cycle. Updates may be batched
+       // arbitrarily, since the value is only read at the end of the
+       // cycle.
+       //
+       // Because of benign races during marking, this number may not
+       // be the exact number of marked bytes, but it should be very
+       // close.
+       //
+       // Put this field here because it needs 64-bit atomic access
+       // (and thus 8-byte alignment even on 32-bit architectures).
+       bytesMarked uint64
+
        markrootNext uint32 // next markroot job
        markrootJobs uint32 // number of markroot jobs
 
@@ -842,19 +858,6 @@ var work struct {
        // program started if debug.gctrace > 0.
        totaltime int64
 
-       // bytesMarked is the number of bytes marked this cycle. This
-       // includes bytes blackened in scanned objects, noscan objects
-       // that go straight to black, and permagrey objects scanned by
-       // markroot during the concurrent scan phase. This is updated
-       // atomically during the cycle. Updates may be batched
-       // arbitrarily, since the value is only read at the end of the
-       // cycle.
-       //
-       // Because of benign races during marking, this number may not
-       // be the exact number of marked bytes, but it should be very
-       // close.
-       bytesMarked uint64
-
        // initialHeapLive is the value of memstats.heap_live at the
        // beginning of this GC cycle.
        initialHeapLive uint64