[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240628174544.3118826-1-xin@zytor.com>
Date: Fri, 28 Jun 2024 10:45:40 -0700
From: "Xin Li (Intel)" <xin@...or.com>
To: linux-kernel@...r.kernel.org, linux-perf-users@...r.kernel.org
Cc: tglx@...utronix.de, mingo@...hat.com, bp@...en8.de,
dave.hansen@...ux.intel.com, x86@...nel.org, hpa@...or.com,
will@...nel.org, peterz@...radead.org, akpm@...ux-foundation.org,
acme@...nel.org, namhyung@...nel.org, brgerst@...il.com,
andrew.cooper3@...rix.com, nik.borisov@...e.com
Subject: [PATCH v4 0/4] x86/cpufeatures: Automatically generate required and disabled feature masks
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.
Link to v3:
https://lore.kernel.org/lkml/20240622171435.3725548-1-xin@zytor.com/
Changes since v3:
* Add a few high-level comments to the AWK script (Nikolay Borisov).
* Use '1U' instead of '1' in feature mask shifting (Andrew Cooper).
* Checking NCAPINTS isn't necessary anymore. It was needed when these
macros had to be manually updated, but now if cpufeatures.h changes
this header will be regenerated (Brian Gerst).
* Enforce CPU feature mask values to be unsigned.
Changes since v2:
* Remove AWK code that generates extra debugging comments (Brian Gerst).
* Move SSE_MASK to verify_cpu.S, the only place it is used (Brian Gerst).
* Add a patch to generate macros {REQUIRED|DISABLED}_MASK_BIT_SET in the
new AWK script (Brian Gerst).
Changes since v1:
* Keep the X86_{REQUIRED,DISABLED}_FEATURE_ prefixes solely in
arch/x86/Kconfig.cpufeatures (Borislav Petkov).
* Explain how config option names X86_{REQUIRED,DISABLED}_FEATURE_<name>
are formed (Borislav Petkov).
* Remove code generating unused macros {REQUIRED,DISABLED}_FEATURE(x)
to tell if a CPU feature, e.g., X86_FEATURE_FRED, is a required or
disabled feature for this particular compile-time configuration.
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) (2):
x86/cpufeatures: Remove {disabled,required}-features.h
x86/cpufeatures: Use AWK to generate {REQUIRED|DISABLED}_MASK_BIT_SET
arch/x86/Kconfig | 4 +-
arch/x86/Kconfig.cpu | 12 +-
arch/x86/Kconfig.cpufeatures | 197 ++++++++++++++++++
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 | 70 +------
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 | 4 +
arch/x86/lib/Makefile | 2 +-
arch/x86/lib/cmpxchg8b_emu.S | 2 +-
arch/x86/tools/featuremasks.awk | 92 ++++++++
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, 325 insertions(+), 645 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: f6a465a2d29701aa1a5189cae63a6870b65cef48
--
2.45.2
Powered by blists - more mailing lists