aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86
diff options
context:
space:
mode:
authortravis@sgi.com <travis@sgi.com>2008-01-30 07:33:21 -0500
committerIngo Molnar <mingo@elte.hu>2008-01-30 07:33:21 -0500
commit602a54a8cab2759fceb20b3e0c2a27c4eac005df (patch)
tree5335042960f510b0db626b0a155d593779c11ac4 /arch/x86
parent0164fe16247ac2e1b697a9bf0e71df81497c4709 (diff)
x86: change bios_cpu_apicid to percpu data variable fixup
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. 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')
-rw-r--r--arch/x86/kernel/apic_64.c6
-rw-r--r--arch/x86/kernel/setup64.c13
-rw-r--r--arch/x86/kernel/setup_64.c1
-rw-r--r--arch/x86/kernel/smpboot_32.c2
-rw-r--r--arch/x86/mm/srat_64.c2
5 files changed, 14 insertions, 10 deletions
diff --git a/arch/x86/kernel/apic_64.c b/arch/x86/kernel/apic_64.c
index a7a38c9da136..d8d03e09dea2 100644
--- a/arch/x86/kernel/apic_64.c
+++ b/arch/x86/kernel/apic_64.c
@@ -1205,9 +1205,9 @@ __cpuinit int apic_is_clustered_box(void)
1205 1205
1206 /* Problem: Partially populated chassis may not have CPUs in some of 1206 /* Problem: Partially populated chassis may not have CPUs in some of
1207 * the APIC clusters they have been allocated. Only present CPUs have 1207 * the APIC clusters they have been allocated. Only present CPUs have
1208 * x86_bios_cpu_apicid entries, thus causing zeroes in the bitmap. Since 1208 * x86_bios_cpu_apicid entries, thus causing zeroes in the bitmap.
1209 * clusters are allocated sequentially, count zeros only if they are 1209 * Since clusters are allocated sequentially, count zeros only if
1210 * bounded by ones. 1210 * they are bounded by ones.
1211 */ 1211 */
1212 clusters = 0; 1212 clusters = 0;
1213 zeros = 0; 1213 zeros = 0;
diff --git a/arch/x86/kernel/setup64.c b/arch/x86/kernel/setup64.c
index 855ec82e4f76..0389331059ad 100644
--- a/arch/x86/kernel/setup64.c
+++ b/arch/x86/kernel/setup64.c
@@ -85,10 +85,10 @@ __setup("noexec32=", nonx32_setup);
85 85
86/* 86/*
87 * Copy data used in early init routines from the initial arrays to the 87 * Copy data used in early init routines from the initial arrays to the
88 * per cpu data areas. These arrays then become expendable and the *_ptrs 88 * per cpu data areas. These arrays then become expendable and the
89 * are zeroed indicating that the static arrays are gone. 89 * *_early_ptr's are zeroed indicating that the static arrays are gone.
90 */ 90 */
91void __init setup_percpu_maps(void) 91static void __init setup_per_cpu_maps(void)
92{ 92{
93 int cpu; 93 int cpu;
94 94
@@ -98,6 +98,8 @@ void __init setup_percpu_maps(void)
98#endif 98#endif
99 per_cpu(x86_cpu_to_apicid, cpu) = 99 per_cpu(x86_cpu_to_apicid, cpu) =
100 x86_cpu_to_apicid_init[cpu]; 100 x86_cpu_to_apicid_init[cpu];
101 per_cpu(x86_bios_cpu_apicid, cpu) =
102 x86_bios_cpu_apicid_init[cpu];
101#ifdef CONFIG_NUMA 103#ifdef CONFIG_NUMA
102 per_cpu(x86_cpu_to_node_map, cpu) = 104 per_cpu(x86_cpu_to_node_map, cpu) =
103 x86_cpu_to_node_map_init[cpu]; 105 x86_cpu_to_node_map_init[cpu];
@@ -110,8 +112,9 @@ void __init setup_percpu_maps(void)
110#endif 112#endif
111 } 113 }
112 114
113 /* indicate the early static arrays are gone */ 115 /* indicate the early static arrays will soon be gone */
114 x86_cpu_to_apicid_early_ptr = NULL; 116 x86_cpu_to_apicid_early_ptr = NULL;
117 x86_bios_cpu_apicid_early_ptr = NULL;
115#ifdef CONFIG_NUMA 118#ifdef CONFIG_NUMA
116 x86_cpu_to_node_map_early_ptr = NULL; 119 x86_cpu_to_node_map_early_ptr = NULL;
117#endif 120#endif
@@ -152,7 +155,7 @@ void __init setup_per_cpu_areas(void)
152 } 155 }
153 156
154 /* setup percpu data maps early */ 157 /* setup percpu data maps early */
155 setup_percpu_maps(); 158 setup_per_cpu_maps();
156} 159}
157 160
158void pda_init(int cpu) 161void pda_init(int cpu)
diff --git a/arch/x86/kernel/setup_64.c b/arch/x86/kernel/setup_64.c
index 79635b7bd57a..f84e2662f1ca 100644
--- a/arch/x86/kernel/setup_64.c
+++ b/arch/x86/kernel/setup_64.c
@@ -334,6 +334,7 @@ void __init setup_arch(char **cmdline_p)
334#ifdef CONFIG_SMP 334#ifdef CONFIG_SMP
335 /* setup to use the early static init tables during kernel startup */ 335 /* setup to use the early static init tables during kernel startup */
336 x86_cpu_to_apicid_early_ptr = (void *)&x86_cpu_to_apicid_init; 336 x86_cpu_to_apicid_early_ptr = (void *)&x86_cpu_to_apicid_init;
337 x86_bios_cpu_apicid_early_ptr = (void *)&x86_bios_cpu_apicid_init;
337#ifdef CONFIG_NUMA 338#ifdef CONFIG_NUMA
338 x86_cpu_to_node_map_early_ptr = (void *)&x86_cpu_to_node_map_init; 339 x86_cpu_to_node_map_early_ptr = (void *)&x86_cpu_to_node_map_init;
339#endif 340#endif
diff --git a/arch/x86/kernel/smpboot_32.c b/arch/x86/kernel/smpboot_32.c
index 50232d476a27..915ec6267326 100644
--- a/arch/x86/kernel/smpboot_32.c
+++ b/arch/x86/kernel/smpboot_32.c
@@ -465,7 +465,7 @@ cpumask_t node_to_cpumask_map[MAX_NUMNODES] __read_mostly =
465 { [0 ... MAX_NUMNODES-1] = CPU_MASK_NONE }; 465 { [0 ... MAX_NUMNODES-1] = CPU_MASK_NONE };
466EXPORT_SYMBOL(node_to_cpumask_map); 466EXPORT_SYMBOL(node_to_cpumask_map);
467/* which node each logical CPU is on */ 467/* which node each logical CPU is on */
468u8 cpu_to_node_map[NR_CPUS] __read_mostly = { [0 ... NR_CPUS-1] = 0 }; 468int cpu_to_node_map[NR_CPUS] __read_mostly = { [0 ... NR_CPUS-1] = 0 };
469EXPORT_SYMBOL(cpu_to_node_map); 469EXPORT_SYMBOL(cpu_to_node_map);
470 470
471/* set up a mapping between cpu and node. */ 471/* set up a mapping between cpu and node. */
diff --git a/arch/x86/mm/srat_64.c b/arch/x86/mm/srat_64.c
index f828e6a6973d..4aed38fa4a65 100644
--- a/arch/x86/mm/srat_64.c
+++ b/arch/x86/mm/srat_64.c
@@ -397,7 +397,7 @@ int __init acpi_scan_nodes(unsigned long start, unsigned long end)
397static int fake_node_to_pxm_map[MAX_NUMNODES] __initdata = { 397static int fake_node_to_pxm_map[MAX_NUMNODES] __initdata = {
398 [0 ... MAX_NUMNODES-1] = PXM_INVAL 398 [0 ... MAX_NUMNODES-1] = PXM_INVAL
399}; 399};
400static u16 fake_apicid_to_node[MAX_LOCAL_APIC] __initdata = { 400static s16 fake_apicid_to_node[MAX_LOCAL_APIC] __initdata = {
401 [0 ... MAX_LOCAL_APIC-1] = NUMA_NO_NODE 401 [0 ... MAX_LOCAL_APIC-1] = NUMA_NO_NODE
402}; 402};
403static int __init find_node_by_addr(unsigned long addr) 403static int __init find_node_by_addr(unsigned long addr)