Commit 953a2063 authored by Srivatsa S. Bhat's avatar Srivatsa S. Bhat Committed by Rafael J. Wysocki

PM / Hibernate: Refactor and simplify hibernation_snapshot() code

The goto statements in hibernation_snapshot() are a bit complex.
Refactor the code to remove some of them, thereby simplifying the
implementation.
Signed-off-by: default avatarSrivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
parent 64e94aaf
...@@ -333,7 +333,7 @@ static int create_image(int platform_mode) ...@@ -333,7 +333,7 @@ static int create_image(int platform_mode)
*/ */
int hibernation_snapshot(int platform_mode) int hibernation_snapshot(int platform_mode)
{ {
pm_message_t msg = PMSG_RECOVER; pm_message_t msg;
int error; int error;
error = platform_begin(platform_mode); error = platform_begin(platform_mode);
...@@ -362,26 +362,26 @@ int hibernation_snapshot(int platform_mode) ...@@ -362,26 +362,26 @@ int hibernation_snapshot(int platform_mode)
error = dpm_prepare(PMSG_FREEZE); error = dpm_prepare(PMSG_FREEZE);
if (error) { if (error) {
dpm_complete(msg); dpm_complete(PMSG_RECOVER);
goto Cleanup; goto Cleanup;
} }
suspend_console(); suspend_console();
pm_restrict_gfp_mask(); pm_restrict_gfp_mask();
error = dpm_suspend(PMSG_FREEZE);
if (error)
goto Recover_platform;
if (hibernation_test(TEST_DEVICES)) error = dpm_suspend(PMSG_FREEZE);
goto Recover_platform;
if (error || hibernation_test(TEST_DEVICES))
platform_recover(platform_mode);
else
error = create_image(platform_mode); error = create_image(platform_mode);
/* /*
* Control returns here (1) after the image has been created or the * In the case that we call create_image() above, the control
* returns here (1) after the image has been created or the
* image creation has failed and (2) after a successful restore. * image creation has failed and (2) after a successful restore.
*/ */
Resume_devices:
/* We may need to release the preallocated image pages here. */ /* We may need to release the preallocated image pages here. */
if (error || !in_suspend) if (error || !in_suspend)
swsusp_free(); swsusp_free();
...@@ -399,10 +399,6 @@ int hibernation_snapshot(int platform_mode) ...@@ -399,10 +399,6 @@ int hibernation_snapshot(int platform_mode)
platform_end(platform_mode); platform_end(platform_mode);
return error; return error;
Recover_platform:
platform_recover(platform_mode);
goto Resume_devices;
Cleanup: Cleanup:
swsusp_free(); swsusp_free();
goto Close; goto Close;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment