Loading arch/arm/mach-ns9xxx/irq.c +15 −7 Original line number Diff line number Diff line Loading @@ -62,7 +62,7 @@ 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; Loading @@ -70,27 +70,35 @@ void handle_prio_irq(unsigned int irq, struct irq_desc *desc) 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) if (desc->status & IRQ_DISABLED) out_mask: desc->chip->mask(irq); /* ack unconditionally to unmask lower prio irqs */ desc->chip->ack(irq); out_unlock: spin_unlock(&desc->lock); } #define handle_irq handle_prio_irq Loading Loading
arch/arm/mach-ns9xxx/irq.c +15 −7 Original line number Diff line number Diff line Loading @@ -62,7 +62,7 @@ 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; Loading @@ -70,27 +70,35 @@ void handle_prio_irq(unsigned int irq, struct irq_desc *desc) 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) if (desc->status & IRQ_DISABLED) out_mask: desc->chip->mask(irq); /* ack unconditionally to unmask lower prio irqs */ desc->chip->ack(irq); out_unlock: spin_unlock(&desc->lock); } #define handle_irq handle_prio_irq Loading