aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Zijlstra <peterz@infradead.org>2014-03-13 14:00:35 -0400
committerIngo Molnar <mingo@kernel.org>2014-04-18 08:20:42 -0400
commit0e530747c69f1e191f101a925bb4051894e5c7b0 (patch)
treedba0d885403109b8a5857bf59890dfe6b6cd077c
parentc645073f7e4f073e1ebcd0f0d91652c4468b8364 (diff)
arch,s390: Convert smp_mb__*()
As per the existing implementation; implement the new one using smp_mb(). AFAICT the s390 compare-and-swap does imply a barrier, however there are some immediate ops that seem to be singly-copy atomic and do not imply a barrier. One such is the "ni" op (which would be and-immediate) which is used for the constant clear_bit implementation. Therefore s390 needs full barriers for the {before,after} atomic ops. 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-kme5dz5hcobpnufnnkh1ech2@git.kernel.org Cc: Chen Gang <gang.chen@asianux.com> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Will Deacon <will.deacon@arm.com> Cc: linux390@de.ibm.com Cc: linux-kernel@vger.kernel.org Cc: linux-s390@vger.kernel.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r--arch/s390/include/asm/atomic.h5
-rw-r--r--arch/s390/include/asm/barrier.h5
2 files changed, 3 insertions, 7 deletions
diff --git a/arch/s390/include/asm/atomic.h b/arch/s390/include/asm/atomic.h
index 1d4706114a45..fa934fe080c1 100644
--- a/arch/s390/include/asm/atomic.h
+++ b/arch/s390/include/asm/atomic.h
@@ -412,9 +412,4 @@ static inline long long atomic64_dec_if_positive(atomic64_t *v)
412#define atomic64_dec_and_test(_v) (atomic64_sub_return(1, _v) == 0) 412#define atomic64_dec_and_test(_v) (atomic64_sub_return(1, _v) == 0)
413#define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0) 413#define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0)
414 414
415#define smp_mb__before_atomic_dec() smp_mb()
416#define smp_mb__after_atomic_dec() smp_mb()
417#define smp_mb__before_atomic_inc() smp_mb()
418#define smp_mb__after_atomic_inc() smp_mb()
419
420#endif /* __ARCH_S390_ATOMIC__ */ 415#endif /* __ARCH_S390_ATOMIC__ */
diff --git a/arch/s390/include/asm/barrier.h b/arch/s390/include/asm/barrier.h
index 578680f6207a..19ff956b752b 100644
--- a/arch/s390/include/asm/barrier.h
+++ b/arch/s390/include/asm/barrier.h
@@ -27,8 +27,9 @@
27#define smp_rmb() rmb() 27#define smp_rmb() rmb()
28#define smp_wmb() wmb() 28#define smp_wmb() wmb()
29#define smp_read_barrier_depends() read_barrier_depends() 29#define smp_read_barrier_depends() read_barrier_depends()
30#define smp_mb__before_clear_bit() smp_mb() 30
31#define smp_mb__after_clear_bit() smp_mb() 31#define smp_mb__before_atomic() smp_mb()
32#define smp_mb__after_atomic() smp_mb()
32 33
33#define set_mb(var, value) do { var = value; mb(); } while (0) 34#define set_mb(var, value) do { var = value; mb(); } while (0)
34 35