diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-29 17:43:22 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-29 17:43:22 -0500 |
commit | 8cd7920370a3715ccbd1c98bf33f172b8837dc0b (patch) | |
tree | 6ee969f2a1e235ed37348f841c3f15a03cfdff1e /kernel | |
parent | 57db53b07429c0d648f48727dd6c7c2b64c5708d (diff) | |
parent | f7bc83d87d242917ca0ee041ed509f57f361dd56 (diff) |
Merge branch 'pm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
* 'pm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
PM: Update comments describing device power management callbacks
PM / Sleep: Update documentation related to system wakeup
PM / Runtime: Make documentation follow the new behavior of irq_safe
PM / Sleep: Correct inaccurate information in devices.txt
PM / Domains: Document how PM domains are used by the PM core
PM / Hibernate: Do not leak memory in error/test code paths
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/power/hibernate.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c index 196c01268ebd..a6b0503574ee 100644 --- a/kernel/power/hibernate.c +++ b/kernel/power/hibernate.c | |||
@@ -347,7 +347,7 @@ int hibernation_snapshot(int platform_mode) | |||
347 | 347 | ||
348 | error = freeze_kernel_threads(); | 348 | error = freeze_kernel_threads(); |
349 | if (error) | 349 | if (error) |
350 | goto Close; | 350 | goto Cleanup; |
351 | 351 | ||
352 | if (hibernation_test(TEST_FREEZER) || | 352 | if (hibernation_test(TEST_FREEZER) || |
353 | hibernation_testmode(HIBERNATION_TESTPROC)) { | 353 | hibernation_testmode(HIBERNATION_TESTPROC)) { |
@@ -357,12 +357,14 @@ int hibernation_snapshot(int platform_mode) | |||
357 | * successful freezer test. | 357 | * successful freezer test. |
358 | */ | 358 | */ |
359 | freezer_test_done = true; | 359 | freezer_test_done = true; |
360 | goto Close; | 360 | goto Cleanup; |
361 | } | 361 | } |
362 | 362 | ||
363 | error = dpm_prepare(PMSG_FREEZE); | 363 | error = dpm_prepare(PMSG_FREEZE); |
364 | if (error) | 364 | if (error) { |
365 | goto Complete_devices; | 365 | dpm_complete(msg); |
366 | goto Cleanup; | ||
367 | } | ||
366 | 368 | ||
367 | suspend_console(); | 369 | suspend_console(); |
368 | pm_restrict_gfp_mask(); | 370 | pm_restrict_gfp_mask(); |
@@ -391,8 +393,6 @@ int hibernation_snapshot(int platform_mode) | |||
391 | pm_restore_gfp_mask(); | 393 | pm_restore_gfp_mask(); |
392 | 394 | ||
393 | resume_console(); | 395 | resume_console(); |
394 | |||
395 | Complete_devices: | ||
396 | dpm_complete(msg); | 396 | dpm_complete(msg); |
397 | 397 | ||
398 | Close: | 398 | Close: |
@@ -402,6 +402,10 @@ int hibernation_snapshot(int platform_mode) | |||
402 | Recover_platform: | 402 | Recover_platform: |
403 | platform_recover(platform_mode); | 403 | platform_recover(platform_mode); |
404 | goto Resume_devices; | 404 | goto Resume_devices; |
405 | |||
406 | Cleanup: | ||
407 | swsusp_free(); | ||
408 | goto Close; | ||
405 | } | 409 | } |
406 | 410 | ||
407 | /** | 411 | /** |