From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Rafael J. Wysocki" Subject: Re: [RFC][PATCH 2/3] swsusp: Do not use page flags Date: Tue, 13 Mar 2007 10:16:11 +0100 References: <200703041507.57122.rjw@sisk.pl> <45F62CD2.5030103@yahoo.com.au> In-Reply-To: <45F62CD2.5030103@yahoo.com.au> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200703131016.12935.rjw@sisk.pl> Sender: owner-linux-mm@kvack.org Return-Path: To: Nick Piggin Cc: Pavel Machek , Christoph Lameter , linux-mm@kvack.org, pm list , Johannes Berg , Peter Zijlstra List-ID: On Tuesday, 13 March 2007 05:47, Nick Piggin wrote: > Rafael J. Wysocki wrote: > > > } > > > > /** > > + * This structure represents a range of page frames the contents of which > > + * should not be saved during the suspend. > > + */ > > + > > +struct nosave_region { > > + struct list_head list; > > + unsigned long start_pfn; > > + unsigned long end_pfn; > > +}; > > + > > +static LIST_HEAD(nosave_regions); > > + > > +/** > > + * register_nosave_region - register a range of page frames the contents > > + * of which should not be saved during the suspend (to be used in the early > > + * initializatoion code) > > + */ > > + > > +void __init > > +register_nosave_region(unsigned long start_pfn, unsigned long end_pfn) > > +{ > > + struct nosave_region *region; > > + > > + if (start_pfn >= end_pfn) > > + return; > > + > > + if (!list_empty(&nosave_regions)) { > > + /* Try to extend the previous region (they should be sorted) */ > > + region = list_entry(nosave_regions.prev, > > + struct nosave_region, list); > > + if (region->end_pfn == start_pfn) { > > + region->end_pfn = end_pfn; > > + goto Report; > > + } > > + } > > + /* This allocation cannot fail */ > > + region = alloc_bootmem_low(sizeof(struct nosave_region)); > > + region->start_pfn = start_pfn; > > + region->end_pfn = end_pfn; > > + list_add_tail(®ion->list, &nosave_regions); > > + Report: > > + printk("swsusp: Registered nosave memory region: %016lx - %016lx\n", > > + start_pfn << PAGE_SHIFT, end_pfn << PAGE_SHIFT); > > +} > > > I wonder why you reimplemented this and put it in snapshot.c, rather than > use my version which was nicely in its own file, had appropriate locking, > etc.? Well, the locking is not necessary and we only need a list for that. Also, mark_nosave_pages() refers to a function that's invisible outside snapshot.c and I didn't think it was a good idea to separate mark_nosave_pages() from register_nosave_region(). Greetings, Rafael -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org