X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=kernel%2Firq%2Fhandle.c;h=5fa6198e91394a935bcb8f51d70cdef9222c261f;hb=4f9faaace217b854ae1e1746ee4ac44688ddadbd;hp=32e1ab1477d1a975e6f19713eca1d41277da7f80;hpb=36f021b579d195cdc5fa6f3e2bab198b4bf70643;p=~andy%2Flinux diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c index 32e1ab1477d..5fa6198e913 100644 --- a/kernel/irq/handle.c +++ b/kernel/irq/handle.c @@ -22,11 +22,10 @@ * handle_bad_irq - handle spurious and unhandled irqs * @irq: the interrupt number * @desc: description of the interrupt - * @regs: pointer to a register structure * * Handles spurious and unhandled IRQ's. It also prints a debugmessage. */ -void fastcall +void handle_bad_irq(unsigned int irq, struct irq_desc *desc) { print_irq_desc(irq, desc); @@ -164,7 +163,7 @@ irqreturn_t handle_IRQ_event(unsigned int irq, struct irqaction *action) * This is the original x86 implementation which is used for every * interrupt type. */ -fastcall unsigned int __do_IRQ(unsigned int irq) +unsigned int __do_IRQ(unsigned int irq) { struct irq_desc *desc = irq_desc + irq; struct irqaction *action; @@ -179,9 +178,11 @@ fastcall unsigned int __do_IRQ(unsigned int irq) */ if (desc->chip->ack) desc->chip->ack(irq); - action_ret = handle_IRQ_event(irq, desc->action); - if (!noirqdebug) - note_interrupt(irq, desc, action_ret); + if (likely(!(desc->status & IRQ_DISABLED))) { + action_ret = handle_IRQ_event(irq, desc->action); + if (!noirqdebug) + note_interrupt(irq, desc, action_ret); + } desc->chip->end(irq); return 1; }