On Friday, November 04, 2011, Barry Song wrote: > From: Barry Song <Baohua.Song@xxxxxxx> > > Current swsusp requires swap partitions even larger than real saved pages > due to the worst compress ratio: > but for an embedded system, which has limited storage space, then it might > can't give the big size partition to save snapshot. > In the another way, some embedded systems can definitely know the most size > needed for snapshot since they run some specific application lists. > So this patch provides the possibility for bootloader to tell kernel even > the system has a little snapshot partition, but it is still enough. > For example, if the system need to save 120MB memory, origin swsusp will require > a 130MB partition to save snapshot. but if users know 30MB is enough for them( > compressed image will be less than 30MB), they just make a 30MB partition. > > Signed-off-by: Barry Song <Baohua.Song@xxxxxxx> > Cc: Xiangzhen Ye <Xiangzhen.Ye@xxxxxxx> I'm considering this as 3.3 material, so I'll take care of it after the current merge window closes. Thanks, Rafael > --- > this is another patch after I provide resumewait/resumedelay kernel params > to make swsusp support embedded systems better. > This patch is tested on CSR SiRFprimaII platform. > > Documentation/kernel-parameters.txt | 7 +++++++ > kernel/power/swap.c | 13 +++++++++++++ > 2 files changed, 20 insertions(+), 0 deletions(-) > > diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt > index a0c5c5f..2ad2e9c 100644 > --- a/Documentation/kernel-parameters.txt > +++ b/Documentation/kernel-parameters.txt > @@ -2277,6 +2277,13 @@ 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 > > + swapenough [SWSUSP] > + Tell kernel the swap partition size is enough and let kernel > + skip checking whether the swap partition has enough size to > + save snapshot. > + It is used for embedded systems, typically using NAND and SD > + card, which have not large space. > + > resumedelay= [HIBERNATION] Delay (in seconds) to pause before attempting to > read the resume files > > diff --git a/kernel/power/swap.c b/kernel/power/swap.c > index 11a594c..97c30b5 100644 > --- a/kernel/power/swap.c > +++ b/kernel/power/swap.c > @@ -36,6 +36,8 @@ > > #define HIBERNATE_SIG "S1SUSPEND" > > +static int swapenough; > + > /* > * The swap map is a data structure used for keeping track of each page > * written to a swap partition. It consists of many swap_map_page > @@ -772,6 +774,9 @@ static int enough_swap(unsigned int nr_pages, unsigned int flags) > unsigned int free_swap = count_swap_pages(root_swap, 1); > unsigned int required; > > + if (swapenough) > + return 1; > + > pr_debug("PM: Free swap pages: %u\n", free_swap); > > required = PAGES_FOR_IO + ((flags & SF_NOCOMPRESS_MODE) ? > @@ -1449,3 +1454,11 @@ static int swsusp_header_init(void) > } > > core_initcall(swsusp_header_init); > + > +static int __init swapenough_setup(char *str) > +{ > + swapenough = 1; > + return 1; > +} > + > +__setup("swapenough", swapenough_setup); > _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/linux-pm