Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b95ed0bd authored by Lianwei Wang's avatar Lianwei Wang Committed by Dmitry Shmidt
Browse files

Revert "drivers: power: Add watchdog timer to catch drivers which lockup during suspend."



This reverts commit 4f0d2860.

Commit 70fea60d ("PM / Sleep: Detect device suspend/resume lockup...")
add a suspend/resume watchdog timer to catch the lockup. Let's revert the
duplicated one.

Signed-off-by: default avatarLianwei Wang <lianwei.wang@gmail.com>
parent 619a7b7b
Loading
Loading
Loading
Loading
+0 −43
Original line number Diff line number Diff line
@@ -59,12 +59,6 @@ struct suspend_stats suspend_stats;
static DEFINE_MUTEX(dpm_list_mtx);
static pm_message_t pm_transition;

static void dpm_drv_timeout(unsigned long data);
struct dpm_drv_wd_data {
	struct device *dev;
	struct task_struct *tsk;
};

static int async_error;

static char *pm_verb(int event)
@@ -834,30 +828,6 @@ static void async_resume(void *data, async_cookie_t cookie)
	put_device(dev);
}

/**
 *	dpm_drv_timeout - Driver suspend / resume watchdog handler
 *	@data: struct device which timed out
 *
 * 	Called when a driver has timed out suspending or resuming.
 * 	There's not much we can do here to recover so
 * 	BUG() out for a crash-dump
 *
 */
static void dpm_drv_timeout(unsigned long data)
{
	struct dpm_drv_wd_data *wd_data = (void *)data;
	struct device *dev = wd_data->dev;
	struct task_struct *tsk = 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();
}

/**
 * dpm_resume - Execute "resume" callbacks for non-sysdev devices.
 * @state: PM transition of the system being carried out.
@@ -1367,8 +1337,6 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async)
	pm_callback_t callback = NULL;
	char *info = NULL;
	int error = 0;
	struct timer_list timer;
	struct dpm_drv_wd_data data;
	char suspend_abort[MAX_SUSPEND_ABORT_LEN];
	DECLARE_DPM_WATCHDOG_ON_STACK(wd);

@@ -1397,14 +1365,6 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async)
	if (dev->power.syscore)
		goto Complete;

	data.dev = dev;
	data.tsk = get_current();
	init_timer_on_stack(&timer);
	timer.expires = jiffies + HZ * 12;
	timer.function = dpm_drv_timeout;
	timer.data = (unsigned long)&data;
	add_timer(&timer);

	if (dev->power.direct_complete) {
		if (pm_runtime_status_suspended(dev)) {
			pm_runtime_disable(dev);
@@ -1484,9 +1444,6 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async)
	device_unlock(dev);
	dpm_watchdog_clear(&wd);

	del_timer_sync(&timer);
	destroy_timer_on_stack(&timer);

 Complete:
	complete_all(&dev->power.completion);
	if (error)