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;