/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (C) 2018 ARM Limited */ #ifndef __COMPAT_BARRIER_H #define __COMPAT_BARRIER_H #ifndef __ASSEMBLY__ /* * Warning: This code is meant to be used with * ENABLE_COMPAT_VDSO only. */ #ifndef ENABLE_COMPAT_VDSO #error This header is meant to be used with ENABLE_COMPAT_VDSO only #endif #ifdef dmb #undef dmb #endif #define dmb(option) __asm__ __volatile__ ("dmb " #option : : : "memory") #if __LINUX_ARM_ARCH__ >= 8 && defined(CONFIG_AS_DMB_ISHLD) #define aarch32_smp_mb() dmb(ish) #define aarch32_smp_rmb() dmb(ishld) #define aarch32_smp_wmb() dmb(ishst) #else #define aarch32_smp_mb() dmb(ish) #define aarch32_smp_rmb() aarch32_smp_mb() #define aarch32_smp_wmb() dmb(ishst) #endif #undef smp_mb #undef smp_rmb #undef smp_wmb #define smp_mb() aarch32_smp_mb() #define smp_rmb() aarch32_smp_rmb() #define smp_wmb() aarch32_smp_wmb() #endif /* !__ASSEMBLY__ */ #endif /* __COMPAT_BARRIER_H */ |