Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 328739
b: refs/heads/master
c: 88d2613
h: refs/heads/master
i:
  328737: a51cec8
  328735: aa8da16
v: v3
  • Loading branch information
Alan Stern authored and Rafael J. Wysocki committed Sep 19, 2012
1 parent 3387908 commit d26a1b4
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 29 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 997a031107ec962967ce36db9bc500f1fad491c1
refs/heads/master: 88d26136a256576e444db312179e17af6dd0ea87
29 changes: 18 additions & 11 deletions trunk/drivers/base/power/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -565,7 +565,6 @@ static int device_resume(struct device *dev, pm_message_t state, bool async)
pm_callback_t callback = NULL;
char *info = NULL;
int error = 0;
bool put = false;

TRACE_DEVICE(dev);
TRACE_RESUME(0);
Expand All @@ -583,7 +582,6 @@ static int device_resume(struct device *dev, pm_message_t state, bool async)
goto Unlock;

pm_runtime_enable(dev);
put = true;

if (dev->pm_domain) {
info = "power domain ";
Expand Down Expand Up @@ -636,9 +634,6 @@ static int device_resume(struct device *dev, pm_message_t state, bool async)

TRACE_RESUME(error);

if (put)
pm_runtime_put_sync(dev);

return error;
}

Expand Down Expand Up @@ -749,6 +744,8 @@ static void device_complete(struct device *dev, pm_message_t state)
}

device_unlock(dev);

pm_runtime_put_sync(dev);
}

/**
Expand Down Expand Up @@ -1043,12 +1040,16 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async)
if (async_error)
goto Complete;

pm_runtime_get_noresume(dev);
/*
* If a device configured to wake up the system from sleep states
* has been suspended at run time and there's a resume request pending
* for it, this is equivalent to the device signaling wakeup, so the
* system suspend operation should be aborted.
*/
if (pm_runtime_barrier(dev) && device_may_wakeup(dev))
pm_wakeup_event(dev, 0);

if (pm_wakeup_pending()) {
pm_runtime_put_sync(dev);
async_error = -EBUSY;
goto Complete;
}
Expand Down Expand Up @@ -1111,12 +1112,10 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async)
Complete:
complete_all(&dev->power.completion);

if (error) {
pm_runtime_put_sync(dev);
if (error)
async_error = error;
} else if (dev->power.is_suspended) {
else if (dev->power.is_suspended)
__pm_runtime_disable(dev, false);
}

return error;
}
Expand Down Expand Up @@ -1209,6 +1208,14 @@ static int device_prepare(struct device *dev, pm_message_t state)
char *info = NULL;
int error = 0;

/*
* If a device's parent goes into runtime suspend at the wrong time,
* it won't be possible to resume the device. To prevent this we
* block runtime suspend here, during the prepare phase, and allow
* it again during the complete phase.
*/
pm_runtime_get_noresume(dev);

device_lock(dev);

dev->power.wakeup_path = device_may_wakeup(dev);
Expand Down
17 changes: 0 additions & 17 deletions trunk/drivers/pci/pci-driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -623,21 +623,6 @@ static int pci_pm_prepare(struct device *dev)
struct device_driver *drv = dev->driver;
int error = 0;

/*
* If a PCI device configured to wake up the system from sleep states
* has been suspended at run time and there's a resume request pending
* for it, this is equivalent to the device signaling wakeup, so the
* system suspend operation should be aborted.
*/
pm_runtime_get_noresume(dev);
if (pm_runtime_barrier(dev) && device_may_wakeup(dev))
pm_wakeup_event(dev, 0);

if (pm_wakeup_pending()) {
pm_runtime_put_sync(dev);
return -EBUSY;
}

/*
* PCI devices suspended at run time need to be resumed at this
* point, because in general it is necessary to reconfigure them for
Expand All @@ -661,8 +646,6 @@ static void pci_pm_complete(struct device *dev)

if (drv && drv->pm && drv->pm->complete)
drv->pm->complete(dev);

pm_runtime_put_sync(dev);
}

#else /* !CONFIG_PM_SLEEP */
Expand Down

0 comments on commit d26a1b4

Please sign in to comment.