]> git.karo-electronics.de Git - linux-beck.git/commitdiff
genirq: Use handle_irq_event() in handle_edge_irq()
authorThomas Gleixner <tglx@linutronix.de>
Mon, 7 Feb 2011 00:24:07 +0000 (01:24 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Sat, 19 Feb 2011 11:58:12 +0000 (12:58 +0100)
It's safe to drop the IRQ_INPROGRESS flag between action chain walks
as we are protected by desc->lock.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
kernel/irq/chip.c

index a499ca5b11aaadb8178b316d642ad51fc2fda918..3ccff4d55b39e3ccb10448108376cb27467cb072 100644 (file)
@@ -583,14 +583,8 @@ handle_edge_irq(unsigned int irq, struct irq_desc *desc)
        /* Start handling the irq */
        desc->irq_data.chip->irq_ack(&desc->irq_data);
 
-       /* Mark the IRQ currently in progress.*/
-       desc->status |= IRQ_INPROGRESS;
-
        do {
-               struct irqaction *action = desc->action;
-               irqreturn_t action_ret;
-
-               if (unlikely(!action)) {
+               if (unlikely(!desc->action)) {
                        mask_irq(desc);
                        goto out_unlock;
                }
@@ -606,16 +600,10 @@ handle_edge_irq(unsigned int irq, struct irq_desc *desc)
                        unmask_irq(desc);
                }
 
-               desc->status &= ~IRQ_PENDING;
-               raw_spin_unlock(&desc->lock);
-               action_ret = handle_IRQ_event(irq, action);
-               if (!noirqdebug)
-                       note_interrupt(irq, desc, action_ret);
-               raw_spin_lock(&desc->lock);
+               handle_irq_event(desc);
 
        } while ((desc->status & (IRQ_PENDING | IRQ_DISABLED)) == IRQ_PENDING);
 
-       desc->status &= ~IRQ_INPROGRESS;
 out_unlock:
        raw_spin_unlock(&desc->lock);
 }