sparc64: Prevent sparc64 from invoking irq handlers on offline CPUs
Make sparc64 refrain from clearing a given to-be-offlined CPU's bit in the cpu_online_mask until it has processed pending irqs. This change prevents other CPUs from being blindsided by an apparently offline CPU nevertheless changing globally visible state. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
e5bd1c3fdd
Коммит
4d084617fb
|
@ -1303,10 +1303,6 @@ int __cpu_disable(void)
|
||||||
c->core_id = 0;
|
c->core_id = 0;
|
||||||
c->proc_id = -1;
|
c->proc_id = -1;
|
||||||
|
|
||||||
ipi_call_lock();
|
|
||||||
cpu_clear(cpu, cpu_online_map);
|
|
||||||
ipi_call_unlock();
|
|
||||||
|
|
||||||
smp_wmb();
|
smp_wmb();
|
||||||
|
|
||||||
/* Make sure no interrupts point to this cpu. */
|
/* Make sure no interrupts point to this cpu. */
|
||||||
|
@ -1316,6 +1312,10 @@ int __cpu_disable(void)
|
||||||
mdelay(1);
|
mdelay(1);
|
||||||
local_irq_disable();
|
local_irq_disable();
|
||||||
|
|
||||||
|
ipi_call_lock();
|
||||||
|
cpu_clear(cpu, cpu_online_map);
|
||||||
|
ipi_call_unlock();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче