mirror of
https://github.com/torvalds/linux.git
synced 2026-05-22 06:01:53 +02:00
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: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Reviewed-by: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
This commit is contained in:
parent
86686b8f7a
commit
9cb1c9820f
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user