diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2007-05-18 16:35:03 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2007-05-18 16:35:03 +0000 |
commit | 50b312f4a4ac46b1b7543860038bf709e941a412 (patch) | |
tree | df7b5f922eef62ada72fcb189d28fdb0e00f0284 /sys | |
parent | 6e4bb32036a667fde9ff4c6fab1aae722b23ffda (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.c | 16 |
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); } |