Sergei Shtylyov wrote: > Hello. >> @@ -79,8 +80,9 @@ static void irq_dispatch(unsigned int irq) >> desc->chip->mask(source_irq); >> desc->chip->ack(source_irq); >> } >> - irq = cascade->get_irq(irq); >> - if (irq < 0) >> + ret = cascade->get_irq(irq); >> + irq = ret; >> + if (ret < 0) >> atomic_inc(&irq_err_count); >> else >> irq_dispatch(irq); >> > > How about this: > > ret = cascade->get_irq(irq); > if (ret < 0) > atomic_inc(&irq_err_count); > else > irq_dispatch(ret); > > > WBR, Sergei good suggestion, but shouldn't we then remove source_irq as well? Signed-off-by: Roel Kluin <roel.kluin@xxxxxxxxx> --- diff --git a/arch/mips/vr41xx/common/irq.c b/arch/mips/vr41xx/common/irq.c index cba36a2..ab4e327 100644 --- a/arch/mips/vr41xx/common/irq.c +++ b/arch/mips/vr41xx/common/irq.c @@ -63,6 +63,7 @@ static void irq_dispatch(unsigned int irq) { irq_cascade_t *cascade; struct irq_desc *desc; + int ret; if (irq >= NR_IRQS) { atomic_inc(&irq_err_count); @@ -71,21 +72,22 @@ static void irq_dispatch(unsigned int irq) cascade = irq_cascade + irq; if (cascade->get_irq != NULL) { - unsigned int source_irq = irq; - desc = irq_desc + source_irq; + desc = irq_desc + irq; if (desc->chip->mask_ack) - desc->chip->mask_ack(source_irq); + desc->chip->mask_ack(irq); else { - desc->chip->mask(source_irq); - desc->chip->ack(source_irq); + desc->chip->mask(irq); + desc->chip->ack(irq); } - irq = cascade->get_irq(irq); - if (irq < 0) + + ret = cascade->get_irq(irq); + if (ret < 0) atomic_inc(&irq_err_count); else - irq_dispatch(irq); + irq_dispatch(ret); + if (!(desc->status & IRQ_DISABLED) && desc->chip->unmask) - desc->chip->unmask(source_irq); + desc->chip->unmask(irq); } else do_IRQ(irq); }