Commit 52d136cc authored by Rafael J. Wysocki's avatar Rafael J. Wysocki

PM / Sleep: Look for wakeup events in later stages of device suspend

Currently, the device suspend code in drivers/base/power/main.c
only checks if there have been any wakeup events, and therefore the
ongoing system transition to a sleep state should be aborted, during
the first (i.e. "suspend") device suspend phase.  However, wakeup
events may be reported later as well, so it's reasonable to look for
them in the in the subsequent (i.e. "late suspend" and "suspend
noirq") phases.
Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
Acked-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 5a21d489
...@@ -889,6 +889,11 @@ static int dpm_suspend_noirq(pm_message_t state) ...@@ -889,6 +889,11 @@ static int dpm_suspend_noirq(pm_message_t state)
if (!list_empty(&dev->power.entry)) if (!list_empty(&dev->power.entry))
list_move(&dev->power.entry, &dpm_noirq_list); list_move(&dev->power.entry, &dpm_noirq_list);
put_device(dev); put_device(dev);
if (pm_wakeup_pending()) {
error = -EBUSY;
break;
}
} }
mutex_unlock(&dpm_list_mtx); mutex_unlock(&dpm_list_mtx);
if (error) if (error)
...@@ -962,6 +967,11 @@ static int dpm_suspend_late(pm_message_t state) ...@@ -962,6 +967,11 @@ static int dpm_suspend_late(pm_message_t state)
if (!list_empty(&dev->power.entry)) if (!list_empty(&dev->power.entry))
list_move(&dev->power.entry, &dpm_late_early_list); list_move(&dev->power.entry, &dpm_late_early_list);
put_device(dev); put_device(dev);
if (pm_wakeup_pending()) {
error = -EBUSY;
break;
}
} }
mutex_unlock(&dpm_list_mtx); mutex_unlock(&dpm_list_mtx);
if (error) if (error)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment