Messages in this thread Patch in this message | | | From | James Cleverdon <> | Subject | Re: 2.4.19-rc3-ac2 SMP | Date | Wed, 24 Jul 2002 20:34:01 -0700 |
| |
On Wednesday 24 July 2002 08:26 am, Zwane Mwaikambo wrote: [ Snip! ] >raw_phys_apicid[]= 00 01 02 03 00 00 00 00 00 00 00 00 00 00 00 00 00 >00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > cpu_2_logical_apicid[]= 01 01 02 08 FF FF FF FF FF FF FF FF FF FF FF FF FF > FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF > cpu_2_physical_apicid[]= 02 00 01 03 FF FF FF FF FF FF FF FF FF FF FF FF FF > FF F F FF FF FF FF FF FF FF FF FF FF FF FF FF
Ah ha! Note that while the CPU records in the {MPS,ACPI/MADT} table are in numerical order (as preserved in raw_phys_apicid), the boot CPU is # 02. The flat code in smp_boot_cpus assumes that the boot CPU will be the first record in the list. Oops.
Try the attached patch and see if it helps.
[ Snip! ]
> > Regards, > Zwane
-- James Cleverdon IBM xSeries Linux Solutions {jamesclv(Unix, preferred), cleverdj(Notes)} at us dot ibm dot com --- ac3/arch/i386/kernel/smpboot.c.df Tue Jul 23 15:02:49 2002 +++ ac3/arch/i386/kernel/smpboot.c Wed Jul 24 18:02:24 2002 @@ -1077,6 +1077,7 @@ */ Dprintk("CPU present map: %lx\n", phys_cpu_present_map); + cpu = 1; for (bit = 0; bit < NR_CPUS; bit++) { if (!(phys_cpu_present_map & (1UL << bit))) continue; @@ -1093,7 +1094,7 @@ else if (clustered_apic_logical) log_apicid = ((bit >> 2) << 4) | (1 << (bit & 0x3)); else - log_apicid = 1u << bit; + log_apicid = 1u << cpu; do_boot_cpu(phys_apicid, log_apicid); @@ -1104,6 +1105,8 @@ (phys_cpu_present_map & (1ul << bit))) printk("CPU #%d not responding - cannot use it.\n", bit); + else + ++cpu; } /* | |