Module Name:    src
Committed By:   reinoud
Date:           Tue Sep 13 10:38:04 UTC 2011

Modified Files:
        src/sys/arch/usermode/usermode: intr.c

Log Message:
Keep processing since we *might* have missed one during execution


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/usermode/usermode/intr.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/arch/usermode/usermode/intr.c
diff -u src/sys/arch/usermode/usermode/intr.c:1.5 src/sys/arch/usermode/usermode/intr.c:1.6
--- src/sys/arch/usermode/usermode/intr.c:1.5	Mon Sep 12 12:24:34 2011
+++ src/sys/arch/usermode/usermode/intr.c	Tue Sep 13 10:38:04 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: intr.c,v 1.5 2011/09/12 12:24:34 reinoud Exp $ */
+/* $NetBSD: intr.c,v 1.6 2011/09/13 10:38:04 reinoud Exp $ */
 
 /*-
  * Copyright (c) 2011 Jared D. McNeill <[email protected]>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.5 2011/09/12 12:24:34 reinoud Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.6 2011/09/13 10:38:04 reinoud Exp $");
 
 #include <sys/types.h>
 
@@ -111,6 +111,7 @@
 
 	/* `eat' interrupts that came by until we got back to x */
 	if (usermode_x > x) {
+restart:
 		for (y = usermode_x; y >= x; y--) {
 			while (spl_intr_rd[y] != spl_intr_wr[y]) {
 				// printf("spl y %d firing\n", y);
@@ -120,6 +121,7 @@
 						__func__, y, spl_intr_rd[y], spl_intr_wr[y]);
 				spli->func(spli->arg);
 				spl_intr_rd[y] = (spl_intr_rd[y] + 1) % MAX_QUEUED_EVENTS;
+				goto restart;
 			}
 		}
 		usermode_x = x;

Reply via email to