aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@linux.intel.com>2009-01-22 19:17:05 -0500
committerH. Peter Anvin <hpa@linux.intel.com>2009-01-23 21:07:45 -0500
commit75a048119e76540d73132cfc8e0fa0c0a8bb6c83 (patch)
tree2a4d88809efae435e6fe8e33e630f92d76742c9d /arch/x86/kernel
parentb1882e68d17a93b523dce09c3a181319aace2f0e (diff)
x86: handle PAT more like other CPU features
Impact: Cleanup When PAT was originally introduced, it was handled specially for a few reasons: - PAT bugs are hard to track down, so we wanted to maintain a whitelist of CPUs. - The i386 and x86-64 CPUID code was not yet unified. Both of these are now obsolete, so handle PAT like any other features, including ordinary feature blacklisting due to known bugs. Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r--arch/x86/kernel/cpu/addon_cpuid_features.c34
-rw-r--r--arch/x86/kernel/cpu/common.c2
-rw-r--r--arch/x86/kernel/cpu/intel.c12
3 files changed, 12 insertions, 36 deletions
diff --git a/arch/x86/kernel/cpu/addon_cpuid_features.c b/arch/x86/kernel/cpu/addon_cpuid_features.c
index 2cf23634b6d9..4e581fdc0a5a 100644
--- a/arch/x86/kernel/cpu/addon_cpuid_features.c
+++ b/arch/x86/kernel/cpu/addon_cpuid_features.c
@@ -143,37 +143,3 @@ void __cpuinit detect_extended_topology(struct cpuinfo_x86 *c)
143 return; 143 return;
144#endif 144#endif
145} 145}
146
147#ifdef CONFIG_X86_PAT
148void __cpuinit validate_pat_support(struct cpuinfo_x86 *c)
149{
150 if (!cpu_has_pat)
151 pat_disable("PAT not supported by CPU.");
152
153 switch (c->x86_vendor) {
154 case X86_VENDOR_INTEL:
155 /*
156 * There is a known erratum on Pentium III and Core Solo
157 * and Core Duo CPUs.
158 * " Page with PAT set to WC while associated MTRR is UC
159 * may consolidate to UC "
160 * Because of this erratum, it is better to stick with
161 * setting WC in MTRR rather than using PAT on these CPUs.
162 *
163 * Enable PAT WC only on P4, Core 2 or later CPUs.
164 */
165 if (c->x86 > 0x6 || (c->x86 == 6 && c->x86_model >= 15))
166 return;
167
168 pat_disable("PAT WC disabled due to known CPU erratum.");
169 return;
170
171 case X86_VENDOR_AMD:
172 case X86_VENDOR_CENTAUR:
173 case X86_VENDOR_TRANSMETA:
174 return;
175 }
176
177 pat_disable("PAT disabled. Not yet verified on this CPU type.");
178}
179#endif
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index 83492b1f93b1..0f8656361e04 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -570,8 +570,6 @@ static void __init early_identify_cpu(struct cpuinfo_x86 *c)
570 if (this_cpu->c_early_init) 570 if (this_cpu->c_early_init)
571 this_cpu->c_early_init(c); 571 this_cpu->c_early_init(c);
572 572
573 validate_pat_support(c);
574
575#ifdef CONFIG_SMP 573#ifdef CONFIG_SMP
576 c->cpu_index = boot_cpu_id; 574 c->cpu_index = boot_cpu_id;
577#endif 575#endif
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
index 8ea6929e974c..20ce03acf04b 100644
--- a/arch/x86/kernel/cpu/intel.c
+++ b/arch/x86/kernel/cpu/intel.c
@@ -50,6 +50,18 @@ static void __cpuinit early_init_intel(struct cpuinfo_x86 *c)
50 set_cpu_cap(c, X86_FEATURE_NONSTOP_TSC); 50 set_cpu_cap(c, X86_FEATURE_NONSTOP_TSC);
51 } 51 }
52 52
53 /*
54 * There is a known erratum on Pentium III and Core Solo
55 * and Core Duo CPUs.
56 * " Page with PAT set to WC while associated MTRR is UC
57 * may consolidate to UC "
58 * Because of this erratum, it is better to stick with
59 * setting WC in MTRR rather than using PAT on these CPUs.
60 *
61 * Enable PAT WC only on P4, Core 2 or later CPUs.
62 */
63 if (c->x86 == 6 && c->x86_model < 15)
64 clear_cpu_cap(c, X86_FEATURE_PAT);
53} 65}
54 66
55#ifdef CONFIG_X86_32 67#ifdef CONFIG_X86_32