Commit 9cb1c982 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

PM: sleep: Relocate two device PM core functions



Move is_async() and dpm_async_fn() in the PM core to a more suitable
place.

No functional impact.

Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: default avatarStanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
parent 86686b8f
Loading
Loading
Loading
Loading
+29 −29
Original line number Diff line number Diff line
@@ -578,6 +578,35 @@ bool dev_pm_skip_resume(struct device *dev)
	return !dev->power.must_resume;
}

static bool is_async(struct device *dev)
{
	return dev->power.async_suspend && pm_async_enabled
		&& !pm_trace_is_enabled();
}

static bool dpm_async_fn(struct device *dev, async_func_t func)
{
	reinit_completion(&dev->power.completion);

	if (is_async(dev)) {
		dev->power.async_in_progress = true;

		get_device(dev);

		if (async_schedule_dev_nocall(func, dev))
			return true;

		put_device(dev);
	}
	/*
	 * Because async_schedule_dev_nocall() above has returned false or it
	 * has not been called at all, func() is not running and it is safe to
	 * update the async_in_progress flag without extra synchronization.
	 */
	dev->power.async_in_progress = false;
	return false;
}

/**
 * device_resume_noirq - Execute a "noirq resume" callback for given device.
 * @dev: Device to handle.
@@ -664,35 +693,6 @@ static void device_resume_noirq(struct device *dev, pm_message_t state, bool asy
	}
}

static bool is_async(struct device *dev)
{
	return dev->power.async_suspend && pm_async_enabled
		&& !pm_trace_is_enabled();
}

static bool dpm_async_fn(struct device *dev, async_func_t func)
{
	reinit_completion(&dev->power.completion);

	if (is_async(dev)) {
		dev->power.async_in_progress = true;

		get_device(dev);

		if (async_schedule_dev_nocall(func, dev))
			return true;

		put_device(dev);
	}
	/*
	 * Because async_schedule_dev_nocall() above has returned false or it
	 * has not been called at all, func() is not running and it is safe to
	 * update the async_in_progress flag without extra synchronization.
	 */
	dev->power.async_in_progress = false;
	return false;
}

static void async_resume_noirq(void *data, async_cookie_t cookie)
{
	struct device *dev = data;