lkml.org 
[lkml]   [2004]   [Nov]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[1/7] Xen VMM patch set : add ptep_establish_new to make va available
    Date
    From

    This patch adds 'ptep_establish_new', in keeping with the
    existing 'ptep_establish', but for use where a mapping is being
    established where there was previously none present. This
    function is useful (rather than just using set_pte) because
    having the virtual address available enables a very important
    optimisation for arch-xen. We introduce
    HAVE_ARCH_PTEP_ESTABLISH_NEW and define a generic implementation
    in asm-generic/pgtable.h, following the pattern of the existing
    ptep_establish.

    Signed-off-by: ian.pratt@cl.cam.ac.uk

    ---

    diff -Nurp pristine-linux-2.6.10-rc2/include/asm-generic/pgtable.h tmp-linux-2.6.10-rc2-xen.patch/include/asm-generic/pgtable.h
    --- pristine-linux-2.6.10-rc2/include/asm-generic/pgtable.h 2004-11-15 01:27:18.000000000 +0000
    +++ tmp-linux-2.6.10-rc2-xen.patch/include/asm-generic/pgtable.h 2004-11-18 19:58:13.000000000 +0000
    @@ -42,6 +42,16 @@ do { \
    } while (0)
    #endif

    +#ifndef __HAVE_ARCH_PTEP_ESTABLISH_NEW
    +/*
    + * Establish a mapping where none previously existed
    + */
    +#define ptep_establish_new(__vma, __address, __ptep, __entry) \
    +do { \
    + set_pte(__ptep, __entry); \
    +} while (0)
    +#endif
    +
    #ifndef __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG
    static inline int ptep_test_and_clear_young(pte_t *ptep)
    {
    diff -Nurp pristine-linux-2.6.10-rc2/mm/memory.c tmp-linux-2.6.10-rc2-xen.patch/mm/memory.c
    --- pristine-linux-2.6.10-rc2/mm/memory.c 2004-11-15 01:27:26.000000000 +0000
    +++ tmp-linux-2.6.10-rc2-xen.patch/mm/memory.c 2004-11-18 20:07:39.000000000 +0000
    @@ -1472,7 +1472,7 @@ do_anonymous_page(struct mm_struct *mm,
    page_add_anon_rmap(page, vma, addr);
    }

    - set_pte(page_table, entry);
    + ptep_establish_new(vma, addr, page_table, entry);
    pte_unmap(page_table);

    /* No need to invalidate - it was non-present before */
    @@ -1577,7 +1577,7 @@ retry:
    entry = mk_pte(new_page, vma->vm_page_prot);
    if (write_access)
    entry = maybe_mkwrite(pte_mkdirty(entry), vma);
    - set_pte(page_table, entry);
    + ptep_establish_new(vma, address, page_table, entry);
    if (anon) {
    lru_cache_add_active(new_page);
    page_add_anon_rmap(new_page, vma, address);

    -
    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/

    \
     
     \ /
      Last update: 2005-03-22 14:08    [W:5.438 / U:0.300 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site