aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/apic_64.c
diff options
context:
space:
mode:
authortravis@sgi.com <travis@sgi.com>2008-01-30 07:33:12 -0500
committerIngo Molnar <mingo@elte.hu>2008-01-30 07:33:12 -0500
commite8c10ef9dde3ab7b7d7db6804859d9daf38f01c4 (patch)
tree528635634911cc977325b746aa149a55b402b2bf /arch/x86/kernel/apic_64.c
parentea348f3e58f43a27c8ac414dd3a14ee59528b86a (diff)
x86: change bios_cpu_apicid to percpu data variable
Change static bios_cpu_apicid array to a per_cpu data variable. This includes using a static array used during initialization similar to the way x86_cpu_to_apicid[] is handled. There is one early use of bios_cpu_apicid in apic_is_clustered_box(). The other reference in cpu_present_to_apicid() is called after smp_set_apicids() has setup the percpu version of bios_cpu_apicid. [ mingo@elte.hu: build fix ] Signed-off-by: Mike Travis <travis@sgi.com> Reviewed-by: Christoph Lameter <clameter@sgi.com> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/x86/kernel/apic_64.c')
-rw-r--r--arch/x86/kernel/apic_64.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/arch/x86/kernel/apic_64.c b/arch/x86/kernel/apic_64.c
index 01d4ca27ecf0..f9919c492699 100644
--- a/arch/x86/kernel/apic_64.c
+++ b/arch/x86/kernel/apic_64.c
@@ -1180,14 +1180,26 @@ __cpuinit int apic_is_clustered_box(void)
1180 bitmap_zero(clustermap, NUM_APIC_CLUSTERS); 1180 bitmap_zero(clustermap, NUM_APIC_CLUSTERS);
1181 1181
1182 for (i = 0; i < NR_CPUS; i++) { 1182 for (i = 0; i < NR_CPUS; i++) {
1183 id = bios_cpu_apicid[i]; 1183 /* are we being called early in kernel startup? */
1184 if (x86_bios_cpu_apicid_early_ptr) {
1185 id = ((u16 *)x86_bios_cpu_apicid_early_ptr)[i];
1186 }
1187 else if (i < nr_cpu_ids) {
1188 if (cpu_present(i))
1189 id = per_cpu(x86_bios_cpu_apicid, i);
1190 else
1191 continue;
1192 }
1193 else
1194 break;
1195
1184 if (id != BAD_APICID) 1196 if (id != BAD_APICID)
1185 __set_bit(APIC_CLUSTERID(id), clustermap); 1197 __set_bit(APIC_CLUSTERID(id), clustermap);
1186 } 1198 }
1187 1199
1188 /* Problem: Partially populated chassis may not have CPUs in some of 1200 /* Problem: Partially populated chassis may not have CPUs in some of
1189 * the APIC clusters they have been allocated. Only present CPUs have 1201 * the APIC clusters they have been allocated. Only present CPUs have
1190 * bios_cpu_apicid entries, thus causing zeroes in the bitmap. Since 1202 * x86_bios_cpu_apicid entries, thus causing zeroes in the bitmap. Since
1191 * clusters are allocated sequentially, count zeros only if they are 1203 * clusters are allocated sequentially, count zeros only if they are
1192 * bounded by ones. 1204 * bounded by ones.
1193 */ 1205 */