summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2011-04-03 22:26:25 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2011-04-03 22:26:25 +0000
commit6274fc7c801f92795cf001d4987c8cfd121f64ea (patch)
tree92d69078427bfc0a955f7e268ad9d86283c6e647
parent455e3b46be672b3dd758673ee95f570c6d800508 (diff)
In mtx_leave(), make sure resetting mtx_lock is the last operation on the
struct mutex. Modelled after hppa.
-rw-r--r--sys/arch/octeon/octeon/mutex.c9
-rw-r--r--sys/arch/sgi/sgi/mutex.c9
2 files changed, 12 insertions, 6 deletions
diff --git a/sys/arch/octeon/octeon/mutex.c b/sys/arch/octeon/octeon/mutex.c
index 1d6ae9a7a6a..52c35e003b4 100644
--- a/sys/arch/octeon/octeon/mutex.c
+++ b/sys/arch/octeon/octeon/mutex.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mutex.c,v 1.3 2011/04/03 18:46:40 miod Exp $ */
+/* $OpenBSD: mutex.c,v 1.4 2011/04/03 22:26:24 miod Exp $ */
/*
* Copyright (c) 2004 Artur Grabowski <art@openbsd.org>
@@ -106,11 +106,14 @@ mtx_enter_try(struct mutex *mtx)
void
mtx_leave(struct mutex *mtx)
{
+ int s;
+
MUTEX_ASSERT_LOCKED(mtx);
#ifdef DIAGNOSTIC
curcpu()->ci_mutex_level--;
#endif
- mtx->mtx_lock = 0;
- splx(mtx->mtx_oldipl);
+ s = mtx->mtx_oldipl;
mtx->mtx_owner = NULL;
+ mtx->mtx_lock = 0;
+ splx(s);
}
diff --git a/sys/arch/sgi/sgi/mutex.c b/sys/arch/sgi/sgi/mutex.c
index 1f699521bb8..57ca2e62ff3 100644
--- a/sys/arch/sgi/sgi/mutex.c
+++ b/sys/arch/sgi/sgi/mutex.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mutex.c,v 1.10 2011/04/03 18:46:40 miod Exp $ */
+/* $OpenBSD: mutex.c,v 1.11 2011/04/03 22:26:24 miod Exp $ */
/*
* Copyright (c) 2004 Artur Grabowski <art@openbsd.org>
@@ -104,11 +104,14 @@ mtx_enter_try(struct mutex *mtx)
void
mtx_leave(struct mutex *mtx)
{
+ int s;
+
MUTEX_ASSERT_LOCKED(mtx);
#ifdef DIAGNOSTIC
curcpu()->ci_mutex_level--;
#endif
- mtx->mtx_lock = 0;
- splx(mtx->mtx_oldipl);
+ s = mtx->mtx_oldipl;
mtx->mtx_owner = NULL;
+ mtx->mtx_lock = 0;
+ splx(s);
}