diff options
author | Yinghai Lu <yhlu.kernel@gmail.com> | 2008-09-06 04:52:28 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-09-06 08:09:14 -0400 |
commit | e3224234717b4228c235cee401af89212f17a3a4 (patch) | |
tree | 10cc3810fa160e168fc29fb392929ab00a91bacb /arch/x86/kernel/cpu/common.c | |
parent | 1b05d60d60e81c6594da8298107a05b506f01797 (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.c | 7 |
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. |