Commit 6e61e85b authored by Thiemo Seufer's avatar Thiemo Seufer Committed by Ralf Baechle

[MIPS] Sibyte: Improve interrupt latency again for sb1250/bcm1480

this patch restores the behaviour of the old (assembly-written)
interrupt handler, the handler is left as soon as a single interrupt
cause is handled.
Signed-off-by: default avatarThiemo Seufer <ths@networkno.de>
Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent fc5d2d27
...@@ -502,22 +502,23 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) ...@@ -502,22 +502,23 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs)
#ifdef CONFIG_SIBYTE_BCM1480_PROF #ifdef CONFIG_SIBYTE_BCM1480_PROF
if (pending & CAUSEF_IP7) /* Cpu performance counter interrupt */ if (pending & CAUSEF_IP7) /* Cpu performance counter interrupt */
sbprof_cpu_intr(exception_epc(regs)); sbprof_cpu_intr(exception_epc(regs));
else
#endif #endif
if (pending & CAUSEF_IP4) if (pending & CAUSEF_IP4)
bcm1480_timer_interrupt(regs); bcm1480_timer_interrupt(regs);
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
if (pending & CAUSEF_IP3) else if (pending & CAUSEF_IP3)
bcm1480_mailbox_interrupt(regs); bcm1480_mailbox_interrupt(regs);
#endif #endif
#ifdef CONFIG_KGDB #ifdef CONFIG_KGDB
if (pending & CAUSEF_IP6) else if (pending & CAUSEF_IP6)
bcm1480_kgdb_interrupt(regs); /* KGDB (uart 1) */ bcm1480_kgdb_interrupt(regs); /* KGDB (uart 1) */
#endif #endif
if (pending & CAUSEF_IP2) { else if (pending & CAUSEF_IP2) {
unsigned long long mask_h, mask_l; unsigned long long mask_h, mask_l;
unsigned long base; unsigned long base;
......
...@@ -460,25 +460,25 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs) ...@@ -460,25 +460,25 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs)
pending = read_c0_cause(); pending = read_c0_cause();
#ifdef CONFIG_SIBYTE_SB1250_PROF #ifdef CONFIG_SIBYTE_SB1250_PROF
if (pending & CAUSEF_IP7) { /* Cpu performance counter interrupt */ if (pending & CAUSEF_IP7) /* Cpu performance counter interrupt */
sbprof_cpu_intr(exception_epc(regs)); sbprof_cpu_intr(exception_epc(regs));
} else
#endif #endif
if (pending & CAUSEF_IP4) if (pending & CAUSEF_IP4)
sb1250_timer_interrupt(regs); sb1250_timer_interrupt(regs);
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
if (pending & CAUSEF_IP3) else if (pending & CAUSEF_IP3)
sb1250_mailbox_interrupt(regs); sb1250_mailbox_interrupt(regs);
#endif #endif
#ifdef CONFIG_KGDB #ifdef CONFIG_KGDB
if (pending & CAUSEF_IP6) /* KGDB (uart 1) */ else if (pending & CAUSEF_IP6) /* KGDB (uart 1) */
sb1250_kgdb_interrupt(regs); sb1250_kgdb_interrupt(regs);
#endif #endif
if (pending & CAUSEF_IP2) { else if (pending & CAUSEF_IP2) {
unsigned long long mask; unsigned long long mask;
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment