diff options
Diffstat (limited to 'arch/x86/kernel/cpu/mce/intel.c')
| -rw-r--r-- | arch/x86/kernel/cpu/mce/intel.c | 18 | 
1 files changed, 18 insertions, 0 deletions
| diff --git a/arch/x86/kernel/cpu/mce/intel.c b/arch/x86/kernel/cpu/mce/intel.c index 9b149b9c4109..4655223ba560 100644 --- a/arch/x86/kernel/cpu/mce/intel.c +++ b/arch/x86/kernel/cpu/mce/intel.c @@ -468,8 +468,26 @@ static void intel_imc_init(struct cpuinfo_x86 *c)  	}  } +static void intel_apply_cpu_quirks(struct cpuinfo_x86 *c) +{ +	/* +	 * SDM documents that on family 6 bank 0 should not be written +	 * because it aliases to another special BIOS controlled +	 * register. +	 * But it's not aliased anymore on model 0x1a+ +	 * Don't ignore bank 0 completely because there could be a +	 * valid event later, merely don't write CTL0. +	 * +	 * Older CPUs (prior to family 6) can't reach this point and already +	 * return early due to the check of __mcheck_cpu_ancient_init(). +	 */ +	if (c->x86_vfm < INTEL_NEHALEM_EP && this_cpu_read(mce_num_banks)) +		this_cpu_ptr(mce_banks_array)[0].init = false; +} +  void mce_intel_feature_init(struct cpuinfo_x86 *c)  { +	intel_apply_cpu_quirks(c);  	intel_init_cmci();  	intel_init_lmce();  	intel_imc_init(c); | 
