diff options
Diffstat (limited to 'kernel/power/hibernate.c')
| -rw-r--r-- | kernel/power/hibernate.c | 16 | 
1 files changed, 16 insertions, 0 deletions
diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c index 7f44e5c2697..0f8785080cd 100644 --- a/kernel/power/hibernate.c +++ b/kernel/power/hibernate.c @@ -14,6 +14,7 @@  #include <linux/reboot.h>  #include <linux/string.h>  #include <linux/device.h> +#include <linux/async.h>  #include <linux/kmod.h>  #include <linux/delay.h>  #include <linux/fs.h> @@ -31,6 +32,7 @@  static int nocompress = 0;  static int noresume = 0; +static int resume_wait = 0;  static char resume_file[256] = CONFIG_PM_STD_PARTITION;  dev_t swsusp_resume_device;  sector_t swsusp_resume_block; @@ -736,6 +738,13 @@ static int software_resume(void)  		 * to wait for this to finish.  		 */  		wait_for_device_probe(); + +		if (resume_wait) { +			while ((swsusp_resume_device = name_to_dev_t(resume_file)) == 0) +				msleep(10); +			async_synchronize_full(); +		} +  		/*  		 * We can't depend on SCSI devices being available after loading  		 * one of their modules until scsi_complete_async_scans() is @@ -1064,7 +1073,14 @@ static int __init noresume_setup(char *str)  	return 1;  } +static int __init resumewait_setup(char *str) +{ +	resume_wait = 1; +	return 1; +} +  __setup("noresume", noresume_setup);  __setup("resume_offset=", resume_offset_setup);  __setup("resume=", resume_setup);  __setup("hibernate=", hibernate_setup); +__setup("resumewait", resumewait_setup);  |