Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/ic If IRQ was not for us, add back WDCF_IRQ_WAIT to ...
details: https://anonhg.NetBSD.org/src/rev/6cff37b4264d
branches: trunk
changeset: 477554:6cff37b4264d
user: bouyer <bouyer%NetBSD.org@localhost>
date: Thu Oct 21 14:37:58 1999 +0000
description:
If IRQ was not for us, add back WDCF_IRQ_WAIT to the flags, so that
the next IRQ (real or timeout) will be handled.
Fixes the 'missing untimeout' problem reported by a few peoples, and
kern/8639.
diffstat:
sys/dev/ic/wdc.c | 8 ++++++--
1 files changed, 6 insertions(+), 2 deletions(-)
diffs (29 lines):
diff -r 5af1f76ec1fd -r 6cff37b4264d sys/dev/ic/wdc.c
--- a/sys/dev/ic/wdc.c Thu Oct 21 13:46:06 1999 +0000
+++ b/sys/dev/ic/wdc.c Thu Oct 21 14:37:58 1999 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: wdc.c,v 1.75 1999/10/20 15:22:26 enami Exp $ */
+/* $NetBSD: wdc.c,v 1.76 1999/10/21 14:37:58 bouyer Exp $ */
/*
@@ -652,6 +652,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);
@@ -661,7 +662,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