|  | #pragma once | 
|  |  | 
|  | /* Full CPU memory barrier */ | 
|  | #define mb() __sync_synchronize() | 
|  | /* Compiler memory barrier */ | 
|  | #define cmb() ({ asm volatile("" ::: "memory"); }) | 
|  | /* Partial CPU memory barriers */ | 
|  | #define rmb() mb() | 
|  | #define wmb() mb() | 
|  | #define wrmb() mb() | 
|  | #define rwmb() mb() | 
|  |  | 
|  | /* Forced barriers, used for string ops, SSE ops, dealing with hardware, or | 
|  | * other places where you avoid 'normal' x86 read/writes (like having an IPI | 
|  | * beat a write) */ | 
|  | #define mb_f() mb() | 
|  | #define rmb_f() rmb() | 
|  | #define wmb_f() wmb() | 
|  | #define wrmb_f() wrmb() | 
|  | #define rwmb_f() rwmb() | 
|  |  | 
|  | /* Bus memory barriers */ | 
|  | #warning "Implement bus memory barriers" | 
|  | #define bus_wmb() mb() | 
|  | #define bus_rmb() mb() |