|
@@ -608,6 +608,22 @@ static void power_down(void)
|
|
|
{
|
|
|
#ifdef CONFIG_SUSPEND
|
|
|
int error;
|
|
|
+
|
|
|
+ if (hibernation_mode == HIBERNATION_SUSPEND) {
|
|
|
+ error = suspend_devices_and_enter(PM_SUSPEND_MEM);
|
|
|
+ if (error) {
|
|
|
+ hibernation_mode = hibernation_ops ?
|
|
|
+ HIBERNATION_PLATFORM :
|
|
|
+ HIBERNATION_SHUTDOWN;
|
|
|
+ } else {
|
|
|
+ /* Restore swap signature. */
|
|
|
+ error = swsusp_unmark();
|
|
|
+ if (error)
|
|
|
+ pr_err("PM: Swap will be unusable! Try swapon -a.\n");
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
#endif
|
|
|
|
|
|
switch (hibernation_mode) {
|
|
@@ -620,25 +636,6 @@ static void power_down(void)
|
|
|
if (pm_power_off)
|
|
|
kernel_power_off();
|
|
|
break;
|
|
|
-#ifdef CONFIG_SUSPEND
|
|
|
- case HIBERNATION_SUSPEND:
|
|
|
- error = suspend_devices_and_enter(PM_SUSPEND_MEM);
|
|
|
- if (error) {
|
|
|
- if (hibernation_ops)
|
|
|
- hibernation_mode = HIBERNATION_PLATFORM;
|
|
|
- else
|
|
|
- hibernation_mode = HIBERNATION_SHUTDOWN;
|
|
|
- power_down();
|
|
|
- }
|
|
|
- /*
|
|
|
- * Restore swap signature.
|
|
|
- */
|
|
|
- error = swsusp_unmark();
|
|
|
- if (error)
|
|
|
- printk(KERN_ERR "PM: Swap will be unusable! "
|
|
|
- "Try swapon -a.\n");
|
|
|
- return;
|
|
|
-#endif
|
|
|
}
|
|
|
kernel_halt();
|
|
|
/*
|