提交 9e556dcc 编写于 作者: W Will Deacon 提交者: Zeng Heng

arm64: cpufeatures: Add capability for LDAPR instruction

mainline inclusion
from mainline-v5.11-rc1
commit 364a5a8a
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I7LP2Z

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=364a5a8ae8dc2dd457e2fefb4da3f3fd2c0ba8b1

---------------------------

Armv8.3 introduced the LDAPR instruction, which provides weaker memory
ordering semantics than LDARi (RCpc vs RCsc). Generally, we provide an
RCsc implementation when implementing the Linux memory model, but LDAPR
can be used as a useful alternative to dependency ordering, particularly
when the compiler is capable of breaking the dependencies.

Since LDAPR is not available on all CPUs, add a cpufeature to detect it at
runtime and allow the instruction to be used with alternative code
patching.
Acked-by: NPeter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: NMark Rutland <mark.rutland@arm.com>
Signed-off-by: NWill Deacon <will@kernel.org>

conflict:
	arch/arm64/Kconfig
	arch/arm64/include/asm/cpucaps.h
	arch/arm64/kernel/cpufeature.c
Signed-off-by: NZeng Heng <zengheng4@huawei.com>
上级 9675e654
......@@ -510,7 +510,7 @@ config ARM64_ERRATUM_1742098
are only present if the cryptography extensions are present.
All software should have a fallback implementation for CPUs
that don't implement the cryptography extensions.
If unsure, say Y.
config ARM64_ERRATUM_845719
......@@ -1737,6 +1737,9 @@ config AS_HAS_PAC
config AS_HAS_CFI_NEGATE_RA_STATE
def_bool $(as-instr,.cfi_startproc\n.cfi_negate_ra_state\n.cfi_endproc\n)
config AS_HAS_LDAPR
def_bool $(as-instr,.arch_extension rcpc)
endmenu
menu "ARMv8.4 architectural features"
......
......@@ -75,6 +75,7 @@
#define ARM64_WORKAROUND_1742098 67
#define ARM64_HAS_WFXT 68
#define ARM64_WORKAROUND_HISILICON_ERRATUM_162100125 69
#define ARM64_HAS_LDAPR 70
#define ARM64_NCAPS 80
......
......@@ -2285,6 +2285,16 @@ static const struct arm64_cpu_capabilities arm64_features[] = {
.matches = has_cpuid_feature,
.min_field_value = ID_AA64ISAR2_WFXT_SUPPORTED,
},
{
.desc = "RCpc load-acquire (LDAPR)",
.capability = ARM64_HAS_LDAPR,
.type = ARM64_CPUCAP_SYSTEM_FEATURE,
.sys_reg = SYS_ID_AA64ISAR1_EL1,
.sign = FTR_UNSIGNED,
.field_pos = ID_AA64ISAR1_LRCPC_SHIFT,
.matches = has_cpuid_feature,
.min_field_value = 1,
},
{},
};
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册
新手
引导
客服 返回
顶部