From: Takao Shinohara Date: Mon, 30 Apr 2007 21:01:07 +0000 (+1000) Subject: [POWERPC] PS3: Fix system slowdown X-Git-Tag: v2.6.22-rc1~358^2~54 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0874dd40bf3c1f291da14b2c554c5640c0b6bf1b;p=linux-2.6 [POWERPC] PS3: Fix system slowdown 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 Acked-by: Benjamin Herrenschmidt Signed-off-by: Paul Mackerras --- diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c index 6c83fe229e..5719a530f2 100644 --- a/arch/powerpc/kernel/irq.c +++ b/arch/powerpc/kernel/irq.c @@ -67,6 +67,7 @@ #ifdef CONFIG_PPC64 #include #include +#include #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 */