lkml.org 
[lkml]   [2020]   [Mar]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v1 19/46] powerpc/mm: Refactor pte_update() on nohash/32
    Date
    When CONFIG_PTE_64BIT is set, pte_update() operates on
    'unsigned long long'
    When CONFIG_PTE_64BIT is not set, pte_update() operates on
    'unsigned long'

    In asm/page.h, we have pte_basic_t which is 'unsigned long long'
    when CONFIG_PTE_64BIT is set and 'unsigned long' otherwise.

    Refactor pte_update() using pte_basic_t.

    Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
    ---
    arch/powerpc/include/asm/nohash/32/pgtable.h | 26 +++-----------------
    1 file changed, 4 insertions(+), 22 deletions(-)

    diff --git a/arch/powerpc/include/asm/nohash/32/pgtable.h b/arch/powerpc/include/asm/nohash/32/pgtable.h
    index 523c4c3876c5..9eaf386a747b 100644
    --- a/arch/powerpc/include/asm/nohash/32/pgtable.h
    +++ b/arch/powerpc/include/asm/nohash/32/pgtable.h
    @@ -222,12 +222,9 @@ static inline void pmd_clear(pmd_t *pmdp)
    * to properly flush the virtually tagged instruction cache of
    * those implementations.
    */
    -#ifndef CONFIG_PTE_64BIT
    -static inline unsigned long pte_update(pte_t *p,
    - unsigned long clr,
    - unsigned long set)
    +static inline pte_basic_t pte_update(pte_t *p, unsigned long clr, unsigned long set)
    {
    -#ifdef PTE_ATOMIC_UPDATES
    +#if defined(PTE_ATOMIC_UPDATES) && !defined(CONFIG_PTE_64BIT)
    unsigned long old, tmp;

    __asm__ __volatile__("\
    @@ -241,8 +238,8 @@ static inline unsigned long pte_update(pte_t *p,
    : "r" (p), "r" (clr), "r" (set), "m" (*p)
    : "cc" );
    #else /* PTE_ATOMIC_UPDATES */
    - unsigned long old = pte_val(*p);
    - unsigned long new = (old & ~clr) | set;
    + pte_basic_t old = pte_val(*p);
    + pte_basic_t new = (old & ~(pte_basic_t)clr) | set;

    #if defined(CONFIG_PPC_8xx) && defined(CONFIG_PPC_16K_PAGES)
    p->pte = p->pte1 = p->pte2 = p->pte3 = new;
    @@ -257,21 +254,6 @@ static inline unsigned long pte_update(pte_t *p,
    #endif
    return old;
    }
    -#else /* CONFIG_PTE_64BIT */
    -static inline unsigned long long pte_update(pte_t *p,
    - unsigned long clr,
    - unsigned long set)
    -{
    - unsigned long long old = pte_val(*p);
    - *p = __pte((old & ~(unsigned long long)clr) | set);
    -
    -#ifdef CONFIG_44x
    - if ((old & _PAGE_USER) && (old & _PAGE_EXEC))
    - icache_44x_need_flush = 1;
    -#endif
    - return old;
    -}
    -#endif /* CONFIG_PTE_64BIT */

    #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG
    static inline int __ptep_test_and_clear_young(unsigned int context, unsigned long addr, pte_t *ptep)
    --
    2.25.0
    \
     
     \ /
      Last update: 2020-03-16 13:39    [W:3.062 / U:0.144 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site