Take 3. There is a nasty race if smp_call_function() is called with interrupts disabled. CPU A CPU B Disable interrupts smp_call_function() Take call_lock Send IPIs Wait for all cpus to acknowledge IPI CPU A has not responded, spin waiting for cpu A to respond, holding call_lock smp_call_function() Spin waiting for call_lock Deadlock Deadlock This bug is hard to reproduce and even harder to diagnose. Since the comments at the start of smp_call_function() say it should never be entered with interrupts disabled, make it so. Index: linux/arch/ia64/kernel/smp.c =================================================================== --- linux.orig/arch/ia64/kernel/smp.c Mon Apr 26 15:20:17 2004 +++ linux/arch/ia64/kernel/smp.c Tue Apr 27 11:30:48 2004 @@ -323,6 +323,8 @@ if (!cpus) return 0; + BUG_ON(irqs_disabled()); + data.func = func; data.info = info; atomic_set(&data.started, 0); - To unsubscribe from this list: send the line "unsubscribe linux-ia64" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.htmlReceived on Mon Apr 26 21:34:26 2004
This archive was generated by hypermail 2.1.8 : 2005-08-02 09:20:25 EST