[lkml]   [2011]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Subject[PATCH 0/9] Add apply_to_page_range_batch() and use it
    From: Jeremy Fitzhardinge <>

    I'm proposing this series for 2.6.39.

    We've had apply_to_page_range() for a while, which is a general way to
    apply a function to ptes across a range of addresses - including
    allocating any missing parts of the pagetable as needed. This logic
    is replicated in a number of places throughout the kernel, but it
    hasn't been widely replaced by this function, partly because of
    concerns about the overhead of calling the function once per pte.

    This series adds apply_to_page_range_batch() (and reimplements
    apply_to_page_range() in terms of it), which calls the pte operation
    function once per pte page, moving the inner loop into the callback

    apply_to_page_range(_batch) also calls its callback with lazy mmu
    updates enabled, which allows batching of the operations in
    environments where this is beneficial (ie, virtualization). The only
    caveat this introduces is callbacks can't expect to immediately see
    the effects of the pte updates in memory.

    Since this is effectively identical to the code in lib/ioremap.c and
    mm/vmalloc.c (twice!), I replace their open-coded variants. I'm sure
    there are others places in the kernel which could do with this (I only
    stumbled over ioremap by accident).

    I also add a minor optimisation to vunmap_page_range() to use a
    plain pte_clear() rather than the more expensive and unnecessary

    Jeremy Fitzhardinge (9):
    mm: remove unused "token" argument from apply_to_page_range callback.
    mm: add apply_to_page_range_batch()
    ioremap: use apply_to_page_range_batch() for ioremap_page_range()
    vmalloc: use plain pte_clear() for unmaps
    vmalloc: use apply_to_page_range_batch() for vunmap_page_range()
    vmalloc: use apply_to_page_range_batch() for
    vmalloc: use apply_to_page_range_batch() in alloc_vm_area()
    xen/mmu: use apply_to_page_range_batch() in
    xen/grant-table: use apply_to_page_range_batch()

    arch/x86/xen/grant-table.c | 30 +++++----
    arch/x86/xen/mmu.c | 18 +++--
    include/linux/mm.h | 9 ++-
    lib/ioremap.c | 85 +++++++------------------
    mm/memory.c | 57 ++++++++++++-----
    mm/vmalloc.c | 150 ++++++++++++--------------------------------
    6 files changed, 140 insertions(+), 209 deletions(-)


     \ /
      Last update: 2011-01-25 00:01    [W:0.030 / U:3.744 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site