Module Name:    src
Committed By:   skrll
Date:           Fri Jul  1 09:03:28 UTC 2016

Modified Files:
        src/sys/dev/ic: sl811hs.c

Log Message:
Loop in the interrupt handler while there are interrupts to process.

umass(4) reads now work much better.


To generate a diff of this commit:
cvs rdiff -u -r1.92 -r1.93 src/sys/dev/ic/sl811hs.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/ic/sl811hs.c
diff -u src/sys/dev/ic/sl811hs.c:1.92 src/sys/dev/ic/sl811hs.c:1.93
--- src/sys/dev/ic/sl811hs.c:1.92	Fri Jul  1 08:42:21 2016
+++ src/sys/dev/ic/sl811hs.c	Fri Jul  1 09:03:28 2016
@@ -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);

Reply via email to