linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / kernel / power / main.c
index 4d40332..9cb235c 100644 (file)
@@ -15,8 +15,7 @@
 #include <linux/errno.h>
 #include <linux/init.h>
 #include <linux/pm.h>
-#include <linux/console.h>
-#include <linux/cpu.h>
+
 
 #include "power.h"
 
@@ -52,7 +51,7 @@ void pm_set_ops(struct pm_ops * ops)
 
 static int suspend_prepare(suspend_state_t state)
 {
-       int error;
+       int error = 0;
        unsigned int free_pages;
 
        if (!pm_ops || !pm_ops->enter)
@@ -60,9 +59,12 @@ static int suspend_prepare(suspend_state_t state)
 
        pm_prepare_console();
 
-       error = disable_nonboot_cpus();
-       if (error)
+       disable_nonboot_cpus();
+
+       if (num_online_cpus() != 1) {
+               error = -EPERM;
                goto Enable_cpu;
+       }
 
        if (freeze_processes()) {
                error = -EAGAIN;
@@ -84,7 +86,6 @@ static int suspend_prepare(suspend_state_t state)
                        goto Thaw;
        }
 
-       suspend_console();
        if ((error = device_suspend(PMSG_SUSPEND))) {
                printk(KERN_ERR "Some devices failed to suspend\n");
                goto Finish;
@@ -102,7 +103,7 @@ static int suspend_prepare(suspend_state_t state)
 }
 
 
-int suspend_enter(suspend_state_t state)
+static int suspend_enter(suspend_state_t state)
 {
        int error = 0;
        unsigned long flags;
@@ -132,7 +133,6 @@ int suspend_enter(suspend_state_t state)
 static void suspend_finish(suspend_state_t state)
 {
        device_resume();
-       resume_console();
        thaw_processes();
        enable_nonboot_cpus();
        if (pm_ops && pm_ops->finish)
@@ -143,7 +143,7 @@ static void suspend_finish(suspend_state_t state)
 
 
 
-static const char * const pm_states[PM_SUSPEND_MAX] = {
+static char *pm_states[PM_SUSPEND_MAX] = {
        [PM_SUSPEND_STANDBY]    = "standby",
        [PM_SUSPEND_MEM]        = "mem",
 #ifdef CONFIG_SOFTWARE_SUSPEND
@@ -260,7 +260,7 @@ static ssize_t state_show(struct subsystem * subsys, char * buf)
 static ssize_t state_store(struct subsystem * subsys, const char * buf, size_t n)
 {
        suspend_state_t state = PM_SUSPEND_STANDBY;
-       const char * const *s;
+       char ** s;
        char *p;
        int error;
        int len;
@@ -272,7 +272,7 @@ static ssize_t state_store(struct subsystem * subsys, const char * buf, size_t n
                if (*s && !strncmp(buf, *s, len))
                        break;
        }
-       if (state < PM_SUSPEND_MAX && *s)
+       if (*s)
                error = enter_state(state);
        else
                error = -EINVAL;