aboutsummaryrefslogtreecommitdiffstats
path: root/arch/i386
diff options
context:
space:
mode:
authorFernando Luis Vazquez Cao <fernando@oss.ntt.co.jp>2007-05-09 05:33:27 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-05-09 15:30:48 -0400
commita36166c6ef45081fea6eeaf5ca785d7ed786b6e2 (patch)
treebdb5a99e3c80883cbb84d6e190b4dabefec79032 /arch/i386
parent2f4dfe206a2fc07099dfad77a8ea2f4b4ae2140f (diff)
Use the APIC to determine the hardware processor id - i386
hard_smp_processor_id used to be just a macro that hard-coded hard_smp_processor_id to 0 in the non SMP case. When booting non SMP kernels on hardware where the boot ioapic id is not 0 this turns out to be a problem. This is happens frequently in the case of kdump and once in a great while in the case of real hardware. Use the APIC to determine the hardware processor id in both UP and SMP kernels to fix this issue. Notice that hard_smp_processor_id is only used by SMP code or by code that works with apics so we do not need to handle the case when apics are not present and hard_smp_processor_id should never be called there. Signed-off-by: Fernando Luis Vazquez Cao <fernando@oss.ntt.co.jp> Cc: "Luck, Tony" <tony.luck@intel.com> Acked-by: Andi Kleen <ak@suse.de> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Cc: Vivek Goyal <vgoyal@in.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/i386')
-rw-r--r--arch/i386/mach-generic/probe.c2
1 files changed, 0 insertions, 2 deletions
diff --git a/arch/i386/mach-generic/probe.c b/arch/i386/mach-generic/probe.c
index a7b3999bb37a..74f3da634423 100644
--- a/arch/i386/mach-generic/probe.c
+++ b/arch/i386/mach-generic/probe.c
@@ -119,9 +119,7 @@ int __init acpi_madt_oem_check(char *oem_id, char *oem_table_id)
119 return 0; 119 return 0;
120} 120}
121 121
122#ifdef CONFIG_SMP
123int hard_smp_processor_id(void) 122int hard_smp_processor_id(void)
124{ 123{
125 return genapic->get_apic_id(*(unsigned long *)(APIC_BASE+APIC_ID)); 124 return genapic->get_apic_id(*(unsigned long *)(APIC_BASE+APIC_ID));
126} 125}
127#endif