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#elif defined(__nds32__) 28#include "../../arch/nds32/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) \ 52do { \ 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