diff options
author | Maciej W. Rozycki <macro@linux-mips.org> | 2006-10-03 07:42:02 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2006-10-03 12:59:17 -0400 |
commit | d599def5cd81439e7da04dc6754b257043f5e584 (patch) | |
tree | 6790e93dc16327c8acc4dfccdfd8c11124988482 /arch/mips/sibyte/sb1250 | |
parent | af8b128719f5248e542036ea994610a29d0642a6 (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')
-rw-r--r-- | arch/mips/sibyte/sb1250/irq.c | 7 |
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 | } |