x86: convert cpu_to_apicid to be a per cpu variable
This patch converts the x86_cpu_to_apicid array to be a per cpu variable. This saves sizeof(apicid) * NR unused cpus. Access is mostly from startup and CPU HOTPLUG functions. MP_processor_info() is one of the functions that require access to the x86_cpu_to_apicid array before the per_cpu data area is setup. For this case, a pointer to the __initdata array is initialized in setup_arch() and removed in smp_prepare_cpus() after the per_cpu data area is initialized. A second change is included to change the initial array value of ARCH i386 from 0xff to BAD_APICID to be consistent with ARCH x86_64. Signed-off-by: Mike Travis <travis@sgi.com> Cc: Andi Kleen <ak@suse.de> Cc: Christoph Lameter <clameter@sgi.com> Cc: "Siddha, Suresh B" <suresh.b.siddha@intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:

committed by
Thomas Gleixner

parent
dbeb2be21d
commit
71fff5e6ca
@@ -86,7 +86,7 @@ static int __init mpf_checksum(unsigned char *mp, int len)
|
||||
return sum & 0xFF;
|
||||
}
|
||||
|
||||
static void __cpuinit MP_processor_info (struct mpc_config_processor *m)
|
||||
static void __cpuinit MP_processor_info(struct mpc_config_processor *m)
|
||||
{
|
||||
int cpu;
|
||||
cpumask_t tmp_map;
|
||||
@@ -123,7 +123,18 @@ static void __cpuinit MP_processor_info (struct mpc_config_processor *m)
|
||||
cpu = 0;
|
||||
}
|
||||
bios_cpu_apicid[cpu] = m->mpc_apicid;
|
||||
x86_cpu_to_apicid[cpu] = m->mpc_apicid;
|
||||
/*
|
||||
* We get called early in the the start_kernel initialization
|
||||
* process when the per_cpu data area is not yet setup, so we
|
||||
* use a static array that is removed after the per_cpu data
|
||||
* area is created.
|
||||
*/
|
||||
if (x86_cpu_to_apicid_ptr) {
|
||||
u8 *x86_cpu_to_apicid = (u8 *)x86_cpu_to_apicid_ptr;
|
||||
x86_cpu_to_apicid[cpu] = m->mpc_apicid;
|
||||
} else {
|
||||
per_cpu(x86_cpu_to_apicid, cpu) = m->mpc_apicid;
|
||||
}
|
||||
|
||||
cpu_set(cpu, cpu_possible_map);
|
||||
cpu_set(cpu, cpu_present_map);
|
||||
|
Reference in New Issue
Block a user