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 <[email protected]>
>
>
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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]