lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Sat, 15 Jul 2017 20:56:08 -0700 From: Ram Pai <linuxram@...ibm.com> To: linuxppc-dev@...ts.ozlabs.org, linux-kernel@...r.kernel.org, linux-arch@...r.kernel.org, linux-mm@...ck.org, x86@...nel.org, linux-doc@...r.kernel.org, linux-kselftest@...r.kernel.org Cc: benh@...nel.crashing.org, paulus@...ba.org, mpe@...erman.id.au, khandual@...ux.vnet.ibm.com, aneesh.kumar@...ux.vnet.ibm.com, bsingharora@...il.com, dave.hansen@...el.com, hbabu@...ibm.com, linuxram@...ibm.com, arnd@...db.de, akpm@...ux-foundation.org, corbet@....net, mingo@...hat.com, mhocko@...nel.org Subject: [RFC v6 06/62] powerpc: use helper functions in __hash_page_64K() for 64K PTE replace redundant code in __hash_page_64K() with helper functions pte_get_hash_gslot() and pte_set_hash_slot() Signed-off-by: Ram Pai <linuxram@...ibm.com> --- arch/powerpc/mm/hash64_64k.c | 24 ++++-------------------- 1 files changed, 4 insertions(+), 20 deletions(-) diff --git a/arch/powerpc/mm/hash64_64k.c b/arch/powerpc/mm/hash64_64k.c index 0012618..645f621 100644 --- a/arch/powerpc/mm/hash64_64k.c +++ b/arch/powerpc/mm/hash64_64k.c @@ -244,7 +244,6 @@ int __hash_page_64K(unsigned long ea, unsigned long access, unsigned long flags, int ssize) { real_pte_t rpte; - unsigned long *hidxp; unsigned long hpte_group; unsigned long rflags, pa; unsigned long old_pte, new_pte; @@ -289,18 +288,12 @@ int __hash_page_64K(unsigned long ea, unsigned long access, vpn = hpt_vpn(ea, vsid, ssize); if (unlikely(old_pte & H_PAGE_HASHPTE)) { - unsigned long hash, slot, hidx; - - hash = hpt_hash(vpn, shift, ssize); - hidx = __rpte_to_hidx(rpte, 0); - if (hidx & _PTEIDX_SECONDARY) - hash = ~hash; - slot = (hash & htab_hash_mask) * HPTES_PER_GROUP; - slot += hidx & _PTEIDX_GROUP_IX; + unsigned long gslot; /* * There MIGHT be an HPTE for this pte */ - if (mmu_hash_ops.hpte_updatepp(slot, rflags, vpn, MMU_PAGE_64K, + gslot = pte_get_hash_gslot(vpn, shift, ssize, rpte, 0); + if (mmu_hash_ops.hpte_updatepp(gslot, rflags, vpn, MMU_PAGE_64K, MMU_PAGE_64K, ssize, flags) == -1) old_pte &= ~_PAGE_HPTEFLAGS; @@ -350,17 +343,8 @@ int __hash_page_64K(unsigned long ea, unsigned long access, return -1; } - /* - * Insert slot number & secondary bit in PTE second half. - */ - hidxp = (unsigned long *)(ptep + PTRS_PER_PTE); - rpte.hidx &= ~(0xfUL); - *hidxp = rpte.hidx | (slot & 0xfUL); - /* - * check __real_pte for details on matching smp_rmb() - */ - smp_wmb(); new_pte = (new_pte & ~_PAGE_HPTEFLAGS) | H_PAGE_HASHPTE; + new_pte |= pte_set_hash_slot(ptep, rpte, 0, slot); } *ptep = __pte(new_pte & ~H_PAGE_BUSY); return 0; -- 1.7.1
Powered by blists - more mailing lists