Skip to content

Commit

Permalink
x86/cpufeatures: Add {REQUIRED,DISABLED} feature configs
Browse files Browse the repository at this point in the history
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: H. Peter Anvin (Intel) <hpa@zytor.com>
Signed-off-by: Xin Li (Intel) <xin@zytor.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: https://lore.kernel.org/r/20250228082338.73859-3-xin@zytor.com
  • Loading branch information
H. Peter Anvin (Intel) authored and Ingo Molnar committed Mar 19, 2025
1 parent f666c92 commit 3d37d93
Show file tree
Hide file tree
Showing 2 changed files with 203 additions and 0 deletions.
2 changes: 2 additions & 0 deletions arch/x86/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -3130,4 +3130,6 @@ config HAVE_ATOMIC_IOMAP

source "arch/x86/kvm/Kconfig"

source "arch/x86/Kconfig.cpufeatures"

source "arch/x86/Kconfig.assembler"
201 changes: 201 additions & 0 deletions arch/x86/Kconfig.cpufeatures
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
# 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

0 comments on commit 3d37d93

Please sign in to comment.