[PATCH] call idle_task_exit with irqs disabled

Nathan Lynch ntl at pobox.com
Tue Mar 8 12:56:38 EST 2005


Seeing this very occasionally during cpu hotplug testing:

 Badness in slb_flush_and_rebolt at arch/ppc64/mm/slb.c:52
 Call Trace:
 [c0000000ef0efbe0] [c0000000000127a0] .__switch_to+0xa4/0xf0 (unreliable)
 [c0000000ef0efc80] [c000000000050178] .idle_task_exit+0xbc/0x15c
 [c0000000ef0efd10] [c00000000000d108] .cpu_die+0x18/0x68
 [c0000000ef0efd90] [c00000000001023c] .dedicated_idle+0x1fc/0x254
 [c0000000ef0efe80] [c00000000000fc80] .cpu_idle+0x3c/0x54
 [c0000000ef0eff00] [c00000000003aa90] .start_secondary+0x108/0x148
 [c0000000ef0eff90] [c00000000000bd28] .enable_64b_mode+0x0/0x28

idle_task_exit can result in a call to slb_flush_and_rebolt, which
must not be called with interrupts enabled.  Make the call with
interrupts disabled.


Signed-off-by: Nathan Lynch <ntl at pobox.com>

 pSeries_setup.c |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

Index: linux-2.6.11-bk2/arch/ppc64/kernel/pSeries_setup.c
===================================================================
--- linux-2.6.11-bk2.orig/arch/ppc64/kernel/pSeries_setup.c	2005-03-07 04:09:29.000000000 +0000
+++ linux-2.6.11-bk2/arch/ppc64/kernel/pSeries_setup.c	2005-03-07 04:15:22.000000000 +0000
@@ -322,8 +322,8 @@ static  void __init pSeries_discover_pic
 
 static void pSeries_mach_cpu_die(void)
 {
-	idle_task_exit();
 	local_irq_disable();
+	idle_task_exit();
 	/* Some hardware requires clearing the CPPR, while other hardware does not
 	 * it is safe either way
 	 */



More information about the Linuxppc64-dev mailing list