|
@@ -107,6 +107,7 @@ static int __init mpf_checksum(unsigned char *mp, int len)
|
|
|
static void __init MP_processor_info (struct mpc_config_processor *m)
|
|
|
{
|
|
|
int ver;
|
|
|
+ static int found_bsp=0;
|
|
|
|
|
|
if (!(m->mpc_cpuflag & CPU_ENABLED))
|
|
|
return;
|
|
@@ -126,11 +127,6 @@ static void __init MP_processor_info (struct mpc_config_processor *m)
|
|
|
" Processor ignored.\n", NR_CPUS);
|
|
|
return;
|
|
|
}
|
|
|
- if (num_processors >= maxcpus) {
|
|
|
- printk(KERN_WARNING "WARNING: maxcpus limit of %i reached."
|
|
|
- " Processor ignored.\n", maxcpus);
|
|
|
- return;
|
|
|
- }
|
|
|
|
|
|
num_processors++;
|
|
|
|
|
@@ -150,7 +146,19 @@ static void __init MP_processor_info (struct mpc_config_processor *m)
|
|
|
ver = 0x10;
|
|
|
}
|
|
|
apic_version[m->mpc_apicid] = ver;
|
|
|
- bios_cpu_apicid[num_processors - 1] = m->mpc_apicid;
|
|
|
+ if (m->mpc_cpuflag & CPU_BOOTPROCESSOR) {
|
|
|
+ /*
|
|
|
+ * bios_cpu_apicid is required to have processors listed
|
|
|
+ * in same order as logical cpu numbers. Hence the first
|
|
|
+ * entry is BSP, and so on.
|
|
|
+ */
|
|
|
+ bios_cpu_apicid[0] = m->mpc_apicid;
|
|
|
+ x86_cpu_to_apicid[0] = m->mpc_apicid;
|
|
|
+ found_bsp = 1;
|
|
|
+ } else {
|
|
|
+ bios_cpu_apicid[num_processors - found_bsp] = m->mpc_apicid;
|
|
|
+ x86_cpu_to_apicid[num_processors - found_bsp] = m->mpc_apicid;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
static void __init MP_bus_info (struct mpc_config_bus *m)
|