aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/cpu/common.c
diff options
context:
space:
mode:
authorYinghai Lu <yhlu.kernel@gmail.com>2008-09-06 04:52:28 -0400
committerIngo Molnar <mingo@elte.hu>2008-09-06 08:09:14 -0400
commite3224234717b4228c235cee401af89212f17a3a4 (patch)
tree10cc3810fa160e168fc29fb392929ab00a91bacb /arch/x86/kernel/cpu/common.c
parent1b05d60d60e81c6594da8298107a05b506f01797 (diff)
x86, cpu init: call early_init_xxx in init_xxx
so we: 1. could set some cap to ap 2. restore some cap after memset in identify_cpu for boot cpu esp for CONSTANT_TSC this matters, as: before this patch: flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow rep_good nopl pni monitor cx16 lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs after this patch: flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nopl pni monitor cx16 lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs so constant_tsc is back... Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/cpu/common.c')
-rw-r--r--arch/x86/kernel/cpu/common.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index a8b9b7242428..e8045c4ef1c1 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -473,9 +473,6 @@ static void __cpuinit get_cpu_cap(struct cpuinfo_x86 *c)
473 c->x86_capability[2] = cpuid_edx(0x80860001); 473 c->x86_capability[2] = cpuid_edx(0x80860001);
474 } 474 }
475 475
476 if (c->extended_cpuid_level >= 0x80000007)
477 c->x86_power = cpuid_edx(0x80000007);
478
479 if (c->extended_cpuid_level >= 0x80000008) { 476 if (c->extended_cpuid_level >= 0x80000008) {
480 u32 eax = cpuid_eax(0x80000008); 477 u32 eax = cpuid_eax(0x80000008);
481 478
@@ -483,6 +480,10 @@ static void __cpuinit get_cpu_cap(struct cpuinfo_x86 *c)
483 c->x86_phys_bits = eax & 0xff; 480 c->x86_phys_bits = eax & 0xff;
484 } 481 }
485#endif 482#endif
483
484 if (c->extended_cpuid_level >= 0x80000007)
485 c->x86_power = cpuid_edx(0x80000007);
486
486} 487}
487/* 488/*
488 * Do minimum CPU detection early. 489 * Do minimum CPU detection early.