diff options
author | travis@sgi.com <travis@sgi.com> | 2008-01-30 07:33:21 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-01-30 07:33:21 -0500 |
commit | 602a54a8cab2759fceb20b3e0c2a27c4eac005df (patch) | |
tree | 5335042960f510b0db626b0a155d593779c11ac4 | |
parent | 0164fe16247ac2e1b697a9bf0e71df81497c4709 (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>
-rw-r--r-- | arch/x86/kernel/apic_64.c | 6 | ||||
-rw-r--r-- | arch/x86/kernel/setup64.c | 13 | ||||
-rw-r--r-- | arch/x86/kernel/setup_64.c | 1 | ||||
-rw-r--r-- | arch/x86/kernel/smpboot_32.c | 2 | ||||
-rw-r--r-- | arch/x86/mm/srat_64.c | 2 |
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 | */ |
91 | void __init setup_percpu_maps(void) | 91 | static 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 | ||
158 | void pda_init(int cpu) | 161 | void 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 }; |
466 | EXPORT_SYMBOL(node_to_cpumask_map); | 466 | EXPORT_SYMBOL(node_to_cpumask_map); |
467 | /* which node each logical CPU is on */ | 467 | /* which node each logical CPU is on */ |
468 | u8 cpu_to_node_map[NR_CPUS] __read_mostly = { [0 ... NR_CPUS-1] = 0 }; | 468 | int cpu_to_node_map[NR_CPUS] __read_mostly = { [0 ... NR_CPUS-1] = 0 }; |
469 | EXPORT_SYMBOL(cpu_to_node_map); | 469 | EXPORT_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) | |||
397 | static int fake_node_to_pxm_map[MAX_NUMNODES] __initdata = { | 397 | static 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 | }; |
400 | static u16 fake_apicid_to_node[MAX_LOCAL_APIC] __initdata = { | 400 | static 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 | }; |
403 | static int __init find_node_by_addr(unsigned long addr) | 403 | static int __init find_node_by_addr(unsigned long addr) |