diff options
Diffstat (limited to 'kernel/power/power.h')
-rw-r--r-- | kernel/power/power.h | 23 |
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 | ||
178 | extern bool valid_state(suspend_state_t state); | 178 | extern bool valid_state(suspend_state_t state); |
179 | extern int suspend_devices_and_enter(suspend_state_t state); | 179 | extern int suspend_devices_and_enter(suspend_state_t state); |
180 | extern int enter_state(suspend_state_t state); | ||
181 | #else /* !CONFIG_SUSPEND */ | 180 | #else /* !CONFIG_SUSPEND */ |
182 | static inline int suspend_devices_and_enter(suspend_state_t state) | 181 | static inline int suspend_devices_and_enter(suspend_state_t state) |
183 | { | 182 | { |
184 | return -ENOSYS; | 183 | return -ENOSYS; |
185 | } | 184 | } |
186 | static inline int enter_state(suspend_state_t state) { return -ENOSYS; } | ||
187 | static inline bool valid_state(suspend_state_t state) { return false; } | 185 | static 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 |
232 | static inline int suspend_freeze_processes(void) | 230 | static 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 | ||
238 | static inline void suspend_thaw_processes(void) | 253 | static inline void suspend_thaw_processes(void) |