mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 12:17:12 +09:00
PM: Dump suspend thread stack on dpm suspend timeout
When a driver takes more than 3 seconds to suspend, dump the suspend thread stack since BUG() might only dump the idle thread stack. Change-Id: If854db355fdcf3b773ea20b1b5e031def6d4b114 Signed-off-by: Benoit Goby <benoit@android.com>
This commit is contained in:
@@ -52,6 +52,10 @@ static pm_message_t pm_transition;
|
||||
|
||||
static void dpm_drv_timeout(unsigned long data);
|
||||
static DEFINE_TIMER(dpm_drv_wd, dpm_drv_timeout, 0, 0);
|
||||
static struct {
|
||||
struct device *dev;
|
||||
struct task_struct *tsk;
|
||||
} dpm_drv_wd_data;
|
||||
|
||||
static int async_error;
|
||||
|
||||
@@ -588,10 +592,15 @@ static bool is_async(struct device *dev)
|
||||
*/
|
||||
static void dpm_drv_timeout(unsigned long data)
|
||||
{
|
||||
struct device *dev = (struct device *) data;
|
||||
struct device *dev = dpm_drv_wd_data.dev;
|
||||
struct task_struct *tsk = dpm_drv_wd_data.tsk;
|
||||
|
||||
printk(KERN_EMERG "**** DPM device timeout: %s (%s)\n", dev_name(dev),
|
||||
(dev->driver ? dev->driver->name : "no driver"));
|
||||
|
||||
printk(KERN_EMERG "dpm suspend stack:\n");
|
||||
show_stack(tsk, NULL);
|
||||
|
||||
BUG();
|
||||
}
|
||||
|
||||
@@ -602,7 +611,9 @@ static void dpm_drv_timeout(unsigned long data)
|
||||
*/
|
||||
static void dpm_drv_wdset(struct device *dev)
|
||||
{
|
||||
dpm_drv_wd.data = (unsigned long) dev;
|
||||
dpm_drv_wd_data.dev = dev;
|
||||
dpm_drv_wd_data.tsk = get_current();
|
||||
dpm_drv_wd.data = (unsigned long) &dpm_drv_wd_data;
|
||||
mod_timer(&dpm_drv_wd, jiffies + (HZ * 3));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user