Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
barrier.h
Go to the documentation of this file.
1 #ifndef __BARRIER_H
2 #define __BARRIER_H
3 
4 #include <asm/compiler.h>
5 
6 #define mb() \
7 __asm__ __volatile__("mb": : :"memory")
8 
9 #define rmb() \
10 __asm__ __volatile__("mb": : :"memory")
11 
12 #define wmb() \
13 __asm__ __volatile__("wmb": : :"memory")
14 
15 #define read_barrier_depends() \
16 __asm__ __volatile__("mb": : :"memory")
17 
18 #ifdef CONFIG_SMP
19 #define __ASM_SMP_MB "\tmb\n"
20 #define smp_mb() mb()
21 #define smp_rmb() rmb()
22 #define smp_wmb() wmb()
23 #define smp_read_barrier_depends() read_barrier_depends()
24 #else
25 #define __ASM_SMP_MB
26 #define smp_mb() barrier()
27 #define smp_rmb() barrier()
28 #define smp_wmb() barrier()
29 #define smp_read_barrier_depends() do { } while (0)
30 #endif
31 
32 #define set_mb(var, value) \
33 do { var = value; mb(); } while (0)
34 
35 #endif /* __BARRIER_H */