[PATCH] add reg and stack dump to booke WD handler
Dave Jiang
djiang at mvista.com
Sat Apr 14 06:06:59 EST 2007
Have the booke watchdog dump some useful information when triggered. Hopefully
that'll give the user some hint of what happened rather than just a mysterious
reboot.
--
Ok here's try 2. Modified the watchdog driver instead per Sergei's suggestion.
drivers/char/watchdog/booke_wdt.c | 37 +++++++++++++++++++++++++++++++++++++
1 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/drivers/char/watchdog/booke_wdt.c b/drivers/char/watchdog/booke_wdt.c
index 0e23f29..90e5301 100644
--- a/drivers/char/watchdog/booke_wdt.c
+++ b/drivers/char/watchdog/booke_wdt.c
@@ -23,6 +23,7 @@
#include <asm/reg_booke.h>
#include <asm/uaccess.h>
#include <asm/system.h>
+#include <asm/machdep.h>
/* If the kernel parameter wdt_enable=1, the watchdog will be enabled at boot.
* Also, the wdt_period sets the watchdog timer period timeout.
@@ -47,6 +48,42 @@ u32 booke_wdt_period = WDT_PERIOD_DEFAULT;
#define WDTP(x) (TCR_WP(x))
#endif
+void WatchdogHandler(struct pt_regs *regs)
+{
+ unsigned long flags;
+
+ mtspr(SPRN_TCR, mfspr(SPRN_TCR) & ~TCR_WIE);
+ oops_enter();
+
+ console_verbose();
+ bust_spinlocks(1);
+ local_save_flags(flags);
+
+#ifdef CONFIG_PREEMPT
+ printk("PREEMPT ");
+#endif
+#ifdef CONFIG_SMP
+ printk("SMP NR_CPUS=%d ", NR_CPUS);
+#endif
+#ifdef CONFIG_DEBUG_PAGEALLOC
+ printk("DEBUG_PAGEALLOC ");
+#endif
+#ifdef CONFIG_NUMA
+ printk("NUMA ");
+#endif
+ printk("%s\n", ppc_md.name ? ppc_md.name : "");
+
+ print_modules();
+ show_regs(regs);
+
+ bust_spinlocks(0);
+
+ printk(KERN_EMERG "Waiting for hardware watchdog reset...\n");
+ /* spin until hardware reset */
+ while(1)
+ cpu_relax();
+}
+
/*
* booke_wdt_ping:
*/
More information about the Linuxppc-dev
mailing list