mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-14 22:44:27 +08:00
a7f71a2c89
Provide the arm64 compat (AArch32) vDSO in kernel/vdso32 in a similar way to what happens in kernel/vdso. The compat vDSO leverages on an adaptation of the arm architecture code with few changes: - Use of lib/vdso for gettimeofday - Implement a syscall based fallback - Introduce clock_getres() for the compat library - Implement trampolines - Implement elf note To build the compat vDSO a 32 bit compiler is required and needs to be specified via CONFIG_CROSS_COMPILE_COMPAT_VDSO. The code is not yet enabled as other prerequisites are missing. Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Tested-by: Shijith Thotton <sthotton@marvell.com> Tested-by: Andre Przywara <andre.przywara@arm.com> Cc: linux-arch@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org Cc: linux-mips@vger.kernel.org Cc: linux-kselftest@vger.kernel.org Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will.deacon@arm.com> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Russell King <linux@armlinux.org.uk> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Paul Burton <paul.burton@mips.com> Cc: Daniel Lezcano <daniel.lezcano@linaro.org> Cc: Mark Salyzyn <salyzyn@android.com> Cc: Peter Collingbourne <pcc@google.com> Cc: Shuah Khan <shuah@kernel.org> Cc: Dmitry Safonov <0x7f454c46@gmail.com> Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk> Cc: Huw Davies <huw@codeweavers.com> Link: https://lkml.kernel.org/r/20190621095252.32307-11-vincenzo.frascino@arm.com
52 lines
1.1 KiB
C
52 lines
1.1 KiB
C
/* 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
|
|
|
|
#if __LINUX_ARM_ARCH__ >= 7
|
|
#define dmb(option) __asm__ __volatile__ ("dmb " #option : : : "memory")
|
|
#elif __LINUX_ARM_ARCH__ == 6
|
|
#define dmb(x) __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" \
|
|
: : "r" (0) : "memory")
|
|
#else
|
|
#define dmb(x) __asm__ __volatile__ ("" : : : "memory")
|
|
#endif
|
|
|
|
#if __LINUX_ARM_ARCH__ >= 8
|
|
#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 */
|