summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>2011-06-26 21:35:13 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>2011-06-26 21:35:13 +0000
commit251e4e266bf868c83af7b8c6355035f1b2f0425c (patch)
treef3287f9038d043aa4439fcb1a97d3923455c59cf
parentce0d04db24acb72b49f032b8d1fc1365bc49e6e4 (diff)
In the shared interrupt handler, return the pil and ci_handled_intr_level
to the level they were at before we started splraise'ing for the various handlers. with jsing, ok kettenis
-rw-r--r--sys/arch/sparc64/sparc64/intr.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/arch/sparc64/sparc64/intr.c b/sys/arch/sparc64/sparc64/intr.c
index 93ae040d882..e7f2e8bd588 100644
--- a/sys/arch/sparc64/sparc64/intr.c
+++ b/sys/arch/sparc64/sparc64/intr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: intr.c,v 1.40 2011/06/24 19:08:46 kettenis Exp $ */
+/* $OpenBSD: intr.c,v 1.41 2011/06/26 21:35:12 deraadt Exp $ */
/* $NetBSD: intr.c,v 1.39 2001/07/19 23:38:11 eeh Exp $ */
/*
@@ -131,7 +131,7 @@ intr_list_handler(void *arg)
{
struct cpu_info *ci = curcpu();
struct intrhand *ih = arg;
- int claimed = 0;
+ int claimed = 0, ipl = ci->ci_handled_intr_level;
while (ih) {
sparc_wrpr(pil, ih->ih_pil, 0);
@@ -144,6 +144,8 @@ intr_list_handler(void *arg)
ih = ih->ih_next;
}
+ sparc_wrpr(pil, ipl, 0);
+ ci->ci_handled_intr_level = ipl;
return (claimed);
}