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

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

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

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

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

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