]> Cypherpunks repositories - gostls13.git/commitdiff
sync/atomic: trigger paging fault early on linux/arm
authorDmitriy Vyukov <dvyukov@google.com>
Tue, 13 Aug 2013 17:15:47 +0000 (21:15 +0400)
committerDmitriy Vyukov <dvyukov@google.com>
Tue, 13 Aug 2013 17:15:47 +0000 (21:15 +0400)
so that we don't need to traceback through __kuser_cmpxchg

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/12869043

src/pkg/sync/atomic/asm_linux_arm.s

index 4b6b69c505e26abc48fa0ffc285744872e0305ce..3d1edfe0bf3fb3614beaecfcde3991ab0c49e574 100644 (file)
@@ -32,6 +32,9 @@ TEXT ·CompareAndSwapInt32(SB),NOSPLIT,$0
 // Implement using kernel cas for portability.
 TEXT ·CompareAndSwapUint32(SB),NOSPLIT,$0-13
        MOVW    addr+0(FP), R2
+       // trigger potential paging fault here,
+       // because we don't know how to traceback through __kuser_cmpxchg
+       MOVW    (R2), R0
        MOVW    old+4(FP), R0
 casagain:
        MOVW    new+8(FP), R1
@@ -102,6 +105,9 @@ TEXT cas64<>(SB),NOSPLIT,$0
 TEXT kernelCAS64<>(SB),NOSPLIT,$0-21
        // int (*__kuser_cmpxchg64_t)(const int64_t *oldval, const int64_t *newval, volatile int64_t *ptr);
        MOVW    addr+0(FP), R2 // ptr
+       // trigger potential paging fault here,
+       // because we don't know how to traceback through __kuser_cmpxchg64
+       MOVW    (R2), R0
        // make unaligned atomic access panic
        AND.S   $7, R2, R1
        BEQ     2(PC)