Index: xen-unstable.hg/xen/include/asm-ia64/linux/asm/sal.h
===================================================================
--- xen-unstable.hg.orig/xen/include/asm-ia64/linux/asm/sal.h	2007-11-30 15:13:46.000000000 +0900
+++ xen-unstable.hg/xen/include/asm-ia64/linux/asm/sal.h	2007-11-30 16:37:07.000000000 +0900
@@ -48,15 +48,21 @@ extern spinlock_t sal_lock;
 /* SAL spec _requires_ eight args for each call. */
 #define __SAL_CALL(result,a0,a1,a2,a3,a4,a5,a6,a7)	\
 	result = (*ia64_sal)(a0,a1,a2,a3,a4,a5,a6,a7)
+#define __SAL_CALL_DBG(result,a0,a1,a2,a3,a4,a5,a6,a7)	\
+	printk("%s: __SAL_CALL: 0x%lx 0x%lx 0x%lx 0x%lx "	\
+	       "0x%lx 0x%lx 0x%lx 0x%lx\n", __FUNCTION__,	\
+	       a0, a1, a2, a3, a4, a5, a6, a7);			\
+	__SAL_CALL(result,a0,a1,a2,a3,a4,a5,a6,a7)
 
 # define SAL_CALL(result,args...) do {				\
 	unsigned long __ia64_sc_flags;				\
 	struct ia64_fpreg __ia64_sc_fr[6];			\
 	XEN_EFI_RR_DECLARE(rr6, rr7);				\
+	printk("%s: SALL_CALL\n", __FUNCTION__);		\
 	ia64_save_scratch_fpregs(__ia64_sc_fr);			\
 	spin_lock_irqsave(&sal_lock, __ia64_sc_flags);		\
 	XEN_EFI_RR_SAVE(rr6, rr7);				\
-	__SAL_CALL(result, args);				\
+	__SAL_CALL_DBG(result, args);				\
 	XEN_EFI_RR_RESTORE(rr6, rr7);				\
 	spin_unlock_irqrestore(&sal_lock, __ia64_sc_flags);	\
 	ia64_load_scratch_fpregs(__ia64_sc_fr);			\
@@ -66,10 +72,11 @@ extern spinlock_t sal_lock;
 	unsigned long __ia64_scn_flags;			\
 	struct ia64_fpreg __ia64_scn_fr[6];		\
 	XEN_EFI_RR_DECLARE(rr6, rr7);			\
+	printk("%s: SALL_CALL_NOLOCK\n", __FUNCTION__);		\
 	ia64_save_scratch_fpregs(__ia64_scn_fr);	\
 	local_irq_save(__ia64_scn_flags);		\
 	XEN_EFI_RR_SAVE(rr6, rr7);			\
-	__SAL_CALL(result, args);			\
+	__SAL_CALL_DBG(result, args);			\
 	XEN_EFI_RR_RESTORE(rr6, rr7);			\
 	local_irq_restore(__ia64_scn_flags);		\
 	ia64_load_scratch_fpregs(__ia64_scn_fr);	\
@@ -78,10 +85,11 @@ extern spinlock_t sal_lock;
 # define SAL_CALL_REENTRANT(result,args...) do {	\
 	struct ia64_fpreg __ia64_scs_fr[6];		\
 	XEN_EFI_RR_DECLARE(rr6, rr7);			\
+	printk("%s: SALL_CALL_REENTRANT\n", __FUNCTION__);		\
 	ia64_save_scratch_fpregs(__ia64_scs_fr);	\
 	preempt_disable();				\
 	XEN_EFI_RR_SAVE(rr6, rr7);			\
-	__SAL_CALL(result, args);			\
+	__SAL_CALL_DBG(result, args);			\
 	XEN_EFI_RR_RESTORE(rr6, rr7);			\
 	preempt_enable();				\
 	ia64_load_scratch_fpregs(__ia64_scs_fr);	\
Index: xen-unstable.hg/xen/arch/ia64/linux-xen/mca.c
===================================================================
--- xen-unstable.hg.orig/xen/arch/ia64/linux-xen/mca.c	2007-11-30 15:15:03.000000000 +0900
+++ xen-unstable.hg/xen/arch/ia64/linux-xen/mca.c	2007-11-30 16:53:10.000000000 +0900
@@ -228,6 +228,8 @@ ia64_log_init(int sal_info_type)
 
 	// SAL will tell us the maximum size of any error record of this type
 	max_size = ia64_sal_get_state_info_size(sal_info_type);
+	printk("%s: type=%d max_size=%lu\n", __FUNCTION__, sal_info_type,
+	       max_size);
 	if (!max_size)
 		/* alloc_bootmem() doesn't like zero-sized allocations! */
 		return;
@@ -342,10 +344,18 @@ ia64_log_queue(int sal_info_type, int vi
 	sal_queue_entry_t	    *e;
 	unsigned long		    flags;
 
+	return 0;
 	IA64_LOG_LOCK(sal_info_type);
 
 	/* Get the process state information */
 	log_buffer = IA64_LOG_NEXT_BUFFER(sal_info_type);
+	{
+		#define ALIGN_UP(addr, size) \
+			(((addr) + ((size) - 1)) & (~((size) - 1)))
+		u64 max_size = ia64_sal_get_state_info_size(sal_info_type);
+		u64 buf_size = ALIGN_UP(max_size, PAGE_SIZE);
+		memset(log_buffer, 0x7, buf_size);
+	}
 
 	total_len = ia64_sal_get_state_info(sal_info_type, (u64 *)log_buffer);
 
