This is mostly the membar changes, which are no-op on these archs.

arm64 also gets some underscores for free.

ok?

Index: arch/alpha/alpha/mutex.c
===================================================================
RCS file: /cvs/src/sys/arch/alpha/alpha/mutex.c,v
retrieving revision 1.19
diff -u -p -r1.19 mutex.c
--- arch/alpha/alpha/mutex.c    11 Sep 2017 09:52:15 -0000      1.19
+++ arch/alpha/alpha/mutex.c    14 Dec 2017 14:49:50 -0000
@@ -31,7 +31,6 @@
 #include <sys/atomic.h>
 
 #include <machine/intr.h>
-#include <machine/cpu.h>
 
 #include <ddb/db_output.h>
 
@@ -88,7 +87,7 @@ __mtx_enter_try(struct mutex *mtx)
                panic("mtx %p: locking against myself", mtx);
 #endif
        if (owner == NULL) {
-               membar_enter();
+               membar_enter_after_atomic();
                if (mtx->mtx_wantipl != IPL_NONE)
                        mtx->mtx_oldipl = s;
 #ifdef DIAGNOSTIC
@@ -144,7 +143,7 @@ __mtx_leave(struct mutex *mtx)
 
        s = mtx->mtx_oldipl;
 #ifdef MULTIPROCESSOR
-       membar_exit();
+       membar_exit_before_atomic();
 #endif
        mtx->mtx_owner = NULL;
        if (mtx->mtx_wantipl != IPL_NONE)
Index: arch/arm64/arm64/arm64_mutex.c
===================================================================
RCS file: /cvs/src/sys/arch/arm64/arm64/arm64_mutex.c,v
retrieving revision 1.2
diff -u -p -r1.2 arm64_mutex.c
--- arch/arm64/arm64/arm64_mutex.c      30 Apr 2017 16:45:45 -0000      1.2
+++ arch/arm64/arm64/arm64_mutex.c      18 Dec 2017 12:24:24 -0000
@@ -1,16 +1,17 @@
-/* $OpenBSD: arm64_mutex.c,v 1.2 2017/04/30 16:45:45 mpi Exp $ */
+/*     $OpenBSD: mutex.c,v 1.19 2017/09/11 09:52:15 mpi Exp $  */
+
 /*
  * Copyright (c) 2004 Artur Grabowski <a...@openbsd.org>
- * All rights reserved.
+ * All rights reserved. 
  *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions 
+ * are met: 
  *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
+ * 1. Redistributions of source code must retain the above copyright 
+ *    notice, this list of conditions and the following disclaimer. 
  * 2. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
+ *    derived from this software without specific prior written permission. 
  *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
@@ -21,7 +22,7 @@
  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
 #include <sys/param.h>
@@ -41,6 +42,7 @@ __mtx_init(struct mutex *mtx, int wantip
        mtx->mtx_oldipl = IPL_NONE;
 }
 
+#ifdef MULTIPROCESSOR
 #ifdef MP_LOCKDEBUG
 #ifndef DDB
 #error "MP_LOCKDEBUG requires DDB"
@@ -51,30 +53,32 @@ extern int __mp_lock_spinout;
 #endif
 
 void
-mtx_enter(struct mutex *mtx)
+__mtx_enter(struct mutex *mtx)
 {
 #ifdef MP_LOCKDEBUG
-       int ticks = __mp_lock_spinout;
+       int nticks = __mp_lock_spinout;
 #endif
 
-       while (mtx_enter_try(mtx) == 0) {
+       while (__mtx_enter_try(mtx) == 0) {
+               CPU_BUSY_CYCLE();
+
 #ifdef MP_LOCKDEBUG
-               if (--ticks == 0) {
-                       db_printf("%s(%p): lock spun out", __func__, mtx);
+               if (--nticks == 0) {
+                       db_printf("%s: %p lock spun out", __func__, mtx);
                        db_enter();
-                       ticks = __mp_lock_spinout;
+                       nticks = __mp_lock_spinout;
                }
 #endif
        }
 }
 
 int
-mtx_enter_try(struct mutex *mtx)
+__mtx_enter_try(struct mutex *mtx)
 {
        struct cpu_info *owner, *ci = curcpu();
        int s;
-       
-       if (mtx->mtx_wantipl != IPL_NONE)
+
+       if (mtx->mtx_wantipl != IPL_NONE)
                s = splraise(mtx->mtx_wantipl);
 
        owner = atomic_cas_ptr(&mtx->mtx_owner, NULL, ci);
@@ -83,7 +87,7 @@ mtx_enter_try(struct mutex *mtx)
                panic("mtx %p: locking against myself", mtx);
 #endif
        if (owner == NULL) {
-               membar_enter();
+               membar_enter_after_atomic();
                if (mtx->mtx_wantipl != IPL_NONE)
                        mtx->mtx_oldipl = s;
 #ifdef DIAGNOSTIC
@@ -97,9 +101,37 @@ mtx_enter_try(struct mutex *mtx)
 
        return (0);
 }
+#else
+void
+__mtx_enter(struct mutex *mtx)
+{
+       struct cpu_info *ci = curcpu();
+
+#ifdef DIAGNOSTIC
+       if (__predict_false(mtx->mtx_owner == ci))
+               panic("mtx %p: locking against myself", mtx);
+#endif
+
+       if (mtx->mtx_wantipl != IPL_NONE)
+               mtx->mtx_oldipl = splraise(mtx->mtx_wantipl);
+
+       mtx->mtx_owner = ci;
+
+#ifdef DIAGNOSTIC
+       ci->ci_mutex_level++;
+#endif
+}
+
+int
+__mtx_enter_try(struct mutex *mtx)
+{
+       __mtx_enter(mtx);
+       return (1);
+}
+#endif
 
 void
-mtx_leave(struct mutex *mtx)
+__mtx_leave(struct mutex *mtx)
 {
        int s;
 
@@ -111,7 +143,7 @@ mtx_leave(struct mutex *mtx)
 
        s = mtx->mtx_oldipl;
 #ifdef MULTIPROCESSOR
-       membar_exit();
+       membar_exit_before_atomic();
 #endif
        mtx->mtx_owner = NULL;
        if (mtx->mtx_wantipl != IPL_NONE)
Index: arch/mips64/mips64/mutex.c
===================================================================
RCS file: /cvs/src/sys/arch/mips64/mips64/mutex.c,v
retrieving revision 1.7
diff -u -p -r1.7 mutex.c
--- arch/mips64/mips64/mutex.c  11 Sep 2017 09:52:15 -0000      1.7
+++ arch/mips64/mips64/mutex.c  14 Dec 2017 14:49:49 -0000
@@ -87,7 +87,7 @@ __mtx_enter_try(struct mutex *mtx)
                panic("mtx %p: locking against myself", mtx);
 #endif
        if (owner == NULL) {
-               membar_enter();
+               membar_enter_after_atomic();
                if (mtx->mtx_wantipl != IPL_NONE)
                        mtx->mtx_oldipl = s;
 #ifdef DIAGNOSTIC
@@ -143,7 +143,7 @@ __mtx_leave(struct mutex *mtx)
 
        s = mtx->mtx_oldipl;
 #ifdef MULTIPROCESSOR
-       membar_exit();
+       membar_exit_before_atomic();
 #endif
        mtx->mtx_owner = NULL;
        if (mtx->mtx_wantipl != IPL_NONE)
Index: arch/powerpc/powerpc/mutex.c
===================================================================
RCS file: /cvs/src/sys/arch/powerpc/powerpc/mutex.c,v
retrieving revision 1.7
diff -u -p -r1.7 mutex.c
--- arch/powerpc/powerpc/mutex.c        11 Sep 2017 09:52:15 -0000      1.7
+++ arch/powerpc/powerpc/mutex.c        14 Dec 2017 14:48:50 -0000
@@ -31,7 +31,6 @@
 #include <sys/atomic.h>
 
 #include <machine/intr.h>
-#include <machine/cpu.h>
 
 #include <ddb/db_output.h>
 
@@ -88,7 +87,7 @@ __mtx_enter_try(struct mutex *mtx)
                panic("mtx %p: locking against myself", mtx);
 #endif
        if (owner == NULL) {
-               membar_enter();
+               membar_enter_after_atomic();
                if (mtx->mtx_wantipl != IPL_NONE)
                        mtx->mtx_oldipl = s;
 #ifdef DIAGNOSTIC
@@ -144,7 +143,7 @@ __mtx_leave(struct mutex *mtx)
 
        s = mtx->mtx_oldipl;
 #ifdef MULTIPROCESSOR
-       membar_exit();
+       membar_exit_before_atomic();
 #endif
        mtx->mtx_owner = NULL;
        if (mtx->mtx_wantipl != IPL_NONE)

Reply via email to