diff options
Diffstat (limited to 'kernel/power/hibernate.c')
| -rw-r--r-- | kernel/power/hibernate.c | 23 | 
1 files changed, 17 insertions, 6 deletions
diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c index b4511b6d3ef..196c01268eb 100644 --- a/kernel/power/hibernate.c +++ b/kernel/power/hibernate.c @@ -55,6 +55,8 @@ enum {  static int hibernation_mode = HIBERNATION_SHUTDOWN; +static bool freezer_test_done; +  static const struct platform_hibernation_ops *hibernation_ops;  /** @@ -347,6 +349,17 @@ int hibernation_snapshot(int platform_mode)  	if (error)  		goto Close; +	if (hibernation_test(TEST_FREEZER) || +		hibernation_testmode(HIBERNATION_TESTPROC)) { + +		/* +		 * Indicate to the caller that we are returning due to a +		 * successful freezer test. +		 */ +		freezer_test_done = true; +		goto Close; +	} +  	error = dpm_prepare(PMSG_FREEZE);  	if (error)  		goto Complete_devices; @@ -641,15 +654,13 @@ int hibernate(void)  	if (error)  		goto Finish; -	if (hibernation_test(TEST_FREEZER)) -		goto Thaw; - -	if (hibernation_testmode(HIBERNATION_TESTPROC)) -		goto Thaw; -  	error = hibernation_snapshot(hibernation_mode == HIBERNATION_PLATFORM);  	if (error)  		goto Thaw; +	if (freezer_test_done) { +		freezer_test_done = false; +		goto Thaw; +	}  	if (in_suspend) {  		unsigned int flags = 0;  |