diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
index 7062798bf45284b26242c880dd5dc70c7f782abe..eb7696200a74ecee0b04d89b098a2b6516eda54f 100644
--- a/kernel/power/suspend.c
+++ b/kernel/power/suspend.c
@@ -252,8 +252,14 @@ static bool suspend_again(bool *drivers_resumed)
if (suspend_again_consensus() &&
!freeze_kernel_threads()) {
clear_wakeup_reasons();
- dpm_suspend_start(PMSG_SUSPEND);
*drivers_resumed = false;
+ if (dpm_suspend_start(PMSG_SUSPEND)) {
+ printk(KERN_ERR "PM: Some devices failed to suspend\n");
+ log_suspend_abort_reason("Some devices failed to suspend");
+ if (suspend_ops->recover)
+ suspend_ops->recover();
+ return false;
+ }
return true;
}