diff options
| author | Peter Zijlstra <peterz@infradead.org> | 2014-03-13 14:00:35 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2014-04-18 08:20:47 -0400 |
| commit | 09a01c0ccb1837abb28afcfdd668fa0dfabed928 (patch) | |
| tree | 7ef2ffee4fbfe1b07f88d660b46dad4fef80a05e | |
| parent | d00a569284b1340c16fe2c148099e077ea09ebc9 (diff) | |
arch,xtensa: Convert smp_mb__*()
Xtensa SMP has compare-and-swap which is fully serializing, therefore
its exising smp_mb__{before,after}_clear_bit() appear unduly heavy.
Implement the new barriers as barrier().
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Link: http://lkml.kernel.org/n/tip-e9rqjxr1m1ejsob9p433kmji@git.kernel.org
Cc: Chris Zankel <chris@zankel.net>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Cc: Max Filippov <jcmvbkbc@gmail.com>
Cc: linux-kernel@vger.kernel.org
Cc: linux-xtensa@linux-xtensa.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
| -rw-r--r-- | arch/xtensa/include/asm/atomic.h | 7 | ||||
| -rw-r--r-- | arch/xtensa/include/asm/barrier.h | 3 | ||||
| -rw-r--r-- | arch/xtensa/include/asm/bitops.h | 4 |
3 files changed, 5 insertions, 9 deletions
diff --git a/arch/xtensa/include/asm/atomic.h b/arch/xtensa/include/asm/atomic.h index e7fb447bce8e..e5103b47a8ce 100644 --- a/arch/xtensa/include/asm/atomic.h +++ b/arch/xtensa/include/asm/atomic.h | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #ifdef __KERNEL__ | 19 | #ifdef __KERNEL__ |
| 20 | #include <asm/processor.h> | 20 | #include <asm/processor.h> |
| 21 | #include <asm/cmpxchg.h> | 21 | #include <asm/cmpxchg.h> |
| 22 | #include <asm/barrier.h> | ||
| 22 | 23 | ||
| 23 | #define ATOMIC_INIT(i) { (i) } | 24 | #define ATOMIC_INIT(i) { (i) } |
| 24 | 25 | ||
| @@ -387,12 +388,6 @@ static inline void atomic_set_mask(unsigned int mask, atomic_t *v) | |||
| 387 | #endif | 388 | #endif |
| 388 | } | 389 | } |
| 389 | 390 | ||
| 390 | /* Atomic operations are already serializing */ | ||
| 391 | #define smp_mb__before_atomic_dec() barrier() | ||
| 392 | #define smp_mb__after_atomic_dec() barrier() | ||
| 393 | #define smp_mb__before_atomic_inc() barrier() | ||
| 394 | #define smp_mb__after_atomic_inc() barrier() | ||
| 395 | |||
| 396 | #endif /* __KERNEL__ */ | 391 | #endif /* __KERNEL__ */ |
| 397 | 392 | ||
| 398 | #endif /* _XTENSA_ATOMIC_H */ | 393 | #endif /* _XTENSA_ATOMIC_H */ |
diff --git a/arch/xtensa/include/asm/barrier.h b/arch/xtensa/include/asm/barrier.h index 0a24b04d6b21..5b88774c75ab 100644 --- a/arch/xtensa/include/asm/barrier.h +++ b/arch/xtensa/include/asm/barrier.h | |||
| @@ -13,6 +13,9 @@ | |||
| 13 | #define rmb() barrier() | 13 | #define rmb() barrier() |
| 14 | #define wmb() mb() | 14 | #define wmb() mb() |
| 15 | 15 | ||
| 16 | #define smp_mb__before_atomic() barrier() | ||
| 17 | #define smp_mb__after_atomic() barrier() | ||
| 18 | |||
| 16 | #include <asm-generic/barrier.h> | 19 | #include <asm-generic/barrier.h> |
| 17 | 20 | ||
| 18 | #endif /* _XTENSA_SYSTEM_H */ | 21 | #endif /* _XTENSA_SYSTEM_H */ |
diff --git a/arch/xtensa/include/asm/bitops.h b/arch/xtensa/include/asm/bitops.h index 7b6873ae84c2..3f44fa2a53e9 100644 --- a/arch/xtensa/include/asm/bitops.h +++ b/arch/xtensa/include/asm/bitops.h | |||
| @@ -21,9 +21,7 @@ | |||
| 21 | 21 | ||
| 22 | #include <asm/processor.h> | 22 | #include <asm/processor.h> |
| 23 | #include <asm/byteorder.h> | 23 | #include <asm/byteorder.h> |
| 24 | 24 | #include <asm/barrier.h> | |
| 25 | #define smp_mb__before_clear_bit() smp_mb() | ||
| 26 | #define smp_mb__after_clear_bit() smp_mb() | ||
| 27 | 25 | ||
| 28 | #include <asm-generic/bitops/non-atomic.h> | 26 | #include <asm-generic/bitops/non-atomic.h> |
| 29 | 27 | ||
