Index: xen-unstable.hg/xen/arch/ia64/linux-xen/mca_asm.S
===================================================================
--- xen-unstable.hg.orig/xen/arch/ia64/linux-xen/mca_asm.S	2007-12-05 19:47:04.000000000 +0900
+++ xen-unstable.hg/xen/arch/ia64/linux-xen/mca_asm.S	2007-12-05 19:47:52.000000000 +0900
@@ -335,6 +335,15 @@ ia64_do_tlb_purge:
 	srlz.d
 	;;
 #endif
+	// 6. Xen Heap
+	// XXX: Fixme: needs to be calculated
+	movl r16=XEN_HEAP_ADDR
+	mov r18=KERNEL_TR_PAGE_SHIFT<<2
+	;;
+	ptr.d r16,r18
+	;;
+	srlz.d
+	;;
 #endif
 	// Now branch away to caller.
 	br.sptk.many b1
Index: xen-unstable.hg/xen/arch/ia64/xen/machine_kexec.c
===================================================================
--- xen-unstable.hg.orig/xen/arch/ia64/xen/machine_kexec.c	2007-12-05 19:47:04.000000000 +0900
+++ xen-unstable.hg/xen/arch/ia64/xen/machine_kexec.c	2007-12-05 19:47:37.000000000 +0900
@@ -33,7 +33,8 @@ typedef asmlinkage NORET_TYPE void (*rel
 					unsigned long cpu_data_pa,
 					unsigned long kernel_start,
 					unsigned long page_offset,
-					unsigned long vhpt)
+					unsigned long vhpt,
+					unsigned long xen_heap)
 					ATTRIB_NORET;
 
 #define kexec_flush_icache_page(page)					\
@@ -87,9 +88,11 @@ static void ia64_machine_kexec(struct un
 	vhpt = __va_ul(vcpu_vhpt_maddr(current));
 	BUG_ON(!vhpt);
 	rnk = (relocate_new_kernel_t)&code_addr;
+	// XXX: Fixme: last argument, the xen heap address, should
+	// be generated
 	(*rnk)(image->indirection_page, image->start_address, ia64_boot_param,
 	       GRANULEROUNDDOWN((unsigned long) pal_vaddr), cpu_data_pa,
-	       KERNEL_START, PAGE_OFFSET, vhpt);
+	       KERNEL_START, PAGE_OFFSET, vhpt, XEN_HEAP_ADDR);
 	BUG();
 }
 
