diff options
Diffstat (limited to 'arch/x86/kernel/cpu/microcode/intel.c')
| -rw-r--r-- | arch/x86/kernel/cpu/microcode/intel.c | 17 | 
1 files changed, 12 insertions, 5 deletions
diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c index 97ccf4c3b45b..16936a24795c 100644 --- a/arch/x86/kernel/cpu/microcode/intel.c +++ b/arch/x86/kernel/cpu/microcode/intel.c @@ -795,6 +795,7 @@ static enum ucode_state apply_microcode_intel(int cpu)  	struct ucode_cpu_info *uci = ucode_cpu_info + cpu;  	struct cpuinfo_x86 *c = &cpu_data(cpu);  	struct microcode_intel *mc; +	enum ucode_state ret;  	static int prev_rev;  	u32 rev; @@ -817,9 +818,8 @@ static enum ucode_state apply_microcode_intel(int cpu)  	 */  	rev = intel_get_microcode_revision();  	if (rev >= mc->hdr.rev) { -		uci->cpu_sig.rev = rev; -		c->microcode = rev; -		return UCODE_OK; +		ret = UCODE_OK; +		goto out;  	}  	/* @@ -848,10 +848,17 @@ static enum ucode_state apply_microcode_intel(int cpu)  		prev_rev = rev;  	} +	ret = UCODE_UPDATED; + +out:  	uci->cpu_sig.rev = rev; -	c->microcode = rev; +	c->microcode	 = rev; + +	/* Update boot_cpu_data's revision too, if we're on the BSP: */ +	if (c->cpu_index == boot_cpu_data.cpu_index) +		boot_cpu_data.microcode = rev; -	return UCODE_UPDATED; +	return ret;  }  static enum ucode_state generic_load_microcode(int cpu, void *data, size_t size,  |