#include <linux/errno.h>
#include <linux/init.h>
#include <linux/pm.h>
-#include <linux/console.h>
-#include <linux/cpu.h>
+
#include "power.h"
static int suspend_prepare(suspend_state_t state)
{
- int error;
+ int error = 0;
unsigned int free_pages;
if (!pm_ops || !pm_ops->enter)
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;
goto Thaw;
}
- suspend_console();
if ((error = device_suspend(PMSG_SUSPEND))) {
printk(KERN_ERR "Some devices failed to suspend\n");
goto Finish;
}
-int suspend_enter(suspend_state_t state)
+static int suspend_enter(suspend_state_t state)
{
int error = 0;
unsigned long flags;
static void suspend_finish(suspend_state_t state)
{
device_resume();
- resume_console();
thaw_processes();
enable_nonboot_cpus();
if (pm_ops && pm_ops->finish)
-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
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;
if (*s && !strncmp(buf, *s, len))
break;
}
- if (state < PM_SUSPEND_MAX && *s)
+ if (*s)
error = enter_state(state);
else
error = -EINVAL;