arch/x86/kernel/smpboot.c: Clarify when irq processing begins.
Secondary cpus start with local interrupts disabled. start_secondary() first initializes the new cpu, then it enables the local interrupts. (although interrupts are enabled within smp_callin() as well). Right now, the local interrupts are enabled as a side effect of calling ipi_call_lock_irq(). The attached patch clarifies when local interrupts are enabled. Signed-off-by: Manfred Spraul <manfred@colorfullife.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
295286a891
commit
0cefa5b9b0
1 changed files with 5 additions and 2 deletions
|
@ -334,14 +334,17 @@ static void __cpuinit start_secondary(void *unused)
|
||||||
* 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_irq();
|
ipi_call_lock();
|
||||||
lock_vector_lock();
|
lock_vector_lock();
|
||||||
__setup_vector_irq(smp_processor_id());
|
__setup_vector_irq(smp_processor_id());
|
||||||
cpu_set(smp_processor_id(), cpu_online_map);
|
cpu_set(smp_processor_id(), cpu_online_map);
|
||||||
unlock_vector_lock();
|
unlock_vector_lock();
|
||||||
ipi_call_unlock_irq();
|
ipi_call_unlock();
|
||||||
per_cpu(cpu_state, smp_processor_id()) = CPU_ONLINE;
|
per_cpu(cpu_state, smp_processor_id()) = CPU_ONLINE;
|
||||||
|
|
||||||
|
/* enable local interrupts */
|
||||||
|
local_irq_enable();
|
||||||
|
|
||||||
setup_secondary_clock();
|
setup_secondary_clock();
|
||||||
|
|
||||||
wmb();
|
wmb();
|
||||||
|
|
Reference in a new issue