arm64 fixes and cpucaps.h automatic generation:
- Generate cpucaps.h at build time rather than carrying lots of #defines. Merged at -rc1 to avoid some conflicts during the merging window. - Initialise RGSR_EL1.SEED in __cpu_setup() as it may be left as 0 out of reset and the IRG instruction would not function as expected if only the architected pseudorandom number generator is implemented. - Fix potential race condition in __sync_icache_dcache() where the PG_dcache_clean page flag is set before the actual cache maintenance. - Fix header include in BTI kselftests. -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE5RElWfyWxS+3PLO2a9axLQDIXvEFAmCessIACgkQa9axLQDI XvGjdg/+LftotnrknhA1e0cQiewsMTFWPWAv02KeKZRaJSwpa8jXFIliY+39orFs mLFcvtHqxhmqHNMgr2fz/ggVnHG8SmAnSDdSlefCOV6PO4+jrZWOagniumnd8R3A LcYxEp8Lq5/1Uek0i56SoaBaZHPz4UEXNsv2uRpCAgFYU6Ag6eGsTAz6oS3NIwum K5JXwUSg+Fo2DYiVMa5IAKJi1uCnNeYjC35/0gBKD7Fc/wkqp29lgg3AxGcm6QkG gOFudUHqRD6kPU0mLDDOexO2c3+z4mu3V7aS7zcZebQ3njTgUR4zX3RH79E91sKO KV+eANDkIHH3TUkD790sy6pJ+qsLueF69lAj4dXF7tebO77khRq51ZFxk2viN3iE Y/nI3yK6JAE4PkllATECic1lsrs2KXUHG5kdV8ks+QWNpOwFJ7+WBVbO3bQZgMRM 9wXn1ddOdLk9Z/IFRBiuJKsBsm3k5LEffc8Mlir1L/s98pqbGmq5tsNInVsRwST0 QRppP3BgbWD2zgV2diiLgsakcc08CGpWc7CJYE2FiDm/spqArbRGwfNWC8J/1W7H sWIBr193wMW5kaBc4BGOW9UtOs15HW5UMekU1aTwTAH39064NqjDzkfqDARZwYr/ G3m6aMf1DPue2f9DkaokS/OeKMDoieX31kLWjq1jWWperILTJy4= =TgRX -----END PGP SIGNATURE----- Merge tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux Pull arm64 fixes from Catalin Marinas: "Fixes and cpucaps.h automatic generation: - Generate cpucaps.h at build time rather than carrying lots of #defines. Merged at -rc1 to avoid some conflicts during the merge window. - Initialise RGSR_EL1.SEED in __cpu_setup() as it may be left as 0 out of reset and the IRG instruction would not function as expected if only the architected pseudorandom number generator is implemented. - Fix potential race condition in __sync_icache_dcache() where the PG_dcache_clean page flag is set before the actual cache maintenance. - Fix header include in BTI kselftests" * tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux: arm64: Fix race condition on PG_dcache_clean in __sync_icache_dcache() arm64: tools: Add __ASM_CPUCAPS_H to the endif in cpucaps.h arm64: mte: initialize RGSR_EL1.SEED in __cpu_setup kselftest/arm64: Add missing stddef.h include to BTI tests arm64: Generate cpucaps.h
This commit is contained in:
commit
bd3c9cdb21
|
@ -175,6 +175,9 @@ vdso_install:
|
||||||
$(if $(CONFIG_COMPAT_VDSO), \
|
$(if $(CONFIG_COMPAT_VDSO), \
|
||||||
$(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso32 $@)
|
$(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso32 $@)
|
||||||
|
|
||||||
|
archprepare:
|
||||||
|
$(Q)$(MAKE) $(build)=arch/arm64/tools kapi
|
||||||
|
|
||||||
# We use MRPROPER_FILES and CLEAN_FILES now
|
# We use MRPROPER_FILES and CLEAN_FILES now
|
||||||
archclean:
|
archclean:
|
||||||
$(Q)$(MAKE) $(clean)=$(boot)
|
$(Q)$(MAKE) $(clean)=$(boot)
|
||||||
|
|
|
@ -5,3 +5,5 @@ generic-y += qrwlock.h
|
||||||
generic-y += qspinlock.h
|
generic-y += qspinlock.h
|
||||||
generic-y += set_memory.h
|
generic-y += set_memory.h
|
||||||
generic-y += user.h
|
generic-y += user.h
|
||||||
|
|
||||||
|
generated-y += cpucaps.h
|
||||||
|
|
|
@ -1,74 +0,0 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
||||||
/*
|
|
||||||
* arch/arm64/include/asm/cpucaps.h
|
|
||||||
*
|
|
||||||
* Copyright (C) 2016 ARM Ltd.
|
|
||||||
*/
|
|
||||||
#ifndef __ASM_CPUCAPS_H
|
|
||||||
#define __ASM_CPUCAPS_H
|
|
||||||
|
|
||||||
#define ARM64_WORKAROUND_CLEAN_CACHE 0
|
|
||||||
#define ARM64_WORKAROUND_DEVICE_LOAD_ACQUIRE 1
|
|
||||||
#define ARM64_WORKAROUND_845719 2
|
|
||||||
#define ARM64_HAS_SYSREG_GIC_CPUIF 3
|
|
||||||
#define ARM64_HAS_PAN 4
|
|
||||||
#define ARM64_HAS_LSE_ATOMICS 5
|
|
||||||
#define ARM64_WORKAROUND_CAVIUM_23154 6
|
|
||||||
#define ARM64_WORKAROUND_834220 7
|
|
||||||
#define ARM64_HAS_NO_HW_PREFETCH 8
|
|
||||||
#define ARM64_HAS_VIRT_HOST_EXTN 11
|
|
||||||
#define ARM64_WORKAROUND_CAVIUM_27456 12
|
|
||||||
#define ARM64_HAS_32BIT_EL0 13
|
|
||||||
#define ARM64_SPECTRE_V3A 14
|
|
||||||
#define ARM64_HAS_CNP 15
|
|
||||||
#define ARM64_HAS_NO_FPSIMD 16
|
|
||||||
#define ARM64_WORKAROUND_REPEAT_TLBI 17
|
|
||||||
#define ARM64_WORKAROUND_QCOM_FALKOR_E1003 18
|
|
||||||
#define ARM64_WORKAROUND_858921 19
|
|
||||||
#define ARM64_WORKAROUND_CAVIUM_30115 20
|
|
||||||
#define ARM64_HAS_DCPOP 21
|
|
||||||
#define ARM64_SVE 22
|
|
||||||
#define ARM64_UNMAP_KERNEL_AT_EL0 23
|
|
||||||
#define ARM64_SPECTRE_V2 24
|
|
||||||
#define ARM64_HAS_RAS_EXTN 25
|
|
||||||
#define ARM64_WORKAROUND_843419 26
|
|
||||||
#define ARM64_HAS_CACHE_IDC 27
|
|
||||||
#define ARM64_HAS_CACHE_DIC 28
|
|
||||||
#define ARM64_HW_DBM 29
|
|
||||||
#define ARM64_SPECTRE_V4 30
|
|
||||||
#define ARM64_MISMATCHED_CACHE_TYPE 31
|
|
||||||
#define ARM64_HAS_STAGE2_FWB 32
|
|
||||||
#define ARM64_HAS_CRC32 33
|
|
||||||
#define ARM64_SSBS 34
|
|
||||||
#define ARM64_WORKAROUND_1418040 35
|
|
||||||
#define ARM64_HAS_SB 36
|
|
||||||
#define ARM64_WORKAROUND_SPECULATIVE_AT 37
|
|
||||||
#define ARM64_HAS_ADDRESS_AUTH_ARCH 38
|
|
||||||
#define ARM64_HAS_ADDRESS_AUTH_IMP_DEF 39
|
|
||||||
#define ARM64_HAS_GENERIC_AUTH_ARCH 40
|
|
||||||
#define ARM64_HAS_GENERIC_AUTH_IMP_DEF 41
|
|
||||||
#define ARM64_HAS_IRQ_PRIO_MASKING 42
|
|
||||||
#define ARM64_HAS_DCPODP 43
|
|
||||||
#define ARM64_WORKAROUND_1463225 44
|
|
||||||
#define ARM64_WORKAROUND_CAVIUM_TX2_219_TVM 45
|
|
||||||
#define ARM64_WORKAROUND_CAVIUM_TX2_219_PRFM 46
|
|
||||||
#define ARM64_WORKAROUND_1542419 47
|
|
||||||
#define ARM64_HAS_E0PD 48
|
|
||||||
#define ARM64_HAS_RNG 49
|
|
||||||
#define ARM64_HAS_AMU_EXTN 50
|
|
||||||
#define ARM64_HAS_ADDRESS_AUTH 51
|
|
||||||
#define ARM64_HAS_GENERIC_AUTH 52
|
|
||||||
#define ARM64_HAS_32BIT_EL1 53
|
|
||||||
#define ARM64_BTI 54
|
|
||||||
#define ARM64_HAS_ARMv8_4_TTL 55
|
|
||||||
#define ARM64_HAS_TLB_RANGE 56
|
|
||||||
#define ARM64_MTE 57
|
|
||||||
#define ARM64_WORKAROUND_1508412 58
|
|
||||||
#define ARM64_HAS_LDAPR 59
|
|
||||||
#define ARM64_KVM_PROTECTED_MODE 60
|
|
||||||
#define ARM64_WORKAROUND_NVIDIA_CARMEL_CNP 61
|
|
||||||
#define ARM64_HAS_EPAN 62
|
|
||||||
|
|
||||||
#define ARM64_NCAPS 63
|
|
||||||
|
|
||||||
#endif /* __ASM_CPUCAPS_H */
|
|
|
@ -55,8 +55,10 @@ void __sync_icache_dcache(pte_t pte)
|
||||||
{
|
{
|
||||||
struct page *page = pte_page(pte);
|
struct page *page = pte_page(pte);
|
||||||
|
|
||||||
if (!test_and_set_bit(PG_dcache_clean, &page->flags))
|
if (!test_bit(PG_dcache_clean, &page->flags)) {
|
||||||
sync_icache_aliases(page_address(page), page_size(page));
|
sync_icache_aliases(page_address(page), page_size(page));
|
||||||
|
set_bit(PG_dcache_clean, &page->flags);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(__sync_icache_dcache);
|
EXPORT_SYMBOL_GPL(__sync_icache_dcache);
|
||||||
|
|
||||||
|
|
|
@ -447,6 +447,18 @@ SYM_FUNC_START(__cpu_setup)
|
||||||
mov x10, #(SYS_GCR_EL1_RRND | SYS_GCR_EL1_EXCL_MASK)
|
mov x10, #(SYS_GCR_EL1_RRND | SYS_GCR_EL1_EXCL_MASK)
|
||||||
msr_s SYS_GCR_EL1, x10
|
msr_s SYS_GCR_EL1, x10
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If GCR_EL1.RRND=1 is implemented the same way as RRND=0, then
|
||||||
|
* RGSR_EL1.SEED must be non-zero for IRG to produce
|
||||||
|
* pseudorandom numbers. As RGSR_EL1 is UNKNOWN out of reset, we
|
||||||
|
* must initialize it.
|
||||||
|
*/
|
||||||
|
mrs x10, CNTVCT_EL0
|
||||||
|
ands x10, x10, #SYS_RGSR_EL1_SEED_MASK
|
||||||
|
csinc x10, x10, xzr, ne
|
||||||
|
lsl x10, x10, #SYS_RGSR_EL1_SEED_SHIFT
|
||||||
|
msr_s SYS_RGSR_EL1, x10
|
||||||
|
|
||||||
/* clear any pending tag check faults in TFSR*_EL1 */
|
/* clear any pending tag check faults in TFSR*_EL1 */
|
||||||
msr_s SYS_TFSR_EL1, xzr
|
msr_s SYS_TFSR_EL1, xzr
|
||||||
msr_s SYS_TFSRE0_EL1, xzr
|
msr_s SYS_TFSRE0_EL1, xzr
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
gen := arch/$(ARCH)/include/generated
|
||||||
|
kapi := $(gen)/asm
|
||||||
|
|
||||||
|
kapi-hdrs-y := $(kapi)/cpucaps.h
|
||||||
|
|
||||||
|
targets += $(addprefix ../../../,$(gen-y) $(kapi-hdrs-y))
|
||||||
|
|
||||||
|
PHONY += kapi
|
||||||
|
|
||||||
|
kapi: $(kapi-hdrs-y) $(gen-y)
|
||||||
|
|
||||||
|
# Create output directory if not already present
|
||||||
|
_dummy := $(shell [ -d '$(kapi)' ] || mkdir -p '$(kapi)')
|
||||||
|
|
||||||
|
quiet_cmd_gen_cpucaps = GEN $@
|
||||||
|
cmd_gen_cpucaps = mkdir -p $(dir $@) && \
|
||||||
|
$(AWK) -f $(filter-out $(PHONY),$^) > $@
|
||||||
|
|
||||||
|
$(kapi)/cpucaps.h: $(src)/gen-cpucaps.awk $(src)/cpucaps FORCE
|
||||||
|
$(call if_changed,gen_cpucaps)
|
|
@ -0,0 +1,65 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
#
|
||||||
|
# Internal CPU capabilities constants, keep this list sorted
|
||||||
|
|
||||||
|
BTI
|
||||||
|
HAS_32BIT_EL0
|
||||||
|
HAS_32BIT_EL1
|
||||||
|
HAS_ADDRESS_AUTH
|
||||||
|
HAS_ADDRESS_AUTH_ARCH
|
||||||
|
HAS_ADDRESS_AUTH_IMP_DEF
|
||||||
|
HAS_AMU_EXTN
|
||||||
|
HAS_ARMv8_4_TTL
|
||||||
|
HAS_CACHE_DIC
|
||||||
|
HAS_CACHE_IDC
|
||||||
|
HAS_CNP
|
||||||
|
HAS_CRC32
|
||||||
|
HAS_DCPODP
|
||||||
|
HAS_DCPOP
|
||||||
|
HAS_E0PD
|
||||||
|
HAS_EPAN
|
||||||
|
HAS_GENERIC_AUTH
|
||||||
|
HAS_GENERIC_AUTH_ARCH
|
||||||
|
HAS_GENERIC_AUTH_IMP_DEF
|
||||||
|
HAS_IRQ_PRIO_MASKING
|
||||||
|
HAS_LDAPR
|
||||||
|
HAS_LSE_ATOMICS
|
||||||
|
HAS_NO_FPSIMD
|
||||||
|
HAS_NO_HW_PREFETCH
|
||||||
|
HAS_PAN
|
||||||
|
HAS_RAS_EXTN
|
||||||
|
HAS_RNG
|
||||||
|
HAS_SB
|
||||||
|
HAS_STAGE2_FWB
|
||||||
|
HAS_SYSREG_GIC_CPUIF
|
||||||
|
HAS_TLB_RANGE
|
||||||
|
HAS_VIRT_HOST_EXTN
|
||||||
|
HW_DBM
|
||||||
|
KVM_PROTECTED_MODE
|
||||||
|
MISMATCHED_CACHE_TYPE
|
||||||
|
MTE
|
||||||
|
SPECTRE_V2
|
||||||
|
SPECTRE_V3A
|
||||||
|
SPECTRE_V4
|
||||||
|
SSBS
|
||||||
|
SVE
|
||||||
|
UNMAP_KERNEL_AT_EL0
|
||||||
|
WORKAROUND_834220
|
||||||
|
WORKAROUND_843419
|
||||||
|
WORKAROUND_845719
|
||||||
|
WORKAROUND_858921
|
||||||
|
WORKAROUND_1418040
|
||||||
|
WORKAROUND_1463225
|
||||||
|
WORKAROUND_1508412
|
||||||
|
WORKAROUND_1542419
|
||||||
|
WORKAROUND_CAVIUM_23154
|
||||||
|
WORKAROUND_CAVIUM_27456
|
||||||
|
WORKAROUND_CAVIUM_30115
|
||||||
|
WORKAROUND_CAVIUM_TX2_219_PRFM
|
||||||
|
WORKAROUND_CAVIUM_TX2_219_TVM
|
||||||
|
WORKAROUND_CLEAN_CACHE
|
||||||
|
WORKAROUND_DEVICE_LOAD_ACQUIRE
|
||||||
|
WORKAROUND_NVIDIA_CARMEL_CNP
|
||||||
|
WORKAROUND_QCOM_FALKOR_E1003
|
||||||
|
WORKAROUND_REPEAT_TLBI
|
||||||
|
WORKAROUND_SPECULATIVE_AT
|
|
@ -0,0 +1,40 @@
|
||||||
|
#!/bin/awk -f
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
# gen-cpucaps.awk: arm64 cpucaps header generator
|
||||||
|
#
|
||||||
|
# Usage: awk -f gen-cpucaps.awk cpucaps.txt
|
||||||
|
|
||||||
|
# Log an error and terminate
|
||||||
|
function fatal(msg) {
|
||||||
|
print "Error at line " NR ": " msg > "/dev/stderr"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# skip blank lines and comment lines
|
||||||
|
/^$/ { next }
|
||||||
|
/^#/ { next }
|
||||||
|
|
||||||
|
BEGIN {
|
||||||
|
print "#ifndef __ASM_CPUCAPS_H"
|
||||||
|
print "#define __ASM_CPUCAPS_H"
|
||||||
|
print ""
|
||||||
|
print "/* Generated file - do not edit */"
|
||||||
|
cap_num = 0
|
||||||
|
print ""
|
||||||
|
}
|
||||||
|
|
||||||
|
/^[vA-Z0-9_]+$/ {
|
||||||
|
printf("#define ARM64_%-30s\t%d\n", $0, cap_num++)
|
||||||
|
next
|
||||||
|
}
|
||||||
|
|
||||||
|
END {
|
||||||
|
printf("#define ARM64_NCAPS\t\t\t\t%d\n", cap_num)
|
||||||
|
print ""
|
||||||
|
print "#endif /* __ASM_CPUCAPS_H */"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Any lines not handled by previous rules are unexpected
|
||||||
|
{
|
||||||
|
fatal("unhandled statement")
|
||||||
|
}
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
#include "system.h"
|
#include "system.h"
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <linux/auxvec.h>
|
#include <linux/auxvec.h>
|
||||||
#include <linux/signal.h>
|
#include <linux/signal.h>
|
||||||
|
|
Loading…
Reference in New Issue