@@ -128,7 +128,6 @@ hv_cpu_startup:
call smp_callin
nop
- call cpu_idle
mov 0, %o0
call cpu_panic
nop
@@ -25,6 +25,7 @@
#include <linux/ftrace.h>
#include <linux/cpu.h>
#include <linux/slab.h>
+#include <linux/smpboot.h>
#include <asm/head.h>
#include <asm/ptrace.h>
@@ -89,6 +90,11 @@ static volatile unsigned long callin_flag = 0;
void __cpuinit smp_callin(void)
{
+ smpboot_start_secondary(NULL);
+}
+
+void __cpuinit __cpu_pre_starting(void *unused)
+{
int cpuid = hard_smp_processor_id();
__local_per_cpu_offset = __per_cpu_offset(cpuid);
@@ -115,18 +121,14 @@ void __cpuinit smp_callin(void)
/* Attach to the address space of init_task. */
atomic_inc(&init_mm.mm_count);
current->active_mm = &init_mm;
+}
- /* inform the notifiers about the new cpu */
- notify_cpu_starting(cpuid);
+void __cpuinit __cpu_pre_online(void *unused)
+{
+ unsigned int cpuid = hard_smp_processor_id();
while (!cpumask_test_cpu(cpuid, &smp_commenced_mask))
rmb();
-
- set_cpu_online(cpuid, true);
- local_irq_enable();
-
- /* idle thread is expected to have preempt disabled */
- preempt_disable();
}
void cpu_panic(void)
@@ -407,7 +407,6 @@ after_lock_tlb:
call smp_callin
nop
- call cpu_idle
mov 0, %o0
call cpu_panic
nop