• T
    percpu: drop pcpu_chunk->page[] · ce3141a2
    Tejun Heo 提交于
    percpu core doesn't need to tack all the allocated pages.  It needs to
    know whether certain pages are populated and a way to reverse map
    address to page when freeing.  This patch drops pcpu_chunk->page[] and
    use populated bitmap and vmalloc_to_page() lookup instead.  Using
    vmalloc_to_page() exclusively is also possible but complicates first
    chunk handling, inflates cache footprint and prevents non-standard
    memory allocation for percpu memory.
    
    pcpu_chunk->page[] was used to track each page's allocation and
    allowed asymmetric population which happens during failure path;
    however, with single bitmap for all units, this is no longer possible.
    Bite the bullet and rewrite (de)populate functions so that things are
    done in clearly separated steps such that asymmetric population
    doesn't happen.  This makes the (de)population process much more
    modular and will also ease implementing non-standard memory usage in
    the future (e.g. large pages).
    
    This makes @get_page_fn parameter to pcpu_setup_first_chunk()
    unnecessary.  The parameter is dropped and all first chunk helpers are
    updated accordingly.  Please note that despite the volume most changes
    to first chunk helpers are symbol renames for variables which don't
    need to be referenced outside of the helper anymore.
    
    This change reduces memory usage and cache footprint of pcpu_chunk.
    Now only #unit_pages bits are necessary per chunk.
    
    [ Impact: reduced memory usage and cache footprint for bookkeeping ]
    Signed-off-by: NTejun Heo <tj@kernel.org>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: David Miller <davem@davemloft.net>
    ce3141a2
percpu.c 51.3 KB