mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 01:53:29 +02:00
LSE atomics have been in the architecture since ARMv8.1 (released in 2014), and are hopefully supported by all modern toolchains. Drop the optional nature of LSE support in the kernel, and always compile the support in, as this really is very little code. LL/SC still is the default, and the switch to LSE is done dynamically. Signed-off-by: Marc Zyngier <maz@kernel.org> Signed-off-by: Will Deacon <will@kernel.org>
29 lines
715 B
C
29 lines
715 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef __ASM_LSE_H
|
|
#define __ASM_LSE_H
|
|
|
|
#include <asm/atomic_ll_sc.h>
|
|
|
|
#define __LSE_PREAMBLE ".arch_extension lse\n"
|
|
|
|
#include <linux/compiler_types.h>
|
|
#include <linux/export.h>
|
|
#include <linux/stringify.h>
|
|
#include <asm/alternative.h>
|
|
#include <asm/alternative-macros.h>
|
|
#include <asm/atomic_lse.h>
|
|
#include <asm/cpucaps.h>
|
|
|
|
#define __lse_ll_sc_body(op, ...) \
|
|
({ \
|
|
alternative_has_cap_likely(ARM64_HAS_LSE_ATOMICS) ? \
|
|
__lse_##op(__VA_ARGS__) : \
|
|
__ll_sc_##op(__VA_ARGS__); \
|
|
})
|
|
|
|
/* In-line patching at runtime */
|
|
#define ARM64_LSE_ATOMIC_INSN(llsc, lse) \
|
|
ALTERNATIVE(llsc, __LSE_PREAMBLE lse, ARM64_HAS_LSE_ATOMICS)
|
|
|
|
#endif /* __ASM_LSE_H */
|