blob: 97c9491ae7423cca50ce81fbbf8511f93aac94ef [file] [log] [blame]
#include <ros/arch/membar.h>
/*************************
* From Linux commit 569dbb88e80d ("Linux 4.13")
* arch/x86/include/asm/barrier.h
*
* Note that their barrier() is our cmb(), but we actually have both available.
* barrier() comes from e.g. <linux/compiler-gcc.h>.
*/
#define __smp_store_release(p, v) \
do { \
compiletime_assert_atomic_type(*p); \
barrier(); \
WRITE_ONCE(*p, v); \
} while (0)
#define __smp_load_acquire(p) \
({ \
typeof(*p) ___p1 = READ_ONCE(*p); \
compiletime_assert_atomic_type(*p); \
barrier(); \
___p1; \
})
/* Atomic operations are already serializing on x86 */
#define __smp_mb__before_atomic() barrier()
#define __smp_mb__after_atomic() barrier()
/************************* End Linux barrier.h */
#define smp_store_release(p, v) __smp_store_release(p, v)
#define smp_load_acquire(p) __smp_load_acquire(p)
#define smp_mb__before_atomic() __smp_mb__before_atomic()
#define smp_mb__after_atomic() __smp_mb__after_atomic()
#define smp_read_barrier_depends()