From: Prarit Bhargava <prarit(a)redhat.com>
arch/x86: mark x86_64-v1 and x86_64-v2 processors as deprecated
Upstream Status: RHEL only
The x86 industry has defined microarchitecture levels x86_64-v1 and
x86_64-v2 as defined here:
https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels
RHEL9 has a minimum of the x86_64-v2 microarchitecture and RHEL10 has a
minimum of the x86_64-v3 microarchitecture.
Mark x86_64-v1 and x86_64-v2 processors as deprecated.
Signed-off-by: Prarit Bhargava <prarit(a)redhat.com>
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index blahblah..blahblah 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -708,6 +708,36 @@ static void rh_check_supported(void)
*/
if (acpi_disabled && !guest)
pr_crit("ACPI has been disabled or is not available on this hardware. This may
result in a single cpu boot, incorrect PCI IRQ routing, or boot failure.\n");
+
+ /*
+ * x86_64 microarchitecture levels:
+ *
https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels
+ *
+ * RHEL9 has a minimum of the x86_64-v2 microarchitecture
+ * RHEL10 has a minimum of the x86_64-v3 microarchitecture
+ */
+
+ if (!boot_cpu_has(X86_FEATURE_CX16) || /* CMPXCHG16B */
+ !boot_cpu_has(X86_FEATURE_LAHF_LM) || /* LAHF-SAHF */
+ !boot_cpu_has(X86_FEATURE_POPCNT) ||
+ !boot_cpu_has(X86_FEATURE_XMM3) || /* SSE-3 */
+ !boot_cpu_has(X86_FEATURE_XMM4_1) || /* SSE4_1 */
+ !boot_cpu_has(X86_FEATURE_XMM4_2) || /* SSE4_2 */
+ !boot_cpu_has(X86_FEATURE_SSSE3)) {
+ mark_hardware_deprecated("x86_64-v1", "%s:%s",
+ boot_cpu_data.x86_vendor_id, boot_cpu_data.x86_model_id);
+ } else if (!boot_cpu_has(X86_FEATURE_AVX) ||
+ !boot_cpu_has(X86_FEATURE_AVX2) ||
+ !boot_cpu_has(X86_FEATURE_BMI1) ||
+ !boot_cpu_has(X86_FEATURE_BMI2) ||
+ !boot_cpu_has(X86_FEATURE_F16C) ||
+ !boot_cpu_has(X86_FEATURE_FMA) ||
+ /* LZCNT is not explicitly listed, but appears to be paired with BMI2 */
+ !boot_cpu_has(X86_FEATURE_MOVBE) ||
+ !boot_cpu_has(X86_FEATURE_OSXSAVE)) {
+ mark_hardware_deprecated("x86_64-v2", "%s:%s",
+ boot_cpu_data.x86_vendor_id, boot_cpu_data.x86_model_id);
+ }
}
#else
#define rh_check_supported()
diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index blahblah..blahblah 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -446,11 +446,13 @@ struct module;
#ifdef CONFIG_RHEL_DIFFERENCES
void mark_hardware_unmaintained(const char *driver_name, char *fmt, ...);
+void mark_hardware_deprecated(const char *driver_name, char *fmt, ...);
void mark_tech_preview(const char *msg, struct module *mod);
void mark_partner_supported(const char *msg, struct module *mod);
void init_rh_check_status(char *fn_name);
#else
static inline void mark_hardware_unmaintained(const char *driver_name, char *fmt, ...) {
}
+static inline void mark_hardware_deprecated(const char *driver_name, char *fmt, ...) { }
static inline void mark_tech_preview(const char *msg, struct module *mod) { }
static inline void mark_partner_supported(const char *msg, struct module *mod) { }
#endif
--
https://gitlab.com/cki-project/kernel-ark/-/merge_requests/2912