aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/include
diff options
context:
space:
mode:
authorPeter Zijlstra <peterz@infradead.org>2014-03-12 12:11:00 -0400
committerIngo Molnar <mingo@kernel.org>2014-04-18 05:40:32 -0400
commit030d0178bdbd237c1f0577f03bbc1d7140a75044 (patch)
treebba9497eca400523431e3d44469e06b9456fa843 /arch/arm/include
parentd594ffa94b7efdd8c6da5ee48aea8ae229809b55 (diff)
arch,arm: Convert smp_mb__*()
ARM uses ll/sc primitives that do not imply barriers for all regular atomic ops, therefore smp_mb__{before,after} need be a full barrier. Since ARM doesn't use asm-generic/barrier.h include the required definitions in its asm/barrier.h 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-yijo7sglsl7uusbp13upcuvo@git.kernel.org Cc: Albin Tonnerre <albin.tonnerre@arm.com> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Chen Gang <gang.chen@asianux.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Nicolas Pitre <nico@linaro.org> Cc: Russell King <linux@arm.linux.org.uk> Cc: Victor Kamensky <victor.kamensky@linaro.org> Cc: Will Deacon <will.deacon@arm.com> Cc: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/arm/include')
-rw-r--r--arch/arm/include/asm/atomic.h5
-rw-r--r--arch/arm/include/asm/barrier.h3
-rw-r--r--arch/arm/include/asm/bitops.h4
3 files changed, 4 insertions, 8 deletions
diff --git a/arch/arm/include/asm/atomic.h b/arch/arm/include/asm/atomic.h
index 9a92fd7864a8..3040359094d9 100644
--- a/arch/arm/include/asm/atomic.h
+++ b/arch/arm/include/asm/atomic.h
@@ -241,11 +241,6 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u)
241 241
242#define atomic_add_negative(i,v) (atomic_add_return(i, v) < 0) 242#define atomic_add_negative(i,v) (atomic_add_return(i, v) < 0)
243 243
244#define smp_mb__before_atomic_dec() smp_mb()
245#define smp_mb__after_atomic_dec() smp_mb()
246#define smp_mb__before_atomic_inc() smp_mb()
247#define smp_mb__after_atomic_inc() smp_mb()
248
249#ifndef CONFIG_GENERIC_ATOMIC64 244#ifndef CONFIG_GENERIC_ATOMIC64
250typedef struct { 245typedef struct {
251 long long counter; 246 long long counter;
diff --git a/arch/arm/include/asm/barrier.h b/arch/arm/include/asm/barrier.h
index 2f59f7443396..c6a3e73a6e24 100644
--- a/arch/arm/include/asm/barrier.h
+++ b/arch/arm/include/asm/barrier.h
@@ -79,5 +79,8 @@ do { \
79 79
80#define set_mb(var, value) do { var = value; smp_mb(); } while (0) 80#define set_mb(var, value) do { var = value; smp_mb(); } while (0)
81 81
82#define smp_mb__before_atomic() smp_mb()
83#define smp_mb__after_atomic() smp_mb()
84
82#endif /* !__ASSEMBLY__ */ 85#endif /* !__ASSEMBLY__ */
83#endif /* __ASM_BARRIER_H */ 86#endif /* __ASM_BARRIER_H */
diff --git a/arch/arm/include/asm/bitops.h b/arch/arm/include/asm/bitops.h
index b2e298a90d76..56380995f4c3 100644
--- a/arch/arm/include/asm/bitops.h
+++ b/arch/arm/include/asm/bitops.h
@@ -25,9 +25,7 @@
25 25
26#include <linux/compiler.h> 26#include <linux/compiler.h>
27#include <linux/irqflags.h> 27#include <linux/irqflags.h>
28 28#include <asm/barrier.h>
29#define smp_mb__before_clear_bit() smp_mb()
30#define smp_mb__after_clear_bit() smp_mb()
31 29
32/* 30/*
33 * These functions are the basis of our bit ops. 31 * These functions are the basis of our bit ops.