Commit 3d37d939 authored by H. Peter Anvin (Intel)'s avatar H. Peter Anvin (Intel) Committed by Ingo Molnar
Browse files

x86/cpufeatures: Add {REQUIRED,DISABLED} feature configs



Required and disabled feature masks completely rely on build configs,
i.e., once a build config is fixed, so are the feature masks.

To prepare for auto-generating the <asm/cpufeaturemasks.h> header
with required and disabled feature masks based on a build config,
add feature Kconfig items:

  - X86_REQUIRED_FEATURE_x
  - X86_DISABLED_FEATURE_x

each of which may be set to "y" if and only if its preconditions from
current build config are met.

Signed-off-by: default avatarH. Peter Anvin (Intel) <hpa@zytor.com>
Signed-off-by: default avatarXin Li (Intel) <xin@zytor.com>
Signed-off-by: default avatarBorislav Petkov (AMD) <bp@alien8.de>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: https://lore.kernel.org/r/20250228082338.73859-3-xin@zytor.com
parent f666c920
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -3130,4 +3130,6 @@ config HAVE_ATOMIC_IOMAP

source "arch/x86/kvm/Kconfig"

source "arch/x86/Kconfig.cpufeatures"

source "arch/x86/Kconfig.assembler"
+201 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0
#
# x86 feature bits (see arch/x86/include/asm/cpufeatures.h) that are
# either REQUIRED to be enabled, or DISABLED (always ignored) for this
# particular compile-time configuration.  The tests for these features
# are turned into compile-time constants via the generated
# <asm/cpufeaturemasks.h>.
#
# The naming of these variables *must* match asm/cpufeatures.h, e.g.,
#     X86_FEATURE_ALWAYS <==> X86_REQUIRED_FEATURE_ALWAYS
#     X86_FEATURE_FRED   <==> X86_DISABLED_FEATURE_FRED
#
# And these REQUIRED and DISABLED config options are manipulated in an
# AWK script as the following example:
#
#                          +----------------------+
#                          |    X86_FRED = y ?    |
#                          +----------------------+
#                              /             \
#                           Y /               \ N
#  +-------------------------------------+   +-------------------------------+
#  | X86_DISABLED_FEATURE_FRED undefined |   | X86_DISABLED_FEATURE_FRED = y |
#  +-------------------------------------+   +-------------------------------+
#                                                        |
#                                                        |
#     +-------------------------------------------+      |
#     | X86_FEATURE_FRED: feature word 12, bit 17 | ---->|
#     +-------------------------------------------+      |
#                                                        |
#                                                        |
#                                     +-------------------------------+
#                                     | set bit 17 of DISABLED_MASK12 |
#                                     +-------------------------------+
#

config X86_REQUIRED_FEATURE_ALWAYS
	def_bool y

config X86_REQUIRED_FEATURE_NOPL
	def_bool y
	depends on X86_64 || X86_P6_NOP

config X86_REQUIRED_FEATURE_CX8
	def_bool y
	depends on X86_CX8

# this should be set for all -march=.. options where the compiler
# generates cmov.
config X86_REQUIRED_FEATURE_CMOV
	def_bool y
	depends on X86_CMOV

# this should be set for all -march= options where the compiler
# generates movbe.
config X86_REQUIRED_FEATURE_MOVBE
	def_bool y
	depends on MATOM

config X86_REQUIRED_FEATURE_CPUID
	def_bool y
	depends on X86_64

config X86_REQUIRED_FEATURE_UP
	def_bool y
	depends on !SMP

config X86_REQUIRED_FEATURE_FPU
	def_bool y
	depends on !MATH_EMULATION

config X86_REQUIRED_FEATURE_PAE
	def_bool y
	depends on X86_64 || X86_PAE

config X86_REQUIRED_FEATURE_PSE
	def_bool y
	depends on X86_64 && !PARAVIRT_XXL

config X86_REQUIRED_FEATURE_PGE
	def_bool y
	depends on X86_64 && !PARAVIRT_XXL

config X86_REQUIRED_FEATURE_MSR
	def_bool y
	depends on X86_64

config X86_REQUIRED_FEATURE_FXSR
	def_bool y
	depends on X86_64

config X86_REQUIRED_FEATURE_XMM
	def_bool y
	depends on X86_64

config X86_REQUIRED_FEATURE_XMM2
	def_bool y
	depends on X86_64

config X86_REQUIRED_FEATURE_LM
	def_bool y
	depends on X86_64

config X86_DISABLED_FEATURE_UMIP
	def_bool y
	depends on !X86_UMIP

config X86_DISABLED_FEATURE_VME
	def_bool y
	depends on X86_64

config X86_DISABLED_FEATURE_K6_MTRR
	def_bool y
	depends on X86_64

config X86_DISABLED_FEATURE_CYRIX_ARR
	def_bool y
	depends on X86_64

config X86_DISABLED_FEATURE_CENTAUR_MCR
	def_bool y
	depends on X86_64

config X86_DISABLED_FEATURE_PCID
	def_bool y
	depends on !X86_64

config X86_DISABLED_FEATURE_PKU
	def_bool y
	depends on !X86_INTEL_MEMORY_PROTECTION_KEYS

config X86_DISABLED_FEATURE_OSPKE
	def_bool y
	depends on !X86_INTEL_MEMORY_PROTECTION_KEYS

config X86_DISABLED_FEATURE_LA57
	def_bool y
	depends on !X86_5LEVEL

config X86_DISABLED_FEATURE_PTI
	def_bool y
	depends on !MITIGATION_PAGE_TABLE_ISOLATION

config X86_DISABLED_FEATURE_RETPOLINE
	def_bool y
	depends on !MITIGATION_RETPOLINE

config X86_DISABLED_FEATURE_RETPOLINE_LFENCE
	def_bool y
	depends on !MITIGATION_RETPOLINE

config X86_DISABLED_FEATURE_RETHUNK
	def_bool y
	depends on !MITIGATION_RETHUNK

config X86_DISABLED_FEATURE_UNRET
	def_bool y
	depends on !MITIGATION_UNRET_ENTRY

config X86_DISABLED_FEATURE_CALL_DEPTH
	def_bool y
	depends on !MITIGATION_CALL_DEPTH_TRACKING

config X86_DISABLED_FEATURE_LAM
	def_bool y
	depends on !ADDRESS_MASKING

config X86_DISABLED_FEATURE_ENQCMD
	def_bool y
	depends on !INTEL_IOMMU_SVM

config X86_DISABLED_FEATURE_SGX
	def_bool y
	depends on !X86_SGX

config X86_DISABLED_FEATURE_XENPV
	def_bool y
	depends on !XEN_PV

config X86_DISABLED_FEATURE_TDX_GUEST
	def_bool y
	depends on !INTEL_TDX_GUEST

config X86_DISABLED_FEATURE_USER_SHSTK
	def_bool y
	depends on !X86_USER_SHADOW_STACK

config X86_DISABLED_FEATURE_IBT
	def_bool y
	depends on !X86_KERNEL_IBT

config X86_DISABLED_FEATURE_FRED
	def_bool y
	depends on !X86_FRED

config X86_DISABLED_FEATURE_SEV_SNP
	def_bool y
	depends on !KVM_AMD_SEV

config X86_DISABLED_FEATURE_INVLPGB
	def_bool y
	depends on !BROADCAST_TLB_FLUSH