lkml.org 
[lkml]   [2010]   [Jul]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] Tight check of pfn_valid on sparsemem - v4
    On Wed, Jul 28, 2010 at 10:14:51AM -0500, Christoph Lameter wrote:
    > On Wed, 28 Jul 2010, Minchan Kim wrote:
    >
    > > static inline int memmap_valid(unsigned long pfn)
    > > {
    > > struct page *page = pfn_to_page(pfn);
    > > struct page *__pg = virt_to_page(page);
    >
    > Does that work both for vmemmap and real mmapping?

    When Kame suggested this idea, he doesn't consider vmemmap model.
    (He prevent this featur's enabling by config !SPARSEMEM_VMEMMAP)

    config SPARSEMEM_HAS_HOLE
    bool "allow holes in sparsemem's memmap"
    depends on ARM && SPARSEMEM && !SPARSEMEM_VMEMMAP
    default n

    When I change it with ARCH_HAS_HOLES_MEMORYMODEL, it was my mistake.
    I can change it with ARCH_HAS_HOLES_MEMORYMODEL && !SPARSE_VMEMMAP.

    I wonder whether we supports VMEMMAP.
    That's because hole problem of sparsemem is specific on ARM.
    ARM forks uses it for saving memory space but VMEMMAP does use more memory.
    I think it's irony.

    >
    > > return page_private(__pg) == MAGIC_MEMMAP && PageReserved(__pg);
    > > }
    >
    > Problem is that pages may be allocated for the mmap from a variety of
    > places. The pages in mmap_init_zone() and allocated during boot may have
    > PageReserved set whereas the page allocated via vmemmap_alloc_block() have
    > PageReserved cleared since they came from the page allocator.
    >
    > You need to have consistent use of PageReserved in page structs for the
    > mmap in order to do this properly.

    Yes if we supports both model.

    >
    > Simplest scheme would be to clear PageReserved() in all page struct
    > associated with valid pages and clear those for page structs that do not
    > refer to valid pages.

    I can't understand your words.
    Clear PG_resereved in valid pages and invalid pages both?

    I guess your code look like that clear PG_revered on valid memmap
    but set PG_reserved on invalid memmap.
    Right?

    invalid memmap pages will be freed by free_memmap and will be used
    on any place. How do we make sure it has PG_reserved?

    Maybe I don't understand your point.


    >
    > Then
    >
    > mmap_valid = !PageReserved(xxx(pfn_to_page(pfn))

    --
    Kind regards,
    Minchan Kim


    \
     
     \ /
      Last update: 2010-07-28 17:59    [W:0.025 / U:120.712 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site