diff options
author | Glauber de Oliveira Costa <gcosta@redhat.com> | 2008-03-19 13:25:23 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-04-17 11:41:01 -0400 |
commit | 4fe29a85642544503cf81e9cf251ef0f4e65b162 (patch) | |
tree | 1fe0ed2b1e80e7c638fc12e32806e90ba0272516 /arch/x86/kernel/setup64.c | |
parent | fbac7fcbadc54cc5d374873a2e60e924a056d198 (diff) |
x86: use specialized routine for setup per-cpu area
We use the same routing as x86_64, moved now to setup.c.
Just with a few ifdefs inside.
Note that this routing uses prefill_possible_map().
It has the very nice side effect of allowing hotplugging of
cpus that are marked as present but disabled by acpi bios.
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/setup64.c')
-rw-r--r-- | arch/x86/kernel/setup64.c | 77 |
1 files changed, 0 insertions, 77 deletions
diff --git a/arch/x86/kernel/setup64.c b/arch/x86/kernel/setup64.c index e24c45677094..6b4e3262e8cb 100644 --- a/arch/x86/kernel/setup64.c +++ b/arch/x86/kernel/setup64.c | |||
@@ -85,83 +85,6 @@ static int __init nonx32_setup(char *str) | |||
85 | } | 85 | } |
86 | __setup("noexec32=", nonx32_setup); | 86 | __setup("noexec32=", nonx32_setup); |
87 | 87 | ||
88 | /* | ||
89 | * Copy data used in early init routines from the initial arrays to the | ||
90 | * per cpu data areas. These arrays then become expendable and the | ||
91 | * *_early_ptr's are zeroed indicating that the static arrays are gone. | ||
92 | */ | ||
93 | static void __init setup_per_cpu_maps(void) | ||
94 | { | ||
95 | int cpu; | ||
96 | |||
97 | for_each_possible_cpu(cpu) { | ||
98 | #ifdef CONFIG_SMP | ||
99 | if (per_cpu_offset(cpu)) { | ||
100 | #endif | ||
101 | per_cpu(x86_cpu_to_apicid, cpu) = | ||
102 | x86_cpu_to_apicid_init[cpu]; | ||
103 | per_cpu(x86_bios_cpu_apicid, cpu) = | ||
104 | x86_bios_cpu_apicid_init[cpu]; | ||
105 | #ifdef CONFIG_NUMA | ||
106 | per_cpu(x86_cpu_to_node_map, cpu) = | ||
107 | x86_cpu_to_node_map_init[cpu]; | ||
108 | #endif | ||
109 | #ifdef CONFIG_SMP | ||
110 | } | ||
111 | else | ||
112 | printk(KERN_NOTICE "per_cpu_offset zero for cpu %d\n", | ||
113 | cpu); | ||
114 | #endif | ||
115 | } | ||
116 | |||
117 | /* indicate the early static arrays will soon be gone */ | ||
118 | x86_cpu_to_apicid_early_ptr = NULL; | ||
119 | x86_bios_cpu_apicid_early_ptr = NULL; | ||
120 | #ifdef CONFIG_NUMA | ||
121 | x86_cpu_to_node_map_early_ptr = NULL; | ||
122 | #endif | ||
123 | } | ||
124 | |||
125 | /* | ||
126 | * Great future plan: | ||
127 | * Declare PDA itself and support (irqstack,tss,pgd) as per cpu data. | ||
128 | * Always point %gs to its beginning | ||
129 | */ | ||
130 | void __init setup_per_cpu_areas(void) | ||
131 | { | ||
132 | int i; | ||
133 | unsigned long size; | ||
134 | |||
135 | #ifdef CONFIG_HOTPLUG_CPU | ||
136 | prefill_possible_map(); | ||
137 | #endif | ||
138 | |||
139 | /* Copy section for each CPU (we discard the original) */ | ||
140 | size = PERCPU_ENOUGH_ROOM; | ||
141 | |||
142 | printk(KERN_INFO "PERCPU: Allocating %lu bytes of per cpu data\n", size); | ||
143 | for_each_cpu_mask (i, cpu_possible_map) { | ||
144 | char *ptr; | ||
145 | #ifndef CONFIG_NEED_MULTIPLE_NODES | ||
146 | ptr = alloc_bootmem_pages(size); | ||
147 | #else | ||
148 | int node = early_cpu_to_node(i); | ||
149 | |||
150 | if (!node_online(node) || !NODE_DATA(node)) | ||
151 | ptr = alloc_bootmem_pages(size); | ||
152 | else | ||
153 | ptr = alloc_bootmem_pages_node(NODE_DATA(node), size); | ||
154 | #endif | ||
155 | if (!ptr) | ||
156 | panic("Cannot allocate cpu data for CPU %d\n", i); | ||
157 | cpu_pda(i)->data_offset = ptr - __per_cpu_start; | ||
158 | memcpy(ptr, __per_cpu_start, __per_cpu_end - __per_cpu_start); | ||
159 | } | ||
160 | |||
161 | /* setup percpu data maps early */ | ||
162 | setup_per_cpu_maps(); | ||
163 | } | ||
164 | |||
165 | void pda_init(int cpu) | 88 | void pda_init(int cpu) |
166 | { | 89 | { |
167 | struct x8664_pda *pda = cpu_pda(cpu); | 90 | struct x8664_pda *pda = cpu_pda(cpu); |