diff options
Diffstat (limited to 'arch/powerpc/include/asm/barrier.h')
| -rw-r--r-- | arch/powerpc/include/asm/barrier.h | 24 | 
1 files changed, 23 insertions, 1 deletions
diff --git a/arch/powerpc/include/asm/barrier.h b/arch/powerpc/include/asm/barrier.h index ae782254e73..bab79a110c7 100644 --- a/arch/powerpc/include/asm/barrier.h +++ b/arch/powerpc/include/asm/barrier.h @@ -45,11 +45,15 @@  #    define SMPWMB      eieio  #endif +#define __lwsync()	__asm__ __volatile__ (stringify_in_c(LWSYNC) : : :"memory") +  #define smp_mb()	mb() -#define smp_rmb()	__asm__ __volatile__ (stringify_in_c(LWSYNC) : : :"memory") +#define smp_rmb()	__lwsync()  #define smp_wmb()	__asm__ __volatile__ (stringify_in_c(SMPWMB) : : :"memory")  #define smp_read_barrier_depends()	read_barrier_depends()  #else +#define __lwsync()	barrier() +  #define smp_mb()	barrier()  #define smp_rmb()	barrier()  #define smp_wmb()	barrier() @@ -65,4 +69,22 @@  #define data_barrier(x)	\  	asm volatile("twi 0,%0,0; isync" : : "r" (x) : "memory"); +#define smp_store_release(p, v)						\ +do {									\ +	compiletime_assert_atomic_type(*p);				\ +	__lwsync();							\ +	ACCESS_ONCE(*p) = (v);						\ +} while (0) + +#define smp_load_acquire(p)						\ +({									\ +	typeof(*p) ___p1 = ACCESS_ONCE(*p);				\ +	compiletime_assert_atomic_type(*p);				\ +	__lwsync();							\ +	___p1;								\ +}) + +#define smp_mb__before_atomic()     smp_mb() +#define smp_mb__after_atomic()      smp_mb() +  #endif /* _ASM_POWERPC_BARRIER_H */  | 
