The purpose of this patch is to provide a -p option to generate a stack trace of the panic task, if available. It might be useful if the current context is changed with the 'set' command. This option is not supported under a live system or live dump. Signed-off-by: Aaron Tomlin <atomlin@xxxxxxxxxx> --- help.c | 4 +++- kernel.c | 19 +++++++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/help.c b/help.c index c0c750f..581e616 100644 --- a/help.c +++ b/help.c @@ -1789,13 +1789,15 @@ NULL char *help_bt[] = { "bt", "backtrace", -"[-a|-c cpu(s)|-g|-r|-t|-T|-l|-e|-E|-f|-F|-o|-O|-v] [-R ref] [-s [-x|d]]" +"[-a|-c cpu(s)|-g|-r|-t|-T|-l|-e|-E|-f|-F|-o|-O|-v|-p] [-R ref] [-s [-x|d]]" "\n [-I ip] [-S sp] [pid | task]", " Display a kernel stack backtrace. If no arguments are given, the stack", " trace of the current context will be displayed.\n", " -a displays the stack traces of the active task on each CPU.", " (only applicable to crash dumps)", " -A same as -a, but also displays vector registers (S390X only).", +" -p display the stack trace of the panic task only.", +" (only applicable to crash dumps)", " -c cpu display the stack trace of the active task on one or more CPUs,", " which can be specified using the format \"3\", \"1,8,9\", \"1-23\",", " or \"1,8,9-14\". (only applicable to crash dumps)", diff --git a/kernel.c b/kernel.c index f5960fc..e1f0b7e 100644 --- a/kernel.c +++ b/kernel.c @@ -2402,7 +2402,7 @@ cmd_bt(void) int i, c; ulong value, *cpus; struct task_context *tc; - int subsequent, active; + int subsequent, active, panic; struct stack_hook hook; struct bt_info bt_info, bt_setup, *bt; struct reference reference; @@ -2412,7 +2412,7 @@ cmd_bt(void) tc = NULL; cpus = NULL; - subsequent = active = 0; + subsequent = active = panic = 0; hook.eip = hook.esp = 0; refptr = 0; bt = &bt_info; @@ -2421,7 +2421,7 @@ cmd_bt(void) if (kt->flags & USE_OPT_BT) bt->flags |= BT_OPT_BACK_TRACE; - while ((c = getopt(argcnt, args, "D:fFI:S:c:aAloreEgstTdxR:Ov")) != EOF) { + while ((c = getopt(argcnt, args, "D:fFI:S:c:aAloreEgstTdxR:Ovp")) != EOF) { switch (c) { case 'f': @@ -2609,6 +2609,14 @@ cmd_bt(void) option_not_supported(c); check_stack_overflow(); return; + case 'p': + if (LIVE()) + error(FATAL, + "-p option not supported on a live system or live dump\n"); + if (!tt->panic_task) + error(FATAL, "no panic task found!\n"); + panic++; + break; default: argerrs++; @@ -2748,7 +2756,10 @@ cmd_bt(void) tgid = task_tgid(CURRENT_TASK()); DO_THREAD_GROUP_BACKTRACE(); } else { - tc = CURRENT_CONTEXT(); + if (panic) + tc = task_to_context(tt->panic_task); + else + tc = CURRENT_CONTEXT(); DO_TASK_BACKTRACE(); } return; -- 2.20.1 -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility