diff options
author | Yinghai Lu <yhlu.kernel@gmail.com> | 2008-03-06 16:46:39 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-04-17 11:40:58 -0400 |
commit | 01aaea1afbcdb7c49fe4a567ebe3e295db9f720d (patch) | |
tree | 21974b32aad2b004d2ac67bf5ee7d8812d0d30cd /arch/x86/kernel/cpu/common.c | |
parent | 459cce726730ca0ac93701e53aa1d0d055ce9e90 (diff) |
x86: introduce initial apicid
store initial_apicid from early identify. it is could be different from
phys_proc_id later.
also print it out in /proc/cpuinfo.
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 | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index 57a46c36fa23..0dd87b8d6707 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c | |||
@@ -369,10 +369,12 @@ static void __cpuinit generic_identify(struct cpuinfo_x86 *c) | |||
369 | if (c->x86 >= 0x6) | 369 | if (c->x86 >= 0x6) |
370 | c->x86_model += ((tfms >> 16) & 0xF) << 4; | 370 | c->x86_model += ((tfms >> 16) & 0xF) << 4; |
371 | c->x86_mask = tfms & 15; | 371 | c->x86_mask = tfms & 15; |
372 | c->initial_apicid = (ebx >> 24) & 0xFF; | ||
372 | #ifdef CONFIG_X86_HT | 373 | #ifdef CONFIG_X86_HT |
373 | c->apicid = phys_pkg_id((ebx >> 24) & 0xFF, 0); | 374 | c->apicid = phys_pkg_id(c->initial_apicid, 0); |
375 | c->phys_proc_id = c->initial_apicid; | ||
374 | #else | 376 | #else |
375 | c->apicid = (ebx >> 24) & 0xFF; | 377 | c->apicid = c->initial_apicid; |
376 | #endif | 378 | #endif |
377 | if (test_cpu_cap(c, X86_FEATURE_CLFLSH)) | 379 | if (test_cpu_cap(c, X86_FEATURE_CLFLSH)) |
378 | c->x86_clflush_size = ((ebx >> 8) & 0xff) * 8; | 380 | c->x86_clflush_size = ((ebx >> 8) & 0xff) * 8; |
@@ -395,9 +397,6 @@ static void __cpuinit generic_identify(struct cpuinfo_x86 *c) | |||
395 | init_scattered_cpuid_features(c); | 397 | init_scattered_cpuid_features(c); |
396 | } | 398 | } |
397 | 399 | ||
398 | #ifdef CONFIG_X86_HT | ||
399 | c->phys_proc_id = (cpuid_ebx(1) >> 24) & 0xff; | ||
400 | #endif | ||
401 | } | 400 | } |
402 | 401 | ||
403 | static void __cpuinit squash_the_stupid_serial_number(struct cpuinfo_x86 *c) | 402 | static void __cpuinit squash_the_stupid_serial_number(struct cpuinfo_x86 *c) |
@@ -554,7 +553,7 @@ void __cpuinit detect_ht(struct cpuinfo_x86 *c) | |||
554 | } | 553 | } |
555 | 554 | ||
556 | index_msb = get_count_order(smp_num_siblings); | 555 | index_msb = get_count_order(smp_num_siblings); |
557 | c->phys_proc_id = phys_pkg_id((ebx >> 24) & 0xFF, index_msb); | 556 | c->phys_proc_id = phys_pkg_id(c->initial_apicid, index_msb); |
558 | 557 | ||
559 | printk(KERN_INFO "CPU: Physical Processor ID: %d\n", | 558 | printk(KERN_INFO "CPU: Physical Processor ID: %d\n", |
560 | c->phys_proc_id); | 559 | c->phys_proc_id); |
@@ -565,7 +564,7 @@ void __cpuinit detect_ht(struct cpuinfo_x86 *c) | |||
565 | 564 | ||
566 | core_bits = get_count_order(c->x86_max_cores); | 565 | core_bits = get_count_order(c->x86_max_cores); |
567 | 566 | ||
568 | c->cpu_core_id = phys_pkg_id((ebx >> 24) & 0xFF, index_msb) & | 567 | c->cpu_core_id = phys_pkg_id(c->initial_apicid, index_msb) & |
569 | ((1 << core_bits) - 1); | 568 | ((1 << core_bits) - 1); |
570 | 569 | ||
571 | if (c->x86_max_cores > 1) | 570 | if (c->x86_max_cores > 1) |