aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/sibyte/sb1250/irq.c
diff options
context:
space:
mode:
authorMaciej W. Rozycki <macro@linux-mips.org>2006-10-03 07:42:02 -0400
committerRalf Baechle <ralf@linux-mips.org>2006-10-03 12:59:17 -0400
commitd599def5cd81439e7da04dc6754b257043f5e584 (patch)
tree6790e93dc16327c8acc4dfccdfd8c11124988482 /arch/mips/sibyte/sb1250/irq.c
parentaf8b128719f5248e542036ea994610a29d0642a6 (diff)
[MIPS] SB1250: Interrupt handler fixes
Mask cp0.status against cp0.cause. Additionally, spurious interrupts are not recorded. Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/sibyte/sb1250/irq.c')
-rw-r--r--arch/mips/sibyte/sb1250/irq.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/arch/mips/sibyte/sb1250/irq.c b/arch/mips/sibyte/sb1250/irq.c
index a451b4c7732d..f9bd9f074517 100644
--- a/arch/mips/sibyte/sb1250/irq.c
+++ b/arch/mips/sibyte/sb1250/irq.c
@@ -442,7 +442,7 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs)
442 * blasting the high 32 bits. 442 * blasting the high 32 bits.
443 */ 443 */
444 444
445 pending = read_c0_cause(); 445 pending = read_c0_cause() & read_c0_status();
446 446
447#ifdef CONFIG_SIBYTE_SB1250_PROF 447#ifdef CONFIG_SIBYTE_SB1250_PROF
448 if (pending & CAUSEF_IP7) /* Cpu performance counter interrupt */ 448 if (pending & CAUSEF_IP7) /* Cpu performance counter interrupt */
@@ -476,5 +476,8 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs)
476 R_IMR_INTERRUPT_STATUS_BASE))); 476 R_IMR_INTERRUPT_STATUS_BASE)));
477 if (mask) 477 if (mask)
478 do_IRQ(fls64(mask) - 1, regs); 478 do_IRQ(fls64(mask) - 1, regs);
479 } 479 else
480 spurious_interrupt(regs);
481 } else
482 spurious_interrupt(regs);
480} 483}