1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #include <linux/compiler.h> 3*4882a593Smuzhiyun #if defined(__i386__) || defined(__x86_64__) 4*4882a593Smuzhiyun #include "../../arch/x86/include/asm/barrier.h" 5*4882a593Smuzhiyun #elif defined(__arm__) 6*4882a593Smuzhiyun #include "../../arch/arm/include/asm/barrier.h" 7*4882a593Smuzhiyun #elif defined(__aarch64__) 8*4882a593Smuzhiyun #include "../../arch/arm64/include/asm/barrier.h" 9*4882a593Smuzhiyun #elif defined(__powerpc__) 10*4882a593Smuzhiyun #include "../../arch/powerpc/include/asm/barrier.h" 11*4882a593Smuzhiyun #elif defined(__s390__) 12*4882a593Smuzhiyun #include "../../arch/s390/include/asm/barrier.h" 13*4882a593Smuzhiyun #elif defined(__sh__) 14*4882a593Smuzhiyun #include "../../arch/sh/include/asm/barrier.h" 15*4882a593Smuzhiyun #elif defined(__sparc__) 16*4882a593Smuzhiyun #include "../../arch/sparc/include/asm/barrier.h" 17*4882a593Smuzhiyun #elif defined(__tile__) 18*4882a593Smuzhiyun #include "../../arch/tile/include/asm/barrier.h" 19*4882a593Smuzhiyun #elif defined(__alpha__) 20*4882a593Smuzhiyun #include "../../arch/alpha/include/asm/barrier.h" 21*4882a593Smuzhiyun #elif defined(__mips__) 22*4882a593Smuzhiyun #include "../../arch/mips/include/asm/barrier.h" 23*4882a593Smuzhiyun #elif defined(__ia64__) 24*4882a593Smuzhiyun #include "../../arch/ia64/include/asm/barrier.h" 25*4882a593Smuzhiyun #elif defined(__xtensa__) 26*4882a593Smuzhiyun #include "../../arch/xtensa/include/asm/barrier.h" 27*4882a593Smuzhiyun #elif defined(__nds32__) 28*4882a593Smuzhiyun #include "../../arch/nds32/include/asm/barrier.h" 29*4882a593Smuzhiyun #else 30*4882a593Smuzhiyun #include <asm-generic/barrier.h> 31*4882a593Smuzhiyun #endif 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun /* 34*4882a593Smuzhiyun * Generic fallback smp_*() definitions for archs that haven't 35*4882a593Smuzhiyun * been updated yet. 36*4882a593Smuzhiyun */ 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun #ifndef smp_rmb 39*4882a593Smuzhiyun # define smp_rmb() rmb() 40*4882a593Smuzhiyun #endif 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun #ifndef smp_wmb 43*4882a593Smuzhiyun # define smp_wmb() wmb() 44*4882a593Smuzhiyun #endif 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun #ifndef smp_mb 47*4882a593Smuzhiyun # define smp_mb() mb() 48*4882a593Smuzhiyun #endif 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun #ifndef smp_store_release 51*4882a593Smuzhiyun # define smp_store_release(p, v) \ 52*4882a593Smuzhiyun do { \ 53*4882a593Smuzhiyun smp_mb(); \ 54*4882a593Smuzhiyun WRITE_ONCE(*p, v); \ 55*4882a593Smuzhiyun } while (0) 56*4882a593Smuzhiyun #endif 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun #ifndef smp_load_acquire 59*4882a593Smuzhiyun # define smp_load_acquire(p) \ 60*4882a593Smuzhiyun ({ \ 61*4882a593Smuzhiyun typeof(*p) ___p1 = READ_ONCE(*p); \ 62*4882a593Smuzhiyun smp_mb(); \ 63*4882a593Smuzhiyun ___p1; \ 64*4882a593Smuzhiyun }) 65*4882a593Smuzhiyun #endif 66