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(__riscv) 12 #include "../../arch/riscv/include/asm/barrier.h" 13 #elif defined(__s390__) 14 #include "../../arch/s390/include/asm/barrier.h" 15 #elif defined(__sh__) 16 #include "../../arch/sh/include/asm/barrier.h" 17 #elif defined(__sparc__) 18 #include "../../arch/sparc/include/asm/barrier.h" 19 #elif defined(__tile__) 20 #include "../../arch/tile/include/asm/barrier.h" 21 #elif defined(__alpha__) 22 #include "../../arch/alpha/include/asm/barrier.h" 23 #elif defined(__mips__) 24 #include "../../arch/mips/include/asm/barrier.h" 25 #elif defined(__ia64__) 26 #include "../../arch/ia64/include/asm/barrier.h" 27 #elif defined(__xtensa__) 28 #include "../../arch/xtensa/include/asm/barrier.h" 29 #else 30 #include <asm-generic/barrier.h> 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 66