aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Berg <johannes@sipsolutions.net>2008-01-15 23:17:00 -0500
committerLen Brown <len.brown@intel.com>2008-02-01 18:30:58 -0500
commitb28f508112c584cdfbb4d8a9489cc4b79dac68ee (patch)
tree8269d53055d0368f6eb25fac6b9d29077382cbca
parentc9b6c8f68ee48e1e3dbb53e13316757e2c0b584d (diff)
Suspend: Add config option to disable the freezer if architecture wants that
This patch makes the freezer optional for suspend to allow the system to work (or not work) like the original PMU suspend. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Acked-by: Pavel Machek <pavel@ucw.cz> Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> Signed-off-by: Len Brown <len.brown@intel.com>
-rw-r--r--arch/powerpc/Kconfig4
-rw-r--r--kernel/power/Kconfig11
-rw-r--r--kernel/power/main.c6
-rw-r--r--kernel/power/power.h22
4 files changed, 40 insertions, 3 deletions
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 824140d6cd2..4a22c992861 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -405,6 +405,10 @@ config CMDLINE
405 most cases you will need to specify the root device here. 405 most cases you will need to specify the root device here.
406 406
407if !44x || BROKEN 407if !44x || BROKEN
408config ARCH_WANTS_FREEZER_CONTROL
409 def_bool y
410 depends on ADB_PMU
411
408source kernel/power/Kconfig 412source kernel/power/Kconfig
409endif 413endif
410 414
diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig
index f8153fda06b..ef9b802738a 100644
--- a/kernel/power/Kconfig
+++ b/kernel/power/Kconfig
@@ -104,6 +104,17 @@ config SUSPEND
104 powered and thus its contents are preserved, such as the 104 powered and thus its contents are preserved, such as the
105 suspend-to-RAM state (e.g. the ACPI S3 state). 105 suspend-to-RAM state (e.g. the ACPI S3 state).
106 106
107config SUSPEND_FREEZER
108 bool "Enable freezer for suspend to RAM/standby" \
109 if ARCH_WANTS_FREEZER_CONTROL || BROKEN
110 depends on SUSPEND
111 default y
112 help
113 This allows you to turn off the freezer for suspend. If this is
114 done, no tasks are frozen for suspend to RAM/standby.
115
116 Turning OFF this setting is NOT recommended! If in doubt, say Y.
117
107config HIBERNATION 118config HIBERNATION
108 bool "Hibernation (aka 'suspend to disk')" 119 bool "Hibernation (aka 'suspend to disk')"
109 depends on PM && SWAP && ARCH_HIBERNATION_POSSIBLE 120 depends on PM && SWAP && ARCH_HIBERNATION_POSSIBLE
diff --git a/kernel/power/main.c b/kernel/power/main.c
index d9bba452764..e47214cfeb2 100644
--- a/kernel/power/main.c
+++ b/kernel/power/main.c
@@ -181,7 +181,7 @@ static int suspend_prepare(void)
181 181
182 pm_prepare_console(); 182 pm_prepare_console();
183 183
184 if (freeze_processes()) { 184 if (suspend_freeze_processes()) {
185 error = -EAGAIN; 185 error = -EAGAIN;
186 goto Thaw; 186 goto Thaw;
187 } 187 }
@@ -199,7 +199,7 @@ static int suspend_prepare(void)
199 return 0; 199 return 0;
200 200
201 Thaw: 201 Thaw:
202 thaw_processes(); 202 suspend_thaw_processes();
203 pm_restore_console(); 203 pm_restore_console();
204 Finish: 204 Finish:
205 pm_notifier_call_chain(PM_POST_SUSPEND); 205 pm_notifier_call_chain(PM_POST_SUSPEND);
@@ -308,7 +308,7 @@ int suspend_devices_and_enter(suspend_state_t state)
308 */ 308 */
309static void suspend_finish(void) 309static void suspend_finish(void)
310{ 310{
311 thaw_processes(); 311 suspend_thaw_processes();
312 pm_restore_console(); 312 pm_restore_console();
313 pm_notifier_call_chain(PM_POST_SUSPEND); 313 pm_notifier_call_chain(PM_POST_SUSPEND);
314} 314}
diff --git a/kernel/power/power.h b/kernel/power/power.h
index 8ec5499c5ce..700f44ec840 100644
--- a/kernel/power/power.h
+++ b/kernel/power/power.h
@@ -1,6 +1,7 @@
1#include <linux/suspend.h> 1#include <linux/suspend.h>
2#include <linux/suspend_ioctls.h> 2#include <linux/suspend_ioctls.h>
3#include <linux/utsname.h> 3#include <linux/utsname.h>
4#include <linux/freezer.h>
4 5
5struct swsusp_info { 6struct swsusp_info {
6 struct new_utsname uts; 7 struct new_utsname uts;
@@ -203,3 +204,24 @@ enum {
203#define TEST_MAX (__TEST_AFTER_LAST - 1) 204#define TEST_MAX (__TEST_AFTER_LAST - 1)
204 205
205extern int pm_test_level; 206extern int pm_test_level;
207
208#ifdef CONFIG_SUSPEND_FREEZER
209static inline int suspend_freeze_processes(void)
210{
211 return freeze_processes();
212}
213
214static inline void suspend_thaw_processes(void)
215{
216 thaw_processes();
217}
218#else
219static inline int suspend_freeze_processes(void)
220{
221 return 0;
222}
223
224static inline void suspend_thaw_processes(void)
225{
226}
227#endif