0001
0002 #include <linux/compiler.h>
0003 #if defined(__i386__) || defined(__x86_64__)
0004 #include "../../arch/x86/include/asm/barrier.h"
0005 #elif defined(__arm__)
0006 #include "../../arch/arm/include/asm/barrier.h"
0007 #elif defined(__aarch64__)
0008 #include "../../arch/arm64/include/asm/barrier.h"
0009 #elif defined(__powerpc__)
0010 #include "../../arch/powerpc/include/asm/barrier.h"
0011 #elif defined(__s390__)
0012 #include "../../arch/s390/include/asm/barrier.h"
0013 #elif defined(__sh__)
0014 #include "../../arch/sh/include/asm/barrier.h"
0015 #elif defined(__sparc__)
0016 #include "../../arch/sparc/include/asm/barrier.h"
0017 #elif defined(__tile__)
0018 #include "../../arch/tile/include/asm/barrier.h"
0019 #elif defined(__alpha__)
0020 #include "../../arch/alpha/include/asm/barrier.h"
0021 #elif defined(__mips__)
0022 #include "../../arch/mips/include/asm/barrier.h"
0023 #elif defined(__ia64__)
0024 #include "../../arch/ia64/include/asm/barrier.h"
0025 #elif defined(__xtensa__)
0026 #include "../../arch/xtensa/include/asm/barrier.h"
0027 #else
0028 #include <asm-generic/barrier.h>
0029 #endif
0030
0031
0032
0033
0034
0035
0036 #ifndef smp_rmb
0037 # define smp_rmb() rmb()
0038 #endif
0039
0040 #ifndef smp_wmb
0041 # define smp_wmb() wmb()
0042 #endif
0043
0044 #ifndef smp_mb
0045 # define smp_mb() mb()
0046 #endif
0047
0048 #ifndef smp_store_release
0049 # define smp_store_release(p, v) \
0050 do { \
0051 smp_mb(); \
0052 WRITE_ONCE(*p, v); \
0053 } while (0)
0054 #endif
0055
0056 #ifndef smp_load_acquire
0057 # define smp_load_acquire(p) \
0058 ({ \
0059 typeof(*p) ___p1 = READ_ONCE(*p); \
0060 smp_mb(); \
0061 ___p1; \
0062 })
0063 #endif