/* do_IRQ handles all hardware IRQs. Decoded IRQs should not come via this function. Instead, they should provide their own 'handler'  */
asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs)
/* do_IRQ handles all hardware IRQs. Decoded IRQs should not come via this function. Instead, they should provide their own 'handler'  */
asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs)
{
	struct pt_regs *old_regs = set_irq_regs(regs);
	irq_enter();
	check_stack_overflow(irq);
	if (irq >= NR_IRQS)
		handle_bad_irq(irq, &bad_irq_desc);
	else
		generic_handle_irq(irq);
	maybe_lower_to_irq14();
	irq_exit();
	set_irq_regs(old_regs);
}