1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * Copyright (C) 2018 ARM Limited 4 */ 5#ifndef __COMPAT_BARRIER_H 6#define __COMPAT_BARRIER_H 7 8#ifndef __ASSEMBLY__ 9/* 10 * Warning: This code is meant to be used with 11 * ENABLE_COMPAT_VDSO only. 12 */ 13#ifndef ENABLE_COMPAT_VDSO 14#error This header is meant to be used with ENABLE_COMPAT_VDSO only 15#endif 16 17#ifdef dmb 18#undef dmb 19#endif 20 21#define dmb(option) __asm__ __volatile__ ("dmb " #option : : : "memory") 22 23#if __LINUX_ARM_ARCH__ >= 8 && defined(CONFIG_AS_DMB_ISHLD) 24#define aarch32_smp_mb() dmb(ish) 25#define aarch32_smp_rmb() dmb(ishld) 26#define aarch32_smp_wmb() dmb(ishst) 27#else 28#define aarch32_smp_mb() dmb(ish) 29#define aarch32_smp_rmb() aarch32_smp_mb() 30#define aarch32_smp_wmb() dmb(ishst) 31#endif 32 33 34#undef smp_mb 35#undef smp_rmb 36#undef smp_wmb 37 38#define smp_mb() aarch32_smp_mb() 39#define smp_rmb() aarch32_smp_rmb() 40#define smp_wmb() aarch32_smp_wmb() 41 42#endif /* !__ASSEMBLY__ */ 43 44#endif /* __COMPAT_BARRIER_H */ 45