|
@@ -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);
|