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 | 834beda15ecc43c110c0a6ac39ec1aa79f891716 (patch) | |
tree | 56f00ac3e1b06083c5be928dc740369a022b76fa /arch/x86/kernel/smpboot_64.c | |
parent | ac72e7888a612dccfbc15b34698aad441bdfda10 (diff) |
x86: change NR_CPUS arrays in numa_64 fixup
Change the following static arrays sized by NR_CPUS to
per_cpu data variables:
char cpu_to_node_map[NR_CPUS];
fixup:
- Split cpu_to_node function into "early" and "late" versions
so that x86_cpu_to_node_map_early_ptr is not EXPORT'ed and
the cpu_to_node inline function is more streamlined.
- This also involves setting up the percpu maps as early as possible.
- Fix X86_32 NUMA build errors that previous version of this
patch caused.
V2->V3:
- add early_cpu_to_node function to keep cpu_to_node efficient
- move and rename smp_set_apicids() to setup_percpu_maps()
- call setup_percpu_maps() as early as possible
V1->V2:
- Removed extraneous casts
- Fix !NUMA builds with '#ifdef CONFIG_NUMA"
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/smpboot_64.c')
-rw-r--r-- | arch/x86/kernel/smpboot_64.c | 34 |
1 files changed, 0 insertions, 34 deletions
diff --git a/arch/x86/kernel/smpboot_64.c b/arch/x86/kernel/smpboot_64.c index 93071cdf0849..4e14ecb90764 100644 --- a/arch/x86/kernel/smpboot_64.c +++ b/arch/x86/kernel/smpboot_64.c | |||
@@ -851,39 +851,6 @@ static int __init smp_sanity_check(unsigned max_cpus) | |||
851 | return 0; | 851 | return 0; |
852 | } | 852 | } |
853 | 853 | ||
854 | /* | ||
855 | * Copy data used in early init routines from the initial arrays to the | ||
856 | * per cpu data areas. These arrays then become expendable and the | ||
857 | * *_ptrs are zeroed indicating that the static arrays are gone. | ||
858 | */ | ||
859 | void __init smp_set_apicids(void) | ||
860 | { | ||
861 | int cpu; | ||
862 | |||
863 | for_each_possible_cpu(cpu) { | ||
864 | if (per_cpu_offset(cpu)) { | ||
865 | per_cpu(x86_cpu_to_apicid, cpu) = | ||
866 | x86_cpu_to_apicid_init[cpu]; | ||
867 | #ifdef CONFIG_NUMA | ||
868 | per_cpu(x86_cpu_to_node_map, cpu) = | ||
869 | x86_cpu_to_node_map_init[cpu]; | ||
870 | #endif | ||
871 | per_cpu(x86_bios_cpu_apicid, cpu) = | ||
872 | x86_bios_cpu_apicid_init[cpu]; | ||
873 | } | ||
874 | else | ||
875 | printk(KERN_NOTICE "per_cpu_offset zero for cpu %d\n", | ||
876 | cpu); | ||
877 | } | ||
878 | |||
879 | /* indicate the early static arrays are gone */ | ||
880 | x86_cpu_to_apicid_early_ptr = NULL; | ||
881 | #ifdef CONFIG_NUMA | ||
882 | x86_cpu_to_node_map_early_ptr = NULL; | ||
883 | #endif | ||
884 | x86_bios_cpu_apicid_early_ptr = NULL; | ||
885 | } | ||
886 | |||
887 | static void __init smp_cpu_index_default(void) | 854 | static void __init smp_cpu_index_default(void) |
888 | { | 855 | { |
889 | int i; | 856 | int i; |
@@ -906,7 +873,6 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
906 | smp_cpu_index_default(); | 873 | smp_cpu_index_default(); |
907 | current_cpu_data = boot_cpu_data; | 874 | current_cpu_data = boot_cpu_data; |
908 | current_thread_info()->cpu = 0; /* needed? */ | 875 | current_thread_info()->cpu = 0; /* needed? */ |
909 | smp_set_apicids(); | ||
910 | set_cpu_sibling_map(0); | 876 | set_cpu_sibling_map(0); |
911 | 877 | ||
912 | if (smp_sanity_check(max_cpus) < 0) { | 878 | if (smp_sanity_check(max_cpus) < 0) { |