Re: Userland swsusp failure (mm-related)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi!

> > Rafael J. Wysocki wrote:
> > >>>Well, it looks like we didn't free enough RAM for suspend in this case.
> > >>>Unfortunately we were below the min watermark for ZONE_NORMAL and
> > >>>we tried to allocate with GFP_ATOMIC (Nick, shouldn't we fall back to
> > >>>ZONE_DMA in this case?).
> > >>>
> > >>>I think we can safely ignore the watermarks in swsusp, so probably
> > >>>we can set PF_MEMALLOC for the current task temporarily and reset
> > >>>it when we have allocated memory.  Pavel, what do you think?
> > >>
> > >>Seems little hacky but okay to me.
> > >>
> > >>Should not fixing "how much to free" computation to free a bit more be
> > >>enough to handle this?
> > > 
> > > 
> > > Yes, but in that case we'll leave some memory unused. ;-)
> > > 
> > 
> > Probably doesn't fall back to ZONE_DMA because of lowmem reserve.
> > Yes, PF_MEMALLOC sounds like it might do what you want. A little
> > hackish perhaps, but better than putting swsusp special cases
> > into page_alloc.c.
> 
> The appended patch contains the changes I'd like to make.  Pavel, is that
> acceptable?

Why is PF_MEMALLOC only neccessary for pagedir allocations, and not
for normal page allocations, too?


> Rafael
> 
> ---
>  kernel/power/snapshot.c |   10 ++++++++--
>  1 files changed, 8 insertions(+), 2 deletions(-)
> 
> Index: linux-2.6.17-rc1-mm2/kernel/power/snapshot.c
> ===================================================================
> --- linux-2.6.17-rc1-mm2.orig/kernel/power/snapshot.c	2006-04-08 21:29:55.000000000 +0200
> +++ linux-2.6.17-rc1-mm2/kernel/power/snapshot.c	2006-04-11 22:09:28.000000000 +0200
> @@ -461,17 +461,23 @@ static struct pbe *swsusp_alloc(unsigned
>  {
>  	struct pbe *pblist;
>  
> +	/* We don't want to be affected by zone watermarks etc. */
> +	current->flags |= PF_MEMALLOC;
> +
>  	if (!(pblist = alloc_pagedir(nr_pages, GFP_ATOMIC | __GFP_COLD, 0))) {
>  		printk(KERN_ERR "suspend: Allocating pagedir failed.\n");
> -		return NULL;
> +		goto out;
>  	}
>  
>  	if (alloc_data_pages(pblist, GFP_ATOMIC | __GFP_COLD, 0)) {
>  		printk(KERN_ERR "suspend: Allocating image pages failed.\n");
>  		swsusp_free();
> -		return NULL;
> +		pblist = NULL;
>  	}
>  
> +out:
> +	current->flags &= ~PF_MEMALLOC;
> +
>  	return pblist;
>  }
>  

-- 
Thanks, Sharp!
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux