Index: linux-2.6.18-mm3/arch/ia64/kernel/ivt.S
===================================================================
--- linux-2.6.18-mm3.orig/arch/ia64/kernel/ivt.S	2006-10-09 15:51:47.766205881 -0700
+++ linux-2.6.18-mm3/arch/ia64/kernel/ivt.S	2006-10-09 16:19:08.255876342 -0700
@@ -431,14 +431,15 @@ ENTRY(nested_dtlb_miss)
 	mov r18=cr.itir
 	shr.u r17=r16,61			// get the region number into r17
 	;;
-	extr.u r18=r18,2,6			// get the faulting page size
 	cmp.eq p6,p7=5,r17			// is faulting address in region 5?
 	;;
-	add r22=-PAGE_SHIFT,r18			// adjustment for hugetlb address
-	add r18=PGDIR_SHIFT-PAGE_SHIFT+3,r18
+	extr.u r18=r18,2,6			// get the faulting page size
 	srlz.d
 	LOAD_PHYSICAL(p6, r19, swapper_pg_dir)	// region 5 is rooted at swapper_pg_dir
 	;;
+	add r22=-PAGE_SHIFT,r18			// adjustment for hugetlb address
+	add r18=PGDIR_SHIFT-PAGE_SHIFT+3,r18
+	;;
 	shr.u r22=r16,r22
 	shr.u r18=r21,r18
 (p7)	dep r17=r17,r19,(PAGE_SHIFT-3),3	// put region number bits in place