Index: xen-unstable.hg/xen/include/asm-ia64/linux-xen/asm/pal.h
===================================================================
--- xen-unstable.hg.orig/xen/include/asm-ia64/linux-xen/asm/pal.h	2007-12-08 11:58:34.000000000 +0900
+++ xen-unstable.hg/xen/include/asm-ia64/linux-xen/asm/pal.h	2007-12-08 11:58:44.000000000 +0900
@@ -80,6 +80,9 @@
 
 #include <linux/types.h>
 #include <asm/fpu.h>
+#ifdef XEN
+#include <linux/efi.h>
+#endif
 
 /*
  * Data types needed to pass information into PAL procedures and
@@ -772,36 +775,51 @@ extern void ia64_load_scratch_fpregs (st
 
 #define PAL_CALL(iprv,a0,a1,a2,a3) do {			\
 	struct ia64_fpreg fr[6];			\
+	XEN_EFI_RR_DECLARE(rr6, rr7);			\
 	ia64_save_scratch_fpregs(fr);			\
+	XEN_EFI_RR_SAVE(rr6, rr7);			\
 	iprv = ia64_pal_call_static(a0, a1, a2, a3, 0);	\
+	XEN_EFI_RR_RESTORE(rr6, rr7);			\
 	ia64_load_scratch_fpregs(fr);			\
 } while (0)
 
 #define PAL_CALL_IC_OFF(iprv,a0,a1,a2,a3) do {		\
 	struct ia64_fpreg fr[6];			\
+	XEN_EFI_RR_DECLARE(rr6, rr7);			\
 	ia64_save_scratch_fpregs(fr);			\
+	XEN_EFI_RR_SAVE(rr6, rr7);			\
 	iprv = ia64_pal_call_static(a0, a1, a2, a3, 1);	\
+	XEN_EFI_RR_RESTORE(rr6, rr7);			\
 	ia64_load_scratch_fpregs(fr);			\
 } while (0)
 
 #define PAL_CALL_STK(iprv,a0,a1,a2,a3) do {		\
 	struct ia64_fpreg fr[6];			\
+	XEN_EFI_RR_DECLARE(rr6, rr7);			\
 	ia64_save_scratch_fpregs(fr);			\
+	XEN_EFI_RR_SAVE(rr6, rr7);			\
 	iprv = ia64_pal_call_stacked(a0, a1, a2, a3);	\
+	XEN_EFI_RR_RESTORE(rr6, rr7);			\
 	ia64_load_scratch_fpregs(fr);			\
 } while (0)
 
 #define PAL_CALL_PHYS(iprv,a0,a1,a2,a3) do {			\
 	struct ia64_fpreg fr[6];				\
+	XEN_EFI_RR_DECLARE(rr6, rr7);				\
 	ia64_save_scratch_fpregs(fr);				\
+	XEN_EFI_RR_SAVE(rr6, rr7);				\
 	iprv = ia64_pal_call_phys_static(a0, a1, a2, a3);	\
+	XEN_EFI_RR_RESTORE(rr6, rr7);				\
 	ia64_load_scratch_fpregs(fr);				\
 } while (0)
 
 #define PAL_CALL_PHYS_STK(iprv,a0,a1,a2,a3) do {		\
 	struct ia64_fpreg fr[6];				\
+	XEN_EFI_RR_DECLARE(rr6, rr7);				\
 	ia64_save_scratch_fpregs(fr);				\
+	XEN_EFI_RR_SAVE(rr6, rr7);				\
 	iprv = ia64_pal_call_phys_stacked(a0, a1, a2, a3);	\
+	XEN_EFI_RR_RESTORE(rr6, rr7);				\
 	ia64_load_scratch_fpregs(fr);				\
 } while (0)
 
