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