aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/irq/chip.c
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2011-02-06 19:24:07 -0500
committerThomas Gleixner <tglx@linutronix.de>2011-02-19 06:58:12 -0500
commita60a5dc2db3b08b3c2900614c43b1262410c2d8c (patch)
tree74fc245bc6ddc7c134daa29bab83e43dd8258611 /kernel/irq/chip.c
parenta7ae4de5c8ae8110556f0f9c7241093ef984605c (diff)
genirq: Use handle_irq_event() in handle_edge_irq()
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>
Diffstat (limited to 'kernel/irq/chip.c')
-rw-r--r--kernel/irq/chip.c16
1 files changed, 2 insertions, 14 deletions
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index a499ca5b11aa..3ccff4d55b39 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -583,14 +583,8 @@ handle_edge_irq(unsigned int irq, struct irq_desc *desc)
583 /* Start handling the irq */ 583 /* Start handling the irq */
584 desc->irq_data.chip->irq_ack(&desc->irq_data); 584 desc->irq_data.chip->irq_ack(&desc->irq_data);
585 585
586 /* Mark the IRQ currently in progress.*/
587 desc->status |= IRQ_INPROGRESS;
588
589 do { 586 do {
590 struct irqaction *action = desc->action; 587 if (unlikely(!desc->action)) {
591 irqreturn_t action_ret;
592
593 if (unlikely(!action)) {
594 mask_irq(desc); 588 mask_irq(desc);
595 goto out_unlock; 589 goto out_unlock;
596 } 590 }
@@ -606,16 +600,10 @@ handle_edge_irq(unsigned int irq, struct irq_desc *desc)
606 unmask_irq(desc); 600 unmask_irq(desc);
607 } 601 }
608 602
609 desc->status &= ~IRQ_PENDING; 603 handle_irq_event(desc);
610 raw_spin_unlock(&desc->lock);
611 action_ret = handle_IRQ_event(irq, action);
612 if (!noirqdebug)
613 note_interrupt(irq, desc, action_ret);
614 raw_spin_lock(&desc->lock);
615 604
616 } while ((desc->status & (IRQ_PENDING | IRQ_DISABLED)) == IRQ_PENDING); 605 } while ((desc->status & (IRQ_PENDING | IRQ_DISABLED)) == IRQ_PENDING);
617 606
618 desc->status &= ~IRQ_INPROGRESS;
619out_unlock: 607out_unlock:
620 raw_spin_unlock(&desc->lock); 608 raw_spin_unlock(&desc->lock);
621} 609}