Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 256956
b: refs/heads/master
c: eea3fc0
h: refs/heads/master
v: v3
  • Loading branch information
Rafael J. Wysocki committed Jul 6, 2011
1 parent f476731 commit 140c256
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 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: 632e270e01d8a1ee9e8ea56c83028727f17b1d17
refs/heads/master: eea3fc0357eb89d0b2d1af37bdfb83eb4076a542
18 changes: 17 additions & 1 deletion trunk/drivers/pci/pci-driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include <linux/sched.h>
#include <linux/cpu.h>
#include <linux/pm_runtime.h>
#include <linux/suspend.h>
#include "pci.h"

struct pci_dynid {
Expand Down Expand Up @@ -615,6 +616,21 @@ 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 @@ -624,7 +640,7 @@ static int pci_pm_prepare(struct device *dev)
* system from the sleep state, we'll have to prevent it from signaling
* wake-up.
*/
pm_runtime_get_sync(dev);
pm_runtime_resume(dev);

if (drv && drv->pm && drv->pm->prepare)
error = drv->pm->prepare(dev);
Expand Down

0 comments on commit 140c256

Please sign in to comment.