lkml.org 
[lkml]   [2012]   [Nov]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 04/46] x86/mm: Introduce pte_accessible()
    Date
    From: Rik van Riel <riel@redhat.com>

    We need pte_present to return true for _PAGE_PROTNONE pages, to indicate that
    the pte is associated with a page.

    However, for TLB flushing purposes, we would like to know whether the pte
    points to an actually accessible page. This allows us to skip remote TLB
    flushes for pages that are not actually accessible.

    Fill in this method for x86 and provide a safe (but slower) method
    on other architectures.

    Signed-off-by: Rik van Riel <riel@redhat.com>
    Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Fixed-by: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Link: http://lkml.kernel.org/n/tip-66p11te4uj23gevgh4j987ip@git.kernel.org
    [ Added Linus's review fixes. ]
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    ---
    arch/x86/include/asm/pgtable.h | 6 ++++++
    include/asm-generic/pgtable.h | 4 ++++
    2 files changed, 10 insertions(+)

    diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
    index a1f780d..5fe03aa 100644
    --- a/arch/x86/include/asm/pgtable.h
    +++ b/arch/x86/include/asm/pgtable.h
    @@ -407,6 +407,12 @@ static inline int pte_present(pte_t a)
    return pte_flags(a) & (_PAGE_PRESENT | _PAGE_PROTNONE);
    }

    +#define pte_accessible pte_accessible
    +static inline int pte_accessible(pte_t a)
    +{
    + return pte_flags(a) & _PAGE_PRESENT;
    +}
    +
    static inline int pte_hidden(pte_t pte)
    {
    return pte_flags(pte) & _PAGE_HIDDEN;
    diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h
    index b36ce40..48fc1dc 100644
    --- a/include/asm-generic/pgtable.h
    +++ b/include/asm-generic/pgtable.h
    @@ -219,6 +219,10 @@ static inline int pmd_same(pmd_t pmd_a, pmd_t pmd_b)
    #define move_pte(pte, prot, old_addr, new_addr) (pte)
    #endif

    +#ifndef pte_accessible
    +# define pte_accessible(pte) ((void)(pte),1)
    +#endif
    +
    #ifndef flush_tlb_fix_spurious_fault
    #define flush_tlb_fix_spurious_fault(vma, address) flush_tlb_page(vma, address)
    #endif
    --
    1.7.9.2


    \
     
     \ /
      Last update: 2012-11-21 13:21    [W:4.134 / U:0.172 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site