aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/cpu/intel.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-12-28 15:07:57 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2008-12-28 15:07:57 -0500
commitbe9c5ae4eeec2e85527e95647348b8ea4eb25128 (patch)
tree59383b15bc0891b8a44500a0ac172a8850f1068d /arch/x86/kernel/cpu/intel.c
parentbb26c6c29b7cc9f39e491b074b09f3c284738d36 (diff)
parent79a66b96c339626a3e4b226fefc0e45244cfe6ff (diff)
Merge branch 'x86-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'x86-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (246 commits) x86: traps.c replace #if CONFIG_X86_32 with #ifdef CONFIG_X86_32 x86: PAT: fix address types in track_pfn_vma_new() x86: prioritize the FPU traps for the error code x86: PAT: pfnmap documentation update changes x86: PAT: move track untrack pfnmap stubs to asm-generic x86: PAT: remove follow_pfnmap_pte in favor of follow_phys x86: PAT: modify follow_phys to return phys_addr prot and return value x86: PAT: clarify is_linear_pfn_mapping() interface x86: ia32_signal: remove unnecessary declaration x86: common.c boot_cpu_stack and boot_exception_stacks should be static x86: fix intel x86_64 llc_shared_map/cpu_llc_id anomolies x86: fix warning in arch/x86/kernel/microcode_amd.c x86: ia32.h: remove unused struct sigfram32 and rt_sigframe32 x86: asm-offset_64: use rt_sigframe_ia32 x86: sigframe.h: include headers for dependency x86: traps.c declare functions before they get used x86: PAT: update documentation to cover pgprot and remap_pfn related changes - v3 x86: PAT: add pgprot_writecombine() interface for drivers - v3 x86: PAT: change pgprot_noncached to uc_minus instead of strong uc - v3 x86: PAT: implement track/untrack of pfnmap regions for x86 - v3 ...
Diffstat (limited to 'arch/x86/kernel/cpu/intel.c')
-rw-r--r--arch/x86/kernel/cpu/intel.c21
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