diff options
| author | Steve French <sfrench@us.ibm.com> | 2005-10-31 08:36:11 -0800 | 
|---|---|---|
| committer | Steve French <sfrench@us.ibm.com> | 2005-10-31 08:36:11 -0800 | 
| commit | 53b2ec5518aa2623e8c0cb36f1c304a797988a46 (patch) | |
| tree | 465d8631ade6c2fcbd7576ff9813d00116c6a1e8 /kernel/power/disk.c | |
| parent | 0753ca7bc2b876dd136e9db11a20f85cbe4e08b1 (diff) | |
| parent | 581c1b14394aee60aff46ea67d05483261ed6527 (diff) | |
Merge with /pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Diffstat (limited to 'kernel/power/disk.c')
| -rw-r--r-- | kernel/power/disk.c | 22 | 
1 files changed, 9 insertions, 13 deletions
diff --git a/kernel/power/disk.c b/kernel/power/disk.c index 761956e813f..027322a564f 100644 --- a/kernel/power/disk.c +++ b/kernel/power/disk.c @@ -30,7 +30,6 @@ extern int swsusp_check(void);  extern int swsusp_read(void);  extern void swsusp_close(void);  extern int swsusp_resume(void); -extern int swsusp_free(void);  static int noresume = 0; @@ -93,10 +92,7 @@ static void free_some_memory(void)  	printk("Freeing memory...  ");  	while ((tmp = shrink_all_memory(10000))) {  		pages += tmp; -		printk("\b%c", p[i]); -		i++; -		if (i > 3) -			i = 0; +		printk("\b%c", p[i++ % 4]);  	}  	printk("\bdone (%li pages freed)\n", pages);  } @@ -178,13 +174,12 @@ int pm_suspend_disk(void)  		goto Done;  	if (in_suspend) { +		device_resume();  		pr_debug("PM: writing image.\n");  		error = swsusp_write();  		if (!error)  			power_down(pm_disk_mode);  		else { -		/* swsusp_write can not fail in device_resume, -		   no need to do second device_resume */  			swsusp_free();  			unprepare_processes();  			return error; @@ -252,14 +247,17 @@ static int software_resume(void)  	pr_debug("PM: Reading swsusp image.\n"); -	if ((error = swsusp_read())) -		goto Cleanup; +	if ((error = swsusp_read())) { +		swsusp_free(); +		goto Thaw; +	}  	pr_debug("PM: Preparing devices for restore.\n");  	if ((error = device_suspend(PMSG_FREEZE))) {  		printk("Some devices failed to suspend\n"); -		goto Free; +		swsusp_free(); +		goto Thaw;  	}  	mb(); @@ -268,9 +266,7 @@ static int software_resume(void)  	swsusp_resume();  	pr_debug("PM: Restore failed, recovering.n");  	device_resume(); - Free: -	swsusp_free(); - Cleanup: + Thaw:  	unprepare_processes();   Done:  	/* For success case, the suspend path will release the lock */  | 
