mirror of
https://github.com/adulau/aha.git
synced 2024-12-27 19:26:25 +00:00
PM / Runtime: Use deferred_resume flag in pm_request_resume
This patch (as1307) adds a small optimization to __pm_request_resume(). If the device is currently being suspended, there's no need to queue a work routine to resume it. Setting the deferred_resume flag will suffice. (There's also a minor improvement to the function's code layout: An unnecessary "else" is removed.) Also, the patch clarifies the usage of the deferred_resume flag. It is meaningful only while a suspend is in progress, so it should be cleared just before a suspend starts, not just after one ends. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
This commit is contained in:
parent
7b199ca202
commit
63c9480170
1 changed files with 7 additions and 4 deletions
|
@ -185,6 +185,7 @@ int __pm_runtime_suspend(struct device *dev, bool from_wq)
|
|||
}
|
||||
|
||||
dev->power.runtime_status = RPM_SUSPENDING;
|
||||
dev->power.deferred_resume = false;
|
||||
|
||||
if (dev->bus && dev->bus->pm && dev->bus->pm->runtime_suspend) {
|
||||
spin_unlock_irq(&dev->power.lock);
|
||||
|
@ -200,7 +201,6 @@ int __pm_runtime_suspend(struct device *dev, bool from_wq)
|
|||
if (retval) {
|
||||
dev->power.runtime_status = RPM_ACTIVE;
|
||||
pm_runtime_cancel_pending(dev);
|
||||
dev->power.deferred_resume = false;
|
||||
|
||||
if (retval == -EAGAIN || retval == -EBUSY) {
|
||||
notify = true;
|
||||
|
@ -217,7 +217,6 @@ int __pm_runtime_suspend(struct device *dev, bool from_wq)
|
|||
wake_up_all(&dev->power.wait_queue);
|
||||
|
||||
if (dev->power.deferred_resume) {
|
||||
dev->power.deferred_resume = false;
|
||||
__pm_runtime_resume(dev, false);
|
||||
retval = -EAGAIN;
|
||||
goto out;
|
||||
|
@ -659,13 +658,17 @@ static int __pm_request_resume(struct device *dev)
|
|||
|
||||
pm_runtime_deactivate_timer(dev);
|
||||
|
||||
if (dev->power.runtime_status == RPM_SUSPENDING) {
|
||||
dev->power.deferred_resume = true;
|
||||
return retval;
|
||||
}
|
||||
if (dev->power.request_pending) {
|
||||
/* If non-resume request is pending, we can overtake it. */
|
||||
dev->power.request = retval ? RPM_REQ_NONE : RPM_REQ_RESUME;
|
||||
return retval;
|
||||
} else if (retval) {
|
||||
return retval;
|
||||
}
|
||||
if (retval)
|
||||
return retval;
|
||||
|
||||
dev->power.request = RPM_REQ_RESUME;
|
||||
dev->power.request_pending = true;
|
||||
|
|
Loading…
Reference in a new issue