From: Greg Kroah-Hartman Date: Mon, 10 Mar 2025 16:09:45 +0000 (+0100) Subject: 5.4-stable patches X-Git-Tag: v5.4.291~35 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=90106b374c1d03ca01f08102da9800074fccfc76;p=thirdparty%2Fkernel%2Fstable-queue.git 5.4-stable patches added patches: x86-mm-don-t-disable-pcid-when-invlpg-has-been-fixed-by-microcode.patch --- diff --git a/queue-5.4/x86-mm-don-t-disable-pcid-when-invlpg-has-been-fixed-by-microcode.patch b/queue-5.4/x86-mm-don-t-disable-pcid-when-invlpg-has-been-fixed-by-microcode.patch new file mode 100644 index 0000000000..3e650d373e --- /dev/null +++ b/queue-5.4/x86-mm-don-t-disable-pcid-when-invlpg-has-been-fixed-by-microcode.patch @@ -0,0 +1,89 @@ +From f24f669d03f884a6ef95cca84317d0f329e93961 Mon Sep 17 00:00:00 2001 +From: Xi Ruoyao +Date: Wed, 22 May 2024 10:06:24 +0800 +Subject: x86/mm: Don't disable PCID when INVLPG has been fixed by microcode + +From: Xi Ruoyao + +commit f24f669d03f884a6ef95cca84317d0f329e93961 upstream. + +Per the "Processor Specification Update" documentations referred by +the intel-microcode-20240312 release note, this microcode release has +fixed the issue for all affected models. + +So don't disable PCID if the microcode is new enough. The precise +minimum microcode revision fixing the issue was provided by Pawan +Intel. + +[ dhansen: comment and changelog tweaks ] + +Signed-off-by: Xi Ruoyao +Signed-off-by: Dave Hansen +Acked-by: Pawan Gupta +Link: https://lore.kernel.org/all/168436059559.404.13934972543631851306.tip-bot2@tip-bot2/ +Link: https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files/releases/tag/microcode-20240312 +Link: https://cdrdv2.intel.com/v1/dl/getContent/740518 # RPL042, rev. 13 +Link: https://cdrdv2.intel.com/v1/dl/getContent/682436 # ADL063, rev. 24 +Link: https://lore.kernel.org/all/20240325231300.qrltbzf6twm43ftb@desk/ +Link: https://lore.kernel.org/all/20240522020625.69418-1-xry111%40xry111.site +Signed-off-by: Pawan Gupta +Signed-off-by: Greg Kroah-Hartman +--- + arch/x86/mm/init.c | 32 +++++++++++++++++++------------- + 1 file changed, 19 insertions(+), 13 deletions(-) + +--- a/arch/x86/mm/init.c ++++ b/arch/x86/mm/init.c +@@ -211,33 +211,39 @@ static void __init probe_page_size_mask( + } + } + +-#define INTEL_MATCH(_model) { .vendor = X86_VENDOR_INTEL, \ +- .family = 6, \ +- .model = _model, \ +- } ++#define INTEL_MATCH(_model, ucode) { .vendor = X86_VENDOR_INTEL, \ ++ .family = 6, \ ++ .model = _model, \ ++ .driver_data = ucode, \ ++ } + /* +- * INVLPG may not properly flush Global entries +- * on these CPUs when PCIDs are enabled. ++ * INVLPG may not properly flush Global entries on ++ * these CPUs. New microcode fixes the issue. + */ + static const struct x86_cpu_id invlpg_miss_ids[] = { +- INTEL_MATCH(INTEL_FAM6_ALDERLAKE ), +- INTEL_MATCH(INTEL_FAM6_ALDERLAKE_L ), +- INTEL_MATCH(INTEL_FAM6_ALDERLAKE_N ), +- INTEL_MATCH(INTEL_FAM6_RAPTORLAKE ), +- INTEL_MATCH(INTEL_FAM6_RAPTORLAKE_P), +- INTEL_MATCH(INTEL_FAM6_RAPTORLAKE_S), ++ INTEL_MATCH(INTEL_FAM6_ALDERLAKE, 0x2e), ++ INTEL_MATCH(INTEL_FAM6_ALDERLAKE_L, 0x42c), ++ INTEL_MATCH(INTEL_FAM6_ALDERLAKE_N, 0x11), ++ INTEL_MATCH(INTEL_FAM6_RAPTORLAKE, 0x118), ++ INTEL_MATCH(INTEL_FAM6_RAPTORLAKE_P, 0x4117), ++ INTEL_MATCH(INTEL_FAM6_RAPTORLAKE_S, 0x2e), + {} + }; + + static void setup_pcid(void) + { ++ const struct x86_cpu_id *invlpg_miss_match; ++ + if (!IS_ENABLED(CONFIG_X86_64)) + return; + + if (!boot_cpu_has(X86_FEATURE_PCID)) + return; + +- if (x86_match_cpu(invlpg_miss_ids)) { ++ invlpg_miss_match = x86_match_cpu(invlpg_miss_ids); ++ ++ if (invlpg_miss_match && ++ boot_cpu_data.microcode < invlpg_miss_match->driver_data) { + pr_info("Incomplete global flushes, disabling PCID"); + setup_clear_cpu_cap(X86_FEATURE_PCID); + return;