[ARM SMP] Fix data corruption in test_* bitops
authorRussell King <rmk@dyn-67.arm.linux.org.uk>
Wed, 27 Jul 2005 22:00:05 +0000 (23:00 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Wed, 27 Jul 2005 22:00:05 +0000 (23:00 +0100)
If we found that the bit was already in the desired state, we
would skip performing the operation, and write random data back.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/lib/bitops.h

index 6976e60e47cbedbd261ce19673060a596e249646..5382a302360273d697b10839ab21ca92d9bb1e71 100644 (file)
@@ -19,9 +19,9 @@
        mov     r3, r2, lsl r3          @ create mask
 1:     ldrexb  r2, [r1]
        ands    r0, r2, r3              @ save old value of bit
-       \instr  ip, r2, r3                      @ toggle bit
-       strexb  r2, ip, [r1]
-       cmp     r2, #0
+       \instr  r2, r2, r3                      @ toggle bit
+       strexb  ip, r2, [r1]
+       cmp     ip, #0
        bne     1b
        cmp     r0, #0
        movne   r0, #1