Преглед на файлове

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>
Paul E. McKenney преди 16 години
родител
ревизия
4d084617fb
променени са 1 файла, в които са добавени 4 реда и са изтрити 4 реда
  1. 4 4
      arch/sparc64/kernel/smp.c

+ 4 - 4
arch/sparc64/kernel/smp.c

@@ -1303,10 +1303,6 @@ int __cpu_disable(void)
 	c->core_id = 0;
 	c->proc_id = -1;
 
-	ipi_call_lock();
-	cpu_clear(cpu, cpu_online_map);
-	ipi_call_unlock();
-
 	smp_wmb();
 
 	/* Make sure no interrupts point to this cpu.  */
@@ -1316,6 +1312,10 @@ int __cpu_disable(void)
 	mdelay(1);
 	local_irq_disable();
 
+	ipi_call_lock();
+	cpu_clear(cpu, cpu_online_map);
+	ipi_call_unlock();
+
 	return 0;
 }