• Venkatesh Pallipadi's avatar
    [PATCH] bug in bigsmp CPU bringup · d1a1ac7b
    Venkatesh Pallipadi authored
    There is an bug in bigsmp sub-architecture, due to which it will not
    enable all the CPUs when the BIOS-APICIDs are not 0 to n-1 (where n is
    total number of CPUs). Particularly, only 2 CPU comes up on a system
    that has 4 CPUs with BIOS APICID as (0, 1, 6, 7).=20
    
    The bug is root caused to check_apicid_present(bit) call in smpboot.c,
    when bigsmp is expecting apicid in place of bit.
    check_apicid_present(bit) in bigsmp subarchitecture checks the bit with
    phys_id_present_map (which is actually map representing all apicids and
    not bit).
    
    One solution is to change check_apicid_present(bit) to
    check_apicid_present(apicid), in smp_boot_cpus().  But, it can affect
    all the other subarchitectures in various subtle ways.  So, here is a
    simple alternate fix (Thanks to Martin Bligh), which solves the above
    problem. 
    
    [ Confirmation from Martin:
    
         Looks fine, it's exactly the same fix we use for Summit.  Since
         we're using the other method instead of the bitmap, this check
         isn't needed, so we can just bypass it.  This way also has the
         great advantage of being isolated to the bigsmp subarch, so it only
         needs testing there ;-)
     ]
    d1a1ac7b
mach_apic.h 4.16 KB