summaryrefslogtreecommitdiff
path: root/arch/x86/kernel/cpu/amd.c
diff options
context:
space:
mode:
authorAndrey Konovalov <andrey.konovalov@linaro.org>2012-12-20 00:10:48 +0400
committerAndrey Konovalov <andrey.konovalov@linaro.org>2012-12-20 00:10:48 +0400
commitc19ae9c2483f0253bb58d3d3c28ac20386df6066 (patch)
tree9e3339fd0c9ac3285839626b25bb8d30bea60abd /arch/x86/kernel/cpu/amd.c
parent836f44a71d886bc81551597612e3b1797133985f (diff)
parentb2824f4e0990716407b0c0e7acee75bb6353febf (diff)
downloadlinux-linaro-tracking-with-fixes-linux-linaro-core-3.6.tar.gz
Automatically merging tracking-linux-3.6.y into merge-linux-linaro-core-3.6linux-linaro-core-3.6-20121220.0linux-linaro-core-3.6
Conflicting files:
Diffstat (limited to 'arch/x86/kernel/cpu/amd.c')
-rw-r--r--arch/x86/kernel/cpu/amd.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
index 9d92e19039f..e4da4385894 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? */