From: Simon Horman <horms@verge.net.au>
Date: Wed, 09 May 2007 19:26:16 +0900
Subject: Set alternate location for /proc/iomem on ia64 xen
X-Upstream-Status: not sent

Use /proc/iomem_machine for ia64 xen where pysical and machine efi maps
differ.  Without this kexec gets a very jaded view of the world, and
/proc/vmcore after a kdump will only have a partial memory dump. Requires a
companion patch to kexec-tools.

Signed-off-by: Simon Horman <horms@verge.net.au>


Index: kexec-tools-testing-20070330/kexec/arch/ia64/kexec-iomem.c
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ kexec-tools-testing-20070330/kexec/arch/ia64/kexec-iomem.c	2007-08-28 12:24:08.000000000 +0900
@@ -0,0 +1,24 @@
+#include <stdint.h>
+#include <stdio.h>
+#include "../../kexec.h"
+#include "../../crashdump.h"
+
+static const char proc_iomem_str[]= "/proc/iomem";
+static const char proc_iomem_machine_str[]= "/proc/iomem_machine";
+
+/*
+ * On IA64 XEN the EFI tables are virtualised.
+ * For this reason on such systems /proc/iomem_machine is provided,
+ * which is based on the hypervisor's (machine's) EFI tables.
+ * If Xen is in use, then /proc/iomem is used for memory regions relating
+ * to the currently running dom0 kernel, and /proc/iomem_machine is used
+ * for regions relating to the machine itself or the hypervisor.
+ * If Xen is not in used, then /proc/iomem is always used.
+ */
+const char *proc_iomem(int machine)
+{
+	if (machine && xen_present())
+		return proc_iomem_machine_str;
+        return proc_iomem_str;
+}
+
Index: kexec-tools-testing-20070330/kexec/arch/ia64/Makefile
===================================================================
--- kexec-tools-testing-20070330.orig/kexec/arch/ia64/Makefile	2007-08-28 12:10:51.000000000 +0900
+++ kexec-tools-testing-20070330/kexec/arch/ia64/Makefile	2007-08-28 12:12:38.000000000 +0900
@@ -1,6 +1,7 @@
 #
 # kexec ia64 (linux booting linux)
 #
+KEXEC_C_SRCS+= kexec/arch/ia64/kexec-iomem.c
 KEXEC_C_SRCS+= kexec/arch/ia64/kexec-ia64.c 
 KEXEC_C_SRCS+= kexec/arch/ia64/kexec-elf-ia64.c 
 KEXEC_C_SRCS+= kexec/arch/ia64/kexec-elf-rel-ia64.c
