aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/power/power.h
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/power/power.h')
-rw-r--r--kernel/power/power.h23
1 files changed, 19 insertions, 4 deletions
diff --git a/kernel/power/power.h b/kernel/power/power.h
index 0c4defe6d3b8..98f3622d7407 100644
--- a/kernel/power/power.h
+++ b/kernel/power/power.h
@@ -177,13 +177,11 @@ extern const char *const pm_states[];
177 177
178extern bool valid_state(suspend_state_t state); 178extern bool valid_state(suspend_state_t state);
179extern int suspend_devices_and_enter(suspend_state_t state); 179extern int suspend_devices_and_enter(suspend_state_t state);
180extern int enter_state(suspend_state_t state);
181#else /* !CONFIG_SUSPEND */ 180#else /* !CONFIG_SUSPEND */
182static inline int suspend_devices_and_enter(suspend_state_t state) 181static inline int suspend_devices_and_enter(suspend_state_t state)
183{ 182{
184 return -ENOSYS; 183 return -ENOSYS;
185} 184}
186static inline int enter_state(suspend_state_t state) { return -ENOSYS; }
187static inline bool valid_state(suspend_state_t state) { return false; } 185static inline bool valid_state(suspend_state_t state) { return false; }
188#endif /* !CONFIG_SUSPEND */ 186#endif /* !CONFIG_SUSPEND */
189 187
@@ -231,8 +229,25 @@ extern int pm_test_level;
231#ifdef CONFIG_SUSPEND_FREEZER 229#ifdef CONFIG_SUSPEND_FREEZER
232static inline int suspend_freeze_processes(void) 230static inline int suspend_freeze_processes(void)
233{ 231{
234 int error = freeze_processes(); 232 int error;
235 return error ? : freeze_kernel_threads(); 233
234 error = freeze_processes();
235 /*
236 * freeze_processes() automatically thaws every task if freezing
237 * fails. So we need not do anything extra upon error.
238 */
239 if (error)
240 return error;
241
242 error = freeze_kernel_threads();
243 /*
244 * freeze_kernel_threads() thaws only kernel threads upon freezing
245 * failure. So we have to thaw the userspace tasks ourselves.
246 */
247 if (error)
248 thaw_processes();
249
250 return error;
236} 251}
237 252
238static inline void suspend_thaw_processes(void) 253static inline void suspend_thaw_processes(void)