diff options
Diffstat (limited to 'arch/x86/kernel/cpu/microcode/intel.c')
| -rw-r--r-- | arch/x86/kernel/cpu/microcode/intel.c | 26 | 
1 files changed, 11 insertions, 15 deletions
| diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c index 7dbcb7adf797..d9e460fc7a3b 100644 --- a/arch/x86/kernel/cpu/microcode/intel.c +++ b/arch/x86/kernel/cpu/microcode/intel.c @@ -565,15 +565,6 @@ static void print_ucode(struct ucode_cpu_info *uci)  }  #else -/* - * Flush global tlb. We only do this in x86_64 where paging has been enabled - * already and PGE should be enabled as well. - */ -static inline void flush_tlb_early(void) -{ -	__native_flush_tlb_global_irq_disabled(); -} -  static inline void print_ucode(struct ucode_cpu_info *uci)  {  	struct microcode_intel *mc; @@ -602,10 +593,6 @@ static int apply_microcode_early(struct ucode_cpu_info *uci, bool early)  	if (rev != mc->hdr.rev)  		return -1; -#ifdef CONFIG_X86_64 -	/* Flush global tlb. This is precaution. */ -	flush_tlb_early(); -#endif  	uci->cpu_sig.rev = rev;  	if (early) @@ -923,8 +910,17 @@ static bool is_blacklisted(unsigned int cpu)  {  	struct cpuinfo_x86 *c = &cpu_data(cpu); -	if (c->x86 == 6 && c->x86_model == INTEL_FAM6_BROADWELL_X) { -		pr_err_once("late loading on model 79 is disabled.\n"); +	/* +	 * Late loading on model 79 with microcode revision less than 0x0b000021 +	 * may result in a system hang. This behavior is documented in item +	 * BDF90, #334165 (Intel Xeon Processor E7-8800/4800 v4 Product Family). +	 */ +	if (c->x86 == 6 && +	    c->x86_model == INTEL_FAM6_BROADWELL_X && +	    c->x86_mask == 0x01 && +	    c->microcode < 0x0b000021) { +		pr_err_once("Erratum BDF90: late loading with revision < 0x0b000021 (0x%x) disabled.\n", c->microcode); +		pr_err_once("Please consider either early loading through initrd/built-in or a potential BIOS update.\n");  		return true;  	} |