0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef __TOOLS_LINUX_ASM_BARRIER_H
0011 #define __TOOLS_LINUX_ASM_BARRIER_H
0012
0013
0014
0015
0016
0017
0018
0019 #ifdef CONFIG_HAVE_MARCH_Z196_FEATURES
0020
0021 #define __ASM_BARRIER "bcr 14,0\n"
0022 #else
0023 #define __ASM_BARRIER "bcr 15,0\n"
0024 #endif
0025
0026 #define mb() do { asm volatile(__ASM_BARRIER : : : "memory"); } while (0)
0027
0028 #define rmb() mb()
0029 #define wmb() mb()
0030
0031 #define smp_store_release(p, v) \
0032 do { \
0033 barrier(); \
0034 WRITE_ONCE(*p, v); \
0035 } while (0)
0036
0037 #define smp_load_acquire(p) \
0038 ({ \
0039 typeof(*p) ___p1 = READ_ONCE(*p); \
0040 barrier(); \
0041 ___p1; \
0042 })
0043
0044 #endif