diff options
author | travis@sgi.com <travis@sgi.com> | 2008-01-30 07:33:12 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-01-30 07:33:12 -0500 |
commit | e8c10ef9dde3ab7b7d7db6804859d9daf38f01c4 (patch) | |
tree | 528635634911cc977325b746aa149a55b402b2bf /arch/x86/kernel/apic_64.c | |
parent | ea348f3e58f43a27c8ac414dd3a14ee59528b86a (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.c | 16 |
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 | */ |