当pm核心去调用驱动的suspend/resume的回调函数时,它会设置一个定时器来监视回调函数的执行,如果回调长时间没有执行完毕的话(当前定时为12S), 定时器函数会调用BUG()让系统挂掉重启,所以在写pm相关的回调函数时,要确保不能长时间阻塞,否则后果你是知道的, 可以看下dpm_wd_handler这个函数
/* kernel/drivers/base/power/main.c **/
static void dpm_wd_handler(unsigned long data)
{
struct dpm_watchdog *wd = (void *)data;
struct device *dev - wd->dev;
struct task_struct *tsk = wd->tsk;
dev_emerg(dev, "***DPM device timeout ***\n");
show_stack(tsk, NULL);
BUG();
}