diff options
| author | Anton Altaparmakov <aia21@cantab.net> | 2005-06-26 22:19:40 +0100 | 
|---|---|---|
| committer | Anton Altaparmakov <aia21@cantab.net> | 2005-06-26 22:19:40 +0100 | 
| commit | 2a322e4c08be4e7cb0c04b427ddaaa679fd88863 (patch) | |
| tree | ad8cc17bfd3b5e57e36f07a249028667d72f0b96 /kernel/power/disk.c | |
| parent | ba6d2377c85c9b8a793f455d8c9b6cf31985d70f (diff) | |
| parent | 8678887e7fb43cd6c9be6c9807b05e77848e0920 (diff) | |
Automatic merge with /usr/src/ntfs-2.6.git.
Diffstat (limited to 'kernel/power/disk.c')
| -rw-r--r-- | kernel/power/disk.c | 35 | 
1 files changed, 18 insertions, 17 deletions
| diff --git a/kernel/power/disk.c b/kernel/power/disk.c index 02b6764034dc..fb8de63c2919 100644 --- a/kernel/power/disk.c +++ b/kernel/power/disk.c @@ -117,8 +117,8 @@ static void finish(void)  {  	device_resume();  	platform_finish(); -	enable_nonboot_cpus();  	thaw_processes(); +	enable_nonboot_cpus();  	pm_restore_console();  } @@ -131,28 +131,35 @@ static int prepare_processes(void)  	sys_sync(); +	disable_nonboot_cpus(); +  	if (freeze_processes()) {  		error = -EBUSY; -		return error; +		goto thaw;  	}  	if (pm_disk_mode == PM_DISK_PLATFORM) {  		if (pm_ops && pm_ops->prepare) {  			if ((error = pm_ops->prepare(PM_SUSPEND_DISK))) -				return error; +				goto thaw;  		}  	}  	/* Free memory before shutting down devices. */  	free_some_memory(); -  	return 0; +thaw: +	thaw_processes(); +	enable_nonboot_cpus(); +	pm_restore_console(); +	return error;  }  static void unprepare_processes(void)  { -	enable_nonboot_cpus(); +	platform_finish();  	thaw_processes(); +	enable_nonboot_cpus();  	pm_restore_console();  } @@ -160,15 +167,9 @@ static int prepare_devices(void)  {  	int error; -	disable_nonboot_cpus(); -	if ((error = device_suspend(PMSG_FREEZE))) { +	if ((error = device_suspend(PMSG_FREEZE)))  		printk("Some devices failed to suspend\n"); -		platform_finish(); -		enable_nonboot_cpus(); -		return error; -	} - -	return 0; +	return error;  }  /** @@ -185,9 +186,9 @@ int pm_suspend_disk(void)  	int error;  	error = prepare_processes(); -	if (!error) { -		error = prepare_devices(); -	} +	if (error) +		return error; +	error = prepare_devices();  	if (error) {  		unprepare_processes(); @@ -250,7 +251,7 @@ static int software_resume(void)  	if ((error = prepare_processes())) {  		swsusp_close(); -		goto Cleanup; +		goto Done;  	}  	pr_debug("PM: Reading swsusp image.\n"); | 
