kernel - Fix lapic mask for > 16 apic ids
authorMatthew Dillon <dillon@apollo.backplane.com>
Mon, 6 Dec 2010 22:03:42 +0000 (14:03 -0800)
committerMatthew Dillon <dillon@apollo.backplane.com>
Mon, 6 Dec 2010 22:03:42 +0000 (14:03 -0800)
* The lapic mask in the MP startup was only allowing for 16 apic ids,
  adjust the mask to allow for all 256.

* Supermicro now boots w/12 cpus and probably 24.  More work required
  to get it to boot w/48.

sys/platform/pc32/i386/mp_machdep.c
sys/platform/pc64/x86_64/mp_machdep.c

index d9662d3..43532e6 100644 (file)
@@ -2795,7 +2795,7 @@ ap_init(void)
        kprintf("SMP: AP CPU #%d Launched!\n", mycpu->gd_cpuid);
 
        /* A quick check from sanity claus */
-       apic_id = (apic_id_to_logical[(lapic.id & 0x0f000000) >> 24]);
+       apic_id = (apic_id_to_logical[(lapic.id & 0xff000000) >> 24]);
        if (mycpu->gd_cpuid != apic_id) {
                kprintf("SMP: cpuid = %d\n", mycpu->gd_cpuid);
                kprintf("SMP: apic_id = %d\n", apic_id);
index d18825c..76ef80a 100644 (file)
@@ -2809,10 +2809,11 @@ ap_init(void)
        kprintf("SMP: AP CPU #%d Launched!\n", mycpu->gd_cpuid);
 
        /* A quick check from sanity claus */
-       apic_id = (apic_id_to_logical[(lapic->id & 0x0f000000) >> 24]);
+       apic_id = (apic_id_to_logical[(lapic->id & 0xff000000) >> 24]);
        if (mycpu->gd_cpuid != apic_id) {
                kprintf("SMP: cpuid = %d\n", mycpu->gd_cpuid);
-               kprintf("SMP: apic_id = %d\n", apic_id);
+               kprintf("SMP: apic_id = %d lapicid %d\n",
+                       apic_id, (lapic->id & 0xff000000) >> 24);
 #if JGXXX
                kprintf("PTD[MPPTDI] = %p\n", (void *)PTD[MPPTDI]);
 #endif