Messages in this thread | | | From | "Xin Li (Intel)" <> | Subject | [RESEND v1 0/3] x86/cpufeatures: Automatically generate required and disabled feature masks | Date | Thu, 9 May 2024 13:53:37 -0700 |
| |
This is a rebase and resend of: https://lore.kernel.org/lkml/20240201054629.3816748-1-xin@zytor.com/.
The x86 build process first generates required and disabled feature masks based on current build config, and then uses these generated masks to compile the source code. When a CPU feature is not enabled in a build config, e.g., when CONFIG_X86_FRED=n, its feature disable flag, i.e., DISABLE_FRED, needs to be properly defined and added to a specific disabled CPU features mask in <asm/disabled-features.h>, as the following patch does: https://lore.kernel.org/all/20231205105030.8698-8-xin3.li@intel.com/. As a result, the FRED feature bit is surely cleared in the generated kernel binary when CONFIG_X86_FRED=n.
Recently there is another case to repeat the same exercise for the AMD SEV-SNP CPU feature: https://lore.kernel.org/all/20240126041126.1927228-2-michael.roth@amd.com/. https://lore.kernel.org/all/20240126041126.1927228-23-michael.roth@amd.com/.
It was one thing when there were four of CPU feature masks, but with over 20 it is going to cause mistakes, e.g., https://lore.kernel.org/lkml/aaed79d5-d683-d1bc-7ba1-b33c8d6db618@suse.com/.
We want to eliminate the stupidly repeated exercise to manually assign features to CPU feature words through introducing an AWK script to automatically generate a header with required and disabled CPU feature masks based on current build config, and this patch set does that.
H. Peter Anvin (Intel) (2): x86/cpufeatures: Add {required,disabled} feature configs x86/cpufeatures: Generate a feature mask header based on build config
Xin Li (Intel) (1): x86/cpufeatures: Remove {disabled,required}-features.h
arch/x86/Kconfig | 4 +- arch/x86/Kconfig.cpu | 16 +- arch/x86/Kconfig.cpufeatures | 153 +++++++++++++++++ arch/x86/Makefile | 17 +- arch/x86/boot/cpucheck.c | 3 +- arch/x86/boot/cpuflags.c | 1 - arch/x86/boot/mkcpustr.c | 3 +- arch/x86/include/asm/Kbuild | 1 + arch/x86/include/asm/asm-prototypes.h | 2 +- arch/x86/include/asm/atomic64_32.h | 2 +- arch/x86/include/asm/bitops.h | 4 +- arch/x86/include/asm/cmpxchg_32.h | 2 +- arch/x86/include/asm/cpufeature.h | 1 + arch/x86/include/asm/cpufeatures.h | 8 - arch/x86/include/asm/disabled-features.h | 161 ------------------ arch/x86/include/asm/required-features.h | 105 ------------ arch/x86/kernel/verify_cpu.S | 1 + arch/x86/lib/Makefile | 2 +- arch/x86/lib/cmpxchg8b_emu.S | 2 +- arch/x86/tools/featuremasks.awk | 108 ++++++++++++ lib/atomic64_test.c | 2 +- tools/arch/x86/include/asm/cpufeatures.h | 8 - .../arch/x86/include/asm/disabled-features.h | 161 ------------------ .../arch/x86/include/asm/required-features.h | 105 ------------ tools/perf/check-headers.sh | 2 - 25 files changed, 306 insertions(+), 568 deletions(-) create mode 100644 arch/x86/Kconfig.cpufeatures delete mode 100644 arch/x86/include/asm/disabled-features.h delete mode 100644 arch/x86/include/asm/required-features.h create mode 100755 arch/x86/tools/featuremasks.awk delete mode 100644 tools/arch/x86/include/asm/disabled-features.h delete mode 100644 tools/arch/x86/include/asm/required-features.h
base-commit: c064e5cb8336a5ee3471cc6a376cc19e19aa85de -- 2.45.0
| |