| #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() |