5:
move a0, sp
- j spurious_interrupt
+ jal spurious_interrupt
+ j ret_from_irq
END(au1000_IRQ)
.set reorder
/* wrong alarm or masked ... */
- // j spurious_interrupt
+ // jal spurious_interrupt
+ // j ret_from_irq
move a0, sp
jal vrc5476_irq_dispatch
j ret_from_irq
asmlinkage void
vrc5476_irq_dispatch(struct pt_regs *regs)
{
- extern void spurious_interrupt(void);
-
u32 mask;
int nile4_irq;
return;
}
}
- spurious_interrupt();
+ spurious_interrupt(regs);
}
.set reorder
/* wrong alarm or masked ... */
- j spurious_interrupt
- nop
+ jal spurious_interrupt
+ j ret_from_irq
END(ddb5477_handle_int)
.align 5
#endif
spurious:
- j spurious_interrupt
+ jal spurious_interrupt
+ nop
+ j ret_from_irq
nop
END(decstation_handle_int)
jal ev96100_cpu_irq
j ret_from_irq
-3: j spurious_interrupt
+3: jal spurious_interrupt
+ j ret_from_irq
END(ev96100IRQ)
nop
/* wrong alarm or masked ... */
- j spurious_interrupt
+ jal spurious_interrupt
nop
+ j ret_from_irq
END(galileo_handle_int)
/*
* "Jump extender" to reach spurious_interrupt
*/
-3: j spurious_interrupt
+3: jal spurious_interrupt
+ j ret_from_irq
/*
* Vectors for interrupts generated by local devices
li a1, 1
jal do_syscall_trace
b resume_userspace
-
-/*
- * Common spurious interrupt handler.
- */
-LEAF(spurious_interrupt)
- /*
- * Someone tried to fool us by sending an interrupt but we
- * couldn't find a cause for it.
- */
- PTR_LA t1, irq_err_count
-#ifdef CONFIG_SMP
-1: ll t0, (t1)
- addiu t0, 1
- sc t0, (t1)
-#if R10000_LLSC_WAR
- beqzl t0, 1b
-#else
- beqz t0, 1b
-#endif
-#else
- lw t0, (t1)
- addiu t0, 1
- sw t0, (t1)
-#endif
- j ret_from_irq
- END(spurious_interrupt)
return 0;
}
+asmlinkage void spurious_interrupt(struct pt_regs *regs)
+{
+ atomic_inc(&irq_err_count);
+}
+
#ifdef CONFIG_KGDB
extern void breakpoint(void);
extern void set_debug_traps(void);
spurious:
- j spurious_interrupt
+ jal spurious_interrupt
+ nop
+ j ret_from_irq
nop
END(mipsIRQ)
spurious:
- j spurious_interrupt
+ jal spurious_interrupt
+ nop
+ j ret_from_irq
nop
END(simIRQ)
.set reorder
/* wrong alarm or masked ... */
- j spurious_interrupt
+ jal spurious_interrupt
nop
+ j ret_from_irq
+ nop
END(ocelot3_handle_int)
.align 5
.set reorder
/* wrong alarm or masked ... */
- j spurious_interrupt
+ jal spurious_interrupt
nop
+ j ret_from_irq
END(ocelot_handle_int)
.align 5
/* wrong alarm or masked ... */
- j spurious_interrupt
+ jal spurious_interrupt
nop
+ j ret_from_irq
END(cp0_irqdispatch)
.align 5
.set reorder
/* wrong alarm or masked ... */
- j spurious_interrupt
+ jal spurious_interrupt
nop
+ j ret_from_irq
END(tx4927_irq_handler)
.align 5
bnez t1, handle_irq
li a0, 1
- j spurious_interrupt
+ jal spurious_interrupt
nop
+ j ret_from_irq
+ nop
handle_int:
jal irq_dispatch
#endif
extern void arch_init_irq(void);
+extern void spurious_interrupt(struct pt_regs *regs);
#endif /* _ASM_IRQ_H */