Skip to content

Commit

Permalink
[PATCH] i386 mpparse: Only ignore lapic information we can't store
Browse files Browse the repository at this point in the history
After staring at mpparse.c for a little longer I noticed that when we hit
our limit of num_processors we are filtering out information about other
processors that we can still store.

This patch just reorders the code so we store everything we can.

This should avoid the incorrect warning about our boot CPU not being listed
by the BIOS that we are now getting in the kexec on panic case, and it
should allow us to detect all apicid conflicts even when our physical
number of cpus exceeds maxcpus.

Signed-off-by: Eric W. Biederman <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
ebiederm authored and Linus Torvalds committed Oct 31, 2005
1 parent 009b29d commit 6c180d9
Showing 1 changed file with 19 additions and 16 deletions.
35 changes: 19 additions & 16 deletions arch/i386/kernel/mpparse.c
Original file line number Diff line number Diff line change
Expand Up @@ -182,17 +182,6 @@ static void __devinit MP_processor_info (struct mpc_config_processor *m)
boot_cpu_physical_apicid = m->mpc_apicid;
}

if (num_processors >= NR_CPUS) {
printk(KERN_WARNING "WARNING: NR_CPUS limit of %i reached."
" Processor ignored.\n", NR_CPUS);
return;
}

if (num_processors >= maxcpus) {
printk(KERN_WARNING "WARNING: maxcpus limit of %i reached."
" Processor ignored.\n", maxcpus);
return;
}
ver = m->mpc_apicver;

if (!MP_valid_apicid(apicid, ver)) {
Expand All @@ -201,11 +190,6 @@ static void __devinit MP_processor_info (struct mpc_config_processor *m)
return;
}

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
*/
Expand All @@ -216,6 +200,25 @@ static void __devinit MP_processor_info (struct mpc_config_processor *m)
ver = 0x10;
}
apic_version[m->mpc_apicid] = ver;

phys_cpu = apicid_to_cpu_present(apicid);
physids_or(phys_cpu_present_map, phys_cpu_present_map, phys_cpu);

if (num_processors >= NR_CPUS) {
printk(KERN_WARNING "WARNING: NR_CPUS limit of %i reached."
" Processor ignored.\n", NR_CPUS);
return;
}

if (num_processors >= maxcpus) {
printk(KERN_WARNING "WARNING: maxcpus limit of %i reached."
" Processor ignored.\n", maxcpus);
return;
}

cpu_set(num_processors, cpu_possible_map);
num_processors++;

if ((num_processors > 8) &&
APIC_XAPIC(ver) &&
(boot_cpu_data.x86_vendor == X86_VENDOR_INTEL))
Expand Down

0 comments on commit 6c180d9

Please sign in to comment.