diff options
author | Vivek Goyal <vgoyal@in.ibm.com> | 2005-10-30 17:59:46 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-10-30 20:37:13 -0500 |
commit | 009b29d90f575a83eba185950a7182ab05e7741a (patch) | |
tree | c728a076c56d648ad1017338c3479ae61aebcefe /arch/i386/kernel/apic.c | |
parent | bda98685b855f71f7e2fc5378aa3cdfb24a9db65 (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.c | 3 |
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 | /* |