Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/usermode/usermode Keep processing since we *might* ...



details:   https://anonhg.NetBSD.org/src/rev/de9c9951c008
branches:  trunk
changeset: 769530:de9c9951c008
user:      reinoud <reinoud%NetBSD.org@localhost>
date:      Tue Sep 13 10:38:04 2011 +0000

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

diffstat:

 sys/arch/usermode/usermode/intr.c |  6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diffs (34 lines):

diff -r ba350f468451 -r de9c9951c008 sys/arch/usermode/usermode/intr.c
--- a/sys/arch/usermode/usermode/intr.c Tue Sep 13 10:33:11 2011 +0000
+++ b/sys/arch/usermode/usermode/intr.c Tue Sep 13 10:38:04 2011 +0000
@@ -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 <jmcneill%invisible.ca@localhost>
@@ -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;



Home | Main Index | Thread Index | Old Index