-
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