linux-mips
[Top] [All Lists]

[PATCH 2.6] vr41xx: fix spurious IRQ problem

To: Ralf Baechle <ralf@linux-mips.org>
Subject: [PATCH 2.6] vr41xx: fix spurious IRQ problem
From: Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
Date: Tue, 2 Aug 2005 00:35:38 +0900
Cc: yuasa@hh.iij4u.or.jp, linux-mips <linux-mips@linux-mips.org>
Original-recipient: rfc822;linux-mips@linux-mips.org
Sender: linux-mips-bounce@linux-mips.org
Hi Ralf,

This patch has fixed spurious IRQ problem about vr41xx.
Please apply this patch.

Yoichi

Signed-off-by: Yoichi Yuasa <yuasa@hh.iij4u.or.jp>

diff -urN -X dontdiff a-orig/arch/mips/vr41xx/common/irq.c 
a/arch/mips/vr41xx/common/irq.c
--- a-orig/arch/mips/vr41xx/common/irq.c        2005-07-12 01:04:42.000000000 
+0900
+++ a/arch/mips/vr41xx/common/irq.c     2005-07-31 21:07:17.000000000 +0900
@@ -62,6 +62,7 @@
 asmlinkage void irq_dispatch(unsigned int irq, struct pt_regs *regs)
 {
        irq_cascade_t *cascade;
+       irq_desc_t *desc;
 
        if (irq >= NR_IRQS) {
                atomic_inc(&irq_err_count);
@@ -70,11 +71,15 @@
 
        cascade = irq_cascade + irq;
        if (cascade->get_irq != NULL) {
+               unsigned int source_irq = irq;
+               desc = irq_desc + source_irq;
+               desc->handler->ack(source_irq);
                irq = cascade->get_irq(irq, regs);
                if (irq < 0)
                        atomic_inc(&irq_err_count);
                else
                        irq_dispatch(irq, regs);
+               desc->handler->end(source_irq);
        } else
                do_IRQ(irq, regs);
 }

<Prev in Thread] Current Thread [Next in Thread>