diff options
| author | skrll <skrll@NetBSD.org> | 2016-07-01 09:03:28 +0000 |
|---|---|---|
| committer | skrll <skrll@NetBSD.org> | 2016-07-01 09:03:28 +0000 |
| commit | ffa40a84b9b84d36ceedc7ee510c2da7bfefb5ce (patch) | |
| tree | 73bb170dc568a3f36fd3941d2b9a762a43a15d21 /sys/dev | |
| parent | 6a2c0bd4162dbb74948e522421e7db9b57ddee5d (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.c | 14 |
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); |
