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 | |
| 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>
| -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 | } |
