diff options
author | joe <joe@FreeBSD.org> | 2003-11-10 00:16:36 +0000 |
---|---|---|
committer | joe <joe@FreeBSD.org> | 2003-11-10 00:16:36 +0000 |
commit | 28ba6b05d32a91f488425f5b1a9ba61223a48739 (patch) | |
tree | 800021ce6577abf61cffc7d2ef5b5d104c3eea34 | |
parent | 9313579fa79fc32678d6211be92c27b5f54a4714 (diff) | |
download | FreeBSD-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.c | 3 |
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); |