lkml.org 
[lkml]   [2011]   [Oct]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH v2] PM: HIBERNATION: add resume_wait param to support MMC-like devices as resume file
    Date
    On Wednesday, October 05, 2011, Barry Song wrote:
    > 在 2011-10-5 上午6:30,"Rafael J. Wysocki" <rjw@sisk.pl>写道:
    > >
    > > On Thursday, September 29, 2011, Barry Song wrote:
    > > > From: Barry Song <baohua.song@csr.com>
    > > >
    > > > 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@csr.com>
    > > > Reviewed-by: Valdis Kletnieks <valdis.kletnieks@vt.edu>
    > >
    > > 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?
    >
    > I think yes. Some devices use nand
    > as root and SD as resume swap.
    > Still some devices use both SD as root and swap. But rootfs is mounted by
    > ramfs without rootwait.

    OK, fair enough. I applied the patch to linux-pm/linux-next and will push
    it for 3.2.

    Thanks,
    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-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2011-10-05 22:49    [W:0.031 / U:127.208 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site