On Fri, May 10, 2013 at 2:28 PM, Zoran Markovic
<zoran.markovic@xxxxxxxxxx> wrote:
+#ifdef CONFIG_DPM_WDThe panic here is not very useful, it's going to print the stack of
+/**
+ * dpm_wd_action - recovery from suspend/resume watchdog timeout
+ * @wd: Watchdog. Must be allocated on the stack.
+ */
+#if defined(CONFIG_DPM_WD_ACTION_STACKTRACE)
+static inline void dpm_wd_action(struct dpm_watchdog *wd)
+{
+ show_stack(wd->tsk, NULL);
+}
+#elif defined(CONFIG_DPM_WD_ACTION_PANIC)
+static inline void dpm_wd_action(struct dpm_watchdog *wd)
+{
+ panic("%s: unrecoverable failure\n", dev_name(wd->dev));
the task that was running when the timer fired which is likely to be
the idle task if the suspend task is deadlocked. This should call
show_stack and panic. If you take out the log action, then all this
can stay inline with the handler and be:
dev_emerg(wd->dev, "**** DPM device timeout ****\n");
show_stack(wd->tsk, NULL);
#ifdef CONFIG_DPM_WD_ACTION_PANIC
panic("%s: unrecoverable failure\n", dev_name(wd->dev));
#endif