vserver 1.9.3
[linux-2.6.git] / arch / mips / baget / irq.c
index fe158ac..3dcc16e 100644 (file)
@@ -180,7 +180,7 @@ skip:
 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();
@@ -194,8 +194,9 @@ static void do_IRQ(int irq, struct pt_regs * regs)
                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)
@@ -325,7 +326,7 @@ int request_irq(unsigned int irq,
 
        action->handler = handler;
        action->flags = irqflags;
-       action->mask = 0;
+       cpus_clear(action->mask);
        action->name = devname;
        action->next = NULL;
        action->dev_id = dev_id;
@@ -389,7 +390,7 @@ static void write_err_interrupt(int irq, void *dev_id, struct pt_regs * regs)
 }
 
 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)
 {