[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: Thiemo Seufer <ths@networkno.de> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
fc5d2d279f
commit
6e61e85b09
2 changed files with 9 additions and 8 deletions
|
@ -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)
|
||||||
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;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue