static void do_IRQ(int irq, struct pt_regs * regs)
{
struct irqaction *action;
- int do_random, cpu;
+ int ret, do_random, cpu;
cpu = smp_processor_id();
irq_enter();
action = *(irq + irq_action);
do_random = 0;
do {
- do_random |= action->flags;
- action->handler(irq, action->dev_id, regs);
+ ret = action->handler(irq, action->dev_id, regs);
+ if (ret == IRQ_HANDLED)
+ do_random |= action->flags;
action = action->next;
} while (action);
if (do_random & SA_SAMPLE_RANDOM)
action->handler = handler;
action->flags = irqflags;
- action->mask = 0;
+ cpus_clear(action->mask);
action->name = devname;
action->next = NULL;
action->dev_id = dev_id;
}
static struct irqaction irq0 =
-{ write_err_interrupt, SA_INTERRUPT, 0, "bus write error", NULL, NULL};
+{ write_err_interrupt, SA_INTERRUPT, CPU_MASK_NONE, "bus write error", NULL, NULL};
void __init init_IRQ(void)
{