]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/commitdiff
genirq: Use handle_irq_event() in the spurious poll code
authorThomas Gleixner <tglx@linutronix.de>
Mon, 7 Feb 2011 00:29:15 +0000 (01:29 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Sat, 19 Feb 2011 11:58:13 +0000 (12:58 +0100)
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
kernel/irq/spurious.c

index 89e5e16aca39a6ddcb06734f231a821955fd8efd..bc0620745d5f0e16930e71f7375b47acd732bb1a 100644 (file)
@@ -56,13 +56,14 @@ bool irq_wait_for_poll(struct irq_desc *desc)
 #endif
 }
 
+
 /*
  * Recovery handler for misrouted interrupts.
  */
 static int try_one_irq(int irq, struct irq_desc *desc, bool force)
 {
+       irqreturn_t ret = IRQ_NONE;
        struct irqaction *action;
-       int ok = 0;
 
        raw_spin_lock(&desc->lock);
 
@@ -96,21 +97,17 @@ static int try_one_irq(int irq, struct irq_desc *desc, bool force)
                goto out;
        }
 
-       /* Honour the normal IRQ locking and mark it poll in progress */
-       desc->status |= IRQ_INPROGRESS | IRQ_POLL_INPROGRESS;
+       /* Mark it poll in progress */
+       desc->status |= IRQ_POLL_INPROGRESS;
        do {
-               desc->status &= ~IRQ_PENDING;
-               raw_spin_unlock(&desc->lock);
-               if (handle_IRQ_event(irq, action) != IRQ_NONE)
-                       ok = 1;
-               raw_spin_lock(&desc->lock);
+               if (handle_irq_event(desc) == IRQ_HANDLED)
+                       ret = IRQ_HANDLED;
                action = desc->action;
-       }  while ((desc->status & IRQ_PENDING) && action);
-
-       desc->status &= ~(IRQ_INPROGRESS | IRQ_POLL_INPROGRESS);
+       } while ((desc->status & IRQ_PENDING) && action);
+       desc->status &= ~IRQ_POLL_INPROGRESS;
 out:
        raw_spin_unlock(&desc->lock);
-       return ok;
+       return ret == IRQ_HANDLED;
 }
 
 static int misrouted_irq(int irq)