Commit d98d0dd6 authored by Paul Mackerras's avatar Paul Mackerras Committed by Linus Torvalds

[PATCH] ppc64: call idle_task_exit with irqs disabled

This patch is from Nathan Lynch <ntl@pobox.com>.

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: default avatarNathan Lynch <ntl@pobox.com>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 68417bcd
...@@ -322,8 +322,8 @@ static void __init pSeries_discover_pic(void) ...@@ -322,8 +322,8 @@ static void __init pSeries_discover_pic(void)
static void pSeries_mach_cpu_die(void) static void pSeries_mach_cpu_die(void)
{ {
idle_task_exit();
local_irq_disable(); local_irq_disable();
idle_task_exit();
/* Some hardware requires clearing the CPPR, while other hardware does not /* Some hardware requires clearing the CPPR, while other hardware does not
* it is safe either way * it is safe either way
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment