提交 a8db8453 编写于 作者: G Glauber de Oliveira Costa 提交者: Ingo Molnar

x86: merge smp_prepare_boot_cpu

it is practically the same between arches now, so it is
moved to smpboot.c. Minor differences (gdt initialization)
live inside an ifdef
Signed-off-by: NGlauber Costa <gcosta@redhat.com>
Signed-off-by: NIngo Molnar <mingo@elte.hu>
上级 bbc2ff6a
...@@ -24,6 +24,9 @@ ...@@ -24,6 +24,9 @@
#include <mach_wakecpu.h> #include <mach_wakecpu.h>
#include <smpboot_hooks.h> #include <smpboot_hooks.h>
/* State of each CPU */
DEFINE_PER_CPU(int, cpu_state) = { 0 };
/* Store all idle threads, this can be reused instead of creating /* Store all idle threads, this can be reused instead of creating
* a new thread. Also avoids complicated thread destroy functionality * a new thread. Also avoids complicated thread destroy functionality
* for idle threads. * for idle threads.
...@@ -999,6 +1002,21 @@ int __cpuinit native_cpu_up(unsigned int cpu) ...@@ -999,6 +1002,21 @@ int __cpuinit native_cpu_up(unsigned int cpu)
return 0; return 0;
} }
/*
* Early setup to make printk work.
*/
void __init native_smp_prepare_boot_cpu(void)
{
int me = smp_processor_id();
#ifdef CONFIG_X86_32
init_gdt(me);
switch_to_new_gdt();
#endif
/* already set me in cpu_online_map in boot_cpu_init() */
cpu_set(me, cpu_callout_map);
per_cpu(cpu_state, me) = CPU_ONLINE;
}
#ifdef CONFIG_HOTPLUG_CPU #ifdef CONFIG_HOTPLUG_CPU
void remove_siblinginfo(int cpu) void remove_siblinginfo(int cpu)
{ {
......
...@@ -77,9 +77,6 @@ u8 apicid_2_node[MAX_APICID]; ...@@ -77,9 +77,6 @@ u8 apicid_2_node[MAX_APICID];
extern void map_cpu_to_logical_apicid(void); extern void map_cpu_to_logical_apicid(void);
extern void unmap_cpu_to_logical_apicid(int cpu); extern void unmap_cpu_to_logical_apicid(int cpu);
/* State of each CPU. */
DEFINE_PER_CPU(int, cpu_state) = { 0 };
#ifdef CONFIG_HOTPLUG_CPU #ifdef CONFIG_HOTPLUG_CPU
void cpu_exit_clear(void) void cpu_exit_clear(void)
{ {
...@@ -219,17 +216,6 @@ void __init native_smp_prepare_cpus(unsigned int max_cpus) ...@@ -219,17 +216,6 @@ void __init native_smp_prepare_cpus(unsigned int max_cpus)
smp_boot_cpus(max_cpus); smp_boot_cpus(max_cpus);
} }
void __init native_smp_prepare_boot_cpu(void)
{
unsigned int cpu = smp_processor_id();
init_gdt(cpu);
switch_to_new_gdt();
cpu_set(cpu, cpu_callout_map);
__get_cpu_var(cpu_state) = CPU_ONLINE;
}
extern void impress_friends(void); extern void impress_friends(void);
extern void smp_checks(void); extern void smp_checks(void);
......
...@@ -68,9 +68,6 @@ ...@@ -68,9 +68,6 @@
/* Set when the idlers are all forked */ /* Set when the idlers are all forked */
int smp_threads_ready; int smp_threads_ready;
/* State of each CPU */
DEFINE_PER_CPU(int, cpu_state) = { 0 };
cycles_t cacheflush_time; cycles_t cacheflush_time;
unsigned long cache_decay_ticks; unsigned long cache_decay_ticks;
...@@ -216,17 +213,6 @@ void __init native_smp_prepare_cpus(unsigned int max_cpus) ...@@ -216,17 +213,6 @@ void __init native_smp_prepare_cpus(unsigned int max_cpus)
print_cpu_info(&cpu_data(0)); print_cpu_info(&cpu_data(0));
} }
/*
* Early setup to make printk work.
*/
void __init native_smp_prepare_boot_cpu(void)
{
int me = smp_processor_id();
/* already set me in cpu_online_map in boot_cpu_init() */
cpu_set(me, cpu_callout_map);
per_cpu(cpu_state, me) = CPU_ONLINE;
}
extern void impress_friends(void); extern void impress_friends(void);
extern void smp_checks(void); extern void smp_checks(void);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册