Re: [BUG] 2.5.63: ESR killed my box!

Martin J. Bligh (mbligh@aracnet.com)
Wed, 26 Feb 2003 17:40:56 -0800


> Works for me, but I'm curious if it works for Rusty. We're still not sure
> if he's hitting the same bug... but I guess it's rather early morning in
> .au. :-)
>
> Oh, and 2.4 needs the same fix -- and if Mikael's original BUG_ON() is
> undesirable then we should probably also remove this code from 2.4's
> apic.c:setup_local_APIC()
>
> if (!clustered_apic_mode &&
> !test_bit(GET_APIC_ID(apic_read(APIC_ID)),
> &phys_cpu_present_map)) BUG();
>
> because it's essentially the same test as the BUG_ON(), at least for the
> UP case.

Also from smpboot.c / mpparse.c. Untested patch below (sorry, don't have a
box to hand that uses phys apicids to boot).

diff -urpN -X /home/fletch/.diff.exclude virgin/arch/i386/kernel/mpparse.c
nonzero_apicid2/arch/i386/kernel/mpparse.c
--- virgin/arch/i386/kernel/mpparse.c Tue Feb 25 23:03:43 2003
+++ nonzero_apicid2/arch/i386/kernel/mpparse.c Wed Feb 26 17:39:39 2003
@@ -162,7 +162,8 @@ void __init MP_processor_info (struct mp

if (m->mpc_cpuflag & CPU_BOOTPROCESSOR) {
Dprintk(" Bootup CPU\n");
- boot_cpu_physical_apicid = m->mpc_apicid;
+ if (m->mpc_apicid != hard_smp_processor_id())
+ printk "Warning: MP table lies about boot cpu\n";
boot_cpu_logical_apicid = apicid;
}

diff -urpN -X /home/fletch/.diff.exclude virgin/arch/i386/kernel/smpboot.c
nonzero_apicid2/arch/i386/kernel/smpboot.c
--- virgin/arch/i386/kernel/smpboot.c Sat Feb 15 16:11:40 2003
+++ nonzero_apicid2/arch/i386/kernel/smpboot.c Wed Feb 26 17:37:12 2003
@@ -951,6 +951,7 @@ static void __init smp_boot_cpus(unsigne
print_cpu_info(&cpu_data[0]);

boot_cpu_logical_apicid = logical_smp_processor_id();
+ boot_cpu_physical_apicid = hard_smp_processor_id();

current_thread_info()->cpu = 0;
smp_tune_scheduling();
@@ -1008,9 +1009,6 @@ static void __init smp_boot_cpus(unsigne
connect_bsp_APIC();
setup_local_APIC();
map_cpu_to_logical_apicid();
-
- if (GET_APIC_ID(apic_read(APIC_ID)) != boot_cpu_physical_apicid)
- BUG();

setup_portio_remap();

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/