[Crash-utility] [PATCH V2] take Hardware Error & kernel pointer bug as separate panicmsg

drc at yahoo-inc.com drc at yahoo-inc.com
Tue Feb 3 17:04:23 UTC 2015


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 at yahoo-inc.com>
---
 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") && 




More information about the Crash-utility mailing list