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;
 	}