x86-smp-remove-call-to-ipi_call_lock-ipi_call_unlock
ipi_call_lock/unlock() lock resp. unlock call_function.lock. This lock protects only the call_function data structure itself, but it's completely unrelated to cpu_online_mask. The mask to which the IPIs are sent is calculated before call_function.lock is taken in smp_call_function_many(), so the locking around set_cpu_online() is pointless and can be removed. [ tglx: Massaged changelog ] Signed-off-by: Yong Zhang <yong.zhang0@gmail.com> Cc: ralf@linux-mips.org Cc: sshtylyov@mvista.com Cc: david.daney@cavium.com Cc: nikunj@linux.vnet.ibm.com Cc: paulmck@linux.vnet.ibm.com Cc: axboe@kernel.dk Cc: peterz@infradead.org Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Cc: Jeremy Fitzhardinge <jeremy@goop.org> Cc: Ingo Molnar <mingo@redhat.com> Cc: "H. Peter Anvin" <hpa@zytor.com> Link: http://lkml.kernel.org/r/1338275765-3217-7-git-send-email-yong.zhang0@gmail.com Acked-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com> Acked-by: Peter Zijlstra <peterz@infradead.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
committed by
Thomas Gleixner
parent
8efdfc3a4e
commit
3b6f70fd7d
@@ -255,22 +255,13 @@ notrace static void __cpuinit start_secondary(void *unused)
|
|||||||
check_tsc_sync_target();
|
check_tsc_sync_target();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We need to hold call_lock, so there is no inconsistency
|
|
||||||
* between the time smp_call_function() determines number of
|
|
||||||
* IPI recipients, and the time when the determination is made
|
|
||||||
* for which cpus receive the IPI. Holding this
|
|
||||||
* lock helps us to not include this cpu in a currently in progress
|
|
||||||
* smp_call_function().
|
|
||||||
*
|
|
||||||
* We need to hold vector_lock so there the set of online cpus
|
* We need to hold vector_lock so there the set of online cpus
|
||||||
* does not change while we are assigning vectors to cpus. Holding
|
* does not change while we are assigning vectors to cpus. Holding
|
||||||
* this lock ensures we don't half assign or remove an irq from a cpu.
|
* this lock ensures we don't half assign or remove an irq from a cpu.
|
||||||
*/
|
*/
|
||||||
ipi_call_lock();
|
|
||||||
lock_vector_lock();
|
lock_vector_lock();
|
||||||
set_cpu_online(smp_processor_id(), true);
|
set_cpu_online(smp_processor_id(), true);
|
||||||
unlock_vector_lock();
|
unlock_vector_lock();
|
||||||
ipi_call_unlock();
|
|
||||||
per_cpu(cpu_state, smp_processor_id()) = CPU_ONLINE;
|
per_cpu(cpu_state, smp_processor_id()) = CPU_ONLINE;
|
||||||
x86_platform.nmi_init();
|
x86_platform.nmi_init();
|
||||||
|
|
||||||
|
|||||||
@@ -80,9 +80,7 @@ static void __cpuinit cpu_bringup(void)
|
|||||||
|
|
||||||
notify_cpu_starting(cpu);
|
notify_cpu_starting(cpu);
|
||||||
|
|
||||||
ipi_call_lock();
|
|
||||||
set_cpu_online(cpu, true);
|
set_cpu_online(cpu, true);
|
||||||
ipi_call_unlock();
|
|
||||||
|
|
||||||
this_cpu_write(cpu_state, CPU_ONLINE);
|
this_cpu_write(cpu_state, CPU_ONLINE);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user