diff options
| author | Jiri Kosina <jkosina@suse.cz> | 2010-12-22 18:57:02 +0100 | 
|---|---|---|
| committer | Jiri Kosina <jkosina@suse.cz> | 2010-12-22 18:57:02 +0100 | 
| commit | 4b7bd364700d9ac8372eff48832062b936d0793b (patch) | |
| tree | 0dbf78c95456a0b02d07fcd473281f04a87e266d /kernel/power/hibernate.c | |
| parent | c0d8768af260e2cbb4bf659ae6094a262c86b085 (diff) | |
| parent | 90a8a73c06cc32b609a880d48449d7083327e11a (diff) | |
| download | olio-linux-3.10-4b7bd364700d9ac8372eff48832062b936d0793b.tar.xz olio-linux-3.10-4b7bd364700d9ac8372eff48832062b936d0793b.zip  | |
Merge branch 'master' into for-next
Conflicts:
	MAINTAINERS
	arch/arm/mach-omap2/pm24xx.c
	drivers/scsi/bfa/bfa_fcpim.c
Needed to update to apply fixes for which the old branch was too
outdated.
Diffstat (limited to 'kernel/power/hibernate.c')
| -rw-r--r-- | kernel/power/hibernate.c | 22 | 
1 files changed, 12 insertions, 10 deletions
diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c index 491b81a2711..b6279be691a 100644 --- a/kernel/power/hibernate.c +++ b/kernel/power/hibernate.c @@ -327,7 +327,6 @@ static int create_image(int platform_mode)  int hibernation_snapshot(int platform_mode)  {  	int error; -	gfp_t saved_mask;  	error = platform_begin(platform_mode);  	if (error) @@ -339,7 +338,7 @@ int hibernation_snapshot(int platform_mode)  		goto Close;  	suspend_console(); -	saved_mask = clear_gfp_allowed_mask(GFP_IOFS); +	pm_restrict_gfp_mask();  	error = dpm_suspend_start(PMSG_FREEZE);  	if (error)  		goto Recover_platform; @@ -348,7 +347,10 @@ int hibernation_snapshot(int platform_mode)  		goto Recover_platform;  	error = create_image(platform_mode); -	/* Control returns here after successful restore */ +	/* +	 * 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. */ @@ -357,7 +359,10 @@ int hibernation_snapshot(int platform_mode)  	dpm_resume_end(in_suspend ?  		(error ? PMSG_RECOVER : PMSG_THAW) : PMSG_RESTORE); -	set_gfp_allowed_mask(saved_mask); + +	if (error || !in_suspend) +		pm_restore_gfp_mask(); +  	resume_console();   Close:  	platform_end(platform_mode); @@ -452,17 +457,16 @@ static int resume_target_kernel(bool platform_mode)  int hibernation_restore(int platform_mode)  {  	int error; -	gfp_t saved_mask;  	pm_prepare_console();  	suspend_console(); -	saved_mask = clear_gfp_allowed_mask(GFP_IOFS); +	pm_restrict_gfp_mask();  	error = dpm_suspend_start(PMSG_QUIESCE);  	if (!error) {  		error = resume_target_kernel(platform_mode);  		dpm_resume_end(PMSG_RECOVER);  	} -	set_gfp_allowed_mask(saved_mask); +	pm_restore_gfp_mask();  	resume_console();  	pm_restore_console();  	return error; @@ -476,7 +480,6 @@ int hibernation_restore(int platform_mode)  int hibernation_platform_enter(void)  {  	int error; -	gfp_t saved_mask;  	if (!hibernation_ops)  		return -ENOSYS; @@ -492,7 +495,6 @@ int hibernation_platform_enter(void)  	entering_platform_hibernation = true;  	suspend_console(); -	saved_mask = clear_gfp_allowed_mask(GFP_IOFS);  	error = dpm_suspend_start(PMSG_HIBERNATE);  	if (error) {  		if (hibernation_ops->recover) @@ -536,7 +538,6 @@ int hibernation_platform_enter(void)   Resume_devices:  	entering_platform_hibernation = false;  	dpm_resume_end(PMSG_RESTORE); -	set_gfp_allowed_mask(saved_mask);  	resume_console();   Close: @@ -646,6 +647,7 @@ int hibernate(void)  		swsusp_free();  		if (!error)  			power_down(); +		pm_restore_gfp_mask();  	} else {  		pr_debug("PM: Image restored successfully.\n");  	}  |