Blame linux-kernel-patches/03-42ca8082e260dcfd8afa2afa6ec1940b9d41724c.patch

Packit Service c9fe53
From 42ca8082e260dcfd8afa2afa6ec1940b9d41724c Mon Sep 17 00:00:00 2001
Packit Service c9fe53
From: Borislav Petkov <bp@suse.de>
Packit Service c9fe53
Date: Fri, 16 Feb 2018 12:26:40 +0100
Packit Service c9fe53
Subject: x86/CPU: Check CPU feature bits after microcode upgrade
Packit Service c9fe53

Packit Service c9fe53
With some microcode upgrades, new CPUID features can become visible on
Packit Service c9fe53
the CPU. Check what the kernel has mirrored now and issue a warning
Packit Service c9fe53
hinting at possible things the user/admin can do to make use of the
Packit Service c9fe53
newly visible features.
Packit Service c9fe53

Packit Service c9fe53
Originally-by: Ashok Raj <ashok.raj@intel.com>
Packit Service c9fe53
Tested-by: Ashok Raj <ashok.raj@intel.com>
Packit Service c9fe53
Signed-off-by: Borislav Petkov <bp@suse.de>
Packit Service c9fe53
Reviewed-by: Ashok Raj <ashok.raj@intel.com>
Packit Service c9fe53
Cc: Andy Lutomirski <luto@kernel.org>
Packit Service c9fe53
Cc: Arjan van de Ven <arjan@linux.intel.com>
Packit Service c9fe53
Cc: Borislav Petkov <bp@alien8.de>
Packit Service c9fe53
Cc: Dan Williams <dan.j.williams@intel.com>
Packit Service c9fe53
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Packit Service c9fe53
Cc: David Woodhouse <dwmw2@infradead.org>
Packit Service c9fe53
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Packit Service c9fe53
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Packit Service c9fe53
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Packit Service c9fe53
Cc: Peter Zijlstra <peterz@infradead.org>
Packit Service c9fe53
Cc: Thomas Gleixner <tglx@linutronix.de>
Packit Service c9fe53
Link: http://lkml.kernel.org/r/20180216112640.11554-4-bp@alien8.de
Packit Service c9fe53
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Packit Service c9fe53
---
Packit Service c9fe53
 arch/x86/kernel/cpu/common.c | 20 ++++++++++++++++++++
Packit Service c9fe53
 1 file changed, 20 insertions(+)
Packit Service c9fe53

Packit Service c9fe53
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
Packit Service c9fe53
index 84f1cd8..348cf48 100644
Packit Service c9fe53
--- a/arch/x86/kernel/cpu/common.c
Packit Service c9fe53
+++ b/arch/x86/kernel/cpu/common.c
Packit Service c9fe53
@@ -1757,5 +1757,25 @@ core_initcall(init_cpu_syscore);
Packit Service c9fe53
  */
Packit Service c9fe53
 void microcode_check(void)
Packit Service c9fe53
 {
Packit Service c9fe53
+	struct cpuinfo_x86 info;
Packit Service c9fe53
+
Packit Service c9fe53
 	perf_check_microcode();
Packit Service c9fe53
+
Packit Service c9fe53
+	/* Reload CPUID max function as it might've changed. */
Packit Service c9fe53
+	info.cpuid_level = cpuid_eax(0);
Packit Service c9fe53
+
Packit Service c9fe53
+	/*
Packit Service c9fe53
+	 * Copy all capability leafs to pick up the synthetic ones so that
Packit Service c9fe53
+	 * memcmp() below doesn't fail on that. The ones coming from CPUID will
Packit Service c9fe53
+	 * get overwritten in get_cpu_cap().
Packit Service c9fe53
+	 */
Packit Service c9fe53
+	memcpy(&info.x86_capability, &boot_cpu_data.x86_capability, sizeof(info.x86_capability));
Packit Service c9fe53
+
Packit Service c9fe53
+	get_cpu_cap(&info;;
Packit Service c9fe53
+
Packit Service c9fe53
+	if (!memcmp(&info.x86_capability, &boot_cpu_data.x86_capability, sizeof(info.x86_capability)))
Packit Service c9fe53
+		return;
Packit Service c9fe53
+
Packit Service c9fe53
+	pr_warn("x86/CPU: CPU features have changed after loading microcode, but might not take effect.\n");
Packit Service c9fe53
+	pr_warn("x86/CPU: Please consider either early loading through initrd/built-in or a potential BIOS update.\n");
Packit Service c9fe53
 }
Packit Service c9fe53
-- 
Packit Service c9fe53
cgit v1.1
Packit Service c9fe53