[v2,08/19] ARC: Mark secondary cpu online only after all HW setup is done
diff mbox

Message ID 1446893557-29748-9-git-send-email-noamc@ezchip.com
State Superseded
Headers show

Commit Message

Noam Camus Nov. 7, 2015, 10:52 a.m. UTC
From: Noam Camus <noamc@ezchip.com>

In SMP setup, master loops for each_present_cpu calling cpu_up().
For ARC it returns as soon as new cpu's status becomes online,
However secondary may still do HW initializing,
machine or platform hook level.

So turn secondary online only after all HW setup is done.
Signed-off-by: Noam Camus <noamc@ezchip.com>
---
 arch/arc/kernel/smp.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

Comments

Vineet Gupta Nov. 17, 2015, 11:17 a.m. UTC | #1
On Saturday 07 November 2015 04:22 PM, Noam Camus wrote:
> From: Noam Camus <noamc@ezchip.com>
> 
> In SMP setup, master loops for each_present_cpu calling cpu_up().
> For ARC it returns as soon as new cpu's status becomes online,
> However secondary may still do HW initializing,
> machine or platform hook level.
> 
> So turn secondary online only after all HW setup is done.
> Signed-off-by: Noam Camus <noamc@ezchip.com>

Acked-by: Vineet Gupta <vgupta@synopsys.com>

> ---
>  arch/arc/kernel/smp.c |   10 +++++-----
>  1 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/arc/kernel/smp.c b/arch/arc/kernel/smp.c
> index 0b061a4..bc0e4f6 100644
> --- a/arch/arc/kernel/smp.c
> +++ b/arch/arc/kernel/smp.c
> @@ -126,11 +126,6 @@ void start_kernel_secondary(void)
>  	current->active_mm = mm;
>  	cpumask_set_cpu(cpu, mm_cpumask(mm));
>  
> -	notify_cpu_starting(cpu);
> -	set_cpu_online(cpu, true);
> -
> -	pr_info("## CPU%u LIVE ##: Executing Code...\n", cpu);
> -
>  	/* Some SMP H/w setup - for each cpu */
>  	if (plat_smp_ops.init_per_cpu)
>  		plat_smp_ops.init_per_cpu(cpu);
> @@ -138,6 +133,11 @@ void start_kernel_secondary(void)
>  	if (machine_desc->init_cpu_smp)
>  		machine_desc->init_cpu_smp(cpu);
>  
> +	notify_cpu_starting(cpu);
> +	set_cpu_online(cpu, true);
> +
> +	pr_info("## CPU%u LIVE ##: Executing Code...\n", cpu);
> +
>  	arc_local_timer_setup();
>  
>  	local_irq_enable();
>

Patch
diff mbox

diff --git a/arch/arc/kernel/smp.c b/arch/arc/kernel/smp.c
index 0b061a4..bc0e4f6 100644
--- a/arch/arc/kernel/smp.c
+++ b/arch/arc/kernel/smp.c
@@ -126,11 +126,6 @@  void start_kernel_secondary(void)
 	current->active_mm = mm;
 	cpumask_set_cpu(cpu, mm_cpumask(mm));
 
-	notify_cpu_starting(cpu);
-	set_cpu_online(cpu, true);
-
-	pr_info("## CPU%u LIVE ##: Executing Code...\n", cpu);
-
 	/* Some SMP H/w setup - for each cpu */
 	if (plat_smp_ops.init_per_cpu)
 		plat_smp_ops.init_per_cpu(cpu);
@@ -138,6 +133,11 @@  void start_kernel_secondary(void)
 	if (machine_desc->init_cpu_smp)
 		machine_desc->init_cpu_smp(cpu);
 
+	notify_cpu_starting(cpu);
+	set_cpu_online(cpu, true);
+
+	pr_info("## CPU%u LIVE ##: Executing Code...\n", cpu);
+
 	arc_local_timer_setup();
 
 	local_irq_enable();