lkml.org 
[lkml]   [2019]   [May]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 09/14] nds32: switch to generic version of pte allocation
    Date
    The nds32 implementation of pte_alloc_one_kernel() differs from the generic
    in the use of __GFP_RETRY_MAYFAIL flag, which is removed after the
    conversion.

    The nds32 version of pte_alloc_one() missed the call to pgtable_page_ctor()
    and also used __GFP_RETRY_MAYFAIL. Switching it to use generic
    __pte_alloc_one() for the PTE page allocation ensures that page table
    constructor is run and the user page tables are allocated with
    __GFP_ACCOUNT.

    The conversion to the generic version of pte_free_kernel() removes the NULL
    check for pte.

    The pte_free() version on nds32 is identical to the generic one and can be
    simply dropped.

    Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
    ---
    arch/nds32/include/asm/pgalloc.h | 31 ++++---------------------------
    1 file changed, 4 insertions(+), 27 deletions(-)

    diff --git a/arch/nds32/include/asm/pgalloc.h b/arch/nds32/include/asm/pgalloc.h
    index 3c5fee5..954696c 100644
    --- a/arch/nds32/include/asm/pgalloc.h
    +++ b/arch/nds32/include/asm/pgalloc.h
    @@ -9,6 +9,9 @@
    #include <asm/tlbflush.h>
    #include <asm/proc-fns.h>

    +#define __HAVE_ARCH_PTE_ALLOC_ONE
    +#include <asm-generic/pgalloc.h> /* for pte_{alloc,free}_one */
    +
    /*
    * Since we have only two-level page tables, these are trivial
    */
    @@ -22,22 +25,11 @@ extern void pgd_free(struct mm_struct *mm, pgd_t * pgd);

    #define check_pgt_cache() do { } while (0)

    -static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
    -{
    - pte_t *pte;
    -
    - pte =
    - (pte_t *) __get_free_page(GFP_KERNEL | __GFP_RETRY_MAYFAIL |
    - __GFP_ZERO);
    -
    - return pte;
    -}
    -
    static inline pgtable_t pte_alloc_one(struct mm_struct *mm)
    {
    pgtable_t pte;

    - pte = alloc_pages(GFP_KERNEL | __GFP_RETRY_MAYFAIL | __GFP_ZERO, 0);
    + pte = __pte_alloc_one(mm, GFP_PGTABLE_USER);
    if (pte)
    cpu_dcache_wb_page((unsigned long)page_address(pte));

    @@ -45,21 +37,6 @@ static inline pgtable_t pte_alloc_one(struct mm_struct *mm)
    }

    /*
    - * Free one PTE table.
    - */
    -static inline void pte_free_kernel(struct mm_struct *mm, pte_t * pte)
    -{
    - if (pte) {
    - free_page((unsigned long)pte);
    - }
    -}
    -
    -static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
    -{
    - __free_page(pte);
    -}
    -
    -/*
    * Populate the pmdp entry with a pointer to the pte. This pmd is part
    * of the mm address space.
    *
    --
    2.7.4
    \
     
     \ /
      Last update: 2019-05-08 08:19    [W:2.188 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site