lkml.org 
[lkml]   [2011]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 9/9] xen/grant-table: use apply_to_page_range_batch()
    Date
    From: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>

    No need to call the callback per-pte.

    Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
    ---
    arch/x86/xen/grant-table.c | 28 ++++++++++++++++++----------
    1 files changed, 18 insertions(+), 10 deletions(-)

    diff --git a/arch/x86/xen/grant-table.c b/arch/x86/xen/grant-table.c
    index 5bf892a..11a8a45 100644
    --- a/arch/x86/xen/grant-table.c
    +++ b/arch/x86/xen/grant-table.c
    @@ -44,19 +44,27 @@

    #include <asm/pgtable.h>

    -static int map_pte_fn(pte_t *pte, unsigned long addr, void *data)
    +static int map_pte_fn(pte_t *pte, unsigned count, unsigned long addr, void *data)
    {
    unsigned long **frames = (unsigned long **)data;

    - set_pte_at(&init_mm, addr, pte, mfn_pte((*frames)[0], PAGE_KERNEL));
    - (*frames)++;
    + while (count--) {
    + set_pte_at(&init_mm, addr, pte, mfn_pte((*frames)[0], PAGE_KERNEL));
    + (*frames)++;
    + pte++;
    + addr += PAGE_SIZE;
    + }
    return 0;
    }

    -static int unmap_pte_fn(pte_t *pte, unsigned long addr, void *data)
    +static int unmap_pte_fn(pte_t *pte, unsigned count, unsigned long addr, void *data)
    {
    + while (count--) {
    + pte_clear(&init_mm, addr, pte);
    + addr += PAGE_SIZE;
    + pte++;
    + }

    - set_pte_at(&init_mm, addr, pte, __pte(0));
    return 0;
    }

    @@ -75,15 +83,15 @@ int arch_gnttab_map_shared(unsigned long *frames, unsigned long nr_gframes,
    *__shared = shared;
    }

    - rc = apply_to_page_range(&init_mm, (unsigned long)shared,
    - PAGE_SIZE * nr_gframes,
    - map_pte_fn, &frames);
    + rc = apply_to_page_range_batch(&init_mm, (unsigned long)shared,
    + PAGE_SIZE * nr_gframes,
    + map_pte_fn, &frames);
    return rc;
    }

    void arch_gnttab_unmap_shared(struct grant_entry *shared,
    unsigned long nr_gframes)
    {
    - apply_to_page_range(&init_mm, (unsigned long)shared,
    - PAGE_SIZE * nr_gframes, unmap_pte_fn, NULL);
    + apply_to_page_range_batch(&init_mm, (unsigned long)shared,
    + PAGE_SIZE * nr_gframes, unmap_pte_fn, NULL);
    }
    --
    1.7.3.4


    \
     
     \ /
      Last update: 2011-01-24 23:59    [W:4.981 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site