From: Mauri de Souza Meneguzzo Date: Tue, 17 Oct 2023 22:54:27 +0000 (+0000) Subject: runtime/internal/atomic: add memory barrier for mips Cas on failure X-Git-Tag: go1.22rc1~525 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=25ad137cf4f0823b877a19f36479dbde005bfa10;p=gostls13.git runtime/internal/atomic: add memory barrier for mips Cas on failure Add a memory barrier on the failure case of the compare-and-swap for mips, this avoids potential race conditions. For #63506 Change-Id: I3df1479d1438ba72aa72567eb3dea76ff745e98d GitHub-Last-Rev: 2101b9fd446f28f856986b27d20f92cd4a1f4fef GitHub-Pull-Request: golang/go#63604 Reviewed-on: https://go-review.googlesource.com/c/go/+/536116 Auto-Submit: Keith Randall Reviewed-by: Keith Randall Reviewed-by: David Chase Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI --- diff --git a/src/runtime/internal/atomic/atomic_mipsx.go b/src/runtime/internal/atomic/atomic_mipsx.go index 5dd15a0b02..e3dcde1bde 100644 --- a/src/runtime/internal/atomic/atomic_mipsx.go +++ b/src/runtime/internal/atomic/atomic_mipsx.go @@ -48,11 +48,6 @@ func unlock() { spinUnlock(&lock.state) } -//go:nosplit -func unlockNoFence() { - lock.state = 0 -} - //go:nosplit func Xadd64(addr *uint64, delta int64) (new uint64) { lockAndCheck(addr) @@ -85,7 +80,7 @@ func Cas64(addr *uint64, old, new uint64) (swapped bool) { return true } - unlockNoFence() + unlock() return false } diff --git a/src/runtime/internal/atomic/atomic_mipsx.s b/src/runtime/internal/atomic/atomic_mipsx.s index 390e9ce7ac..8f5fc53cb7 100644 --- a/src/runtime/internal/atomic/atomic_mipsx.s +++ b/src/runtime/internal/atomic/atomic_mipsx.s @@ -28,6 +28,7 @@ try_cas: MOVB R3, ret+12(FP) RET cas_fail: + SYNC MOVB R0, ret+12(FP) RET