There are just too many kinds of panic types are categorized under the same Oops: xxxx, makes this field really ambiguous and not so useful PANIC: "Oops: 0000 [#1] SMP " (check log for details) this patch separated 3 kinds of panicmsg out, as the most happening cases among the machines managed by me; the match string are copied from kernel source code exactly, after applied, I got panicmsg like: include/linux/kernel.h:#define HW_ERR panicmsg: "[Hardware Error]: CPU 7: Machine Check Exception: 5 Bank 11: f200003f000100b2" drivers/char/sysrq.c:__handle_sysrq panicmsg: "SysRq : Trigger a crash" arch/x86/kernel/traps.c:do_general_protection panicmsg: "general protection fault: 8800 [#1] SMP" arch/x86/mm/fault.c:show_fault_oops panicmsg: "BUG: unable to handle kernel paging request at 00001248a68eb328" We need to move the SysRq matching lines to before matching "Oops", because SysRq lines usually also has the Oops, need to take precedence for SysRq. Signed-off-by: Derek Che <drc@xxxxxxxxxxxxx> --- task.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/task.c b/task.c index 4214d7f..1530e7b 100644 --- a/task.c +++ b/task.c @@ -5509,19 +5509,31 @@ get_panicmsg(char *buf) } rewind(pc->tmpfile); while (!msg_found && fgets(buf, BUFSIZE, pc->tmpfile)) { - if (strstr(buf, "Oops: ") || - strstr(buf, "kernel BUG at")) - msg_found = TRUE; + if (strstr(buf, "[Hardware Error]: ")) + msg_found = TRUE; + } + rewind(pc->tmpfile); + while (!msg_found && fgets(buf, BUFSIZE, pc->tmpfile)) { + if (strstr(buf, "general protection fault")) + msg_found = TRUE; } rewind(pc->tmpfile); while (!msg_found && fgets(buf, BUFSIZE, pc->tmpfile)) { if (strstr(buf, "SysRq : Netdump") || strstr(buf, "SysRq : Trigger a crashdump") || - strstr(buf, "SysRq : Crash")) { + strstr(buf, "SysRq : Crash") || + strstr(buf, "SysRq : Trigger a crash")) { pc->flags |= SYSRQ; msg_found = TRUE; } } + rewind(pc->tmpfile); + while (!msg_found && fgets(buf, BUFSIZE, pc->tmpfile)) { + if (strstr(buf, "Oops: ") || + strstr(buf, "kernel BUG at") || + strstr(buf, "BUG: unable to handle kernel ")) + msg_found = TRUE; + } rewind(pc->tmpfile); while (!msg_found && fgets(buf, BUFSIZE, pc->tmpfile)) { if (strstr(buf, "sysrq") && -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility