aboutsummaryrefslogtreecommitdiffstats
path: root/arch/i386/kernel/apic.c
diff options
context:
space:
mode:
authorVivek Goyal <vgoyal@in.ibm.com>2005-10-30 17:59:46 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2005-10-30 20:37:13 -0500
commit009b29d90f575a83eba185950a7182ab05e7741a (patch)
treec728a076c56d648ad1017338c3479ae61aebcefe /arch/i386/kernel/apic.c
parentbda98685b855f71f7e2fc5378aa3cdfb24a9db65 (diff)
[PATCH] kdump/i386: apic verification failure fix
o Removes the unnecessary call to local_irq_disable(). o Kdump was failing while second kernel was coming up. Check for presence of boot cpu apic id was failing in (apic_id_registered), hence hitting BUG(). o This should not have failed because before calling setup_local_APIC(), it is ensured that even if BIOS has not reported boot cpu, then hard set the prence of it. Problem happens because of usage of hard_smp_processor_id() which is hardcoded to zero in case of non SMP kernel. In kdump case second kernel can boot on a cpu whose boot cpu id is not zero. o Using boot_cpu_physical_apicid instead to hard set the presence of boot cpu. Signed-off-by: Vivek Goyal <vgoyal@in.ibm.com> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/i386/kernel/apic.c')
-rw-r--r--arch/i386/kernel/apic.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/arch/i386/kernel/apic.c b/arch/i386/kernel/apic.c
index 8d81b7bf7ad2..9204be6eedb3 100644
--- a/arch/i386/kernel/apic.c
+++ b/arch/i386/kernel/apic.c
@@ -1055,7 +1055,6 @@ void __init setup_boot_APIC_clock(void)
1055 using_apic_timer = 1; 1055 using_apic_timer = 1;
1056 1056
1057 local_irq_save(flags); 1057 local_irq_save(flags);
1058 local_irq_disable();
1059 1058
1060 calibration_result = calibrate_APIC_clock(); 1059 calibration_result = calibrate_APIC_clock();
1061 /* 1060 /*
@@ -1299,7 +1298,7 @@ int __init APIC_init(void)
1299 if (!check_phys_apicid_present(boot_cpu_physical_apicid)) { 1298 if (!check_phys_apicid_present(boot_cpu_physical_apicid)) {
1300 printk("weird, boot CPU (#%d) not listed by the BIOS.\n", 1299 printk("weird, boot CPU (#%d) not listed by the BIOS.\n",
1301 boot_cpu_physical_apicid); 1300 boot_cpu_physical_apicid);
1302 physid_set(hard_smp_processor_id(), phys_cpu_present_map); 1301 physid_set(boot_cpu_physical_apicid, phys_cpu_present_map);
1303 } 1302 }
1304 1303
1305 /* 1304 /*