Module Name:    src
Committed By:   ozaki-r
Date:           Thu May  9 05:00:32 UTC 2019

Modified Files:
        src/sys/external/bsd/drm2/linux: linux_ww_mutex.c
        src/sys/kern: kern_lock.c kern_mutex.c kern_rwlock.c subr_lockdebug.c
        src/sys/sys: lockdebug.h

Log Message:
Avoid prepending a timestamp to lock debug outputs on ddb

Lock printer functions (lockops_t#lo_dump) use printf_nolog to print, but
printf_nolog now prepends a timestamp which is unnecessary for ddb:

    db{0}> show all locks/t
    [Locks tracked through LWPs]
    Locks held by an LWP (iperf):
    Lock 0 (initialized at soinit)
    lock address : 0xffffedeb84b06080 type     :     sleep/adaptive
    initialized  : 0xffffffff806d8c3f
    shared holds :                  0 exclusive:                  1
    shares wanted:                  0 exclusive:                 11
    current cpu  :                  0 last held:                  1
    current lwp  : 0xffffedeb849ff040 last held: 0xffffedeb7dfdb240
    last locked* : 0xffffffff806d8335 unlocked : 0xffffffff806d8385
    [ 79103.0868574] owner field  : 0xffffedeb7dfdb240 wait/spin:               
 1/0

Fix it by passing a printer function to lo_dump functions, i.e., make the
functions use db_printf on ddb.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/external/bsd/drm2/linux/linux_ww_mutex.c
cvs rdiff -u -r1.162 -r1.163 src/sys/kern/kern_lock.c
cvs rdiff -u -r1.78 -r1.79 src/sys/kern/kern_mutex.c
cvs rdiff -u -r1.53 -r1.54 src/sys/kern/kern_rwlock.c
cvs rdiff -u -r1.69 -r1.70 src/sys/kern/subr_lockdebug.c
cvs rdiff -u -r1.20 -r1.21 src/sys/sys/lockdebug.h

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

Modified files:

Index: src/sys/external/bsd/drm2/linux/linux_ww_mutex.c
diff -u src/sys/external/bsd/drm2/linux/linux_ww_mutex.c:1.6 src/sys/external/bsd/drm2/linux/linux_ww_mutex.c:1.7
--- src/sys/external/bsd/drm2/linux/linux_ww_mutex.c:1.6	Tue Apr 16 10:00:04 2019
+++ src/sys/external/bsd/drm2/linux/linux_ww_mutex.c	Thu May  9 05:00:31 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_ww_mutex.c,v 1.6 2019/04/16 10:00:04 mrg Exp $	*/
+/*	$NetBSD: linux_ww_mutex.c,v 1.7 2019/05/09 05:00:31 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_ww_mutex.c,v 1.6 2019/04/16 10:00:04 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_ww_mutex.c,v 1.7 2019/05/09 05:00:31 ozaki-r Exp $");
 
 #include <sys/types.h>
 #include <sys/atomic.h>
@@ -123,40 +123,40 @@ ww_acquire_fini(struct ww_acquire_ctx *c
 
 #ifdef LOCKDEBUG
 static void
-ww_dump(const volatile void *cookie)
+ww_dump(const volatile void *cookie, lockop_printer_t pr)
 {
 	const volatile struct ww_mutex *mutex = cookie;
 
-	printf_nolog("%-13s: ", "state");
+	pr("%-13s: ", "state");
 	switch (mutex->wwm_state) {
 	case WW_UNLOCKED:
-		printf_nolog("unlocked\n");
+		pr("unlocked\n");
 		break;
 	case WW_OWNED:
-		printf_nolog("owned by lwp\n");
-		printf_nolog("%-13s: %p\n", "owner", mutex->wwm_u.owner);
-		printf_nolog("%-13s: %s\n", "waiters",
+		pr("owned by lwp\n");
+		pr("%-13s: %p\n", "owner", mutex->wwm_u.owner);
+		pr("%-13s: %s\n", "waiters",
 		    cv_has_waiters((void *)(intptr_t)&mutex->wwm_cv)
 			? "yes" : "no");
 		break;
 	case WW_CTX:
-		printf_nolog("owned via ctx\n");
-		printf_nolog("%-13s: %p\n", "context", mutex->wwm_u.ctx);
-		printf_nolog("%-13s: %p\n", "lwp",
+		pr("owned via ctx\n");
+		pr("%-13s: %p\n", "context", mutex->wwm_u.ctx);
+		pr("%-13s: %p\n", "lwp",
 		    mutex->wwm_u.ctx->wwx_owner);
-		printf_nolog("%-13s: %s\n", "waiters",
+		pr("%-13s: %s\n", "waiters",
 		    cv_has_waiters((void *)(intptr_t)&mutex->wwm_cv)
 			? "yes" : "no");
 		break;
 	case WW_WANTOWN:
-		printf_nolog("owned via ctx\n");
-		printf_nolog("%-13s: %p\n", "context", mutex->wwm_u.ctx);
-		printf_nolog("%-13s: %p\n", "lwp",
+		pr("owned via ctx\n");
+		pr("%-13s: %p\n", "context", mutex->wwm_u.ctx);
+		pr("%-13s: %p\n", "lwp",
 		    mutex->wwm_u.ctx->wwx_owner);
-		printf_nolog("%-13s: %s\n", "waiters", "yes (noctx)");
+		pr("%-13s: %s\n", "waiters", "yes (noctx)");
 		break;
 	default:
-		printf_nolog("unknown\n");
+		pr("unknown\n");
 		break;
 	}
 }

Index: src/sys/kern/kern_lock.c
diff -u src/sys/kern/kern_lock.c:1.162 src/sys/kern/kern_lock.c:1.163
--- src/sys/kern/kern_lock.c:1.162	Thu May  9 04:53:52 2019
+++ src/sys/kern/kern_lock.c	Thu May  9 05:00:31 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_lock.c,v 1.162 2019/05/09 04:53:52 ozaki-r Exp $	*/
+/*	$NetBSD: kern_lock.c,v 1.163 2019/05/09 05:00:31 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2006, 2007, 2008, 2009 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_lock.c,v 1.162 2019/05/09 04:53:52 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_lock.c,v 1.163 2019/05/09 05:00:31 ozaki-r Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
@@ -117,7 +117,7 @@ do {									\
 #define	_KERNEL_LOCK_ASSERT(cond)	/* nothing */
 #endif
 
-static void	_kernel_lock_dump(const volatile void *);
+static void	_kernel_lock_dump(const volatile void *, lockop_printer_t);
 
 lockops_t _kernel_lock_ops = {
 	.lo_name = "Kernel lock",
@@ -142,13 +142,13 @@ CTASSERT(CACHE_LINE_SIZE >= sizeof(__cpu
  * Print debugging information about the kernel lock.
  */
 static void
-_kernel_lock_dump(const volatile void *junk)
+_kernel_lock_dump(const volatile void *junk, lockop_printer_t pr)
 {
 	struct cpu_info *ci = curcpu();
 
 	(void)junk;
 
-	printf_nolog("curcpu holds : %18d wanted by: %#018lx\n",
+	pr("curcpu holds : %18d wanted by: %#018lx\n",
 	    ci->ci_biglock_count, (long)ci->ci_biglock_wanted);
 }
 

Index: src/sys/kern/kern_mutex.c
diff -u src/sys/kern/kern_mutex.c:1.78 src/sys/kern/kern_mutex.c:1.79
--- src/sys/kern/kern_mutex.c:1.78	Thu May  9 04:52:59 2019
+++ src/sys/kern/kern_mutex.c	Thu May  9 05:00:31 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_mutex.c,v 1.78 2019/05/09 04:52:59 ozaki-r Exp $	*/
+/*	$NetBSD: kern_mutex.c,v 1.79 2019/05/09 05:00:31 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -40,7 +40,7 @@
 #define	__MUTEX_PRIVATE
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_mutex.c,v 1.78 2019/05/09 04:52:59 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_mutex.c,v 1.79 2019/05/09 05:00:31 ozaki-r Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -271,7 +271,7 @@ __strong_alias(mutex_spin_exit,mutex_vec
 
 static void	mutex_abort(const char *, size_t, const kmutex_t *,
     const char *);
-static void	mutex_dump(const volatile void *);
+static void	mutex_dump(const volatile void *, lockop_printer_t);
 
 lockops_t mutex_spin_lockops = {
 	.lo_name = "Mutex",
@@ -299,11 +299,11 @@ syncobj_t mutex_syncobj = {
  *	Dump the contents of a mutex structure.
  */
 static void
-mutex_dump(const volatile void *cookie)
+mutex_dump(const volatile void *cookie, lockop_printer_t pr)
 {
 	const volatile kmutex_t *mtx = cookie;
 
-	printf_nolog("owner field  : %#018lx wait/spin: %16d/%d\n",
+	pr("owner field  : %#018lx wait/spin: %16d/%d\n",
 	    (long)MUTEX_OWNER(mtx->mtx_owner), MUTEX_HAS_WAITERS(mtx),
 	    MUTEX_SPIN_P(mtx));
 }

Index: src/sys/kern/kern_rwlock.c
diff -u src/sys/kern/kern_rwlock.c:1.53 src/sys/kern/kern_rwlock.c:1.54
--- src/sys/kern/kern_rwlock.c:1.53	Wed Apr 17 02:29:43 2019
+++ src/sys/kern/kern_rwlock.c	Thu May  9 05:00:31 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_rwlock.c,v 1.53 2019/04/17 02:29:43 ozaki-r Exp $	*/
+/*	$NetBSD: kern_rwlock.c,v 1.54 2019/05/09 05:00:31 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2006, 2007, 2008, 2009 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_rwlock.c,v 1.53 2019/04/17 02:29:43 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_rwlock.c,v 1.54 2019/05/09 05:00:31 ozaki-r Exp $");
 
 #define	__RWLOCK_PRIVATE
 
@@ -113,7 +113,7 @@ do {									\
 #endif /* defined(LOCKDEBUG) */
 
 static void	rw_abort(const char *, size_t, krwlock_t *, const char *);
-static void	rw_dump(const volatile void *);
+static void	rw_dump(const volatile void *, lockop_printer_t);
 static lwp_t	*rw_owner(wchan_t);
 
 static inline uintptr_t
@@ -168,11 +168,11 @@ syncobj_t rw_syncobj = {
  *	Dump the contents of a rwlock structure.
  */
 static void
-rw_dump(const volatile void *cookie)
+rw_dump(const volatile void *cookie, lockop_printer_t pr)
 {
 	const volatile krwlock_t *rw = cookie;
 
-	printf_nolog("owner/count  : %#018lx flags    : %#018x\n",
+	pr("owner/count  : %#018lx flags    : %#018x\n",
 	    (long)RW_OWNER(rw), (int)RW_FLAGS(rw));
 }
 

Index: src/sys/kern/subr_lockdebug.c
diff -u src/sys/kern/subr_lockdebug.c:1.69 src/sys/kern/subr_lockdebug.c:1.70
--- src/sys/kern/subr_lockdebug.c:1.69	Sat Nov  3 15:20:03 2018
+++ src/sys/kern/subr_lockdebug.c	Thu May  9 05:00:31 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: subr_lockdebug.c,v 1.69 2018/11/03 15:20:03 christos Exp $	*/
+/*	$NetBSD: subr_lockdebug.c,v 1.70 2019/05/09 05:00:31 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c) 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_lockdebug.c,v 1.69 2018/11/03 15:20:03 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_lockdebug.c,v 1.70 2019/05/09 05:00:31 ozaki-r Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -768,7 +768,7 @@ lockdebug_dump(lockdebug_t *ld, void (*p
 	}
 
 	if (ld->ld_lockops->lo_dump != NULL)
-		(*ld->ld_lockops->lo_dump)(ld->ld_lock);
+		(*ld->ld_lockops->lo_dump)(ld->ld_lock, pr);
 
 	if (sleeper) {
 		(*pr)("\n");
@@ -1037,7 +1037,7 @@ lockdebug_abort(const char *func, size_t
 	    "current lwp  : %#018lx\n",
 	    ops->lo_name, func, line, msg, (long)lock,
 	    (int)cpu_index(curcpu()), (long)curlwp);
-	(*ops->lo_dump)(lock);
+	(*ops->lo_dump)(lock, printf_nolog);
 	printf_nolog("\n");
 
 	panic("lock error: %s: %s,%zu: %s: lock %p cpu %d lwp %p",

Index: src/sys/sys/lockdebug.h
diff -u src/sys/sys/lockdebug.h:1.20 src/sys/sys/lockdebug.h:1.21
--- src/sys/sys/lockdebug.h:1.20	Sun Aug 12 22:05:29 2018
+++ src/sys/sys/lockdebug.h	Thu May  9 05:00:31 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: lockdebug.h,v 1.20 2018/08/12 22:05:29 mrg Exp $	*/
+/*	$NetBSD: lockdebug.h,v 1.21 2019/05/09 05:00:31 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c) 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -44,10 +44,12 @@
 #define	LOCKOPS_SPIN	1
 #define	LOCKOPS_CV	2
 
+typedef void (*lockop_printer_t)(const char *, ...) __printflike(1, 2);
+
 typedef	struct lockops {
 	const char	*lo_name;
 	int		lo_type;
-	void		(*lo_dump)(const volatile void *);
+	void		(*lo_dump)(const volatile void *, lockop_printer_t);
 } lockops_t;
 
 #define	LOCKDEBUG_ABORT(f, ln, l, o, m) \

Reply via email to