diff options
| author | Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com> | 2011-11-22 23:20:31 +0100 | 
|---|---|---|
| committer | Rafael J. Wysocki <rjw@sisk.pl> | 2011-11-23 21:13:41 +0100 | 
| commit | 953a206393b1533ceb0e7d725cc5a8c8d7ed97dd (patch) | |
| tree | 7eb6448987f474f287bd2fce66dd1fff6e2eec30 | |
| parent | 64e94aafb6a5c4f419e9b8f93950914b5ac162a9 (diff) | |
| download | olio-linux-3.10-953a206393b1533ceb0e7d725cc5a8c8d7ed97dd.tar.xz olio-linux-3.10-953a206393b1533ceb0e7d725cc5a8c8d7ed97dd.zip  | |
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: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
| -rw-r--r-- | kernel/power/hibernate.c | 22 | 
1 files changed, 9 insertions, 13 deletions
diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c index a6b0503574e..ebf62c3bc9f 100644 --- a/kernel/power/hibernate.c +++ b/kernel/power/hibernate.c @@ -333,7 +333,7 @@ static int create_image(int platform_mode)   */  int hibernation_snapshot(int platform_mode)  { -	pm_message_t msg = PMSG_RECOVER; +	pm_message_t msg;  	int error;  	error = platform_begin(platform_mode); @@ -362,26 +362,26 @@ int hibernation_snapshot(int platform_mode)  	error = dpm_prepare(PMSG_FREEZE);  	if (error) { -		dpm_complete(msg); +		dpm_complete(PMSG_RECOVER);  		goto Cleanup;  	}  	suspend_console();  	pm_restrict_gfp_mask(); +  	error = dpm_suspend(PMSG_FREEZE); -	if (error) -		goto Recover_platform; -	if (hibernation_test(TEST_DEVICES)) -		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.  	 */ - Resume_devices:  	/* We may need to release the preallocated image pages here. */  	if (error || !in_suspend)  		swsusp_free(); @@ -399,10 +399,6 @@ int hibernation_snapshot(int platform_mode)  	platform_end(platform_mode);  	return error; - Recover_platform: -	platform_recover(platform_mode); -	goto Resume_devices; -   Cleanup:  	swsusp_free();  	goto Close;  |