Blame linux-kernel-patches/06-91df9fdf51492aec9fed6b4cbd33160886740f47.patch

Packit Service c9fe53
From 91df9fdf51492aec9fed6b4cbd33160886740f47 Mon Sep 17 00:00:00 2001
Packit Service c9fe53
From: Ashok Raj <ashok.raj@intel.com>
Packit Service c9fe53
Date: Wed, 28 Feb 2018 11:28:42 +0100
Packit Service c9fe53
Subject: x86/microcode/intel: Writeback and invalidate caches before updating
Packit Service c9fe53
 microcode
Packit Service c9fe53

Packit Service c9fe53
Updating microcode is less error prone when caches have been flushed and
Packit Service c9fe53
depending on what exactly the microcode is updating. For example, some
Packit Service c9fe53
of the issues around certain Broadwell parts can be addressed by doing a
Packit Service c9fe53
full cache flush.
Packit Service c9fe53

Packit Service c9fe53
[ Borislav: Massage it and use native_wbinvd() in both cases. ]
Packit Service c9fe53

Packit Service c9fe53
Signed-off-by: Ashok Raj <ashok.raj@intel.com>
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
Cc: Arjan Van De Ven <arjan.van.de.ven@intel.com>
Packit Service c9fe53
Link: http://lkml.kernel.org/r/1519352533-15992-3-git-send-email-ashok.raj@intel.com
Packit Service c9fe53
Link: https://lkml.kernel.org/r/20180228102846.13447-4-bp@alien8.de
Packit Service c9fe53
---
Packit Service c9fe53
 arch/x86/kernel/cpu/microcode/intel.c | 12 ++++++++++++
Packit Service c9fe53
 1 file changed, 12 insertions(+)
Packit Service c9fe53

Packit Service c9fe53
diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c
Packit Service c9fe53
index 87bd6dc..e2864bc 100644
Packit Service c9fe53
--- a/arch/x86/kernel/cpu/microcode/intel.c
Packit Service c9fe53
+++ b/arch/x86/kernel/cpu/microcode/intel.c
Packit Service c9fe53
@@ -600,6 +600,12 @@ static int apply_microcode_early(struct ucode_cpu_info *uci, bool early)
Packit Service c9fe53
 		return UCODE_OK;
Packit Service c9fe53
 	}
Packit Service c9fe53
 
Packit Service c9fe53
+	/*
Packit Service c9fe53
+	 * Writeback and invalidate caches before updating microcode to avoid
Packit Service c9fe53
+	 * internal issues depending on what the microcode is updating.
Packit Service c9fe53
+	 */
Packit Service c9fe53
+	native_wbinvd();
Packit Service c9fe53
+
Packit Service c9fe53
 	/* write microcode via MSR 0x79 */
Packit Service c9fe53
 	native_wrmsrl(MSR_IA32_UCODE_WRITE, (unsigned long)mc->bits);
Packit Service c9fe53
 
Packit Service c9fe53
@@ -816,6 +822,12 @@ static enum ucode_state apply_microcode_intel(int cpu)
Packit Service c9fe53
 		return UCODE_OK;
Packit Service c9fe53
 	}
Packit Service c9fe53
 
Packit Service c9fe53
+	/*
Packit Service c9fe53
+	 * Writeback and invalidate caches before updating microcode to avoid
Packit Service c9fe53
+	 * internal issues depending on what the microcode is updating.
Packit Service c9fe53
+	 */
Packit Service c9fe53
+	native_wbinvd();
Packit Service c9fe53
+
Packit Service c9fe53
 	/* write microcode via MSR 0x79 */
Packit Service c9fe53
 	wrmsrl(MSR_IA32_UCODE_WRITE, (unsigned long)mc->bits);
Packit Service c9fe53
 
Packit Service c9fe53
-- 
Packit Service c9fe53
cgit v1.1
Packit Service c9fe53