[PATCH] add reg and stack dump to booke WD handler
Kumar Gala
galak at kernel.crashing.org
Sat Apr 14 06:11:51 EST 2007
On Apr 13, 2007, at 3:06 PM, Dave Jiang wrote:
> 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.
Forgot the signed-off-by again (git-commit -s)
> --
>
> Ok here's try 2. Modified the watchdog driver instead per Sergei's
> suggestion.
I'm against having a WatchdogHandler in booke_wdt.c. The idea behind
the weak symbol in traps.c is to allow platform code to override the
behavior. I'm ok if we put the spew in the generic case.
Also, how are you testing this?
- k
>
> 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