summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2006-11-20 21:51:34 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2006-11-20 21:51:34 +0000
commitd643ce3a26052392f07de759a026af5a91bb9e95 (patch)
tree681d254c32746536df8a3a4787287b7799275540
parent1553658f36cd981f804da2c7b771468c4c4510a4 (diff)
Hold the kernel lock when processing low IPL interrupts; one more step towards
stable MULTIPROCESSOR kernels.
-rw-r--r--sys/arch/mvme88k/mvme88k/m188_machdep.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/sys/arch/mvme88k/mvme88k/m188_machdep.c b/sys/arch/mvme88k/mvme88k/m188_machdep.c
index 1e8dbc55b1e..0054975cfe2 100644
--- a/sys/arch/mvme88k/mvme88k/m188_machdep.c
+++ b/sys/arch/mvme88k/mvme88k/m188_machdep.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: m188_machdep.c,v 1.23 2006/11/20 21:25:15 miod Exp $ */
+/* $OpenBSD: m188_machdep.c,v 1.24 2006/11/20 21:51:33 miod Exp $ */
/*
* Copyright (c) 1998, 1999, 2000, 2001 Steve Murphree, Jr.
* Copyright (c) 1996 Nivas Madhur
@@ -379,6 +379,11 @@ m188_ext_int(u_int v, struct trapframe *eframe)
old_spl = m188_curspl[cpu];
eframe->tf_mask = old_spl;
+#ifdef MULTIPROCESSOR
+ if (eframe->tf_mask < IPL_SCHED)
+ __mp_lock(&kernel_lock);
+#endif
+
if (cur_mask == 0) {
/*
* Spurious interrupts - may be caused by debug output clearing
@@ -548,6 +553,11 @@ out:
* was taken.
*/
m188_setipl(eframe->tf_mask);
+
+#ifdef MULTIPROCESSOR
+ if (eframe->tf_mask < IPL_SCHED)
+ __mp_unlock(&kernel_lock);
+#endif
}
/*