summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2007-05-18 16:35:03 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2007-05-18 16:35:03 +0000
commit50b312f4a4ac46b1b7543860038bf709e941a412 (patch)
treedf7b5f922eef62ada72fcb189d28fdb0e00f0284 /sys
parent6e4bb32036a667fde9ff4c6fab1aae722b23ffda (diff)
In spl0(), really process soft interrupts at IPL_SOFT instead of whatever
level we were at.
Diffstat (limited to 'sys')
-rw-r--r--sys/arch/m88k/m88k/m88k_machdep.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/sys/arch/m88k/m88k/m88k_machdep.c b/sys/arch/m88k/m88k/m88k_machdep.c
index 70b2fab384f..9d7bee8e833 100644
--- a/sys/arch/m88k/m88k/m88k_machdep.c
+++ b/sys/arch/m88k/m88k/m88k_machdep.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: m88k_machdep.c,v 1.18 2007/04/18 21:21:20 miod Exp $ */
+/* $OpenBSD: m88k_machdep.c,v 1.19 2007/05/18 16:35:02 miod Exp $ */
/*
* Copyright (c) 1998, 1999, 2000, 2001 Steve Murphree, Jr.
* Copyright (c) 1996 Nivas Madhur
@@ -359,7 +359,11 @@ int netisr;
void
dosoftint()
{
- if (ISSET(ssir, SIR_NET)) {
+ int sir = ssir;
+
+ atomic_clearbits_int(&ssir, sir);
+
+ if (ISSET(sir, SIR_NET)) {
uvmexp.softs++;
#define DONETISR(bit, fn) \
do { \
@@ -370,13 +374,11 @@ dosoftint()
} while (0)
#include <net/netisr_dispatch.h>
#undef DONETISR
- atomic_clearbits_int(&ssir, SIR_NET);
}
- if (ISSET(ssir, SIR_CLOCK)) {
+ if (ISSET(sir, SIR_CLOCK)) {
uvmexp.softs++;
softclock();
- atomic_clearbits_int(&ssir, SIR_CLOCK);
}
}
@@ -385,12 +387,12 @@ spl0()
{
int s;
- s = splsoftclock();
+ s = setipl(IPL_SOFTCLOCK);
if (ssir)
dosoftint();
- setipl(0);
+ setipl(IPL_NONE);
return (s);
}