Module Name: src
Committed By: ad
Date: Sat Oct 7 20:27:20 UTC 2023
Modified Files:
src/sys/ddb: db_command.c db_interface.h db_xxx.c
Log Message:
Add some simple DDB show commands: condvar, selinfo, sleepq
To generate a diff of this commit:
cvs rdiff -u -r1.185 -r1.186 src/sys/ddb/db_command.c
cvs rdiff -u -r1.40 -r1.41 src/sys/ddb/db_interface.h
cvs rdiff -u -r1.75 -r1.76 src/sys/ddb/db_xxx.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/ddb/db_command.c
diff -u src/sys/ddb/db_command.c:1.185 src/sys/ddb/db_command.c:1.186
--- src/sys/ddb/db_command.c:1.185 Mon Jul 17 12:55:03 2023
+++ src/sys/ddb/db_command.c Sat Oct 7 20:27:20 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: db_command.c,v 1.185 2023/07/17 12:55:03 riastradh Exp $ */
+/* $NetBSD: db_command.c,v 1.186 2023/10/07 20:27:20 ad Exp $ */
/*
* Copyright (c) 1996, 1997, 1998, 1999, 2002, 2009, 2019
@@ -61,7 +61,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_command.c,v 1.185 2023/07/17 12:55:03 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_command.c,v 1.186 2023/10/07 20:27:20 ad Exp $");
#ifdef _KERNEL_OPT
#include "opt_aio.h"
@@ -249,6 +249,8 @@ static const struct db_command db_show_c
/* added from all sub cmds */
{ DDB_ADD_CMD("callout", db_show_callout,
0 ,"List all used callout functions.",NULL,NULL) },
+ { DDB_ADD_CMD("condvar", db_show_condvar,
+ 0 ,"Show the contents of a condition variable.",NULL,NULL) },
{ DDB_ADD_CMD("devices", db_show_all_devices, 0,NULL,NULL,NULL) },
{ DDB_ADD_CMD("event", db_event_print_cmd, 0,
"Print all the non-zero evcnt(9) event counters.", "[/fitm]",NULL) },
@@ -317,6 +319,10 @@ static const struct db_command db_show_c
{ DDB_ADD_CMD("sched_qs", db_show_sched_qs, 0,
"Print the state of the scheduler's run queues.",
NULL,NULL) },
+ { DDB_ADD_CMD("selinfo", db_show_selinfo,
+ 0 ,"Show the contents of a selinfo.",NULL,NULL) },
+ { DDB_ADD_CMD("sleepq", db_show_sleepq,
+ 0 ,"Show the contents of a sleep queue.",NULL,NULL) },
{ DDB_ADD_CMD("socket", db_socket_print_cmd, 0,NULL,NULL,NULL) },
{ DDB_ADD_CMD("tstiles", db_show_all_tstiles,
0, "Show who's holding up tstiles", "[/t]", NULL) },
Index: src/sys/ddb/db_interface.h
diff -u src/sys/ddb/db_interface.h:1.40 src/sys/ddb/db_interface.h:1.41
--- src/sys/ddb/db_interface.h:1.40 Sun Apr 18 01:28:50 2021
+++ src/sys/ddb/db_interface.h Sat Oct 7 20:27:20 2023
@@ -1,7 +1,7 @@
-/* $NetBSD: db_interface.h,v 1.40 2021/04/18 01:28:50 mrg Exp $ */
+/* $NetBSD: db_interface.h,v 1.41 2023/10/07 20:27:20 ad Exp $ */
/*-
- * Copyright (c) 1995 The NetBSD Foundation, Inc.
+ * Copyright (c) 1995, 2023 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
@@ -52,7 +52,7 @@ void db_show_all_procs(db_expr_t, bool,
void db_show_all_pools(db_expr_t, bool, db_expr_t, const char *);
void db_show_sched_qs(db_expr_t, bool, db_expr_t, const char *);
-/* kern/kern_clock.c */
+/* kern/kern_timeout.c */
void db_show_callout(db_expr_t, bool, db_expr_t, const char *);
/* kern/subr_log.c */
@@ -80,6 +80,15 @@ void db_show_all_device(db_expr_t, bool
/* kern/subr_disk.c, dev/dksubr.c */
void db_show_disk(db_expr_t, bool, db_expr_t, const char *);
+/* kern/kern_sleepq.c */
+void db_show_sleepq(db_expr_t, bool, db_expr_t, const char *);
+
+/* kern/kern_condvar.c */
+void db_show_condvar(db_expr_t, bool, db_expr_t, const char *);
+
+/* kern/sys_select.c */
+void db_show_selinfo(db_expr_t, bool, db_expr_t, const char *);
+
/* The db_stacktrace_print macro may be overridden by an MD macro */
#ifndef db_stacktrace_print
#define db_stacktrace_print(prfunc) \
Index: src/sys/ddb/db_xxx.c
diff -u src/sys/ddb/db_xxx.c:1.75 src/sys/ddb/db_xxx.c:1.76
--- src/sys/ddb/db_xxx.c:1.75 Sat May 23 23:42:42 2020
+++ src/sys/ddb/db_xxx.c Sat Oct 7 20:27:20 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: db_xxx.c,v 1.75 2020/05/23 23:42:42 ad Exp $ */
+/* $NetBSD: db_xxx.c,v 1.76 2023/10/07 20:27:20 ad Exp $ */
/*
* Copyright (c) 1982, 1986, 1989, 1991, 1993
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_xxx.c,v 1.75 2020/05/23 23:42:42 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_xxx.c,v 1.76 2023/10/07 20:27:20 ad Exp $");
#ifdef _KERNEL_OPT
#include "opt_kgdb.h"
@@ -69,6 +69,9 @@ __KERNEL_RCSID(0, "$NetBSD: db_xxx.c,v 1
#include <sys/module.h>
#include <sys/cpu.h>
#include <sys/vmem.h>
+#include <sys/condvar.h>
+#include <sys/sleepq.h>
+#include <sys/selinfo.h>
#include <ddb/ddb.h>
#include <ddb/db_user.h>
@@ -325,3 +328,52 @@ db_show_panic(db_expr_t addr, bool haddr
(void)splx(s);
#endif
}
+
+void
+db_show_condvar(db_expr_t addr, bool haddr, db_expr_t count, const char *modif)
+{
+ kcondvar_t *cv = (kcondvar_t *)addr;
+ char buf[9], *wmesg;
+
+ /* XXX messing with kcondvar_t guts without defs */
+ db_read_bytes((db_addr_t)&cv->cv_opaque[1], sizeof(wmesg),
+ (char *)&wmesg);
+ db_read_bytes((db_addr_t)wmesg, sizeof(buf) - 1, buf);
+ buf[sizeof(buf) - 1] = '\0';
+ db_printf("wmesg=%s ", buf);
+ db_show_sleepq((db_addr_t)&cv->cv_opaque[0], false, 0, modif);
+}
+
+void
+db_show_sleepq(db_expr_t addr, bool haddr, db_expr_t count, const char *modif)
+{
+ sleepq_t sq;
+ lwp_t *lp;
+
+ db_read_bytes(addr, sizeof(lp), (char *)&sq);
+ db_printf("sleepq=");
+ if ((lp = LIST_FIRST(&sq)) == NULL) {
+ db_printf("<empty>");
+ }
+ while (lp != NULL) {
+ db_printf("%p", lp);
+ db_read_bytes((db_addr_t)&lp->l_sleepchain.le_next, sizeof(lp),
+ (char *)&lp);
+ if (lp != NULL)
+ db_printf(",");
+ }
+ db_printf("\n");
+}
+
+void
+db_show_selinfo(db_expr_t addr, bool haddr, db_expr_t count, const char *modif)
+{
+ struct selinfo sel;
+
+ db_read_bytes(addr, sizeof(sel), (char *)&sel);
+
+ db_printf("collision=%llx klist=%p cluster=%p lwp=%p fdinfo=%lx "
+ "sel_chain=%p\n", (long long)sel.sel_collision,
+ SLIST_FIRST(&sel.sel_klist), sel.sel_cluster, sel.sel_lwp,
+ (long)sel.sel_fdinfo, sel.sel_chain.sle_next);
+}