diff options
Diffstat (limited to 'arch/ia64/include/asm/barrier.h')
| -rw-r--r-- | arch/ia64/include/asm/barrier.h | 26 | 
1 files changed, 26 insertions, 0 deletions
diff --git a/arch/ia64/include/asm/barrier.h b/arch/ia64/include/asm/barrier.h index 60576e06b6f..a48957c7b44 100644 --- a/arch/ia64/include/asm/barrier.h +++ b/arch/ia64/include/asm/barrier.h @@ -45,13 +45,39 @@  # define smp_rmb()	rmb()  # define smp_wmb()	wmb()  # define smp_read_barrier_depends()	read_barrier_depends() +  #else +  # define smp_mb()	barrier()  # define smp_rmb()	barrier()  # define smp_wmb()	barrier()  # define smp_read_barrier_depends()	do { } while(0) +  #endif +#define smp_mb__before_atomic()	barrier() +#define smp_mb__after_atomic()	barrier() + +/* + * IA64 GCC turns volatile stores into st.rel and volatile loads into ld.acq no + * need for asm trickery! + */ + +#define smp_store_release(p, v)						\ +do {									\ +	compiletime_assert_atomic_type(*p);				\ +	barrier();							\ +	ACCESS_ONCE(*p) = (v);						\ +} while (0) + +#define smp_load_acquire(p)						\ +({									\ +	typeof(*p) ___p1 = ACCESS_ONCE(*p);				\ +	compiletime_assert_atomic_type(*p);				\ +	barrier();							\ +	___p1;								\ +}) +  /*   * XXX check on this ---I suspect what Linus really wants here is   * acquire vs release semantics but we can't discuss this stuff with  | 
