Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/netbsd-1-4]: src/sys/dev/ic Pull up revision 1.76 (requested by bouyer):



details:   https://anonhg.NetBSD.org/src/rev/3980a98cc4c6
branches:  netbsd-1-4
changeset: 469634:3980a98cc4c6
user:      he <he%NetBSD.org@localhost>
date:      Fri Oct 22 09:27:19 1999 +0000

description:
Pull up revision 1.76 (requested by bouyer):
  The WDCF_IRQ_WAIT flag was erroneously cleared when an earlier
  interrupt not for this IDE channel controller was received.
  Fixes the "missing untimeout" problems reported in PR#8639.

diffstat:

 sys/dev/ic/wdc.c |  8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diffs (29 lines):

diff -r 006ee2d91425 -r 3980a98cc4c6 sys/dev/ic/wdc.c
--- a/sys/dev/ic/wdc.c  Fri Oct 22 09:23:17 1999 +0000
+++ b/sys/dev/ic/wdc.c  Fri Oct 22 09:27:19 1999 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: wdc.c,v 1.66.2.4 1999/08/28 21:54:29 he Exp $ */
+/*     $NetBSD: wdc.c,v 1.66.2.5 1999/10/22 09:27:19 he Exp $ */
 
 
 /*
@@ -526,6 +526,7 @@
 {
        struct channel_softc *chp = arg;
        struct wdc_xfer *xfer;
+       int ret;
 
        if ((chp->ch_flags & WDCF_IRQ_WAIT) == 0) {
                WDCDEBUG_PRINT(("wdcintr: inactive controller\n"), DEBUG_INTR);
@@ -535,7 +536,10 @@
        WDCDEBUG_PRINT(("wdcintr\n"), DEBUG_INTR);
        chp->ch_flags &= ~WDCF_IRQ_WAIT;
        xfer = chp->ch_queue->sc_xfer.tqh_first;
-       return xfer->c_intr(chp, xfer, 1);
+       ret = xfer->c_intr(chp, xfer, 1);
+       if (ret == 0) /* irq was not for us, still waiting for irq */
+               chp->ch_flags |= WDCF_IRQ_WAIT;
+       return (ret);
 }
 
 /* Put all disk in RESET state */



Home | Main Index | Thread Index | Old Index