On Thursday, September 29, 2011, Barry Song wrote: > From: Barry Song <baohua.song@xxxxxxx> > > Some devices like mmc are async detected very slow. For example, > drivers/mmc/host/sdhci.c launchs a 200ms delayed work to detect > mmc partitions then add disk. > > we do have wait_for_device_probe and scsi_complete_async_scans > before calling swsusp_check, but it is not enough to wait mmc. > > This patch adds resumewait kernel param just like rootwait so > that we have enough time to wait mmc ready. The differene is > here we wait for resume partition but rootwait waits for rootfs > partition. > > This patch will make swsusp support many embedded products > without scsi devices but devices like mmc. > > This was tested on one ARM platform with Frank Hofmann's patch. > > Signed-off-by: Barry Song <Baohua.Song@xxxxxxx> > Reviewed-by: Valdis Kletnieks <valdis.kletnieks@xxxxxx> Sorry, I couldn't find the patch previously. I only have one question. Namely, are there any systems that would use resumewait and wouldn't use rootwait? Rafael > --- > -v2: > add document for the resumewait kernel parameter > > Documentation/kernel-parameters.txt | 4 ++++ > kernel/power/hibernate.c | 16 ++++++++++++++++ > 2 files changed, 20 insertions(+), 0 deletions(-) > > diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt > index 614d038..2aed0d2 100644 > --- a/Documentation/kernel-parameters.txt > +++ b/Documentation/kernel-parameters.txt > @@ -2237,6 +2237,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. > in <PAGE_SIZE> units (needed only for swap files). > See Documentation/power/swsusp-and-swap-files.txt > > + resumewait [HIBERNATION] Wait (indefinitely) for resume device to show up. > + Useful for devices that are detected asynchronously > + (e.g. USB and MMC devices). > + > hibernate= [HIBERNATION] > noresume Don't check if there's a hibernation image > present during boot. > diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c > index 8f7b1db..9f4b4f3 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; > @@ -732,6 +734,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 > @@ -1060,7 +1069,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); > -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html