Commit 0f4bd46ec252887f44f1f065b41867cac8f70dfb

Authored by KOSAKI Motohiro
Committed by David Woodhouse
1 parent 60d9aa758c

kmsg_dump: Dump on crash_kexec as well

crash_kexec gets called before kmsg_dump(KMSG_DUMP_OOPS) if
panic_on_oops is set, so the kernel log buffer is not stored
for this case.

This patch adds a KMSG_DUMP_KEXEC dump type which gets called
when crash_kexec() is invoked. To avoid getting double dumps,
the old KMSG_DUMP_PANIC is moved below crash_kexec(). The
mtdoops driver is modified to handle KMSG_DUMP_KEXEC in the
same way as a panic.

Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Acked-by: Simon Kagstrom <simon.kagstrom@netinsight.net>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>

Showing 5 changed files with 9 additions and 2 deletions Side-by-side Diff

drivers/mtd/mtdoops.c
... ... @@ -322,7 +322,7 @@
322 322 memcpy(dst + l1_cpy, s2 + s2_start, l2_cpy);
323 323  
324 324 /* Panics must be written immediately */
325   - if (reason == KMSG_DUMP_PANIC) {
  325 + if (reason != KMSG_DUMP_OOPS) {
326 326 if (!cxt->mtd->panic_write)
327 327 printk(KERN_ERR "mtdoops: Cannot write from panic without panic_write\n");
328 328 else
include/linux/kmsg_dump.h
... ... @@ -17,6 +17,7 @@
17 17 enum kmsg_dump_reason {
18 18 KMSG_DUMP_OOPS,
19 19 KMSG_DUMP_PANIC,
  20 + KMSG_DUMP_KEXEC,
20 21 };
21 22  
22 23 /**
... ... @@ -32,6 +32,7 @@
32 32 #include <linux/console.h>
33 33 #include <linux/vmalloc.h>
34 34 #include <linux/swap.h>
  35 +#include <linux/kmsg_dump.h>
35 36  
36 37 #include <asm/page.h>
37 38 #include <asm/uaccess.h>
... ... @@ -1074,6 +1075,9 @@
1074 1075 if (mutex_trylock(&kexec_mutex)) {
1075 1076 if (kexec_crash_image) {
1076 1077 struct pt_regs fixed_regs;
  1078 +
  1079 + kmsg_dump(KMSG_DUMP_KEXEC);
  1080 +
1077 1081 crash_setup_regs(&fixed_regs, regs);
1078 1082 crash_save_vmcoreinfo();
1079 1083 machine_crash_shutdown(&fixed_regs);
... ... @@ -75,13 +75,14 @@
75 75 dump_stack();
76 76 #endif
77 77  
78   - kmsg_dump(KMSG_DUMP_PANIC);
79 78 /*
80 79 * If we have crashed and we have a crash kernel loaded let it handle
81 80 * everything else.
82 81 * Do we want to call this before we try to display a message?
83 82 */
84 83 crash_kexec(NULL);
  84 +
  85 + kmsg_dump(KMSG_DUMP_PANIC);
85 86  
86 87 /*
87 88 * Note smp_send_stop is the usual smp shutdown function, which
... ... @@ -1467,6 +1467,7 @@
1467 1467 static const char const *kmsg_reasons[] = {
1468 1468 [KMSG_DUMP_OOPS] = "oops",
1469 1469 [KMSG_DUMP_PANIC] = "panic",
  1470 + [KMSG_DUMP_KEXEC] = "kexec",
1470 1471 };
1471 1472  
1472 1473 static const char *kmsg_to_str(enum kmsg_dump_reason reason)