diff options
| -rw-r--r-- | drivers/pci/pci-driver.c | 6 | ||||
| -rw-r--r-- | kernel/suspend.c | 4 |
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) { |
