Blame linux-kernel-patches/09-cfb52a5a09c8ae3a1dafb44ce549fde5b69e8117.patch

Packit 863535
From cfb52a5a09c8ae3a1dafb44ce549fde5b69e8117 Mon Sep 17 00:00:00 2001
Packit 863535
From: Borislav Petkov <bp@suse.de>
Packit 863535
Date: Wed, 28 Feb 2018 11:28:45 +0100
Packit 863535
Subject: x86/microcode: Request microcode on the BSP
Packit 863535

Packit 863535
... so that any newer version can land in the cache and can later be
Packit 863535
fished out by the application functions. Do that before grabbing the
Packit 863535
hotplug lock.
Packit 863535

Packit 863535
Signed-off-by: Borislav Petkov <bp@suse.de>
Packit 863535
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Packit 863535
Tested-by: Tom Lendacky <thomas.lendacky@amd.com>
Packit 863535
Tested-by: Ashok Raj <ashok.raj@intel.com>
Packit 863535
Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com>
Packit 863535
Cc: Arjan Van De Ven <arjan.van.de.ven@intel.com>
Packit 863535
Link: https://lkml.kernel.org/r/20180228102846.13447-7-bp@alien8.de
Packit 863535
---
Packit 863535
 arch/x86/kernel/cpu/microcode/core.c | 11 +++++------
Packit 863535
 1 file changed, 5 insertions(+), 6 deletions(-)
Packit 863535

Packit 863535
diff --git a/arch/x86/kernel/cpu/microcode/core.c b/arch/x86/kernel/cpu/microcode/core.c
Packit 863535
index fa32cb3..5dd157d 100644
Packit 863535
--- a/arch/x86/kernel/cpu/microcode/core.c
Packit 863535
+++ b/arch/x86/kernel/cpu/microcode/core.c
Packit 863535
@@ -499,15 +499,10 @@ static int check_online_cpus(void)
Packit 863535
 static enum ucode_state reload_for_cpu(int cpu)
Packit 863535
 {
Packit 863535
 	struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
Packit 863535
-	enum ucode_state ustate;
Packit 863535
 
Packit 863535
 	if (!uci->valid)
Packit 863535
 		return UCODE_OK;
Packit 863535
 
Packit 863535
-	ustate = microcode_ops->request_microcode_fw(cpu, &microcode_pdev->dev, true);
Packit 863535
-	if (ustate != UCODE_OK)
Packit 863535
-		return ustate;
Packit 863535
-
Packit 863535
 	return apply_microcode_on_target(cpu);
Packit 863535
 }
Packit 863535
 
Packit 863535
@@ -515,11 +510,11 @@ static ssize_t reload_store(struct device *dev,
Packit 863535
 			    struct device_attribute *attr,
Packit 863535
 			    const char *buf, size_t size)
Packit 863535
 {
Packit 863535
+	int cpu, bsp = boot_cpu_data.cpu_index;
Packit 863535
 	enum ucode_state tmp_ret = UCODE_OK;
Packit 863535
 	bool do_callback = false;
Packit 863535
 	unsigned long val;
Packit 863535
 	ssize_t ret = 0;
Packit 863535
-	int cpu;
Packit 863535
 
Packit 863535
 	ret = kstrtoul(buf, 0, &val;;
Packit 863535
 	if (ret)
Packit 863535
@@ -528,6 +523,10 @@ static ssize_t reload_store(struct device *dev,
Packit 863535
 	if (val != 1)
Packit 863535
 		return size;
Packit 863535
 
Packit 863535
+	tmp_ret = microcode_ops->request_microcode_fw(bsp, &microcode_pdev->dev, true);
Packit 863535
+	if (tmp_ret != UCODE_OK)
Packit 863535
+		return size;
Packit 863535
+
Packit 863535
 	get_online_cpus();
Packit 863535
 
Packit 863535
 	ret = check_online_cpus();
Packit 863535
-- 
Packit 863535
cgit v1.1
Packit 863535