aboutsummaryrefslogtreecommitdiff
path: root/arch/powerpc/platforms/ps3/smp.c
diff options
context:
space:
mode:
authorGeoff Levand <geoff@infradead.org>2011-11-08 12:37:26 +0000
committerGreg Kroah-Hartman <gregkh@suse.de>2011-11-21 14:31:25 -0800
commit9db74684bd2f8261cef34d2398f32d48c8ad8e2f (patch)
treeb6848266e7c3985c55e05e1d44aafa8afa1f1211 /arch/powerpc/platforms/ps3/smp.c
parent015be9f48be43814f14326555e9ea576cf0343d7 (diff)
powerpc/ps3: Fix lost SMP IPIs
commit 72f3bea075287785ed32b777b6dd2636aa7002e8 upstream. Fixes the PS3 bootup hang introduced in 3.0-rc1 by: commit 317f394160e9beb97d19a84c39b7e5eb3d7815a sched: Move the second half of ttwu() to the remote cpu Move the PS3's LV1 EOI call lv1_end_of_interrupt_ext() from ps3_chip_eoi() to ps3_get_irq() for IPI messages. If lv1_send_event_locally() is called between a previous call to lv1_send_event_locally() and the coresponding call to lv1_end_of_interrupt_ext() the second event will not be delivered to the target cpu. The PS3's SMP IPIs are implemented using lv1_send_event_locally(), so if two IPI messages of the same type are sent to the same target in a relatively short period of time the second IPI event can become lost when lv1_end_of_interrupt_ext() is called from ps3_chip_eoi(). Signed-off-by: Geoff Levand <geoff@infradead.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'arch/powerpc/platforms/ps3/smp.c')
-rw-r--r--arch/powerpc/platforms/ps3/smp.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/powerpc/platforms/ps3/smp.c b/arch/powerpc/platforms/ps3/smp.c
index 4c44794faac..f609345b6c3 100644
--- a/arch/powerpc/platforms/ps3/smp.c
+++ b/arch/powerpc/platforms/ps3/smp.c
@@ -94,6 +94,8 @@ static void __init ps3_smp_setup_cpu(int cpu)
if (result)
virqs[i] = NO_IRQ;
+ else
+ ps3_register_ipi_irq(cpu, virqs[i]);
}
ps3_register_ipi_debug_brk(cpu, virqs[PPC_MSG_DEBUGGER_BREAK]);