diff options
Diffstat (limited to 'arch/x86/kernel/cpu/amd.c')
| -rw-r--r-- | arch/x86/kernel/cpu/amd.c | 14 | 
1 files changed, 14 insertions, 0 deletions
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c index f7e98a2c0d1..1b7d1656a04 100644 --- a/arch/x86/kernel/cpu/amd.c +++ b/arch/x86/kernel/cpu/amd.c @@ -631,6 +631,20 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)  		}  	} +	/* +	 * The way access filter has a performance penalty on some workloads. +	 * Disable it on the affected CPUs. +	 */ +	if ((c->x86 == 0x15) && +	    (c->x86_model >= 0x02) && (c->x86_model < 0x20)) { +		u64 val; + +		if (!rdmsrl_safe(0xc0011021, &val) && !(val & 0x1E)) { +			val |= 0x1E; +			wrmsrl_safe(0xc0011021, val); +		} +	} +  	cpu_detect_cache_sizes(c);  	/* Multi core CPU? */  |