Patchwork powerpc: Add last sysfs file and dump of ftrace buffer to oops printout

login
register
mail settings
Submitter Anton Blanchard
Date Feb. 8, 2010, 12:44 a.m.
Message ID <20100208004416.GK32246@kryten>
Download mbox | patch
Permalink /patch/44751/
State Accepted, archived
Commit 66fcb1059deeae072c1bf1536a8e2613028bce3e
Delegated to: Benjamin Herrenschmidt
Headers show

Comments

Anton Blanchard - Feb. 8, 2010, 12:44 a.m.
Add printout of last accessed sysfs file, added to x86 in
ae87221d3ce49d9de1e43756da834fd0bf05a2ad (sysfs: crash debugging)

Also add the notify_die hook that allows us to print out the ftrace
buffer on oops. This is useful in conjunction with ftrace function_graph:


Oops: Kernel access of bad area, sig: 11 [#1]
SMP NR_CPUS=128 NUMA pSeries
last sysfs file: /sys/class/net/tunl0/type
Dumping ftrace buffer:

...

  0)               |                .sysrq_handle_crash() {
  0)   0.476 us    |                  .hash_page();
  0)   0.488 us    |                  .xmon_fault_handler();
  0)               |                  .bad_page_fault() {
  0)               |                    .search_exception_tables() {
  0)   0.590 us    |                      .search_module_extables();
  0)   2.546 us    |                    }
  0)               |                    .printk() {
  0)               |                      .vprintk() {
  0)   0.488 us    |                        ._raw_spin_lock();
  0)   0.572 us    |                        .emit_log_char();


Showing the function graph of a sysrq-c crash.

Signed-off-by: Anton Blanchard <anton@samba.org>
---

Patch

Index: powerpc.git/arch/powerpc/kernel/traps.c
===================================================================
--- powerpc.git.orig/arch/powerpc/kernel/traps.c	2010-02-08 11:15:51.463071942 +1100
+++ powerpc.git/arch/powerpc/kernel/traps.c	2010-02-08 11:17:29.914321833 +1100
@@ -146,6 +146,11 @@  int die(const char *str, struct pt_regs 
 #endif
 		printk("%s\n", ppc_md.name ? ppc_md.name : "");
 
+		sysfs_printk_last_file();
+		if (notify_die(DIE_OOPS, str, regs, err, 255,
+			       SIGSEGV) == NOTIFY_STOP)
+			return 1;
+
 		print_modules();
 		show_regs(regs);
 	} else {