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

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

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

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

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