From: Nikunj A. Dadhania <nikunj@xxxxxxxxxxxxxxxxxx> Convert sparc64 to use the generic framework to boot secondary CPUs. Notes: Remove the calls to cpu_idle() from assembly files because we will invoke cpu_idle() in generic code. Signed-off-by: Nikunj A. Dadhania <nikunj@xxxxxxxxxxxxxxxxxx> Cc: "David S. Miller" <davem@xxxxxxxxxxxxx> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Cc: Paul Gortmaker <paul.gortmaker@xxxxxxxxxxxxx> Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> Cc: Mike Frysinger <vapier@xxxxxxxxxx> Cc: Jiri Kosina <jkosina@xxxxxxx> Cc: sparclinux@xxxxxxxxxxxxxxx Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@xxxxxxxxxxxxxxxxxx> --- arch/sparc/kernel/hvtramp.S | 2 -- arch/sparc/kernel/smp_64.c | 18 ++++++++++-------- arch/sparc/kernel/trampoline_64.S | 2 -- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/arch/sparc/kernel/hvtramp.S b/arch/sparc/kernel/hvtramp.S index 9365432..e1a45cf 100644 --- a/arch/sparc/kernel/hvtramp.S +++ b/arch/sparc/kernel/hvtramp.S @@ -128,8 +128,6 @@ hv_cpu_startup: call smp_callin nop - call cpu_idle - mov 0, %o0 call cpu_panic nop diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c index 781bcb1..3c45538 100644 --- a/arch/sparc/kernel/smp_64.c +++ b/arch/sparc/kernel/smp_64.c @@ -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) diff --git a/arch/sparc/kernel/trampoline_64.S b/arch/sparc/kernel/trampoline_64.S index da1b781..6171126 100644 --- a/arch/sparc/kernel/trampoline_64.S +++ b/arch/sparc/kernel/trampoline_64.S @@ -407,8 +407,6 @@ after_lock_tlb: call smp_callin nop - call cpu_idle - mov 0, %o0 call cpu_panic nop 1: b,a,pt %xcc, 1b -- To unsubscribe from this list: send the line "unsubscribe linux-arch" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html