Messages in this thread | | | Date | Wed, 14 Jul 2010 16:10:45 +0900 | From | KAMEZAWA Hiroyuki <> | Subject | Re: [RFC] Tight check of pfn_valid on sparsemem |
| |
On Wed, 14 Jul 2010 15:44:41 +0900 Minchan Kim <minchan.kim@gmail.com> wrote:
> Hi, Kame. > > On Wed, Jul 14, 2010 at 9:23 AM, KAMEZAWA Hiroyuki > <kamezawa.hiroyu@jp.fujitsu.com> wrote: > > On Wed, 14 Jul 2010 01:44:23 +0900 > > Minchan Kim <minchan.kim@gmail.com> wrote: > > > >> > If you _really_ can't make the section size smaller, and the vast > >> > majority of the sections are fully populated, you could hack something > >> > in. We could, for instance, have a global list that's mostly readonly > >> > which tells you which sections need to be have their sizes closely > >> > inspected. That would work OK if, for instance, you only needed to > >> > check a couple of memory sections in the system. It'll start to suck if > >> > you made the lists very long. > >> > >> Thanks for advise. As I say, I hope Russell accept 16M section. > >> > > > > It seems what I needed was good sleep.... > > How about this if 16M section is not acceptable ? > > > > == NOT TESTED AT ALL, EVEN NOT COMPILED == > > > > register address of mem_section to memmap itself's page struct's pg->private field. > > This means the page is used for memmap of the section. > > Otherwise, the page is used for other purpose and memmap has a hole. > > It's a very good idea. :) > But can this handle case that a page on memmap pages have struct page > descriptor of hole? > I mean one page can include 128 page descriptor(4096 / 32). yes.
> In there, 64 page descriptor is valid but remain 64 page descriptor is on hole. > In this case, free_memmap doesn't free the page.
yes. but in that case, there are valid page decriptor for 64pages of holes. pfn_valid() should return true but PG_reserved is set. (This is usual behavior.)
My intention is that
- When all 128 page descriptors are unused, free_memmap() will free it. In that case, clear page->private of a page for freed page descriptors.
- When some of page descriptors are used, free_memmap() can't free it and page->private points to &mem_section. We may have memmap for memory hole but pfn_valid() is a function to check there is memmap or not. The bahavior of pfn_valid() is valid. Anyway, you can't free only half of page.
If my code doesn't seem to work as above, it's bug.
Thanks, -Kame
-- 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/
| |