diff options
author | Dave Airlie <airlied@redhat.com> | 2012-03-15 11:24:32 +0100 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2012-03-15 11:24:32 +0100 |
commit | 8229c885fe361e521ac64de36b16011e54a30de0 (patch) | |
tree | 572e5d34b16713ddef9e803308c6f72014aff01b /kernel/power/power.h | |
parent | drm: Add drm_mode_copy() (diff) | |
parent | Linux 3.3-rc7 (diff) | |
download | linux-8229c885fe361e521ac64de36b16011e54a30de0.tar.xz linux-8229c885fe361e521ac64de36b16011e54a30de0.zip |
drm: Merge tag 'v3.3-rc7' into drm-core-next
Merge the fixes so far into core-next, needed to test
intel driver.
Conflicts:
drivers/gpu/drm/i915/intel_ringbuffer.c
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; #ifdef CONFIG_SUSPEND_FREEZER static inline int suspend_freeze_processes(void) { - int error = freeze_processes(); - return error ? : freeze_kernel_threads(); + int error; + + error = freeze_processes(); + + /* + * freeze_processes() automatically thaws every task if freezing + * fails. So we need not do anything extra upon error. + */ + if (error) + goto Finish; + + error = freeze_kernel_threads(); + + /* + * freeze_kernel_threads() thaws only kernel threads upon freezing + * failure. So we have to thaw the userspace tasks ourselves. + */ + if (error) + thaw_processes(); + + Finish: + return error; } static inline void suspend_thaw_processes(void) |