Index: 20071119-ia64/xen/arch/ia64/xen/ivt.S
===================================================================
--- 20071119-ia64.orig/xen/arch/ia64/xen/ivt.S	2007-11-26 00:06:34.000000000 -0700
+++ 20071119-ia64/xen/arch/ia64/xen/ivt.S	2007-11-26 00:09:18.000000000 -0700
@@ -153,15 +153,21 @@
 	cmp.eq p8,p0=0x18,r17		// 0xc...
 	cmp.eq p9,p0=0x1c,r17		// 0xe...
 	;;
-	cmp.eq.and p8,p0=r25,r23	// rr[6] == XEN_EFI_RID
-	cmp.eq.and p9,p0=r25,r24	// rr[7] == XEN_EFI_RID
+	cmp.ne.and p8,p0=r25,r23	// rr[6] == XEN_EFI_RID
+	cmp.ne.and p9,p0=r25,r24	// rr[7] == XEN_EFI_RID
 	;;
-(p8)	br.cond.spnt late_alt_dtlb_miss
-(p9)	br.cond.spnt late_alt_dtlb_miss
+(p8)	br.cond.spnt fast_tlb_miss_reflect
+(p9)	br.cond.spnt fast_tlb_miss_reflect
 	;;
 
-	br.cond.sptk fast_tlb_miss_reflect
+	// EFI PAGE size is IA64_GRANULE_SIZE
+	// itir's key should be 0, as should the reserved space
+	// thus we can just set itir = (IA64_GRANULE_SHIFT << 2)
+	movl r20=(IA64_GRANULE_SHIFT<<2)
+	;;
+	mov cr.itir=r20
 	;;
+	br.cond.sptk late_alt_dtlb_miss
 END(dtlb_miss)
 
 	.org ia64_ivt+0x0c00
