[PATCH] suspend/resume SMP support
Using CPU hotplug to support suspend/resume SMP. Both S3 and S4 use disable/enable_nonboot_cpus API. The S4 part is based on Pavel's original S4 SMP patch. Signed-off-by: Li Shaohua<shaohua.li@intel.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
fb69c3907e
commit
5a72e04df5
@ -55,6 +55,13 @@ static int suspend_prepare(suspend_state_t state)
|
||||
|
||||
pm_prepare_console();
|
||||
|
||||
disable_nonboot_cpus();
|
||||
|
||||
if (num_online_cpus() != 1) {
|
||||
error = -EPERM;
|
||||
goto Enable_cpu;
|
||||
}
|
||||
|
||||
if (freeze_processes()) {
|
||||
error = -EAGAIN;
|
||||
goto Thaw;
|
||||
@ -75,6 +82,8 @@ static int suspend_prepare(suspend_state_t state)
|
||||
pm_ops->finish(state);
|
||||
Thaw:
|
||||
thaw_processes();
|
||||
Enable_cpu:
|
||||
enable_nonboot_cpus();
|
||||
pm_restore_console();
|
||||
return error;
|
||||
}
|
||||
@ -113,6 +122,7 @@ static void suspend_finish(suspend_state_t state)
|
||||
if (pm_ops && pm_ops->finish)
|
||||
pm_ops->finish(state);
|
||||
thaw_processes();
|
||||
enable_nonboot_cpus();
|
||||
pm_restore_console();
|
||||
}
|
||||
|
||||
@ -150,12 +160,6 @@ static int enter_state(suspend_state_t state)
|
||||
goto Unlock;
|
||||
}
|
||||
|
||||
/* Suspend is hard to get right on SMP. */
|
||||
if (num_online_cpus() != 1) {
|
||||
error = -EPERM;
|
||||
goto Unlock;
|
||||
}
|
||||
|
||||
pr_debug("PM: Preparing system for %s sleep\n", pm_states[state]);
|
||||
if ((error = suspend_prepare(state)))
|
||||
goto Unlock;
|
||||
|
Reference in New Issue
Block a user