Hi,
On Wednesday, 10 of August 2005 23:50, Pavel Machek wrote:
> Hi!
>
> > > Swsusp is the main "is valid ram" user I have in mind here. It
> > > wants to know whether or not it should save and restore the
> > > memory of a given `struct page`.
> >
> > Why can't it follow the rmap chain?
>
> It is walking physical memory, not memory managment chains. I need
> something like:
>
> static int saveable(struct zone * zone, unsigned long * zone_pfn)
> {
> unsigned long pfn = *zone_pfn + zone->zone_start_pfn;
> struct page * page;
>
> if (!pfn_valid(pfn))
> return 0;
>
> page = pfn_to_page(pfn);
> BUG_ON(PageReserved(page) && PageNosave(page));
> if (PageNosave(page))
> return 0;
> if (PageReserved(page) && pfn_is_nosave(pfn)) {
This only is a trick to avoid calling pfn_is_nosave(pfn) for every single page
that is neither PageNosave nor PageNosaveFree, isn't it?
> pr_debug("[nosave pfn 0x%lx]", pfn);
> return 0;
> }
> if (PageNosaveFree(page))
> return 0;
>
> return 1;
> }
IMO it is safe to drop PageReserved from this function completely, which is
done in the following (experimental) patch (tested on x86-64).
Greets,
Rafael
Signed-off-by: Rafael J. Wysocki <[email protected]>
Index: linux-2.6.13-rc5-mm1/kernel/power/swsusp.c
===================================================================
--- linux-2.6.13-rc5-mm1.orig/kernel/power/swsusp.c
+++ linux-2.6.13-rc5-mm1/kernel/power/swsusp.c
@@ -674,15 +674,14 @@ static int saveable(struct zone * zone,
return 0;
page = pfn_to_page(pfn);
- BUG_ON(PageReserved(page) && PageNosave(page));
if (PageNosave(page))
return 0;
- if (PageReserved(page) && pfn_is_nosave(pfn)) {
- pr_debug("[nosave pfn 0x%lx]", pfn);
- return 0;
- }
if (PageNosaveFree(page))
return 0;
+ if (pfn_is_nosave(pfn)) {
+ pr_debug(" [nosave pfn 0x%lx]\n", pfn);
+ return 0;
+ }
return 1;
}
--
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
-- Lewis Carroll "Alice's Adventures in Wonderland"
-
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]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
|
|