Module Name: src Committed By: mrg Date: Sun Aug 12 22:05:29 UTC 2018
Modified Files: src/sys/ddb: db_command.c src/sys/kern: subr_lockdebug.c src/sys/sys: lockdebug.h Log Message: add a lockdebug_dismiss() function for DDB to use that tells lockdebug to avoid asserts. use it for the ddb "reboot" command, so that it doesn't matter how ddb was entered, the reboot not trigger mutex checks and not work. To generate a diff of this commit: cvs rdiff -u -r1.154 -r1.155 src/sys/ddb/db_command.c cvs rdiff -u -r1.64 -r1.65 src/sys/kern/subr_lockdebug.c cvs rdiff -u -r1.19 -r1.20 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/ddb/db_command.c diff -u src/sys/ddb/db_command.c:1.154 src/sys/ddb/db_command.c:1.155 --- src/sys/ddb/db_command.c:1.154 Fri Jul 20 08:26:25 2018 +++ src/sys/ddb/db_command.c Sun Aug 12 22:05:29 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: db_command.c,v 1.154 2018/07/20 08:26:25 msaitoh Exp $ */ +/* $NetBSD: db_command.c,v 1.155 2018/08/12 22:05:29 mrg Exp $ */ /* * Copyright (c) 1996, 1997, 1998, 1999, 2002, 2009 The NetBSD Foundation, Inc. @@ -60,7 +60,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_command.c,v 1.154 2018/07/20 08:26:25 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_command.c,v 1.155 2018/08/12 22:05:29 mrg Exp $"); #ifdef _KERNEL_OPT #include "opt_aio.h" @@ -1352,6 +1352,10 @@ db_reboot_cmd(db_expr_t addr, bool have_ * called from cpu_reboot. */ db_recover = 0; + /* Avoid all mutex errors */ +#ifdef LOCKDEBUG + lockdebug_dismiss(); +#endif panicstr = "reboot forced via kernel debugger"; cpu_reboot((int)bootflags, NULL); #else /* _KERNEL */ Index: src/sys/kern/subr_lockdebug.c diff -u src/sys/kern/subr_lockdebug.c:1.64 src/sys/kern/subr_lockdebug.c:1.65 --- src/sys/kern/subr_lockdebug.c:1.64 Mon Mar 19 08:41:21 2018 +++ src/sys/kern/subr_lockdebug.c Sun Aug 12 22:05:29 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: subr_lockdebug.c,v 1.64 2018/03/19 08:41:21 ozaki-r Exp $ */ +/* $NetBSD: subr_lockdebug.c,v 1.65 2018/08/12 22:05:29 mrg 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.64 2018/03/19 08:41:21 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: subr_lockdebug.c,v 1.65 2018/08/12 22:05:29 mrg Exp $"); #ifdef _KERNEL_OPT #include "opt_ddb.h" @@ -981,6 +981,19 @@ lockdebug_show_lockstats(void (*pr)(cons #endif /* DDB */ /* + * lockdebug_dismiss: + * + * The system is rebooting, and potentially from an unsafe + * place so avoid any future aborts. + */ +void +lockdebug_dismiss(void) +{ + + atomic_inc_uint_nv(&ld_panic); +} + +/* * lockdebug_abort: * * An error has been trapped - dump lock info and call panic(). Index: src/sys/sys/lockdebug.h diff -u src/sys/sys/lockdebug.h:1.19 src/sys/sys/lockdebug.h:1.20 --- src/sys/sys/lockdebug.h:1.19 Mon Mar 19 08:41:21 2018 +++ src/sys/sys/lockdebug.h Sun Aug 12 22:05:29 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: lockdebug.h,v 1.19 2018/03/19 08:41:21 ozaki-r Exp $ */ +/* $NetBSD: lockdebug.h,v 1.20 2018/08/12 22:05:29 mrg Exp $ */ /*- * Copyright (c) 2006, 2007, 2008 The NetBSD Foundation, Inc. @@ -53,6 +53,7 @@ typedef struct lockops { #define LOCKDEBUG_ABORT(f, ln, l, o, m) \ lockdebug_abort(f, ln, l, o, m) +void lockdebug_dismiss(void); void lockdebug_abort(const char *, size_t, const volatile void *, lockops_t *, const char *);