lkml.org 
[lkml]   [2017]   [Jul]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC v6 08/62] powerpc: use helper functions in __hash_page_4K() for 64K PTE
    Date
    replace redundant code in __hash_page_4K() with helper
    functions pte_get_hash_gslot() and pte_set_hash_slot()

    Signed-off-by: Ram Pai <linuxram@us.ibm.com>
    ---
    arch/powerpc/mm/hash64_64k.c | 34 +++++++++-------------------------
    1 files changed, 9 insertions(+), 25 deletions(-)

    diff --git a/arch/powerpc/mm/hash64_64k.c b/arch/powerpc/mm/hash64_64k.c
    index 645f621..c658cb5 100644
    --- a/arch/powerpc/mm/hash64_64k.c
    +++ b/arch/powerpc/mm/hash64_64k.c
    @@ -39,9 +39,8 @@ int __hash_page_4K(unsigned long ea, unsigned long access, unsigned long vsid,
    {
    real_pte_t rpte;
    unsigned long hpte_group;
    - unsigned long *hidxp;
    unsigned int subpg_index;
    - unsigned long rflags, pa, hidx;
    + unsigned long rflags, pa;
    unsigned long old_pte, new_pte, subpg_pte;
    unsigned long vpn, hash, slot, gslot;
    unsigned long shift = mmu_psize_defs[MMU_PAGE_4K].shift;
    @@ -114,18 +113,13 @@ int __hash_page_4K(unsigned long ea, unsigned long access, unsigned long vsid,
    if (__rpte_sub_valid(rpte, subpg_index)) {
    int ret;

    - hash = hpt_hash(vpn, shift, ssize);
    - hidx = __rpte_to_hidx(rpte, subpg_index);
    - if (hidx & _PTEIDX_SECONDARY)
    - hash = ~hash;
    - slot = (hash & htab_hash_mask) * HPTES_PER_GROUP;
    - slot += hidx & _PTEIDX_GROUP_IX;
    -
    - ret = mmu_hash_ops.hpte_updatepp(slot, rflags, vpn,
    + gslot = pte_get_hash_gslot(vpn, shift, ssize, rpte,
    + subpg_index);
    + ret = mmu_hash_ops.hpte_updatepp(gslot, rflags, vpn,
    MMU_PAGE_4K, MMU_PAGE_4K,
    ssize, flags);
    /*
    - *if we failed because typically the HPTE wasn't really here
    + * if we failed because typically the HPTE wasn't really here
    * we try an insertion.
    */
    if (ret == -1)
    @@ -221,20 +215,10 @@ int __hash_page_4K(unsigned long ea, unsigned long access, unsigned long vsid,
    MMU_PAGE_4K, MMU_PAGE_4K, old_pte);
    return -1;
    }
    - /*
    - * Insert slot number & secondary bit in PTE second half,
    - * clear H_PAGE_BUSY and set appropriate HPTE slot bit
    - * Since we have H_PAGE_BUSY set on ptep, we can be sure
    - * nobody is undating hidx.
    - */
    - hidxp = (unsigned long *)(ptep + PTRS_PER_PTE);
    - rpte.hidx &= ~(0xfUL << (subpg_index << 2));
    - *hidxp = rpte.hidx | (slot << (subpg_index << 2));
    - /*
    - * check __real_pte for details on matching smp_rmb()
    - */
    - smp_wmb();
    - new_pte |= H_PAGE_HASHPTE;
    +
    + new_pte |= pte_set_hash_slot(ptep, rpte, subpg_index, slot);
    + new_pte |= H_PAGE_HASHPTE;
    +
    *ptep = __pte(new_pte & ~H_PAGE_BUSY);
    return 0;
    }
    --
    1.7.1
    \
     
     \ /
      Last update: 2017-07-16 06:13    [W:4.097 / U:0.732 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site