--- v3
+++ v6
@@ -1,87 +1,25 @@
From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
-This patch simplify hpte_decode for easy switching of virtual address to
-virtual page number in the later patch
+Don't open code the same
+Reviewed-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
---
- arch/powerpc/mm/hash_native_64.c | 49 ++++++++++++++++++++++----------------
- 1 file changed, 28 insertions(+), 21 deletions(-)
+ arch/powerpc/platforms/cell/beat_htab.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/arch/powerpc/mm/hash_native_64.c b/arch/powerpc/mm/hash_native_64.c
-index 90039bc..660b8bb 100644
---- a/arch/powerpc/mm/hash_native_64.c
-+++ b/arch/powerpc/mm/hash_native_64.c
-@@ -351,9 +351,10 @@ static void native_hpte_invalidate(unsigned long slot, unsigned long va,
- static void hpte_decode(struct hash_pte *hpte, unsigned long slot,
- int *psize, int *ssize, unsigned long *va)
- {
-+ unsigned long avpn, pteg, vpi;
- unsigned long hpte_r = hpte->r;
- unsigned long hpte_v = hpte->v;
-- unsigned long avpn;
-+ unsigned long vsid, seg_off;
- int i, size, shift, penc;
+diff --git a/arch/powerpc/platforms/cell/beat_htab.c b/arch/powerpc/platforms/cell/beat_htab.c
+index 943c9d3..b83077e 100644
+--- a/arch/powerpc/platforms/cell/beat_htab.c
++++ b/arch/powerpc/platforms/cell/beat_htab.c
+@@ -259,7 +259,7 @@ static void beat_lpar_hpte_updateboltedpp(unsigned long newpp,
+ u64 dummy0, dummy1;
- if (!(hpte_v & HPTE_V_LARGE))
-@@ -380,32 +381,38 @@ static void hpte_decode(struct hash_pte *hpte, unsigned long slot,
- }
+ vsid = get_kernel_vsid(ea, MMU_SEGSIZE_256M);
+- va = (vsid << 28) | (ea & 0x0fffffff);
++ va = hpt_va(ea, vsid, MMU_SEGSIZE_256M);
- /* This works for all page sizes, and for 256M and 1T segments */
-+ *ssize = hpte_v >> HPTE_V_SSIZE_SHIFT;
- shift = mmu_psize_defs[size].shift;
-- avpn = (HPTE_V_AVPN_VAL(hpte_v) & ~mmu_psize_defs[size].avpnm) << 23;
--
-- if (shift < 23) {
-- unsigned long vpi, vsid, pteg;
-
-- pteg = slot / HPTES_PER_GROUP;
-- if (hpte_v & HPTE_V_SECONDARY)
-- pteg = ~pteg;
-- switch (hpte_v >> HPTE_V_SSIZE_SHIFT) {
-- case MMU_SEGSIZE_256M:
-- vpi = ((avpn >> 28) ^ pteg) & htab_hash_mask;
-- break;
-- case MMU_SEGSIZE_1T:
-- vsid = avpn >> 40;
-+ avpn = (HPTE_V_AVPN_VAL(hpte_v) & ~mmu_psize_defs[size].avpnm);
-+ pteg = slot / HPTES_PER_GROUP;
-+ if (hpte_v & HPTE_V_SECONDARY)
-+ pteg = ~pteg;
-+
-+ switch (*ssize) {
-+ case MMU_SEGSIZE_256M:
-+ /* We only have 28 - 23 bits of seg_off in avpn */
-+ seg_off = (avpn & 0x1f) << 23;
-+ vsid = avpn >> 5;
-+ /* We can find more bits from the pteg value */
-+ if (shift < 23) {
-+ vpi = (vsid ^ pteg) & htab_hash_mask;
-+ seg_off |= vpi << shift;
-+ }
-+ *va = vsid << SID_SHIFT | seg_off;
-+ case MMU_SEGSIZE_1T:
-+ /* We only have 40 - 23 bits of seg_off in avpn */
-+ seg_off = (avpn & 0x1ffff) << 23;
-+ vsid = avpn >> 17;
-+ if (shift < 23) {
- vpi = (vsid ^ (vsid << 25) ^ pteg) & htab_hash_mask;
-- break;
-- default:
-- avpn = vpi = size = 0;
-+ seg_off |= vpi << shift;
- }
-- avpn |= (vpi << mmu_psize_defs[size].shift);
-+ *va = vsid << SID_SHIFT_1T | seg_off;
-+ default:
-+ *va = size = 0;
- }
--
-- *va = avpn;
- *psize = size;
-- *ssize = hpte_v >> HPTE_V_SSIZE_SHIFT;
- }
-
- /*
+ raw_spin_lock(&beat_htab_lock);
+ slot = beat_lpar_hpte_find(va, psize);
--
1.7.10