[POWERPC] PS3: Fix system slowdown
authorTakao Shinohara <shin@sm.sony.co.jp>
Mon, 30 Apr 2007 21:01:07 +0000 (07:01 +1000)
committerPaul Mackerras <paulus@samba.org>
Wed, 2 May 2007 10:04:31 +0000 (20:04 +1000)
The PS3 HV will deliver soft-disabled interrupts at the next HV call or
interrupt.  Add an HV call to local_irq_restore() to force the timely
delivery of any pending interrupts.

This fixes the system slowdown bug reported here
http://bugzilla.kernel.org/show_bug.cgi?id=8260

Signed-off-by: Geoff Levand <geoffrey.levand@am.sony.com>
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/kernel/irq.c

index 6c83fe229e6089f6c5221d72f84f342968f7eeac..5719a530f2d17db63b012d2b9f9854fe3b5ff3c3 100644 (file)
@@ -67,6 +67,7 @@
 #ifdef CONFIG_PPC64
 #include <asm/paca.h>
 #include <asm/firmware.h>
+#include <asm/lv1call.h>
 #endif
 
 int __irq_offset_value;
@@ -162,6 +163,16 @@ void local_irq_restore(unsigned long en)
        local_paca->hard_enabled = en;
        if ((int)mfspr(SPRN_DEC) < 0)
                mtspr(SPRN_DEC, 1);
+
+       /*
+        * Force the delivery of pending soft-disabled interrupts on PS3.
+        * Any HV call will have this side effect.
+        */
+       if (firmware_has_feature(FW_FEATURE_PS3_LV1)) {
+               u64 tmp;
+               lv1_get_version_info(&tmp);
+       }
+
        hard_irq_enable();
 }
 #endif /* CONFIG_PPC64 */