diff options
Diffstat (limited to 'kernel/power/power.h')
| -rw-r--r-- | kernel/power/power.h | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/kernel/power/power.h b/kernel/power/power.h index 0c4defe6d3b8..21724eee5206 100644 --- a/kernel/power/power.h +++ b/kernel/power/power.h | |||
| @@ -231,8 +231,28 @@ extern int pm_test_level; | |||
| 231 | #ifdef CONFIG_SUSPEND_FREEZER | 231 | #ifdef CONFIG_SUSPEND_FREEZER |
| 232 | static inline int suspend_freeze_processes(void) | 232 | static inline int suspend_freeze_processes(void) |
| 233 | { | 233 | { |
| 234 | int error = freeze_processes(); | 234 | int error; |
| 235 | return error ? : freeze_kernel_threads(); | 235 | |
| 236 | error = freeze_processes(); | ||
| 237 | |||
| 238 | /* | ||
| 239 | * freeze_processes() automatically thaws every task if freezing | ||
| 240 | * fails. So we need not do anything extra upon error. | ||
| 241 | */ | ||
| 242 | if (error) | ||
| 243 | goto Finish; | ||
| 244 | |||
| 245 | error = freeze_kernel_threads(); | ||
| 246 | |||
| 247 | /* | ||
| 248 | * freeze_kernel_threads() thaws only kernel threads upon freezing | ||
| 249 | * failure. So we have to thaw the userspace tasks ourselves. | ||
| 250 | */ | ||
| 251 | if (error) | ||
| 252 | thaw_processes(); | ||
| 253 | |||
| 254 | Finish: | ||
| 255 | return error; | ||
| 236 | } | 256 | } |
| 237 | 257 | ||
| 238 | static inline void suspend_thaw_processes(void) | 258 | static inline void suspend_thaw_processes(void) |
