Re: [PATCH] i386 mpparse: Only ignore lapic information we can't store

From: Vivek Goyal
Date: Tue Oct 25 2005 - 04:46:31 EST


On Tue, Oct 25, 2005 at 01:47:08AM -0600, Eric W. Biederman wrote:
>
> 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 <ebiederm@xxxxxxxxxxxx>
>
>

I justed tested the patch. It looks good. BIOS not reporting CPU message
is gone.

Thanks
Vivek

> ---
>
> arch/i386/kernel/mpparse.c | 35 +++++++++++++++++++----------------
> 1 files changed, 19 insertions(+), 16 deletions(-)
>
> applies-to: cf16f96fe9347e42dd2fc6b305005a52783195d4
> 192f11c9442be11c6535b38d371aa3771fd9513e
> diff --git a/arch/i386/kernel/mpparse.c b/arch/i386/kernel/mpparse.c
> index 27aabfc..07555a4 100644
> --- a/arch/i386/kernel/mpparse.c
> +++ b/arch/i386/kernel/mpparse.c
> @@ -182,17 +182,6 @@ static void __init MP_processor_info (st
> 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)) {
> @@ -201,11 +190,6 @@ static void __init MP_processor_info (st
> 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
> */
> @@ -216,6 +200,25 @@ static void __init MP_processor_info (st
> 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))
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/