powerpc/smp: remove call to ipi_call_lock()/ipi_call_unlock()
authorYong Zhang <yong.zhang@windriver.com>
Mon, 28 May 2012 21:16:04 +0000 (21:16 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Tue, 3 Jul 2012 04:14:42 +0000 (14:14 +1000)
1) call_function.lock used in smp_call_function_many() is just to protect
   call_function.queue and &data->refs, cpu_online_mask is outside of the
   lock. And it's not necessary to protect cpu_online_mask,
   because data->cpumask is pre-calculate and even if a cpu is brougt up
   when calling arch_send_call_function_ipi_mask(), it's harmless because
   validation test in generic_smp_call_function_interrupt() will take care
   of it.

2) For cpu down issue, stop_machine() will guarantee that no concurrent
   smp_call_fuction() is processing.

Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/kernel/smp.c

index e4cb34322de4aba848ce279b7792ea9d495dee5e..e1417c42155cd66dfe3532dfd8d7e4d3cd426233 100644 (file)
@@ -571,7 +571,6 @@ void __devinit start_secondary(void *unused)
        if (system_state == SYSTEM_RUNNING)
                vdso_data->processorCount++;
 #endif
-       ipi_call_lock();
        notify_cpu_starting(cpu);
        set_cpu_online(cpu, true);
        /* Update sibling maps */
@@ -601,7 +600,6 @@ void __devinit start_secondary(void *unused)
                of_node_put(np);
        }
        of_node_put(l2_cache);
-       ipi_call_unlock();
 
        local_irq_enable();