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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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]
  Powered by Linux