Messages in this thread Patch in this message | | | From | "Rafael J. Wysocki" <> | Subject | Re: Userland swsusp failure (mm-related) | Date | Tue, 11 Apr 2006 23:33:22 +0200 |
| |
Hi,
On Sunday 09 April 2006 03:51, Nick Piggin wrote: > 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?
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; } - 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/
| |