diff options
Diffstat (limited to 'arch/x86/kernel/cpu/intel.c')
-rw-r--r-- | arch/x86/kernel/cpu/intel.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c index cce0b6118d55..ccfd2047630c 100644 --- a/arch/x86/kernel/cpu/intel.c +++ b/arch/x86/kernel/cpu/intel.c | |||
@@ -41,6 +41,16 @@ static void __cpuinit early_init_intel(struct cpuinfo_x86 *c) | |||
41 | if (c->x86 == 15 && c->x86_cache_alignment == 64) | 41 | if (c->x86 == 15 && c->x86_cache_alignment == 64) |
42 | c->x86_cache_alignment = 128; | 42 | c->x86_cache_alignment = 128; |
43 | #endif | 43 | #endif |
44 | |||
45 | /* | ||
46 | * c->x86_power is 8000_0007 edx. Bit 8 is TSC runs at constant rate | ||
47 | * with P/T states and does not stop in deep C-states | ||
48 | */ | ||
49 | if (c->x86_power & (1 << 8)) { | ||
50 | set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC); | ||
51 | set_cpu_cap(c, X86_FEATURE_NONSTOP_TSC); | ||
52 | } | ||
53 | |||
44 | } | 54 | } |
45 | 55 | ||
46 | #ifdef CONFIG_X86_32 | 56 | #ifdef CONFIG_X86_32 |
@@ -242,6 +252,13 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c) | |||
242 | 252 | ||
243 | intel_workarounds(c); | 253 | intel_workarounds(c); |
244 | 254 | ||
255 | /* | ||
256 | * Detect the extended topology information if available. This | ||
257 | * will reinitialise the initial_apicid which will be used | ||
258 | * in init_intel_cacheinfo() | ||
259 | */ | ||
260 | detect_extended_topology(c); | ||
261 | |||
245 | l2 = init_intel_cacheinfo(c); | 262 | l2 = init_intel_cacheinfo(c); |
246 | if (c->cpuid_level > 9) { | 263 | if (c->cpuid_level > 9) { |
247 | unsigned eax = cpuid_eax(10); | 264 | unsigned eax = cpuid_eax(10); |
@@ -307,13 +324,11 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c) | |||
307 | set_cpu_cap(c, X86_FEATURE_P4); | 324 | set_cpu_cap(c, X86_FEATURE_P4); |
308 | if (c->x86 == 6) | 325 | if (c->x86 == 6) |
309 | set_cpu_cap(c, X86_FEATURE_P3); | 326 | set_cpu_cap(c, X86_FEATURE_P3); |
327 | #endif | ||
310 | 328 | ||
311 | if (cpu_has_bts) | 329 | if (cpu_has_bts) |
312 | ptrace_bts_init_intel(c); | 330 | ptrace_bts_init_intel(c); |
313 | 331 | ||
314 | #endif | ||
315 | |||
316 | detect_extended_topology(c); | ||
317 | if (!cpu_has(c, X86_FEATURE_XTOPOLOGY)) { | 332 | if (!cpu_has(c, X86_FEATURE_XTOPOLOGY)) { |
318 | /* | 333 | /* |
319 | * let's use the legacy cpuid vector 0x1 and 0x4 for topology | 334 | * let's use the legacy cpuid vector 0x1 and 0x4 for topology |