- The biggest change is the rework of the percpu code, to support the 'Named Address Spaces' GCC feature, by Uros Bizjak: - This allows C code to access GS and FS segment relative memory via variables declared with such attributes, which allows the compiler to better optimize those accesses than the previous inline assembly code. - The series also includes a number of micro-optimizations for various percpu access methods, plus a number of cleanups of %gs accesses in assembly code. - These changes have been exposed to linux-next testing for the last ~5 months, with no known regressions in this area. - Fix/clean up __switch_to()'s broken but accidentally working handling of FPU switching - which also generates better code. - Propagate more RIP-relative addressing in assembly code, to generate slightly better code. - Rework the CPU mitigations Kconfig space to be less idiosyncratic, to make it easier for distros to follow & maintain these options. - Rework the x86 idle code to cure RCU violations and to clean up the logic. - Clean up the vDSO Makefile logic. - Misc cleanups and fixes. [ Please note that there's a higher number of merge commits in this branch (three) than is usual in x86 topic trees. This happened due to the long testing lifecycle of the percpu changes that involved 3 merge windows, which generated a longer history and various interactions with other core x86 changes that we felt better about to carry in a single branch. ] Signed-off-by: Ingo Molnar <mingo@kernel.org> -----BEGIN PGP SIGNATURE----- iQJFBAABCgAvFiEEBpT5eoXrXCwVQwEKEnMQ0APhK1gFAmXvB0gRHG1pbmdvQGtl cm5lbC5vcmcACgkQEnMQ0APhK1jUqRAAqnEQPiabF5acQlHrwviX+cjSobDlqtH5 9q2AQy9qaEHapzD0XMOxvFye6XIvehGOGxSPvk6CoviSxBND8rb56lvnsEZuLeBV Bo5QSIL2x42Zrvo11iPHwgXZfTIusU90sBuKDRFkYBAxY3HK2naMDZe8MAsYCUE9 nwgHF8DDc/NYiSOXV8kosWoWpNIkoK/STyH5bvTQZMqZcwyZ49AIeP1jGZb/prbC e/rbnlrq5Eu6brpM7xo9kELO0Vhd34urV14KrrIpdkmUKytW2KIsyvW8D6fqgDBj NSaQLLcz0pCXbhF+8Nqvdh/1coR4L7Ymt08P1rfEjCsQgb/2WnSAGUQuC5JoGzaj ngkbFcZllIbD9gNzMQ1n4Aw5TiO+l9zxCqPC/r58Uuvstr+K9QKlwnp2+B3Q73Ft rojIJ04NJL6lCHdDgwAjTTks+TD2PT/eBWsDfJ/1pnUWttmv9IjMpnXD5sbHxoiU 2RGGKnYbxXczYdq/ALYDWM6JXpfnJZcXL3jJi0IDcCSsb92xRvTANYFHnTfyzGfw EHkhbF4e4Vy9f6QOkSP3CvW5H26BmZS9DKG0J9Il5R3u2lKdfbb5vmtUmVTqHmAD Ulo5cWZjEznlWCAYSI/aIidmBsp9OAEvYd+X7Z5SBIgTfSqV7VWHGt0BfA1heiVv F/mednG0gGc= =3v4F -----END PGP SIGNATURE----- Merge tag 'x86-core-2024-03-11' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip Pull core x86 updates from Ingo Molnar: - The biggest change is the rework of the percpu code, to support the 'Named Address Spaces' GCC feature, by Uros Bizjak: - This allows C code to access GS and FS segment relative memory via variables declared with such attributes, which allows the compiler to better optimize those accesses than the previous inline assembly code. - The series also includes a number of micro-optimizations for various percpu access methods, plus a number of cleanups of %gs accesses in assembly code. - These changes have been exposed to linux-next testing for the last ~5 months, with no known regressions in this area. - Fix/clean up __switch_to()'s broken but accidentally working handling of FPU switching - which also generates better code - Propagate more RIP-relative addressing in assembly code, to generate slightly better code - Rework the CPU mitigations Kconfig space to be less idiosyncratic, to make it easier for distros to follow & maintain these options - Rework the x86 idle code to cure RCU violations and to clean up the logic - Clean up the vDSO Makefile logic - Misc cleanups and fixes * tag 'x86-core-2024-03-11' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (52 commits) x86/idle: Select idle routine only once x86/idle: Let prefer_mwait_c1_over_halt() return bool x86/idle: Cleanup idle_setup() x86/idle: Clean up idle selection x86/idle: Sanitize X86_BUG_AMD_E400 handling sched/idle: Conditionally handle tick broadcast in default_idle_call() x86: Increase brk randomness entropy for 64-bit systems x86/vdso: Move vDSO to mmap region x86/vdso/kbuild: Group non-standard build attributes and primary object file rules together x86/vdso: Fix rethunk patching for vdso-image-{32,64}.o x86/retpoline: Ensure default return thunk isn't used at runtime x86/vdso: Use CONFIG_COMPAT_32 to specify vdso32 x86/vdso: Use $(addprefix ) instead of $(foreach ) x86/vdso: Simplify obj-y addition x86/vdso: Consolidate targets and clean-files x86/bugs: Rename CONFIG_RETHUNK => CONFIG_MITIGATION_RETHUNK x86/bugs: Rename CONFIG_CPU_SRSO => CONFIG_MITIGATION_SRSO x86/bugs: Rename CONFIG_CPU_IBRS_ENTRY => CONFIG_MITIGATION_IBRS_ENTRY x86/bugs: Rename CONFIG_CPU_UNRET_ENTRY => CONFIG_MITIGATION_UNRET_ENTRY x86/bugs: Rename CONFIG_SLS => CONFIG_MITIGATION_SLS ...
160 lines
4.2 KiB
C
160 lines
4.2 KiB
C
#ifndef _ASM_X86_DISABLED_FEATURES_H
|
|
#define _ASM_X86_DISABLED_FEATURES_H
|
|
|
|
/* These features, although they might be available in a CPU
|
|
* will not be used because the compile options to support
|
|
* them are not present.
|
|
*
|
|
* This code allows them to be checked and disabled at
|
|
* compile time without an explicit #ifdef. Use
|
|
* cpu_feature_enabled().
|
|
*/
|
|
|
|
#ifdef CONFIG_X86_UMIP
|
|
# define DISABLE_UMIP 0
|
|
#else
|
|
# define DISABLE_UMIP (1<<(X86_FEATURE_UMIP & 31))
|
|
#endif
|
|
|
|
#ifdef CONFIG_X86_64
|
|
# define DISABLE_VME (1<<(X86_FEATURE_VME & 31))
|
|
# define DISABLE_K6_MTRR (1<<(X86_FEATURE_K6_MTRR & 31))
|
|
# define DISABLE_CYRIX_ARR (1<<(X86_FEATURE_CYRIX_ARR & 31))
|
|
# define DISABLE_CENTAUR_MCR (1<<(X86_FEATURE_CENTAUR_MCR & 31))
|
|
# define DISABLE_PCID 0
|
|
#else
|
|
# define DISABLE_VME 0
|
|
# define DISABLE_K6_MTRR 0
|
|
# define DISABLE_CYRIX_ARR 0
|
|
# define DISABLE_CENTAUR_MCR 0
|
|
# define DISABLE_PCID (1<<(X86_FEATURE_PCID & 31))
|
|
#endif /* CONFIG_X86_64 */
|
|
|
|
#ifdef CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS
|
|
# define DISABLE_PKU 0
|
|
# define DISABLE_OSPKE 0
|
|
#else
|
|
# define DISABLE_PKU (1<<(X86_FEATURE_PKU & 31))
|
|
# define DISABLE_OSPKE (1<<(X86_FEATURE_OSPKE & 31))
|
|
#endif /* CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS */
|
|
|
|
#ifdef CONFIG_X86_5LEVEL
|
|
# define DISABLE_LA57 0
|
|
#else
|
|
# define DISABLE_LA57 (1<<(X86_FEATURE_LA57 & 31))
|
|
#endif
|
|
|
|
#ifdef CONFIG_MITIGATION_PAGE_TABLE_ISOLATION
|
|
# define DISABLE_PTI 0
|
|
#else
|
|
# define DISABLE_PTI (1 << (X86_FEATURE_PTI & 31))
|
|
#endif
|
|
|
|
#ifdef CONFIG_MITIGATION_RETPOLINE
|
|
# define DISABLE_RETPOLINE 0
|
|
#else
|
|
# define DISABLE_RETPOLINE ((1 << (X86_FEATURE_RETPOLINE & 31)) | \
|
|
(1 << (X86_FEATURE_RETPOLINE_LFENCE & 31)))
|
|
#endif
|
|
|
|
#ifdef CONFIG_MITIGATION_RETHUNK
|
|
# define DISABLE_RETHUNK 0
|
|
#else
|
|
# define DISABLE_RETHUNK (1 << (X86_FEATURE_RETHUNK & 31))
|
|
#endif
|
|
|
|
#ifdef CONFIG_MITIGATION_UNRET_ENTRY
|
|
# define DISABLE_UNRET 0
|
|
#else
|
|
# define DISABLE_UNRET (1 << (X86_FEATURE_UNRET & 31))
|
|
#endif
|
|
|
|
#ifdef CONFIG_MITIGATION_CALL_DEPTH_TRACKING
|
|
# define DISABLE_CALL_DEPTH_TRACKING 0
|
|
#else
|
|
# define DISABLE_CALL_DEPTH_TRACKING (1 << (X86_FEATURE_CALL_DEPTH & 31))
|
|
#endif
|
|
|
|
#ifdef CONFIG_ADDRESS_MASKING
|
|
# define DISABLE_LAM 0
|
|
#else
|
|
# define DISABLE_LAM (1 << (X86_FEATURE_LAM & 31))
|
|
#endif
|
|
|
|
#ifdef CONFIG_INTEL_IOMMU_SVM
|
|
# define DISABLE_ENQCMD 0
|
|
#else
|
|
# define DISABLE_ENQCMD (1 << (X86_FEATURE_ENQCMD & 31))
|
|
#endif
|
|
|
|
#ifdef CONFIG_X86_SGX
|
|
# define DISABLE_SGX 0
|
|
#else
|
|
# define DISABLE_SGX (1 << (X86_FEATURE_SGX & 31))
|
|
#endif
|
|
|
|
#ifdef CONFIG_XEN_PV
|
|
# define DISABLE_XENPV 0
|
|
#else
|
|
# define DISABLE_XENPV (1 << (X86_FEATURE_XENPV & 31))
|
|
#endif
|
|
|
|
#ifdef CONFIG_INTEL_TDX_GUEST
|
|
# define DISABLE_TDX_GUEST 0
|
|
#else
|
|
# define DISABLE_TDX_GUEST (1 << (X86_FEATURE_TDX_GUEST & 31))
|
|
#endif
|
|
|
|
#ifdef CONFIG_X86_USER_SHADOW_STACK
|
|
#define DISABLE_USER_SHSTK 0
|
|
#else
|
|
#define DISABLE_USER_SHSTK (1 << (X86_FEATURE_USER_SHSTK & 31))
|
|
#endif
|
|
|
|
#ifdef CONFIG_X86_KERNEL_IBT
|
|
#define DISABLE_IBT 0
|
|
#else
|
|
#define DISABLE_IBT (1 << (X86_FEATURE_IBT & 31))
|
|
#endif
|
|
|
|
#ifdef CONFIG_X86_FRED
|
|
# define DISABLE_FRED 0
|
|
#else
|
|
# define DISABLE_FRED (1 << (X86_FEATURE_FRED & 31))
|
|
#endif
|
|
|
|
#ifdef CONFIG_KVM_AMD_SEV
|
|
#define DISABLE_SEV_SNP 0
|
|
#else
|
|
#define DISABLE_SEV_SNP (1 << (X86_FEATURE_SEV_SNP & 31))
|
|
#endif
|
|
|
|
/*
|
|
* Make sure to add features to the correct mask
|
|
*/
|
|
#define DISABLED_MASK0 (DISABLE_VME)
|
|
#define DISABLED_MASK1 0
|
|
#define DISABLED_MASK2 0
|
|
#define DISABLED_MASK3 (DISABLE_CYRIX_ARR|DISABLE_CENTAUR_MCR|DISABLE_K6_MTRR)
|
|
#define DISABLED_MASK4 (DISABLE_PCID)
|
|
#define DISABLED_MASK5 0
|
|
#define DISABLED_MASK6 0
|
|
#define DISABLED_MASK7 (DISABLE_PTI)
|
|
#define DISABLED_MASK8 (DISABLE_XENPV|DISABLE_TDX_GUEST)
|
|
#define DISABLED_MASK9 (DISABLE_SGX)
|
|
#define DISABLED_MASK10 0
|
|
#define DISABLED_MASK11 (DISABLE_RETPOLINE|DISABLE_RETHUNK|DISABLE_UNRET| \
|
|
DISABLE_CALL_DEPTH_TRACKING|DISABLE_USER_SHSTK)
|
|
#define DISABLED_MASK12 (DISABLE_FRED|DISABLE_LAM)
|
|
#define DISABLED_MASK13 0
|
|
#define DISABLED_MASK14 0
|
|
#define DISABLED_MASK15 0
|
|
#define DISABLED_MASK16 (DISABLE_PKU|DISABLE_OSPKE|DISABLE_LA57|DISABLE_UMIP| \
|
|
DISABLE_ENQCMD)
|
|
#define DISABLED_MASK17 0
|
|
#define DISABLED_MASK18 (DISABLE_IBT)
|
|
#define DISABLED_MASK19 (DISABLE_SEV_SNP)
|
|
#define DISABLED_MASK20 0
|
|
#define DISABLED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 21)
|
|
|
|
#endif /* _ASM_X86_DISABLED_FEATURES_H */
|