summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjoe <joe@FreeBSD.org>2003-11-10 00:16:36 +0000
committerjoe <joe@FreeBSD.org>2003-11-10 00:16:36 +0000
commit28ba6b05d32a91f488425f5b1a9ba61223a48739 (patch)
tree800021ce6577abf61cffc7d2ef5b5d104c3eea34
parent9313579fa79fc32678d6211be92c27b5f54a4714 (diff)
downloadFreeBSD-src-28ba6b05d32a91f488425f5b1a9ba61223a48739.zip
FreeBSD-src-28ba6b05d32a91f488425f5b1a9ba61223a48739.tar.gz
MFNetBSD:
revision 1.142 date: 2003/10/11 03:04:26; author: toshii Fix a done list handling bug which exhibits under high shared interrupt rate and bus traffic. As the interrupt register is read after checking hcca_done_head, there was a small chance of dropping a done list. Ignore OHCI_WDH interrupt bit if hcca_done_head is zero so that OHCI_WDH is processed later.
-rw-r--r--sys/dev/usb/ohci.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/dev/usb/ohci.c b/sys/dev/usb/ohci.c
index 2dd5f73..4375d02 100644
--- a/sys/dev/usb/ohci.c
+++ b/sys/dev/usb/ohci.c
@@ -3,6 +3,7 @@
/* Also, already ported:
* $NetBSD: ohci.c,v 1.140 2003/05/13 04:42:00 gson Exp $
* $NetBSD: ohci.c,v 1.141 2003/09/10 20:08:29 mycroft Exp $
+ * $NetBSD: ohci.c,v 1.142 2003/10/11 03:04:26 toshii Exp $
*/
#include <sys/cdefs.h>
@@ -1180,7 +1181,7 @@ ohci_intr1(ohci_softc_t *sc)
}
sc->sc_hcca->hcca_done_head = 0;
} else
- intrs = OREAD4(sc, OHCI_INTERRUPT_STATUS);
+ intrs = OREAD4(sc, OHCI_INTERRUPT_STATUS) & ~OHCI_WDH;
if (intrs == 0) /* nothing to be done (PCI shared interrupt) */
return (0);
OpenPOWER on IntegriCloud