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 64