From f395d6798dc0b70b64cd69a6b1e4fd35a54ef64d Mon Sep 17 00:00:00 2001 From: Josef Karthauser Date: Mon, 10 Nov 2003 00:16:36 +0000 Subject: [PATCH] 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. --- sys/dev/usb/ohci.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sys/dev/usb/ohci.c b/sys/dev/usb/ohci.c index 2dd5f73fcb8..4375d024267 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 @@ -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);