diff options
| author | Mitchell Horne <mhorne@FreeBSD.org> | 2023-01-07 18:09:28 +0000 |
|---|---|---|
| committer | Mitchell Horne <mhorne@FreeBSD.org> | 2023-01-23 19:10:24 +0000 |
| commit | 5644850620aead7c257a4e3040e20201b510f499 (patch) | |
| tree | bae05380fbcfe13cd5db9e9f1eeaa397ef09e2df | |
| parent | 627ca221c311b5d9c4132e03664a96f390ff5c0d (diff) | |
| -rw-r--r-- | share/man/man4/ddb.4 | 14 | ||||
| -rw-r--r-- | sys/ddb/db_command.c | 14 |
2 files changed, 25 insertions, 3 deletions
diff --git a/share/man/man4/ddb.4 b/share/man/man4/ddb.4 index 7d5da91fc684..7173da4eb447 100644 --- a/share/man/man4/ddb.4 +++ b/share/man/man4/ddb.4 @@ -524,13 +524,23 @@ The optional argument limits the search. .\" .Pp -.It Ic reboot Op Ar seconds -.It Ic reset Op Ar seconds +.It Xo +.Ic Ic reboot Ns Op Li / Ns Cm s +.Op Ar seconds +.Xc +.It Xo +.Ic Ic reset Ns Op Li / Ns Cm s +.Op Ar seconds +.Xc Hard reset the system. If the optional argument .Ar seconds is given, the debugger will wait for this long, at most a week, before rebooting. +When the +.Cm s +modifier is given, the command will skip running any registered shutdown +handlers and attempt the most basic reset. .Pp .It Ic thread Ar addr | tid Switch the debugger to the thread with ID diff --git a/sys/ddb/db_command.c b/sys/ddb/db_command.c index 0ddbf5f49629..02f79ca949c2 100644 --- a/sys/ddb/db_command.c +++ b/sys/ddb/db_command.c @@ -745,7 +745,7 @@ out: static void db_reset(db_expr_t addr, bool have_addr, db_expr_t count __unused, - char *modif __unused) + char *modif) { int delay, loop; @@ -770,6 +770,18 @@ db_reset(db_expr_t addr, bool have_addr, db_expr_t count __unused, } } + /* + * Conditionally try the standard reboot path, so any registered + * shutdown/reset handlers have a chance to run first. Some platforms + * may not support the machine-dependent mechanism used by cpu_reset() + * and rely on some other non-standard mechanism to perform the reset. + * For example, the BCM2835 watchdog driver or gpio-poweroff driver. + */ + if (modif[0] != 's') { + kern_reboot(RB_NOSYNC); + /* NOTREACHED */ + } + cpu_reset(); } |
