aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Herrmann <andreas.herrmann3@amd.com>2008-06-10 10:05:18 -0400
committerIngo Molnar <mingo@elte.hu>2008-06-12 04:14:22 -0400
commit97cfab6ac4ddfda0d722393bbf46cc40bc332107 (patch)
tree699f95483b968bfad891bca59ad46f74949543bc
parentee863ba7ab3d3ed8a9585d378aae69d1e3e9f1b4 (diff)
x86: PAT: fix ambiguous paranoia check in pat_init()
Starting with commit 8d4a4300854f3971502e81dacd930704cb88f606 (x86: cleanup PAT cpu validation) the PAT CPU feature flag is not cleared anymore. Now the error message "PAT enabled, but CPU feature cleared" in pat_init() is misleading. Furthermore the current code does not check for existence of the PAT CPU feature flag if a CPU is whitelisted in validate_pat_support. This patch clears pat_wc_enabled if boot CPU has no PAT feature flag and adapts the paranoia check. Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--arch/x86/kernel/cpu/addon_cpuid_features.c7
-rw-r--r--arch/x86/mm/pat.c11
2 files changed, 10 insertions, 8 deletions
diff --git a/arch/x86/kernel/cpu/addon_cpuid_features.c b/arch/x86/kernel/cpu/addon_cpuid_features.c
index 0fbd06241e07..2df461f06a52 100644
--- a/arch/x86/kernel/cpu/addon_cpuid_features.c
+++ b/arch/x86/kernel/cpu/addon_cpuid_features.c
@@ -53,6 +53,9 @@ void __cpuinit init_scattered_cpuid_features(struct cpuinfo_x86 *c)
53#ifdef CONFIG_X86_PAT 53#ifdef CONFIG_X86_PAT
54void __cpuinit validate_pat_support(struct cpuinfo_x86 *c) 54void __cpuinit validate_pat_support(struct cpuinfo_x86 *c)
55{ 55{
56 if (!cpu_has_pat)
57 pat_disable("PAT not supported by CPU.");
58
56 switch (c->x86_vendor) { 59 switch (c->x86_vendor) {
57 case X86_VENDOR_INTEL: 60 case X86_VENDOR_INTEL:
58 if (c->x86 == 0xF || (c->x86 == 6 && c->x86_model >= 15)) 61 if (c->x86 == 0xF || (c->x86 == 6 && c->x86_model >= 15))
@@ -64,8 +67,6 @@ void __cpuinit validate_pat_support(struct cpuinfo_x86 *c)
64 return; 67 return;
65 } 68 }
66 69
67 pat_disable(cpu_has_pat ? 70 pat_disable("PAT disabled. Not yet verified on this CPU type.");
68 "PAT disabled. Not yet verified on this CPU type." :
69 "PAT not supported by CPU.");
70} 71}
71#endif 72#endif
diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c
index 320d644a8107..65105b1195a3 100644
--- a/arch/x86/mm/pat.c
+++ b/arch/x86/mm/pat.c
@@ -76,14 +76,15 @@ void pat_init(void)
76 return; 76 return;
77 77
78 /* Paranoia check. */ 78 /* Paranoia check. */
79 if (!cpu_has_pat) { 79 if (!cpu_has_pat && boot_pat_state) {
80 printk(KERN_ERR "PAT enabled, but CPU feature cleared\n");
81 /* 80 /*
82 * Panic if this happens on the secondary CPU, and we 81 * If this happens we are on a secondary CPU, but
83 * switched to PAT on the boot CPU. We have no way to 82 * switched to PAT on the boot CPU. We have no way to
84 * undo PAT. 83 * undo PAT.
85 */ 84 */
86 BUG_ON(boot_pat_state); 85 printk(KERN_ERR "PAT enabled, "
86 "but not supported by secondary CPU\n");
87 BUG();
87 } 88 }
88 89
89 /* Set PWT to Write-Combining. All other bits stay the same */ 90 /* Set PWT to Write-Combining. All other bits stay the same */