Skip to content

Commit

Permalink
Merge branch 'irq-fix' of git://www.modarm9.com/gitsrc/pub/people/ukl…
Browse files Browse the repository at this point in the history
  • Loading branch information
Russell King authored and Russell King committed May 7, 2008
2 parents 592eb99 + 21f20b6 commit d9cadb0
Showing 1 changed file with 15 additions and 7 deletions.
22 changes: 15 additions & 7 deletions arch/arm/mach-ns9xxx/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -62,35 +62,43 @@ static struct irq_chip ns9xxx_chip = {
#if 0
#define handle_irq handle_level_irq
#else
void handle_prio_irq(unsigned int irq, struct irq_desc *desc)
static void handle_prio_irq(unsigned int irq, struct irq_desc *desc)
{
unsigned int cpu = smp_processor_id();
struct irqaction *action;
irqreturn_t action_ret;

spin_lock(&desc->lock);

if (unlikely(desc->status & IRQ_INPROGRESS))
goto out_unlock;
BUG_ON(desc->status & IRQ_INPROGRESS);

desc->status &= ~(IRQ_REPLAY | IRQ_WAITING);
kstat_cpu(cpu).irqs[irq]++;

action = desc->action;
if (unlikely(!action || (desc->status & IRQ_DISABLED)))
goto out_unlock;
goto out_mask;

desc->status |= IRQ_INPROGRESS;
spin_unlock(&desc->lock);

action_ret = handle_IRQ_event(irq, action);

/* XXX: There is no direct way to access noirqdebug, so check
* unconditionally for spurious irqs...
* Maybe this function should go to kernel/irq/chip.c? */
note_interrupt(irq, desc, action_ret);

spin_lock(&desc->lock);
desc->status &= ~IRQ_INPROGRESS;
if (!(desc->status & IRQ_DISABLED) && desc->chip->ack)
desc->chip->ack(irq);

out_unlock:
if (desc->status & IRQ_DISABLED)
out_mask:
desc->chip->mask(irq);

/* ack unconditionally to unmask lower prio irqs */
desc->chip->ack(irq);

spin_unlock(&desc->lock);
}
#define handle_irq handle_prio_irq
Expand Down

0 comments on commit d9cadb0

Please sign in to comment.