Inter-revision diff: patch 2

Comparing v3 (message) to v6 (message)

--- 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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help