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)