| .. | .. |
|---|
| 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 |
|---|