[PATCH] x86: MP_processor_info fix
Remove the weird and apparently unnecessary logic in MP_processor_info() which assumes that the BSP is the first one to run MP_processor_info(). On one of my boxes that isn't true and cpu_possible_map gets the wrong value. Cc: Zwane Mwaikambo <zwane@arm.linux.org.uk> Cc: Alexander Nyberg <alexn@telia.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
5dce225bd9
commit
1299232b57
1 changed files with 10 additions and 14 deletions
|
@ -122,8 +122,8 @@ static int MP_valid_apicid(int apicid, int version)
|
|||
|
||||
static void __init MP_processor_info (struct mpc_config_processor *m)
|
||||
{
|
||||
int ver, apicid, cpu, found_bsp = 0;
|
||||
physid_mask_t tmp;
|
||||
int ver, apicid;
|
||||
physid_mask_t phys_cpu;
|
||||
|
||||
if (!(m->mpc_cpuflag & CPU_ENABLED))
|
||||
return;
|
||||
|
@ -181,7 +181,6 @@ static void __init MP_processor_info (struct mpc_config_processor *m)
|
|||
if (m->mpc_cpuflag & CPU_BOOTPROCESSOR) {
|
||||
Dprintk(" Bootup CPU\n");
|
||||
boot_cpu_physical_apicid = m->mpc_apicid;
|
||||
found_bsp = 1;
|
||||
}
|
||||
|
||||
if (num_processors >= NR_CPUS) {
|
||||
|
@ -195,29 +194,26 @@ static void __init MP_processor_info (struct mpc_config_processor *m)
|
|||
" Processor ignored.\n", maxcpus);
|
||||
return;
|
||||
}
|
||||
num_processors++;
|
||||
ver = m->mpc_apicver;
|
||||
|
||||
if (!MP_valid_apicid(apicid, ver)) {
|
||||
printk(KERN_WARNING "Processor #%d INVALID. (Max ID: %d).\n",
|
||||
m->mpc_apicid, MAX_APICS);
|
||||
--num_processors;
|
||||
return;
|
||||
}
|
||||
|
||||
if (found_bsp)
|
||||
cpu = 0;
|
||||
else
|
||||
cpu = num_processors - 1;
|
||||
cpu_set(cpu, cpu_possible_map);
|
||||
tmp = apicid_to_cpu_present(apicid);
|
||||
physids_or(phys_cpu_present_map, phys_cpu_present_map, tmp);
|
||||
|
||||
cpu_set(num_processors, cpu_possible_map);
|
||||
num_processors++;
|
||||
phys_cpu = apicid_to_cpu_present(apicid);
|
||||
physids_or(phys_cpu_present_map, phys_cpu_present_map, phys_cpu);
|
||||
|
||||
/*
|
||||
* Validate version
|
||||
*/
|
||||
if (ver == 0x0) {
|
||||
printk(KERN_WARNING "BIOS bug, APIC version is 0 for CPU#%d! fixing up to 0x10. (tell your hw vendor)\n", m->mpc_apicid);
|
||||
printk(KERN_WARNING "BIOS bug, APIC version is 0 for CPU#%d! "
|
||||
"fixing up to 0x10. (tell your hw vendor)\n",
|
||||
m->mpc_apicid);
|
||||
ver = 0x10;
|
||||
}
|
||||
apic_version[m->mpc_apicid] = ver;
|
||||
|
|
Loading…
Reference in a new issue