linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / kernel / power / disk.c
index 7c7b9b6..0b43847 100644 (file)
 #include <linux/fs.h>
 #include <linux/mount.h>
 #include <linux/pm.h>
-#include <linux/cpu.h>
 
 #include "power.h"
 
 
+extern suspend_disk_method_t pm_disk_mode;
+
+extern int swsusp_shrink_memory(void);
+extern int swsusp_suspend(void);
+extern int swsusp_write(struct pbe *pblist, unsigned int nr_pages);
+extern int swsusp_check(void);
+extern int swsusp_read(struct pbe **pblist_ptr);
+extern void swsusp_close(void);
+extern int swsusp_resume(void);
+
+
 static int noresume = 0;
 char resume_file[256] = CONFIG_PM_STD_PARTITION;
 dev_t swsusp_resume_device;
@@ -60,6 +70,10 @@ static void power_down(suspend_disk_method_t mode)
        while(1);
 }
 
+
+static int in_suspend __nosavedata = 0;
+
+
 static inline void platform_finish(void)
 {
        if (pm_disk_mode == PM_DISK_PLATFORM) {
@@ -73,10 +87,8 @@ static int prepare_processes(void)
        int error;
 
        pm_prepare_console();
-
-       error = disable_nonboot_cpus();
-       if (error)
-               goto enable_cpus;
+       sys_sync();
+       disable_nonboot_cpus();
 
        if (freeze_processes()) {
                error = -EBUSY;
@@ -88,7 +100,6 @@ static int prepare_processes(void)
                return 0;
 thaw:
        thaw_processes();
-enable_cpus:
        enable_nonboot_cpus();
        pm_restore_console();
        return error;
@@ -134,7 +145,7 @@ int pm_suspend_disk(void)
        if (in_suspend) {
                device_resume();
                pr_debug("PM: writing image.\n");
-               error = swsusp_write();
+               error = swsusp_write(pagedir_nosave, nr_copy_pages);
                if (!error)
                        power_down(pm_disk_mode);
                else {
@@ -205,7 +216,7 @@ static int software_resume(void)
 
        pr_debug("PM: Reading swsusp image.\n");
 
-       if ((error = swsusp_read())) {
+       if ((error = swsusp_read(&pagedir_nosave))) {
                swsusp_free();
                goto Thaw;
        }
@@ -236,7 +247,7 @@ static int software_resume(void)
 late_initcall(software_resume);
 
 
-static const char * const pm_disk_modes[] = {
+static char * pm_disk_modes[] = {
        [PM_DISK_FIRMWARE]      = "firmware",
        [PM_DISK_PLATFORM]      = "platform",
        [PM_DISK_SHUTDOWN]      = "shutdown",