GNU Linux-libre 6.8.7-gnu
[releases.git] / tools / include / asm / barrier.h
1 /* SPDX-License-Identifier: GPL-2.0 */
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 #else
28 #include <asm-generic/barrier.h>
29 #endif
30
31 /*
32  * Generic fallback smp_*() definitions for archs that haven't
33  * been updated yet.
34  */
35
36 #ifndef smp_rmb
37 # define smp_rmb()      rmb()
38 #endif
39
40 #ifndef smp_wmb
41 # define smp_wmb()      wmb()
42 #endif
43
44 #ifndef smp_mb
45 # define smp_mb()       mb()
46 #endif
47
48 #ifndef smp_store_release
49 # define smp_store_release(p, v)                \
50 do {                                            \
51         smp_mb();                               \
52         WRITE_ONCE(*p, v);                      \
53 } while (0)
54 #endif
55
56 #ifndef smp_load_acquire
57 # define smp_load_acquire(p)                    \
58 ({                                              \
59         typeof(*p) ___p1 = READ_ONCE(*p);       \
60         smp_mb();                               \
61         ___p1;                                  \
62 })
63 #endif