.. | .. |
---|
1 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
---|
| 2 | +#include <linux/compiler.h> |
---|
2 | 3 | #if defined(__i386__) || defined(__x86_64__) |
---|
3 | 4 | #include "../../arch/x86/include/asm/barrier.h" |
---|
4 | 5 | #elif defined(__arm__) |
---|
.. | .. |
---|
23 | 24 | #include "../../arch/ia64/include/asm/barrier.h" |
---|
24 | 25 | #elif defined(__xtensa__) |
---|
25 | 26 | #include "../../arch/xtensa/include/asm/barrier.h" |
---|
| 27 | +#elif defined(__nds32__) |
---|
| 28 | +#include "../../arch/nds32/include/asm/barrier.h" |
---|
26 | 29 | #else |
---|
27 | 30 | #include <asm-generic/barrier.h> |
---|
28 | 31 | #endif |
---|
| 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 |
---|