From: Nick Piggin Documentation/atomic_ops.txt defines these primitives must contain a memory barrier both before and after their memory operation. This is consistent with the atomic ops implementation on alpha. Signed-off-by: Nick Piggin Cc: Richard Henderson Cc: Ivan Kokshaysky Signed-off-by: Andrew Morton --- include/asm-alpha/bitops.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff -puN include/asm-alpha/bitops.h~alpha-fix-bitops include/asm-alpha/bitops.h --- a/include/asm-alpha/bitops.h~alpha-fix-bitops +++ a/include/asm-alpha/bitops.h @@ -121,6 +121,9 @@ test_and_set_bit(unsigned long nr, volat int *m = ((int *) addr) + (nr >> 5); __asm__ __volatile__( +#ifdef CONFIG_SMP + " mb\n" +#endif "1: ldl_l %0,%4\n" " and %0,%3,%2\n" " bne %2,2f\n" @@ -162,6 +165,9 @@ test_and_clear_bit(unsigned long nr, vol int *m = ((int *) addr) + (nr >> 5); __asm__ __volatile__( +#ifdef CONFIG_SMP + " mb\n" +#endif "1: ldl_l %0,%4\n" " and %0,%3,%2\n" " beq %2,2f\n" @@ -203,6 +209,9 @@ test_and_change_bit(unsigned long nr, vo int *m = ((int *) addr) + (nr >> 5); __asm__ __volatile__( +#ifdef CONFIG_SMP + " mb\n" +#endif "1: ldl_l %0,%4\n" " and %0,%3,%2\n" " xor %0,%3,%0\n" _