]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
09d62154 | 2 | #include <linux/compiler.h> |
361c564e ACM |
3 | #if defined(__i386__) || defined(__x86_64__) |
4 | #include "../../arch/x86/include/asm/barrier.h" | |
4f3db074 ACM |
5 | #elif defined(__arm__) |
6 | #include "../../arch/arm/include/asm/barrier.h" | |
7 | #elif defined(__aarch64__) | |
8 | #include "../../arch/arm64/include/asm/barrier.h" | |
e43a19c9 ACM |
9 | #elif defined(__powerpc__) |
10 | #include "../../arch/powerpc/include/asm/barrier.h" | |
07d207ac ACM |
11 | #elif defined(__s390__) |
12 | #include "../../arch/s390/include/asm/barrier.h" | |
827634ad ACM |
13 | #elif defined(__sh__) |
14 | #include "../../arch/sh/include/asm/barrier.h" | |
94cdda6b ACM |
15 | #elif defined(__sparc__) |
16 | #include "../../arch/sparc/include/asm/barrier.h" | |
d3bd7081 ACM |
17 | #elif defined(__tile__) |
18 | #include "../../arch/tile/include/asm/barrier.h" | |
0da85d1e ACM |
19 | #elif defined(__alpha__) |
20 | #include "../../arch/alpha/include/asm/barrier.h" | |
e2164f04 ACM |
21 | #elif defined(__mips__) |
22 | #include "../../arch/mips/include/asm/barrier.h" | |
163e589d ACM |
23 | #elif defined(__ia64__) |
24 | #include "../../arch/ia64/include/asm/barrier.h" | |
3d3337de ACM |
25 | #elif defined(__xtensa__) |
26 | #include "../../arch/xtensa/include/asm/barrier.h" | |
ebd09753 N |
27 | #elif defined(__nds32__) |
28 | #include "../../arch/nds32/include/asm/barrier.h" | |
42b09d7b ACM |
29 | #else |
30 | #include <asm-generic/barrier.h> | |
361c564e | 31 | #endif |
09d62154 DB |
32 | |
33 | /* | |
34 | * Generic fallback smp_*() definitions for archs that haven't | |
35 | * been updated yet. | |
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 |