summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorskrll <skrll@NetBSD.org>2016-07-01 09:03:28 +0000
committerskrll <skrll@NetBSD.org>2016-07-01 09:03:28 +0000
commitffa40a84b9b84d36ceedc7ee510c2da7bfefb5ce (patch)
tree73bb170dc568a3f36fd3941d2b9a762a43a15d21 /sys/dev
parent6a2c0bd4162dbb74948e522421e7db9b57ddee5d (diff)
Loop in the interrupt handler while there are interrupts to process.
umass(4) reads now work much better.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/ic/sl811hs.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/sys/dev/ic/sl811hs.c b/sys/dev/ic/sl811hs.c
index 2f6e936b73c..b27e75925cb 100644
--- a/sys/dev/ic/sl811hs.c
+++ b/sys/dev/ic/sl811hs.c
@@ -1,4 +1,4 @@
-/* $NetBSD: sl811hs.c,v 1.92 2016/07/01 08:42:21 skrll Exp $ */
+/* $NetBSD: sl811hs.c,v 1.93 2016/07/01 09:03:28 skrll Exp $ */
/*
* Not (c) 2007 Matthew Orgass
@@ -68,7 +68,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sl811hs.c,v 1.92 2016/07/01 08:42:21 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sl811hs.c,v 1.93 2016/07/01 09:03:28 skrll Exp $");
#ifdef _KERNEL_OPT
#include "opt_slhci.h"
@@ -1534,13 +1534,17 @@ slhci_intr(void *arg)
{
SLHCIHIST_FUNC(); SLHCIHIST_CALLED();
struct slhci_softc *sc = arg;
- int ret;
+ int ret = 0;
+ int irq;
start_cc_time(&t_hard_int, (unsigned int)arg);
mutex_enter(&sc->sc_intr_lock);
- ret = slhci_dointr(sc);
- slhci_main(sc);
+ do {
+ irq = slhci_dointr(sc);
+ ret |= irq;
+ slhci_main(sc);
+ } while (irq);
mutex_exit(&sc->sc_intr_lock);
stop_cc_time(&t_hard_int);