Module Name:    src
Committed By:   thorpej
Date:           Wed Aug 25 04:13:42 UTC 2021

Modified Files:
        src/sys/arch/alpha/include: mutex.h
        src/sys/arch/arm/include: mutex.h
        src/sys/arch/ia64/include: mutex.h
        src/sys/arch/m68k/include: mutex.h
        src/sys/arch/mips/include: mutex.h
        src/sys/arch/or1k/include: mutex.h
        src/sys/arch/riscv/include: mutex.h
        src/sys/arch/sh3/include: mutex.h
        src/sys/arch/sparc64/include: mutex.h
        src/sys/arch/vax/include: mutex.h
        src/sys/kern: kern_mutex.c

Log Message:
- In kern_mutex.c, if MUTEX_CAS() is not defined, define it in terms of
  atomic_cas_ulong().
- For arm, ia64, m68k, mips, or1k, riscv, vax: don't define our own
  MUTEX_CAS(), as they either use atomic_cas_ulong() or equivalent
  (atomic_cas_uint() on m68k).
- For alpha and sparc64, don't define MUTEX_CAS() in terms of their own
  _lock_cas(), which has its own memory barriers; the call sites in
  kern_mutex.c already have the appropriate memory barrier calls.  Thus,
  alpha and sparc64 can use default definition.
- For sh3, don't define MUTEX_CAS() in terms of its own _lock_cas();
  atomic_cas_ulong() is strong-aliased to _lock_cas(), therefore defining
  our own MUTEX_CAS() is redundant.

Per thread:
        https://mail-index.netbsd.org/tech-kern/2021/07/25/msg027562.html


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/alpha/include/mutex.h
cvs rdiff -u -r1.25 -r1.26 src/sys/arch/arm/include/mutex.h
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/ia64/include/mutex.h
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/m68k/include/mutex.h
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/mips/include/mutex.h
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/or1k/include/mutex.h
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/riscv/include/mutex.h
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/sh3/include/mutex.h
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/sparc64/include/mutex.h
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/vax/include/mutex.h
cvs rdiff -u -r1.97 -r1.98 src/sys/kern/kern_mutex.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/alpha/include/mutex.h
diff -u src/sys/arch/alpha/include/mutex.h:1.10 src/sys/arch/alpha/include/mutex.h:1.11
--- src/sys/arch/alpha/include/mutex.h:1.10	Wed Jul 14 02:18:10 2021
+++ src/sys/arch/alpha/include/mutex.h	Wed Aug 25 04:13:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: mutex.h,v 1.10 2021/07/14 02:18:10 thorpej Exp $	*/
+/*	$NetBSD: mutex.h,v 1.11 2021/08/25 04:13:41 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2006, 2007 The NetBSD Foundation, Inc.
@@ -61,10 +61,6 @@ struct kmutex {
 #define	__HAVE_MUTEX_STUBS		1
 /* XXX #define	__HAVE_SPIN_MUTEX_STUBS		1 XXX */
 
-#define	MUTEX_CAS(p, o, n)		_lock_cas((p), (o), (n))
-
-int	_lock_cas(volatile uintptr_t *, uintptr_t, uintptr_t);
-
 #endif	/* __MUTEX_PRIVATE */
 
 __CTASSERT(sizeof(struct kmutex) == sizeof(uintptr_t));

Index: src/sys/arch/arm/include/mutex.h
diff -u src/sys/arch/arm/include/mutex.h:1.25 src/sys/arch/arm/include/mutex.h:1.26
--- src/sys/arch/arm/include/mutex.h:1.25	Tue Dec  1 14:53:47 2020
+++ src/sys/arch/arm/include/mutex.h	Wed Aug 25 04:13:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: mutex.h,v 1.25 2020/12/01 14:53:47 skrll Exp $	*/
+/*	$NetBSD: mutex.h,v 1.26 2021/08/25 04:13:41 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc.
@@ -80,9 +80,6 @@ struct kmutex {
 #endif
 #define	__HAVE_SIMPLE_MUTEXES		1
 
-#define	MUTEX_CAS(p, o, n)		\
-    (atomic_cas_ulong((volatile unsigned long *)(p), (o), (n)) == (o))
-
 #endif	/* __MUTEX_PRIVATE */
 
 #endif /* _ARM_MUTEX_H_ */

Index: src/sys/arch/ia64/include/mutex.h
diff -u src/sys/arch/ia64/include/mutex.h:1.5 src/sys/arch/ia64/include/mutex.h:1.6
--- src/sys/arch/ia64/include/mutex.h:1.5	Fri Nov 29 22:55:33 2019
+++ src/sys/arch/ia64/include/mutex.h	Wed Aug 25 04:13:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: mutex.h,v 1.5 2019/11/29 22:55:33 riastradh Exp $	*/
+/*	$NetBSD: mutex.h,v 1.6 2021/08/25 04:13:41 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -56,9 +56,6 @@ struct kmutex {
 */
 #define	__HAVE_SIMPLE_MUTEXES		1
 
-#define	MUTEX_CAS(ptr, old, new)		\
-    (atomic_cas_ulong((volatile unsigned long *)(ptr), (old), (new)) == (old))
-
 #endif	/* __MUTEX_PRIVATE */
 
 #endif	/* _IA64_MUTEX_H_ */

Index: src/sys/arch/m68k/include/mutex.h
diff -u src/sys/arch/m68k/include/mutex.h:1.10 src/sys/arch/m68k/include/mutex.h:1.11
--- src/sys/arch/m68k/include/mutex.h:1.10	Sun Mar  8 06:12:01 2020
+++ src/sys/arch/m68k/include/mutex.h	Wed Aug 25 04:13:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: mutex.h,v 1.10 2020/03/08 06:12:01 rin Exp $	*/
+/*	$NetBSD: mutex.h,v 1.11 2021/08/25 04:13:41 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc.
@@ -64,8 +64,6 @@ struct kmutex {
 #define	__HAVE_MUTEX_STUBS		1
 #endif
 
-#define	MUTEX_CAS(p, o, n)		(atomic_cas_uint((p), (o), (n)) == (o))
-
 #endif	/* __MUTEX_PRIVATE */
 
 #endif /* _M68K_MUTEX_H_ */

Index: src/sys/arch/mips/include/mutex.h
diff -u src/sys/arch/mips/include/mutex.h:1.8 src/sys/arch/mips/include/mutex.h:1.9
--- src/sys/arch/mips/include/mutex.h:1.8	Fri Nov 29 22:55:33 2019
+++ src/sys/arch/mips/include/mutex.h	Wed Aug 25 04:13:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: mutex.h,v 1.8 2019/11/29 22:55:33 riastradh Exp $	*/
+/*	$NetBSD: mutex.h,v 1.9 2021/08/25 04:13:41 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc.
@@ -55,9 +55,6 @@ struct kmutex {
 #define	__HAVE_MUTEX_STUBS		1
 #define	__HAVE_SPIN_MUTEX_STUBS		1
 
-#define	MUTEX_CAS(p, o, n)		\
-    (atomic_cas_ulong((volatile u_long *)(p), (o), (n)) == (o))
-
 #endif	/* __MUTEX_PRIVATE */
 
 #endif /* _MIPS_MUTEX_H_ */

Index: src/sys/arch/or1k/include/mutex.h
diff -u src/sys/arch/or1k/include/mutex.h:1.2 src/sys/arch/or1k/include/mutex.h:1.3
--- src/sys/arch/or1k/include/mutex.h:1.2	Fri Nov 29 22:55:33 2019
+++ src/sys/arch/or1k/include/mutex.h	Wed Aug 25 04:13:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: mutex.h,v 1.2 2019/11/29 22:55:33 riastradh Exp $	*/
+/*	$NetBSD: mutex.h,v 1.3 2021/08/25 04:13:41 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc.
@@ -70,9 +70,6 @@ struct kmutex {
 #endif
 #define	__HAVE_SIMPLE_MUTEXES		1
 
-#define	MUTEX_CAS(p, o, n)		\
-    (atomic_cas_ulong((volatile unsigned long *)(p), (o), (n)) == (o))
-
 #endif	/* __MUTEX_PRIVATE */
 
 #endif /* _OR1K_MUTEX_H_ */

Index: src/sys/arch/riscv/include/mutex.h
diff -u src/sys/arch/riscv/include/mutex.h:1.3 src/sys/arch/riscv/include/mutex.h:1.4
--- src/sys/arch/riscv/include/mutex.h:1.3	Fri Nov 29 22:55:34 2019
+++ src/sys/arch/riscv/include/mutex.h	Wed Aug 25 04:13:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: mutex.h,v 1.3 2019/11/29 22:55:34 riastradh Exp $	*/
+/*	$NetBSD: mutex.h,v 1.4 2021/08/25 04:13:41 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc.
@@ -113,9 +113,6 @@ riscv_mutex_spinbit_lock_unlock(kmutex_t
 #endif
 #define	__HAVE_SIMPLE_MUTEXES		1
 
-#define	MUTEX_CAS(p, o, n)		\
-    (atomic_cas_ulong((volatile unsigned long *)(p), (o), (n)) == (o))
-
 #endif	/* __MUTEX_PRIVATE */
 
 #endif /* _RISCV_MUTEX_H_ */

Index: src/sys/arch/sh3/include/mutex.h
diff -u src/sys/arch/sh3/include/mutex.h:1.10 src/sys/arch/sh3/include/mutex.h:1.11
--- src/sys/arch/sh3/include/mutex.h:1.10	Fri Nov 29 22:55:34 2019
+++ src/sys/arch/sh3/include/mutex.h	Wed Aug 25 04:13:42 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: mutex.h,v 1.10 2019/11/29 22:55:34 riastradh Exp $	*/
+/*	$NetBSD: mutex.h,v 1.11 2021/08/25 04:13:42 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc.
@@ -62,10 +62,6 @@ struct kmutex {
 #define	__HAVE_SIMPLE_MUTEXES		1
 #define	__HAVE_MUTEX_STUBS		1
 
-uintptr_t	_lock_cas(volatile uintptr_t *, uintptr_t, uintptr_t);
-
-#define	MUTEX_CAS(p, o, n)		(_lock_cas((p), (o), (n)) == (o))
-
 #endif	/* __MUTEX_PRIVATE */
 
 #endif /* _SH3_MUTEX_H_ */

Index: src/sys/arch/sparc64/include/mutex.h
diff -u src/sys/arch/sparc64/include/mutex.h:1.6 src/sys/arch/sparc64/include/mutex.h:1.7
--- src/sys/arch/sparc64/include/mutex.h:1.6	Fri Nov 29 22:55:34 2019
+++ src/sys/arch/sparc64/include/mutex.h	Wed Aug 25 04:13:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: mutex.h,v 1.6 2019/11/29 22:55:34 riastradh Exp $	*/
+/*	$NetBSD: mutex.h,v 1.7 2021/08/25 04:13:41 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc.
@@ -55,10 +55,6 @@ struct kmutex {
 #define __HAVE_MUTEX_STUBS		1
 #define	__HAVE_SIMPLE_MUTEXES		1
 
-#define	MUTEX_CAS(p, o, n)		_lock_cas((p), (o), (n))
-
-int	_lock_cas(volatile uintptr_t *, uintptr_t, uintptr_t);
-
 #endif	/* __MUTEX_PRIVATE */
 
 #endif /* _SPARC64_MUTEX_H_ */

Index: src/sys/arch/vax/include/mutex.h
diff -u src/sys/arch/vax/include/mutex.h:1.15 src/sys/arch/vax/include/mutex.h:1.16
--- src/sys/arch/vax/include/mutex.h:1.15	Fri Nov 29 22:55:34 2019
+++ src/sys/arch/vax/include/mutex.h	Wed Aug 25 04:13:42 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: mutex.h,v 1.15 2019/11/29 22:55:34 riastradh Exp $	*/
+/*	$NetBSD: mutex.h,v 1.16 2021/08/25 04:13:42 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc.
@@ -71,8 +71,6 @@ struct kmutex {
 #define	__HAVE_SPIN_MUTEX_STUBS		1
 #define	__HAVE_SIMPLE_MUTEXES		1
 
-#define	MUTEX_CAS(p, o, n)	(atomic_cas_ulong((p), (o), (n)) == (o))
-
 #endif	/* __MUTEX_PRIVATE */
 
 #endif /* _VAX_MUTEX_H_ */

Index: src/sys/kern/kern_mutex.c
diff -u src/sys/kern/kern_mutex.c:1.97 src/sys/kern/kern_mutex.c:1.98
--- src/sys/kern/kern_mutex.c:1.97	Sat Apr  3 14:56:14 2021
+++ src/sys/kern/kern_mutex.c	Wed Aug 25 04:13:42 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_mutex.c,v 1.97 2021/04/03 14:56:14 thorpej Exp $	*/
+/*	$NetBSD: kern_mutex.c,v 1.98 2021/08/25 04:13:42 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2006, 2007, 2008, 2019 The NetBSD Foundation, Inc.
@@ -40,7 +40,7 @@
 #define	__MUTEX_PRIVATE
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_mutex.c,v 1.97 2021/04/03 14:56:14 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_mutex.c,v 1.98 2021/08/25 04:13:42 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -214,6 +214,11 @@ do {									\
 #define	MUTEX_ADAPTIVE_P(owner)		\
     (((owner) & MUTEX_BIT_SPIN) == 0)
 
+#ifndef MUTEX_CAS
+#define	MUTEX_CAS(p, o, n)		\
+	(atomic_cas_ulong((volatile unsigned long *)(p), (o), (n)) == (o))
+#endif /* MUTEX_CAS */
+
 #define	MUTEX_DEBUG_P(mtx)	(((mtx)->mtx_owner & MUTEX_BIT_NODEBUG) == 0)
 #if defined(LOCKDEBUG)
 #define	MUTEX_OWNED(owner)		(((owner) & ~MUTEX_BIT_NODEBUG) != 0)

Reply via email to