| From 723f2828a98c8ca19842042f418fb30dd8cfc0f7 Mon Sep 17 00:00:00 2001 |
| From: Borislav Petkov <bp@suse.de> |
| Date: Wed, 18 Oct 2017 13:12:25 +0200 |
| Subject: x86/microcode/intel: Disable late loading on model 79 |
| |
| From: Borislav Petkov <bp@suse.de> |
| |
| commit 723f2828a98c8ca19842042f418fb30dd8cfc0f7 upstream. |
| |
| Blacklist Broadwell X model 79 for late loading due to an erratum. |
| |
| Signed-off-by: Borislav Petkov <bp@suse.de> |
| Acked-by: Tony Luck <tony.luck@intel.com> |
| Cc: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Link: http://lkml.kernel.org/r/20171018111225.25635-1-bp@alien8.de |
| Signed-off-by: Ingo Molnar <mingo@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| |
| --- |
| arch/x86/kernel/cpu/microcode/intel.c | 18 ++++++++++++++++++ |
| 1 file changed, 18 insertions(+) |
| |
| --- a/arch/x86/kernel/cpu/microcode/intel.c |
| +++ b/arch/x86/kernel/cpu/microcode/intel.c |
| @@ -267,6 +267,18 @@ static int get_ucode_fw(void *to, const |
| return 0; |
| } |
| |
| +static bool is_blacklisted(unsigned int cpu) |
| +{ |
| + struct cpuinfo_x86 *c = &cpu_data(cpu); |
| + |
| + if (c->x86 == 6 && c->x86_model == 79) { |
| + pr_err_once("late loading on model 79 is disabled.\n"); |
| + return true; |
| + } |
| + |
| + return false; |
| +} |
| + |
| static enum ucode_state request_microcode_fw(int cpu, struct device *device, |
| bool refresh_fw) |
| { |
| @@ -275,6 +287,9 @@ static enum ucode_state request_microcod |
| const struct firmware *firmware; |
| enum ucode_state ret; |
| |
| + if (is_blacklisted(cpu)) |
| + return UCODE_NFOUND; |
| + |
| sprintf(name, "intel-ucode/%02x-%02x-%02x", |
| c->x86, c->x86_model, c->x86_mask); |
| |
| @@ -299,6 +314,9 @@ static int get_ucode_user(void *to, cons |
| static enum ucode_state |
| request_microcode_user(int cpu, const void __user *buf, size_t size) |
| { |
| + if (is_blacklisted(cpu)) |
| + return UCODE_NFOUND; |
| + |
| return generic_load_microcode(cpu, (void *)buf, size, &get_ucode_user); |
| } |
| |