1
2 #include <linux/compiler.h>
3 #if defined(__i386__) || defined(__x86_64__)
4 #include "../../arch/x86/include/asm/barrier.h"
5 #elif defined(__arm__)
6 #include "../../arch/arm/include/asm/barrier.h"
7 #elif defined(__aarch64__)
8 #include "../../arch/arm64/include/asm/barrier.h"
9 #elif defined(__powerpc__)
10 #include "../../arch/powerpc/include/asm/barrier.h"
11 #elif defined(__s390__)
12 #include "../../arch/s390/include/asm/barrier.h"
13 #elif defined(__sh__)
14 #include "../../arch/sh/include/asm/barrier.h"
15 #elif defined(__sparc__)
16 #include "../../arch/sparc/include/asm/barrier.h"
17 #elif defined(__tile__)
18 #include "../../arch/tile/include/asm/barrier.h"
19 #elif defined(__alpha__)
20 #include "../../arch/alpha/include/asm/barrier.h"
21 #elif defined(__mips__)
22 #include "../../arch/mips/include/asm/barrier.h"
23 #elif defined(__ia64__)
24 #include "../../arch/ia64/include/asm/barrier.h"
25 #elif defined(__xtensa__)
26 #include "../../arch/xtensa/include/asm/barrier.h"
27 #elif defined(__nds32__)
28 #include "../../arch/nds32/include/asm/barrier.h"
29 #else
30 #include <asm-generic/barrier.h>
31 #endif
32
33
34
35
36
37
38 #ifndef smp_rmb
39 # define smp_rmb() rmb()
40 #endif
41
42 #ifndef smp_wmb
43 # define smp_wmb() wmb()
44 #endif
45
46 #ifndef smp_mb
47 # define smp_mb() mb()
48 #endif
49
50 #ifndef smp_store_release
51 # define smp_store_release(p, v) \
52 do { \
53 smp_mb(); \
54 WRITE_ONCE(*p, v); \
55 } while (0)
56 #endif
57
58 #ifndef smp_load_acquire
59 # define smp_load_acquire(p) \
60 ({ \
61 typeof(*p) ___p1 = READ_ONCE(*p); \
62 smp_mb(); \
63 ___p1; \
64 })
65 #endif