Module Name:    src
Committed By:   riastradh
Date:           Wed Apr 12 06:35:41 UTC 2023

Modified Files:
        src/external/cddl/osnet/dist/uts/common/fs/zfs: spa.c
        src/sys/kern: kern_mutex.c
        src/sys/rump/librump/rumpkern: locks.c locks_up.c
        src/sys/sys: mutex.h

Log Message:
kern: Nix mutex_owner.

There is no valid reason to use this except in assertions of the form

        KASSERT(mutex_owner(lock) == curlwp),

which is more obviously spelled as

        KASSERT(mutex_owned(lock)).

Exception: There's one horrible kludge in zfs that abuses this, which
should be eliminated.

XXX kernel revbump -- deleting symbol

PR kern/47114


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 \
    src/external/cddl/osnet/dist/uts/common/fs/zfs/spa.c
cvs rdiff -u -r1.104 -r1.105 src/sys/kern/kern_mutex.c
cvs rdiff -u -r1.83 -r1.84 src/sys/rump/librump/rumpkern/locks.c
cvs rdiff -u -r1.11 -r1.12 src/sys/rump/librump/rumpkern/locks_up.c
cvs rdiff -u -r1.26 -r1.27 src/sys/sys/mutex.h

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

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/spa.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/spa.c:1.11 src/external/cddl/osnet/dist/uts/common/fs/zfs/spa.c:1.12
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/spa.c:1.11	Mon Mar  9 15:37:46 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/spa.c	Wed Apr 12 06:35:40 2023
@@ -3140,7 +3140,7 @@ spa_open_common(const char *pool, spa_t 
 	 * up calling spa_open() again.  The real fix is to figure out how to
 	 * avoid dsl_dir_open() calling this in the first place.
 	 */
-	if (mutex_owner(&spa_namespace_lock) != curthread) {
+	if (!mutex_owned(&spa_namespace_lock)) {
 		mutex_enter(&spa_namespace_lock);
 		locked = B_TRUE;
 	}

Index: src/sys/kern/kern_mutex.c
diff -u src/sys/kern/kern_mutex.c:1.104 src/sys/kern/kern_mutex.c:1.105
--- src/sys/kern/kern_mutex.c:1.104	Fri Feb 24 11:21:28 2023
+++ src/sys/kern/kern_mutex.c	Wed Apr 12 06:35:40 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_mutex.c,v 1.104 2023/02/24 11:21:28 riastradh Exp $	*/
+/*	$NetBSD: kern_mutex.c,v 1.105 2023/04/12 06:35:40 riastradh 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.104 2023/02/24 11:21:28 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_mutex.c,v 1.105 2023/04/12 06:35:40 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -277,9 +277,10 @@ __strong_alias(mutex_spin_enter,mutex_ve
 __strong_alias(mutex_spin_exit,mutex_vector_exit);
 #endif
 
-static void	mutex_abort(const char *, size_t, const kmutex_t *,
-    const char *);
+static void	mutex_abort(const char *, size_t, volatile const kmutex_t *,
+		    const char *);
 static void	mutex_dump(const volatile void *, lockop_printer_t);
+static lwp_t	*mutex_owner(wchan_t);
 
 lockops_t mutex_spin_lockops = {
 	.lo_name = "Mutex",
@@ -298,7 +299,7 @@ syncobj_t mutex_syncobj = {
 	.sobj_unsleep	= turnstile_unsleep,
 	.sobj_changepri	= turnstile_changepri,
 	.sobj_lendpri	= sleepq_lendpri,
-	.sobj_owner	= (void *)mutex_owner,
+	.sobj_owner	= mutex_owner,
 };
 
 /*
@@ -325,7 +326,8 @@ mutex_dump(const volatile void *cookie, 
  *	we ask the compiler to not inline it.
  */
 static void __noinline
-mutex_abort(const char *func, size_t line, const kmutex_t *mtx, const char *msg)
+mutex_abort(const char *func, size_t line, volatile const kmutex_t *mtx,
+    const char *msg)
 {
 
 	LOCKDEBUG_ABORT(func, line, mtx, (MUTEX_SPIN_P(mtx->mtx_owner) ?
@@ -835,9 +837,10 @@ mutex_owned(const kmutex_t *mtx)
  *	Return the current owner of an adaptive mutex.  Used for
  *	priority inheritance.
  */
-lwp_t *
-mutex_owner(const kmutex_t *mtx)
+static lwp_t *
+mutex_owner(wchan_t wchan)
 {
+	volatile const kmutex_t *mtx = wchan;
 
 	MUTEX_ASSERT(mtx, MUTEX_ADAPTIVE_P(mtx->mtx_owner));
 	return (struct lwp *)MUTEX_OWNER(mtx->mtx_owner);

Index: src/sys/rump/librump/rumpkern/locks.c
diff -u src/sys/rump/librump/rumpkern/locks.c:1.83 src/sys/rump/librump/rumpkern/locks.c:1.84
--- src/sys/rump/librump/rumpkern/locks.c:1.83	Wed Oct 26 23:22:22 2022
+++ src/sys/rump/librump/rumpkern/locks.c	Wed Apr 12 06:35:40 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: locks.c,v 1.83 2022/10/26 23:22:22 riastradh Exp $	*/
+/*	$NetBSD: locks.c,v 1.84 2023/04/12 06:35:40 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2007-2011 Antti Kantee.  All Rights Reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: locks.c,v 1.83 2022/10/26 23:22:22 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: locks.c,v 1.84 2023/04/12 06:35:40 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/kmem.h>
@@ -215,17 +215,10 @@ mutex_ownable(const kmutex_t *mtx)
 int
 mutex_owned(const kmutex_t *mtx)
 {
-
-	return mutex_owner(mtx) == curlwp;
-}
-
-lwp_t *
-mutex_owner(const kmutex_t *mtx)
-{
 	struct lwp *l;
 
 	rumpuser_mutex_owner(RUMPMTX(mtx), &l);
-	return l;
+	return l == curlwp;
 }
 
 #define RUMPRW(rw) (*(struct rumpuser_rw **)(rw))

Index: src/sys/rump/librump/rumpkern/locks_up.c
diff -u src/sys/rump/librump/rumpkern/locks_up.c:1.11 src/sys/rump/librump/rumpkern/locks_up.c:1.12
--- src/sys/rump/librump/rumpkern/locks_up.c:1.11	Sat Feb 22 21:44:51 2020
+++ src/sys/rump/librump/rumpkern/locks_up.c	Wed Apr 12 06:35:40 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: locks_up.c,v 1.11 2020/02/22 21:44:51 ad Exp $	*/
+/*	$NetBSD: locks_up.c,v 1.12 2023/04/12 06:35:40 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2010 Antti Kantee.  All Rights Reserved.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: locks_up.c,v 1.11 2020/02/22 21:44:51 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: locks_up.c,v 1.12 2023/04/12 06:35:40 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -164,14 +164,6 @@ mutex_owned(kmutex_t *mtx)
 	return upm->upm_owner == curlwp;
 }
 
-struct lwp *
-mutex_owner(kmutex_t *mtx)
-{
-	UPMTX(mtx);
-
-	return upm->upm_owner;
-}
-
 struct uprw {
 	struct lwp *uprw_owner;
 	int uprw_readers;

Index: src/sys/sys/mutex.h
diff -u src/sys/sys/mutex.h:1.26 src/sys/sys/mutex.h:1.27
--- src/sys/sys/mutex.h:1.26	Wed Oct 26 23:21:20 2022
+++ src/sys/sys/mutex.h	Wed Apr 12 06:35:40 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: mutex.h,v 1.26 2022/10/26 23:21:20 riastradh Exp $	*/
+/*	$NetBSD: mutex.h,v 1.27 2023/04/12 06:35:40 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2006, 2007, 2008, 2009, 2019 The NetBSD Foundation, Inc.
@@ -199,7 +199,6 @@ int	mutex_tryenter(kmutex_t *);
 
 int	mutex_owned(const kmutex_t *);
 int	mutex_ownable(const kmutex_t *);
-lwp_t	*mutex_owner(const kmutex_t *);
 bool	mutex_owner_running(const kmutex_t *);
 
 void	mutex_obj_init(void);

Reply via email to