提交 1531cff4 编写于 作者: A Aneesh Kumar K.V 提交者: Michael Ellerman

powerpc/mm/hash: Remove the superfluous bitwise operation when find hpte group

When computing the starting slot number for a hash page table group we used
to do this
hpte_group = ((hash & htab_hash_mask) * HPTES_PER_GROUP) & ~0x7UL;

Multiplying with 8 (HPTES_PER_GROUP) imply the last three bits are 0. Hence we
really don't need to clear then separately.
Signed-off-by: NAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
上级 7d4340bb
...@@ -260,7 +260,7 @@ static int pseries_find(unsigned long ea, int psize, bool primary, u64 *v, u64 * ...@@ -260,7 +260,7 @@ static int pseries_find(unsigned long ea, int psize, bool primary, u64 *v, u64 *
/* to check in the secondary hash table, we invert the hash */ /* to check in the secondary hash table, we invert the hash */
if (!primary) if (!primary)
hash = ~hash; hash = ~hash;
hpte_group = ((hash & htab_hash_mask) * HPTES_PER_GROUP) & ~0x7UL; hpte_group = (hash & htab_hash_mask) * HPTES_PER_GROUP;
/* see if we can find an entry in the hpte with this hash */ /* see if we can find an entry in the hpte with this hash */
for (i = 0; i < HPTES_PER_GROUP; i += 4, hpte_group += 4) { for (i = 0; i < HPTES_PER_GROUP; i += 4, hpte_group += 4) {
lpar_rc = plpar_pte_read_4(0, hpte_group, (void *)ptes); lpar_rc = plpar_pte_read_4(0, hpte_group, (void *)ptes);
......
...@@ -80,7 +80,7 @@ int __hash_page_4K(unsigned long ea, unsigned long access, unsigned long vsid, ...@@ -80,7 +80,7 @@ int __hash_page_4K(unsigned long ea, unsigned long access, unsigned long vsid,
hash = hpt_hash(vpn, shift, ssize); hash = hpt_hash(vpn, shift, ssize);
repeat: repeat:
hpte_group = ((hash & htab_hash_mask) * HPTES_PER_GROUP) & ~0x7UL; hpte_group = (hash & htab_hash_mask) * HPTES_PER_GROUP;
/* Insert into the hash table, primary slot */ /* Insert into the hash table, primary slot */
slot = mmu_hash_ops.hpte_insert(hpte_group, vpn, pa, rflags, 0, slot = mmu_hash_ops.hpte_insert(hpte_group, vpn, pa, rflags, 0,
...@@ -89,7 +89,7 @@ int __hash_page_4K(unsigned long ea, unsigned long access, unsigned long vsid, ...@@ -89,7 +89,7 @@ int __hash_page_4K(unsigned long ea, unsigned long access, unsigned long vsid,
* Primary is full, try the secondary * Primary is full, try the secondary
*/ */
if (unlikely(slot == -1)) { if (unlikely(slot == -1)) {
hpte_group = ((~hash & htab_hash_mask) * HPTES_PER_GROUP) & ~0x7UL; hpte_group = (~hash & htab_hash_mask) * HPTES_PER_GROUP;
slot = mmu_hash_ops.hpte_insert(hpte_group, vpn, pa, slot = mmu_hash_ops.hpte_insert(hpte_group, vpn, pa,
rflags, rflags,
HPTE_V_SECONDARY, HPTE_V_SECONDARY,
...@@ -97,8 +97,8 @@ int __hash_page_4K(unsigned long ea, unsigned long access, unsigned long vsid, ...@@ -97,8 +97,8 @@ int __hash_page_4K(unsigned long ea, unsigned long access, unsigned long vsid,
MMU_PAGE_4K, ssize); MMU_PAGE_4K, ssize);
if (slot == -1) { if (slot == -1) {
if (mftb() & 0x1) if (mftb() & 0x1)
hpte_group = ((hash & htab_hash_mask) * hpte_group = (hash & htab_hash_mask) *
HPTES_PER_GROUP) & ~0x7UL; HPTES_PER_GROUP;
mmu_hash_ops.hpte_remove(hpte_group); mmu_hash_ops.hpte_remove(hpte_group);
/* /*
* FIXME!! Should be try the group from which we removed ? * FIXME!! Should be try the group from which we removed ?
......
...@@ -154,7 +154,7 @@ int __hash_page_4K(unsigned long ea, unsigned long access, unsigned long vsid, ...@@ -154,7 +154,7 @@ int __hash_page_4K(unsigned long ea, unsigned long access, unsigned long vsid,
} }
hash = hpt_hash(vpn, shift, ssize); hash = hpt_hash(vpn, shift, ssize);
repeat: repeat:
hpte_group = ((hash & htab_hash_mask) * HPTES_PER_GROUP) & ~0x7UL; hpte_group = (hash & htab_hash_mask) * HPTES_PER_GROUP;
/* Insert into the hash table, primary slot */ /* Insert into the hash table, primary slot */
slot = mmu_hash_ops.hpte_insert(hpte_group, vpn, pa, rflags, 0, slot = mmu_hash_ops.hpte_insert(hpte_group, vpn, pa, rflags, 0,
...@@ -165,7 +165,7 @@ int __hash_page_4K(unsigned long ea, unsigned long access, unsigned long vsid, ...@@ -165,7 +165,7 @@ int __hash_page_4K(unsigned long ea, unsigned long access, unsigned long vsid,
if (unlikely(slot == -1)) { if (unlikely(slot == -1)) {
bool soft_invalid; bool soft_invalid;
hpte_group = ((~hash & htab_hash_mask) * HPTES_PER_GROUP) & ~0x7UL; hpte_group = (~hash & htab_hash_mask) * HPTES_PER_GROUP;
slot = mmu_hash_ops.hpte_insert(hpte_group, vpn, pa, slot = mmu_hash_ops.hpte_insert(hpte_group, vpn, pa,
rflags, HPTE_V_SECONDARY, rflags, HPTE_V_SECONDARY,
MMU_PAGE_4K, MMU_PAGE_4K, MMU_PAGE_4K, MMU_PAGE_4K,
...@@ -193,8 +193,7 @@ int __hash_page_4K(unsigned long ea, unsigned long access, unsigned long vsid, ...@@ -193,8 +193,7 @@ int __hash_page_4K(unsigned long ea, unsigned long access, unsigned long vsid,
* that we do not get the same soft-invalid slot. * that we do not get the same soft-invalid slot.
*/ */
if (soft_invalid || (mftb() & 0x1)) if (soft_invalid || (mftb() & 0x1))
hpte_group = ((hash & htab_hash_mask) * hpte_group = (hash & htab_hash_mask) * HPTES_PER_GROUP;
HPTES_PER_GROUP) & ~0x7UL;
mmu_hash_ops.hpte_remove(hpte_group); mmu_hash_ops.hpte_remove(hpte_group);
/* /*
...@@ -288,7 +287,7 @@ int __hash_page_64K(unsigned long ea, unsigned long access, ...@@ -288,7 +287,7 @@ int __hash_page_64K(unsigned long ea, unsigned long access,
hash = hpt_hash(vpn, shift, ssize); hash = hpt_hash(vpn, shift, ssize);
repeat: repeat:
hpte_group = ((hash & htab_hash_mask) * HPTES_PER_GROUP) & ~0x7UL; hpte_group = (hash & htab_hash_mask) * HPTES_PER_GROUP;
/* Insert into the hash table, primary slot */ /* Insert into the hash table, primary slot */
slot = mmu_hash_ops.hpte_insert(hpte_group, vpn, pa, rflags, 0, slot = mmu_hash_ops.hpte_insert(hpte_group, vpn, pa, rflags, 0,
...@@ -298,7 +297,7 @@ int __hash_page_64K(unsigned long ea, unsigned long access, ...@@ -298,7 +297,7 @@ int __hash_page_64K(unsigned long ea, unsigned long access,
* Primary is full, try the secondary * Primary is full, try the secondary
*/ */
if (unlikely(slot == -1)) { if (unlikely(slot == -1)) {
hpte_group = ((~hash & htab_hash_mask) * HPTES_PER_GROUP) & ~0x7UL; hpte_group = (~hash & htab_hash_mask) * HPTES_PER_GROUP;
slot = mmu_hash_ops.hpte_insert(hpte_group, vpn, pa, slot = mmu_hash_ops.hpte_insert(hpte_group, vpn, pa,
rflags, rflags,
HPTE_V_SECONDARY, HPTE_V_SECONDARY,
...@@ -306,8 +305,8 @@ int __hash_page_64K(unsigned long ea, unsigned long access, ...@@ -306,8 +305,8 @@ int __hash_page_64K(unsigned long ea, unsigned long access,
MMU_PAGE_64K, ssize); MMU_PAGE_64K, ssize);
if (slot == -1) { if (slot == -1) {
if (mftb() & 0x1) if (mftb() & 0x1)
hpte_group = ((hash & htab_hash_mask) * hpte_group = (hash & htab_hash_mask) *
HPTES_PER_GROUP) & ~0x7UL; HPTES_PER_GROUP;
mmu_hash_ops.hpte_remove(hpte_group); mmu_hash_ops.hpte_remove(hpte_group);
/* /*
* FIXME!! Should be try the group from which we removed ? * FIXME!! Should be try the group from which we removed ?
......
...@@ -1753,8 +1753,7 @@ long hpte_insert_repeating(unsigned long hash, unsigned long vpn, ...@@ -1753,8 +1753,7 @@ long hpte_insert_repeating(unsigned long hash, unsigned long vpn,
long slot; long slot;
repeat: repeat:
hpte_group = ((hash & htab_hash_mask) * hpte_group = (hash & htab_hash_mask) * HPTES_PER_GROUP;
HPTES_PER_GROUP) & ~0x7UL;
/* Insert into the hash table, primary slot */ /* Insert into the hash table, primary slot */
slot = mmu_hash_ops.hpte_insert(hpte_group, vpn, pa, rflags, vflags, slot = mmu_hash_ops.hpte_insert(hpte_group, vpn, pa, rflags, vflags,
...@@ -1762,15 +1761,14 @@ long hpte_insert_repeating(unsigned long hash, unsigned long vpn, ...@@ -1762,15 +1761,14 @@ long hpte_insert_repeating(unsigned long hash, unsigned long vpn,
/* Primary is full, try the secondary */ /* Primary is full, try the secondary */
if (unlikely(slot == -1)) { if (unlikely(slot == -1)) {
hpte_group = ((~hash & htab_hash_mask) * hpte_group = (~hash & htab_hash_mask) * HPTES_PER_GROUP;
HPTES_PER_GROUP) & ~0x7UL;
slot = mmu_hash_ops.hpte_insert(hpte_group, vpn, pa, rflags, slot = mmu_hash_ops.hpte_insert(hpte_group, vpn, pa, rflags,
vflags | HPTE_V_SECONDARY, vflags | HPTE_V_SECONDARY,
psize, psize, ssize); psize, psize, ssize);
if (slot == -1) { if (slot == -1) {
if (mftb() & 0x1) if (mftb() & 0x1)
hpte_group = ((hash & htab_hash_mask) * hpte_group = (hash & htab_hash_mask) *
HPTES_PER_GROUP)&~0x7UL; HPTES_PER_GROUP;
mmu_hash_ops.hpte_remove(hpte_group); mmu_hash_ops.hpte_remove(hpte_group);
goto repeat; goto repeat;
......
...@@ -128,7 +128,7 @@ int __hash_page_thp(unsigned long ea, unsigned long access, unsigned long vsid, ...@@ -128,7 +128,7 @@ int __hash_page_thp(unsigned long ea, unsigned long access, unsigned long vsid,
new_pmd |= H_PAGE_HASHPTE; new_pmd |= H_PAGE_HASHPTE;
repeat: repeat:
hpte_group = ((hash & htab_hash_mask) * HPTES_PER_GROUP) & ~0x7UL; hpte_group = (hash & htab_hash_mask) * HPTES_PER_GROUP;
/* Insert into the hash table, primary slot */ /* Insert into the hash table, primary slot */
slot = mmu_hash_ops.hpte_insert(hpte_group, vpn, pa, rflags, 0, slot = mmu_hash_ops.hpte_insert(hpte_group, vpn, pa, rflags, 0,
...@@ -137,16 +137,15 @@ int __hash_page_thp(unsigned long ea, unsigned long access, unsigned long vsid, ...@@ -137,16 +137,15 @@ int __hash_page_thp(unsigned long ea, unsigned long access, unsigned long vsid,
* Primary is full, try the secondary * Primary is full, try the secondary
*/ */
if (unlikely(slot == -1)) { if (unlikely(slot == -1)) {
hpte_group = ((~hash & htab_hash_mask) * hpte_group = (~hash & htab_hash_mask) * HPTES_PER_GROUP;
HPTES_PER_GROUP) & ~0x7UL;
slot = mmu_hash_ops.hpte_insert(hpte_group, vpn, pa, slot = mmu_hash_ops.hpte_insert(hpte_group, vpn, pa,
rflags, rflags,
HPTE_V_SECONDARY, HPTE_V_SECONDARY,
psize, lpsize, ssize); psize, lpsize, ssize);
if (slot == -1) { if (slot == -1) {
if (mftb() & 0x1) if (mftb() & 0x1)
hpte_group = ((hash & htab_hash_mask) * hpte_group = (hash & htab_hash_mask) *
HPTES_PER_GROUP) & ~0x7UL; HPTES_PER_GROUP;
mmu_hash_ops.hpte_remove(hpte_group); mmu_hash_ops.hpte_remove(hpte_group);
goto repeat; goto repeat;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册