diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2006-11-20 21:51:34 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2006-11-20 21:51:34 +0000 |
commit | d643ce3a26052392f07de759a026af5a91bb9e95 (patch) | |
tree | 681d254c32746536df8a3a4787287b7799275540 | |
parent | 1553658f36cd981f804da2c7b771468c4c4510a4 (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.c | 12 |
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 } /* |