summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/pci/pci-driver.c6
-rw-r--r--kernel/suspend.c4
2 files changed, 7 insertions, 3 deletions
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index 3ad23175d6a5..4055c7580993 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -90,7 +90,11 @@ static int pci_device_resume(struct device * dev, u32 level)
struct pci_dev * pci_dev = to_pci_dev(dev);
if (pci_dev->driver) {
- if (level == RESUME_POWER_ON && pci_dev->driver->resume)
+ /* We may not call PCI drivers resume at
+ RESUME_POWER_ON because interrupts are not yet
+ working at that point. Calling resume at
+ RESUME_RESTORE_STATE seems like solution. */
+ if (level == RESUME_RESTORE_STATE && pci_dev->driver->resume)
pci_dev->driver->resume(pci_dev);
}
return 0;
diff --git a/kernel/suspend.c b/kernel/suspend.c
index f11214bb9a67..67f26e26d594 100644
--- a/kernel/suspend.c
+++ b/kernel/suspend.c
@@ -619,8 +619,8 @@ static void free_some_memory(void)
/* Make disk drivers accept operations, again */
static void drivers_unsuspend(void)
{
- device_resume(RESUME_ENABLE);
device_resume(RESUME_RESTORE_STATE);
+ device_resume(RESUME_ENABLE);
}
/* Called from process context */
@@ -647,8 +647,8 @@ static int drivers_suspend(void)
static void drivers_resume(int flags)
{
if (flags & RESUME_PHASE1) {
- device_resume(RESUME_ENABLE);
device_resume(RESUME_RESTORE_STATE);
+ device_resume(RESUME_ENABLE);
}
if (flags & RESUME_PHASE2) {
if(pm_suspend_state) {