summaryrefslogtreecommitdiff
path: root/sys/arch/sgi/xbow/xbridge.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch/sgi/xbow/xbridge.c')
-rw-r--r--sys/arch/sgi/xbow/xbridge.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/arch/sgi/xbow/xbridge.c b/sys/arch/sgi/xbow/xbridge.c
index 1201db1f927..e454d79926b 100644
--- a/sys/arch/sgi/xbow/xbridge.c
+++ b/sys/arch/sgi/xbow/xbridge.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: xbridge.c,v 1.54 2009/10/22 19:55:45 miod Exp $ */
+/* $OpenBSD: xbridge.c,v 1.55 2009/10/22 22:08:54 miod Exp $ */
/*
* Copyright (c) 2008, 2009 Miodrag Vallat.
@@ -1072,11 +1072,18 @@ xbridge_intr_handler(void *v)
spurious = 0;
LIST_FOREACH(xih, &xi->xi_handlers, xih_nxt) {
- splraise(imask[xih->xih_level]);
+ splraise(xih->xih_level);
if ((*xih->xih_func)(xih->xih_arg) != 0) {
xih->xih_count.ec_count++;
rc = 1;
}
+ /*
+ * No need to lower spl here, as our caller will lower
+ * spl upon our return.
+ * However that splraise() is necessary so that interrupt
+ * handler code calling splx() will not cause our interrupt
+ * source to be unmasked.
+ */
}
if (rc == 0 && spurious == 0)
printf("%s: spurious irq %d\n", DEVNAME(xb), xi->xi_intrbit);