• Mikael Pettersson's avatar
    [PATCH] APIC ID fixes · c6f58929
    Mikael Pettersson authored
    1) apic_write_around(APIC_ID, boot_cpu_physical_apicid) places the APIC
    value in the lower 8 bits of APIC_ID, when it should be in the upper 8. As
    as result, it effectively forces the APIC id to always be 0 for the boot
    CPU, which is fatal on SMP AMD boxes.
    
     Fix: don't do the write at all. The APIC_ID value should be right already.
    
    2) phys_cpu_present_map = 1 means we always set bit 0, but later on
       in setup_local_APIC() we do
            if (!clustered_apic_mode &&
                !test_bit(GET_APIC_ID(apic_read(APIC_ID)), &phys_cpu_present_map))
                    BUG();
    and the bug is triggered if the APIC_ID is not zero.
    
     Fix: initialize 'phys_cpu_present_map' correctly.
    c6f58929
apic.c 28.8 KB