[kernel] r7627 - in dists/trunk/linux-2.6/debian/patches:
features/all/vserver features/all/xen series
Bastian Blank
waldi at costa.debian.org
Thu Oct 19 09:08:51 UTC 2006
Author: waldi
Date: Thu Oct 19 09:08:49 2006
New Revision: 7627
Added:
dists/trunk/linux-2.6/debian/patches/features/all/xen/fedora-36252.patch
- copied, changed from r7471, /dists/trunk/linux-2.6/debian/patches/features/all/xen/fedora-36175.patch
Removed:
dists/trunk/linux-2.6/debian/patches/features/all/vserver/vs2.0.2.1-t8.patch
dists/trunk/linux-2.6/debian/patches/features/all/xen/fedora-36175.patch
Modified:
dists/trunk/linux-2.6/debian/patches/series/1-extra
dists/trunk/linux-2.6/debian/patches/series/2-extra
dists/trunk/linux-2.6/debian/patches/series/3-extra
Log:
* debian/patches/features/all/vserver/vs2.0.2.1-t8.patch,
debian/patches/features/all/xen/fedora-36175.patch: Remove.
* debian/patches/features/all/xen/fedora-36252.patch: Add.
* debian/patches/series/1-extra, debian/patches/series/2-extra,
debian/patches/series/3-extra: Update.
Copied: dists/trunk/linux-2.6/debian/patches/features/all/xen/fedora-36252.patch (from r7471, /dists/trunk/linux-2.6/debian/patches/features/all/xen/fedora-36175.patch)
==============================================================================
--- /dists/trunk/linux-2.6/debian/patches/features/all/xen/fedora-36175.patch (original)
+++ dists/trunk/linux-2.6/debian/patches/features/all/xen/fedora-36252.patch Thu Oct 19 09:08:49 2006
@@ -1,5 +1,5 @@
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/boot-xen/Makefile linux-2.6.18-xen/arch/i386/boot-xen/Makefile
---- linux-2.6.18/arch/i386/boot-xen/Makefile 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/boot-xen/Makefile linux-2.6.18-xen/arch/i386/boot-xen/Makefile
+--- linux-2.6.18.1/arch/i386/boot-xen/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/boot-xen/Makefile 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,21 @@
+
@@ -23,9 +23,9 @@
+ install -m0664 .config $(INSTALL_ROOT)/boot/config-$(XINSTALL_NAME)$(INSTALL_SUFFIX)
+ install -m0664 System.map $(INSTALL_ROOT)/boot/System.map-$(XINSTALL_NAME)$(INSTALL_SUFFIX)
+ ln -f -s vmlinuz-$(XINSTALL_NAME)$(INSTALL_SUFFIX) $(INSTALL_ROOT)/boot/vmlinuz-$(VERSION).$(PATCHLEVEL)$(XENGUEST)$(INSTALL_SUFFIX)
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/Kconfig linux-2.6.18-xen/arch/i386/Kconfig
---- linux-2.6.18/arch/i386/Kconfig 2006-09-20 05:42:06.000000000 +0200
-+++ linux-2.6.18-xen/arch/i386/Kconfig 2006-09-04 16:31:00.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/Kconfig linux-2.6.18-xen/arch/i386/Kconfig
+--- linux-2.6.18.1/arch/i386/Kconfig 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/arch/i386/Kconfig 2006-09-22 16:38:35.000000000 +0200
@@ -16,6 +16,7 @@
config GENERIC_TIME
@@ -306,8 +306,8 @@
config KTIME_SCALAR
bool
default y
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/Kconfig.cpu linux-2.6.18-xen/arch/i386/Kconfig.cpu
---- linux-2.6.18/arch/i386/Kconfig.cpu 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/Kconfig.cpu linux-2.6.18-xen/arch/i386/Kconfig.cpu
+--- linux-2.6.18.1/arch/i386/Kconfig.cpu 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/i386/Kconfig.cpu 2006-09-04 16:31:00.000000000 +0200
@@ -251,7 +251,7 @@
@@ -325,8 +325,8 @@
- depends on (MWINCHIP3D || MWINCHIP2 || MCRUSOE || MEFFICEON || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || MK8 || MVIAC3_2 || MGEODEGX1 || MGEODE_LX) && !X86_NUMAQ
+ depends on (MWINCHIP3D || MWINCHIP2 || MCRUSOE || MEFFICEON || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || MK8 || MVIAC3_2 || MGEODEGX1 || MGEODE_LX) && !X86_NUMAQ && !X86_XEN
default y
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/Kconfig.debug linux-2.6.18-xen/arch/i386/Kconfig.debug
---- linux-2.6.18/arch/i386/Kconfig.debug 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/Kconfig.debug linux-2.6.18-xen/arch/i386/Kconfig.debug
+--- linux-2.6.18.1/arch/i386/Kconfig.debug 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/i386/Kconfig.debug 2006-09-04 16:31:00.000000000 +0200
@@ -79,6 +79,7 @@
config DOUBLEFAULT
@@ -336,8 +336,8 @@
help
This option allows trapping of rare doublefault exceptions that
would otherwise cause a system to silently reboot. Disabling this
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/acpi/boot-xen.c linux-2.6.18-xen/arch/i386/kernel/acpi/boot-xen.c
---- linux-2.6.18/arch/i386/kernel/acpi/boot-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/acpi/boot-xen.c linux-2.6.18-xen/arch/i386/kernel/acpi/boot-xen.c
+--- linux-2.6.18.1/arch/i386/kernel/acpi/boot-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/kernel/acpi/boot-xen.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,1168 @@
+/*
@@ -1508,8 +1508,8 @@
+
+ return 0;
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/acpi/Makefile linux-2.6.18-xen/arch/i386/kernel/acpi/Makefile
---- linux-2.6.18/arch/i386/kernel/acpi/Makefile 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/acpi/Makefile linux-2.6.18-xen/arch/i386/kernel/acpi/Makefile
+--- linux-2.6.18.1/arch/i386/kernel/acpi/Makefile 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/i386/kernel/acpi/Makefile 2006-09-04 16:31:00.000000000 +0200
@@ -6,3 +6,7 @@
obj-y += cstate.o processor.o
@@ -1519,8 +1519,8 @@
+include $(srctree)/scripts/Makefile.xen
+obj-y := $(call cherrypickxen, $(obj-y), $(src))
+endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/alternative.c linux-2.6.18-xen/arch/i386/kernel/alternative.c
---- linux-2.6.18/arch/i386/kernel/alternative.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/alternative.c linux-2.6.18-xen/arch/i386/kernel/alternative.c
+--- linux-2.6.18.1/arch/i386/kernel/alternative.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/i386/kernel/alternative.c 2006-09-04 16:31:00.000000000 +0200
@@ -4,7 +4,11 @@
#include <asm/alternative.h>
@@ -1546,8 +1546,8 @@
DPRINTK("%s: vsyscall fixup: %p => %p\n",
__FUNCTION__, a->instr, instr);
}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/apic-xen.c linux-2.6.18-xen/arch/i386/kernel/apic-xen.c
---- linux-2.6.18/arch/i386/kernel/apic-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/apic-xen.c linux-2.6.18-xen/arch/i386/kernel/apic-xen.c
+--- linux-2.6.18.1/arch/i386/kernel/apic-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/kernel/apic-xen.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,160 @@
+/*
@@ -1710,8 +1710,8 @@
+
+ return 0;
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/asm-offsets.c linux-2.6.18-xen/arch/i386/kernel/asm-offsets.c
---- linux-2.6.18/arch/i386/kernel/asm-offsets.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/asm-offsets.c linux-2.6.18-xen/arch/i386/kernel/asm-offsets.c
+--- linux-2.6.18.1/arch/i386/kernel/asm-offsets.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/i386/kernel/asm-offsets.c 2006-09-04 16:31:00.000000000 +0200
@@ -66,9 +66,14 @@
OFFSET(pbe_orig_address, pbe, orig_address);
@@ -1729,8 +1729,8 @@
DEFINE(PAGE_SIZE_asm, PAGE_SIZE);
DEFINE(VDSO_PRELINK, VDSO_PRELINK);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/cpu/common-xen.c linux-2.6.18-xen/arch/i386/kernel/cpu/common-xen.c
---- linux-2.6.18/arch/i386/kernel/cpu/common-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/cpu/common-xen.c linux-2.6.18-xen/arch/i386/kernel/cpu/common-xen.c
+--- linux-2.6.18.1/arch/i386/kernel/cpu/common-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/kernel/cpu/common-xen.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,739 @@
+#include <linux/init.h>
@@ -2472,8 +2472,8 @@
+ per_cpu(cpu_tlbstate, cpu).active_mm = &init_mm;
+}
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/cpu/Makefile linux-2.6.18-xen/arch/i386/kernel/cpu/Makefile
---- linux-2.6.18/arch/i386/kernel/cpu/Makefile 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/cpu/Makefile linux-2.6.18-xen/arch/i386/kernel/cpu/Makefile
+--- linux-2.6.18.1/arch/i386/kernel/cpu/Makefile 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/i386/kernel/cpu/Makefile 2006-09-04 16:31:00.000000000 +0200
@@ -17,3 +17,8 @@
@@ -2484,8 +2484,8 @@
+include $(srctree)/scripts/Makefile.xen
+obj-y := $(call cherrypickxen, $(obj-y), $(src))
+endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/cpu/mtrr/main-xen.c linux-2.6.18-xen/arch/i386/kernel/cpu/mtrr/main-xen.c
---- linux-2.6.18/arch/i386/kernel/cpu/mtrr/main-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/cpu/mtrr/main-xen.c linux-2.6.18-xen/arch/i386/kernel/cpu/mtrr/main-xen.c
+--- linux-2.6.18.1/arch/i386/kernel/cpu/mtrr/main-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/kernel/cpu/mtrr/main-xen.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,197 @@
+#include <linux/init.h>
@@ -2685,8 +2685,8 @@
+}
+
+subsys_initcall(mtrr_init);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/cpu/mtrr/Makefile linux-2.6.18-xen/arch/i386/kernel/cpu/mtrr/Makefile
---- linux-2.6.18/arch/i386/kernel/cpu/mtrr/Makefile 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/cpu/mtrr/Makefile linux-2.6.18-xen/arch/i386/kernel/cpu/mtrr/Makefile
+--- linux-2.6.18.1/arch/i386/kernel/cpu/mtrr/Makefile 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/i386/kernel/cpu/mtrr/Makefile 2006-09-04 16:31:00.000000000 +0200
@@ -3,3 +3,10 @@
obj-y += cyrix.o
@@ -2699,14 +2699,14 @@
+obj-y := $(call filterxen, $(obj-y), $(n-obj-xen))
+obj-y := $(call cherrypickxen, $(obj-y))
+endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/early_printk-xen.c linux-2.6.18-xen/arch/i386/kernel/early_printk-xen.c
---- linux-2.6.18/arch/i386/kernel/early_printk-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/early_printk-xen.c linux-2.6.18-xen/arch/i386/kernel/early_printk-xen.c
+--- linux-2.6.18.1/arch/i386/kernel/early_printk-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/kernel/early_printk-xen.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,2 @@
+
+#include "../../x86_64/kernel/early_printk-xen.c"
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/entry.S linux-2.6.18-xen/arch/i386/kernel/entry.S
---- linux-2.6.18/arch/i386/kernel/entry.S 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/entry.S linux-2.6.18-xen/arch/i386/kernel/entry.S
+--- linux-2.6.18.1/arch/i386/kernel/entry.S 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/i386/kernel/entry.S 2006-09-21 01:33:31.000000000 +0200
@@ -269,7 +269,7 @@
CFI_STARTPROC simple
@@ -2735,8 +2735,8 @@
pushfl; \
pushl $__KERNEL_CS; \
pushl $sysenter_past_esp
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/entry-xen.S linux-2.6.18-xen/arch/i386/kernel/entry-xen.S
---- linux-2.6.18/arch/i386/kernel/entry-xen.S 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/entry-xen.S linux-2.6.18-xen/arch/i386/kernel/entry-xen.S
+--- linux-2.6.18.1/arch/i386/kernel/entry-xen.S 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/kernel/entry-xen.S 2006-09-21 01:33:31.000000000 +0200
@@ -0,0 +1,1213 @@
+/*
@@ -3952,8 +3952,8 @@
+#include "syscall_table.S"
+
+syscall_table_size=(.-sys_call_table)
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/fixup.c linux-2.6.18-xen/arch/i386/kernel/fixup.c
---- linux-2.6.18/arch/i386/kernel/fixup.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/fixup.c linux-2.6.18-xen/arch/i386/kernel/fixup.c
+--- linux-2.6.18.1/arch/i386/kernel/fixup.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/kernel/fixup.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,92 @@
+/******************************************************************************
@@ -4048,8 +4048,8 @@
+ return 0;
+}
+__initcall(fixup_init);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/head-xen.S linux-2.6.18-xen/arch/i386/kernel/head-xen.S
---- linux-2.6.18/arch/i386/kernel/head-xen.S 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/head-xen.S linux-2.6.18-xen/arch/i386/kernel/head-xen.S
+--- linux-2.6.18.1/arch/i386/kernel/head-xen.S 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/kernel/head-xen.S 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,200 @@
+
@@ -4252,8 +4252,8 @@
+ ELFNOTE(Xen, XEN_ELFNOTE_PAE_MODE, .asciz, "no")
+#endif
+ ELFNOTE(Xen, XEN_ELFNOTE_LOADER, .asciz, "generic")
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/init_task-xen.c linux-2.6.18-xen/arch/i386/kernel/init_task-xen.c
---- linux-2.6.18/arch/i386/kernel/init_task-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/init_task-xen.c linux-2.6.18-xen/arch/i386/kernel/init_task-xen.c
+--- linux-2.6.18.1/arch/i386/kernel/init_task-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/kernel/init_task-xen.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,51 @@
+#include <linux/mm.h>
@@ -4307,8 +4307,8 @@
+DEFINE_PER_CPU(struct tss_struct, init_tss) ____cacheline_internodealigned_in_smp = INIT_TSS;
+#endif
+
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/io_apic-xen.c linux-2.6.18-xen/arch/i386/kernel/io_apic-xen.c
---- linux-2.6.18/arch/i386/kernel/io_apic-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/io_apic-xen.c linux-2.6.18-xen/arch/i386/kernel/io_apic-xen.c
+--- linux-2.6.18.1/arch/i386/kernel/io_apic-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/kernel/io_apic-xen.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,2771 @@
+/*
@@ -7082,8 +7082,8 @@
+}
+
+#endif /* CONFIG_ACPI */
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/ioport-xen.c linux-2.6.18-xen/arch/i386/kernel/ioport-xen.c
---- linux-2.6.18/arch/i386/kernel/ioport-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/ioport-xen.c linux-2.6.18-xen/arch/i386/kernel/ioport-xen.c
+--- linux-2.6.18.1/arch/i386/kernel/ioport-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/kernel/ioport-xen.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,121 @@
+/*
@@ -7207,8 +7207,8 @@
+ set_iopl_mask(t->iopl);
+ return 0;
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/irq-xen.c linux-2.6.18-xen/arch/i386/kernel/irq-xen.c
---- linux-2.6.18/arch/i386/kernel/irq-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/irq-xen.c linux-2.6.18-xen/arch/i386/kernel/irq-xen.c
+--- linux-2.6.18.1/arch/i386/kernel/irq-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/kernel/irq-xen.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,324 @@
+/*
@@ -7535,8 +7535,8 @@
+}
+#endif
+
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/ldt-xen.c linux-2.6.18-xen/arch/i386/kernel/ldt-xen.c
---- linux-2.6.18/arch/i386/kernel/ldt-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/ldt-xen.c linux-2.6.18-xen/arch/i386/kernel/ldt-xen.c
+--- linux-2.6.18.1/arch/i386/kernel/ldt-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/kernel/ldt-xen.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,270 @@
+/*
@@ -7809,8 +7809,8 @@
+ }
+ return ret;
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/Makefile linux-2.6.18-xen/arch/i386/kernel/Makefile
---- linux-2.6.18/arch/i386/kernel/Makefile 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/Makefile linux-2.6.18-xen/arch/i386/kernel/Makefile
+--- linux-2.6.18.1/arch/i386/kernel/Makefile 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/i386/kernel/Makefile 2006-09-21 01:33:31.000000000 +0200
@@ -44,6 +44,12 @@
@@ -7855,8 +7855,8 @@
+obj-y := $(call cherrypickxen, $(obj-y))
+extra-y := $(call cherrypickxen, $(extra-y))
+endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/microcode-xen.c linux-2.6.18-xen/arch/i386/kernel/microcode-xen.c
---- linux-2.6.18/arch/i386/kernel/microcode-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/microcode-xen.c linux-2.6.18-xen/arch/i386/kernel/microcode-xen.c
+--- linux-2.6.18.1/arch/i386/kernel/microcode-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/kernel/microcode-xen.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,147 @@
+/*
@@ -8006,8 +8006,8 @@
+module_init(microcode_init)
+module_exit(microcode_exit)
+MODULE_ALIAS_MISCDEV(MICROCODE_MINOR);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/mpparse-xen.c linux-2.6.18-xen/arch/i386/kernel/mpparse-xen.c
---- linux-2.6.18/arch/i386/kernel/mpparse-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/mpparse-xen.c linux-2.6.18-xen/arch/i386/kernel/mpparse-xen.c
+--- linux-2.6.18.1/arch/i386/kernel/mpparse-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/kernel/mpparse-xen.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,1185 @@
+/*
@@ -9195,8 +9195,8 @@
+
+#endif /* CONFIG_X86_IO_APIC */
+#endif /* CONFIG_ACPI */
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/pci-dma-xen.c linux-2.6.18-xen/arch/i386/kernel/pci-dma-xen.c
---- linux-2.6.18/arch/i386/kernel/pci-dma-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/pci-dma-xen.c linux-2.6.18-xen/arch/i386/kernel/pci-dma-xen.c
+--- linux-2.6.18.1/arch/i386/kernel/pci-dma-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/kernel/pci-dma-xen.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,379 @@
+/*
@@ -9578,8 +9578,8 @@
+ swiotlb_sync_single_for_device(dev, dma_handle, size, direction);
+}
+EXPORT_SYMBOL(dma_sync_single_for_device);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/process-xen.c linux-2.6.18-xen/arch/i386/kernel/process-xen.c
---- linux-2.6.18/arch/i386/kernel/process-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/process-xen.c linux-2.6.18-xen/arch/i386/kernel/process-xen.c
+--- linux-2.6.18.1/arch/i386/kernel/process-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/kernel/process-xen.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,812 @@
+/*
@@ -10394,8 +10394,8 @@
+ sp -= get_random_int() % 8192;
+ return sp & ~0xf;
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/quirks-xen.c linux-2.6.18-xen/arch/i386/kernel/quirks-xen.c
---- linux-2.6.18/arch/i386/kernel/quirks-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/quirks-xen.c linux-2.6.18-xen/arch/i386/kernel/quirks-xen.c
+--- linux-2.6.18.1/arch/i386/kernel/quirks-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/kernel/quirks-xen.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,47 @@
+/*
@@ -10445,10 +10445,10 @@
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7525_MCH, quirk_intel_irqbalance);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7520_MCH, quirk_intel_irqbalance);
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/setup-xen.c linux-2.6.18-xen/arch/i386/kernel/setup-xen.c
---- linux-2.6.18/arch/i386/kernel/setup-xen.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/arch/i386/kernel/setup-xen.c 2006-09-21 01:33:31.000000000 +0200
-@@ -0,0 +1,1830 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/setup-xen.c linux-2.6.18-xen/arch/i386/kernel/setup-xen.c
+--- linux-2.6.18.1/arch/i386/kernel/setup-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/arch/i386/kernel/setup-xen.c 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,1832 @@
+/*
+ * linux/arch/i386/kernel/setup.c
+ *
@@ -10606,6 +10606,9 @@
+#endif
+struct e820map e820;
+static void __init e820_setup_gap(struct e820entry *e820, int nr_map);
++#ifdef CONFIG_XEN
++struct e820map machine_e820;
++#endif
+
+extern void early_cpu_init(void);
+extern void generic_apic_probe(char *);
@@ -11834,13 +11837,15 @@
+#ifdef CONFIG_XEN_PRIVILEGED_GUEST
+ struct xen_memory_map memmap;
+
-+ map = (struct e820entry *)__get_free_page(GFP_ATOMIC);
-+ nr_map = E820MAX;
-+
++ map = machine_e820.map;
+ memmap.nr_entries = E820MAX;
++
+ set_xen_guest_handle(memmap.buffer, map);
+
-+ BUG_ON(HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap));
++ if(HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap))
++ BUG();
++ machine_e820.nr_map = memmap.nr_entries;
++ nr_map = memmap.nr_entries;
+ e820_setup_gap(map, memmap.nr_entries);
+#endif
+
@@ -11879,9 +11884,6 @@
+#endif
+ }
+ }
-+#ifdef CONFIG_XEN
-+ free_page((unsigned long)map);
-+#endif
+}
+
+/*
@@ -12279,8 +12281,8 @@
+ * c-basic-offset:8
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/smp-xen.c linux-2.6.18-xen/arch/i386/kernel/smp-xen.c
---- linux-2.6.18/arch/i386/kernel/smp-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/smp-xen.c linux-2.6.18-xen/arch/i386/kernel/smp-xen.c
+--- linux-2.6.18.1/arch/i386/kernel/smp-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/kernel/smp-xen.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,624 @@
+/*
@@ -12907,8 +12909,8 @@
+ return IRQ_HANDLED;
+}
+
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/swiotlb.c linux-2.6.18-xen/arch/i386/kernel/swiotlb.c
---- linux-2.6.18/arch/i386/kernel/swiotlb.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/swiotlb.c linux-2.6.18-xen/arch/i386/kernel/swiotlb.c
+--- linux-2.6.18.1/arch/i386/kernel/swiotlb.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/kernel/swiotlb.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,672 @@
+/*
@@ -13583,8 +13585,8 @@
+EXPORT_SYMBOL(swiotlb_unmap_page);
+EXPORT_SYMBOL(swiotlb_dma_mapping_error);
+EXPORT_SYMBOL(swiotlb_dma_supported);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/sysenter.c linux-2.6.18-xen/arch/i386/kernel/sysenter.c
---- linux-2.6.18/arch/i386/kernel/sysenter.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/sysenter.c linux-2.6.18-xen/arch/i386/kernel/sysenter.c
+--- linux-2.6.18.1/arch/i386/kernel/sysenter.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/i386/kernel/sysenter.c 2006-09-04 16:31:00.000000000 +0200
@@ -23,6 +23,10 @@
#include <asm/pgtable.h>
@@ -13645,8 +13647,8 @@
if (!boot_cpu_has(X86_FEATURE_SEP)) {
memcpy(syscall_page,
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/time-xen.c linux-2.6.18-xen/arch/i386/kernel/time-xen.c
---- linux-2.6.18/arch/i386/kernel/time-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/time-xen.c linux-2.6.18-xen/arch/i386/kernel/time-xen.c
+--- linux-2.6.18.1/arch/i386/kernel/time-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/kernel/time-xen.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,1101 @@
+/*
@@ -14750,8 +14752,8 @@
+ return 0;
+}
+__initcall(xen_sysctl_init);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/traps.c linux-2.6.18-xen/arch/i386/kernel/traps.c
---- linux-2.6.18/arch/i386/kernel/traps.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/traps.c linux-2.6.18-xen/arch/i386/kernel/traps.c
+--- linux-2.6.18.1/arch/i386/kernel/traps.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/i386/kernel/traps.c 2006-09-04 16:31:00.000000000 +0200
@@ -642,18 +642,11 @@
@@ -14773,8 +14775,8 @@
}
static void unknown_nmi_error(unsigned char reason, struct pt_regs * regs)
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/traps-xen.c linux-2.6.18-xen/arch/i386/kernel/traps-xen.c
---- linux-2.6.18/arch/i386/kernel/traps-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/traps-xen.c linux-2.6.18-xen/arch/i386/kernel/traps-xen.c
+--- linux-2.6.18.1/arch/i386/kernel/traps-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/kernel/traps-xen.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,1184 @@
+/*
@@ -15961,8 +15963,8 @@
+}
+__setup("call_trace=", call_trace_setup);
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/tsc.c linux-2.6.18-xen/arch/i386/kernel/tsc.c
---- linux-2.6.18/arch/i386/kernel/tsc.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/tsc.c linux-2.6.18-xen/arch/i386/kernel/tsc.c
+--- linux-2.6.18.1/arch/i386/kernel/tsc.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/i386/kernel/tsc.c 2006-09-04 16:31:00.000000000 +0200
@@ -101,6 +101,7 @@
return (cyc * cyc2ns_scale) >> CYC2NS_SCALE_FACTOR;
@@ -15980,8 +15982,8 @@
static unsigned long calculate_cpu_khz(void)
{
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/vm86.c linux-2.6.18-xen/arch/i386/kernel/vm86.c
---- linux-2.6.18/arch/i386/kernel/vm86.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/vm86.c linux-2.6.18-xen/arch/i386/kernel/vm86.c
+--- linux-2.6.18.1/arch/i386/kernel/vm86.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/i386/kernel/vm86.c 2006-09-04 16:31:00.000000000 +0200
@@ -97,7 +97,9 @@
struct pt_regs * FASTCALL(save_v86_state(struct kernel_vm86_regs * regs));
@@ -16037,8 +16039,8 @@
tsk->thread.screen_bitmap = info->screen_bitmap;
if (info->flags & VM86_SCREEN_BITMAP)
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/vmlinux.lds.S linux-2.6.18-xen/arch/i386/kernel/vmlinux.lds.S
---- linux-2.6.18/arch/i386/kernel/vmlinux.lds.S 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/vmlinux.lds.S linux-2.6.18-xen/arch/i386/kernel/vmlinux.lds.S
+--- linux-2.6.18.1/arch/i386/kernel/vmlinux.lds.S 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/i386/kernel/vmlinux.lds.S 2006-09-04 16:31:00.000000000 +0200
@@ -13,6 +13,12 @@
OUTPUT_ARCH(i386)
@@ -16078,8 +16080,8 @@
+
+ NOTES
}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/vsyscall-note-xen.S linux-2.6.18-xen/arch/i386/kernel/vsyscall-note-xen.S
---- linux-2.6.18/arch/i386/kernel/vsyscall-note-xen.S 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/kernel/vsyscall-note-xen.S linux-2.6.18-xen/arch/i386/kernel/vsyscall-note-xen.S
+--- linux-2.6.18.1/arch/i386/kernel/vsyscall-note-xen.S 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/kernel/vsyscall-note-xen.S 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,32 @@
+/*
@@ -16114,8 +16116,8 @@
+NOTE_KERNELCAP_BEGIN(1, 1)
+NOTE_KERNELCAP(1, "nosegneg") /* Change 1 back to 0 when glibc is fixed! */
+NOTE_KERNELCAP_END
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/lib/delay.c linux-2.6.18-xen/arch/i386/lib/delay.c
---- linux-2.6.18/arch/i386/lib/delay.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/lib/delay.c linux-2.6.18-xen/arch/i386/lib/delay.c
+--- linux-2.6.18.1/arch/i386/lib/delay.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/i386/lib/delay.c 2006-09-04 16:31:00.000000000 +0200
@@ -61,6 +61,7 @@
delay_fn = delay_tsc;
@@ -16134,8 +16136,8 @@
void __delay(unsigned long loops)
{
delay_fn(loops);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/mach-xen/irqflags.c linux-2.6.18-xen/arch/i386/mach-xen/irqflags.c
---- linux-2.6.18/arch/i386/mach-xen/irqflags.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/mach-xen/irqflags.c linux-2.6.18-xen/arch/i386/mach-xen/irqflags.c
+--- linux-2.6.18.1/arch/i386/mach-xen/irqflags.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/mach-xen/irqflags.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,99 @@
+#include <linux/module.h>
@@ -16237,8 +16239,8 @@
+ return flags;
+}
+EXPORT_SYMBOL(__raw_local_irq_save);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/mach-xen/Makefile linux-2.6.18-xen/arch/i386/mach-xen/Makefile
---- linux-2.6.18/arch/i386/mach-xen/Makefile 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/mach-xen/Makefile linux-2.6.18-xen/arch/i386/mach-xen/Makefile
+--- linux-2.6.18.1/arch/i386/mach-xen/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/mach-xen/Makefile 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,5 @@
+#
@@ -16246,8 +16248,8 @@
+#
+
+obj-y := setup.o irqflags.o
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/mach-xen/setup.c linux-2.6.18-xen/arch/i386/mach-xen/setup.c
---- linux-2.6.18/arch/i386/mach-xen/setup.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/mach-xen/setup.c linux-2.6.18-xen/arch/i386/mach-xen/setup.c
+--- linux-2.6.18.1/arch/i386/mach-xen/setup.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/mach-xen/setup.c 2006-09-21 01:33:31.000000000 +0200
@@ -0,0 +1,154 @@
+/*
@@ -16404,8 +16406,8 @@
+void __init pre_setup_arch_hook(void)
+{
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/Makefile linux-2.6.18-xen/arch/i386/Makefile
---- linux-2.6.18/arch/i386/Makefile 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/Makefile linux-2.6.18-xen/arch/i386/Makefile
+--- linux-2.6.18.1/arch/i386/Makefile 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/i386/Makefile 2006-09-04 16:31:00.000000000 +0200
@@ -48,6 +48,11 @@
@@ -16463,8 +16465,8 @@
arch/$(ARCH)/boot/image.iso \
arch/$(ARCH)/boot/mtools.conf
+CLEAN_FILES += vmlinuz vmlinux-stripped
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/mm/fault-xen.c linux-2.6.18-xen/arch/i386/mm/fault-xen.c
---- linux-2.6.18/arch/i386/mm/fault-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/mm/fault-xen.c linux-2.6.18-xen/arch/i386/mm/fault-xen.c
+--- linux-2.6.18.1/arch/i386/mm/fault-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/mm/fault-xen.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,770 @@
+/*
@@ -17237,8 +17239,8 @@
+ }
+}
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/mm/highmem-xen.c linux-2.6.18-xen/arch/i386/mm/highmem-xen.c
---- linux-2.6.18/arch/i386/mm/highmem-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/mm/highmem-xen.c linux-2.6.18-xen/arch/i386/mm/highmem-xen.c
+--- linux-2.6.18.1/arch/i386/mm/highmem-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/mm/highmem-xen.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,133 @@
+#include <linux/highmem.h>
@@ -17374,8 +17376,8 @@
+EXPORT_SYMBOL(kmap_atomic);
+EXPORT_SYMBOL(kunmap_atomic);
+EXPORT_SYMBOL(kmap_atomic_to_page);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/mm/hypervisor.c linux-2.6.18-xen/arch/i386/mm/hypervisor.c
---- linux-2.6.18/arch/i386/mm/hypervisor.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/mm/hypervisor.c linux-2.6.18-xen/arch/i386/mm/hypervisor.c
+--- linux-2.6.18.1/arch/i386/mm/hypervisor.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/mm/hypervisor.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,457 @@
+/******************************************************************************
@@ -17835,8 +17837,8 @@
+ mach_lp, (u64)entry_a | ((u64)entry_b<<32));
+}
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/mm/init-xen.c linux-2.6.18-xen/arch/i386/mm/init-xen.c
---- linux-2.6.18/arch/i386/mm/init-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/mm/init-xen.c linux-2.6.18-xen/arch/i386/mm/init-xen.c
+--- linux-2.6.18.1/arch/i386/mm/init-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/mm/init-xen.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,851 @@
+/*
@@ -18690,10 +18692,10 @@
+}
+#endif
+
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/mm/ioremap-xen.c linux-2.6.18-xen/arch/i386/mm/ioremap-xen.c
---- linux-2.6.18/arch/i386/mm/ioremap-xen.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/arch/i386/mm/ioremap-xen.c 2006-09-04 16:31:00.000000000 +0200
-@@ -0,0 +1,439 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/mm/ioremap-xen.c linux-2.6.18-xen/arch/i386/mm/ioremap-xen.c
+--- linux-2.6.18.1/arch/i386/mm/ioremap-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/arch/i386/mm/ioremap-xen.c 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,443 @@
+/*
+ * arch/i386/mm/ioremap.c
+ *
@@ -18725,6 +18727,8 @@
+{
+ mmu_update_t **v = (mmu_update_t **)data;
+
++ BUG_ON(!pte_none(*pte));
++
+ (*v)->ptr = ((u64)pfn_to_mfn(page_to_pfn(pmd_page)) <<
+ PAGE_SHIFT) | ((unsigned long)pte & ~PAGE_MASK);
+ (*v)++;
@@ -18806,12 +18810,14 @@
+ pgprot_t prot,
+ domid_t domid)
+{
-+ /* Same as remap_pfn_range(). */
-+ vma->vm_flags |= VM_IO | VM_RESERVED | VM_PFNMAP;
++ if (xen_feature(XENFEAT_auto_translated_physmap))
++ return remap_pfn_range(vma, address, mfn, size, prot);
+
+ if (domid == DOMID_SELF)
+ return -EINVAL;
+
++ vma->vm_flags |= VM_IO | VM_RESERVED;
++
+ vma->vm_mm->context.has_foreign_mappings = 1;
+
+ return __direct_remap_pfn_range(
@@ -19133,8 +19139,8 @@
+ --nrpages;
+ }
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/mm/Makefile linux-2.6.18-xen/arch/i386/mm/Makefile
---- linux-2.6.18/arch/i386/mm/Makefile 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/mm/Makefile linux-2.6.18-xen/arch/i386/mm/Makefile
+--- linux-2.6.18.1/arch/i386/mm/Makefile 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/i386/mm/Makefile 2006-09-04 16:31:00.000000000 +0200
@@ -8,3 +8,11 @@
obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o
@@ -19148,8 +19154,8 @@
+
+obj-y := $(call cherrypickxen, $(obj-y))
+endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/mm/pageattr.c linux-2.6.18-xen/arch/i386/mm/pageattr.c
---- linux-2.6.18/arch/i386/mm/pageattr.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/mm/pageattr.c linux-2.6.18-xen/arch/i386/mm/pageattr.c
+--- linux-2.6.18.1/arch/i386/mm/pageattr.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/i386/mm/pageattr.c 2006-09-04 16:31:00.000000000 +0200
@@ -84,7 +84,7 @@
unsigned long flags;
@@ -19160,8 +19166,8 @@
return;
spin_lock_irqsave(&pgd_lock, flags);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/mm/pgtable-xen.c linux-2.6.18-xen/arch/i386/mm/pgtable-xen.c
---- linux-2.6.18/arch/i386/mm/pgtable-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/mm/pgtable-xen.c linux-2.6.18-xen/arch/i386/mm/pgtable-xen.c
+--- linux-2.6.18.1/arch/i386/mm/pgtable-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/mm/pgtable-xen.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,699 @@
+/*
@@ -19863,8 +19869,8 @@
+ !mm->context.has_foreign_mappings)
+ mm_unpin(mm);
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/oprofile/Makefile linux-2.6.18-xen/arch/i386/oprofile/Makefile
---- linux-2.6.18/arch/i386/oprofile/Makefile 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/oprofile/Makefile linux-2.6.18-xen/arch/i386/oprofile/Makefile
+--- linux-2.6.18.1/arch/i386/oprofile/Makefile 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/i386/oprofile/Makefile 2006-09-04 16:31:00.000000000 +0200
@@ -6,7 +6,11 @@
oprofilefs.o oprofile_stats.o \
@@ -19878,8 +19884,8 @@
op_model_ppro.o op_model_p4.o
oprofile-$(CONFIG_X86_IO_APIC) += nmi_timer_int.o
+endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/oprofile/xenoprof.c linux-2.6.18-xen/arch/i386/oprofile/xenoprof.c
---- linux-2.6.18/arch/i386/oprofile/xenoprof.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/oprofile/xenoprof.c linux-2.6.18-xen/arch/i386/oprofile/xenoprof.c
+--- linux-2.6.18.1/arch/i386/oprofile/xenoprof.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/oprofile/xenoprof.c 2006-09-21 01:33:31.000000000 +0200
@@ -0,0 +1,584 @@
+/**
@@ -20466,8 +20472,8 @@
+ }
+
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/pci/irq-xen.c linux-2.6.18-xen/arch/i386/pci/irq-xen.c
---- linux-2.6.18/arch/i386/pci/irq-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/pci/irq-xen.c linux-2.6.18-xen/arch/i386/pci/irq-xen.c
+--- linux-2.6.18.1/arch/i386/pci/irq-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/pci/irq-xen.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,1206 @@
+/*
@@ -21676,8 +21682,8 @@
+
+ return count;
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/pci/Makefile linux-2.6.18-xen/arch/i386/pci/Makefile
---- linux-2.6.18/arch/i386/pci/Makefile 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/pci/Makefile linux-2.6.18-xen/arch/i386/pci/Makefile
+--- linux-2.6.18.1/arch/i386/pci/Makefile 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/i386/pci/Makefile 2006-09-04 16:31:00.000000000 +0200
@@ -4,6 +4,10 @@
obj-$(CONFIG_PCI_MMCONFIG) += mmconfig.o direct.o
@@ -21699,8 +21705,8 @@
+include $(srctree)/scripts/Makefile.xen
+obj-y := $(call cherrypickxen, $(obj-y))
+endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/pci/pcifront.c linux-2.6.18-xen/arch/i386/pci/pcifront.c
---- linux-2.6.18/arch/i386/pci/pcifront.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/pci/pcifront.c linux-2.6.18-xen/arch/i386/pci/pcifront.c
+--- linux-2.6.18.1/arch/i386/pci/pcifront.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/i386/pci/pcifront.c 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,55 @@
+/*
@@ -21758,8 +21764,8 @@
+}
+
+arch_initcall(pcifront_x86_stub_init);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/power/Makefile linux-2.6.18-xen/arch/i386/power/Makefile
---- linux-2.6.18/arch/i386/power/Makefile 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/i386/power/Makefile linux-2.6.18-xen/arch/i386/power/Makefile
+--- linux-2.6.18.1/arch/i386/power/Makefile 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/i386/power/Makefile 2006-09-04 16:31:00.000000000 +0200
@@ -1,2 +1,4 @@
-obj-$(CONFIG_PM) += cpu.o
@@ -21767,8 +21773,8 @@
+obj-$(CONFIG_SOFTWARE_SUSPEND) += cpu.o
+obj-$(CONFIG_ACPI_SLEEP) += cpu.o
obj-$(CONFIG_SOFTWARE_SUSPEND) += swsusp.o
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/dig/setup.c linux-2.6.18-xen/arch/ia64/dig/setup.c
---- linux-2.6.18/arch/ia64/dig/setup.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/dig/setup.c linux-2.6.18-xen/arch/ia64/dig/setup.c
+--- linux-2.6.18.1/arch/ia64/dig/setup.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/ia64/dig/setup.c 2006-09-21 01:33:31.000000000 +0200
@@ -24,6 +24,8 @@
#include <asm/machvec.h>
@@ -21799,8 +21805,8 @@
+ xen_start_info->console.domU.evtchn = 0;
+#endif
}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/hp/sim/Makefile linux-2.6.18-xen/arch/ia64/hp/sim/Makefile
---- linux-2.6.18/arch/ia64/hp/sim/Makefile 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/hp/sim/Makefile linux-2.6.18-xen/arch/ia64/hp/sim/Makefile
+--- linux-2.6.18.1/arch/ia64/hp/sim/Makefile 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/ia64/hp/sim/Makefile 2006-09-04 16:31:00.000000000 +0200
@@ -14,3 +14,5 @@
obj-$(CONFIG_HP_SIMSERIAL) += simserial.o
@@ -21808,10 +21814,10 @@
obj-$(CONFIG_HP_SIMSCSI) += simscsi.o
+obj-$(CONFIG_XEN) += simserial.o
+obj-$(CONFIG_XEN) += hpsim_console.o
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/Kconfig linux-2.6.18-xen/arch/ia64/Kconfig
---- linux-2.6.18/arch/ia64/Kconfig 2006-09-20 05:42:06.000000000 +0200
-+++ linux-2.6.18-xen/arch/ia64/Kconfig 2006-09-21 01:33:31.000000000 +0200
-@@ -58,6 +58,20 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/Kconfig linux-2.6.18-xen/arch/ia64/Kconfig
+--- linux-2.6.18.1/arch/ia64/Kconfig 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/arch/ia64/Kconfig 2006-10-17 15:01:58.000000000 +0200
+@@ -58,6 +58,34 @@
bool
default y
@@ -21829,10 +21835,24 @@
+ help
+ vDSO paravirtualization
+
++config XEN_IA64_EXPOSE_P2M
++ bool "Xen/IA64 exposure p2m table"
++ depends on XEN
++ default y
++ help
++ expose p2m from xen
++
++config XEN_IA64_EXPOSE_P2M_USE_DTR
++ bool "Xen/IA64 map p2m table with dtr"
++ depends on XEN_IA64_EXPOSE_P2M
++ default y
++ help
++ use dtr to map the exposed p2m table
++
config SCHED_NO_NO_OMIT_FRAME_POINTER
bool
default y
-@@ -465,6 +479,21 @@
+@@ -465,6 +493,21 @@
bool
default PCI
@@ -21854,7 +21874,7 @@
source "drivers/pci/pcie/Kconfig"
source "drivers/pci/Kconfig"
-@@ -528,3 +557,34 @@
+@@ -528,3 +571,34 @@
source "security/Kconfig"
source "crypto/Kconfig"
@@ -21889,8 +21909,8 @@
+endif
+
+source "drivers/xen/Kconfig"
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/kernel/asm-offsets.c linux-2.6.18-xen/arch/ia64/kernel/asm-offsets.c
---- linux-2.6.18/arch/ia64/kernel/asm-offsets.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/kernel/asm-offsets.c linux-2.6.18-xen/arch/ia64/kernel/asm-offsets.c
+--- linux-2.6.18.1/arch/ia64/kernel/asm-offsets.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/ia64/kernel/asm-offsets.c 2006-09-04 16:31:00.000000000 +0200
@@ -268,4 +268,29 @@
DEFINE(IA64_TIME_SOURCE_MMIO64, TIME_SOURCE_MMIO64);
@@ -21922,8 +21942,8 @@
+ DEFINE_MAPPED_REG_OFS(XSI_BANK1_R16_OFS, bank1_regs[0]);
+#endif /* CONFIG_XEN */
}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/kernel/entry.S linux-2.6.18-xen/arch/ia64/kernel/entry.S
---- linux-2.6.18/arch/ia64/kernel/entry.S 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/kernel/entry.S linux-2.6.18-xen/arch/ia64/kernel/entry.S
+--- linux-2.6.18.1/arch/ia64/kernel/entry.S 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/ia64/kernel/entry.S 2006-09-21 01:33:31.000000000 +0200
@@ -180,7 +180,7 @@
* called. The code starting at .map relies on this. The rest of the code
@@ -22044,8 +22064,8 @@
;;
mov ar.unat=r9
br.many b7
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/kernel/gate.lds.S linux-2.6.18-xen/arch/ia64/kernel/gate.lds.S
---- linux-2.6.18/arch/ia64/kernel/gate.lds.S 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/kernel/gate.lds.S linux-2.6.18-xen/arch/ia64/kernel/gate.lds.S
+--- linux-2.6.18.1/arch/ia64/kernel/gate.lds.S 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/ia64/kernel/gate.lds.S 2006-09-04 16:31:00.000000000 +0200
@@ -43,6 +43,28 @@
__start_gate_brl_fsys_bubble_down_patchlist = .;
@@ -22076,8 +22096,8 @@
} :readable
.IA_64.unwind_info : { *(.IA_64.unwind_info*) }
.IA_64.unwind : { *(.IA_64.unwind*) } :readable :unwind
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/kernel/gate.S linux-2.6.18-xen/arch/ia64/kernel/gate.S
---- linux-2.6.18/arch/ia64/kernel/gate.S 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/kernel/gate.S linux-2.6.18-xen/arch/ia64/kernel/gate.S
+--- linux-2.6.18.1/arch/ia64/kernel/gate.S 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/ia64/kernel/gate.S 2006-09-04 16:31:00.000000000 +0200
@@ -6,13 +6,15 @@
* David Mosberger-Tang <davidm at hpl.hp.com>
@@ -22248,8 +22268,8 @@
(p9) mov r8=ENOSYS
FSYS_RETURN
END(__kernel_syscall_via_epc)
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/kernel/head.S linux-2.6.18-xen/arch/ia64/kernel/head.S
---- linux-2.6.18/arch/ia64/kernel/head.S 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/kernel/head.S linux-2.6.18-xen/arch/ia64/kernel/head.S
+--- linux-2.6.18.1/arch/ia64/kernel/head.S 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/ia64/kernel/head.S 2006-09-21 01:33:31.000000000 +0200
@@ -367,6 +367,12 @@
;;
@@ -22264,8 +22284,8 @@
#ifdef CONFIG_SMP
(isAP) br.call.sptk.many rp=start_secondary
.ret0:
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/kernel/iosapic.c linux-2.6.18-xen/arch/ia64/kernel/iosapic.c
---- linux-2.6.18/arch/ia64/kernel/iosapic.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/kernel/iosapic.c linux-2.6.18-xen/arch/ia64/kernel/iosapic.c
+--- linux-2.6.18.1/arch/ia64/kernel/iosapic.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/ia64/kernel/iosapic.c 2006-09-04 16:31:00.000000000 +0200
@@ -159,6 +159,65 @@
static int iosapic_kmalloc_ok;
@@ -22353,8 +22373,8 @@
if (pcat_compat) {
/*
* Disable the compatibility mode interrupts (8259 style),
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/kernel/irq_ia64.c linux-2.6.18-xen/arch/ia64/kernel/irq_ia64.c
---- linux-2.6.18/arch/ia64/kernel/irq_ia64.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/kernel/irq_ia64.c linux-2.6.18-xen/arch/ia64/kernel/irq_ia64.c
+--- linux-2.6.18.1/arch/ia64/kernel/irq_ia64.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/ia64/kernel/irq_ia64.c 2006-09-04 16:31:00.000000000 +0200
@@ -30,6 +30,9 @@
#include <linux/smp_lock.h>
@@ -22658,8 +22678,8 @@
#ifdef CONFIG_SMP
phys_cpu_id = cpu_physical_id(cpu);
#else
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/kernel/pal.S linux-2.6.18-xen/arch/ia64/kernel/pal.S
---- linux-2.6.18/arch/ia64/kernel/pal.S 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/kernel/pal.S linux-2.6.18-xen/arch/ia64/kernel/pal.S
+--- linux-2.6.18.1/arch/ia64/kernel/pal.S 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/ia64/kernel/pal.S 2006-09-04 16:31:00.000000000 +0200
@@ -16,6 +16,7 @@
#include <asm/processor.h>
@@ -22687,8 +22707,8 @@
/*
* Make a PAL call using the stacked registers calling convention.
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/kernel/patch.c linux-2.6.18-xen/arch/ia64/kernel/patch.c
---- linux-2.6.18/arch/ia64/kernel/patch.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/kernel/patch.c linux-2.6.18-xen/arch/ia64/kernel/patch.c
+--- linux-2.6.18.1/arch/ia64/kernel/patch.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/ia64/kernel/patch.c 2006-09-04 16:31:00.000000000 +0200
@@ -184,6 +184,73 @@
ia64_srlz_i();
@@ -22775,9 +22795,9 @@
ia64_patch_vtop(START(vtop), END(vtop));
ia64_patch_mckinley_e9(START(mckinley_e9), END(mckinley_e9));
}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/kernel/setup.c linux-2.6.18-xen/arch/ia64/kernel/setup.c
---- linux-2.6.18/arch/ia64/kernel/setup.c 2006-09-20 05:42:06.000000000 +0200
-+++ linux-2.6.18-xen/arch/ia64/kernel/setup.c 2006-09-04 16:31:00.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/kernel/setup.c linux-2.6.18-xen/arch/ia64/kernel/setup.c
+--- linux-2.6.18.1/arch/ia64/kernel/setup.c 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/arch/ia64/kernel/setup.c 2006-10-17 15:01:58.000000000 +0200
@@ -60,6 +60,10 @@
#include <asm/system.h>
#include <asm/unistd.h>
@@ -22789,11 +22809,13 @@
#if defined(CONFIG_SMP) && (IA64_CPU_SIZE > PAGE_SIZE)
# error "struct cpuinfo_ia64 too big!"
-@@ -70,6 +74,22 @@
+@@ -70,6 +74,24 @@
EXPORT_SYMBOL(__per_cpu_offset);
#endif
+#ifdef CONFIG_XEN
++unsigned long kernel_start_pa;
++
+static int
+xen_panic_event(struct notifier_block *this, unsigned long event, void *ptr)
+{
@@ -22812,7 +22834,7 @@
extern void ia64_setup_printk_clock(void);
DEFINE_PER_CPU(struct cpuinfo_ia64, cpu_info);
-@@ -176,15 +196,33 @@
+@@ -176,15 +198,33 @@
return 0;
}
@@ -22847,7 +22869,7 @@
struct rsvd_region tmp;
tmp = rsvd_region[j];
rsvd_region[j] = rsvd_region[j + 1];
-@@ -192,6 +230,36 @@
+@@ -192,6 +232,36 @@
}
}
}
@@ -22884,7 +22906,7 @@
}
/*
-@@ -242,6 +310,14 @@
+@@ -242,6 +312,14 @@
rsvd_region[n].end = (unsigned long) ia64_imva(_end);
n++;
@@ -22899,7 +22921,7 @@
#ifdef CONFIG_BLK_DEV_INITRD
if (ia64_boot_param->initrd_start) {
rsvd_region[n].start = (unsigned long)__va(ia64_boot_param->initrd_start);
-@@ -333,6 +409,16 @@
+@@ -333,6 +411,16 @@
{
int earlycons = 0;
@@ -22916,12 +22938,13 @@
#ifdef CONFIG_SERIAL_SGI_L1_CONSOLE
{
extern int sn_serial_console_early_setup(void);
-@@ -402,6 +488,14 @@
+@@ -402,6 +490,15 @@
{
unw_init();
+#ifdef CONFIG_XEN
+ if (is_running_on_xen()) {
++ kernel_start_pa = KERNEL_START - ia64_tpa(KERNEL_START);
+ setup_xen_features();
+ /* Register a call for panic conditions. */
+ atomic_notifier_chain_register(&panic_notifier_list, &xen_panic_block);
@@ -22931,7 +22954,7 @@
ia64_patch_vtop((u64) __start___vtop_patchlist, (u64) __end___vtop_patchlist);
*cmdline_p = __va(ia64_boot_param->command_line);
-@@ -478,6 +572,23 @@
+@@ -478,6 +575,23 @@
conswitchp = &vga_con;
# endif
}
@@ -22955,7 +22978,7 @@
#endif
/* enable IA-64 Machine Check Abort Handling unless disabled */
-@@ -486,6 +597,9 @@
+@@ -486,6 +600,9 @@
platform_setup(cmdline_p);
paging_init();
@@ -22965,7 +22988,7 @@
}
/*
-@@ -870,6 +984,15 @@
+@@ -870,6 +987,15 @@
/* size of physical stacked register partition plus 8 bytes: */
__get_cpu_var(ia64_phys_stacked_size_p8) = num_phys_stacked*8 + 8;
platform_cpu_init();
@@ -22981,8 +23004,8 @@
pm_idle = default_idle;
}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/Makefile linux-2.6.18-xen/arch/ia64/Makefile
---- linux-2.6.18/arch/ia64/Makefile 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/Makefile linux-2.6.18-xen/arch/ia64/Makefile
+--- linux-2.6.18.1/arch/ia64/Makefile 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/ia64/Makefile 2006-09-04 16:31:00.000000000 +0200
@@ -45,6 +45,12 @@
endif
@@ -23024,8 +23047,8 @@
define archhelp
echo '* compressed - Build compressed kernel image'
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/mm/ioremap.c linux-2.6.18-xen/arch/ia64/mm/ioremap.c
---- linux-2.6.18/arch/ia64/mm/ioremap.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/mm/ioremap.c linux-2.6.18-xen/arch/ia64/mm/ioremap.c
+--- linux-2.6.18.1/arch/ia64/mm/ioremap.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/ia64/mm/ioremap.c 2006-09-04 16:31:00.000000000 +0200
@@ -16,6 +16,9 @@
static inline void __iomem *
@@ -23037,14 +23060,14 @@
return (void __iomem *) (__IA64_UNCACHED_OFFSET | offset);
}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/xen/drivers/README linux-2.6.18-xen/arch/ia64/xen/drivers/README
---- linux-2.6.18/arch/ia64/xen/drivers/README 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/xen/drivers/README linux-2.6.18-xen/arch/ia64/xen/drivers/README
+--- linux-2.6.18.1/arch/ia64/xen/drivers/README 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/ia64/xen/drivers/README 2006-09-04 16:31:00.000000000 +0200
@@ -0,0 +1,2 @@
+This is a temporary location for source/Makefiles that need to be
+patched/reworked in drivers/xen to work with xenlinux/ia64.
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/xen/hypercall.S linux-2.6.18-xen/arch/ia64/xen/hypercall.S
---- linux-2.6.18/arch/ia64/xen/hypercall.S 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/xen/hypercall.S linux-2.6.18-xen/arch/ia64/xen/hypercall.S
+--- linux-2.6.18.1/arch/ia64/xen/hypercall.S 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/ia64/xen/hypercall.S 2006-09-04 16:31:01.000000000 +0200
@@ -0,0 +1,413 @@
+/*
@@ -23460,10 +23483,10 @@
+ ;;
+END(xen_ssm_i_1)
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/xen/hypervisor.c linux-2.6.18-xen/arch/ia64/xen/hypervisor.c
---- linux-2.6.18/arch/ia64/xen/hypervisor.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/arch/ia64/xen/hypervisor.c 2006-09-04 16:31:01.000000000 +0200
-@@ -0,0 +1,833 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/xen/hypervisor.c linux-2.6.18-xen/arch/ia64/xen/hypervisor.c
+--- linux-2.6.18.1/arch/ia64/xen/hypervisor.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/arch/ia64/xen/hypervisor.c 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,1052 @@
+/******************************************************************************
+ * include/asm-ia64/shadow.h
+ *
@@ -23506,59 +23529,11 @@
+int running_on_xen;
+EXPORT_SYMBOL(running_on_xen);
+
-+//XXX xen/ia64 copy_from_guest() is broken.
-+// This is a temporal work around until it is fixed.
-+// used by balloon.c netfront.c
-+
-+// get_xen_guest_handle is defined only when __XEN_TOOLS__ is defined
-+// if the definition in arch-ia64.h is changed, this must be updated.
-+#define get_xen_guest_handle(val, hnd) do { val = (hnd).p; } while (0)
-+
-+int
-+ia64_xenmem_reservation_op(unsigned long op,
-+ struct xen_memory_reservation* reservation__)
-+{
-+ struct xen_memory_reservation reservation = *reservation__;
-+ unsigned long* frame_list;
-+ unsigned long nr_extents = reservation__->nr_extents;
-+ int ret = 0;
-+ get_xen_guest_handle(frame_list, reservation__->extent_start);
-+
-+ BUG_ON(op != XENMEM_increase_reservation &&
-+ op != XENMEM_decrease_reservation &&
-+ op != XENMEM_populate_physmap);
-+
-+ while (nr_extents > 0) {
-+ int tmp_ret;
-+ volatile unsigned long dummy;
-+
-+ set_xen_guest_handle(reservation.extent_start, frame_list);
-+ reservation.nr_extents = nr_extents;
-+
-+ dummy = frame_list[0];// re-install tlb entry before hypercall
-+ tmp_ret = ____HYPERVISOR_memory_op(op, &reservation);
-+ if (tmp_ret < 0) {
-+ if (ret == 0) {
-+ ret = tmp_ret;
-+ }
-+ break;
-+ }
-+ if (tmp_ret == 0) {
-+ //XXX dirty work around for skbuff_ctor()
-+ // of a non-privileged domain,
-+ if ((op == XENMEM_increase_reservation ||
-+ op == XENMEM_populate_physmap) &&
-+ !is_initial_xendomain() &&
-+ reservation.extent_order > 0)
-+ return ret;
-+ }
-+ frame_list += tmp_ret;
-+ nr_extents -= tmp_ret;
-+ ret += tmp_ret;
-+ }
-+ return ret;
-+}
-+EXPORT_SYMBOL(ia64_xenmem_reservation_op);
++#ifdef CONFIG_XEN_IA64_EXPOSE_P2M
++static int p2m_expose_init(void);
++#else
++#define p2m_expose_init() (-ENOSYS)
++#endif
+
+//XXX same as i386, x86_64 contiguous_bitmap_set(), contiguous_bitmap_clear()
+// move those to lib/contiguous_bitmap?
@@ -23837,8 +23812,6 @@
+int
+HYPERVISOR_grant_table_op(unsigned int cmd, void *uop, unsigned int count)
+{
-+ __u64 va1, va2, pa1, pa2;
-+
+ if (cmd == GNTTABOP_map_grant_ref) {
+ unsigned int i;
+ for (i = 0; i < count; i++) {
@@ -23846,29 +23819,7 @@
+ (struct gnttab_map_grant_ref*)uop + i);
+ }
+ }
-+ va1 = (__u64)uop & PAGE_MASK;
-+ pa1 = pa2 = 0;
-+ if ((REGION_NUMBER(va1) == 5) &&
-+ ((va1 - KERNEL_START) >= KERNEL_TR_PAGE_SIZE)) {
-+ pa1 = ia64_tpa(va1);
-+ if (cmd <= GNTTABOP_transfer) {
-+ static uint32_t uop_size[GNTTABOP_transfer + 1] = {
-+ sizeof(struct gnttab_map_grant_ref),
-+ sizeof(struct gnttab_unmap_grant_ref),
-+ sizeof(struct gnttab_setup_table),
-+ sizeof(struct gnttab_dump_table),
-+ sizeof(struct gnttab_transfer),
-+ };
-+ va2 = (__u64)uop + (uop_size[cmd] * count) - 1;
-+ va2 &= PAGE_MASK;
-+ if (va1 != va2) {
-+ /* maximum size of uop is 2pages */
-+ BUG_ON(va2 > va1 + PAGE_SIZE);
-+ pa2 = ia64_tpa(va2);
-+ }
-+ }
-+ }
-+ return ____HYPERVISOR_grant_table_op(cmd, uop, count, pa1, pa2);
++ return xencomm_mini_hypercall_grant_table_op(cmd, uop, count);
+}
+EXPORT_SYMBOL(HYPERVISOR_grant_table_op);
+
@@ -23992,6 +23943,10 @@
+ privcmd_resource_min, privcmd_resource_max,
+ (privcmd_resource_max - privcmd_resource_min) >> 20);
+ BUG_ON(privcmd_resource_min >= privcmd_resource_max);
++
++ // XXX this should be somewhere appropriate
++ (void)p2m_expose_init();
++
+ return 0;
+}
+late_initcall(xen_ia64_privcmd_init);
@@ -24012,6 +23967,7 @@
+};
+
+struct xen_ia64_privcmd_vma {
++ int is_privcmd_mmapped;
+ struct xen_ia64_privcmd_range* range;
+
+ unsigned long num_entries;
@@ -24150,12 +24106,15 @@
+static void
+xen_ia64_privcmd_vma_open(struct vm_area_struct* vma)
+{
++ struct xen_ia64_privcmd_vma* old_privcmd_vma = (struct xen_ia64_privcmd_vma*)vma->vm_private_data;
+ struct xen_ia64_privcmd_vma* privcmd_vma = (struct xen_ia64_privcmd_vma*)vma->vm_private_data;
+ struct xen_ia64_privcmd_range* privcmd_range = privcmd_vma->range;
+
+ atomic_inc(&privcmd_range->ref_count);
+ // vm_op->open() can't fail.
+ privcmd_vma = kmalloc(sizeof(*privcmd_vma), GFP_KERNEL | __GFP_NOFAIL);
++ // copy original value if necessary
++ privcmd_vma->is_privcmd_mmapped = old_privcmd_vma->is_privcmd_mmapped;
+
+ __xen_ia64_privcmd_vma_open(vma, privcmd_vma, privcmd_range);
+}
@@ -24191,6 +24150,14 @@
+}
+
+int
++privcmd_enforce_singleshot_mapping(struct vm_area_struct *vma)
++{
++ struct xen_ia64_privcmd_vma* privcmd_vma =
++ (struct xen_ia64_privcmd_vma *)vma->vm_private_data;
++ return (xchg(&privcmd_vma->is_privcmd_mmapped, 1) == 0);
++}
++
++int
+privcmd_mmap(struct file * file, struct vm_area_struct * vma)
+{
+ int error;
@@ -24215,6 +24182,8 @@
+ if (privcmd_vma == NULL) {
+ goto out_enomem1;
+ }
++ privcmd_vma->is_privcmd_mmapped = 0;
++
+ res = kzalloc(sizeof(*res), GFP_KERNEL);
+ if (res == NULL) {
+ goto out_enomem1;
@@ -24297,22 +24266,296 @@
+ /* Just trigger a tick. */
+ ia64_cpu_local_tick();
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/xen/Makefile linux-2.6.18-xen/arch/ia64/xen/Makefile
---- linux-2.6.18/arch/ia64/xen/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/arch/ia64/xen/Makefile 2006-09-04 16:31:00.000000000 +0200
-@@ -0,0 +1,8 @@
++
++///////////////////////////////////////////////////////////////////////////
++// expose p2m table
++#ifdef CONFIG_XEN_IA64_EXPOSE_P2M
++#include <linux/cpu.h>
++#include <asm/uaccess.h>
++
++int p2m_initialized __read_mostly = 0;
++
++unsigned long p2m_min_low_pfn __read_mostly;
++unsigned long p2m_max_low_pfn __read_mostly;
++unsigned long p2m_convert_min_pfn __read_mostly;
++unsigned long p2m_convert_max_pfn __read_mostly;
++
++static struct resource p2m_resource = {
++ .name = "Xen p2m table",
++ .flags = IORESOURCE_MEM,
++};
++static unsigned long p2m_assign_start_pfn __read_mostly;
++static unsigned long p2m_assign_end_pfn __read_mostly;
++volatile const pte_t* p2m_pte __read_mostly;
++
++#define GRNULE_PFN PTRS_PER_PTE
++static unsigned long p2m_granule_pfn __read_mostly = GRNULE_PFN;
++
++#define ROUNDDOWN(x, y) ((x) & ~((y) - 1))
++#define ROUNDUP(x, y) (((x) + (y) - 1) & ~((y) - 1))
++
++#define P2M_PREFIX "Xen p2m: "
++
++static int xen_ia64_p2m_expose __read_mostly = 1;
++module_param(xen_ia64_p2m_expose, int, 0);
++MODULE_PARM_DESC(xen_ia64_p2m_expose,
++ "enable/disable xen/ia64 p2m exposure optimization\n");
++
++#ifdef CONFIG_XEN_IA64_EXPOSE_P2M_USE_DTR
++static int xen_ia64_p2m_expose_use_dtr __read_mostly = 1;
++module_param(xen_ia64_p2m_expose_use_dtr, int, 0);
++MODULE_PARM_DESC(xen_ia64_p2m_expose_use_dtr,
++ "use/unuse dtr to map exposed p2m table\n");
++
++static const int p2m_page_shifts[] = {
++ _PAGE_SIZE_4K,
++ _PAGE_SIZE_8K,
++ _PAGE_SIZE_16K,
++ _PAGE_SIZE_64K,
++ _PAGE_SIZE_256K,
++ _PAGE_SIZE_1M,
++ _PAGE_SIZE_4M,
++ _PAGE_SIZE_16M,
++ _PAGE_SIZE_64M,
++ _PAGE_SIZE_256M,
++};
++
++struct p2m_itr_arg {
++ unsigned long vaddr;
++ unsigned long pteval;
++ unsigned long log_page_size;
++};
++static struct p2m_itr_arg p2m_itr_arg __read_mostly;
++
++// This should be in asm-ia64/kregs.h
++#define IA64_TR_P2M_TABLE 3
++
++static void
++p2m_itr(void* info)
++{
++ struct p2m_itr_arg* arg = (struct p2m_itr_arg*)info;
++ ia64_itr(0x2, IA64_TR_P2M_TABLE,
++ arg->vaddr, arg->pteval, arg->log_page_size);
++ ia64_srlz_d();
++}
++
++static int
++p2m_expose_dtr_call(struct notifier_block *self,
++ unsigned long event, void* ptr)
++{
++ unsigned int cpu = (unsigned int)(long)ptr;
++ if (event != CPU_ONLINE)
++ return 0;
++ if (!(p2m_initialized && xen_ia64_p2m_expose_use_dtr))
++ smp_call_function_single(cpu, &p2m_itr, &p2m_itr_arg, 1, 1);
++ return 0;
++}
++
++static struct notifier_block p2m_expose_dtr_hotplug_notifier = {
++ .notifier_call = p2m_expose_dtr_call,
++ .next = NULL,
++ .priority = 0
++};
++#endif
++
++static int
++p2m_expose_init(void)
++{
++ unsigned long num_pfn;
++ unsigned long size = 0;
++ unsigned long p2m_size = 0;
++ unsigned long align = ~0UL;
++ int error = 0;
++#ifdef CONFIG_XEN_IA64_EXPOSE_P2M_USE_DTR
++ int i;
++ unsigned long page_size;
++ unsigned long log_page_size = 0;
++#endif
++
++ if (!xen_ia64_p2m_expose)
++ return -ENOSYS;
++ if (p2m_initialized)
++ return 0;
++
++#ifdef CONFIG_XEN_IA64_EXPOSE_P2M_USE_DTR
++ error = register_cpu_notifier(&p2m_expose_dtr_hotplug_notifier);
++ if (error < 0)
++ return error;
++#endif
++
++ lock_cpu_hotplug();
++ if (p2m_initialized)
++ goto out;
++
++#ifdef CONFIG_DISCONTIGMEM
++ p2m_min_low_pfn = min_low_pfn;
++ p2m_max_low_pfn = max_low_pfn;
++#else
++ p2m_min_low_pfn = 0;
++ p2m_max_low_pfn = max_pfn;
++#endif
++
++#ifdef CONFIG_XEN_IA64_EXPOSE_P2M_USE_DTR
++ if (xen_ia64_p2m_expose_use_dtr) {
++ unsigned long granule_pfn = 0;
++ p2m_size = p2m_max_low_pfn - p2m_min_low_pfn;
++ for (i = 0;
++ i < sizeof(p2m_page_shifts)/sizeof(p2m_page_shifts[0]);
++ i++) {
++ log_page_size = p2m_page_shifts[i];
++ page_size = 1UL << log_page_size;
++ if (page_size < p2m_size)
++ continue;
++
++ granule_pfn = max(page_size >> PAGE_SHIFT,
++ p2m_granule_pfn);
++ p2m_convert_min_pfn = ROUNDDOWN(p2m_min_low_pfn,
++ granule_pfn);
++ p2m_convert_max_pfn = ROUNDUP(p2m_max_low_pfn,
++ granule_pfn);
++ num_pfn = p2m_convert_max_pfn - p2m_convert_min_pfn;
++ size = num_pfn << PAGE_SHIFT;
++ p2m_size = num_pfn / PTRS_PER_PTE;
++ p2m_size = ROUNDUP(p2m_size, granule_pfn << PAGE_SHIFT);
++ if (p2m_size == page_size)
++ break;
++ }
++ if (p2m_size != page_size) {
++ printk(KERN_ERR "p2m_size != page_size\n");
++ error = -EINVAL;
++ goto out;
++ }
++ align = max(privcmd_resource_align, granule_pfn << PAGE_SHIFT);
++ } else
++#endif
++ {
++ BUG_ON(p2m_granule_pfn & (p2m_granule_pfn - 1));
++ p2m_convert_min_pfn = ROUNDDOWN(p2m_min_low_pfn,
++ p2m_granule_pfn);
++ p2m_convert_max_pfn = ROUNDUP(p2m_max_low_pfn, p2m_granule_pfn);
++ num_pfn = p2m_convert_max_pfn - p2m_convert_min_pfn;
++ size = num_pfn << PAGE_SHIFT;
++ p2m_size = num_pfn / PTRS_PER_PTE;
++ p2m_size = ROUNDUP(p2m_size, p2m_granule_pfn << PAGE_SHIFT);
++ align = max(privcmd_resource_align,
++ p2m_granule_pfn << PAGE_SHIFT);
++ }
++
++ // use privcmd region
++ error = allocate_resource(&iomem_resource, &p2m_resource, p2m_size,
++ privcmd_resource_min, privcmd_resource_max,
++ align, NULL, NULL);
++ if (error) {
++ printk(KERN_ERR P2M_PREFIX
++ "can't allocate region for p2m exposure "
++ "[0x%016lx, 0x%016lx) 0x%016lx\n",
++ p2m_convert_min_pfn, p2m_convert_max_pfn, p2m_size);
++ goto out;
++ }
++
++ p2m_assign_start_pfn = p2m_resource.start >> PAGE_SHIFT;
++ p2m_assign_end_pfn = p2m_resource.end >> PAGE_SHIFT;
++
++ error = HYPERVISOR_expose_p2m(p2m_convert_min_pfn,
++ p2m_assign_start_pfn,
++ size, p2m_granule_pfn);
++ if (error) {
++ printk(KERN_ERR P2M_PREFIX "failed expose p2m hypercall %d\n",
++ error);
++ printk(KERN_ERR P2M_PREFIX "conv 0x%016lx assign 0x%016lx "
++ "size 0x%016lx granule 0x%016lx\n",
++ p2m_convert_min_pfn, p2m_assign_start_pfn,
++ size, p2m_granule_pfn);;
++ release_resource(&p2m_resource);
++ goto out;
++ }
++ p2m_pte = (volatile const pte_t*)pfn_to_kaddr(p2m_assign_start_pfn);
++#ifdef CONFIG_XEN_IA64_EXPOSE_P2M_USE_DTR
++ if (xen_ia64_p2m_expose_use_dtr) {
++ p2m_itr_arg.vaddr = (unsigned long)__va(p2m_assign_start_pfn
++ << PAGE_SHIFT);
++ p2m_itr_arg.pteval = pte_val(pfn_pte(p2m_assign_start_pfn,
++ PAGE_KERNEL));
++ p2m_itr_arg.log_page_size = log_page_size;
++ smp_mb();
++ smp_call_function(&p2m_itr, &p2m_itr_arg, 1, 1);
++ p2m_itr(&p2m_itr_arg);
++ }
++#endif
++ smp_mb();
++ p2m_initialized = 1;
++ printk(P2M_PREFIX "assign p2m table of [0x%016lx, 0x%016lx)\n",
++ p2m_convert_min_pfn << PAGE_SHIFT,
++ p2m_convert_max_pfn << PAGE_SHIFT);
++ printk(P2M_PREFIX "to [0x%016lx, 0x%016lx) (%ld KBytes)\n",
++ p2m_assign_start_pfn << PAGE_SHIFT,
++ p2m_assign_end_pfn << PAGE_SHIFT,
++ p2m_size / 1024);
++out:
++ unlock_cpu_hotplug();
++ return error;
++}
++
++#ifdef notyet
++void
++p2m_expose_cleanup(void)
++{
++ BUG_ON(!p2m_initialized);
++#ifdef CONFIG_XEN_IA64_EXPOSE_P2M_USE_DTR
++ unregister_cpu_notifier(&p2m_expose_dtr_hotplug_notifier);
++#endif
++ release_resource(&p2m_resource);
++}
++#endif
++
++//XXX inlinize?
++unsigned long
++p2m_phystomach(unsigned long gpfn)
++{
++ volatile const pte_t* pte;
++ unsigned long mfn;
++ unsigned long pteval;
++
++ if (!p2m_initialized ||
++ gpfn < p2m_min_low_pfn || gpfn > p2m_max_low_pfn
++ /* || !pfn_valid(gpfn) */)
++ return INVALID_MFN;
++ pte = p2m_pte + (gpfn - p2m_convert_min_pfn);
++
++ mfn = INVALID_MFN;
++ if (likely(__get_user(pteval, (unsigned long __user *)pte) == 0 &&
++ pte_present(__pte(pteval)) &&
++ pte_pfn(__pte(pteval)) != (INVALID_MFN >> PAGE_SHIFT)))
++ mfn = (pteval & _PFN_MASK) >> PAGE_SHIFT;
++
++ return mfn;
++}
++
++EXPORT_SYMBOL_GPL(p2m_initialized);
++EXPORT_SYMBOL_GPL(p2m_min_low_pfn);
++EXPORT_SYMBOL_GPL(p2m_max_low_pfn);
++EXPORT_SYMBOL_GPL(p2m_convert_min_pfn);
++EXPORT_SYMBOL_GPL(p2m_convert_max_pfn);
++EXPORT_SYMBOL_GPL(p2m_pte);
++EXPORT_SYMBOL_GPL(p2m_phystomach);
++#endif
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/xen/Makefile linux-2.6.18-xen/arch/ia64/xen/Makefile
+--- linux-2.6.18.1/arch/ia64/xen/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/arch/ia64/xen/Makefile 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,9 @@
+#
+# Makefile for Xen components
+#
+
+obj-y := hypercall.o xenivt.o xenentry.o xensetup.o xenpal.o xenhpski.o \
-+ hypervisor.o pci-dma-xen.o util.o
++ hypervisor.o pci-dma-xen.o util.o xencomm.o xcom_hcall.o \
++ xcom_privcmd.o
+
+pci-dma-xen-y := ../../i386/kernel/pci-dma-xen.o
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/xen/util.c linux-2.6.18-xen/arch/ia64/xen/util.c
---- linux-2.6.18/arch/ia64/xen/util.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/arch/ia64/xen/util.c 2006-09-04 16:31:01.000000000 +0200
-@@ -0,0 +1,115 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/xen/util.c linux-2.6.18-xen/arch/ia64/xen/util.c
+--- linux-2.6.18.1/arch/ia64/xen/util.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/arch/ia64/xen/util.c 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,117 @@
+/******************************************************************************
+ * arch/ia64/xen/util.c
+ * This file is the ia64 counterpart of drivers/xen/util.c
@@ -24342,6 +24585,8 @@
+#include <linux/vmalloc.h>
+#include <asm/uaccess.h>
+#include <xen/driver_util.h>
++#include <xen/interface/memory.h>
++#include <asm/hypercall.h>
+
+struct vm_struct *alloc_vm_area(unsigned long size)
+{
@@ -24428,8 +24673,1333 @@
+ * tab-width: 8
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/xen/xenentry.S linux-2.6.18-xen/arch/ia64/xen/xenentry.S
---- linux-2.6.18/arch/ia64/xen/xenentry.S 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/xen/xcom_hcall.c linux-2.6.18-xen/arch/ia64/xen/xcom_hcall.c
+--- linux-2.6.18.1/arch/ia64/xen/xcom_hcall.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/arch/ia64/xen/xcom_hcall.c 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,469 @@
++/*
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++ *
++ * Tristan Gingold <tristan.gingold at bull.net>
++ */
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/gfp.h>
++#include <linux/module.h>
++#include <xen/interface/xen.h>
++#include <xen/interface/dom0_ops.h>
++#include <xen/interface/memory.h>
++#include <xen/interface/xencomm.h>
++#include <xen/interface/version.h>
++#include <xen/interface/sched.h>
++#include <xen/interface/event_channel.h>
++#include <xen/interface/physdev.h>
++#include <xen/interface/grant_table.h>
++#include <xen/interface/callback.h>
++#include <xen/interface/acm_ops.h>
++#include <xen/interface/hvm/params.h>
++#include <xen/public/privcmd.h>
++#include <asm/hypercall.h>
++#include <asm/page.h>
++#include <asm/uaccess.h>
++#include <asm/xen/xencomm.h>
++
++/* Xencomm notes:
++ * This file defines hypercalls to be used by xencomm. The hypercalls simply
++ * create inlines descriptors for pointers and then call the raw arch hypercall
++ * xencomm_arch_hypercall_XXX
++ *
++ * If the arch wants to directly use these hypercalls, simply define macros
++ * in asm/hypercall.h, eg:
++ * #define HYPERVISOR_sched_op xencomm_hypercall_sched_op
++ *
++ * The arch may also define HYPERVISOR_xxx as a function and do more operations
++ * before/after doing the hypercall.
++ *
++ * Note: because only inline descriptors are created these functions must only
++ * be called with in kernel memory parameters.
++ */
++
++int
++xencomm_hypercall_console_io(int cmd, int count, char *str)
++{
++ return xencomm_arch_hypercall_console_io
++ (cmd, count, xencomm_create_inline(str));
++}
++
++int
++xencomm_hypercall_event_channel_op(int cmd, void *op)
++{
++ return xencomm_arch_hypercall_event_channel_op
++ (cmd, xencomm_create_inline(op));
++}
++
++int
++xencomm_hypercall_xen_version(int cmd, void *arg)
++{
++ switch (cmd) {
++ case XENVER_version:
++ case XENVER_extraversion:
++ case XENVER_compile_info:
++ case XENVER_capabilities:
++ case XENVER_changeset:
++ case XENVER_platform_parameters:
++ case XENVER_pagesize:
++ case XENVER_get_features:
++ break;
++ default:
++ printk("%s: unknown version cmd %d\n", __func__, cmd);
++ return -ENOSYS;
++ }
++
++ return xencomm_arch_hypercall_xen_version
++ (cmd, xencomm_create_inline(arg));
++}
++
++int
++xencomm_hypercall_physdev_op(int cmd, void *op)
++{
++ return xencomm_arch_hypercall_physdev_op
++ (cmd, xencomm_create_inline(op));
++}
++
++static void *
++xencommize_grant_table_op(unsigned int cmd, void *op, unsigned int count)
++{
++ switch (cmd) {
++ case GNTTABOP_map_grant_ref:
++ case GNTTABOP_unmap_grant_ref:
++ break;
++ case GNTTABOP_setup_table:
++ {
++ struct gnttab_setup_table *setup = op;
++ struct xencomm_handle *frame_list;
++
++ frame_list = xencomm_create_inline
++ (xen_guest_handle(setup->frame_list));
++
++ set_xen_guest_handle(setup->frame_list, (void *)frame_list);
++ break;
++ }
++ case GNTTABOP_dump_table:
++ case GNTTABOP_transfer:
++ case GNTTABOP_copy:
++ break;
++ default:
++ printk("%s: unknown grant table op %d\n", __func__, cmd);
++ BUG();
++ }
++
++ return xencomm_create_inline(op);
++}
++
++int
++xencomm_hypercall_grant_table_op(unsigned int cmd, void *op, unsigned int count)
++{
++ void *desc = xencommize_grant_table_op (cmd, op, count);
++
++ return xencomm_arch_hypercall_grant_table_op(cmd, desc, count);
++}
++
++int
++xencomm_hypercall_sched_op(int cmd, void *arg)
++{
++ switch (cmd) {
++ case SCHEDOP_yield:
++ case SCHEDOP_block:
++ case SCHEDOP_shutdown:
++ case SCHEDOP_poll:
++ case SCHEDOP_remote_shutdown:
++ break;
++ default:
++ printk("%s: unknown sched op %d\n", __func__, cmd);
++ return -ENOSYS;
++ }
++
++ return xencomm_arch_hypercall_sched_op(cmd, xencomm_create_inline(arg));
++}
++
++int
++xencomm_hypercall_multicall(void *call_list, int nr_calls)
++{
++ int i;
++ multicall_entry_t *mce;
++
++ for (i = 0; i < nr_calls; i++) {
++ mce = (multicall_entry_t *)call_list + i;
++
++ switch (mce->op) {
++ case __HYPERVISOR_update_va_mapping:
++ case __HYPERVISOR_mmu_update:
++ /* No-op on ia64. */
++ break;
++ case __HYPERVISOR_grant_table_op:
++ mce->args[1] = (unsigned long)xencommize_grant_table_op
++ (mce->args[0], (void *)mce->args[1],
++ mce->args[2]);
++ break;
++ case __HYPERVISOR_memory_op:
++ default:
++ printk("%s: unhandled multicall op entry op %lu\n",
++ __func__, mce->op);
++ return -ENOSYS;
++ }
++ }
++
++ return xencomm_arch_hypercall_multicall
++ (xencomm_create_inline(call_list), nr_calls);
++}
++
++int
++xencomm_hypercall_callback_op(int cmd, void *arg)
++{
++ switch (cmd)
++ {
++ case CALLBACKOP_register:
++ case CALLBACKOP_unregister:
++ break;
++ default:
++ printk("%s: unknown callback op %d\n", __func__, cmd);
++ return -ENOSYS;
++ }
++
++ return xencomm_arch_hypercall_callback_op
++ (cmd, xencomm_create_inline(arg));
++}
++
++static void
++xencommize_memory_reservation (xen_memory_reservation_t *mop)
++{
++ struct xencomm_handle *desc;
++
++ desc = xencomm_create_inline(xen_guest_handle(mop->extent_start));
++ set_xen_guest_handle(mop->extent_start, (void *)desc);
++}
++
++int
++xencomm_hypercall_memory_op(unsigned int cmd, void *arg)
++{
++ switch (cmd) {
++ case XENMEM_increase_reservation:
++ case XENMEM_decrease_reservation:
++ case XENMEM_populate_physmap:
++ xencommize_memory_reservation((xen_memory_reservation_t *)arg);
++ break;
++
++ case XENMEM_maximum_ram_page:
++ break;
++
++ case XENMEM_exchange:
++ xencommize_memory_reservation
++ (&((xen_memory_exchange_t *)arg)->in);
++ xencommize_memory_reservation
++ (&((xen_memory_exchange_t *)arg)->out);
++ break;
++
++ default:
++ printk("%s: unknown memory op %d\n", __func__, cmd);
++ return -ENOSYS;
++ }
++
++ return xencomm_arch_hypercall_memory_op
++ (cmd, xencomm_create_inline(arg));
++}
++
++unsigned long
++xencomm_hypercall_hvm_op(int cmd, void *arg)
++{
++ switch (cmd) {
++ case HVMOP_set_param:
++ case HVMOP_get_param:
++ break;
++ default:
++ printk("%s: unknown hvm op %d\n", __func__, cmd);
++ return -ENOSYS;
++ }
++
++ return xencomm_arch_hypercall_hvm_op(cmd, xencomm_create_inline(arg));
++}
++
++int
++xencomm_hypercall_suspend(unsigned long srec)
++{
++ struct sched_shutdown arg;
++
++ arg.reason = SHUTDOWN_suspend;
++
++ return xencomm_arch_hypercall_suspend(xencomm_create_inline(&arg));
++}
++
++int
++xencomm_mini_hypercall_event_channel_op(int cmd, void *op)
++{
++ struct xencomm_mini xc_area[2];
++ int nbr_area = 2;
++ struct xencomm_handle *desc;
++ int rc;
++
++ rc = xencomm_create_mini(xc_area, &nbr_area,
++ op, sizeof(evtchn_op_t), &desc);
++ if (rc)
++ return rc;
++
++ return xencomm_arch_hypercall_event_channel_op(cmd, desc);
++}
++EXPORT_SYMBOL(xencomm_mini_hypercall_event_channel_op);
++
++static int
++xencommize_mini_grant_table_op(struct xencomm_mini *xc_area, int *nbr_area,
++ unsigned int cmd, void *op, unsigned int count,
++ struct xencomm_handle **desc)
++{
++ struct xencomm_handle *desc1;
++ unsigned int argsize;
++ int rc;
++
++ switch (cmd) {
++ case GNTTABOP_map_grant_ref:
++ argsize = sizeof(struct gnttab_map_grant_ref);
++ break;
++ case GNTTABOP_unmap_grant_ref:
++ argsize = sizeof(struct gnttab_unmap_grant_ref);
++ break;
++ case GNTTABOP_setup_table:
++ {
++ struct gnttab_setup_table *setup = op;
++
++ argsize = sizeof(*setup);
++
++ if (count != 1)
++ return -EINVAL;
++ rc = xencomm_create_mini
++ (xc_area, nbr_area,
++ xen_guest_handle(setup->frame_list),
++ setup->nr_frames
++ * sizeof(*xen_guest_handle(setup->frame_list)),
++ &desc1);
++ if (rc)
++ return rc;
++ set_xen_guest_handle(setup->frame_list, (void *)desc1);
++ break;
++ }
++ case GNTTABOP_dump_table:
++ argsize = sizeof(struct gnttab_dump_table);
++ break;
++ case GNTTABOP_transfer:
++ argsize = sizeof(struct gnttab_transfer);
++ break;
++ default:
++ printk("%s: unknown mini grant table op %d\n", __func__, cmd);
++ BUG();
++ }
++
++ rc = xencomm_create_mini(xc_area, nbr_area, op, count * argsize, desc);
++ if (rc)
++ return rc;
++
++ return 0;
++}
++
++int
++xencomm_mini_hypercall_grant_table_op(unsigned int cmd, void *op,
++ unsigned int count)
++{
++ int rc;
++ struct xencomm_handle *desc;
++ int nbr_area = 2;
++ struct xencomm_mini xc_area[2];
++
++ rc = xencommize_mini_grant_table_op(xc_area, &nbr_area,
++ cmd, op, count, &desc);
++ if (rc)
++ return rc;
++
++ return xencomm_arch_hypercall_grant_table_op(cmd, desc, count);
++}
++EXPORT_SYMBOL(xencomm_mini_hypercall_grant_table_op);
++
++int
++xencomm_mini_hypercall_multicall(void *call_list, int nr_calls)
++{
++ int i;
++ multicall_entry_t *mce;
++ int nbr_area = 2 + nr_calls * 3;
++ struct xencomm_mini xc_area[nbr_area];
++ struct xencomm_handle *desc;
++ int rc;
++
++ for (i = 0; i < nr_calls; i++) {
++ mce = (multicall_entry_t *)call_list + i;
++
++ switch (mce->op) {
++ case __HYPERVISOR_update_va_mapping:
++ case __HYPERVISOR_mmu_update:
++ /* No-op on ia64. */
++ break;
++ case __HYPERVISOR_grant_table_op:
++ rc = xencommize_mini_grant_table_op
++ (xc_area, &nbr_area,
++ mce->args[0], (void *)mce->args[1],
++ mce->args[2], &desc);
++ if (rc)
++ return rc;
++ mce->args[1] = (unsigned long)desc;
++ break;
++ case __HYPERVISOR_memory_op:
++ default:
++ printk("%s: unhandled multicall op entry op %lu\n",
++ __func__, mce->op);
++ return -ENOSYS;
++ }
++ }
++
++ rc = xencomm_create_mini(xc_area, &nbr_area, call_list,
++ nr_calls * sizeof(multicall_entry_t), &desc);
++ if (rc)
++ return rc;
++
++ return xencomm_arch_hypercall_multicall(desc, nr_calls);
++}
++EXPORT_SYMBOL(xencomm_mini_hypercall_multicall);
++
++static int
++xencommize_mini_memory_reservation(struct xencomm_mini *area, int *nbr_area,
++ xen_memory_reservation_t *mop)
++{
++ struct xencomm_handle *desc;
++ int rc;
++
++ rc = xencomm_create_mini
++ (area, nbr_area,
++ xen_guest_handle(mop->extent_start),
++ mop->nr_extents
++ * sizeof(*xen_guest_handle(mop->extent_start)),
++ &desc);
++ if (rc)
++ return rc;
++
++ set_xen_guest_handle(mop->extent_start, (void *)desc);
++
++ return 0;
++}
++
++int
++xencomm_mini_hypercall_memory_op(unsigned int cmd, void *arg)
++{
++ int nbr_area = 4;
++ struct xencomm_mini xc_area[4];
++ struct xencomm_handle *desc;
++ int rc;
++ unsigned int argsize;
++
++ switch (cmd) {
++ case XENMEM_increase_reservation:
++ case XENMEM_decrease_reservation:
++ case XENMEM_populate_physmap:
++ argsize = sizeof(xen_memory_reservation_t);
++ rc = xencommize_mini_memory_reservation
++ (xc_area, &nbr_area, (xen_memory_reservation_t *)arg);
++ if (rc)
++ return rc;
++ break;
++
++ case XENMEM_maximum_ram_page:
++ argsize = 0;
++ break;
++
++ case XENMEM_exchange:
++ argsize = sizeof(xen_memory_exchange_t);
++ rc = xencommize_mini_memory_reservation
++ (xc_area, &nbr_area,
++ &((xen_memory_exchange_t *)arg)->in);
++ if (rc)
++ return rc;
++ rc = xencommize_mini_memory_reservation
++ (xc_area, &nbr_area,
++ &((xen_memory_exchange_t *)arg)->out);
++ if (rc)
++ return rc;
++ break;
++
++ default:
++ printk("%s: unknown mini memory op %d\n", __func__, cmd);
++ return -ENOSYS;
++ }
++
++ rc = xencomm_create_mini(xc_area, &nbr_area, arg, argsize, &desc);
++ if (rc)
++ return rc;
++
++ return xencomm_arch_hypercall_memory_op(cmd, desc);
++}
++EXPORT_SYMBOL(xencomm_mini_hypercall_memory_op);
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/xen/xcom_privcmd.c linux-2.6.18-xen/arch/ia64/xen/xcom_privcmd.c
+--- linux-2.6.18.1/arch/ia64/xen/xcom_privcmd.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/arch/ia64/xen/xcom_privcmd.c 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,600 @@
++/*
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++ *
++ * Authors: Hollis Blanchard <hollisb at us.ibm.com>
++ * Tristan Gingold <tristan.gingold at bull.net>
++ */
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/gfp.h>
++#include <linux/module.h>
++#include <xen/interface/xen.h>
++#include <xen/interface/dom0_ops.h>
++#define __XEN__
++#include <xen/interface/domctl.h>
++#include <xen/interface/sysctl.h>
++#include <xen/interface/memory.h>
++#include <xen/interface/version.h>
++#include <xen/interface/event_channel.h>
++#include <xen/interface/acm_ops.h>
++#include <xen/interface/hvm/params.h>
++#include <xen/public/privcmd.h>
++#include <asm/hypercall.h>
++#include <asm/page.h>
++#include <asm/uaccess.h>
++#include <asm/xen/xencomm.h>
++
++#define ROUND_DIV(v,s) (((v) + (s) - 1) / (s))
++
++static int
++xencomm_privcmd_dom0_op(privcmd_hypercall_t *hypercall)
++{
++ dom0_op_t kern_op;
++ dom0_op_t __user *user_op = (dom0_op_t __user *)hypercall->arg[0];
++ struct xencomm_handle *op_desc;
++ struct xencomm_handle *desc = NULL;
++ int ret = 0;
++
++ if (copy_from_user(&kern_op, user_op, sizeof(dom0_op_t)))
++ return -EFAULT;
++
++ if (kern_op.interface_version != DOM0_INTERFACE_VERSION)
++ return -EACCES;
++
++ op_desc = xencomm_create_inline(&kern_op);
++
++ switch (kern_op.cmd) {
++ default:
++ printk("%s: unknown dom0 cmd %d\n", __func__, kern_op.cmd);
++ return -ENOSYS;
++ }
++
++ if (ret) {
++ /* error mapping the nested pointer */
++ return ret;
++ }
++
++ ret = xencomm_arch_hypercall_dom0_op(op_desc);
++
++ /* FIXME: should we restore the handle? */
++ if (copy_to_user(user_op, &kern_op, sizeof(dom0_op_t)))
++ ret = -EFAULT;
++
++ if (desc)
++ xencomm_free(desc);
++ return ret;
++}
++
++static int
++xencomm_privcmd_sysctl(privcmd_hypercall_t *hypercall)
++{
++ xen_sysctl_t kern_op;
++ xen_sysctl_t __user *user_op;
++ struct xencomm_handle *op_desc;
++ struct xencomm_handle *desc = NULL;
++ struct xencomm_handle *desc1 = NULL;
++ int ret = 0;
++
++ user_op = (xen_sysctl_t __user *)hypercall->arg[0];
++
++ if (copy_from_user(&kern_op, user_op, sizeof(xen_sysctl_t)))
++ return -EFAULT;
++
++ if (kern_op.interface_version != XEN_SYSCTL_INTERFACE_VERSION)
++ return -EACCES;
++
++ op_desc = xencomm_create_inline(&kern_op);
++
++ switch (kern_op.cmd) {
++ case XEN_SYSCTL_readconsole:
++ ret = xencomm_create(
++ xen_guest_handle(kern_op.u.readconsole.buffer),
++ kern_op.u.readconsole.count,
++ &desc, GFP_KERNEL);
++ set_xen_guest_handle(kern_op.u.readconsole.buffer,
++ (void *)desc);
++ break;
++ case XEN_SYSCTL_tbuf_op:
++ case XEN_SYSCTL_physinfo:
++ case XEN_SYSCTL_sched_id:
++ break;
++ case XEN_SYSCTL_perfc_op:
++ ret = xencomm_create(
++ xen_guest_handle(kern_op.u.perfc_op.desc),
++ kern_op.u.perfc_op.nr_counters *
++ sizeof(xen_sysctl_perfc_desc_t),
++ &desc, GFP_KERNEL);
++ if (ret)
++ return ret;
++ set_xen_guest_handle(kern_op.u.perfc_op.val,
++ (void *)desc);
++ ret = xencomm_create(
++ xen_guest_handle(kern_op.u.perfc_op.val),
++ kern_op.u.perfc_op.nr_vals *
++ sizeof(xen_sysctl_perfc_desc_t),
++ &desc1, GFP_KERNEL);
++ if (ret)
++ xencomm_free(desc);
++ set_xen_guest_handle(kern_op.u.perfc_op.val,
++ (void *)desc1);
++ break;
++ case XEN_SYSCTL_getdomaininfolist:
++ ret = xencomm_create(
++ xen_guest_handle(kern_op.u.getdomaininfolist.buffer),
++ kern_op.u.getdomaininfolist.max_domains *
++ sizeof(xen_domctl_getdomaininfo_t),
++ &desc, GFP_KERNEL);
++ set_xen_guest_handle(kern_op.u.getdomaininfolist.buffer,
++ (void *)desc);
++ break;
++ default:
++ printk("%s: unknown sysctl cmd %d\n", __func__, kern_op.cmd);
++ return -ENOSYS;
++ }
++
++ if (ret) {
++ /* error mapping the nested pointer */
++ return ret;
++ }
++
++ ret = xencomm_arch_hypercall_sysctl(op_desc);
++
++ /* FIXME: should we restore the handle? */
++ if (copy_to_user(user_op, &kern_op, sizeof(xen_sysctl_t)))
++ ret = -EFAULT;
++
++ if (desc)
++ xencomm_free(desc);
++ if (desc1)
++ xencomm_free(desc1);
++ return ret;
++}
++
++static int
++xencomm_privcmd_domctl(privcmd_hypercall_t *hypercall)
++{
++ xen_domctl_t kern_op;
++ xen_domctl_t __user *user_op;
++ struct xencomm_handle *op_desc;
++ struct xencomm_handle *desc = NULL;
++ int ret = 0;
++
++ user_op = (xen_domctl_t __user *)hypercall->arg[0];
++
++ if (copy_from_user(&kern_op, user_op, sizeof(xen_domctl_t)))
++ return -EFAULT;
++
++ if (kern_op.interface_version != XEN_DOMCTL_INTERFACE_VERSION)
++ return -EACCES;
++
++ op_desc = xencomm_create_inline(&kern_op);
++
++ switch (kern_op.cmd) {
++ case XEN_DOMCTL_createdomain:
++ case XEN_DOMCTL_destroydomain:
++ case XEN_DOMCTL_pausedomain:
++ case XEN_DOMCTL_unpausedomain:
++ case XEN_DOMCTL_getdomaininfo:
++ break;
++ case XEN_DOMCTL_getmemlist:
++ {
++ unsigned long nr_pages = kern_op.u.getmemlist.max_pfns;
++
++ ret = xencomm_create(
++ xen_guest_handle(kern_op.u.getmemlist.buffer),
++ nr_pages * sizeof(unsigned long),
++ &desc, GFP_KERNEL);
++ set_xen_guest_handle(kern_op.u.getmemlist.buffer,
++ (void *)desc);
++ break;
++ }
++ case XEN_DOMCTL_getpageframeinfo:
++ break;
++ case XEN_DOMCTL_getpageframeinfo2:
++ ret = xencomm_create(
++ xen_guest_handle(kern_op.u.getpageframeinfo2.array),
++ kern_op.u.getpageframeinfo2.num,
++ &desc, GFP_KERNEL);
++ set_xen_guest_handle(kern_op.u.getpageframeinfo2.array,
++ (void *)desc);
++ break;
++ case XEN_DOMCTL_shadow_op:
++ ret = xencomm_create(
++ xen_guest_handle(kern_op.u.shadow_op.dirty_bitmap),
++ ROUND_DIV(kern_op.u.shadow_op.pages, 8),
++ &desc, GFP_KERNEL);
++ set_xen_guest_handle(kern_op.u.shadow_op.dirty_bitmap,
++ (void *)desc);
++ break;
++ case XEN_DOMCTL_max_mem:
++ break;
++ case XEN_DOMCTL_setvcpucontext:
++ case XEN_DOMCTL_getvcpucontext:
++ ret = xencomm_create(
++ xen_guest_handle(kern_op.u.vcpucontext.ctxt),
++ sizeof(vcpu_guest_context_t),
++ &desc, GFP_KERNEL);
++ set_xen_guest_handle(kern_op.u.vcpucontext.ctxt, (void *)desc);
++ break;
++ case XEN_DOMCTL_getvcpuinfo:
++ break;
++ case XEN_DOMCTL_setvcpuaffinity:
++ case XEN_DOMCTL_getvcpuaffinity:
++ ret = xencomm_create(
++ xen_guest_handle(kern_op.u.vcpuaffinity.cpumap.bitmap),
++ ROUND_DIV(kern_op.u.vcpuaffinity.cpumap.nr_cpus, 8),
++ &desc, GFP_KERNEL);
++ set_xen_guest_handle(kern_op.u.vcpuaffinity.cpumap.bitmap,
++ (void *)desc);
++ break;
++ case XEN_DOMCTL_max_vcpus:
++ case XEN_DOMCTL_scheduler_op:
++ case XEN_DOMCTL_setdomainhandle:
++ case XEN_DOMCTL_setdebugging:
++ case XEN_DOMCTL_irq_permission:
++ case XEN_DOMCTL_iomem_permission:
++ case XEN_DOMCTL_ioport_permission:
++ case XEN_DOMCTL_hypercall_init:
++ case XEN_DOMCTL_arch_setup:
++ case XEN_DOMCTL_settimeoffset:
++ break;
++ default:
++ printk("%s: unknown domctl cmd %d\n", __func__, kern_op.cmd);
++ return -ENOSYS;
++ }
++
++ if (ret) {
++ /* error mapping the nested pointer */
++ return ret;
++ }
++
++ ret = xencomm_arch_hypercall_domctl (op_desc);
++
++ /* FIXME: should we restore the handle? */
++ if (copy_to_user(user_op, &kern_op, sizeof(xen_domctl_t)))
++ ret = -EFAULT;
++
++ if (desc)
++ xencomm_free(desc);
++ return ret;
++}
++
++static int
++xencomm_privcmd_acm_op(privcmd_hypercall_t *hypercall)
++{
++ int cmd = hypercall->arg[0];
++ void __user *arg = (void __user *)hypercall->arg[1];
++ struct xencomm_handle *op_desc;
++ struct xencomm_handle *desc = NULL;
++ int ret;
++
++ switch (cmd) {
++ case ACMOP_getssid:
++ {
++ struct acm_getssid kern_arg;
++
++ if (copy_from_user(&kern_arg, arg, sizeof (kern_arg)))
++ return -EFAULT;
++
++ op_desc = xencomm_create_inline(&kern_arg);
++
++ ret = xencomm_create(xen_guest_handle(kern_arg.ssidbuf),
++ kern_arg.ssidbuf_size, &desc, GFP_KERNEL);
++ if (ret)
++ return ret;
++
++ set_xen_guest_handle(kern_arg.ssidbuf, (void *)desc);
++
++ ret = xencomm_arch_hypercall_acm_op(cmd, op_desc);
++
++ xencomm_free(desc);
++
++ if (copy_to_user(arg, &kern_arg, sizeof (kern_arg)))
++ return -EFAULT;
++
++ return ret;
++ }
++ default:
++ printk("%s: unknown acm_op cmd %d\n", __func__, cmd);
++ return -ENOSYS;
++ }
++
++ return ret;
++}
++
++static int
++xencomm_privcmd_memory_op(privcmd_hypercall_t *hypercall)
++{
++ const unsigned long cmd = hypercall->arg[0];
++ int ret = 0;
++
++ switch (cmd) {
++ case XENMEM_increase_reservation:
++ case XENMEM_decrease_reservation:
++ case XENMEM_populate_physmap:
++ {
++ xen_memory_reservation_t kern_op;
++ xen_memory_reservation_t __user *user_op;
++ struct xencomm_handle *desc = NULL;
++ struct xencomm_handle *desc_op;
++
++ user_op = (xen_memory_reservation_t __user *)hypercall->arg[1];
++ if (copy_from_user(&kern_op, user_op,
++ sizeof(xen_memory_reservation_t)))
++ return -EFAULT;
++ desc_op = xencomm_create_inline(&kern_op);
++
++ if (xen_guest_handle(kern_op.extent_start)) {
++ void * addr;
++
++ addr = xen_guest_handle(kern_op.extent_start);
++ ret = xencomm_create
++ (addr,
++ kern_op.nr_extents *
++ sizeof(*xen_guest_handle
++ (kern_op.extent_start)),
++ &desc, GFP_KERNEL);
++ if (ret)
++ return ret;
++ set_xen_guest_handle(kern_op.extent_start,
++ (void *)desc);
++ }
++
++ ret = xencomm_arch_hypercall_memory_op(cmd, desc_op);
++
++ if (desc)
++ xencomm_free(desc);
++
++ if (ret != 0)
++ return ret;
++
++ if (copy_to_user(user_op, &kern_op,
++ sizeof(xen_memory_reservation_t)))
++ return -EFAULT;
++
++ return ret;
++ }
++ case XENMEM_translate_gpfn_list:
++ {
++ xen_translate_gpfn_list_t kern_op;
++ xen_translate_gpfn_list_t __user *user_op;
++ struct xencomm_handle *desc_gpfn = NULL;
++ struct xencomm_handle *desc_mfn = NULL;
++ struct xencomm_handle *desc_op;
++ void *addr;
++
++ user_op = (xen_translate_gpfn_list_t __user *)
++ hypercall->arg[1];
++ if (copy_from_user(&kern_op, user_op,
++ sizeof(xen_translate_gpfn_list_t)))
++ return -EFAULT;
++ desc_op = xencomm_create_inline(&kern_op);
++
++ if (kern_op.nr_gpfns) {
++ /* gpfn_list. */
++ addr = xen_guest_handle(kern_op.gpfn_list);
++
++ ret = xencomm_create(addr, kern_op.nr_gpfns *
++ sizeof(*xen_guest_handle
++ (kern_op.gpfn_list)),
++ &desc_gpfn, GFP_KERNEL);
++ if (ret)
++ return ret;
++ set_xen_guest_handle(kern_op.gpfn_list,
++ (void *)desc_gpfn);
++
++ /* mfn_list. */
++ addr = xen_guest_handle(kern_op.mfn_list);
++
++ ret = xencomm_create(addr, kern_op.nr_gpfns *
++ sizeof(*xen_guest_handle
++ (kern_op.mfn_list)),
++ &desc_mfn, GFP_KERNEL);
++ if (ret)
++ return ret;
++ set_xen_guest_handle(kern_op.mfn_list,
++ (void *)desc_mfn);
++ }
++
++ ret = xencomm_arch_hypercall_memory_op(cmd, desc_op);
++
++ if (desc_gpfn)
++ xencomm_free(desc_gpfn);
++
++ if (desc_mfn)
++ xencomm_free(desc_mfn);
++
++ if (ret != 0)
++ return ret;
++
++ return ret;
++ }
++ default:
++ printk("%s: unknown memory op %lu\n", __func__, cmd);
++ ret = -ENOSYS;
++ }
++ return ret;
++}
++
++static int
++xencomm_privcmd_xen_version(privcmd_hypercall_t *hypercall)
++{
++ int cmd = hypercall->arg[0];
++ void __user *arg = (void __user *)hypercall->arg[1];
++ struct xencomm_handle *desc;
++ size_t argsize;
++ int rc;
++
++ switch (cmd) {
++ case XENVER_version:
++ /* do not actually pass an argument */
++ return xencomm_arch_hypercall_xen_version(cmd, 0);
++ case XENVER_extraversion:
++ argsize = sizeof(xen_extraversion_t);
++ break;
++ case XENVER_compile_info:
++ argsize = sizeof(xen_compile_info_t);
++ break;
++ case XENVER_capabilities:
++ argsize = sizeof(xen_capabilities_info_t);
++ break;
++ case XENVER_changeset:
++ argsize = sizeof(xen_changeset_info_t);
++ break;
++ case XENVER_platform_parameters:
++ argsize = sizeof(xen_platform_parameters_t);
++ break;
++ case XENVER_pagesize:
++ argsize = (arg == NULL) ? 0 : sizeof(void *);
++ break;
++ case XENVER_get_features:
++ argsize = (arg == NULL) ? 0 : sizeof(xen_feature_info_t);
++ break;
++
++ default:
++ printk("%s: unknown version op %d\n", __func__, cmd);
++ return -ENOSYS;
++ }
++
++ rc = xencomm_create(arg, argsize, &desc, GFP_KERNEL);
++ if (rc)
++ return rc;
++
++ rc = xencomm_arch_hypercall_xen_version(cmd, desc);
++
++ xencomm_free(desc);
++
++ return rc;
++}
++
++static int
++xencomm_privcmd_event_channel_op(privcmd_hypercall_t *hypercall)
++{
++ int cmd = hypercall->arg[0];
++ struct xencomm_handle *desc;
++ unsigned int argsize;
++ int ret;
++
++ switch (cmd) {
++ case EVTCHNOP_alloc_unbound:
++ argsize = sizeof(evtchn_alloc_unbound_t);
++ break;
++
++ case EVTCHNOP_status:
++ argsize = sizeof(evtchn_status_t);
++ break;
++
++ default:
++ printk("%s: unknown EVTCHNOP %d\n", __func__, cmd);
++ return -EINVAL;
++ }
++
++ ret = xencomm_create((void *)hypercall->arg[1], argsize,
++ &desc, GFP_KERNEL);
++ if (ret)
++ return ret;
++
++ ret = xencomm_arch_hypercall_event_channel_op(cmd, desc);
++
++ xencomm_free(desc);
++ return ret;
++}
++
++static int
++xencomm_privcmd_hvm_op(privcmd_hypercall_t *hypercall)
++{
++ int cmd = hypercall->arg[0];
++ struct xencomm_handle *desc;
++ unsigned int argsize;
++ int ret;
++
++ switch (cmd) {
++ case HVMOP_get_param:
++ case HVMOP_set_param:
++ argsize = sizeof(xen_hvm_param_t);
++ break;
++ default:
++ printk("%s: unknown HVMOP %d\n", __func__, cmd);
++ return -EINVAL;
++ }
++
++ ret = xencomm_create((void *)hypercall->arg[1], argsize,
++ &desc, GFP_KERNEL);
++ if (ret)
++ return ret;
++
++ ret = xencomm_arch_hypercall_hvm_op(cmd, desc);
++
++ xencomm_free(desc);
++ return ret;
++}
++
++static int
++xencomm_privcmd_sched_op(privcmd_hypercall_t *hypercall)
++{
++ int cmd = hypercall->arg[0];
++ struct xencomm_handle *desc;
++ unsigned int argsize;
++ int ret;
++
++ switch (cmd) {
++ case SCHEDOP_remote_shutdown:
++ argsize = sizeof(sched_remote_shutdown_t);
++ break;
++ default:
++ printk("%s: unknown SCHEDOP %d\n", __func__, cmd);
++ return -EINVAL;
++ }
++
++ ret = xencomm_create((void *)hypercall->arg[1], argsize,
++ &desc, GFP_KERNEL);
++ if (ret)
++ return ret;
++
++ ret = xencomm_arch_hypercall_sched_op(cmd, desc);
++
++ xencomm_free(desc);
++ return ret;
++}
++
++int
++privcmd_hypercall(privcmd_hypercall_t *hypercall)
++{
++ switch (hypercall->op) {
++ case __HYPERVISOR_dom0_op:
++ return xencomm_privcmd_dom0_op(hypercall);
++ case __HYPERVISOR_domctl:
++ return xencomm_privcmd_domctl(hypercall);
++ case __HYPERVISOR_sysctl:
++ return xencomm_privcmd_sysctl(hypercall);
++ case __HYPERVISOR_acm_op:
++ return xencomm_privcmd_acm_op(hypercall);
++ case __HYPERVISOR_xen_version:
++ return xencomm_privcmd_xen_version(hypercall);
++ case __HYPERVISOR_memory_op:
++ return xencomm_privcmd_memory_op(hypercall);
++ case __HYPERVISOR_event_channel_op:
++ return xencomm_privcmd_event_channel_op(hypercall);
++ case __HYPERVISOR_hvm_op:
++ return xencomm_privcmd_hvm_op(hypercall);
++ case __HYPERVISOR_sched_op:
++ return xencomm_privcmd_sched_op(hypercall);
++ default:
++ printk("%s: unknown hcall (%ld)\n", __func__, hypercall->op);
++ return -ENOSYS;
++ }
++}
++
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/xen/xencomm.c linux-2.6.18-xen/arch/ia64/xen/xencomm.c
+--- linux-2.6.18.1/arch/ia64/xen/xencomm.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/arch/ia64/xen/xencomm.c 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,244 @@
++/*
++ * Copyright (C) 2006 Hollis Blanchard <hollisb at us.ibm.com>, IBM Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#include <linux/gfp.h>
++#include <linux/mm.h>
++#include <asm/page.h>
++#include <asm/xen/xencomm.h>
++#include <xen/interface/xen.h>
++
++static int xencomm_debug = 0;
++
++/* Translate virtual address to physical address. */
++unsigned long
++xencomm_vaddr_to_paddr(unsigned long vaddr)
++{
++ struct page *page;
++ struct vm_area_struct *vma;
++
++ if (vaddr == 0)
++ return 0;
++
++#ifdef __ia64__
++ if (REGION_NUMBER(vaddr) == 5) {
++ pgd_t *pgd;
++ pud_t *pud;
++ pmd_t *pmd;
++ pte_t *ptep;
++
++ /* On ia64, TASK_SIZE refers to current. It is not initialized
++ during boot.
++ Furthermore the kernel is relocatable and __pa() doesn't
++ work on addresses. */
++ if (vaddr >= KERNEL_START
++ && vaddr < (KERNEL_START + KERNEL_TR_PAGE_SIZE)) {
++ extern unsigned long kernel_start_pa;
++
++ return vaddr - kernel_start_pa;
++ }
++
++ /* In kernel area -- virtually mapped. */
++ pgd = pgd_offset_k(vaddr);
++ if (pgd_none(*pgd) || pgd_bad(*pgd))
++ return ~0UL;
++
++ pud = pud_offset(pgd, vaddr);
++ if (pud_none(*pud) || pud_bad(*pud))
++ return ~0UL;
++
++ pmd = pmd_offset(pud, vaddr);
++ if (pmd_none(*pmd) || pmd_bad(*pmd))
++ return ~0UL;
++
++ ptep = pte_offset_kernel(pmd, vaddr);
++ if (!ptep)
++ return ~0UL;
++
++ return (pte_val(*ptep) & _PFN_MASK) | (vaddr & ~PAGE_MASK);
++ }
++#endif
++
++ if (vaddr > TASK_SIZE) {
++ /* kernel address */
++ return __pa(vaddr);
++ }
++
++ /* XXX double-check (lack of) locking */
++ vma = find_extend_vma(current->mm, vaddr);
++ if (!vma)
++ return ~0UL;
++
++ /* We assume the page is modified. */
++ page = follow_page(vma, vaddr, FOLL_WRITE | FOLL_TOUCH);
++ if (!page)
++ return ~0UL;
++
++ return (page_to_pfn(page) << PAGE_SHIFT) | (vaddr & ~PAGE_MASK);
++}
++
++static int
++xencomm_init(struct xencomm_desc *desc, void *buffer, unsigned long bytes)
++{
++ unsigned long recorded = 0;
++ int i = 0;
++
++ BUG_ON((buffer == NULL) && (bytes > 0));
++
++ /* record the physical pages used */
++ if (buffer == NULL)
++ desc->nr_addrs = 0;
++
++ while ((recorded < bytes) && (i < desc->nr_addrs)) {
++ unsigned long vaddr = (unsigned long)buffer + recorded;
++ unsigned long paddr;
++ int offset;
++ int chunksz;
++
++ offset = vaddr % PAGE_SIZE; /* handle partial pages */
++ chunksz = min(PAGE_SIZE - offset, bytes - recorded);
++
++ paddr = xencomm_vaddr_to_paddr(vaddr);
++ if (paddr == ~0UL) {
++ printk("%s: couldn't translate vaddr %lx\n",
++ __func__, vaddr);
++ return -EINVAL;
++ }
++
++ desc->address[i++] = paddr;
++ recorded += chunksz;
++ }
++
++ if (recorded < bytes) {
++ printk("%s: could only translate %ld of %ld bytes\n",
++ __func__, recorded, bytes);
++ return -ENOSPC;
++ }
++
++ /* mark remaining addresses invalid (just for safety) */
++ while (i < desc->nr_addrs)
++ desc->address[i++] = XENCOMM_INVALID;
++
++ desc->magic = XENCOMM_MAGIC;
++
++ return 0;
++}
++
++static struct xencomm_desc *
++xencomm_alloc(gfp_t gfp_mask)
++{
++ struct xencomm_desc *desc;
++
++ desc = (struct xencomm_desc *)__get_free_page(gfp_mask);
++ if (desc == NULL)
++ panic("%s: page allocation failed\n", __func__);
++
++ desc->nr_addrs = (PAGE_SIZE - sizeof(struct xencomm_desc)) /
++ sizeof(*desc->address);
++
++ return desc;
++}
++
++void
++xencomm_free(struct xencomm_handle *desc)
++{
++ if (desc)
++ free_page((unsigned long)__va(desc));
++}
++
++int
++xencomm_create(void *buffer, unsigned long bytes,
++ struct xencomm_handle **ret, gfp_t gfp_mask)
++{
++ struct xencomm_desc *desc;
++ struct xencomm_handle *handle;
++ int rc;
++
++ if (xencomm_debug)
++ printk("%s: %p[%ld]\n", __func__, buffer, bytes);
++
++ if (buffer == NULL || bytes == 0) {
++ *ret = (struct xencomm_handle *)NULL;
++ return 0;
++ }
++
++ desc = xencomm_alloc(gfp_mask);
++ if (!desc) {
++ printk("%s failure\n", "xencomm_alloc");
++ return -ENOMEM;
++ }
++ handle = (struct xencomm_handle *)__pa(desc);
++
++ rc = xencomm_init(desc, buffer, bytes);
++ if (rc) {
++ printk("%s failure: %d\n", "xencomm_init", rc);
++ xencomm_free(handle);
++ return rc;
++ }
++
++ *ret = handle;
++ return 0;
++}
++
++/* "mini" routines, for stack-based communications: */
++
++static void *
++xencomm_alloc_mini(struct xencomm_mini *area, int *nbr_area)
++{
++ unsigned long base;
++ unsigned int pageoffset;
++
++ while (*nbr_area >= 0) {
++ /* Allocate an area. */
++ (*nbr_area)--;
++
++ base = (unsigned long)(area + *nbr_area);
++ pageoffset = base % PAGE_SIZE;
++
++ /* If the area does not cross a page, use it. */
++ if ((PAGE_SIZE - pageoffset) >= sizeof(struct xencomm_mini))
++ return &area[*nbr_area];
++ }
++ /* No more area. */
++ return NULL;
++}
++
++int
++xencomm_create_mini(struct xencomm_mini *area, int *nbr_area,
++ void *buffer, unsigned long bytes,
++ struct xencomm_handle **ret)
++{
++ struct xencomm_desc *desc;
++ int rc;
++ unsigned long res;
++
++ desc = xencomm_alloc_mini(area, nbr_area);
++ if (!desc)
++ return -ENOMEM;
++ desc->nr_addrs = XENCOMM_MINI_ADDRS;
++
++ rc = xencomm_init(desc, buffer, bytes);
++ if (rc)
++ return rc;
++
++ res = xencomm_vaddr_to_paddr((unsigned long)desc);
++ if (res == ~0UL)
++ return -EINVAL;
++
++ *ret = (struct xencomm_handle*)res;
++ return 0;
++}
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/xen/xenentry.S linux-2.6.18-xen/arch/ia64/xen/xenentry.S
+--- linux-2.6.18.1/arch/ia64/xen/xenentry.S 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/ia64/xen/xenentry.S 2006-09-04 16:31:01.000000000 +0200
@@ -0,0 +1,867 @@
+/*
@@ -25299,8 +26869,8 @@
+#else
+END(ia64_leave_kernel)
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/xen/xenhpski.c linux-2.6.18-xen/arch/ia64/xen/xenhpski.c
---- linux-2.6.18/arch/ia64/xen/xenhpski.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/xen/xenhpski.c linux-2.6.18-xen/arch/ia64/xen/xenhpski.c
+--- linux-2.6.18.1/arch/ia64/xen/xenhpski.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/ia64/xen/xenhpski.c 2006-09-04 16:31:01.000000000 +0200
@@ -0,0 +1,19 @@
+
@@ -25322,8 +26892,8 @@
+ return 1;
+}
+
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/xen/xenivt.S linux-2.6.18-xen/arch/ia64/xen/xenivt.S
---- linux-2.6.18/arch/ia64/xen/xenivt.S 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/xen/xenivt.S linux-2.6.18-xen/arch/ia64/xen/xenivt.S
+--- linux-2.6.18.1/arch/ia64/xen/xenivt.S 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/ia64/xen/xenivt.S 2006-09-04 16:31:01.000000000 +0200
@@ -0,0 +1,2169 @@
+/*
@@ -27495,8 +29065,8 @@
+ br.call.sptk.many b6=evtchn_do_upcall
+END(xen_event_callback)
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/xen/xenminstate.h linux-2.6.18-xen/arch/ia64/xen/xenminstate.h
---- linux-2.6.18/arch/ia64/xen/xenminstate.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/xen/xenminstate.h linux-2.6.18-xen/arch/ia64/xen/xenminstate.h
+--- linux-2.6.18.1/arch/ia64/xen/xenminstate.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/ia64/xen/xenminstate.h 2006-09-04 16:31:01.000000000 +0200
@@ -0,0 +1,368 @@
+
@@ -27867,8 +29437,8 @@
+#else
+#define SAVE_MIN DO_SAVE_MIN( , mov r30=r0, )
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/xen/xenpal.S linux-2.6.18-xen/arch/ia64/xen/xenpal.S
---- linux-2.6.18/arch/ia64/xen/xenpal.S 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/xen/xenpal.S linux-2.6.18-xen/arch/ia64/xen/xenpal.S
+--- linux-2.6.18.1/arch/ia64/xen/xenpal.S 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/ia64/xen/xenpal.S 2006-09-04 16:31:01.000000000 +0200
@@ -0,0 +1,76 @@
+/*
@@ -27947,10 +29517,10 @@
+ srlz.d // seralize restoration of psr.l
+ br.ret.sptk.many b0
+END(xen_pal_call_static)
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/xen/xensetup.S linux-2.6.18-xen/arch/ia64/xen/xensetup.S
---- linux-2.6.18/arch/ia64/xen/xensetup.S 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/arch/ia64/xen/xensetup.S 2006-09-04 16:31:01.000000000 +0200
-@@ -0,0 +1,54 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/ia64/xen/xensetup.S linux-2.6.18-xen/arch/ia64/xen/xensetup.S
+--- linux-2.6.18.1/arch/ia64/xen/xensetup.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/arch/ia64/xen/xensetup.S 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,53 @@
+/*
+ * Support routines for Xen
+ *
@@ -27975,12 +29545,11 @@
+
+ mov cr.iva=r10
+
-+#if XSI_BASE != 0xf100000000000000UL
-+ /* Backward compatibility. */
-+(isBP) mov r2=0x600
++ /* Set xsi base. */
++#define FW_HYPERCALL_SET_SHARED_INFO_VA 0x600
++(isBP) mov r2=FW_HYPERCALL_SET_SHARED_INFO_VA
+(isBP) movl r28=XSI_BASE;;
+(isBP) break 0x1000;;
-+#endif
+
+ br.ret.sptk.many rp
+ ;;
@@ -27990,23 +29559,23 @@
+
+/* Stub for suspend.
+ Just force the stacked registers to be written in memory. */
-+GLOBAL_ENTRY(HYPERVISOR_suspend)
++GLOBAL_ENTRY(xencomm_arch_hypercall_suspend)
++ mov r15=r32
++ ;;
+ alloc r20=ar.pfs,0,0,0,0
-+ mov r14=2
-+ mov r15=r12
-+ ;;
++ mov r2=__HYPERVISOR_sched_op
++ ;;
+ /* We don't want to deal with RSE. */
+ flushrs
-+ mov r2=__HYPERVISOR_sched_op
-+ st4 [r12]=r14
++ mov r14=2 // SCHEDOP_shutdown
+ ;;
+ break 0x1000
+ ;;
+ mov ar.pfs=r20
+ br.ret.sptk.many b0
-+END(HYPERVISOR_suspend)
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/um/kernel/physmem.c linux-2.6.18-xen/arch/um/kernel/physmem.c
---- linux-2.6.18/arch/um/kernel/physmem.c 2006-09-20 05:42:06.000000000 +0200
++END(xencomm_arch_hypercall_suspend)
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/um/kernel/physmem.c linux-2.6.18-xen/arch/um/kernel/physmem.c
+--- linux-2.6.18.1/arch/um/kernel/physmem.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/um/kernel/physmem.c 2006-09-04 16:31:02.000000000 +0200
@@ -226,7 +226,7 @@
EXPORT_SYMBOL(physmem_remove_mapping);
@@ -28026,8 +29595,8 @@
}
int is_remapped(void *virt)
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/ia32/ia32entry-xen.S linux-2.6.18-xen/arch/x86_64/ia32/ia32entry-xen.S
---- linux-2.6.18/arch/x86_64/ia32/ia32entry-xen.S 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/ia32/ia32entry-xen.S linux-2.6.18-xen/arch/x86_64/ia32/ia32entry-xen.S
+--- linux-2.6.18.1/arch/x86_64/ia32/ia32entry-xen.S 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/ia32/ia32entry-xen.S 2006-09-04 16:31:03.000000000 +0200
@@ -0,0 +1,743 @@
+/*
@@ -28773,8 +30342,8 @@
+ .quad compat_sys_vmsplice
+ .quad compat_sys_move_pages
+ia32_syscall_end:
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/ia32/Makefile linux-2.6.18-xen/arch/x86_64/ia32/Makefile
---- linux-2.6.18/arch/x86_64/ia32/Makefile 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/ia32/Makefile linux-2.6.18-xen/arch/x86_64/ia32/Makefile
+--- linux-2.6.18.1/arch/x86_64/ia32/Makefile 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/x86_64/ia32/Makefile 2006-09-04 16:31:03.000000000 +0200
@@ -27,9 +27,25 @@
-Wl,-soname=linux-gate.so.1 -o $@ \
@@ -28804,8 +30373,8 @@
+
+obj-y := $(call cherrypickxen, $(obj-y))
+endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/ia32/syscall32_syscall-xen.S linux-2.6.18-xen/arch/x86_64/ia32/syscall32_syscall-xen.S
---- linux-2.6.18/arch/x86_64/ia32/syscall32_syscall-xen.S 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/ia32/syscall32_syscall-xen.S linux-2.6.18-xen/arch/x86_64/ia32/syscall32_syscall-xen.S
+--- linux-2.6.18.1/arch/x86_64/ia32/syscall32_syscall-xen.S 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/ia32/syscall32_syscall-xen.S 2006-09-04 16:31:03.000000000 +0200
@@ -0,0 +1,28 @@
+/* 32bit VDSOs mapped into user space. */
@@ -28836,8 +30405,8 @@
+syscall32_sysenter:
+ .incbin "arch/x86_64/ia32/vsyscall-sysenter.so"
+syscall32_sysenter_end:
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/ia32/syscall32-xen.c linux-2.6.18-xen/arch/x86_64/ia32/syscall32-xen.c
---- linux-2.6.18/arch/x86_64/ia32/syscall32-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/ia32/syscall32-xen.c linux-2.6.18-xen/arch/x86_64/ia32/syscall32-xen.c
+--- linux-2.6.18.1/arch/x86_64/ia32/syscall32-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/ia32/syscall32-xen.c 2006-09-04 16:31:03.000000000 +0200
@@ -0,0 +1,128 @@
+/* Copyright 2002,2003 Andi Kleen, SuSE Labs */
@@ -28968,8 +30537,8 @@
+ wrmsrl(MSR_CSTAR, ia32_cstar_target);
+#endif
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/ia32/vsyscall-int80.S linux-2.6.18-xen/arch/x86_64/ia32/vsyscall-int80.S
---- linux-2.6.18/arch/x86_64/ia32/vsyscall-int80.S 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/ia32/vsyscall-int80.S linux-2.6.18-xen/arch/x86_64/ia32/vsyscall-int80.S
+--- linux-2.6.18.1/arch/x86_64/ia32/vsyscall-int80.S 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/ia32/vsyscall-int80.S 2006-09-04 16:31:03.000000000 +0200
@@ -0,0 +1,58 @@
+/*
@@ -29030,8 +30599,8 @@
+ */
+#define SYSCALL_ENTER_KERNEL int $0x80
+#include "vsyscall-sigreturn.S"
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/ia32/vsyscall-sigreturn.S linux-2.6.18-xen/arch/x86_64/ia32/vsyscall-sigreturn.S
---- linux-2.6.18/arch/x86_64/ia32/vsyscall-sigreturn.S 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/ia32/vsyscall-sigreturn.S linux-2.6.18-xen/arch/x86_64/ia32/vsyscall-sigreturn.S
+--- linux-2.6.18.1/arch/x86_64/ia32/vsyscall-sigreturn.S 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/x86_64/ia32/vsyscall-sigreturn.S 2006-09-04 16:31:03.000000000 +0200
@@ -139,5 +139,5 @@
.align 4
@@ -29040,9 +30609,9 @@
-#include "../../i386/kernel/vsyscall-note.S"
+#include <vsyscall-note.S>
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/Kconfig linux-2.6.18-xen/arch/x86_64/Kconfig
---- linux-2.6.18/arch/x86_64/Kconfig 2006-09-20 05:42:06.000000000 +0200
-+++ linux-2.6.18-xen/arch/x86_64/Kconfig 2006-09-21 01:33:31.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/Kconfig linux-2.6.18-xen/arch/x86_64/Kconfig
+--- linux-2.6.18.1/arch/x86_64/Kconfig 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/arch/x86_64/Kconfig 2006-09-22 16:38:35.000000000 +0200
@@ -30,6 +30,7 @@
config STACKTRACE_SUPPORT
@@ -29233,16 +30802,16 @@
+source "drivers/xen/Kconfig"
+
source "lib/Kconfig"
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/acpi/Makefile linux-2.6.18-xen/arch/x86_64/kernel/acpi/Makefile
---- linux-2.6.18/arch/x86_64/kernel/acpi/Makefile 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/acpi/Makefile linux-2.6.18-xen/arch/x86_64/kernel/acpi/Makefile
+--- linux-2.6.18.1/arch/x86_64/kernel/acpi/Makefile 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/x86_64/kernel/acpi/Makefile 2006-09-04 16:31:03.000000000 +0200
@@ -7,3 +7,4 @@
processor-y := ../../../i386/kernel/acpi/processor.o ../../../i386/kernel/acpi/cstate.o
endif
+boot-$(CONFIG_XEN) := ../../../i386/kernel/acpi/boot-xen.o
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/apic-xen.c linux-2.6.18-xen/arch/x86_64/kernel/apic-xen.c
---- linux-2.6.18/arch/x86_64/kernel/apic-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/apic-xen.c linux-2.6.18-xen/arch/x86_64/kernel/apic-xen.c
+--- linux-2.6.18.1/arch/x86_64/kernel/apic-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/kernel/apic-xen.c 2006-09-04 16:31:03.000000000 +0200
@@ -0,0 +1,197 @@
+/*
@@ -29442,8 +31011,8 @@
+
+ return 1;
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/asm-offsets.c linux-2.6.18-xen/arch/x86_64/kernel/asm-offsets.c
---- linux-2.6.18/arch/x86_64/kernel/asm-offsets.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/asm-offsets.c linux-2.6.18-xen/arch/x86_64/kernel/asm-offsets.c
+--- linux-2.6.18.1/arch/x86_64/kernel/asm-offsets.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/x86_64/kernel/asm-offsets.c 2006-09-04 16:31:03.000000000 +0200
@@ -67,8 +67,10 @@
DEFINE(pbe_address, offsetof(struct pbe, address));
@@ -29456,8 +31025,8 @@
BLANK();
DEFINE(crypto_tfm_ctx_offset, offsetof(struct crypto_tfm, __crt_ctx));
return 0;
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/e820-xen.c linux-2.6.18-xen/arch/x86_64/kernel/e820-xen.c
---- linux-2.6.18/arch/x86_64/kernel/e820-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/e820-xen.c linux-2.6.18-xen/arch/x86_64/kernel/e820-xen.c
+--- linux-2.6.18.1/arch/x86_64/kernel/e820-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/kernel/e820-xen.c 2006-09-21 01:33:31.000000000 +0200
@@ -0,0 +1,757 @@
+/*
@@ -30217,8 +31786,8 @@
+ printk(KERN_INFO "Allocating PCI resources starting at %lx (gap: %lx:%lx)\n",
+ pci_mem_start, gapstart, gapsize);
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/early_printk-xen.c linux-2.6.18-xen/arch/x86_64/kernel/early_printk-xen.c
---- linux-2.6.18/arch/x86_64/kernel/early_printk-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/early_printk-xen.c linux-2.6.18-xen/arch/x86_64/kernel/early_printk-xen.c
+--- linux-2.6.18.1/arch/x86_64/kernel/early_printk-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/kernel/early_printk-xen.c 2006-09-04 16:31:03.000000000 +0200
@@ -0,0 +1,304 @@
+
@@ -30525,9 +32094,9 @@
+}
+
+__setup("earlyprintk=", setup_early_printk);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/entry-xen.S linux-2.6.18-xen/arch/x86_64/kernel/entry-xen.S
---- linux-2.6.18/arch/x86_64/kernel/entry-xen.S 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/arch/x86_64/kernel/entry-xen.S 2006-09-04 16:31:03.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/entry-xen.S linux-2.6.18-xen/arch/x86_64/kernel/entry-xen.S
+--- linux-2.6.18.1/arch/x86_64/kernel/entry-xen.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/arch/x86_64/kernel/entry-xen.S 2006-09-22 16:38:35.000000000 +0200
@@ -0,0 +1,1213 @@
+/*
+ * linux/arch/x86_64/entry.S
@@ -31742,8 +33311,8 @@
+ CFI_ENDPROC
+ENDPROC(arch_unwind_init_running)
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/genapic_xen.c linux-2.6.18-xen/arch/x86_64/kernel/genapic_xen.c
---- linux-2.6.18/arch/x86_64/kernel/genapic_xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/genapic_xen.c linux-2.6.18-xen/arch/x86_64/kernel/genapic_xen.c
+--- linux-2.6.18.1/arch/x86_64/kernel/genapic_xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/kernel/genapic_xen.c 2006-09-04 16:31:03.000000000 +0200
@@ -0,0 +1,176 @@
+/*
@@ -31922,8 +33491,8 @@
+ .cpu_mask_to_apicid = xen_cpu_mask_to_apicid,
+ .phys_pkg_id = phys_pkg_id,
+};
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/genapic-xen.c linux-2.6.18-xen/arch/x86_64/kernel/genapic-xen.c
---- linux-2.6.18/arch/x86_64/kernel/genapic-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/genapic-xen.c linux-2.6.18-xen/arch/x86_64/kernel/genapic-xen.c
+--- linux-2.6.18.1/arch/x86_64/kernel/genapic-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/kernel/genapic-xen.c 2006-09-04 16:31:03.000000000 +0200
@@ -0,0 +1,143 @@
+/*
@@ -32069,8 +33638,8 @@
+ xen_send_IPI_shortcut(APIC_DEST_SELF, vector, APIC_DEST_PHYSICAL);
+#endif
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/head64-xen.c linux-2.6.18-xen/arch/x86_64/kernel/head64-xen.c
---- linux-2.6.18/arch/x86_64/kernel/head64-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/head64-xen.c linux-2.6.18-xen/arch/x86_64/kernel/head64-xen.c
+--- linux-2.6.18.1/arch/x86_64/kernel/head64-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/kernel/head64-xen.c 2006-09-04 16:31:03.000000000 +0200
@@ -0,0 +1,161 @@
+/*
@@ -32234,8 +33803,8 @@
+ setup_boot_cpu_data();
+ start_kernel();
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/head-xen.S linux-2.6.18-xen/arch/x86_64/kernel/head-xen.S
---- linux-2.6.18/arch/x86_64/kernel/head-xen.S 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/head-xen.S linux-2.6.18-xen/arch/x86_64/kernel/head-xen.S
+--- linux-2.6.18.1/arch/x86_64/kernel/head-xen.S 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/kernel/head-xen.S 2006-09-04 16:31:03.000000000 +0200
@@ -0,0 +1,191 @@
+/*
@@ -32429,8 +33998,8 @@
+ ELFNOTE(Xen, XEN_ELFNOTE_HYPERCALL_PAGE, .quad, hypercall_page)
+ ELFNOTE(Xen, XEN_ELFNOTE_FEATURES, .asciz, "writable_page_tables|writable_descriptor_tables|auto_translated_physmap|pae_pgdir_above_4gb|supervisor_mode_kernel")
+ ELFNOTE(Xen, XEN_ELFNOTE_LOADER, .asciz, "generic")
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/init_task.c linux-2.6.18-xen/arch/x86_64/kernel/init_task.c
---- linux-2.6.18/arch/x86_64/kernel/init_task.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/init_task.c linux-2.6.18-xen/arch/x86_64/kernel/init_task.c
+--- linux-2.6.18.1/arch/x86_64/kernel/init_task.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/x86_64/kernel/init_task.c 2006-09-04 16:31:03.000000000 +0200
@@ -37,6 +37,8 @@
struct task_struct init_task = INIT_TASK(init_task);
@@ -32449,8 +34018,8 @@
/* Copies of the original ist values from the tss are only accessed during
* debugging, no special alignment required.
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/io_apic-xen.c linux-2.6.18-xen/arch/x86_64/kernel/io_apic-xen.c
---- linux-2.6.18/arch/x86_64/kernel/io_apic-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/io_apic-xen.c linux-2.6.18-xen/arch/x86_64/kernel/io_apic-xen.c
+--- linux-2.6.18.1/arch/x86_64/kernel/io_apic-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/kernel/io_apic-xen.c 2006-09-04 16:31:03.000000000 +0200
@@ -0,0 +1,2263 @@
+/*
@@ -34716,8 +36285,8 @@
+}
+#endif
+#endif /* !CONFIG_XEN */
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/ioport-xen.c linux-2.6.18-xen/arch/x86_64/kernel/ioport-xen.c
---- linux-2.6.18/arch/x86_64/kernel/ioport-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/ioport-xen.c linux-2.6.18-xen/arch/x86_64/kernel/ioport-xen.c
+--- linux-2.6.18.1/arch/x86_64/kernel/ioport-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/kernel/ioport-xen.c 2006-09-04 16:31:03.000000000 +0200
@@ -0,0 +1,99 @@
+/*
@@ -34819,8 +36388,8 @@
+
+ return 0;
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/irqflags-xen.c linux-2.6.18-xen/arch/x86_64/kernel/irqflags-xen.c
---- linux-2.6.18/arch/x86_64/kernel/irqflags-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/irqflags-xen.c linux-2.6.18-xen/arch/x86_64/kernel/irqflags-xen.c
+--- linux-2.6.18.1/arch/x86_64/kernel/irqflags-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/kernel/irqflags-xen.c 2006-09-04 16:31:03.000000000 +0200
@@ -0,0 +1,100 @@
+#include <linux/module.h>
@@ -34923,8 +36492,8 @@
+ return disabled;
+}
+EXPORT_SYMBOL(raw_irqs_disabled);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/irq-xen.c linux-2.6.18-xen/arch/x86_64/kernel/irq-xen.c
---- linux-2.6.18/arch/x86_64/kernel/irq-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/irq-xen.c linux-2.6.18-xen/arch/x86_64/kernel/irq-xen.c
+--- linux-2.6.18.1/arch/x86_64/kernel/irq-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/kernel/irq-xen.c 2006-09-04 16:31:03.000000000 +0200
@@ -0,0 +1,198 @@
+/*
@@ -35125,8 +36694,8 @@
+ printk("unexpected IRQ trap at vector %02x\n", irq);
+}
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/ldt-xen.c linux-2.6.18-xen/arch/x86_64/kernel/ldt-xen.c
---- linux-2.6.18/arch/x86_64/kernel/ldt-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/ldt-xen.c linux-2.6.18-xen/arch/x86_64/kernel/ldt-xen.c
+--- linux-2.6.18.1/arch/x86_64/kernel/ldt-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/kernel/ldt-xen.c 2006-09-04 16:31:03.000000000 +0200
@@ -0,0 +1,282 @@
+/*
@@ -35411,8 +36980,8 @@
+ }
+ return ret;
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/Makefile linux-2.6.18-xen/arch/x86_64/kernel/Makefile
---- linux-2.6.18/arch/x86_64/kernel/Makefile 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/Makefile linux-2.6.18-xen/arch/x86_64/kernel/Makefile
+--- linux-2.6.18.1/arch/x86_64/kernel/Makefile 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/x86_64/kernel/Makefile 2006-09-04 16:31:03.000000000 +0200
@@ -21,11 +21,13 @@
obj-$(CONFIG_X86_CPUID) += cpuid.o
@@ -35448,8 +37017,8 @@
+obj-y := $(call cherrypickxen, $(obj-y))
+extra-y := $(call cherrypickxen, $(extra-y))
+endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/mpparse-xen.c linux-2.6.18-xen/arch/x86_64/kernel/mpparse-xen.c
---- linux-2.6.18/arch/x86_64/kernel/mpparse-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/mpparse-xen.c linux-2.6.18-xen/arch/x86_64/kernel/mpparse-xen.c
+--- linux-2.6.18.1/arch/x86_64/kernel/mpparse-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/kernel/mpparse-xen.c 2006-09-04 16:31:03.000000000 +0200
@@ -0,0 +1,1011 @@
+/*
@@ -36463,8 +38032,8 @@
+
+#endif /*CONFIG_X86_IO_APIC*/
+#endif /*CONFIG_ACPI*/
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/pci-swiotlb-xen.c linux-2.6.18-xen/arch/x86_64/kernel/pci-swiotlb-xen.c
---- linux-2.6.18/arch/x86_64/kernel/pci-swiotlb-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/pci-swiotlb-xen.c linux-2.6.18-xen/arch/x86_64/kernel/pci-swiotlb-xen.c
+--- linux-2.6.18.1/arch/x86_64/kernel/pci-swiotlb-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/kernel/pci-swiotlb-xen.c 2006-09-04 16:31:03.000000000 +0200
@@ -0,0 +1,54 @@
+/* Glue code to lib/swiotlb.c */
@@ -36521,10 +38090,10 @@
+ }
+#endif
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/process-xen.c linux-2.6.18-xen/arch/x86_64/kernel/process-xen.c
---- linux-2.6.18/arch/x86_64/kernel/process-xen.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/arch/x86_64/kernel/process-xen.c 2006-09-04 16:31:03.000000000 +0200
-@@ -0,0 +1,794 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/process-xen.c linux-2.6.18-xen/arch/x86_64/kernel/process-xen.c
+--- linux-2.6.18.1/arch/x86_64/kernel/process-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/arch/x86_64/kernel/process-xen.c 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,793 @@
+/*
+ * linux/arch/x86-64/kernel/process.c
+ *
@@ -36865,7 +38434,6 @@
+ struct user_desc ud = {
+ .base_addr = addr,
+ .limit = 0xfffff,
-+ .contents = (3 << 3), /* user */
+ .seg_32bit = 1,
+ .limit_in_pages = 1,
+ .useable = 1,
@@ -37319,8 +38887,8 @@
+{
+}
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/setup64-xen.c linux-2.6.18-xen/arch/x86_64/kernel/setup64-xen.c
---- linux-2.6.18/arch/x86_64/kernel/setup64-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/setup64-xen.c linux-2.6.18-xen/arch/x86_64/kernel/setup64-xen.c
+--- linux-2.6.18.1/arch/x86_64/kernel/setup64-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/kernel/setup64-xen.c 2006-09-04 16:31:03.000000000 +0200
@@ -0,0 +1,361 @@
+/*
@@ -37684,10 +39252,10 @@
+
+ fpu_init();
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/setup-xen.c linux-2.6.18-xen/arch/x86_64/kernel/setup-xen.c
---- linux-2.6.18/arch/x86_64/kernel/setup-xen.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/arch/x86_64/kernel/setup-xen.c 2006-09-21 01:33:31.000000000 +0200
-@@ -0,0 +1,1638 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/setup-xen.c linux-2.6.18-xen/arch/x86_64/kernel/setup-xen.c
+--- linux-2.6.18.1/arch/x86_64/kernel/setup-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/arch/x86_64/kernel/setup-xen.c 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,1637 @@
+/*
+ * linux/arch/x86-64/kernel/setup.c
+ *
@@ -37756,14 +39324,13 @@
+#include <asm/dmi.h>
+#ifdef CONFIG_XEN
+#include <linux/percpu.h>
++#include <linux/pfn.h>
+#include <xen/interface/physdev.h>
+#include "setup_arch_pre.h"
+#include <asm/hypervisor.h>
+#include <xen/interface/nmi.h>
+#include <xen/features.h>
+#include <xen/xencons.h>
-+#define PFN_UP(x) (((x) + PAGE_SIZE-1) >> PAGE_SHIFT)
-+#define PFN_PHYS(x) ((x) << PAGE_SHIFT)
+#include <asm/mach-xen/setup_arch_post.h>
+#include <xen/interface/memory.h>
+
@@ -37840,6 +39407,9 @@
+
+struct edid_info edid_info;
+struct e820map e820;
++#ifdef CONFIG_XEN
++struct e820map machine_e820;
++#endif
+
+extern int root_mountflags;
+
@@ -38267,7 +39837,6 @@
+
+void __init setup_arch(char **cmdline_p)
+{
-+ struct e820entry *machine_e820;
+ struct xen_memory_map memmap;
+
+#ifdef CONFIG_XEN
@@ -38574,14 +40143,14 @@
+ probe_roms();
+#ifdef CONFIG_XEN
+ if (is_initial_xendomain()) {
-+ machine_e820 = alloc_bootmem_low_pages(PAGE_SIZE);
-+
+ memmap.nr_entries = E820MAX;
-+ set_xen_guest_handle(memmap.buffer, machine_e820);
++ set_xen_guest_handle(memmap.buffer, machine_e820.map);
+
-+ BUG_ON(HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap));
++ if (HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap))
++ BUG();
++ machine_e820.nr_map = memmap.nr_entries;
+
-+ e820_reserve_resources(machine_e820, memmap.nr_entries);
++ e820_reserve_resources(machine_e820.map, machine_e820.nr_map);
+ }
+#else
+ e820_reserve_resources(e820.map, e820.nr_map);
@@ -38597,10 +40166,8 @@
+ }
+
+#ifdef CONFIG_XEN
-+ if (is_initial_xendomain()) {
-+ e820_setup_gap(machine_e820, memmap.nr_entries);
-+ free_bootmem(__pa(machine_e820), PAGE_SIZE);
-+ }
++ if (is_initial_xendomain())
++ e820_setup_gap(machine_e820.map, machine_e820.nr_map);
+#else
+ e820_setup_gap(e820.map, e820.nr_map);
+#endif
@@ -39326,8 +40893,8 @@
+}
+device_initcall(add_pcspkr);
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/smp-xen.c linux-2.6.18-xen/arch/x86_64/kernel/smp-xen.c
---- linux-2.6.18/arch/x86_64/kernel/smp-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/smp-xen.c linux-2.6.18-xen/arch/x86_64/kernel/smp-xen.c
+--- linux-2.6.18.1/arch/x86_64/kernel/smp-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/kernel/smp-xen.c 2006-09-04 16:31:03.000000000 +0200
@@ -0,0 +1,600 @@
+/*
@@ -39930,9 +41497,9 @@
+ return 0; /* Should not happen */
+#endif
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/traps-xen.c linux-2.6.18-xen/arch/x86_64/kernel/traps-xen.c
---- linux-2.6.18/arch/x86_64/kernel/traps-xen.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/arch/x86_64/kernel/traps-xen.c 2006-09-04 16:31:03.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/traps-xen.c linux-2.6.18-xen/arch/x86_64/kernel/traps-xen.c
+--- linux-2.6.18.1/arch/x86_64/kernel/traps-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/arch/x86_64/kernel/traps-xen.c 2006-09-22 16:38:35.000000000 +0200
@@ -0,0 +1,1173 @@
+/*
+ * linux/arch/x86-64/traps.c
@@ -41107,8 +42674,8 @@
+}
+__setup("call_trace=", call_trace_setup);
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/vmlinux.lds.S linux-2.6.18-xen/arch/x86_64/kernel/vmlinux.lds.S
---- linux-2.6.18/arch/x86_64/kernel/vmlinux.lds.S 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/vmlinux.lds.S linux-2.6.18-xen/arch/x86_64/kernel/vmlinux.lds.S
+--- linux-2.6.18.1/arch/x86_64/kernel/vmlinux.lds.S 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/x86_64/kernel/vmlinux.lds.S 2006-09-21 01:33:31.000000000 +0200
@@ -13,6 +13,12 @@
OUTPUT_ARCH(i386:x86-64)
@@ -41191,8 +42758,8 @@
+
+ NOTES
}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/vsyscall-xen.c linux-2.6.18-xen/arch/x86_64/kernel/vsyscall-xen.c
---- linux-2.6.18/arch/x86_64/kernel/vsyscall-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/vsyscall-xen.c linux-2.6.18-xen/arch/x86_64/kernel/vsyscall-xen.c
+--- linux-2.6.18.1/arch/x86_64/kernel/vsyscall-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/kernel/vsyscall-xen.c 2006-09-04 16:31:03.000000000 +0200
@@ -0,0 +1,239 @@
+/*
@@ -41434,8 +43001,8 @@
+}
+
+__initcall(vsyscall_init);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/xen_entry.S linux-2.6.18-xen/arch/x86_64/kernel/xen_entry.S
---- linux-2.6.18/arch/x86_64/kernel/xen_entry.S 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/kernel/xen_entry.S linux-2.6.18-xen/arch/x86_64/kernel/xen_entry.S
+--- linux-2.6.18.1/arch/x86_64/kernel/xen_entry.S 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/kernel/xen_entry.S 2006-09-04 16:31:03.000000000 +0200
@@ -0,0 +1,40 @@
+/*
@@ -41478,8 +43045,8 @@
+VGCF_IN_SYSCALL = (1<<8)
+
+
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/Makefile linux-2.6.18-xen/arch/x86_64/Makefile
---- linux-2.6.18/arch/x86_64/Makefile 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/Makefile linux-2.6.18-xen/arch/x86_64/Makefile
+--- linux-2.6.18.1/arch/x86_64/Makefile 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/x86_64/Makefile 2006-09-04 16:31:02.000000000 +0200
@@ -32,6 +32,10 @@
cflags-$(CONFIG_MPSC) += $(call cc-option,-march=nocona)
@@ -41522,8 +43089,8 @@
archclean:
$(Q)$(MAKE) $(clean)=$(boot)
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/mm/fault-xen.c linux-2.6.18-xen/arch/x86_64/mm/fault-xen.c
---- linux-2.6.18/arch/x86_64/mm/fault-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/mm/fault-xen.c linux-2.6.18-xen/arch/x86_64/mm/fault-xen.c
+--- linux-2.6.18.1/arch/x86_64/mm/fault-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/mm/fault-xen.c 2006-09-04 16:31:03.000000000 +0200
@@ -0,0 +1,723 @@
+/*
@@ -42249,8 +43816,8 @@
+ return 1;
+}
+__setup("pagefaulttrace", enable_pagefaulttrace);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/mm/init-xen.c linux-2.6.18-xen/arch/x86_64/mm/init-xen.c
---- linux-2.6.18/arch/x86_64/mm/init-xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/mm/init-xen.c linux-2.6.18-xen/arch/x86_64/mm/init-xen.c
+--- linux-2.6.18.1/arch/x86_64/mm/init-xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/arch/x86_64/mm/init-xen.c 2006-09-04 16:31:03.000000000 +0200
@@ -0,0 +1,1200 @@
+/*
@@ -43453,8 +45020,8 @@
+{
+ return (addr >= VSYSCALL_START) && (addr < VSYSCALL_END);
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/mm/Makefile linux-2.6.18-xen/arch/x86_64/mm/Makefile
---- linux-2.6.18/arch/x86_64/mm/Makefile 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/mm/Makefile linux-2.6.18-xen/arch/x86_64/mm/Makefile
+--- linux-2.6.18.1/arch/x86_64/mm/Makefile 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/x86_64/mm/Makefile 2006-09-04 16:31:03.000000000 +0200
@@ -9,3 +9,13 @@
obj-$(CONFIG_ACPI_NUMA) += srat.o
@@ -43470,10 +45037,10 @@
+
+obj-y := $(call cherrypickxen, $(obj-y))
+endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/mm/pageattr-xen.c linux-2.6.18-xen/arch/x86_64/mm/pageattr-xen.c
---- linux-2.6.18/arch/x86_64/mm/pageattr-xen.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/arch/x86_64/mm/pageattr-xen.c 2006-09-04 16:31:03.000000000 +0200
-@@ -0,0 +1,396 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/mm/pageattr-xen.c linux-2.6.18-xen/arch/x86_64/mm/pageattr-xen.c
+--- linux-2.6.18.1/arch/x86_64/mm/pageattr-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/arch/x86_64/mm/pageattr-xen.c 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,398 @@
+/*
+ * Copyright 2002 Andi Kleen, SuSE Labs.
+ * Thanks to Ben LaHaise for precious feedback.
@@ -43797,11 +45364,13 @@
+ */
+#ifndef CONFIG_XEN
+ BUG_ON(PageReserved(kpte_page));
++#else
++ if(!PageReserved(kpte_page))
+#endif
-+ if (page_private(kpte_page) == 0) {
-+ save_page(kpte_page);
-+ revert_page(address, ref_prot);
-+ }
++ if (page_private(kpte_page) == 0) {
++ save_page(kpte_page);
++ revert_page(address, ref_prot);
++ }
+ return 0;
+}
+
@@ -43870,8 +45439,8 @@
+
+EXPORT_SYMBOL(change_page_attr);
+EXPORT_SYMBOL(global_flush_tlb);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/oprofile/Makefile linux-2.6.18-xen/arch/x86_64/oprofile/Makefile
---- linux-2.6.18/arch/x86_64/oprofile/Makefile 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/oprofile/Makefile linux-2.6.18-xen/arch/x86_64/oprofile/Makefile
+--- linux-2.6.18.1/arch/x86_64/oprofile/Makefile 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/x86_64/oprofile/Makefile 2006-09-04 16:31:03.000000000 +0200
@@ -11,9 +11,12 @@
oprofilefs.o oprofile_stats.o \
@@ -43887,8 +45456,8 @@
-
+endif
oprofile-y = $(DRIVER_OBJS) $(addprefix ../../i386/oprofile/, $(OPROFILE-y))
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/pci/Makefile linux-2.6.18-xen/arch/x86_64/pci/Makefile
---- linux-2.6.18/arch/x86_64/pci/Makefile 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/arch/x86_64/pci/Makefile linux-2.6.18-xen/arch/x86_64/pci/Makefile
+--- linux-2.6.18.1/arch/x86_64/pci/Makefile 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/arch/x86_64/pci/Makefile 2006-09-04 16:31:03.000000000 +0200
@@ -15,11 +15,23 @@
@@ -43914,8 +45483,8 @@
+
+obj-y := $(call cherrypickxen, $(obj-y))
+endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/acpi/Kconfig linux-2.6.18-xen/drivers/acpi/Kconfig
---- linux-2.6.18/drivers/acpi/Kconfig 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/acpi/Kconfig linux-2.6.18-xen/drivers/acpi/Kconfig
+--- linux-2.6.18.1/drivers/acpi/Kconfig 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/drivers/acpi/Kconfig 2006-09-04 16:31:03.000000000 +0200
@@ -45,7 +45,7 @@
@@ -43934,8 +45503,8 @@
default y
help
The Power Management Timer is available on all ACPI-capable,
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/char/hangcheck-timer.c linux-2.6.18-xen/drivers/char/hangcheck-timer.c
---- linux-2.6.18/drivers/char/hangcheck-timer.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/char/hangcheck-timer.c linux-2.6.18-xen/drivers/char/hangcheck-timer.c
+--- linux-2.6.18.1/drivers/char/hangcheck-timer.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/drivers/char/hangcheck-timer.c 2006-09-04 16:31:04.000000000 +0200
@@ -117,7 +117,7 @@
__setup("hcheck_dump_tasks", hangcheck_parse_dump_tasks);
@@ -43946,8 +45515,8 @@
# define HAVE_MONOTONIC
# define TIMER_FREQ 1000000000ULL
#elif defined(CONFIG_IA64)
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/char/mem.c linux-2.6.18-xen/drivers/char/mem.c
---- linux-2.6.18/drivers/char/mem.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/char/mem.c linux-2.6.18-xen/drivers/char/mem.c
+--- linux-2.6.18.1/drivers/char/mem.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/drivers/char/mem.c 2006-09-04 16:31:04.000000000 +0200
@@ -101,6 +101,7 @@
}
@@ -43983,8 +45552,8 @@
static const struct file_operations kmem_fops = {
.llseek = memory_lseek,
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/char/tpm/Kconfig linux-2.6.18-xen/drivers/char/tpm/Kconfig
---- linux-2.6.18/drivers/char/tpm/Kconfig 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/char/tpm/Kconfig linux-2.6.18-xen/drivers/char/tpm/Kconfig
+--- linux-2.6.18.1/drivers/char/tpm/Kconfig 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/drivers/char/tpm/Kconfig 2006-09-04 16:31:04.000000000 +0200
@@ -31,7 +31,7 @@
@@ -44010,8 +45579,8 @@
+ will be called tpm_xenu.
+endmenu
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/char/tpm/Makefile linux-2.6.18-xen/drivers/char/tpm/Makefile
---- linux-2.6.18/drivers/char/tpm/Makefile 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/char/tpm/Makefile linux-2.6.18-xen/drivers/char/tpm/Makefile
+--- linux-2.6.18.1/drivers/char/tpm/Makefile 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/drivers/char/tpm/Makefile 2006-09-04 16:31:04.000000000 +0200
@@ -9,3 +9,5 @@
obj-$(CONFIG_TCG_NSC) += tpm_nsc.o
@@ -44019,8 +45588,8 @@
obj-$(CONFIG_TCG_INFINEON) += tpm_infineon.o
+obj-$(CONFIG_TCG_XEN) += tpm_xenu.o
+tpm_xenu-y = tpm_xen.o tpm_vtpm.o
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/char/tpm/tpm.c linux-2.6.18-xen/drivers/char/tpm/tpm.c
---- linux-2.6.18/drivers/char/tpm/tpm.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/char/tpm/tpm.c linux-2.6.18-xen/drivers/char/tpm/tpm.c
+--- linux-2.6.18.1/drivers/char/tpm/tpm.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/drivers/char/tpm/tpm.c 2006-09-04 16:31:04.000000000 +0200
@@ -30,7 +30,9 @@
@@ -44142,8 +45711,8 @@
return ret_size;
}
EXPORT_SYMBOL_GPL(tpm_read);
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/char/tpm/tpm.h linux-2.6.18-xen/drivers/char/tpm/tpm.h
---- linux-2.6.18/drivers/char/tpm/tpm.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/char/tpm/tpm.h linux-2.6.18-xen/drivers/char/tpm/tpm.h
+--- linux-2.6.18.1/drivers/char/tpm/tpm.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/drivers/char/tpm/tpm.h 2006-09-21 01:33:31.000000000 +0200
@@ -61,6 +61,7 @@
const u8 req_complete_mask;
@@ -44173,8 +45742,8 @@
extern void tpm_get_timeouts(struct tpm_chip *);
extern void tpm_gen_interrupt(struct tpm_chip *);
extern void tpm_continue_selftest(struct tpm_chip *);
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/char/tpm/tpm_vtpm.c linux-2.6.18-xen/drivers/char/tpm/tpm_vtpm.c
---- linux-2.6.18/drivers/char/tpm/tpm_vtpm.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/char/tpm/tpm_vtpm.c linux-2.6.18-xen/drivers/char/tpm/tpm_vtpm.c
+--- linux-2.6.18.1/drivers/char/tpm/tpm_vtpm.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/char/tpm/tpm_vtpm.c 2006-09-04 16:31:04.000000000 +0200
@@ -0,0 +1,547 @@
+/*
@@ -44724,8 +46293,8 @@
+ tpm_remove_hardware(dev);
+ kfree(vtpms);
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/char/tpm/tpm_vtpm.h linux-2.6.18-xen/drivers/char/tpm/tpm_vtpm.h
---- linux-2.6.18/drivers/char/tpm/tpm_vtpm.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/char/tpm/tpm_vtpm.h linux-2.6.18-xen/drivers/char/tpm/tpm_vtpm.h
+--- linux-2.6.18.1/drivers/char/tpm/tpm_vtpm.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/char/tpm/tpm_vtpm.h 2006-09-04 16:31:04.000000000 +0200
@@ -0,0 +1,68 @@
+#ifndef TPM_VTPM_H
@@ -44796,8 +46365,8 @@
+}
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/char/tpm/tpm_xen.c linux-2.6.18-xen/drivers/char/tpm/tpm_xen.c
---- linux-2.6.18/drivers/char/tpm/tpm_xen.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/char/tpm/tpm_xen.c linux-2.6.18-xen/drivers/char/tpm/tpm_xen.c
+--- linux-2.6.18.1/drivers/char/tpm/tpm_xen.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/char/tpm/tpm_xen.c 2006-09-04 16:31:04.000000000 +0200
@@ -0,0 +1,756 @@
+/*
@@ -45556,9 +47125,9 @@
+module_init(tpmif_init);
+
+MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/char/tty_io.c linux-2.6.18-xen/drivers/char/tty_io.c
---- linux-2.6.18/drivers/char/tty_io.c 2006-09-20 05:42:06.000000000 +0200
-+++ linux-2.6.18-xen/drivers/char/tty_io.c 2006-09-04 16:31:04.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/char/tty_io.c linux-2.6.18-xen/drivers/char/tty_io.c
+--- linux-2.6.18.1/drivers/char/tty_io.c 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/drivers/char/tty_io.c 2006-09-22 16:38:35.000000000 +0200
@@ -130,6 +130,8 @@
vt.c for deeply disgusting hack reasons */
DEFINE_MUTEX(tty_mutex);
@@ -45594,8 +47163,8 @@
#endif
return 0;
}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/firmware/Kconfig linux-2.6.18-xen/drivers/firmware/Kconfig
---- linux-2.6.18/drivers/firmware/Kconfig 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/firmware/Kconfig linux-2.6.18-xen/drivers/firmware/Kconfig
+--- linux-2.6.18.1/drivers/firmware/Kconfig 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/drivers/firmware/Kconfig 2006-09-04 16:31:04.000000000 +0200
@@ -7,7 +7,7 @@
@@ -45606,8 +47175,8 @@
help
Say Y or M here if you want to enable BIOS Enhanced Disk Drive
Services real mode BIOS calls to determine which disk
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/ide/ide-lib.c linux-2.6.18-xen/drivers/ide/ide-lib.c
---- linux-2.6.18/drivers/ide/ide-lib.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/ide/ide-lib.c linux-2.6.18-xen/drivers/ide/ide-lib.c
+--- linux-2.6.18.1/drivers/ide/ide-lib.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/drivers/ide/ide-lib.c 2006-09-04 16:31:04.000000000 +0200
@@ -408,10 +408,10 @@
{
@@ -45624,8 +47193,8 @@
addr = HWIF(drive)->pci_dev->dma_mask;
}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/Makefile linux-2.6.18-xen/drivers/Makefile
---- linux-2.6.18/drivers/Makefile 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/Makefile linux-2.6.18-xen/drivers/Makefile
+--- linux-2.6.18.1/drivers/Makefile 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/drivers/Makefile 2006-09-04 16:31:03.000000000 +0200
@@ -31,6 +31,7 @@
obj-$(CONFIG_NUBUS) += nubus/
@@ -45635,8 +47204,8 @@
obj-$(CONFIG_IDE) += ide/
obj-$(CONFIG_FC4) += fc4/
obj-$(CONFIG_SCSI) += scsi/
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/oprofile/buffer_sync.c linux-2.6.18-xen/drivers/oprofile/buffer_sync.c
---- linux-2.6.18/drivers/oprofile/buffer_sync.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/oprofile/buffer_sync.c linux-2.6.18-xen/drivers/oprofile/buffer_sync.c
+--- linux-2.6.18.1/drivers/oprofile/buffer_sync.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/drivers/oprofile/buffer_sync.c 2006-09-04 16:31:08.000000000 +0200
@@ -6,6 +6,10 @@
*
@@ -45758,8 +47327,8 @@
}
}
}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/oprofile/cpu_buffer.c linux-2.6.18-xen/drivers/oprofile/cpu_buffer.c
---- linux-2.6.18/drivers/oprofile/cpu_buffer.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/oprofile/cpu_buffer.c linux-2.6.18-xen/drivers/oprofile/cpu_buffer.c
+--- linux-2.6.18.1/drivers/oprofile/cpu_buffer.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/drivers/oprofile/cpu_buffer.c 2006-09-04 16:31:08.000000000 +0200
@@ -6,6 +6,10 @@
*
@@ -45870,8 +47439,8 @@
/*
* This serves to avoid cpu buffer overflow, and makes sure
* the task mortuary progresses
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/oprofile/cpu_buffer.h linux-2.6.18-xen/drivers/oprofile/cpu_buffer.h
---- linux-2.6.18/drivers/oprofile/cpu_buffer.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/oprofile/cpu_buffer.h linux-2.6.18-xen/drivers/oprofile/cpu_buffer.h
+--- linux-2.6.18.1/drivers/oprofile/cpu_buffer.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/drivers/oprofile/cpu_buffer.h 2006-09-04 16:31:08.000000000 +0200
@@ -36,7 +36,7 @@
volatile unsigned long tail_pos;
@@ -45895,8 +47464,8 @@
+#define CPU_DOMAIN_SWITCH 4
#endif /* OPROFILE_CPU_BUFFER_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/oprofile/event_buffer.h linux-2.6.18-xen/drivers/oprofile/event_buffer.h
---- linux-2.6.18/drivers/oprofile/event_buffer.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/oprofile/event_buffer.h linux-2.6.18-xen/drivers/oprofile/event_buffer.h
+--- linux-2.6.18.1/drivers/oprofile/event_buffer.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/drivers/oprofile/event_buffer.h 2006-09-04 16:31:08.000000000 +0200
@@ -29,15 +29,20 @@
#define CPU_SWITCH_CODE 2
@@ -45920,8 +47489,8 @@
/* add data to the event buffer */
void add_event_entry(unsigned long data);
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/oprofile/oprof.c linux-2.6.18-xen/drivers/oprofile/oprof.c
---- linux-2.6.18/drivers/oprofile/oprof.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/oprofile/oprof.c linux-2.6.18-xen/drivers/oprofile/oprof.c
+--- linux-2.6.18.1/drivers/oprofile/oprof.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/drivers/oprofile/oprof.c 2006-09-04 16:31:08.000000000 +0200
@@ -5,6 +5,10 @@
* @remark Read the file COPYING
@@ -45976,8 +47545,8 @@
int oprofile_setup(void)
{
int err;
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/oprofile/oprof.h linux-2.6.18-xen/drivers/oprofile/oprof.h
---- linux-2.6.18/drivers/oprofile/oprof.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/oprofile/oprof.h linux-2.6.18-xen/drivers/oprofile/oprof.h
+--- linux-2.6.18.1/drivers/oprofile/oprof.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/drivers/oprofile/oprof.h 2006-09-04 16:31:08.000000000 +0200
@@ -35,5 +35,8 @@
void oprofile_timer_init(struct oprofile_operations * ops);
@@ -45988,8 +47557,8 @@
+int oprofile_set_passive(int passive_domains[], unsigned int pdomains);
#endif /* OPROF_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/oprofile/oprofile_files.c linux-2.6.18-xen/drivers/oprofile/oprofile_files.c
---- linux-2.6.18/drivers/oprofile/oprofile_files.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/oprofile/oprofile_files.c linux-2.6.18-xen/drivers/oprofile/oprofile_files.c
+--- linux-2.6.18.1/drivers/oprofile/oprofile_files.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/drivers/oprofile/oprofile_files.c 2006-09-04 16:31:08.000000000 +0200
@@ -5,15 +5,21 @@
* @remark Read the file COPYING
@@ -46224,8 +47793,8 @@
oprofilefs_create_file(sb, root, "buffer", &event_buffer_fops);
oprofilefs_create_ulong(sb, root, "buffer_size", &fs_buffer_size);
oprofilefs_create_ulong(sb, root, "buffer_watershed", &fs_buffer_watershed);
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/pci/Kconfig linux-2.6.18-xen/drivers/pci/Kconfig
---- linux-2.6.18/drivers/pci/Kconfig 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/pci/Kconfig linux-2.6.18-xen/drivers/pci/Kconfig
+--- linux-2.6.18.1/drivers/pci/Kconfig 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/drivers/pci/Kconfig 2006-09-04 16:31:08.000000000 +0200
@@ -5,6 +5,7 @@
bool "Message Signaled Interrupts (MSI and MSI-X)"
@@ -46235,9 +47804,9 @@
help
This allows device drivers to enable MSI (Message Signaled
Interrupts). Message Signaled Interrupts enable a device to
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/serial/Kconfig linux-2.6.18-xen/drivers/serial/Kconfig
---- linux-2.6.18/drivers/serial/Kconfig 2006-09-20 05:42:06.000000000 +0200
-+++ linux-2.6.18-xen/drivers/serial/Kconfig 2006-09-04 16:31:10.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/serial/Kconfig linux-2.6.18-xen/drivers/serial/Kconfig
+--- linux-2.6.18.1/drivers/serial/Kconfig 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/drivers/serial/Kconfig 2006-09-22 16:38:35.000000000 +0200
@@ -11,6 +11,7 @@
config SERIAL_8250
tristate "8250/16550 and compatible serial support"
@@ -46246,10 +47815,10 @@
select SERIAL_CORE
---help---
This selects whether you want to include the driver for the standard
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/balloon/balloon.c linux-2.6.18-xen/drivers/xen/balloon/balloon.c
---- linux-2.6.18/drivers/xen/balloon/balloon.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/balloon/balloon.c 2006-09-04 16:31:13.000000000 +0200
-@@ -0,0 +1,625 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/balloon/balloon.c linux-2.6.18-xen/drivers/xen/balloon/balloon.c
+--- linux-2.6.18.1/drivers/xen/balloon/balloon.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/balloon/balloon.c 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,637 @@
+/******************************************************************************
+ * balloon.c
+ *
@@ -46785,75 +48354,87 @@
+ return 0;
+}
+
-+struct page *balloon_alloc_empty_page_range(unsigned long nr_pages)
++struct page **alloc_empty_pages_and_pagevec(int nr_pages)
+{
-+ unsigned long vstart, flags;
-+ unsigned int order = get_order(nr_pages * PAGE_SIZE);
-+ int ret;
-+ unsigned long i;
-+ struct page *page;
++ unsigned long vaddr, flags;
++ struct page *page, **pagevec;
++ int i, ret;
+
-+ vstart = __get_free_pages(GFP_KERNEL, order);
-+ if (vstart == 0)
++ pagevec = kmalloc(sizeof(page) * nr_pages, GFP_KERNEL);
++ if (pagevec == NULL)
+ return NULL;
+
-+ scrub_pages(vstart, 1 << order);
-+
-+ balloon_lock(flags);
-+ if (xen_feature(XENFEAT_auto_translated_physmap)) {
-+ unsigned long gmfn = __pa(vstart) >> PAGE_SHIFT;
-+ struct xen_memory_reservation reservation = {
-+ .nr_extents = 1,
-+ .extent_order = order,
-+ .domid = DOMID_SELF
-+ };
-+ set_xen_guest_handle(reservation.extent_start, &gmfn);
-+ ret = HYPERVISOR_memory_op(XENMEM_decrease_reservation,
-+ &reservation);
-+ if (ret == -ENOSYS)
-+ goto err;
-+ BUG_ON(ret != 1);
-+ } else {
-+ ret = apply_to_page_range(&init_mm, vstart, PAGE_SIZE << order,
-+ dealloc_pte_fn, NULL);
-+ if (ret == -ENOSYS)
++ for (i = 0; i < nr_pages; i++) {
++ page = pagevec[i] = alloc_page(GFP_KERNEL);
++ if (page == NULL)
+ goto err;
-+ BUG_ON(ret);
-+ }
-+ current_pages -= 1UL << order;
-+ totalram_pages = current_pages;
-+ balloon_unlock(flags);
+
-+ schedule_work(&balloon_worker);
++ vaddr = (unsigned long)page_address(page);
+
-+ flush_tlb_all();
++ scrub_pages(vaddr, 1);
+
-+ page = virt_to_page(vstart);
++ balloon_lock(flags);
+
-+ for (i = 0; i < (1UL << order); i++)
-+ init_page_count(page + i);
++ if (xen_feature(XENFEAT_auto_translated_physmap)) {
++ unsigned long gmfn = page_to_pfn(page);
++ struct xen_memory_reservation reservation = {
++ .nr_extents = 1,
++ .extent_order = 0,
++ .domid = DOMID_SELF
++ };
++ set_xen_guest_handle(reservation.extent_start, &gmfn);
++ ret = HYPERVISOR_memory_op(XENMEM_decrease_reservation,
++ &reservation);
++ if (ret == 1)
++ ret = 0; /* success */
++ } else {
++ ret = apply_to_page_range(&init_mm, vaddr, PAGE_SIZE,
++ dealloc_pte_fn, NULL);
++ }
+
-+ return page;
++ if (ret != 0) {
++ balloon_unlock(flags);
++ __free_page(page);
++ goto err;
++ }
++
++ totalram_pages = --current_pages;
++
++ balloon_unlock(flags);
++ }
++
++ out:
++ schedule_work(&balloon_worker);
++ flush_tlb_all();
++ return pagevec;
+
+ err:
-+ free_pages(vstart, order);
++ balloon_lock(flags);
++ while (--i >= 0)
++ balloon_append(pagevec[i]);
+ balloon_unlock(flags);
-+ return NULL;
++ kfree(pagevec);
++ pagevec = NULL;
++ goto out;
+}
+
-+void balloon_dealloc_empty_page_range(
-+ struct page *page, unsigned long nr_pages)
++void free_empty_pages_and_pagevec(struct page **pagevec, int nr_pages)
+{
-+ unsigned long i, flags;
-+ unsigned int order = get_order(nr_pages * PAGE_SIZE);
++ unsigned long flags;
++ int i;
++
++ if (pagevec == NULL)
++ return;
+
+ balloon_lock(flags);
-+ for (i = 0; i < (1UL << order); i++) {
-+ BUG_ON(page_count(page + i) != 1);
-+ balloon_append(page + i);
++ for (i = 0; i < nr_pages; i++) {
++ BUG_ON(page_count(pagevec[i]) != 1);
++ balloon_append(pagevec[i]);
+ }
+ balloon_unlock(flags);
+
++ kfree(pagevec);
++
+ schedule_work(&balloon_worker);
+}
+
@@ -46870,21 +48451,21 @@
+}
+
+EXPORT_SYMBOL_GPL(balloon_update_driver_allowance);
-+EXPORT_SYMBOL_GPL(balloon_alloc_empty_page_range);
-+EXPORT_SYMBOL_GPL(balloon_dealloc_empty_page_range);
++EXPORT_SYMBOL_GPL(alloc_empty_pages_and_pagevec);
++EXPORT_SYMBOL_GPL(free_empty_pages_and_pagevec);
+EXPORT_SYMBOL_GPL(balloon_release_driver_page);
+
+MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/balloon/Makefile linux-2.6.18-xen/drivers/xen/balloon/Makefile
---- linux-2.6.18/drivers/xen/balloon/Makefile 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/balloon/Makefile linux-2.6.18-xen/drivers/xen/balloon/Makefile
+--- linux-2.6.18.1/drivers/xen/balloon/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/balloon/Makefile 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,2 @@
+
+obj-y += balloon.o
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blkback/blkback.c linux-2.6.18-xen/drivers/xen/blkback/blkback.c
---- linux-2.6.18/drivers/xen/blkback/blkback.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/blkback/blkback.c 2006-09-04 16:31:13.000000000 +0200
-@@ -0,0 +1,567 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/blkback/blkback.c linux-2.6.18-xen/drivers/xen/blkback/blkback.c
+--- linux-2.6.18.1/drivers/xen/blkback/blkback.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/blkback/blkback.c 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,549 @@
+/******************************************************************************
+ * arch/xen/drivers/blkif/backend/main.c
+ *
@@ -46944,8 +48525,6 @@
+module_param_named(reqs, blkif_reqs, int, 0);
+MODULE_PARM_DESC(reqs, "Number of blkback requests to allocate");
+
-+static int mmap_pages;
-+
+/* Run-time switchable: /sys/module/blkback/parameters/ */
+static unsigned int log_stats = 0;
+static unsigned int debug_lvl = 0;
@@ -46975,8 +48554,7 @@
+
+#define BLKBACK_INVALID_HANDLE (~0)
+
-+static unsigned long mmap_vstart;
-+static unsigned long *pending_vaddrs;
++static struct page **pending_pages;
+static grant_handle_t *pending_grant_handles;
+
+static inline int vaddr_pagenr(pending_req_t *req, int seg)
@@ -46986,7 +48564,8 @@
+
+static inline unsigned long vaddr(pending_req_t *req, int seg)
+{
-+ return pending_vaddrs[vaddr_pagenr(req, seg)];
++ unsigned long pfn = page_to_pfn(pending_pages[vaddr_pagenr(req, seg)]);
++ return (unsigned long)pfn_to_kaddr(pfn);
+}
+
+#define pending_handle(_req, _seg) \
@@ -47394,66 +48973,50 @@
+
+static int __init blkif_init(void)
+{
-+ struct page *page;
-+ int i;
++ int i, mmap_pages;
+
+ if (!is_running_on_xen())
+ return -ENODEV;
+
+ mmap_pages = blkif_reqs * BLKIF_MAX_SEGMENTS_PER_REQUEST;
+
-+#ifdef CONFIG_XEN_IA64_DOM0_NON_VP
-+ extern unsigned long alloc_empty_foreign_map_page_range(
-+ unsigned long pages);
-+ mmap_vstart = (unsigned long)
-+ alloc_empty_foreign_map_page_range(mmap_pages);
-+#else /* ! ia64 */
-+ page = balloon_alloc_empty_page_range(mmap_pages);
-+ if (page == NULL)
-+ return -ENOMEM;
-+ mmap_vstart = (unsigned long)pfn_to_kaddr(page_to_pfn(page));
-+#endif
-+
+ pending_reqs = kmalloc(sizeof(pending_reqs[0]) *
+ blkif_reqs, GFP_KERNEL);
+ pending_grant_handles = kmalloc(sizeof(pending_grant_handles[0]) *
+ mmap_pages, GFP_KERNEL);
-+ pending_vaddrs = kmalloc(sizeof(pending_vaddrs[0]) *
-+ mmap_pages, GFP_KERNEL);
-+ if (!pending_reqs || !pending_grant_handles || !pending_vaddrs) {
-+ kfree(pending_reqs);
-+ kfree(pending_grant_handles);
-+ kfree(pending_vaddrs);
-+ printk("%s: out of memory\n", __FUNCTION__);
-+ return -ENOMEM;
-+ }
++ pending_pages = alloc_empty_pages_and_pagevec(mmap_pages);
+
-+ blkif_interface_init();
-+
-+ printk("%s: reqs=%d, pages=%d, mmap_vstart=0x%lx\n",
-+ __FUNCTION__, blkif_reqs, mmap_pages, mmap_vstart);
-+ BUG_ON(mmap_vstart == 0);
-+ for (i = 0; i < mmap_pages; i++) {
-+ pending_vaddrs[i] = mmap_vstart + (i << PAGE_SHIFT);
++ if (!pending_reqs || !pending_grant_handles || !pending_pages)
++ goto out_of_memory;
++
++ for (i = 0; i < mmap_pages; i++)
+ pending_grant_handles[i] = BLKBACK_INVALID_HANDLE;
-+ }
++
++ blkif_interface_init();
+
+ memset(pending_reqs, 0, sizeof(pending_reqs));
+ INIT_LIST_HEAD(&pending_free);
+
+ for (i = 0; i < blkif_reqs; i++)
+ list_add_tail(&pending_reqs[i].free_list, &pending_free);
-+
++
+ blkif_xenbus_init();
+
+ return 0;
++
++ out_of_memory:
++ kfree(pending_reqs);
++ kfree(pending_grant_handles);
++ free_empty_pages_and_pagevec(pending_pages, mmap_pages);
++ printk("%s: out of memory\n", __FUNCTION__);
++ return -ENOMEM;
+}
+
+module_init(blkif_init);
+
+MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blkback/common.h linux-2.6.18-xen/drivers/xen/blkback/common.h
---- linux-2.6.18/drivers/xen/blkback/common.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/blkback/common.h linux-2.6.18-xen/drivers/xen/blkback/common.h
+--- linux-2.6.18.1/drivers/xen/blkback/common.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/blkback/common.h 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,133 @@
+/*
@@ -47589,8 +49152,8 @@
+int blkif_schedule(void *arg);
+
+#endif /* __BLKIF__BACKEND__COMMON_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blkback/interface.c linux-2.6.18-xen/drivers/xen/blkback/interface.c
---- linux-2.6.18/drivers/xen/blkback/interface.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/blkback/interface.c linux-2.6.18-xen/drivers/xen/blkback/interface.c
+--- linux-2.6.18.1/drivers/xen/blkback/interface.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/blkback/interface.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,171 @@
+/******************************************************************************
@@ -47764,15 +49327,15 @@
+ blkif_cachep = kmem_cache_create("blkif_cache", sizeof(blkif_t),
+ 0, 0, NULL, NULL);
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blkback/Makefile linux-2.6.18-xen/drivers/xen/blkback/Makefile
---- linux-2.6.18/drivers/xen/blkback/Makefile 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/blkback/Makefile linux-2.6.18-xen/drivers/xen/blkback/Makefile
+--- linux-2.6.18.1/drivers/xen/blkback/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/blkback/Makefile 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,3 @@
+obj-$(CONFIG_XEN_BLKDEV_BACKEND) := blkbk.o
+
+blkbk-y := blkback.o xenbus.o interface.o vbd.o
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blkback/vbd.c linux-2.6.18-xen/drivers/xen/blkback/vbd.c
---- linux-2.6.18/drivers/xen/blkback/vbd.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/blkback/vbd.c linux-2.6.18-xen/drivers/xen/blkback/vbd.c
+--- linux-2.6.18.1/drivers/xen/blkback/vbd.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/blkback/vbd.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,119 @@
+/******************************************************************************
@@ -47894,8 +49457,8 @@
+ out:
+ return rc;
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blkback/xenbus.c linux-2.6.18-xen/drivers/xen/blkback/xenbus.c
---- linux-2.6.18/drivers/xen/blkback/xenbus.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/blkback/xenbus.c linux-2.6.18-xen/drivers/xen/blkback/xenbus.c
+--- linux-2.6.18.1/drivers/xen/blkback/xenbus.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/blkback/xenbus.c 2006-09-21 01:33:31.000000000 +0200
@@ -0,0 +1,468 @@
+/* Xenbus code for blkif backend
@@ -48366,10 +49929,10 @@
+{
+ xenbus_register_backend(&blkback);
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blkfront/blkfront.c linux-2.6.18-xen/drivers/xen/blkfront/blkfront.c
---- linux-2.6.18/drivers/xen/blkfront/blkfront.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/blkfront/blkfront.c 2006-09-21 01:33:31.000000000 +0200
-@@ -0,0 +1,842 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/blkfront/blkfront.c linux-2.6.18-xen/drivers/xen/blkfront/blkfront.c
+--- linux-2.6.18.1/drivers/xen/blkfront/blkfront.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/blkfront/blkfront.c 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,846 @@
+/******************************************************************************
+ * blkfront.c
+ *
@@ -48645,7 +50208,7 @@
+ xenbus_dev_fatal(dev, -ENODEV, "bdget failed");
+
+ mutex_lock(&bd->bd_mutex);
-+ if (info->users > 0 && system_state == SYSTEM_RUNNING)
++ if (info->users > 0)
+ xenbus_dev_error(dev, -EBUSY,
+ "Device in use; refusing to close");
+ else
@@ -48727,9 +50290,11 @@
+ blk_stop_queue(info->rq);
+ /* No more gnttab callback work. */
+ gnttab_cancel_free_callback(&info->callback);
-+ flush_scheduled_work();
+ spin_unlock_irqrestore(&blkif_io_lock, flags);
+
++ /* Flush gnttab callback work. Must be done with no locks held. */
++ flush_scheduled_work();
++
+ xlvbd_del(info);
+
+ xenbus_frontend_closed(dev);
@@ -49086,9 +50651,11 @@
+ blk_stop_queue(info->rq);
+ /* No more gnttab callback work. */
+ gnttab_cancel_free_callback(&info->callback);
-+ flush_scheduled_work();
+ spin_unlock_irq(&blkif_io_lock);
+
++ /* Flush gnttab callback work. Must be done with no locks held. */
++ flush_scheduled_work();
++
+ /* Free resources associated with old device channel. */
+ if (info->ring_ref != GRANT_INVALID_REF) {
+ gnttab_end_foreign_access(info->ring_ref, 0,
@@ -49212,8 +50779,8 @@
+module_exit(xlblk_exit);
+
+MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blkfront/block.h linux-2.6.18-xen/drivers/xen/blkfront/block.h
---- linux-2.6.18/drivers/xen/blkfront/block.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/blkfront/block.h linux-2.6.18-xen/drivers/xen/blkfront/block.h
+--- linux-2.6.18.1/drivers/xen/blkfront/block.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/blkfront/block.h 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,154 @@
+/******************************************************************************
@@ -49370,8 +50937,8 @@
+void xlvbd_del(struct blkfront_info *info);
+
+#endif /* __XEN_DRIVERS_BLOCK_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blkfront/Kconfig linux-2.6.18-xen/drivers/xen/blkfront/Kconfig
---- linux-2.6.18/drivers/xen/blkfront/Kconfig 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/blkfront/Kconfig linux-2.6.18-xen/drivers/xen/blkfront/Kconfig
+--- linux-2.6.18.1/drivers/xen/blkfront/Kconfig 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/blkfront/Kconfig 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,6 @@
+
@@ -49380,8 +50947,8 @@
+ depends on ARCH_XEN
+ help
+ Block device driver for Xen
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blkfront/Makefile linux-2.6.18-xen/drivers/xen/blkfront/Makefile
---- linux-2.6.18/drivers/xen/blkfront/Makefile 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/blkfront/Makefile linux-2.6.18-xen/drivers/xen/blkfront/Makefile
+--- linux-2.6.18.1/drivers/xen/blkfront/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/blkfront/Makefile 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,5 @@
+
@@ -49389,8 +50956,8 @@
+
+xenblk-objs := blkfront.o vbd.o
+
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blkfront/vbd.c linux-2.6.18-xen/drivers/xen/blkfront/vbd.c
---- linux-2.6.18/drivers/xen/blkfront/vbd.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/blkfront/vbd.c linux-2.6.18-xen/drivers/xen/blkfront/vbd.c
+--- linux-2.6.18.1/drivers/xen/blkfront/vbd.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/blkfront/vbd.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,318 @@
+/******************************************************************************
@@ -49711,10 +51278,10 @@
+ blk_cleanup_queue(info->rq);
+ info->rq = NULL;
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blktap/blktap.c linux-2.6.18-xen/drivers/xen/blktap/blktap.c
---- linux-2.6.18/drivers/xen/blktap/blktap.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/blktap/blktap.c 2006-09-04 16:31:13.000000000 +0200
-@@ -0,0 +1,1444 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/blktap/blktapmain.c linux-2.6.18-xen/drivers/xen/blktap/blktapmain.c
+--- linux-2.6.18.1/drivers/xen/blktap/blktapmain.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/blktap/blktapmain.c 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,1393 @@
+/******************************************************************************
+ * drivers/xen/blktap/blktap.c
+ *
@@ -49761,7 +51328,6 @@
+#include <linux/kernel.h>
+#include <linux/fs.h>
+#include <linux/mm.h>
-+#include <linux/miscdevice.h>
+#include <linux/errno.h>
+#include <linux/major.h>
+#include <linux/gfp.h>
@@ -49771,6 +51337,30 @@
+#define MAX_TAP_DEV 100 /*the maximum number of tapdisk ring devices */
+#define MAX_DEV_NAME 100 /*the max tapdisk ring device name e.g. blktap0 */
+
++
++struct class *xen_class;
++EXPORT_SYMBOL_GPL(xen_class);
++
++/*
++ * Setup the xen class. This should probably go in another file, but
++ * since blktap is the only user of it so far, it gets to keep it.
++ */
++int setup_xen_class(void)
++{
++ int ret;
++
++ if (xen_class)
++ return 0;
++
++ xen_class = class_create(THIS_MODULE, "xen");
++ if ((ret = IS_ERR(xen_class))) {
++ xen_class = NULL;
++ return ret;
++ }
++
++ return 0;
++}
++
+/*
+ * The maximum number of requests that can be outstanding at any time
+ * is determined by
@@ -49816,20 +51406,15 @@
+ unsigned long *idx_map; /*Record the user ring id to kern
+ [req id, idx] tuple */
+ blkif_t *blkif; /*Associate blkif with tapdev */
++ int sysfs_set; /*Set if it has a class device. */
+} tap_blkif_t;
+
-+/*Private data struct associated with the inode*/
-+typedef struct private_info {
-+ int idx;
-+} private_info_t;
-+
+/*Data struct handed back to userspace for tapdisk device to VBD mapping*/
+typedef struct domid_translate {
+ unsigned short domid;
+ unsigned short busid;
+} domid_translate_t ;
+
-+
+static domid_translate_t translate_domid[MAX_TAP_DEV];
+static tap_blkif_t *tapfds[MAX_TAP_DEV];
+
@@ -49884,16 +51469,18 @@
+
+#define BLKBACK_INVALID_HANDLE (~0)
+
-+typedef struct mmap_page {
-+ unsigned long start;
-+ struct page *mpage;
-+} mmap_page_t;
++static struct page **foreign_pages[MAX_DYNAMIC_MEM];
++static inline unsigned long idx_to_kaddr(
++ unsigned int mmap_idx, unsigned int req_idx, unsigned int sg_idx)
++{
++ unsigned int arr_idx = req_idx*BLKIF_MAX_SEGMENTS_PER_REQUEST + sg_idx;
++ unsigned long pfn = page_to_pfn(foreign_pages[mmap_idx][arr_idx]);
++ return (unsigned long)pfn_to_kaddr(pfn);
++}
+
-+static mmap_page_t mmap_start[MAX_DYNAMIC_MEM];
+static unsigned short mmap_alloc = 0;
+static unsigned short mmap_lock = 0;
+static unsigned short mmap_inuse = 0;
-+static unsigned long *pending_addrs[MAX_DYNAMIC_MEM];
+
+/******************************************************************
+ * GRANT HANDLES
@@ -49916,15 +51503,13 @@
+ + (_i)])
+
+
-+static int blktap_read_ufe_ring(int idx); /*local prototypes*/
++static int blktap_read_ufe_ring(tap_blkif_t *info); /*local prototypes*/
+
-+#define BLKTAP_MINOR 0 /*/dev/xen/blktap resides at device number
-+ major=254, minor numbers begin at 0 */
-+#define BLKTAP_DEV_MAJOR 254 /* TODO: Make major number dynamic *
-+ * and create devices in the kernel *
-+ */
++#define BLKTAP_MINOR 0 /*/dev/xen/blktap has a dynamic major */
+#define BLKTAP_DEV_DIR "/dev/xen"
+
++static int blktap_major;
++
+/* blktap IOCTLs: */
+#define BLKTAP_IOCTL_KICK_FE 1
+#define BLKTAP_IOCTL_KICK_BE 2 /* currently unused */
@@ -49980,7 +51565,8 @@
+{
+ int i;
+ for (i = 0; i < MAX_PENDING_REQS; i++)
-+ if (idx_map[i] == INVALID_REQ) return i;
++ if (idx_map[i] == INVALID_REQ)
++ return i;
+
+ return INVALID_REQ;
+}
@@ -50027,8 +51613,6 @@
+ unsigned int cmd, unsigned long arg);
+static unsigned int blktap_poll(struct file *file, poll_table *wait);
+
-+struct miscdevice *set_misc(int minor, char *name, int dev);
-+
+static struct file_operations blktap_fops = {
+ .owner = THIS_MODULE,
+ .poll = blktap_poll,
@@ -50060,6 +51644,16 @@
+
+done:
+ spin_unlock_irqrestore(&pending_free_lock, flags);
++
++ /*
++ * We are protected by having the dev_pending set.
++ */
++ if (!tapfds[i]->sysfs_set && xen_class) {
++ class_device_create(xen_class, NULL,
++ MKDEV(blktap_major, ret), NULL,
++ "blktap%d", ret);
++ tapfds[i]->sysfs_set = 1;
++ }
+ return ret;
+}
+
@@ -50085,9 +51679,8 @@
+ info = tapfds[idx];
+ if ( (idx > 0) && (idx < MAX_TAP_DEV) && (info->pid > 0) ) {
+ ptask = find_task_by_pid(info->pid);
-+ if (ptask) {
++ if (ptask)
+ info->status = CLEANSHUTDOWN;
-+ }
+ }
+ info->blkif = NULL;
+ return;
@@ -50098,7 +51691,6 @@
+ blkif_sring_t *sring;
+ int idx = iminor(inode) - BLKTAP_MINOR;
+ tap_blkif_t *info;
-+ private_info_t *prv;
+ int i;
+
+ if (tapfds[idx] == NULL) {
@@ -50126,9 +51718,7 @@
+ SHARED_RING_INIT(sring);
+ FRONT_RING_INIT(&info->ufe_ring, sring, PAGE_SIZE);
+
-+ prv = kzalloc(sizeof(private_info_t),GFP_KERNEL);
-+ prv->idx = idx;
-+ filp->private_data = prv;
++ filp->private_data = info;
+ info->vma = NULL;
+
+ info->idx_map = kmalloc(sizeof(unsigned long) * MAX_PENDING_REQS,
@@ -50149,17 +51739,16 @@
+
+static int blktap_release(struct inode *inode, struct file *filp)
+{
-+ int idx = iminor(inode) - BLKTAP_MINOR;
-+ tap_blkif_t *info;
++ tap_blkif_t *info = filp->private_data;
+
-+ if (tapfds[idx] == NULL) {
++ /* can this ever happen? - sdr */
++ if (!info) {
+ WPRINTK("Trying to free device that doesn't exist "
-+ "[/dev/xen/blktap%d]\n",idx);
-+ return -1;
++ "[/dev/xen/blktap%d]\n",iminor(inode) - BLKTAP_MINOR);
++ return -EBADF;
+ }
-+ info = tapfds[idx];
+ info->dev_inuse = 0;
-+ DPRINTK("Freeing device [/dev/xen/blktap%d]\n",idx);
++ DPRINTK("Freeing device [/dev/xen/blktap%d]\n",info->minor);
+
+ /* Free the ring page. */
+ ClearPageReserved(virt_to_page(info->ufe_ring.sring));
@@ -50173,8 +51762,6 @@
+ info->vma = NULL;
+ }
+
-+ if (filp->private_data) kfree(filp->private_data);
-+
+ if ( (info->status != CLEANSHUTDOWN) && (info->blkif != NULL) ) {
+ kthread_stop(info->blkif->xenblkd);
+ info->blkif->xenblkd = NULL;
@@ -50207,16 +51794,12 @@
+ int size;
+ struct page **map;
+ int i;
-+ private_info_t *prv;
-+ tap_blkif_t *info;
++ tap_blkif_t *info = filp->private_data;
+
-+ /*Retrieve the dev info*/
-+ prv = (private_info_t *)filp->private_data;
-+ if (prv == NULL) {
++ if (info == NULL) {
+ WPRINTK("blktap: mmap, retrieving idx failed\n");
+ return -ENOMEM;
+ }
-+ info = tapfds[prv->idx];
+
+ vma->vm_flags |= VM_RESERVED;
+ vma->vm_ops = &blktap_vm_ops;
@@ -50272,20 +51855,17 @@
+static int blktap_ioctl(struct inode *inode, struct file *filp,
+ unsigned int cmd, unsigned long arg)
+{
-+ int idx = iminor(inode) - BLKTAP_MINOR;
++ tap_blkif_t *info = filp->private_data;
++
+ switch(cmd) {
+ case BLKTAP_IOCTL_KICK_FE:
+ {
+ /* There are fe messages to process. */
-+ return blktap_read_ufe_ring(idx);
++ return blktap_read_ufe_ring(info);
+ }
+ case BLKTAP_IOCTL_SETMODE:
+ {
-+ tap_blkif_t *info = tapfds[idx];
-+
-+ if ( (idx > 0) && (idx < MAX_TAP_DEV)
-+ && (tapfds[idx] != NULL) )
-+ {
++ if (info) {
+ if (BLKTAP_MODE_VALID(arg)) {
+ info->mode = arg;
+ /* XXX: may need to flush rings here. */
@@ -50298,11 +51878,7 @@
+ }
+ case BLKTAP_IOCTL_PRINT_IDXS:
+ {
-+ tap_blkif_t *info = tapfds[idx];
-+
-+ if ( (idx > 0) && (idx < MAX_TAP_DEV)
-+ && (tapfds[idx] != NULL) )
-+ {
++ if (info) {
+ printk("User Rings: \n-----------\n");
+ printk("UF: rsp_cons: %2d, req_prod_prv: %2d "
+ "| req_prod: %2d, rsp_prod: %2d\n",
@@ -50315,11 +51891,7 @@
+ }
+ case BLKTAP_IOCTL_SENDPID:
+ {
-+ tap_blkif_t *info = tapfds[idx];
-+
-+ if ( (idx > 0) && (idx < MAX_TAP_DEV)
-+ && (tapfds[idx] != NULL) )
-+ {
++ if (info) {
+ info->pid = (pid_t)arg;
+ DPRINTK("blktap: pid received %d\n",
+ info->pid);
@@ -50347,26 +51919,38 @@
+ case BLKTAP_IOCTL_FREEINTF:
+ {
+ unsigned long dev = arg;
-+ tap_blkif_t *info = NULL;
++ unsigned long flags;
++
++ /* Looking at another device */
++ info = NULL;
+
-+ if ( (dev > 0) && (dev < MAX_TAP_DEV) ) info = tapfds[dev];
++ if ( (dev > 0) && (dev < MAX_TAP_DEV) )
++ info = tapfds[dev];
+
++ spin_lock_irqsave(&pending_free_lock, flags);
+ if ( (info != NULL) && (info->dev_pending) )
+ info->dev_pending = 0;
++ spin_unlock_irqrestore(&pending_free_lock, flags);
++
+ return 0;
+ }
+ case BLKTAP_IOCTL_MINOR:
+ {
+ unsigned long dev = arg;
-+ tap_blkif_t *info = NULL;
++
++ /* Looking at another device */
++ info = NULL;
+
-+ if ( (dev > 0) && (dev < MAX_TAP_DEV) ) info = tapfds[dev];
++ if ( (dev > 0) && (dev < MAX_TAP_DEV) )
++ info = tapfds[dev];
+
-+ if (info != NULL) return info->minor;
-+ else return -1;
++ if (info != NULL)
++ return info->minor;
++ else
++ return -1;
+ }
+ case BLKTAP_IOCTL_MAJOR:
-+ return BLKTAP_DEV_MAJOR;
++ return blktap_major;
+
+ case BLKTAP_QUERY_ALLOC_REQS:
+ {
@@ -50378,25 +51962,21 @@
+ return -ENOIOCTLCMD;
+}
+
-+static unsigned int blktap_poll(struct file *file, poll_table *wait)
++static unsigned int blktap_poll(struct file *filp, poll_table *wait)
+{
-+ private_info_t *prv;
-+ tap_blkif_t *info;
++ tap_blkif_t *info = filp->private_data;
+
-+ /*Retrieve the dev info*/
-+ prv = (private_info_t *)file->private_data;
-+ if (prv == NULL) {
++ if (!info) {
+ WPRINTK(" poll, retrieving idx failed\n");
+ return 0;
+ }
-+
-+ if (prv->idx == 0) return 0;
-+
-+ info = tapfds[prv->idx];
-+
-+ poll_wait(file, &info->wait, wait);
++
++ /* do not work on the control device */
++ if (!info->minor)
++ return 0;
++
++ poll_wait(filp, &info->wait, wait);
+ if (info->ufe_ring.req_prod_pvt != info->ufe_ring.sring->req_prod) {
-+ flush_tlb_all();
+ RING_PUSH_REQUESTS(&info->ufe_ring);
+ return POLLIN | POLLRDNORM;
+ }
@@ -50407,11 +51987,14 @@
+{
+ tap_blkif_t *info;
+
-+ if (idx == 0) return;
++ if (idx == 0)
++ return;
+
+ info = tapfds[idx];
+
-+ if (info != NULL) wake_up_interruptible(&info->wait);
++ if (info != NULL)
++ wake_up_interruptible(&info->wait);
++
+ return;
+}
+
@@ -50428,66 +52011,21 @@
+static int req_increase(void)
+{
+ int i, j;
-+ struct page *page;
-+ unsigned long flags;
-+ int ret;
-+
-+ spin_lock_irqsave(&pending_free_lock, flags);
+
-+ ret = -EINVAL;
+ if (mmap_alloc >= MAX_PENDING_REQS || mmap_lock)
-+ goto done;
-+
-+#ifdef __ia64__
-+ extern unsigned long alloc_empty_foreign_map_page_range(
-+ unsigned long pages);
-+ mmap_start[mmap_alloc].start = (unsigned long)
-+ alloc_empty_foreign_map_page_range(mmap_pages);
-+#else /* ! ia64 */
-+ page = balloon_alloc_empty_page_range(mmap_pages);
-+ ret = -ENOMEM;
-+ if (page == NULL) {
-+ printk("%s balloon_alloc_empty_page_range gave NULL\n", __FUNCTION__);
-+ goto done;
-+ }
-+
-+ /* Pin all of the pages. */
-+ for (i=0; i<mmap_pages; i++)
-+ get_page(&page[i]);
-+
-+ mmap_start[mmap_alloc].start =
-+ (unsigned long)pfn_to_kaddr(page_to_pfn(page));
-+ mmap_start[mmap_alloc].mpage = page;
-+
-+#endif
-+
-+ pending_reqs[mmap_alloc] = kzalloc(sizeof(pending_req_t) *
-+ blkif_reqs, GFP_KERNEL);
-+ pending_addrs[mmap_alloc] = kzalloc(sizeof(unsigned long) *
-+ mmap_pages, GFP_KERNEL);
-+
-+ ret = -ENOMEM;
-+ if (!pending_reqs[mmap_alloc] || !pending_addrs[mmap_alloc]) {
-+ kfree(pending_reqs[mmap_alloc]);
-+ kfree(pending_addrs[mmap_alloc]);
-+ WPRINTK("%s: out of memory\n", __FUNCTION__);
-+ ret = -ENOMEM;
-+ goto done;
-+ }
-+
-+ ret = 0;
++ return -EINVAL;
+
-+ DPRINTK("%s: reqs=%d, pages=%d, mmap_vstart=0x%lx\n",
-+ __FUNCTION__, blkif_reqs, mmap_pages,
-+ mmap_start[mmap_alloc].start);
++ pending_reqs[mmap_alloc] = kzalloc(sizeof(pending_req_t)
++ * blkif_reqs, GFP_KERNEL);
++ foreign_pages[mmap_alloc] = alloc_empty_pages_and_pagevec(mmap_pages);
+
-+ BUG_ON(mmap_start[mmap_alloc].start == 0);
++ if (!pending_reqs[mmap_alloc] || !foreign_pages[mmap_alloc])
++ goto out_of_memory;
+
-+ for (i = 0; i < mmap_pages; i++)
-+ pending_addrs[mmap_alloc][i] =
-+ mmap_start[mmap_alloc].start + (i << PAGE_SHIFT);
++ DPRINTK("%s: reqs=%d, pages=%d\n",
++ __FUNCTION__, blkif_reqs, mmap_pages);
+
-+ for (i = 0; i < MAX_PENDING_REQS ; i++) {
++ for (i = 0; i < MAX_PENDING_REQS; i++) {
+ list_add_tail(&pending_reqs[mmap_alloc][i].free_list,
+ &pending_free);
+ pending_reqs[mmap_alloc][i].mem_idx = mmap_alloc;
@@ -50498,65 +52036,28 @@
+
+ mmap_alloc++;
+ DPRINTK("# MMAPs increased to %d\n",mmap_alloc);
-+ done:
-+ spin_unlock_irqrestore(&pending_free_lock, flags);
-+ return ret;
-+}
-+
-+static void mmap_req_del(int mmap)
-+{
-+ int i;
-+ struct page *page;
-+
-+ /*Spinlock already acquired*/
-+ kfree(pending_reqs[mmap]);
-+ kfree(pending_addrs[mmap]);
-+
-+#ifdef __ia64__
-+ /*Not sure what goes here yet!*/
-+#else
-+
-+ /* Unpin all of the pages. */
-+ page = mmap_start[mmap].mpage;
-+ for (i=0; i<mmap_pages; i++)
-+ put_page(&page[i]);
-+
-+ balloon_dealloc_empty_page_range(mmap_start[mmap].mpage, mmap_pages);
-+#endif
-+
-+ mmap_lock = 0;
-+ DPRINTK("# MMAPs decreased to %d\n",mmap_alloc);
-+ mmap_alloc--;
++ return 0;
++
++ out_of_memory:
++ free_empty_pages_and_pagevec(foreign_pages[mmap_alloc], mmap_pages);
++ kfree(pending_reqs[mmap_alloc]);
++ WPRINTK("%s: out of memory\n", __FUNCTION__);
++ return -ENOMEM;
+}
+
-+/*N.B. Currently unused - will be accessed via sysfs*/
-+static void req_decrease(void)
++static void mmap_req_del(int mmap)
+{
-+ pending_req_t *req;
-+ int i;
-+ unsigned long flags;
++ BUG_ON(!spin_is_locked(&pending_free_lock));
+
-+ spin_lock_irqsave(&pending_free_lock, flags);
++ kfree(pending_reqs[mmap]);
++ pending_reqs[mmap] = NULL;
+
-+ DPRINTK("Req decrease called.\n");
-+ if (mmap_lock || mmap_alloc == 1)
-+ goto done;
++ free_empty_pages_and_pagevec(foreign_pages[mmap_alloc], mmap_pages);
++ foreign_pages[mmap] = NULL;
+
-+ mmap_lock = 1;
-+ mmap_inuse = MAX_PENDING_REQS;
-+
-+ /*Go through reqs and remove any that aren't in use*/
-+ for (i = 0; i < MAX_PENDING_REQS ; i++) {
-+ req = &pending_reqs[mmap_alloc-1][i];
-+ if (req->inuse == 0) {
-+ list_del(&req->free_list);
-+ mmap_inuse--;
-+ }
-+ }
-+ if (mmap_inuse == 0) mmap_req_del(mmap_alloc-1);
-+ done:
-+ spin_unlock_irqrestore(&pending_free_lock, flags);
-+ return;
++ mmap_lock = 0;
++ DPRINTK("# MMAPs decreased to %d\n",mmap_alloc);
++ mmap_alloc--;
+}
+
+static pending_req_t* alloc_req(void)
@@ -50623,7 +52124,7 @@
+ mmap_idx = req->mem_idx;
+
+ for (i = 0; i < req->nr_pages; i++) {
-+ kvaddr = MMAP_VADDR(mmap_start[mmap_idx].start, k_idx, i);
++ kvaddr = idx_to_kaddr(mmap_idx, k_idx, i);
+ uvaddr = MMAP_VADDR(info->user_vstart, u_idx, i);
+
+ khandle = &pending_handle(mmap_idx, k_idx, i);
@@ -50632,7 +52133,7 @@
+ continue;
+ }
+ gnttab_set_unmap_op(&unmap[invcount],
-+ MMAP_VADDR(mmap_start[mmap_idx].start, k_idx, i),
++ idx_to_kaddr(mmap_idx, k_idx, i),
+ GNTMAP_host_map, khandle->kernel);
+ invcount++;
+
@@ -50718,7 +52219,7 @@
+ * COMPLETION CALLBACK -- Called by user level ioctl()
+ */
+
-+static int blktap_read_ufe_ring(int idx)
++static int blktap_read_ufe_ring(tap_blkif_t *info)
+{
+ /* This is called to read responses from the UFE ring. */
+ RING_IDX i, j, rp;
@@ -50726,12 +52227,9 @@
+ blkif_t *blkif=NULL;
+ int pending_idx, usr_idx, mmap_idx;
+ pending_req_t *pending_req;
-+ tap_blkif_t *info;
+
-+ info = tapfds[idx];
-+ if (info == NULL) {
++ if (!info)
+ return 0;
-+ }
+
+ /* We currently only forward packets in INTERCEPT_FE mode. */
+ if (!(info->mode & BLKTAP_MODE_INTERCEPT_FE))
@@ -50769,9 +52267,8 @@
+ struct page *pg;
+ int offset;
+
-+ uvaddr = MMAP_VADDR(info->user_vstart, usr_idx, j);
-+ kvaddr = MMAP_VADDR(mmap_start[mmap_idx].start,
-+ pending_idx, j);
++ uvaddr = MMAP_VADDR(info->user_vstart, usr_idx, j);
++ kvaddr = idx_to_kaddr(mmap_idx, pending_idx, j);
+
+ pg = pfn_to_page(__pa(kvaddr) >> PAGE_SHIFT);
+ ClearPageReserved(pg);
@@ -50779,7 +52276,7 @@
+ >> PAGE_SHIFT;
+ map[offset] = NULL;
+ }
-+ fast_flush_area(pending_req, pending_idx, usr_idx, idx);
++ fast_flush_area(pending_req, pending_idx, usr_idx, info->minor);
+ make_response(blkif, pending_req->id, resp->operation,
+ resp->status);
+ info->idx_map[usr_idx] = INVALID_REQ;
@@ -50953,8 +52450,7 @@
+ uint32_t flags;
+
+ uvaddr = MMAP_VADDR(info->user_vstart, usr_idx, i);
-+ kvaddr = MMAP_VADDR(mmap_start[mmap_idx].start,
-+ pending_idx, i);
++ kvaddr = idx_to_kaddr(mmap_idx, pending_idx, i);
+ page = virt_to_page(kvaddr);
+
+ sector = req->sector_number + (8*i);
@@ -51006,8 +52502,7 @@
+ struct page *pg;
+
+ uvaddr = MMAP_VADDR(info->user_vstart, usr_idx, i/2);
-+ kvaddr = MMAP_VADDR(mmap_start[mmap_idx].start,
-+ pending_idx, i/2);
++ kvaddr = idx_to_kaddr(mmap_idx, pending_idx, i/2);
+
+ if (unlikely(map[i].status != 0)) {
+ WPRINTK("invalid kernel buffer -- "
@@ -51037,8 +52532,7 @@
+ unsigned long kvaddr;
+ struct page *pg;
+
-+ kvaddr = MMAP_VADDR(mmap_start[mmap_idx].start,
-+ pending_idx, i);
++ kvaddr = idx_to_kaddr(mmap_idx, pending_idx, i);
+ pg = pfn_to_page(__pa(kvaddr) >> PAGE_SHIFT);
+ SetPageReserved(pg);
+ }
@@ -51132,16 +52626,20 @@
+ /*Create the blktap devices, but do not map memory or waitqueue*/
+ for(i = 0; i < MAX_TAP_DEV; i++) translate_domid[i].domid = 0xFFFF;
+
-+ ret = register_chrdev(BLKTAP_DEV_MAJOR,"blktap",&blktap_fops);
++ /* Dynamically allocate a major for this device */
++ ret = register_chrdev(0, "blktap", &blktap_fops);
+
+ if ( (ret < 0) ) {
+ WPRINTK("Couldn't register /dev/xen/blktap\n");
+ return -ENOMEM;
+ }
+
++ blktap_major = ret;
++
+ for(i = 0; i < MAX_TAP_DEV; i++ ) {
+ info = tapfds[i] = kzalloc(sizeof(tap_blkif_t),GFP_KERNEL);
-+ if(tapfds[i] == NULL) return -ENOMEM;
++ if(tapfds[i] == NULL)
++ return -ENOMEM;
+ info->minor = i;
+ info->pid = 0;
+ info->blkif = NULL;
@@ -51151,6 +52649,24 @@
+ DPRINTK("Created misc_dev [/dev/xen/blktap%d]\n",i);
+ }
+
++ /* Make sure the xen class exists */
++ if (!setup_xen_class()) {
++ /*
++ * This will allow udev to create the blktap ctrl device.
++ * We only want to create blktap0 first. We don't want
++ * to flood the sysfs system with needless blktap devices.
++ * We only create the device when a request of a new device is
++ * made.
++ */
++ class_device_create(xen_class, NULL,
++ MKDEV(blktap_major, 0), NULL,
++ "blktap0");
++ tapfds[0]->sysfs_set = 1;
++ } else {
++ /* this is bad, but not fatal */
++ WPRINTK("blktap: sysfs xen_class not created\n");
++ }
++
+ DPRINTK("Blktap device successfully created\n");
+
+ return 0;
@@ -51159,8 +52675,8 @@
+module_init(blkif_init);
+
+MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blktap/common.h linux-2.6.18-xen/drivers/xen/blktap/common.h
---- linux-2.6.18/drivers/xen/blktap/common.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/blktap/common.h linux-2.6.18-xen/drivers/xen/blktap/common.h
+--- linux-2.6.18.1/drivers/xen/blktap/common.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/blktap/common.h 2006-09-21 01:33:31.000000000 +0200
@@ -0,0 +1,120 @@
+/*
@@ -51283,8 +52799,8 @@
+void signal_tapdisk(int idx);
+
+#endif /* __BLKIF__BACKEND__COMMON_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blktap/interface.c linux-2.6.18-xen/drivers/xen/blktap/interface.c
---- linux-2.6.18/drivers/xen/blktap/interface.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/blktap/interface.c linux-2.6.18-xen/drivers/xen/blktap/interface.c
+--- linux-2.6.18.1/drivers/xen/blktap/interface.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/blktap/interface.c 2006-09-21 01:33:31.000000000 +0200
@@ -0,0 +1,164 @@
+/******************************************************************************
@@ -51451,17 +52967,20 @@
+ blkif_cachep = kmem_cache_create("blktapif_cache", sizeof(blkif_t),
+ 0, 0, NULL, NULL);
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blktap/Makefile linux-2.6.18-xen/drivers/xen/blktap/Makefile
---- linux-2.6.18/drivers/xen/blktap/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/blktap/Makefile 2006-09-04 16:31:13.000000000 +0200
-@@ -0,0 +1,3 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/blktap/Makefile linux-2.6.18-xen/drivers/xen/blktap/Makefile
+--- linux-2.6.18.1/drivers/xen/blktap/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/blktap/Makefile 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,6 @@
+LINUXINCLUDE += -I../xen/include/public/io
-+obj-y := xenbus.o interface.o blktap.o
+
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blktap/xenbus.c linux-2.6.18-xen/drivers/xen/blktap/xenbus.c
---- linux-2.6.18/drivers/xen/blktap/xenbus.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/blktap/xenbus.c 2006-09-21 01:33:31.000000000 +0200
-@@ -0,0 +1,367 @@
++obj-$(CONFIG_XEN_BLKDEV_TAP) := blktap.o
++
++blktap-y := xenbus.o interface.o blktapmain.o
++
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/blktap/xenbus.c linux-2.6.18-xen/drivers/xen/blktap/xenbus.c
+--- linux-2.6.18.1/drivers/xen/blktap/xenbus.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/blktap/xenbus.c 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,366 @@
+/* drivers/xen/blktap/xenbus.c
+ *
+ * Xenbus code for blktap
@@ -51737,7 +53256,6 @@
+ kthread_stop(be->blkif->xenblkd);
+ be->blkif->xenblkd = NULL;
+ }
-+ tap_blkif_unmap(be->blkif);
+ xenbus_switch_state(dev, XenbusStateClosing);
+ break;
+
@@ -51829,14 +53347,14 @@
+{
+ xenbus_register_backend(&blktap);
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/char/Makefile linux-2.6.18-xen/drivers/xen/char/Makefile
---- linux-2.6.18/drivers/xen/char/Makefile 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/char/Makefile linux-2.6.18-xen/drivers/xen/char/Makefile
+--- linux-2.6.18.1/drivers/xen/char/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/char/Makefile 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,2 @@
+
+obj-y := mem.o
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/char/mem.c linux-2.6.18-xen/drivers/xen/char/mem.c
---- linux-2.6.18/drivers/xen/char/mem.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/char/mem.c linux-2.6.18-xen/drivers/xen/char/mem.c
+--- linux-2.6.18.1/drivers/xen/char/mem.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/char/mem.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,180 @@
+/*
@@ -52019,8 +53537,8 @@
+ .mmap = mmap_mem,
+ .open = open_mem,
+};
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/console/console.c linux-2.6.18-xen/drivers/xen/console/console.c
---- linux-2.6.18/drivers/xen/console/console.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/console/console.c linux-2.6.18-xen/drivers/xen/console/console.c
+--- linux-2.6.18.1/drivers/xen/console/console.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/console/console.c 2006-09-21 01:33:31.000000000 +0200
@@ -0,0 +1,688 @@
+/******************************************************************************
@@ -52711,14 +54229,14 @@
+module_init(xencons_init);
+
+MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/console/Makefile linux-2.6.18-xen/drivers/xen/console/Makefile
---- linux-2.6.18/drivers/xen/console/Makefile 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/console/Makefile linux-2.6.18-xen/drivers/xen/console/Makefile
+--- linux-2.6.18.1/drivers/xen/console/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/console/Makefile 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,2 @@
+
+obj-y := console.o xencons_ring.o
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/console/xencons_ring.c linux-2.6.18-xen/drivers/xen/console/xencons_ring.c
---- linux-2.6.18/drivers/xen/console/xencons_ring.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/console/xencons_ring.c linux-2.6.18-xen/drivers/xen/console/xencons_ring.c
+--- linux-2.6.18.1/drivers/xen/console/xencons_ring.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/console/xencons_ring.c 2006-09-21 01:33:31.000000000 +0200
@@ -0,0 +1,143 @@
+/*
@@ -52864,8 +54382,8 @@
+{
+ (void)xencons_ring_init();
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/core/cpu_hotplug.c linux-2.6.18-xen/drivers/xen/core/cpu_hotplug.c
---- linux-2.6.18/drivers/xen/core/cpu_hotplug.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/core/cpu_hotplug.c linux-2.6.18-xen/drivers/xen/core/cpu_hotplug.c
+--- linux-2.6.18.1/drivers/xen/core/cpu_hotplug.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/core/cpu_hotplug.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,188 @@
+
@@ -53056,8 +54574,8 @@
+{
+ xenbus_allowed_cpumask = cpu_present_map;
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/core/evtchn.c linux-2.6.18-xen/drivers/xen/core/evtchn.c
---- linux-2.6.18/drivers/xen/core/evtchn.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/core/evtchn.c linux-2.6.18-xen/drivers/xen/core/evtchn.c
+--- linux-2.6.18.1/drivers/xen/core/evtchn.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/core/evtchn.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,868 @@
+/******************************************************************************
@@ -53928,8 +55446,8 @@
+ irq_desc[pirq_to_irq(i)].chip = &pirq_type;
+ }
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/core/features.c linux-2.6.18-xen/drivers/xen/core/features.c
---- linux-2.6.18/drivers/xen/core/features.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/core/features.c linux-2.6.18-xen/drivers/xen/core/features.c
+--- linux-2.6.18.1/drivers/xen/core/features.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/core/features.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,30 @@
+/******************************************************************************
@@ -53962,8 +55480,8 @@
+ xen_features[i*32+j] = !!(fi.submap & 1<<j);
+ }
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/core/gnttab.c linux-2.6.18-xen/drivers/xen/core/gnttab.c
---- linux-2.6.18/drivers/xen/core/gnttab.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/core/gnttab.c linux-2.6.18-xen/drivers/xen/core/gnttab.c
+--- linux-2.6.18.1/drivers/xen/core/gnttab.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/core/gnttab.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,483 @@
+/******************************************************************************
@@ -54449,8 +55967,8 @@
+#ifdef CONFIG_XEN
+core_initcall(gnttab_init);
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/core/hypervisor_sysfs.c linux-2.6.18-xen/drivers/xen/core/hypervisor_sysfs.c
---- linux-2.6.18/drivers/xen/core/hypervisor_sysfs.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/core/hypervisor_sysfs.c linux-2.6.18-xen/drivers/xen/core/hypervisor_sysfs.c
+--- linux-2.6.18.1/drivers/xen/core/hypervisor_sysfs.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/core/hypervisor_sysfs.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,59 @@
+/*
@@ -54512,8 +56030,8 @@
+
+device_initcall(hypervisor_subsys_init);
+EXPORT_SYMBOL_GPL(hypervisor_subsys);
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/core/Makefile linux-2.6.18-xen/drivers/xen/core/Makefile
---- linux-2.6.18/drivers/xen/core/Makefile 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/core/Makefile linux-2.6.18-xen/drivers/xen/core/Makefile
+--- linux-2.6.18.1/drivers/xen/core/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/core/Makefile 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,13 @@
+#
@@ -54529,8 +56047,8 @@
+obj-$(CONFIG_XEN_SKBUFF) += skbuff.o
+obj-$(CONFIG_XEN_REBOOT) += reboot.o
+obj-$(CONFIG_XEN_SMPBOOT) += smpboot.o
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/core/reboot.c linux-2.6.18-xen/drivers/xen/core/reboot.c
---- linux-2.6.18/drivers/xen/core/reboot.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/core/reboot.c linux-2.6.18-xen/drivers/xen/core/reboot.c
+--- linux-2.6.18.1/drivers/xen/core/reboot.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/core/reboot.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,384 @@
+#define __KERNEL_SYSCALLS__
@@ -54917,10 +56435,10 @@
+}
+
+subsys_initcall(setup_shutdown_event);
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/core/skbuff.c linux-2.6.18-xen/drivers/xen/core/skbuff.c
---- linux-2.6.18/drivers/xen/core/skbuff.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/core/skbuff.c 2006-09-04 16:31:13.000000000 +0200
-@@ -0,0 +1,139 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/core/skbuff.c linux-2.6.18-xen/drivers/xen/core/skbuff.c
+--- linux-2.6.18.1/drivers/xen/core/skbuff.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/core/skbuff.c 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,144 @@
+
+#include <linux/module.h>
+#include <linux/version.h>
@@ -54940,7 +56458,12 @@
+/*static*/ kmem_cache_t *skbuff_cachep;
+EXPORT_SYMBOL(skbuff_cachep);
+
-+#define MAX_SKBUFF_ORDER 4
++/* Allow up to 64kB or page-sized packets (whichever is greater). */
++#if PAGE_SHIFT < 16
++#define MAX_SKBUFF_ORDER (16 - PAGE_SHIFT)
++#else
++#define MAX_SKBUFF_ORDER 0
++#endif
+static kmem_cache_t *skbuff_order_cachep[MAX_SKBUFF_ORDER + 1];
+
+static struct {
@@ -55060,8 +56583,8 @@
+core_initcall(skbuff_init);
+
+EXPORT_SYMBOL(__dev_alloc_skb);
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/core/smpboot.c linux-2.6.18-xen/drivers/xen/core/smpboot.c
---- linux-2.6.18/drivers/xen/core/smpboot.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/core/smpboot.c linux-2.6.18-xen/drivers/xen/core/smpboot.c
+--- linux-2.6.18.1/drivers/xen/core/smpboot.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/core/smpboot.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,429 @@
+/*
@@ -55493,8 +57016,8 @@
+ return -EINVAL;
+}
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/core/xen_proc.c linux-2.6.18-xen/drivers/xen/core/xen_proc.c
---- linux-2.6.18/drivers/xen/core/xen_proc.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/core/xen_proc.c linux-2.6.18-xen/drivers/xen/core/xen_proc.c
+--- linux-2.6.18.1/drivers/xen/core/xen_proc.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/core/xen_proc.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,18 @@
+
@@ -55515,8 +57038,8 @@
+{
+ remove_proc_entry(name, xen_base);
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/core/xen_sysfs.c linux-2.6.18-xen/drivers/xen/core/xen_sysfs.c
---- linux-2.6.18/drivers/xen/core/xen_sysfs.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/core/xen_sysfs.c linux-2.6.18-xen/drivers/xen/core/xen_sysfs.c
+--- linux-2.6.18.1/drivers/xen/core/xen_sysfs.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/core/xen_sysfs.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,378 @@
+/*
@@ -55897,9 +57420,9 @@
+
+module_init(hyper_sysfs_init);
+module_exit(hyper_sysfs_exit);
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/evtchn/evtchn.c linux-2.6.18-xen/drivers/xen/evtchn/evtchn.c
---- linux-2.6.18/drivers/xen/evtchn/evtchn.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/evtchn/evtchn.c 2006-09-04 16:31:13.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/evtchn/evtchn.c linux-2.6.18-xen/drivers/xen/evtchn/evtchn.c
+--- linux-2.6.18.1/drivers/xen/evtchn/evtchn.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/evtchn/evtchn.c 2006-10-17 15:01:58.000000000 +0200
@@ -0,0 +1,456 @@
+/******************************************************************************
+ * evtchn.c
@@ -56321,7 +57844,7 @@
+};
+
+static struct miscdevice evtchn_miscdev = {
-+ .minor = EVTCHN_MINOR,
++ .minor = MISC_DYNAMIC_MINOR,
+ .name = "evtchn",
+ .fops = &evtchn_fops,
+};
@@ -56357,14 +57880,14 @@
+module_exit(evtchn_cleanup);
+
+MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/evtchn/Makefile linux-2.6.18-xen/drivers/xen/evtchn/Makefile
---- linux-2.6.18/drivers/xen/evtchn/Makefile 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/evtchn/Makefile linux-2.6.18-xen/drivers/xen/evtchn/Makefile
+--- linux-2.6.18.1/drivers/xen/evtchn/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/evtchn/Makefile 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,2 @@
+
+obj-y := evtchn.o
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/Kconfig linux-2.6.18-xen/drivers/xen/Kconfig
---- linux-2.6.18/drivers/xen/Kconfig 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/Kconfig linux-2.6.18-xen/drivers/xen/Kconfig
+--- linux-2.6.18.1/drivers/xen/Kconfig 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/Kconfig 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,260 @@
+#
@@ -56627,8 +58150,8 @@
+ depends on SMP
+
+endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/Makefile linux-2.6.18-xen/drivers/xen/Makefile
---- linux-2.6.18/drivers/xen/Makefile 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/Makefile linux-2.6.18-xen/drivers/xen/Makefile
+--- linux-2.6.18.1/drivers/xen/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/Makefile 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,17 @@
+obj-y += core/
@@ -56648,9 +58171,9 @@
+obj-$(CONFIG_XEN_NETDEV_FRONTEND) += netfront/
+obj-$(CONFIG_XEN_PCIDEV_BACKEND) += pciback/
+obj-$(CONFIG_XEN_PCIDEV_FRONTEND) += pcifront/
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/netback/common.h linux-2.6.18-xen/drivers/xen/netback/common.h
---- linux-2.6.18/drivers/xen/netback/common.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/netback/common.h 2006-09-04 16:31:13.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/netback/common.h linux-2.6.18-xen/drivers/xen/netback/common.h
+--- linux-2.6.18.1/drivers/xen/netback/common.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/netback/common.h 2006-10-19 11:01:25.000000000 +0200
@@ -0,0 +1,141 @@
+/******************************************************************************
+ * arch/xen/drivers/netif/backend/common.h
@@ -56760,7 +58283,7 @@
+
+void netif_disconnect(netif_t *netif);
+
-+netif_t *netif_alloc(domid_t domid, unsigned int handle, u8 be_mac[ETH_ALEN]);
++netif_t *netif_alloc(domid_t domid, unsigned int handle);
+int netif_map(netif_t *netif, unsigned long tx_ring_ref,
+ unsigned long rx_ring_ref, unsigned int evtchn);
+
@@ -56793,10 +58316,10 @@
+}
+
+#endif /* __NETIF__BACKEND__COMMON_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/netback/interface.c linux-2.6.18-xen/drivers/xen/netback/interface.c
---- linux-2.6.18/drivers/xen/netback/interface.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/netback/interface.c 2006-09-04 16:31:13.000000000 +0200
-@@ -0,0 +1,339 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/netback/interface.c linux-2.6.18-xen/drivers/xen/netback/interface.c
+--- linux-2.6.18.1/drivers/xen/netback/interface.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/netback/interface.c 2006-10-19 11:01:25.000000000 +0200
+@@ -0,0 +1,352 @@
+/******************************************************************************
+ * arch/xen/drivers/netif/backend/interface.c
+ *
@@ -56833,6 +58356,24 @@
+#include <linux/ethtool.h>
+#include <linux/rtnetlink.h>
+
++/*
++ * Module parameter 'queue_length':
++ *
++ * Enables queuing in the network stack when a client has run out of receive
++ * descriptors. Although this feature can improve receive bandwidth by avoiding
++ * packet loss, it can also result in packets sitting in the 'tx_queue' for
++ * unbounded time. This is bad if those packets hold onto foreign resources.
++ * For example, consider a packet that holds onto resources belonging to the
++ * guest for which it is queued (e.g., packet received on vif1.0, destined for
++ * vif1.1 which is not activated in the guest): in this situation the guest
++ * will never be destroyed, unless vif1.1 is taken down (which flushes the
++ * 'tx_queue').
++ *
++ * Only set this parameter to non-zero value if you know what you are doing!
++ */
++static unsigned long netbk_queue_length = 0;
++module_param_named(queue_length, netbk_queue_length, ulong, 0);
++
+static void __netif_up(netif_t *netif)
+{
+ enable_irq(netif->irq);
@@ -56843,6 +58384,7 @@
+{
+ disable_irq(netif->irq);
+ netif_deschedule_work(netif);
++ del_timer_sync(&netif->credit_timeout);
+}
+
+static int net_open(struct net_device *dev)
@@ -56906,7 +58448,7 @@
+ .get_link = ethtool_op_get_link,
+};
+
-+netif_t *netif_alloc(domid_t domid, unsigned int handle, u8 be_mac[ETH_ALEN])
++netif_t *netif_alloc(domid_t domid, unsigned int handle)
+{
+ int err = 0, i;
+ struct net_device *dev;
@@ -56933,6 +58475,7 @@
+ netif->credit_bytes = netif->remaining_credit = ~0UL;
+ netif->credit_usec = 0UL;
+ init_timer(&netif->credit_timeout);
++ netif->credit_timeout.expires = jiffies;
+
+ dev->hard_start_xmit = netif_be_start_xmit;
+ dev->get_stats = netif_be_get_stats;
@@ -56943,26 +58486,19 @@
+
+ SET_ETHTOOL_OPS(dev, &network_ethtool_ops);
+
-+ /*
-+ * Reduce default TX queuelen so that each guest interface only
-+ * allows it to eat around 6.4MB of host memory.
-+ */
-+ dev->tx_queue_len = 100;
++ dev->tx_queue_len = netbk_queue_length;
++ if (dev->tx_queue_len != 0)
++ printk(KERN_WARNING "netbk: WARNING: device '%s' has non-zero "
++ "queue length (%lu)!\n", dev->name, dev->tx_queue_len);
+
-+ for (i = 0; i < ETH_ALEN; i++)
-+ if (be_mac[i] != 0)
-+ break;
-+ if (i == ETH_ALEN) {
-+ /*
-+ * Initialise a dummy MAC address. We choose the numerically
-+ * largest non-broadcast address to prevent the address getting
-+ * stolen by an Ethernet bridge for STP purposes.
-+ * (FE:FF:FF:FF:FF:FF)
-+ */
-+ memset(dev->dev_addr, 0xFF, ETH_ALEN);
-+ dev->dev_addr[0] &= ~0x01;
-+ } else
-+ memcpy(dev->dev_addr, be_mac, ETH_ALEN);
++ /*
++ * Initialise a dummy MAC address. We choose the numerically
++ * largest non-broadcast address to prevent the address getting
++ * stolen by an Ethernet bridge for STP purposes.
++ * (FE:FF:FF:FF:FF:FF)
++ */
++ memset(dev->dev_addr, 0xFF, ETH_ALEN);
++ dev->dev_addr[0] &= ~0x01;
+
+ rtnl_lock();
+ err = register_netdevice(dev);
@@ -57136,10 +58672,10 @@
+ }
+ netif_free(netif);
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/netback/loopback.c linux-2.6.18-xen/drivers/xen/netback/loopback.c
---- linux-2.6.18/drivers/xen/netback/loopback.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/netback/loopback.c 2006-09-04 16:31:13.000000000 +0200
-@@ -0,0 +1,260 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/netback/loopback.c linux-2.6.18-xen/drivers/xen/netback/loopback.c
+--- linux-2.6.18.1/drivers/xen/netback/loopback.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/netback/loopback.c 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,320 @@
+/******************************************************************************
+ * netback/loopback.c
+ *
@@ -57194,8 +58730,10 @@
+#include <linux/skbuff.h>
+#include <linux/ethtool.h>
+#include <net/dst.h>
++#include <net/xfrm.h> /* secpath_reset() */
++#include <asm/hypervisor.h> /* is_initial_xendomain() */
+
-+static int nloopbacks = 8;
++static int nloopbacks = -1;
+module_param(nloopbacks, int, 0);
+MODULE_PARM_DESC(nloopbacks, "Number of netback-loopback devices to create");
+
@@ -57218,10 +58756,60 @@
+ return 0;
+}
+
++#ifdef CONFIG_X86
++static int is_foreign(unsigned long pfn)
++{
++ /* NB. Play it safe for auto-translation mode. */
++ return (xen_feature(XENFEAT_auto_translated_physmap) ||
++ (phys_to_machine_mapping[pfn] & FOREIGN_FRAME_BIT));
++}
++#else
++/* How to detect a foreign mapping? Play it safe. */
++#define is_foreign(pfn) (1)
++#endif
++
++static int skb_remove_foreign_references(struct sk_buff *skb)
++{
++ struct page *page;
++ unsigned long pfn;
++ int i, off;
++ char *vaddr;
++
++ BUG_ON(skb_shinfo(skb)->frag_list);
++
++ for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
++ pfn = page_to_pfn(skb_shinfo(skb)->frags[i].page);
++ if (!is_foreign(pfn))
++ continue;
++
++ page = alloc_page(GFP_ATOMIC | __GFP_NOWARN);
++ if (unlikely(!page))
++ return 0;
++
++ vaddr = kmap_skb_frag(&skb_shinfo(skb)->frags[i]);
++ off = skb_shinfo(skb)->frags[i].page_offset;
++ memcpy(page_address(page) + off,
++ vaddr + off,
++ skb_shinfo(skb)->frags[i].size);
++ kunmap_skb_frag(vaddr);
++
++ put_page(skb_shinfo(skb)->frags[i].page);
++ skb_shinfo(skb)->frags[i].page = page;
++ }
++
++ return 1;
++}
++
+static int loopback_start_xmit(struct sk_buff *skb, struct net_device *dev)
+{
+ struct net_private *np = netdev_priv(dev);
+
++ if (!skb_remove_foreign_references(skb)) {
++ np->stats.tx_dropped++;
++ dev_kfree_skb(skb);
++ return 0;
++ }
++
+ dst_release(skb->dst);
+ skb->dst = NULL;
+
@@ -57251,6 +58839,11 @@
+ skb->protocol = eth_type_trans(skb, dev);
+ skb->dev = dev;
+ dev->last_rx = jiffies;
++
++ /* Flush netfilter context: rx'ed skbuffs not expected to have any. */
++ nf_reset(skb);
++ secpath_reset(skb);
++
+ netif_rx(skb);
+
+ return 0;
@@ -57380,6 +58973,9 @@
+{
+ int i, err = 0;
+
++ if (nloopbacks == -1)
++ nloopbacks = is_initial_xendomain() ? 4 : 0;
++
+ for (i = 0; i < nloopbacks; i++)
+ if ((err = make_loopback(i)) != 0)
+ break;
@@ -57400,8 +58996,8 @@
+module_exit(loopback_exit);
+
+MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/netback/Makefile linux-2.6.18-xen/drivers/xen/netback/Makefile
---- linux-2.6.18/drivers/xen/netback/Makefile 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/netback/Makefile linux-2.6.18-xen/drivers/xen/netback/Makefile
+--- linux-2.6.18.1/drivers/xen/netback/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/netback/Makefile 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,5 @@
+obj-$(CONFIG_XEN_NETDEV_BACKEND) := netbk.o
@@ -57409,10 +59005,10 @@
+
+netbk-y := netback.o xenbus.o interface.o
+netloop-y := loopback.o
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/netback/netback.c linux-2.6.18-xen/drivers/xen/netback/netback.c
---- linux-2.6.18/drivers/xen/netback/netback.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/netback/netback.c 2006-09-04 16:31:13.000000000 +0200
-@@ -0,0 +1,1498 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/netback/netback.c linux-2.6.18-xen/drivers/xen/netback/netback.c
+--- linux-2.6.18.1/drivers/xen/netback/netback.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/netback/netback.c 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,1509 @@
+/******************************************************************************
+ * drivers/xen/netback/netback.c
+ *
@@ -57486,14 +59082,15 @@
+
+static struct sk_buff_head rx_queue;
+
-+static unsigned long mmap_vstart;
-+#define MMAP_VADDR(_req) (mmap_vstart + ((_req) * PAGE_SIZE))
-+
-+static void *rx_mmap_area;
++static struct page **mmap_pages;
++static inline unsigned long idx_to_kaddr(unsigned int idx)
++{
++ return (unsigned long)pfn_to_kaddr(page_to_pfn(mmap_pages[idx]));
++}
+
+#define PKT_PROT_LEN 64
+
-+static struct {
++static struct pending_tx_info {
+ netif_tx_request_t req;
+ netif_t *netif;
+} pending_tx_info[MAX_PENDING_REQS];
@@ -57633,7 +59230,7 @@
+ copy = len >= PAGE_SIZE ? PAGE_SIZE : len;
+ zero = len >= PAGE_SIZE ? 0 : __GFP_ZERO;
+
-+ page = alloc_page(GFP_ATOMIC | zero);
++ page = alloc_page(GFP_ATOMIC | __GFP_NOWARN | zero);
+ if (unlikely(!page))
+ goto err_free;
+
@@ -57789,14 +59386,22 @@
+ flipped. */
+ meta->copy = 1;
+ copy_gop = npo->copy + npo->copy_prod++;
-+ copy_gop->source.domid = DOMID_SELF;
++ copy_gop->flags = GNTCOPY_dest_gref;
++ if (PageForeign(page)) {
++ struct pending_tx_info *src_pend =
++ &pending_tx_info[page->index];
++ copy_gop->source.domid = src_pend->netif->domid;
++ copy_gop->source.u.ref = src_pend->req.gref;
++ copy_gop->flags |= GNTCOPY_source_gref;
++ } else {
++ copy_gop->source.domid = DOMID_SELF;
++ copy_gop->source.u.gmfn = old_mfn;
++ }
+ copy_gop->source.offset = offset;
-+ copy_gop->source.u.gmfn = old_mfn;
+ copy_gop->dest.domid = netif->domid;
+ copy_gop->dest.offset = 0;
+ copy_gop->dest.u.ref = req->gref;
+ copy_gop->len = size;
-+ copy_gop->flags = GNTCOPY_dest_gref;
+ } else {
+ meta->copy = 0;
+ if (!xen_feature(XENFEAT_auto_translated_physmap)) {
@@ -58208,10 +59813,27 @@
+}
+
+
++static void tx_add_credit(netif_t *netif)
++{
++ unsigned long max_burst;
++
++ /*
++ * Allow a burst big enough to transmit a jumbo packet of up to 128kB.
++ * Otherwise the interface can seize up due to insufficient credit.
++ */
++ max_burst = RING_GET_REQUEST(&netif->tx, netif->tx.req_cons)->size;
++ max_burst = min(max_burst, 131072UL);
++ max_burst = max(max_burst, netif->credit_bytes);
++
++ netif->remaining_credit = min(netif->remaining_credit +
++ netif->credit_bytes,
++ max_burst);
++}
++
+static void tx_credit_callback(unsigned long data)
+{
+ netif_t *netif = (netif_t *)data;
-+ netif->remaining_credit = netif->credit_bytes;
++ tx_add_credit(netif);
+ netif_schedule_work(netif);
+}
+
@@ -58235,7 +59857,7 @@
+ gop = tx_unmap_ops;
+ while (dc != dp) {
+ pending_idx = dealloc_ring[MASK_PEND_IDX(dc++)];
-+ gnttab_set_unmap_op(gop, MMAP_VADDR(pending_idx),
++ gnttab_set_unmap_op(gop, idx_to_kaddr(pending_idx),
+ GNTMAP_host_map,
+ grant_tx_handle[pending_idx]);
+ gop++;
@@ -58273,20 +59895,28 @@
+ netif_put(netif);
+}
+
-+static int netbk_count_requests(netif_t *netif, netif_tx_request_t *txp,
-+ int work_to_do)
++static int netbk_count_requests(netif_t *netif, netif_tx_request_t *first,
++ netif_tx_request_t *txp, int work_to_do)
+{
-+ netif_tx_request_t *first = txp;
+ RING_IDX cons = netif->tx.req_cons;
+ int frags = 0;
+
-+ while (txp->flags & NETTXF_more_data) {
++ if (!(first->flags & NETTXF_more_data))
++ return 0;
++
++ do {
+ if (frags >= work_to_do) {
+ DPRINTK("Need more frags\n");
+ return -frags;
+ }
+
-+ txp = RING_GET_REQUEST(&netif->tx, cons + frags);
++ if (unlikely(frags >= MAX_SKB_FRAGS)) {
++ DPRINTK("Too many frags\n");
++ return -frags;
++ }
++
++ memcpy(txp, RING_GET_REQUEST(&netif->tx, cons + frags),
++ sizeof(*txp));
+ if (txp->size > first->size) {
+ DPRINTK("Frags galore\n");
+ return -frags;
@@ -58300,30 +59930,28 @@
+ txp->offset, txp->size);
+ return -frags;
+ }
-+ }
++ } while ((txp++)->flags & NETTXF_more_data);
+
+ return frags;
+}
+
+static gnttab_map_grant_ref_t *netbk_get_requests(netif_t *netif,
+ struct sk_buff *skb,
++ netif_tx_request_t *txp,
+ gnttab_map_grant_ref_t *mop)
+{
+ struct skb_shared_info *shinfo = skb_shinfo(skb);
+ skb_frag_t *frags = shinfo->frags;
-+ netif_tx_request_t *txp;
+ unsigned long pending_idx = *((u16 *)skb->data);
-+ RING_IDX cons = netif->tx.req_cons;
+ int i, start;
+
+ /* Skip first skb fragment if it is on same page as header fragment. */
+ start = ((unsigned long)shinfo->frags[0].page == pending_idx);
+
-+ for (i = start; i < shinfo->nr_frags; i++) {
-+ txp = RING_GET_REQUEST(&netif->tx, cons++);
++ for (i = start; i < shinfo->nr_frags; i++, txp++) {
+ pending_idx = pending_ring[MASK_PEND_IDX(pending_cons++)];
+
-+ gnttab_set_map_op(mop++, MMAP_VADDR(pending_idx),
++ gnttab_set_map_op(mop++, idx_to_kaddr(pending_idx),
+ GNTMAP_host_map | GNTMAP_readonly,
+ txp->gref, netif->domid);
+
@@ -58356,7 +59984,7 @@
+ netif_put(netif);
+ } else {
+ set_phys_to_machine(
-+ __pa(MMAP_VADDR(pending_idx)) >> PAGE_SHIFT,
++ __pa(idx_to_kaddr(pending_idx)) >> PAGE_SHIFT,
+ FOREIGN_FRAME(mop->dev_bus_addr >> PAGE_SHIFT));
+ grant_tx_handle[pending_idx] = mop->handle;
+ }
@@ -58373,7 +60001,7 @@
+ newerr = (++mop)->status;
+ if (likely(!newerr)) {
+ set_phys_to_machine(
-+ __pa(MMAP_VADDR(pending_idx))>>PAGE_SHIFT,
++ __pa(idx_to_kaddr(pending_idx))>>PAGE_SHIFT,
+ FOREIGN_FRAME(mop->dev_bus_addr>>PAGE_SHIFT));
+ grant_tx_handle[pending_idx] = mop->handle;
+ /* Had a previous error? Invalidate this fragment. */
@@ -58421,7 +60049,7 @@
+
+ pending_idx = (unsigned long)frag->page;
+ txp = &pending_tx_info[pending_idx].req;
-+ frag->page = virt_to_page(MMAP_VADDR(pending_idx));
++ frag->page = virt_to_page(idx_to_kaddr(pending_idx));
+ frag->size = txp->size;
+ frag->page_offset = txp->offset;
+
@@ -58434,7 +60062,7 @@
+int netbk_get_extras(netif_t *netif, struct netif_extra_info *extras,
+ int work_to_do)
+{
-+ struct netif_extra_info *extra;
++ struct netif_extra_info extra;
+ RING_IDX cons = netif->tx.req_cons;
+
+ do {
@@ -58443,18 +60071,18 @@
+ return -EBADR;
+ }
+
-+ extra = (struct netif_extra_info *)
-+ RING_GET_REQUEST(&netif->tx, cons);
-+ if (unlikely(!extra->type ||
-+ extra->type >= XEN_NETIF_EXTRA_TYPE_MAX)) {
++ memcpy(&extra, RING_GET_REQUEST(&netif->tx, cons),
++ sizeof(extra));
++ if (unlikely(!extra.type ||
++ extra.type >= XEN_NETIF_EXTRA_TYPE_MAX)) {
+ netif->tx.req_cons = ++cons;
-+ DPRINTK("Invalid extra type: %d\n", extra->type);
++ DPRINTK("Invalid extra type: %d\n", extra.type);
+ return -EINVAL;
+ }
+
-+ memcpy(&extras[extra->type - 1], extra, sizeof(*extra));
++ memcpy(&extras[extra.type - 1], &extra, sizeof(extra));
+ netif->tx.req_cons = ++cons;
-+ } while (extra->flags & XEN_NETIF_EXTRA_FLAG_MORE);
++ } while (extra.flags & XEN_NETIF_EXTRA_FLAG_MORE);
+
+ return work_to_do;
+}
@@ -58489,6 +60117,7 @@
+ struct sk_buff *skb;
+ netif_t *netif;
+ netif_tx_request_t txreq;
++ netif_tx_request_t txfrags[MAX_SKB_FRAGS];
+ struct netif_extra_info extras[XEN_NETIF_EXTRA_TYPE_MAX - 1];
+ u16 pending_idx;
+ RING_IDX i;
@@ -58517,6 +60146,7 @@
+ i = netif->tx.req_cons;
+ rmb(); /* Ensure that we see the request before we copy it. */
+ memcpy(&txreq, RING_GET_REQUEST(&netif->tx, i), sizeof(txreq));
++
+ /* Credit-based scheduling. */
+ if (txreq.size > netif->remaining_credit) {
+ unsigned long now = jiffies;
@@ -58525,25 +60155,27 @@
+ msecs_to_jiffies(netif->credit_usec / 1000);
+
+ /* Timer could already be pending in rare cases. */
-+ if (timer_pending(&netif->credit_timeout))
-+ break;
++ if (timer_pending(&netif->credit_timeout)) {
++ netif_put(netif);
++ continue;
++ }
+
+ /* Passed the point where we can replenish credit? */
+ if (time_after_eq(now, next_credit)) {
+ netif->credit_timeout.expires = now;
-+ netif->remaining_credit = netif->credit_bytes;
++ tx_add_credit(netif);
+ }
+
+ /* Still too big to send right now? Set a callback. */
+ if (txreq.size > netif->remaining_credit) {
-+ netif->remaining_credit = 0;
+ netif->credit_timeout.data =
+ (unsigned long)netif;
+ netif->credit_timeout.function =
+ tx_credit_callback;
+ __mod_timer(&netif->credit_timeout,
+ next_credit);
-+ break;
++ netif_put(netif);
++ continue;
+ }
+ }
+ netif->remaining_credit -= txreq.size;
@@ -58562,19 +60194,13 @@
+ }
+ }
+
-+ ret = netbk_count_requests(netif, &txreq, work_to_do);
++ ret = netbk_count_requests(netif, &txreq, txfrags, work_to_do);
+ if (unlikely(ret < 0)) {
+ netbk_tx_err(netif, &txreq, i - ret);
+ continue;
+ }
+ i += ret;
+
-+ if (unlikely(ret > MAX_SKB_FRAGS)) {
-+ DPRINTK("Too many frags\n");
-+ netbk_tx_err(netif, &txreq, i);
-+ continue;
-+ }
-+
+ if (unlikely(txreq.size < ETH_HLEN)) {
+ DPRINTK("Bad packet size: %d\n", txreq.size);
+ netbk_tx_err(netif, &txreq, i);
@@ -58617,7 +60243,7 @@
+ }
+ }
+
-+ gnttab_set_map_op(mop, MMAP_VADDR(pending_idx),
++ gnttab_set_map_op(mop, idx_to_kaddr(pending_idx),
+ GNTMAP_host_map | GNTMAP_readonly,
+ txreq.gref, netif->domid);
+ mop++;
@@ -58643,7 +60269,7 @@
+
+ pending_cons++;
+
-+ mop = netbk_get_requests(netif, skb, mop);
++ mop = netbk_get_requests(netif, skb, txfrags, mop);
+
+ netif->tx.req_cons = i;
+ netif_schedule_work(netif);
@@ -58676,8 +60302,8 @@
+ }
+
+ data_len = skb->len;
-+ memcpy(skb->data,
-+ (void *)(MMAP_VADDR(pending_idx)|txp->offset),
++ memcpy(skb->data,
++ (void *)(idx_to_kaddr(pending_idx)|txp->offset),
+ data_len);
+ if (data_len < txp->size) {
+ /* Append the packet payload as a fragment. */
@@ -58731,18 +60357,9 @@
+
+static void netif_page_release(struct page *page)
+{
-+ u16 pending_idx = page - virt_to_page(mmap_vstart);
-+
-+ /* Ready for next use. */
-+ init_page_count(page);
-+
-+ netif_idx_release(pending_idx);
-+}
-+
-+static void netif_rx_page_release(struct page *page)
-+{
+ /* Ready for next use. */
+ init_page_count(page);
++ netif_idx_release(page->index);
+}
+
+irqreturn_t netif_be_int(int irq, void *dev_id, struct pt_regs *regs)
@@ -58862,27 +60479,17 @@
+ init_timer(&net_timer);
+ net_timer.data = 0;
+ net_timer.function = net_alarm;
-+
-+ page = balloon_alloc_empty_page_range(MAX_PENDING_REQS);
-+ if (page == NULL)
-+ return -ENOMEM;
+
-+ mmap_vstart = (unsigned long)pfn_to_kaddr(page_to_pfn(page));
++ mmap_pages = alloc_empty_pages_and_pagevec(MAX_PENDING_REQS);
++ if (mmap_pages == NULL) {
++ printk("%s: out of memory\n", __FUNCTION__);
++ return -ENOMEM;
++ }
+
+ for (i = 0; i < MAX_PENDING_REQS; i++) {
-+ page = virt_to_page(MMAP_VADDR(i));
-+ init_page_count(page);
++ page = mmap_pages[i];
+ SetPageForeign(page, netif_page_release);
-+ }
-+
-+ page = balloon_alloc_empty_page_range(NET_RX_RING_SIZE);
-+ BUG_ON(page == NULL);
-+ rx_mmap_area = pfn_to_kaddr(page_to_pfn(page));
-+
-+ for (i = 0; i < NET_RX_RING_SIZE; i++) {
-+ page = virt_to_page(rx_mmap_area + (i * PAGE_SIZE));
-+ init_page_count(page);
-+ SetPageForeign(page, netif_rx_page_release);
++ page->index = i;
+ }
+
+ pending_cons = 0;
@@ -58911,10 +60518,10 @@
+module_init(netback_init);
+
+MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/netback/xenbus.c linux-2.6.18-xen/drivers/xen/netback/xenbus.c
---- linux-2.6.18/drivers/xen/netback/xenbus.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/netback/xenbus.c 2006-09-21 01:33:31.000000000 +0200
-@@ -0,0 +1,473 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/netback/xenbus.c linux-2.6.18-xen/drivers/xen/netback/xenbus.c
+--- linux-2.6.18.1/drivers/xen/netback/xenbus.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/netback/xenbus.c 2006-10-19 11:01:25.000000000 +0200
+@@ -0,0 +1,438 @@
+/* Xenbus code for netif backend
+ Copyright (C) 2005 Rusty Russell <rusty at rustcorp.com.au>
+ Copyright (C) 2005 XenSource Ltd
@@ -58945,29 +60552,20 @@
+ printk("netback/xenbus (%s:%d) " fmt ".\n", __FUNCTION__, __LINE__, ##args)
+#endif
+
-+struct backend_info
-+{
++struct backend_info {
+ struct xenbus_device *dev;
+ netif_t *netif;
-+ struct xenbus_watch backend_watch;
+ enum xenbus_state frontend_state;
+};
+
+static int connect_rings(struct backend_info *);
+static void connect(struct backend_info *);
-+static void maybe_connect(struct backend_info *);
-+static void backend_changed(struct xenbus_watch *, const char **,
-+ unsigned int);
++static void backend_create_netif(struct backend_info *be);
+
+static int netback_remove(struct xenbus_device *dev)
+{
+ struct backend_info *be = dev->dev.driver_data;
+
-+ if (be->backend_watch.node) {
-+ unregister_xenbus_watch(&be->backend_watch);
-+ kfree(be->backend_watch.node);
-+ be->backend_watch.node = NULL;
-+ }
+ if (be->netif) {
+ netif_disconnect(be->netif);
+ be->netif = NULL;
@@ -58980,8 +60578,7 @@
+
+/**
+ * Entry point to this code when a new device is created. Allocate the basic
-+ * structures, and watch the store waiting for the hotplug scripts to tell us
-+ * the device's handle. Switch to InitWait.
++ * structures and switch to InitWait.
+ */
+static int netback_probe(struct xenbus_device *dev,
+ const struct xenbus_device_id *id)
@@ -59000,11 +60597,6 @@
+ be->dev = dev;
+ dev->dev.driver_data = be;
+
-+ err = xenbus_watch_path2(dev, dev->nodename, "handle",
-+ &be->backend_watch, backend_changed);
-+ if (err)
-+ goto fail;
-+
+ do {
+ err = xenbus_transaction_start(&xbt);
+ if (err) {
@@ -59025,7 +60617,8 @@
+ goto abort_transaction;
+ }
+
-+ err = xenbus_printf(xbt, dev->nodename, "feature-rx-copy", "%d", 1);
++ err = xenbus_printf(xbt, dev->nodename,
++ "feature-rx-copy", "%d", 1);
+ if (err) {
+ message = "writing feature-copying";
+ goto abort_transaction;
@@ -59040,9 +60633,11 @@
+ }
+
+ err = xenbus_switch_state(dev, XenbusStateInitWait);
-+ if (err) {
++ if (err)
+ goto fail;
-+ }
++
++ /* This kicks hotplug scripts, so do it immediately. */
++ backend_create_netif(be);
+
+ return 0;
+
@@ -59092,48 +60687,30 @@
+}
+
+
-+/**
-+ * Callback received when the hotplug scripts have placed the handle node.
-+ * Read it, and create a netif structure. If the frontend is ready, connect.
-+ */
-+static void backend_changed(struct xenbus_watch *watch,
-+ const char **vec, unsigned int len)
++static void backend_create_netif(struct backend_info *be)
+{
+ int err;
+ long handle;
-+ struct backend_info *be
-+ = container_of(watch, struct backend_info, backend_watch);
+ struct xenbus_device *dev = be->dev;
+
-+ DPRINTK("");
++ if (be->netif != NULL)
++ return;
+
+ err = xenbus_scanf(XBT_NIL, dev->nodename, "handle", "%li", &handle);
-+ if (XENBUS_EXIST_ERR(err)) {
-+ /* Since this watch will fire once immediately after it is
-+ registered, we expect this. Ignore it, and wait for the
-+ hotplug scripts. */
-+ return;
-+ }
+ if (err != 1) {
+ xenbus_dev_fatal(dev, err, "reading handle");
+ return;
+ }
+
-+ if (be->netif == NULL) {
-+ u8 be_mac[ETH_ALEN] = { 0, 0, 0, 0, 0, 0 };
-+
-+ be->netif = netif_alloc(dev->otherend_id, handle, be_mac);
-+ if (IS_ERR(be->netif)) {
-+ err = PTR_ERR(be->netif);
-+ be->netif = NULL;
-+ xenbus_dev_fatal(dev, err, "creating interface");
-+ return;
-+ }
-+
-+ kobject_uevent(&dev->dev.kobj, KOBJ_ONLINE);
-+
-+ maybe_connect(be);
++ be->netif = netif_alloc(dev->otherend_id, handle);
++ if (IS_ERR(be->netif)) {
++ err = PTR_ERR(be->netif);
++ be->netif = NULL;
++ xenbus_dev_fatal(dev, err, "creating interface");
++ return;
+ }
++
++ kobject_uevent(&dev->dev.kobj, KOBJ_ONLINE);
+}
+
+
@@ -59166,11 +60743,9 @@
+ break;
+
+ case XenbusStateConnected:
-+ if (!be->netif) {
-+ /* reconnect: setup be->netif */
-+ backend_changed(&be->backend_watch, NULL, 0);
-+ }
-+ maybe_connect(be);
++ backend_create_netif(be);
++ if (be->netif)
++ connect(be);
+ break;
+
+ case XenbusStateClosing:
@@ -59196,15 +60771,6 @@
+}
+
+
-+/* ** Connection ** */
-+
-+
-+static void maybe_connect(struct backend_info *be)
-+{
-+ if (be->netif && (be->frontend_state == XenbusStateConnected))
-+ connect(be);
-+}
-+
+static void xen_net_read_rate(struct xenbus_device *dev,
+ unsigned long *bytes, unsigned long *usec)
+{
@@ -59283,6 +60849,10 @@
+ be->netif->remaining_credit = be->netif->credit_bytes;
+
+ xenbus_switch_state(dev, XenbusStateConnected);
++
++ /* May not get a kick from the frontend, so start the tx_queue now. */
++ if (!netbk_can_queue(be->netif->dev))
++ netif_start_queue(be->netif->dev);
+}
+
+
@@ -59320,14 +60890,16 @@
+ }
+ be->netif->copying_receiver = !!rx_copy;
+
-+ if (xenbus_scanf(XBT_NIL, dev->otherend, "feature-rx-notify", "%d",
-+ &val) < 0)
-+ val = 0;
-+ if (val)
-+ be->netif->can_queue = 1;
-+ else
-+ /* Must be non-zero for pfifo_fast to work. */
-+ be->netif->dev->tx_queue_len = 1;
++ if (be->netif->dev->tx_queue_len != 0) {
++ if (xenbus_scanf(XBT_NIL, dev->otherend,
++ "feature-rx-notify", "%d", &val) < 0)
++ val = 0;
++ if (val)
++ be->netif->can_queue = 1;
++ else
++ /* Must be non-zero for pfifo_fast to work. */
++ be->netif->dev->tx_queue_len = 1;
++ }
+
+ if (xenbus_scanf(XBT_NIL, dev->otherend, "feature-sg", "%d", &val) < 0)
+ val = 0;
@@ -59388,8 +60960,8 @@
+{
+ xenbus_register_backend(&netback);
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/netfront/Kconfig linux-2.6.18-xen/drivers/xen/netfront/Kconfig
---- linux-2.6.18/drivers/xen/netfront/Kconfig 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/netfront/Kconfig linux-2.6.18-xen/drivers/xen/netfront/Kconfig
+--- linux-2.6.18.1/drivers/xen/netfront/Kconfig 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/netfront/Kconfig 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,6 @@
+
@@ -59398,18 +60970,18 @@
+ depends on NETDEVICES && ARCH_XEN
+ help
+ Network driver for Xen
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/netfront/Makefile linux-2.6.18-xen/drivers/xen/netfront/Makefile
---- linux-2.6.18/drivers/xen/netfront/Makefile 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/netfront/Makefile linux-2.6.18-xen/drivers/xen/netfront/Makefile
+--- linux-2.6.18.1/drivers/xen/netfront/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/netfront/Makefile 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,4 @@
+
+obj-$(CONFIG_XEN_NETDEV_FRONTEND) := xennet.o
+
+xennet-objs := netfront.o
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/netfront/netfront.c linux-2.6.18-xen/drivers/xen/netfront/netfront.c
---- linux-2.6.18/drivers/xen/netfront/netfront.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/netfront/netfront.c 2006-09-21 01:33:31.000000000 +0200
-@@ -0,0 +1,2076 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/netfront/netfront.c linux-2.6.18-xen/drivers/xen/netfront/netfront.c
+--- linux-2.6.18.1/drivers/xen/netfront/netfront.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/netfront/netfront.c 2006-10-19 11:01:25.000000000 +0200
+@@ -0,0 +1,2138 @@
+/******************************************************************************
+ * Virtual network driver for conversing with remote driver backends.
+ *
@@ -59458,6 +61030,7 @@
+#include <linux/in.h>
+#include <linux/if_ether.h>
+#include <linux/io.h>
++#include <linux/moduleparam.h>
+#include <net/sock.h>
+#include <net/pkt_sched.h>
+#include <net/arp.h>
@@ -59475,20 +61048,64 @@
+#include <xen/interface/grant_table.h>
+#include <xen/gnttab.h>
+
++/*
++ * Mutually-exclusive module options to select receive data path:
++ * rx_copy : Packets are copied by network backend into local memory
++ * rx_flip : Page containing packet data is transferred to our ownership
++ * For fully-virtualised guests there is no option - copying must be used.
++ * For paravirtualised guests, flipping is the default.
++ */
++#ifdef CONFIG_XEN
++static int MODPARM_rx_copy = 0;
++module_param_named(rx_copy, MODPARM_rx_copy, bool, 0);
++MODULE_PARM_DESC(rx_copy, "Copy packets from network card (rather than flip)");
++static int MODPARM_rx_flip = 0;
++module_param_named(rx_flip, MODPARM_rx_flip, bool, 0);
++MODULE_PARM_DESC(rx_flip, "Flip packets from network card (rather than copy)");
++#else
++static const int MODPARM_rx_copy = 1;
++static const int MODPARM_rx_flip = 0;
++#endif
++
+#define RX_COPY_THRESHOLD 256
+
+/* If we don't have GSO, fake things up so that we never try to use it. */
-+#ifndef NETIF_F_GSO
-+#define netif_needs_gso(dev, skb) 0
-+#define dev_disable_gso_features(dev) ((void)0)
-+#else
++#if defined(NETIF_F_GSO)
+#define HAVE_GSO 1
++#define HAVE_TSO 1 /* TSO is a subset of GSO */
+static inline void dev_disable_gso_features(struct net_device *dev)
+{
+ /* Turn off all GSO bits except ROBUST. */
+ dev->features &= (1 << NETIF_F_GSO_SHIFT) - 1;
+ dev->features |= NETIF_F_GSO_ROBUST;
+}
++#elif defined(NETIF_F_TSO)
++#define HAVE_TSO 1
++#define gso_size tso_size
++#define gso_segs tso_segs
++static inline void dev_disable_gso_features(struct net_device *dev)
++{
++ /* Turn off all TSO bits. */
++ dev->features &= ~NETIF_F_TSO;
++}
++static inline int skb_is_gso(const struct sk_buff *skb)
++{
++ return skb_shinfo(skb)->tso_size;
++}
++static inline int skb_gso_ok(struct sk_buff *skb, int features)
++{
++ return (features & NETIF_F_TSO);
++}
++
++static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb)
++{
++ return skb_is_gso(skb) &&
++ (!skb_gso_ok(skb, dev->features) ||
++ unlikely(skb->ip_summed != CHECKSUM_HW));
++}
++#else
++#define netif_needs_gso(dev, skb) 0
++#define dev_disable_gso_features(dev) ((void)0)
+#endif
+
+#define GRANT_INVALID_REF 0
@@ -59508,7 +61125,6 @@
+ spinlock_t tx_lock;
+ spinlock_t rx_lock;
+
-+ unsigned int handle;
+ unsigned int evtchn, irq;
+ unsigned int copying_receiver;
+
@@ -59532,7 +61148,7 @@
+ grant_ref_t gref_tx_head;
+ grant_ref_t grant_tx_ref[NET_TX_RING_SIZE + 1];
+ grant_ref_t gref_rx_head;
-+ grant_ref_t grant_rx_ref[NET_TX_RING_SIZE];
++ grant_ref_t grant_rx_ref[NET_RX_RING_SIZE];
+
+ struct xenbus_device *xbdev;
+ int tx_ring_ref;
@@ -59597,9 +61213,8 @@
+#define WPRINTK(fmt, args...) \
+ printk(KERN_WARNING "netfront: " fmt, ##args)
+
-+static int talk_to_backend(struct xenbus_device *, struct netfront_info *);
+static int setup_device(struct xenbus_device *, struct netfront_info *);
-+static struct net_device *create_netdev(int, int, struct xenbus_device *);
++static struct net_device *create_netdev(struct xenbus_device *);
+
+static void netfront_closing(struct xenbus_device *);
+
@@ -59609,7 +61224,7 @@
+static void close_netdev(struct netfront_info *);
+static void netif_free(struct netfront_info *);
+
-+static void network_connect(struct net_device *);
++static int network_connect(struct net_device *);
+static void network_tx_buf_gc(struct net_device *);
+static void network_alloc_rx_buffers(struct net_device *);
+static int send_fake_arp(struct net_device *);
@@ -59632,8 +61247,7 @@
+/**
+ * Entry point to this code when a new device is created. Allocate the basic
+ * structures and the ring buffers for communication with the backend, and
-+ * inform the backend of the appropriate details for those. Switch to
-+ * Connected state.
++ * inform the backend of the appropriate details for those.
+ */
+static int __devinit netfront_probe(struct xenbus_device *dev,
+ const struct xenbus_device_id *id)
@@ -59641,31 +61255,8 @@
+ int err;
+ struct net_device *netdev;
+ struct netfront_info *info;
-+ unsigned int handle;
-+ unsigned feature_rx_copy;
-+
-+ err = xenbus_scanf(XBT_NIL, dev->nodename, "handle", "%u", &handle);
-+ if (err != 1) {
-+ xenbus_dev_fatal(dev, err, "reading handle");
-+ return err;
-+ }
-+
-+#ifndef CONFIG_XEN
-+ err = xenbus_scanf(XBT_NIL, dev->otherend, "feature-rx-copy", "%u",
-+ &feature_rx_copy);
-+ if (err != 1) {
-+ xenbus_dev_fatal(dev, err, "reading feature-rx-copy");
-+ return err;
-+ }
-+ if (!feature_rx_copy) {
-+ xenbus_dev_fatal(dev, 0, "need a copy-capable backend");
-+ return -EINVAL;
-+ }
-+#else
-+ feature_rx_copy = 0;
-+#endif
+
-+ netdev = create_netdev(handle, feature_rx_copy, dev);
++ netdev = create_netdev(dev);
+ if (IS_ERR(netdev)) {
+ err = PTR_ERR(netdev);
+ xenbus_dev_fatal(dev, err, "creating netdev");
@@ -59675,20 +61266,13 @@
+ info = netdev_priv(netdev);
+ dev->dev.driver_data = info;
+
-+ err = talk_to_backend(dev, info);
-+ if (err)
-+ goto fail_backend;
-+
+ err = open_netdev(info);
+ if (err)
-+ goto fail_open;
++ goto fail;
+
+ return 0;
+
-+ fail_open:
-+ xennet_sysfs_delif(info->netdev);
-+ unregister_netdev(netdev);
-+ fail_backend:
++ fail:
+ free_netdev(netdev);
+ dev->dev.driver_data = NULL;
+ return err;
@@ -59708,7 +61292,7 @@
+ DPRINTK("%s\n", dev->nodename);
+
+ netif_disconnect_backend(info);
-+ return talk_to_backend(dev, info);
++ return 0;
+}
+
+static int xen_net_read_mac(struct xenbus_device *dev, u8 mac[])
@@ -59797,7 +61381,7 @@
+ goto abort_transaction;
+ }
+
-+#ifdef HAVE_GSO
++#ifdef HAVE_TSO
+ err = xenbus_printf(xbt, dev->nodename, "feature-gso-tcpv4", "%d", 1);
+ if (err) {
+ message = "writing feature-gso-tcpv4";
@@ -59819,7 +61403,7 @@
+ xenbus_transaction_end(xbt, 1);
+ xenbus_dev_fatal(dev, err, "%s", message);
+ destroy_ring:
-+ netif_free(info);
++ netif_disconnect_backend(info);
+ out:
+ return err;
+}
@@ -59909,7 +61493,10 @@
+ break;
+
+ case XenbusStateInitWait:
-+ network_connect(netdev);
++ if (network_connect(netdev) != 0) {
++ netif_free(np);
++ break;
++ }
+ xenbus_switch_state(dev, XenbusStateConnected);
+ (void)send_fake_arp(netdev);
+ break;
@@ -60154,7 +61741,7 @@
+ } else {
+ gnttab_grant_foreign_access_ref(ref,
+ np->xbdev->otherend_id,
-+ pfn,
++ pfn_to_mfn(pfn),
+ 0);
+ }
+
@@ -60329,7 +61916,7 @@
+ tx->flags |= NETTXF_data_validated;
+#endif
+
-+#ifdef HAVE_GSO
++#ifdef HAVE_TSO
+ if (skb_is_gso(skb)) {
+ struct netif_extra_info *gso = (struct netif_extra_info *)
+ RING_GET_REQUEST(&np->tx, ++i);
@@ -60483,6 +62070,7 @@
+ if (net_ratelimit())
+ WPRINTK("rx->offset: %x, size: %u\n",
+ rx->offset, rx->status);
++ xennet_move_rx_slot(np, skb, ref);
+ err = -EINVAL;
+ goto next;
+ }
@@ -60493,7 +62081,8 @@
+ * situation to the system controller to reboot the backed.
+ */
+ if (ref == GRANT_INVALID_REF) {
-+ WPRINTK("Bad rx response id %d.\n", rx->id);
++ if (net_ratelimit())
++ WPRINTK("Bad rx response id %d.\n", rx->id);
+ err = -EINVAL;
+ goto next;
+ }
@@ -60565,6 +62154,9 @@
+ err = -E2BIG;
+ }
+
++ if (unlikely(err))
++ np->rx.rsp_cons = cons + frags;
++
+ *pages_flipped_p = pages_flipped;
+
+ return err;
@@ -60617,12 +62209,14 @@
+ return -EINVAL;
+ }
+
-+#ifdef HAVE_GSO
++#ifdef HAVE_TSO
+ skb_shinfo(skb)->gso_size = gso->u.gso.size;
++#ifdef HAVE_GSO
+ skb_shinfo(skb)->gso_type = SKB_GSO_TCPV4;
+
+ /* Header must be checked, and gso_segs computed. */
+ skb_shinfo(skb)->gso_type |= SKB_GSO_DODGY;
++#endif
+ skb_shinfo(skb)->gso_segs = 0;
+
+ return 0;
@@ -60667,9 +62261,9 @@
+ rp = np->rx.sring->rsp_prod;
+ rmb(); /* Ensure we see queued responses up to 'rp'. */
+
-+ for (i = np->rx.rsp_cons, work_done = 0;
-+ (i != rp) && (work_done < budget);
-+ np->rx.rsp_cons = ++i, work_done++) {
++ i = np->rx.rsp_cons;
++ work_done = 0;
++ while ((i != rp) && (work_done < budget)) {
+ memcpy(rx, RING_GET_RESPONSE(&np->rx, i), sizeof(*rx));
+ memset(extras, 0, sizeof(extras));
+
@@ -60677,12 +62271,11 @@
+ &pages_flipped);
+
+ if (unlikely(err)) {
-+err:
-+ i = np->rx.rsp_cons + skb_queue_len(&tmpq) - 1;
-+ work_done--;
++err:
+ while ((skb = __skb_dequeue(&tmpq)))
+ __skb_queue_tail(&errq, skb);
+ np->stats.rx_errors++;
++ i = np->rx.rsp_cons;
+ continue;
+ }
+
@@ -60694,6 +62287,7 @@
+
+ if (unlikely(xennet_set_skb_gso(skb, gso))) {
+ __skb_queue_head(&tmpq, skb);
++ np->rx.rsp_cons += skb_queue_len(&tmpq);
+ goto err;
+ }
+ }
@@ -60757,6 +62351,9 @@
+ np->stats.rx_bytes += skb->len;
+
+ __skb_queue_tail(&rxq, skb);
++
++ np->rx.rsp_cons = ++i;
++ work_done++;
+ }
+
+ if (pages_flipped) {
@@ -60973,7 +62570,7 @@
+
+static int xennet_set_tso(struct net_device *dev, u32 data)
+{
-+#ifdef HAVE_GSO
++#ifdef HAVE_TSO
+ if (data) {
+ struct netfront_info *np = netdev_priv(dev);
+ int val;
@@ -61004,16 +62601,41 @@
+ xennet_set_tso(dev, 1);
+}
+
-+static void network_connect(struct net_device *dev)
++static int network_connect(struct net_device *dev)
+{
+ struct netfront_info *np = netdev_priv(dev);
-+ int i, requeue_idx;
++ int i, requeue_idx, err;
+ struct sk_buff *skb;
+ grant_ref_t ref;
+ netif_rx_request_t *req;
++ unsigned int feature_rx_copy, feature_rx_flip;
++
++ err = xenbus_scanf(XBT_NIL, np->xbdev->otherend,
++ "feature-rx-copy", "%u", &feature_rx_copy);
++ if (err != 1)
++ feature_rx_copy = 0;
++ err = xenbus_scanf(XBT_NIL, np->xbdev->otherend,
++ "feature-rx-flip", "%u", &feature_rx_flip);
++ if (err != 1)
++ feature_rx_flip = 1;
++
++ /*
++ * Copy packets on receive path if:
++ * (a) This was requested by user, and the backend supports it; or
++ * (b) Flipping was requested, but this is unsupported by the backend.
++ */
++ np->copying_receiver = ((MODPARM_rx_copy && feature_rx_copy) ||
++ (MODPARM_rx_flip && !feature_rx_flip));
++
++ err = talk_to_backend(np->xbdev, np);
++ if (err)
++ return err;
+
+ xennet_set_features(dev);
+
++ IPRINTK("device %s has %sing receive path.\n",
++ dev->name, np->copying_receiver ? "copy" : "flipp");
++
+ spin_lock_irq(&np->tx_lock);
+ spin_lock(&np->rx_lock);
+
@@ -61044,7 +62666,8 @@
+ } else {
+ gnttab_grant_foreign_access_ref(
+ ref, np->xbdev->otherend_id,
-+ page_to_pfn(skb_shinfo(skb)->frags->page),
++ pfn_to_mfn(page_to_pfn(skb_shinfo(skb)->
++ frags->page)),
+ 0);
+ }
+ req->gref = ref;
@@ -61068,6 +62691,8 @@
+
+ spin_unlock(&np->rx_lock);
+ spin_unlock_irq(&np->tx_lock);
++
++ return 0;
+}
+
+static void netif_uninit(struct net_device *dev)
@@ -61233,8 +62858,7 @@
+{
+}
+
-+static struct net_device * __devinit
-+create_netdev(int handle, int copying_receiver, struct xenbus_device *dev)
++static struct net_device * __devinit create_netdev(struct xenbus_device *dev)
+{
+ int i, err = 0;
+ struct net_device *netdev = NULL;
@@ -61248,9 +62872,7 @@
+ }
+
+ np = netdev_priv(netdev);
-+ np->handle = handle;
+ np->xbdev = dev;
-+ np->copying_receiver = copying_receiver;
+
+ netif_carrier_off(netdev);
+
@@ -61381,10 +63003,12 @@
+
+ err = xennet_sysfs_addif(info->netdev);
+ if (err) {
-+ /* This can be non-fatal: it only means no tuning parameters */
++ unregister_netdev(info->netdev);
+ printk(KERN_WARNING "%s: add sysfs failed err=%d\n",
+ __FUNCTION__, err);
++ return err;
+ }
++
+ return 0;
+}
+
@@ -61465,6 +63089,16 @@
+ if (!is_running_on_xen())
+ return -ENODEV;
+
++#ifdef CONFIG_XEN
++ if (MODPARM_rx_flip && MODPARM_rx_copy) {
++ WPRINTK("Cannot specify both rx_copy and rx_flip.\n");
++ return -EINVAL;
++ }
++
++ if (!MODPARM_rx_flip && !MODPARM_rx_copy)
++ MODPARM_rx_flip = 1; /* Default is to flip. */
++#endif
++
+ if (is_initial_xendomain())
+ return 0;
+
@@ -61486,8 +63120,8 @@
+module_exit(netif_exit);
+
+MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/conf_space.c linux-2.6.18-xen/drivers/xen/pciback/conf_space.c
---- linux-2.6.18/drivers/xen/pciback/conf_space.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/pciback/conf_space.c linux-2.6.18-xen/drivers/xen/pciback/conf_space.c
+--- linux-2.6.18.1/drivers/xen/pciback/conf_space.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/pciback/conf_space.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,425 @@
+/*
@@ -61915,8 +63549,8 @@
+{
+ return pciback_config_capability_init();
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/conf_space_capability.c linux-2.6.18-xen/drivers/xen/pciback/conf_space_capability.c
---- linux-2.6.18/drivers/xen/pciback/conf_space_capability.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/pciback/conf_space_capability.c linux-2.6.18-xen/drivers/xen/pciback/conf_space_capability.c
+--- linux-2.6.18.1/drivers/xen/pciback/conf_space_capability.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/pciback/conf_space_capability.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,71 @@
+/*
@@ -61990,8 +63624,8 @@
+
+ return 0;
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/conf_space_capability.h linux-2.6.18-xen/drivers/xen/pciback/conf_space_capability.h
---- linux-2.6.18/drivers/xen/pciback/conf_space_capability.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/pciback/conf_space_capability.h linux-2.6.18-xen/drivers/xen/pciback/conf_space_capability.h
+--- linux-2.6.18.1/drivers/xen/pciback/conf_space_capability.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/pciback/conf_space_capability.h 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,23 @@
+/*
@@ -62017,8 +63651,8 @@
+};
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/conf_space_capability_pm.c linux-2.6.18-xen/drivers/xen/pciback/conf_space_capability_pm.c
---- linux-2.6.18/drivers/xen/pciback/conf_space_capability_pm.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/pciback/conf_space_capability_pm.c linux-2.6.18-xen/drivers/xen/pciback/conf_space_capability_pm.c
+--- linux-2.6.18.1/drivers/xen/pciback/conf_space_capability_pm.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/pciback/conf_space_capability_pm.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,113 @@
+/*
@@ -62134,8 +63768,8 @@
+ .capability = PCI_CAP_ID_PM,
+ .fields = caplist_pm,
+};
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/conf_space_capability_vpd.c linux-2.6.18-xen/drivers/xen/pciback/conf_space_capability_vpd.c
---- linux-2.6.18/drivers/xen/pciback/conf_space_capability_vpd.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/pciback/conf_space_capability_vpd.c linux-2.6.18-xen/drivers/xen/pciback/conf_space_capability_vpd.c
+--- linux-2.6.18.1/drivers/xen/pciback/conf_space_capability_vpd.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/pciback/conf_space_capability_vpd.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,42 @@
+/*
@@ -62180,8 +63814,8 @@
+ .capability = PCI_CAP_ID_VPD,
+ .fields = caplist_vpd,
+};
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/conf_space.h linux-2.6.18-xen/drivers/xen/pciback/conf_space.h
---- linux-2.6.18/drivers/xen/pciback/conf_space.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/pciback/conf_space.h linux-2.6.18-xen/drivers/xen/pciback/conf_space.h
+--- linux-2.6.18.1/drivers/xen/pciback/conf_space.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/pciback/conf_space.h 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,126 @@
+/*
@@ -62310,8 +63944,8 @@
+int pciback_config_capability_add_fields(struct pci_dev *dev);
+
+#endif /* __XEN_PCIBACK_CONF_SPACE_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/conf_space_header.c linux-2.6.18-xen/drivers/xen/pciback/conf_space_header.c
---- linux-2.6.18/drivers/xen/pciback/conf_space_header.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/pciback/conf_space_header.c linux-2.6.18-xen/drivers/xen/pciback/conf_space_header.c
+--- linux-2.6.18.1/drivers/xen/pciback/conf_space_header.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/pciback/conf_space_header.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,299 @@
+/*
@@ -62613,8 +64247,8 @@
+ out:
+ return err;
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/conf_space_quirks.c linux-2.6.18-xen/drivers/xen/pciback/conf_space_quirks.c
---- linux-2.6.18/drivers/xen/pciback/conf_space_quirks.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/pciback/conf_space_quirks.c linux-2.6.18-xen/drivers/xen/pciback/conf_space_quirks.c
+--- linux-2.6.18.1/drivers/xen/pciback/conf_space_quirks.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/pciback/conf_space_quirks.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,128 @@
+/*
@@ -62745,8 +64379,8 @@
+ out:
+ return ret;
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/conf_space_quirks.h linux-2.6.18-xen/drivers/xen/pciback/conf_space_quirks.h
---- linux-2.6.18/drivers/xen/pciback/conf_space_quirks.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/pciback/conf_space_quirks.h linux-2.6.18-xen/drivers/xen/pciback/conf_space_quirks.h
+--- linux-2.6.18.1/drivers/xen/pciback/conf_space_quirks.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/pciback/conf_space_quirks.h 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,35 @@
+/*
@@ -62784,8 +64418,8 @@
+int pciback_field_is_dup(struct pci_dev *dev, int reg);
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/Makefile linux-2.6.18-xen/drivers/xen/pciback/Makefile
---- linux-2.6.18/drivers/xen/pciback/Makefile 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/pciback/Makefile linux-2.6.18-xen/drivers/xen/pciback/Makefile
+--- linux-2.6.18.1/drivers/xen/pciback/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/pciback/Makefile 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,15 @@
+obj-$(CONFIG_XEN_PCIDEV_BACKEND) += pciback.o
@@ -62803,8 +64437,8 @@
+ifeq ($(CONFIG_XEN_PCIDEV_BE_DEBUG),y)
+EXTRA_CFLAGS += -DDEBUG
+endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/passthrough.c linux-2.6.18-xen/drivers/xen/pciback/passthrough.c
---- linux-2.6.18/drivers/xen/pciback/passthrough.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/pciback/passthrough.c linux-2.6.18-xen/drivers/xen/pciback/passthrough.c
+--- linux-2.6.18.1/drivers/xen/pciback/passthrough.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/pciback/passthrough.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,157 @@
+/*
@@ -62964,8 +64598,8 @@
+ kfree(dev_data);
+ pdev->pci_dev_data = NULL;
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/pciback.h linux-2.6.18-xen/drivers/xen/pciback/pciback.h
---- linux-2.6.18/drivers/xen/pciback/pciback.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/pciback/pciback.h linux-2.6.18-xen/drivers/xen/pciback/pciback.h
+--- linux-2.6.18.1/drivers/xen/pciback/pciback.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/pciback/pciback.h 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,93 @@
+/*
@@ -63061,8 +64695,8 @@
+
+extern int verbose_request;
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/pciback_ops.c linux-2.6.18-xen/drivers/xen/pciback/pciback_ops.c
---- linux-2.6.18/drivers/xen/pciback/pciback_ops.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/pciback/pciback_ops.c linux-2.6.18-xen/drivers/xen/pciback/pciback_ops.c
+--- linux-2.6.18.1/drivers/xen/pciback/pciback_ops.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/pciback/pciback_ops.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,95 @@
+/*
@@ -63160,8 +64794,8 @@
+
+ return IRQ_HANDLED;
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/pci_stub.c linux-2.6.18-xen/drivers/xen/pciback/pci_stub.c
---- linux-2.6.18/drivers/xen/pciback/pci_stub.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/pciback/pci_stub.c linux-2.6.18-xen/drivers/xen/pciback/pci_stub.c
+--- linux-2.6.18.1/drivers/xen/pciback/pci_stub.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/pciback/pci_stub.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,916 @@
+/*
@@ -64080,8 +65714,8 @@
+module_exit(pciback_cleanup);
+
+MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/slot.c linux-2.6.18-xen/drivers/xen/pciback/slot.c
---- linux-2.6.18/drivers/xen/pciback/slot.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/pciback/slot.c linux-2.6.18-xen/drivers/xen/pciback/slot.c
+--- linux-2.6.18.1/drivers/xen/pciback/slot.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/pciback/slot.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,151 @@
+/*
@@ -64235,8 +65869,8 @@
+ kfree(slot_dev);
+ pdev->pci_dev_data = NULL;
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/vpci.c linux-2.6.18-xen/drivers/xen/pciback/vpci.c
---- linux-2.6.18/drivers/xen/pciback/vpci.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/pciback/vpci.c linux-2.6.18-xen/drivers/xen/pciback/vpci.c
+--- linux-2.6.18.1/drivers/xen/pciback/vpci.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/pciback/vpci.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,204 @@
+/*
@@ -64443,8 +66077,8 @@
+ kfree(vpci_dev);
+ pdev->pci_dev_data = NULL;
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/xenbus.c linux-2.6.18-xen/drivers/xen/pciback/xenbus.c
---- linux-2.6.18/drivers/xen/pciback/xenbus.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/pciback/xenbus.c linux-2.6.18-xen/drivers/xen/pciback/xenbus.c
+--- linux-2.6.18.1/drivers/xen/pciback/xenbus.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/pciback/xenbus.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,458 @@
+/*
@@ -64905,8 +66539,8 @@
+{
+ xenbus_unregister_driver(&xenbus_pciback_driver);
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pcifront/Makefile linux-2.6.18-xen/drivers/xen/pcifront/Makefile
---- linux-2.6.18/drivers/xen/pcifront/Makefile 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/pcifront/Makefile linux-2.6.18-xen/drivers/xen/pcifront/Makefile
+--- linux-2.6.18.1/drivers/xen/pcifront/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/pcifront/Makefile 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,7 @@
+obj-y += pcifront.o
@@ -64916,8 +66550,8 @@
+ifeq ($(CONFIG_XEN_PCIDEV_FE_DEBUG),y)
+EXTRA_CFLAGS += -DDEBUG
+endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pcifront/pci.c linux-2.6.18-xen/drivers/xen/pcifront/pci.c
---- linux-2.6.18/drivers/xen/pcifront/pci.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/pcifront/pci.c linux-2.6.18-xen/drivers/xen/pcifront/pci.c
+--- linux-2.6.18.1/drivers/xen/pcifront/pci.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/pcifront/pci.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,46 @@
+/*
@@ -64966,8 +66600,8 @@
+
+ spin_unlock(&pcifront_dev_lock);
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pcifront/pcifront.h linux-2.6.18-xen/drivers/xen/pcifront/pcifront.h
---- linux-2.6.18/drivers/xen/pcifront/pcifront.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/pcifront/pcifront.h linux-2.6.18-xen/drivers/xen/pcifront/pcifront.h
+--- linux-2.6.18.1/drivers/xen/pcifront/pcifront.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/pcifront/pcifront.h 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,40 @@
+/*
@@ -65010,8 +66644,8 @@
+void pcifront_free_roots(struct pcifront_device *pdev);
+
+#endif /* __XEN_PCIFRONT_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pcifront/pci_op.c linux-2.6.18-xen/drivers/xen/pcifront/pci_op.c
---- linux-2.6.18/drivers/xen/pcifront/pci_op.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/pcifront/pci_op.c linux-2.6.18-xen/drivers/xen/pcifront/pci_op.c
+--- linux-2.6.18.1/drivers/xen/pcifront/pci_op.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/pcifront/pci_op.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,273 @@
+/*
@@ -65287,8 +66921,8 @@
+ kfree(bus_entry);
+ }
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pcifront/xenbus.c linux-2.6.18-xen/drivers/xen/pcifront/xenbus.c
---- linux-2.6.18/drivers/xen/pcifront/xenbus.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/pcifront/xenbus.c linux-2.6.18-xen/drivers/xen/pcifront/xenbus.c
+--- linux-2.6.18.1/drivers/xen/pcifront/xenbus.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/pcifront/xenbus.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,295 @@
+/*
@@ -65586,16 +67220,16 @@
+
+/* Initialize after the Xen PCI Frontend Stub is initialized */
+subsys_initcall(pcifront_init);
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/privcmd/Makefile linux-2.6.18-xen/drivers/xen/privcmd/Makefile
---- linux-2.6.18/drivers/xen/privcmd/Makefile 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/privcmd/Makefile linux-2.6.18-xen/drivers/xen/privcmd/Makefile
+--- linux-2.6.18.1/drivers/xen/privcmd/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/privcmd/Makefile 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,2 @@
+
+obj-$(CONFIG_XEN_PRIVCMD) := privcmd.o
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/privcmd/privcmd.c linux-2.6.18-xen/drivers/xen/privcmd/privcmd.c
---- linux-2.6.18/drivers/xen/privcmd/privcmd.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/privcmd/privcmd.c 2006-09-04 16:31:13.000000000 +0200
-@@ -0,0 +1,266 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/privcmd/privcmd.c linux-2.6.18-xen/drivers/xen/privcmd/privcmd.c
+--- linux-2.6.18.1/drivers/xen/privcmd/privcmd.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/privcmd/privcmd.c 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,283 @@
+/******************************************************************************
+ * privcmd.c
+ *
@@ -65632,6 +67266,10 @@
+static struct proc_dir_entry *privcmd_intf;
+static struct proc_dir_entry *capabilities_intf;
+
++#ifndef HAVE_ARCH_PRIVCMD_MMAP
++static int privcmd_enforce_singleshot_mapping(struct vm_area_struct *vma);
++#endif
++
+static int privcmd_ioctl(struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long data)
+{
@@ -65680,27 +67318,18 @@
+ : "r8", "r10", "memory" );
+ }
+#elif defined (__ia64__)
-+ __asm__ __volatile__ (
-+ ";; mov r14=%2; mov r15=%3; "
-+ "mov r16=%4; mov r17=%5; mov r18=%6;"
-+ "mov r2=%1; break 0x1000;; mov %0=r8 ;;"
-+ : "=r" (ret)
-+ : "r" (hypercall.op),
-+ "r" (hypercall.arg[0]),
-+ "r" (hypercall.arg[1]),
-+ "r" (hypercall.arg[2]),
-+ "r" (hypercall.arg[3]),
-+ "r" (hypercall.arg[4])
-+ : "r14","r15","r16","r17","r18","r2","r8","memory");
++ ret = privcmd_hypercall(&hypercall);
+#endif
+ }
+ break;
+
+ case IOCTL_PRIVCMD_MMAP: {
-+#define PRIVCMD_MMAP_SZ 32
+ privcmd_mmap_t mmapcmd;
-+ privcmd_mmap_entry_t msg[PRIVCMD_MMAP_SZ];
++ privcmd_mmap_entry_t msg;
+ privcmd_mmap_entry_t __user *p;
++ struct mm_struct *mm = current->mm;
++ struct vm_area_struct *vma;
++ unsigned long va;
+ int i, rc;
+
+ if (!is_initial_xendomain())
@@ -65710,47 +67339,60 @@
+ return -EFAULT;
+
+ p = mmapcmd.entry;
++ if (copy_from_user(&msg, p, sizeof(msg)))
++ return -EFAULT;
+
-+ for (i = 0; i < mmapcmd.num;
-+ i += PRIVCMD_MMAP_SZ, p += PRIVCMD_MMAP_SZ) {
-+ int j, n = ((mmapcmd.num-i)>PRIVCMD_MMAP_SZ)?
-+ PRIVCMD_MMAP_SZ:(mmapcmd.num-i);
++ down_read(&mm->mmap_sem);
+
-+ if (copy_from_user(&msg, p,
-+ n*sizeof(privcmd_mmap_entry_t)))
-+ return -EFAULT;
-+
-+ for (j = 0; j < n; j++) {
-+ struct vm_area_struct *vma =
-+ find_vma( current->mm, msg[j].va );
-+
-+ if (!vma)
-+ return -EINVAL;
-+
-+ if (msg[j].va > PAGE_OFFSET)
-+ return -EINVAL;
-+
-+ if ((msg[j].va + (msg[j].npages << PAGE_SHIFT))
-+ > vma->vm_end )
-+ return -EINVAL;
-+
-+ if ((rc = direct_remap_pfn_range(
-+ vma,
-+ msg[j].va&PAGE_MASK,
-+ msg[j].mfn,
-+ msg[j].npages<<PAGE_SHIFT,
-+ vma->vm_page_prot,
-+ mmapcmd.dom)) < 0)
-+ return rc;
-+ }
++ vma = find_vma(mm, msg.va);
++ rc = -EINVAL;
++ if (!vma || (msg.va != vma->vm_start) ||
++ !privcmd_enforce_singleshot_mapping(vma))
++ goto mmap_out;
++
++ va = vma->vm_start;
++
++ for (i = 0; i < mmapcmd.num; i++) {
++ rc = -EFAULT;
++ if (copy_from_user(&msg, p, sizeof(msg)))
++ goto mmap_out;
++
++ /* Do not allow range to wrap the address space. */
++ rc = -EINVAL;
++ if ((msg.npages > (LONG_MAX >> PAGE_SHIFT)) ||
++ ((unsigned long)(msg.npages << PAGE_SHIFT) >= -va))
++ goto mmap_out;
++
++ /* Range chunks must be contiguous in va space. */
++ if ((msg.va != va) ||
++ ((msg.va+(msg.npages<<PAGE_SHIFT)) > vma->vm_end))
++ goto mmap_out;
++
++ if ((rc = direct_remap_pfn_range(
++ vma,
++ msg.va & PAGE_MASK,
++ msg.mfn,
++ msg.npages << PAGE_SHIFT,
++ vma->vm_page_prot,
++ mmapcmd.dom)) < 0)
++ goto mmap_out;
++
++ p++;
++ va += msg.npages << PAGE_SHIFT;
+ }
-+ ret = 0;
++
++ rc = 0;
++
++ mmap_out:
++ up_read(&mm->mmap_sem);
++ ret = rc;
+ }
+ break;
+
+ case IOCTL_PRIVCMD_MMAPBATCH: {
+ privcmd_mmapbatch_t m;
-+ struct vm_area_struct *vma = NULL;
++ struct mm_struct *mm = current->mm;
++ struct vm_area_struct *vma;
+ xen_pfn_t __user *p;
+ unsigned long addr, mfn;
+ int i;
@@ -65758,37 +67400,31 @@
+ if (!is_initial_xendomain())
+ return -EPERM;
+
-+ if (copy_from_user(&m, udata, sizeof(m))) {
-+ ret = -EFAULT;
-+ goto batch_err;
-+ }
-+
-+ if (m.dom == DOMID_SELF) {
-+ ret = -EINVAL;
-+ goto batch_err;
-+ }
++ if (copy_from_user(&m, udata, sizeof(m)))
++ return -EFAULT;
+
-+ vma = find_vma(current->mm, m.addr);
-+ if (!vma) {
-+ ret = -EINVAL;
-+ goto batch_err;
-+ }
++ if ((m.num <= 0) || (m.num > (LONG_MAX >> PAGE_SHIFT)))
++ return -EINVAL;
+
-+ if (m.addr > PAGE_OFFSET) {
-+ ret = -EFAULT;
-+ goto batch_err;
-+ }
++ down_read(&mm->mmap_sem);
+
-+ if ((m.addr + (m.num<<PAGE_SHIFT)) > vma->vm_end) {
-+ ret = -EFAULT;
-+ goto batch_err;
++ vma = find_vma(mm, m.addr);
++ if (!vma ||
++ (m.addr != vma->vm_start) ||
++ ((m.addr + ((unsigned long)m.num<<PAGE_SHIFT)) !=
++ vma->vm_end) ||
++ !privcmd_enforce_singleshot_mapping(vma)) {
++ up_read(&mm->mmap_sem);
++ return -EINVAL;
+ }
+
+ p = m.arr;
+ addr = m.addr;
+ for (i = 0; i < m.num; i++, addr += PAGE_SIZE, p++) {
-+ if (get_user(mfn, p))
++ if (get_user(mfn, p)) {
++ up_read(&mm->mmap_sem);
+ return -EFAULT;
++ }
+
+ ret = direct_remap_pfn_range(vma, addr & PAGE_MASK,
+ mfn, PAGE_SIZE,
@@ -65797,15 +67433,8 @@
+ put_user(0xF0000000 | mfn, p);
+ }
+
++ up_read(&mm->mmap_sem);
+ ret = 0;
-+ break;
-+
-+ batch_err:
-+ printk("batch_err ret=%d vma=%p addr=%lx "
-+ "num=%d arr=%p %lx-%lx\n",
-+ ret, vma, (unsigned long)m.addr, m.num, m.arr,
-+ vma ? vma->vm_start : 0, vma ? vma->vm_end : 0);
-+ break;
+ }
+ break;
+
@@ -65818,13 +67447,35 @@
+}
+
+#ifndef HAVE_ARCH_PRIVCMD_MMAP
++static struct page *privcmd_nopage(struct vm_area_struct *vma,
++ unsigned long address,
++ int *type)
++{
++ return NOPAGE_SIGBUS;
++}
++
++static struct vm_operations_struct privcmd_vm_ops = {
++ .nopage = privcmd_nopage
++};
++
+static int privcmd_mmap(struct file * file, struct vm_area_struct * vma)
+{
++ /* Unsupported for auto-translate guests. */
++ if (xen_feature(XENFEAT_auto_translated_physmap))
++ return -ENOSYS;
++
+ /* DONTCOPY is essential for Xen as copy_page_range is broken. */
+ vma->vm_flags |= VM_RESERVED | VM_IO | VM_DONTCOPY | VM_PFNMAP;
++ vma->vm_ops = &privcmd_vm_ops;
++ vma->vm_private_data = NULL;
+
+ return 0;
+}
++
++static int privcmd_enforce_singleshot_mapping(struct vm_area_struct *vma)
++{
++ return (xchg(&vma->vm_private_data, (void *)1) == NULL);
++}
+#endif
+
+static struct file_operations privcmd_file_ops = {
@@ -65862,10 +67513,10 @@
+}
+
+__initcall(privcmd_init);
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/tpmback/common.h linux-2.6.18-xen/drivers/xen/tpmback/common.h
---- linux-2.6.18/drivers/xen/tpmback/common.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/tpmback/common.h 2006-09-04 16:31:13.000000000 +0200
-@@ -0,0 +1,84 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/tpmback/common.h linux-2.6.18-xen/drivers/xen/tpmback/common.h
+--- linux-2.6.18.1/drivers/xen/tpmback/common.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/tpmback/common.h 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,86 @@
+/******************************************************************************
+ * drivers/xen/tpmback/common.h
+ */
@@ -65913,11 +67564,10 @@
+ atomic_t refcnt;
+
+ struct backend_info *bi;
-+ unsigned long mmap_vstart;
+
+ grant_handle_t shmem_handle;
+ grant_ref_t shmem_ref;
-+ struct page *pagerange;
++ struct page **mmap_pages;
+
+ char devname[20];
+} tpmif_t;
@@ -65947,13 +67597,16 @@
+
+extern int num_frontends;
+
-+#define MMAP_VADDR(t,_req) ((t)->mmap_vstart + ((_req) * PAGE_SIZE))
++static inline unsigned long idx_to_kaddr(tpmif_t *t, unsigned int idx)
++{
++ return (unsigned long)pfn_to_kaddr(page_to_pfn(t->mmap_pages[idx]));
++}
+
+#endif /* __TPMIF__BACKEND__COMMON_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/tpmback/interface.c linux-2.6.18-xen/drivers/xen/tpmback/interface.c
---- linux-2.6.18/drivers/xen/tpmback/interface.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/tpmback/interface.c 2006-09-04 16:31:13.000000000 +0200
-@@ -0,0 +1,177 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/tpmback/interface.c linux-2.6.18-xen/drivers/xen/tpmback/interface.c
+--- linux-2.6.18.1/drivers/xen/tpmback/interface.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/tpmback/interface.c 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,182 @@
+ /*****************************************************************************
+ * drivers/xen/tpmback/interface.c
+ *
@@ -65981,8 +67634,8 @@
+ tpmif_t *tpmif;
+
+ tpmif = kmem_cache_alloc(tpmif_cachep, GFP_KERNEL);
-+ if (!tpmif)
-+ return ERR_PTR(-ENOMEM);
++ if (tpmif == NULL)
++ goto out_of_memory;
+
+ memset(tpmif, 0, sizeof (*tpmif));
+ tpmif->domid = domid;
@@ -65991,22 +67644,27 @@
+ snprintf(tpmif->devname, sizeof(tpmif->devname), "tpmif%d", domid);
+ atomic_set(&tpmif->refcnt, 1);
+
-+ tpmif->pagerange = balloon_alloc_empty_page_range(TPMIF_TX_RING_SIZE);
-+ BUG_ON(tpmif->pagerange == NULL);
-+ tpmif->mmap_vstart = (unsigned long)pfn_to_kaddr(
-+ page_to_pfn(tpmif->pagerange));
++ tpmif->mmap_pages = alloc_empty_pages_and_pagevec(TPMIF_TX_RING_SIZE);
++ if (tpmif->mmap_pages == NULL)
++ goto out_of_memory;
+
+ list_add(&tpmif->tpmif_list, &tpmif_list);
+ num_frontends++;
+
+ return tpmif;
++
++ out_of_memory:
++ if (tpmif != NULL)
++ kmem_cache_free(tpmif_cachep, tpmif);
++ printk("%s: out of memory\n", __FUNCTION__);
++ return ERR_PTR(-ENOMEM);
+}
+
+static void free_tpmif(tpmif_t * tpmif)
+{
+ num_frontends--;
+ list_del(&tpmif->tpmif_list);
-+ balloon_dealloc_empty_page_range(tpmif->pagerange, TPMIF_TX_RING_SIZE);
++ free_empty_pages_and_pagevec(tpmif->mmap_pages, TPMIF_TX_RING_SIZE);
+ kmem_cache_free(tpmif_cachep, tpmif);
+}
+
@@ -66131,17 +67789,17 @@
+{
+ kmem_cache_destroy(tpmif_cachep);
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/tpmback/Makefile linux-2.6.18-xen/drivers/xen/tpmback/Makefile
---- linux-2.6.18/drivers/xen/tpmback/Makefile 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/tpmback/Makefile linux-2.6.18-xen/drivers/xen/tpmback/Makefile
+--- linux-2.6.18.1/drivers/xen/tpmback/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/tpmback/Makefile 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,4 @@
+
+obj-$(CONFIG_XEN_TPMDEV_BACKEND) += tpmbk.o
+
+tpmbk-y += tpmback.o interface.o xenbus.o
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/tpmback/tpmback.c linux-2.6.18-xen/drivers/xen/tpmback/tpmback.c
---- linux-2.6.18/drivers/xen/tpmback/tpmback.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/tpmback/tpmback.c 2006-09-04 16:31:13.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/tpmback/tpmback.c linux-2.6.18-xen/drivers/xen/tpmback/tpmback.c
+--- linux-2.6.18.1/drivers/xen/tpmback/tpmback.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/tpmback/tpmback.c 2006-10-17 15:01:58.000000000 +0200
@@ -0,0 +1,944 @@
+/******************************************************************************
+ * drivers/xen/tpmback/tpmback.c
@@ -66398,7 +68056,7 @@
+ return 0;
+ }
+
-+ gnttab_set_map_op(&map_op, MMAP_VADDR(tpmif, i),
++ gnttab_set_map_op(&map_op, idx_to_kaddr(tpmif, i),
+ GNTMAP_host_map, tx->ref, tpmif->domid);
+
+ if (unlikely(HYPERVISOR_grant_table_op(GNTTABOP_map_grant_ref,
@@ -66415,7 +68073,7 @@
+
+ tocopy = min_t(size_t, size - offset, PAGE_SIZE);
+
-+ if (copy_from_buffer((void *)(MMAP_VADDR(tpmif, i) |
++ if (copy_from_buffer((void *)(idx_to_kaddr(tpmif, i) |
+ (tx->addr & ~PAGE_MASK)),
+ &data[offset], tocopy, isuserbuffer)) {
+ tpmif_put(tpmif);
@@ -66423,7 +68081,7 @@
+ }
+ tx->size = tocopy;
+
-+ gnttab_set_unmap_op(&unmap_op, MMAP_VADDR(tpmif, i),
++ gnttab_set_unmap_op(&unmap_op, idx_to_kaddr(tpmif, i),
+ GNTMAP_host_map, handle);
+
+ if (unlikely
@@ -66536,7 +68194,7 @@
+
+ tx = &tpmif->tx->ring[i].req;
+
-+ gnttab_set_map_op(&map_op, MMAP_VADDR(tpmif, i),
++ gnttab_set_map_op(&map_op, idx_to_kaddr(tpmif, i),
+ GNTMAP_host_map, tx->ref, tpmif->domid);
+
+ if (unlikely(HYPERVISOR_grant_table_op(GNTTABOP_map_grant_ref,
@@ -66559,10 +68217,10 @@
+ }
+
+ DPRINTK("Copying from mapped memory at %08lx\n",
-+ (unsigned long)(MMAP_VADDR(tpmif, i) |
++ (unsigned long)(idx_to_kaddr(tpmif, i) |
+ (tx->addr & ~PAGE_MASK)));
+
-+ src = (void *)(MMAP_VADDR(tpmif, i) |
++ src = (void *)(idx_to_kaddr(tpmif, i) |
+ ((tx->addr & ~PAGE_MASK) + pg_offset));
+ if (copy_to_buffer(&buffer[offset],
+ src, to_copy, isuserbuffer)) {
@@ -66573,7 +68231,7 @@
+ tpmif->domid, buffer[offset], buffer[offset + 1],
+ buffer[offset + 2], buffer[offset + 3]);
+
-+ gnttab_set_unmap_op(&unmap_op, MMAP_VADDR(tpmif, i),
++ gnttab_set_unmap_op(&unmap_op, idx_to_kaddr(tpmif, i),
+ GNTMAP_host_map, handle);
+
+ if (unlikely
@@ -67087,8 +68745,8 @@
+}
+
+MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/tpmback/xenbus.c linux-2.6.18-xen/drivers/xen/tpmback/xenbus.c
---- linux-2.6.18/drivers/xen/tpmback/xenbus.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/tpmback/xenbus.c linux-2.6.18-xen/drivers/xen/tpmback/xenbus.c
+--- linux-2.6.18.1/drivers/xen/tpmback/xenbus.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/tpmback/xenbus.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,287 @@
+/* Xenbus code for tpmif backend
@@ -67378,8 +69036,8 @@
+{
+ xenbus_unregister_driver(&tpmback);
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/util.c linux-2.6.18-xen/drivers/xen/util.c
---- linux-2.6.18/drivers/xen/util.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/util.c linux-2.6.18-xen/drivers/xen/util.c
+--- linux-2.6.18.1/drivers/xen/util.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/util.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,70 @@
+
@@ -67452,8 +69110,8 @@
+ preempt_enable();
+}
+EXPORT_SYMBOL_GPL(unlock_vm_area);
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/xenbus/Makefile linux-2.6.18-xen/drivers/xen/xenbus/Makefile
---- linux-2.6.18/drivers/xen/xenbus/Makefile 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/xenbus/Makefile linux-2.6.18-xen/drivers/xen/xenbus/Makefile
+--- linux-2.6.18.1/drivers/xen/xenbus/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/xenbus/Makefile 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,12 @@
+obj-y += xenbus.o
@@ -67468,8 +69126,8 @@
+xenbus-objs += xenbus_xs.o
+xenbus-objs += xenbus_probe.o
+obj-$(CONFIG_XEN_XENBUS_DEV) += xenbus_dev.o
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/xenbus/xenbus_backend_client.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_backend_client.c
---- linux-2.6.18/drivers/xen/xenbus/xenbus_backend_client.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/xenbus/xenbus_backend_client.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_backend_client.c
+--- linux-2.6.18.1/drivers/xen/xenbus/xenbus_backend_client.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/xenbus/xenbus_backend_client.c 2006-09-21 01:33:31.000000000 +0200
@@ -0,0 +1,147 @@
+/******************************************************************************
@@ -67619,8 +69277,8 @@
+EXPORT_SYMBOL_GPL(xenbus_dev_is_online);
+
+MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/xenbus/xenbus_client.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_client.c
---- linux-2.6.18/drivers/xen/xenbus/xenbus_client.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/xenbus/xenbus_client.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_client.c
+--- linux-2.6.18.1/drivers/xen/xenbus/xenbus_client.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/xenbus/xenbus_client.c 2006-09-21 01:33:31.000000000 +0200
@@ -0,0 +1,299 @@
+/******************************************************************************
@@ -67922,8 +69580,8 @@
+ return result;
+}
+EXPORT_SYMBOL_GPL(xenbus_read_driver_state);
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/xenbus/xenbus_comms.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_comms.c
---- linux-2.6.18/drivers/xen/xenbus/xenbus_comms.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/xenbus/xenbus_comms.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_comms.c
+--- linux-2.6.18.1/drivers/xen/xenbus/xenbus_comms.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/xenbus/xenbus_comms.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,203 @@
+/******************************************************************************
@@ -68129,8 +69787,8 @@
+
+ return 0;
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/xenbus/xenbus_comms.h linux-2.6.18-xen/drivers/xen/xenbus/xenbus_comms.h
---- linux-2.6.18/drivers/xen/xenbus/xenbus_comms.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/xenbus/xenbus_comms.h linux-2.6.18-xen/drivers/xen/xenbus/xenbus_comms.h
+--- linux-2.6.18.1/drivers/xen/xenbus/xenbus_comms.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/xenbus/xenbus_comms.h 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,45 @@
+/*
@@ -68178,8 +69836,8 @@
+extern int xen_store_evtchn;
+
+#endif /* _XENBUS_COMMS_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/xenbus/xenbus_dev.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_dev.c
---- linux-2.6.18/drivers/xen/xenbus/xenbus_dev.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/xenbus/xenbus_dev.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_dev.c
+--- linux-2.6.18.1/drivers/xen/xenbus/xenbus_dev.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/xenbus/xenbus_dev.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,356 @@
+/*
@@ -68538,10 +70196,10 @@
+
+ return 0;
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/xenbus/xenbus_probe.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_probe.c
---- linux-2.6.18/drivers/xen/xenbus/xenbus_probe.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/xenbus/xenbus_probe.c 2006-09-21 01:33:31.000000000 +0200
-@@ -0,0 +1,1176 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/xenbus/xenbus_probe.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_probe.c
+--- linux-2.6.18.1/drivers/xen/xenbus/xenbus_probe.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/xenbus/xenbus_probe.c 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,1190 @@
+/******************************************************************************
+ * Talks to Xen Store to figure out what devices we have.
+ *
@@ -68867,6 +70525,20 @@
+ DPRINTK("state is %d (%s), %s, %s", state, xenbus_strstate(state),
+ dev->otherend_watch.node, vec[XS_WATCH_PATH]);
+
++ /*
++ * Ignore xenbus transitions during shutdown. This prevents us doing
++ * work that can fail e.g., when the rootfs is gone.
++ */
++ if (system_state > SYSTEM_RUNNING) {
++ struct xen_bus_type *bus = bus;
++ bus = container_of(dev->dev.bus, struct xen_bus_type, bus);
++ /* If we're frontend, drive the state machine to Closed. */
++ /* This should cause the backend to release our resources. */
++ if ((bus == &xenbus_frontend) && (state == XenbusStateClosing))
++ xenbus_frontend_closed(dev);
++ return;
++ }
++
+ if (drv->otherend_changed)
+ drv->otherend_changed(dev, state);
+}
@@ -69718,8 +71390,8 @@
+
+late_initcall(boot_wait_for_devices);
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/xenbus/xenbus_xs.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_xs.c
---- linux-2.6.18/drivers/xen/xenbus/xenbus_xs.c 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/drivers/xen/xenbus/xenbus_xs.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_xs.c
+--- linux-2.6.18.1/drivers/xen/xenbus/xenbus_xs.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/drivers/xen/xenbus/xenbus_xs.c 2006-09-04 16:31:13.000000000 +0200
@@ -0,0 +1,853 @@
+/******************************************************************************
@@ -70575,8 +72247,8 @@
+
+ return 0;
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/fs/Kconfig linux-2.6.18-xen/fs/Kconfig
---- linux-2.6.18/fs/Kconfig 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/fs/Kconfig linux-2.6.18-xen/fs/Kconfig
+--- linux-2.6.18.1/fs/Kconfig 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/fs/Kconfig 2006-09-04 16:31:13.000000000 +0200
@@ -865,6 +865,7 @@
config HUGETLBFS
@@ -70586,8 +72258,8 @@
help
hugetlbfs is a filesystem backing for HugeTLB pages, based on
ramfs. For architectures that support it, say Y here and read
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-generic/vmlinux.lds.h linux-2.6.18-xen/include/asm-generic/vmlinux.lds.h
---- linux-2.6.18/include/asm-generic/vmlinux.lds.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-generic/vmlinux.lds.h linux-2.6.18-xen/include/asm-generic/vmlinux.lds.h
+--- linux-2.6.18.1/include/asm-generic/vmlinux.lds.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-generic/vmlinux.lds.h 2006-09-21 01:33:31.000000000 +0200
@@ -194,3 +194,6 @@
.stab.index 0 : { *(.stab.index) } \
@@ -70596,8 +72268,8 @@
+
+#define NOTES \
+ .notes : { *(.note.*) } :note
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/apic.h linux-2.6.18-xen/include/asm-i386/apic.h
---- linux-2.6.18/include/asm-i386/apic.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/apic.h linux-2.6.18-xen/include/asm-i386/apic.h
+--- linux-2.6.18.1/include/asm-i386/apic.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-i386/apic.h 2006-09-04 16:31:16.000000000 +0200
@@ -119,10 +119,12 @@
@@ -70612,8 +72284,8 @@
extern int timer_over_8254;
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/fixmap.h linux-2.6.18-xen/include/asm-i386/fixmap.h
---- linux-2.6.18/include/asm-i386/fixmap.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/fixmap.h linux-2.6.18-xen/include/asm-i386/fixmap.h
+--- linux-2.6.18.1/include/asm-i386/fixmap.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-i386/fixmap.h 2006-09-21 01:33:32.000000000 +0200
@@ -19,6 +19,7 @@
* Leave one empty page between vmalloc'ed areas and
@@ -70623,8 +72295,8 @@
#define __FIXADDR_TOP 0xfffff000
#ifndef __ASSEMBLY__
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-default/mach_traps.h linux-2.6.18-xen/include/asm-i386/mach-default/mach_traps.h
---- linux-2.6.18/include/asm-i386/mach-default/mach_traps.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-default/mach_traps.h linux-2.6.18-xen/include/asm-i386/mach-default/mach_traps.h
+--- linux-2.6.18.1/include/asm-i386/mach-default/mach_traps.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-i386/mach-default/mach_traps.h 2006-09-04 16:31:16.000000000 +0200
@@ -15,6 +15,18 @@
outb(reason, 0x61);
@@ -70645,8 +72317,8 @@
static inline unsigned char get_nmi_reason(void)
{
return inb(0x61);
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/agp.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/agp.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/agp.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/agp.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/agp.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/agp.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/agp.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,37 @@
+#ifndef AGP_H
@@ -70686,8 +72358,8 @@
+ dma_free_coherent(NULL,PAGE_SIZE<<(order),(table),virt_to_bus(table))
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/desc.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/desc.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/desc.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/desc.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/desc.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/desc.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/desc.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,164 @@
+#ifndef __ARCH_DESC_H
@@ -70854,8 +72526,8 @@
+#endif /* !__ASSEMBLY__ */
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/dma-mapping.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/dma-mapping.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/dma-mapping.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/dma-mapping.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/dma-mapping.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/dma-mapping.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/dma-mapping.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,151 @@
+#ifndef _ASM_I386_DMA_MAPPING_H
@@ -71009,8 +72681,8 @@
+ dma_addr_t device_addr, size_t size);
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/fixmap.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/fixmap.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/fixmap.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/fixmap.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/fixmap.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/fixmap.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/fixmap.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,156 @@
+/*
@@ -71169,8 +72841,8 @@
+
+#endif /* !__ASSEMBLY__ */
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/floppy.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/floppy.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/floppy.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/floppy.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/floppy.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/floppy.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/floppy.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,147 @@
+/*
@@ -71320,8 +72992,8 @@
+#define EXTRA_FLOPPY_PARAMS
+
+#endif /* __ASM_XEN_I386_FLOPPY_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/highmem.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/highmem.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/highmem.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/highmem.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/highmem.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/highmem.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/highmem.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,80 @@
+/*
@@ -71404,8 +73076,8 @@
+#endif /* __KERNEL__ */
+
+#endif /* _ASM_HIGHMEM_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/hw_irq.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/hw_irq.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/hw_irq.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/hw_irq.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/hw_irq.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/hw_irq.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/hw_irq.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,72 @@
+#ifndef _ASM_HW_IRQ_H
@@ -71480,8 +73152,8 @@
+#define IO_APIC_IRQ(x) (((x) >= 16) || ((1<<(x)) & io_apic_irqs))
+
+#endif /* _ASM_HW_IRQ_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/hypercall.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/hypercall.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/hypercall.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/hypercall.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/hypercall.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/hypercall.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/hypercall.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,389 @@
+/******************************************************************************
@@ -71873,8 +73545,8 @@
+
+
+#endif /* __HYPERCALL_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/hypervisor.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/hypervisor.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/hypervisor.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/hypervisor.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/hypervisor.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/hypervisor.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/hypervisor.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,234 @@
+/******************************************************************************
@@ -72111,8 +73783,8 @@
+}
+
+#endif /* __HYPERVISOR_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/io.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/io.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/io.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/io.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/io.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/io.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/io.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,389 @@
+#ifndef _ASM_IO_H
@@ -72504,8 +74176,8 @@
+#define ARCH_HAS_DEV_MEM
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/irqflags.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/irqflags.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/irqflags.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/irqflags.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/irqflags.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/irqflags.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/irqflags.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,80 @@
+/*
@@ -72588,8 +74260,8 @@
+#endif
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/kmap_types.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/kmap_types.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/kmap_types.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/kmap_types.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/kmap_types.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/kmap_types.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/kmap_types.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,31 @@
+#ifndef _ASM_KMAP_TYPES_H
@@ -72623,8 +74295,8 @@
+#undef D
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/maddr.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/maddr.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/maddr.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/maddr.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/maddr.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/maddr.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/maddr.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,160 @@
+#ifndef _I386_MADDR_H
@@ -72787,8 +74459,8 @@
+#define __pte_ma(x) ((pte_t) { (x) } )
+
+#endif /* _I386_MADDR_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/mmu_context.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/mmu_context.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/mmu_context.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/mmu_context.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/mmu_context.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/mmu_context.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/mmu_context.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,108 @@
+#ifndef __I386_SCHED_H
@@ -72899,8 +74571,8 @@
+}
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/mmu.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/mmu.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/mmu.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/mmu.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/mmu.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/mmu.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/mmu.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,29 @@
+#ifndef __i386_MMU_H
@@ -72932,8 +74604,8 @@
+#define arch_dup_mmap(mm, oldmm) ((void)(oldmm), _arch_dup_mmap(mm))
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/page.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/page.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/page.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/page.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/page.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/page.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/page.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,220 @@
+#ifndef _I386_PAGE_H
@@ -73156,8 +74828,8 @@
+#endif /* __KERNEL__ */
+
+#endif /* _I386_PAGE_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/param.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/param.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/param.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/param.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/param.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/param.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/param.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,23 @@
+#ifndef _ASMi386_PARAM_H
@@ -73183,8 +74855,8 @@
+#define COMMAND_LINE_SIZE 256
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/pci.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pci.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/pci.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/pci.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pci.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/pci.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pci.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,153 @@
+#ifndef __i386_PCI_H
@@ -73340,8 +75012,8 @@
+#define pcibios_scan_all_fns(a, b) 1
+
+#endif /* __i386_PCI_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/pgalloc.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgalloc.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/pgalloc.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/pgalloc.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgalloc.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/pgalloc.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgalloc.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,63 @@
+#ifndef _I386_PGALLOC_H
@@ -73407,8 +75079,8 @@
+#define check_pgt_cache() do { } while (0)
+
+#endif /* _I386_PGALLOC_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/pgtable-2level-defs.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable-2level-defs.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/pgtable-2level-defs.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/pgtable-2level-defs.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable-2level-defs.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/pgtable-2level-defs.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable-2level-defs.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,21 @@
+#ifndef _I386_PGTABLE_2LEVEL_DEFS_H
@@ -73432,8 +75104,8 @@
+#define PTRS_PER_PTE 1024
+
+#endif /* _I386_PGTABLE_2LEVEL_DEFS_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/pgtable-2level.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable-2level.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/pgtable-2level.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/pgtable-2level.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable-2level.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/pgtable-2level.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable-2level.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,87 @@
+#ifndef _I386_PGTABLE_2LEVEL_H
@@ -73523,8 +75195,8 @@
+void vmalloc_sync_all(void);
+
+#endif /* _I386_PGTABLE_2LEVEL_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/pgtable-3level-defs.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable-3level-defs.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/pgtable-3level-defs.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/pgtable-3level-defs.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable-3level-defs.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/pgtable-3level-defs.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable-3level-defs.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,25 @@
+#ifndef _I386_PGTABLE_3LEVEL_DEFS_H
@@ -73552,8 +75224,8 @@
+#define PTRS_PER_PTE 512
+
+#endif /* _I386_PGTABLE_3LEVEL_DEFS_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/pgtable-3level.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable-3level.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/pgtable-3level.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/pgtable-3level.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable-3level.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/pgtable-3level.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable-3level.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,185 @@
+#ifndef _I386_PGTABLE_3LEVEL_H
@@ -73741,8 +75413,8 @@
+#define vmalloc_sync_all() ((void)0)
+
+#endif /* _I386_PGTABLE_3LEVEL_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/pgtable.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/pgtable.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/pgtable.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/pgtable.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,508 @@
+#ifndef _I386_PGTABLE_H
@@ -74253,8 +75925,8 @@
+#include <asm-generic/pgtable.h>
+
+#endif /* _I386_PGTABLE_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/processor.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/processor.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/processor.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/processor.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/processor.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/processor.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/processor.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,741 @@
+/*
@@ -74998,8 +76670,8 @@
+extern int sysenter_setup(void);
+
+#endif /* __ASM_I386_PROCESSOR_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/ptrace.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/ptrace.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/ptrace.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/ptrace.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/ptrace.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/ptrace.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/ptrace.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,90 @@
+#ifndef _I386_PTRACE_H
@@ -75092,8 +76764,8 @@
+#endif /* __KERNEL__ */
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/scatterlist.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/scatterlist.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/scatterlist.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/scatterlist.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/scatterlist.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/scatterlist.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/scatterlist.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,22 @@
+#ifndef _I386_SCATTERLIST_H
@@ -75118,8 +76790,8 @@
+#define ISA_DMA_THRESHOLD (0x00ffffff)
+
+#endif /* !(_I386_SCATTERLIST_H) */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/segment.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/segment.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/segment.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/segment.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/segment.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/segment.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/segment.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,117 @@
+#ifndef _ASM_SEGMENT_H
@@ -75239,8 +76911,8 @@
+#define IDT_ENTRIES 256
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/setup.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/setup.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/setup.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/setup.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/setup.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/setup.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/setup.h 2006-09-21 01:33:32.000000000 +0200
@@ -0,0 +1,81 @@
+/*
@@ -75324,8 +76996,8 @@
+#endif /* __ASSEMBLY__ */
+
+#endif /* _i386_SETUP_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/smp.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/smp.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/smp.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/smp.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/smp.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/smp.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/smp.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,103 @@
+#ifndef __ASM_SMP_H
@@ -75431,8 +77103,8 @@
+
+#endif
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/spinlock.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/spinlock.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/spinlock.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/spinlock.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/spinlock.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/spinlock.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/spinlock.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,202 @@
+#ifndef __ASM_SPINLOCK_H
@@ -75637,8 +77309,8 @@
+}
+
+#endif /* __ASM_SPINLOCK_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/swiotlb.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/swiotlb.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/swiotlb.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/swiotlb.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/swiotlb.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/swiotlb.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/swiotlb.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,41 @@
+#ifndef _ASM_SWIOTLB_H
@@ -75682,8 +77354,8 @@
+#endif
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/synch_bitops.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/synch_bitops.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/synch_bitops.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/synch_bitops.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/synch_bitops.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/synch_bitops.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/synch_bitops.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,141 @@
+#ifndef __XEN_SYNCH_BITOPS_H__
@@ -75827,8 +77499,8 @@
+#define synch_cmpxchg_subword synch_cmpxchg
+
+#endif /* __XEN_SYNCH_BITOPS_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/system.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/system.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/system.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/system.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/system.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/system.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/system.h 2006-09-21 01:33:32.000000000 +0200
@@ -0,0 +1,491 @@
+#ifndef __ASM_SYSTEM_H
@@ -76322,8 +77994,8 @@
+void default_idle(void);
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/timer.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/timer.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/timer.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/timer.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/timer.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/timer.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/timer.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,70 @@
+#ifndef _ASMi386_TIMER_H
@@ -76396,8 +78068,8 @@
+extern struct init_timer_opts timer_pmtmr_init;
+#endif
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/tlbflush.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/tlbflush.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/tlbflush.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/tlbflush.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/tlbflush.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/tlbflush.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/tlbflush.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,101 @@
+#ifndef _I386_TLBFLUSH_H
@@ -76501,8 +78173,8 @@
+}
+
+#endif /* _I386_TLBFLUSH_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/vga.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/vga.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/vga.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/asm/vga.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/vga.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/asm/vga.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/vga.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,20 @@
+/*
@@ -76525,8 +78197,8 @@
+#define vga_writeb(x,y) (*(y) = (x))
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/irq_vectors.h linux-2.6.18-xen/include/asm-i386/mach-xen/irq_vectors.h
---- linux-2.6.18/include/asm-i386/mach-xen/irq_vectors.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/irq_vectors.h linux-2.6.18-xen/include/asm-i386/mach-xen/irq_vectors.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/irq_vectors.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/irq_vectors.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,125 @@
+/*
@@ -76654,8 +78326,8 @@
+#define irq_to_dynirq(_x) ((_x) - DYNIRQ_BASE)
+
+#endif /* _ASM_IRQ_VECTORS_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/mach_traps.h linux-2.6.18-xen/include/asm-i386/mach-xen/mach_traps.h
---- linux-2.6.18/include/asm-i386/mach-xen/mach_traps.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/mach_traps.h linux-2.6.18-xen/include/asm-i386/mach-xen/mach_traps.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/mach_traps.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/mach_traps.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,33 @@
+/*
@@ -76691,8 +78363,8 @@
+static inline void reassert_nmi(void) {}
+
+#endif /* !_MACH_TRAPS_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/setup_arch.h linux-2.6.18-xen/include/asm-i386/mach-xen/setup_arch.h
---- linux-2.6.18/include/asm-i386/mach-xen/setup_arch.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/mach-xen/setup_arch.h linux-2.6.18-xen/include/asm-i386/mach-xen/setup_arch.h
+--- linux-2.6.18.1/include/asm-i386/mach-xen/setup_arch.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-i386/mach-xen/setup_arch.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,5 @@
+/* Hook to call BIOS initialisation function */
@@ -76700,8 +78372,8 @@
+#define ARCH_SETUP machine_specific_arch_setup();
+
+void __init machine_specific_arch_setup(void);
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/pgtable-2level-defs.h linux-2.6.18-xen/include/asm-i386/pgtable-2level-defs.h
---- linux-2.6.18/include/asm-i386/pgtable-2level-defs.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/pgtable-2level-defs.h linux-2.6.18-xen/include/asm-i386/pgtable-2level-defs.h
+--- linux-2.6.18.1/include/asm-i386/pgtable-2level-defs.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-i386/pgtable-2level-defs.h 2006-09-04 16:31:16.000000000 +0200
@@ -1,6 +1,8 @@
#ifndef _I386_PGTABLE_2LEVEL_DEFS_H
@@ -76712,8 +78384,8 @@
/*
* traditional i386 two-level paging structure:
*/
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/pgtable-3level-defs.h linux-2.6.18-xen/include/asm-i386/pgtable-3level-defs.h
---- linux-2.6.18/include/asm-i386/pgtable-3level-defs.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-i386/pgtable-3level-defs.h linux-2.6.18-xen/include/asm-i386/pgtable-3level-defs.h
+--- linux-2.6.18.1/include/asm-i386/pgtable-3level-defs.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-i386/pgtable-3level-defs.h 2006-09-04 16:31:16.000000000 +0200
@@ -1,6 +1,8 @@
#ifndef _I386_PGTABLE_3LEVEL_DEFS_H
@@ -76724,8 +78396,8 @@
/*
* PGDIR_SHIFT determines what a top-level page table entry can map
*/
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/agp.h linux-2.6.18-xen/include/asm-ia64/agp.h
---- linux-2.6.18/include/asm-ia64/agp.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/agp.h linux-2.6.18-xen/include/asm-ia64/agp.h
+--- linux-2.6.18.1/include/asm-ia64/agp.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-ia64/agp.h 2006-09-04 16:31:16.000000000 +0200
@@ -19,13 +19,49 @@
#define flush_agp_cache() mb()
@@ -76781,8 +78453,8 @@
+#endif /* CONFIG_XEN */
#endif /* _ASM_IA64_AGP_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/dma-mapping.h linux-2.6.18-xen/include/asm-ia64/dma-mapping.h
---- linux-2.6.18/include/asm-ia64/dma-mapping.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/dma-mapping.h linux-2.6.18-xen/include/asm-ia64/dma-mapping.h
+--- linux-2.6.18.1/include/asm-ia64/dma-mapping.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-ia64/dma-mapping.h 2006-09-21 01:33:32.000000000 +0200
@@ -7,19 +7,68 @@
*/
@@ -76905,14 +78577,14 @@
+}
+
#endif /* _ASM_IA64_DMA_MAPPING_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/fixmap.h linux-2.6.18-xen/include/asm-ia64/fixmap.h
---- linux-2.6.18/include/asm-ia64/fixmap.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/fixmap.h linux-2.6.18-xen/include/asm-ia64/fixmap.h
+--- linux-2.6.18.1/include/asm-ia64/fixmap.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-ia64/fixmap.h 2006-09-04 16:31:16.000000000 +0200
@@ -0,0 +1,2 @@
+#define clear_fixmap(x) do {} while (0)
+#define set_fixmap(x,y) do {} while (0)
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/gcc_intrin.h linux-2.6.18-xen/include/asm-ia64/gcc_intrin.h
---- linux-2.6.18/include/asm-ia64/gcc_intrin.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/gcc_intrin.h linux-2.6.18-xen/include/asm-ia64/gcc_intrin.h
+--- linux-2.6.18.1/include/asm-ia64/gcc_intrin.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-ia64/gcc_intrin.h 2006-09-04 16:31:16.000000000 +0200
@@ -26,7 +26,7 @@
@@ -77103,8 +78775,8 @@
+#define __ia64_get_psr_i() (__ia64_getreg(_IA64_REG_PSR) & 0x4000UL)
+
#endif /* _ASM_IA64_GCC_INTRIN_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/hw_irq.h linux-2.6.18-xen/include/asm-ia64/hw_irq.h
---- linux-2.6.18/include/asm-ia64/hw_irq.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/hw_irq.h linux-2.6.18-xen/include/asm-ia64/hw_irq.h
+--- linux-2.6.18.1/include/asm-ia64/hw_irq.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-ia64/hw_irq.h 2006-09-04 16:31:16.000000000 +0200
@@ -15,7 +15,11 @@
#include <asm/ptrace.h>
@@ -77131,9 +78803,9 @@
platform_send_ipi(smp_processor_id(), vector, IA64_IPI_DM_INT, 0);
}
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/hypercall.h linux-2.6.18-xen/include/asm-ia64/hypercall.h
---- linux-2.6.18/include/asm-ia64/hypercall.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/include/asm-ia64/hypercall.h 2006-09-21 01:33:32.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/hypercall.h linux-2.6.18-xen/include/asm-ia64/hypercall.h
+--- linux-2.6.18.1/include/asm-ia64/hypercall.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/include/asm-ia64/hypercall.h 2006-10-17 15:01:58.000000000 +0200
@@ -0,0 +1,423 @@
+/******************************************************************************
+ * hypercall.h
@@ -77170,12 +78842,13 @@
+#ifndef __HYPERCALL_H__
+#define __HYPERCALL_H__
+
-+#include <linux/string.h> /* memcpy() */
-+
+#ifndef __HYPERVISOR_H__
+# error "please don't include this file directly"
+#endif
+
++#include <asm/xen/xcom_hcall.h>
++struct xencomm_handle;
++
+/*
+ * Assembler stubs for hyper-calls.
+ */
@@ -77294,157 +78967,117 @@
+ (type)__res; \
+})
+
-+static inline int
-+HYPERVISOR_sched_op_compat(
-+ int cmd, unsigned long arg)
-+{
-+ return _hypercall2(int, sched_op_compat, cmd, arg);
-+}
+
+static inline int
-+HYPERVISOR_sched_op(
-+ int cmd, void *arg)
++xencomm_arch_hypercall_sched_op(int cmd, struct xencomm_handle *arg)
+{
+ return _hypercall2(int, sched_op, cmd, arg);
+}
+
+static inline long
-+HYPERVISOR_set_timer_op(
-+ u64 timeout)
++HYPERVISOR_set_timer_op(u64 timeout)
+{
-+ unsigned long timeout_hi = (unsigned long)(timeout>>32);
-+ unsigned long timeout_lo = (unsigned long)timeout;
-+ return _hypercall2(long, set_timer_op, timeout_lo, timeout_hi);
++ unsigned long timeout_hi = (unsigned long)(timeout >> 32);
++ unsigned long timeout_lo = (unsigned long)timeout;
++ return _hypercall2(long, set_timer_op, timeout_lo, timeout_hi);
+}
+
+static inline int
-+HYPERVISOR_dom0_op(
-+ dom0_op_t *dom0_op)
++xencomm_arch_hypercall_dom0_op(struct xencomm_handle *op)
+{
-+ dom0_op->interface_version = DOM0_INTERFACE_VERSION;
-+ return _hypercall1(int, dom0_op, dom0_op);
++ return _hypercall1(int, dom0_op, op);
+}
+
+static inline int
-+HYPERVISOR_multicall(
-+ void *call_list, int nr_calls)
++xencomm_arch_hypercall_sysctl(struct xencomm_handle *op)
+{
-+ return _hypercall2(int, multicall, call_list, nr_calls);
++ return _hypercall1(int, sysctl, op);
+}
+
-+//XXX xen/ia64 copy_from_guest() is broken.
-+// This is a temporal work around until it is fixed.
+static inline int
-+____HYPERVISOR_memory_op(
-+ unsigned int cmd, void *arg)
++xencomm_arch_hypercall_domctl(struct xencomm_handle *op)
+{
-+ return _hypercall2(int, memory_op, cmd, arg);
++ return _hypercall1(int, domctl, op);
+}
+
-+#include <xen/interface/memory.h>
-+#ifdef CONFIG_VMX_GUEST
-+# define ia64_xenmem_reservation_op(op, xmr) (0)
-+#else
-+int ia64_xenmem_reservation_op(unsigned long op,
-+ struct xen_memory_reservation* reservation__);
-+#endif
+static inline int
-+HYPERVISOR_memory_op(
-+ unsigned int cmd, void *arg)
++xencomm_arch_hypercall_multicall(struct xencomm_handle *call_list,
++ int nr_calls)
+{
-+ switch (cmd) {
-+ case XENMEM_increase_reservation:
-+ case XENMEM_decrease_reservation:
-+ case XENMEM_populate_physmap:
-+ return ia64_xenmem_reservation_op(cmd,
-+ (struct xen_memory_reservation*)arg);
-+ default:
-+ return ____HYPERVISOR_memory_op(cmd, arg);
-+ }
-+ /* NOTREACHED */
++ return _hypercall2(int, multicall, call_list, nr_calls);
+}
+
+static inline int
-+HYPERVISOR_event_channel_op(
-+ int cmd, void *arg)
++xencomm_arch_hypercall_memory_op(unsigned int cmd, struct xencomm_handle *arg)
+{
-+ int rc = _hypercall2(int, event_channel_op, cmd, arg);
-+ if (unlikely(rc == -ENOSYS)) {
-+ struct evtchn_op op;
-+ op.cmd = cmd;
-+ memcpy(&op.u, arg, sizeof(op.u));
-+ rc = _hypercall1(int, event_channel_op_compat, &op);
-+ }
-+ return rc;
++ return _hypercall2(int, memory_op, cmd, arg);
+}
+
+static inline int
-+HYPERVISOR_acm_op(
-+ unsigned int cmd, void *arg)
++xencomm_arch_hypercall_event_channel_op(int cmd, struct xencomm_handle *arg)
+{
-+ return _hypercall2(int, acm_op, cmd, arg);
++ return _hypercall2(int, event_channel_op, cmd, arg);
+}
+
+static inline int
-+HYPERVISOR_xen_version(
-+ int cmd, void *arg)
++xencomm_arch_hypercall_acm_op(unsigned int cmd, struct xencomm_handle *arg)
+{
-+ return _hypercall2(int, xen_version, cmd, arg);
++ return _hypercall2(int, acm_op, cmd, arg);
+}
+
+static inline int
-+HYPERVISOR_console_io(
-+ int cmd, int count, char *str)
++xencomm_arch_hypercall_xen_version(int cmd, struct xencomm_handle *arg)
+{
-+ return _hypercall3(int, console_io, cmd, count, str);
++ return _hypercall2(int, xen_version, cmd, arg);
+}
+
+static inline int
-+HYPERVISOR_physdev_op(
-+ int cmd, void *arg)
++xencomm_arch_hypercall_console_io(int cmd, int count,
++ struct xencomm_handle *str)
+{
-+ int rc = _hypercall2(int, physdev_op, cmd, arg);
-+ if (unlikely(rc == -ENOSYS)) {
-+ struct physdev_op op;
-+ op.cmd = cmd;
-+ memcpy(&op.u, arg, sizeof(op.u));
-+ rc = _hypercall1(int, physdev_op_compat, &op);
-+ }
-+ return rc;
++ return _hypercall3(int, console_io, cmd, count, str);
++}
++
++static inline int
++xencomm_arch_hypercall_physdev_op(int cmd, struct xencomm_handle *arg)
++{
++ return _hypercall2(int, physdev_op, cmd, arg);
+}
+
-+//XXX __HYPERVISOR_grant_table_op is used for this hypercall constant.
+static inline int
-+____HYPERVISOR_grant_table_op(
-+ unsigned int cmd, void *uop, unsigned int count,
-+ unsigned long pa1, unsigned long pa2)
++xencomm_arch_hypercall_grant_table_op(unsigned int cmd,
++ struct xencomm_handle *uop,
++ unsigned int count)
+{
-+ return _hypercall5(int, grant_table_op, cmd, uop, count, pa1, pa2);
++ return _hypercall3(int, grant_table_op, cmd, uop, count);
+}
+
+int HYPERVISOR_grant_table_op(unsigned int cmd, void *uop, unsigned int count);
+
++extern int xencomm_arch_hypercall_suspend(struct xencomm_handle *arg);
++
+static inline int
-+HYPERVISOR_vcpu_op(
-+ int cmd, int vcpuid, void *extra_args)
++xencomm_arch_hypercall_callback_op(int cmd, struct xencomm_handle *arg)
+{
-+ return _hypercall3(int, vcpu_op, cmd, vcpuid, extra_args);
++ return _hypercall2(int, callback_op, cmd, arg);
+}
+
-+extern int HYPERVISOR_suspend(unsigned long srec);
-+
+static inline unsigned long
-+HYPERVISOR_hvm_op(
-+ int cmd, void *arg)
++xencomm_arch_hypercall_hvm_op(int cmd, void *arg)
+{
+ return _hypercall2(unsigned long, hvm_op, cmd, arg);
+}
+
+static inline int
-+HYPERVISOR_callback_op(
-+ int cmd, void *arg)
++HYPERVISOR_physdev_op(int cmd, void *arg)
+{
-+ return _hypercall2(int, callback_op, cmd, arg);
++ switch (cmd) {
++ case PHYSDEVOP_eoi:
++ return _hypercall1(int, ia64_fast_eoi,
++ ((struct physdev_eoi *)arg)->irq);
++ default:
++ return xencomm_hypercall_physdev_op(cmd, arg);
++ }
+}
+
+extern fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs);
@@ -77554,14 +79187,53 @@
+ return ret;
+}
+
++#ifdef CONFIG_XEN_IA64_EXPOSE_P2M
++static inline unsigned long
++HYPERVISOR_expose_p2m(unsigned long conv_start_gpfn,
++ unsigned long assign_start_gpfn,
++ unsigned long expose_size, unsigned long granule_pfn)
++{
++ return _hypercall5(unsigned long, ia64_dom0vp_op,
++ IA64_DOM0VP_expose_p2m, conv_start_gpfn,
++ assign_start_gpfn, expose_size, granule_pfn);
++}
++#endif
++
+// for balloon driver
+#define HYPERVISOR_update_va_mapping(va, new_val, flags) (0)
+
++/* Use xencomm to do hypercalls. */
++#ifdef MODULE
++#define HYPERVISOR_sched_op xencomm_mini_hypercall_sched_op
++#define HYPERVISOR_event_channel_op xencomm_mini_hypercall_event_channel_op
++#define HYPERVISOR_callback_op xencomm_mini_hypercall_callback_op
++#define HYPERVISOR_multicall xencomm_mini_hypercall_multicall
++#define HYPERVISOR_xen_version xencomm_mini_hypercall_xen_version
++#define HYPERVISOR_console_io xencomm_mini_hypercall_console_io
++#define HYPERVISOR_hvm_op xencomm_mini_hypercall_hvm_op
++#ifdef CONFIG_VMX_GUEST
++#define HYPERVISOR_memory_op 0
++#else
++#define HYPERVISOR_memory_op xencomm_mini_hypercall_memory_op
++#endif
++#else
++#define HYPERVISOR_sched_op xencomm_hypercall_sched_op
++#define HYPERVISOR_event_channel_op xencomm_hypercall_event_channel_op
++#define HYPERVISOR_callback_op xencomm_hypercall_callback_op
++#define HYPERVISOR_multicall xencomm_hypercall_multicall
++#define HYPERVISOR_xen_version xencomm_hypercall_xen_version
++#define HYPERVISOR_console_io xencomm_hypercall_console_io
++#define HYPERVISOR_hvm_op xencomm_hypercall_hvm_op
++#define HYPERVISOR_memory_op xencomm_hypercall_memory_op
++#endif
++
++#define HYPERVISOR_suspend xencomm_hypercall_suspend
++
+#endif /* __HYPERCALL_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/hypervisor.h linux-2.6.18-xen/include/asm-ia64/hypervisor.h
---- linux-2.6.18/include/asm-ia64/hypervisor.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/include/asm-ia64/hypervisor.h 2006-09-21 01:33:32.000000000 +0200
-@@ -0,0 +1,218 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/hypervisor.h linux-2.6.18-xen/include/asm-ia64/hypervisor.h
+--- linux-2.6.18.1/include/asm-ia64/hypervisor.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/include/asm-ia64/hypervisor.h 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,208 @@
+/******************************************************************************
+ * hypervisor.h
+ *
@@ -77638,9 +79310,6 @@
+{
+ int rc = HYPERVISOR_sched_op(SCHEDOP_yield, NULL);
+
-+ if (rc == -ENOSYS)
-+ rc = HYPERVISOR_sched_op_compat(SCHEDOP_yield, 0);
-+
+ return rc;
+}
+
@@ -77650,9 +79319,6 @@
+{
+ int rc = HYPERVISOR_sched_op(SCHEDOP_block, NULL);
+
-+ if (rc == -ENOSYS)
-+ rc = HYPERVISOR_sched_op_compat(SCHEDOP_block, 0);
-+
+ return rc;
+}
+
@@ -77666,9 +79332,6 @@
+
+ int rc = HYPERVISOR_sched_op(SCHEDOP_shutdown, &sched_shutdown);
+
-+ if (rc == -ENOSYS)
-+ rc = HYPERVISOR_sched_op_compat(SCHEDOP_shutdown, reason);
-+
+ return rc;
+}
+
@@ -77685,8 +79348,6 @@
+
+ set_xen_guest_handle(sched_poll.ports, ports);
+ rc = HYPERVISOR_sched_op(SCHEDOP_poll, &sched_poll);
-+ if (rc == -ENOSYS)
-+ rc = HYPERVISOR_sched_op_compat(SCHEDOP_yield, 0);
+
+ return rc;
+}
@@ -77703,6 +79364,7 @@
+ pgprot_t prot,
+ domid_t domid);
+struct file;
++int privcmd_enforce_singleshot_mapping(struct vm_area_struct *vma);
+int privcmd_mmap(struct file * file, struct vm_area_struct * vma);
+#define HAVE_ARCH_PRIVCMD_MMAP
+
@@ -77780,8 +79442,8 @@
+#endif
+
+#endif /* __HYPERVISOR_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/intel_intrin.h linux-2.6.18-xen/include/asm-ia64/intel_intrin.h
---- linux-2.6.18/include/asm-ia64/intel_intrin.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/intel_intrin.h linux-2.6.18-xen/include/asm-ia64/intel_intrin.h
+--- linux-2.6.18.1/include/asm-ia64/intel_intrin.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-ia64/intel_intrin.h 2006-09-04 16:31:16.000000000 +0200
@@ -16,8 +16,10 @@
* intrinsic
@@ -77906,8 +79568,8 @@
#define __builtin_trap() __break(0);
#endif /* _ASM_IA64_INTEL_INTRIN_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/io.h linux-2.6.18-xen/include/asm-ia64/io.h
---- linux-2.6.18/include/asm-ia64/io.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/io.h linux-2.6.18-xen/include/asm-ia64/io.h
+--- linux-2.6.18.1/include/asm-ia64/io.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-ia64/io.h 2006-09-04 16:31:16.000000000 +0200
@@ -66,9 +66,11 @@
#define PIO_RESERVED __IA64_UNCACHED_OFFSET
@@ -77963,8 +79625,8 @@
# endif /* KERNEL */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/iosapic.h linux-2.6.18-xen/include/asm-ia64/iosapic.h
---- linux-2.6.18/include/asm-ia64/iosapic.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/iosapic.h linux-2.6.18-xen/include/asm-ia64/iosapic.h
+--- linux-2.6.18.1/include/asm-ia64/iosapic.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-ia64/iosapic.h 2006-09-04 16:31:16.000000000 +0200
@@ -53,6 +53,7 @@
@@ -77982,8 +79644,8 @@
static inline void iosapic_eoi(char __iomem *iosapic, u32 vector)
{
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/irq.h linux-2.6.18-xen/include/asm-ia64/irq.h
---- linux-2.6.18/include/asm-ia64/irq.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/irq.h linux-2.6.18-xen/include/asm-ia64/irq.h
+--- linux-2.6.18.1/include/asm-ia64/irq.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-ia64/irq.h 2006-09-04 16:31:16.000000000 +0200
@@ -11,8 +11,39 @@
* 02/29/00 D.Mosberger moved most things into hw_irq.h
@@ -78025,8 +79687,8 @@
static __inline__ int
irq_canonicalize (int irq)
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/machvec_dig.h linux-2.6.18-xen/include/asm-ia64/machvec_dig.h
---- linux-2.6.18/include/asm-ia64/machvec_dig.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/machvec_dig.h linux-2.6.18-xen/include/asm-ia64/machvec_dig.h
+--- linux-2.6.18.1/include/asm-ia64/machvec_dig.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-ia64/machvec_dig.h 2006-09-21 01:33:32.000000000 +0200
@@ -13,4 +13,19 @@
#define platform_name "dig"
@@ -78048,10 +79710,10 @@
+#endif
+
#endif /* _ASM_IA64_MACHVEC_DIG_h */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/maddr.h linux-2.6.18-xen/include/asm-ia64/maddr.h
---- linux-2.6.18/include/asm-ia64/maddr.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/include/asm-ia64/maddr.h 2006-09-21 01:33:32.000000000 +0200
-@@ -0,0 +1,92 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/maddr.h linux-2.6.18-xen/include/asm-ia64/maddr.h
+--- linux-2.6.18.1/include/asm-ia64/maddr.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/include/asm-ia64/maddr.h 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,107 @@
+#ifndef _ASM_IA64_MADDR_H
+#define _ASM_IA64_MADDR_H
+
@@ -78064,11 +79726,26 @@
+
+#define INVALID_P2M_ENTRY (~0UL)
+
++#ifdef CONFIG_XEN_IA64_EXPOSE_P2M
++extern int p2m_initialized;
++extern unsigned long p2m_min_low_pfn;
++extern unsigned long p2m_max_low_pfn;
++extern unsigned long p2m_convert_min_pfn;
++extern unsigned long p2m_convert_max_pfn;
++extern volatile const pte_t* p2m_pte;
++unsigned long p2m_phystomach(unsigned long gpfn);
++#else
++#define p2m_initialized (0)
++#define p2m_phystomach(gpfn) INVALID_MFN
++#endif
++
+/* XXX xen page size != page size */
+static inline unsigned long
+pfn_to_mfn_for_dma(unsigned long pfn)
+{
+ unsigned long mfn;
++ if (p2m_initialized)
++ return p2m_phystomach(pfn);
+ mfn = HYPERVISOR_phystomach(pfn);
+ BUG_ON(mfn == 0); // XXX
+ BUG_ON(mfn == INVALID_P2M_ENTRY); // XXX
@@ -78144,8 +79821,8 @@
+typedef unsigned long maddr_t; // to compile netback, netfront
+
+#endif /* _ASM_IA64_MADDR_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/meminit.h linux-2.6.18-xen/include/asm-ia64/meminit.h
---- linux-2.6.18/include/asm-ia64/meminit.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/meminit.h linux-2.6.18-xen/include/asm-ia64/meminit.h
+--- linux-2.6.18.1/include/asm-ia64/meminit.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-ia64/meminit.h 2006-09-04 16:31:16.000000000 +0200
@@ -16,10 +16,15 @@
* - command line string
@@ -78163,8 +79840,8 @@
struct rsvd_region {
unsigned long start; /* virtual address of beginning of element */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/page.h linux-2.6.18-xen/include/asm-ia64/page.h
---- linux-2.6.18/include/asm-ia64/page.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/page.h linux-2.6.18-xen/include/asm-ia64/page.h
+--- linux-2.6.18.1/include/asm-ia64/page.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-ia64/page.h 2006-09-21 01:33:32.000000000 +0200
@@ -126,7 +126,9 @@
# define pfn_valid(pfn) (((pfn) >= min_low_pfn) && ((pfn) < max_low_pfn) && ia64_pfn_valid(pfn))
@@ -78230,8 +79907,8 @@
+#endif /* __ASSEMBLY__ */
# endif /* __KERNEL__ */
#endif /* _ASM_IA64_PAGE_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/pal.h linux-2.6.18-xen/include/asm-ia64/pal.h
---- linux-2.6.18/include/asm-ia64/pal.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/pal.h linux-2.6.18-xen/include/asm-ia64/pal.h
+--- linux-2.6.18.1/include/asm-ia64/pal.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-ia64/pal.h 2006-09-04 16:31:16.000000000 +0200
@@ -82,6 +82,7 @@
#ifndef __ASSEMBLY__
@@ -78241,8 +79918,8 @@
#include <asm/fpu.h>
/*
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/pgalloc.h linux-2.6.18-xen/include/asm-ia64/pgalloc.h
---- linux-2.6.18/include/asm-ia64/pgalloc.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/pgalloc.h linux-2.6.18-xen/include/asm-ia64/pgalloc.h
+--- linux-2.6.18.1/include/asm-ia64/pgalloc.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-ia64/pgalloc.h 2006-09-04 16:31:16.000000000 +0200
@@ -125,7 +125,11 @@
static inline void
@@ -78256,8 +79933,8 @@
}
static inline void
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/privop.h linux-2.6.18-xen/include/asm-ia64/privop.h
---- linux-2.6.18/include/asm-ia64/privop.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/privop.h linux-2.6.18-xen/include/asm-ia64/privop.h
+--- linux-2.6.18.1/include/asm-ia64/privop.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-ia64/privop.h 2006-09-04 16:31:17.000000000 +0200
@@ -0,0 +1,59 @@
+#ifndef _ASM_IA64_PRIVOP_H
@@ -78319,8 +79996,8 @@
+#endif /* !__ASSEMBLY */
+
+#endif /* _ASM_IA64_PRIVOP_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/processor.h linux-2.6.18-xen/include/asm-ia64/processor.h
---- linux-2.6.18/include/asm-ia64/processor.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/processor.h linux-2.6.18-xen/include/asm-ia64/processor.h
+--- linux-2.6.18.1/include/asm-ia64/processor.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-ia64/processor.h 2006-09-04 16:31:17.000000000 +0200
@@ -18,6 +18,7 @@
#include <asm/kregs.h>
@@ -78330,8 +80007,8 @@
#define IA64_NUM_DBG_REGS 8
/*
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/synch_bitops.h linux-2.6.18-xen/include/asm-ia64/synch_bitops.h
---- linux-2.6.18/include/asm-ia64/synch_bitops.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/synch_bitops.h linux-2.6.18-xen/include/asm-ia64/synch_bitops.h
+--- linux-2.6.18.1/include/asm-ia64/synch_bitops.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-ia64/synch_bitops.h 2006-09-04 16:31:17.000000000 +0200
@@ -0,0 +1,61 @@
+#ifndef __XEN_SYNCH_BITOPS_H__
@@ -78395,8 +80072,8 @@
+#define synch_cmpxchg_subword synch_cmpxchg
+
+#endif /* __XEN_SYNCH_BITOPS_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/system.h linux-2.6.18-xen/include/asm-ia64/system.h
---- linux-2.6.18/include/asm-ia64/system.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/system.h linux-2.6.18-xen/include/asm-ia64/system.h
+--- linux-2.6.18.1/include/asm-ia64/system.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-ia64/system.h 2006-09-04 16:31:17.000000000 +0200
@@ -123,7 +123,7 @@
#define __local_irq_save(x) \
@@ -78416,10 +80093,10 @@
#define irqs_disabled() \
({ \
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/xen/privop.h linux-2.6.18-xen/include/asm-ia64/xen/privop.h
---- linux-2.6.18/include/asm-ia64/xen/privop.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/include/asm-ia64/xen/privop.h 2006-09-04 16:31:17.000000000 +0200
-@@ -0,0 +1,304 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/xen/privop.h linux-2.6.18-xen/include/asm-ia64/xen/privop.h
+--- linux-2.6.18.1/include/asm-ia64/xen/privop.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/include/asm-ia64/xen/privop.h 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,301 @@
+#ifndef _ASM_IA64_XEN_PRIVOP_H
+#define _ASM_IA64_XEN_PRIVOP_H
+
@@ -78436,12 +80113,9 @@
+
+#define IA64_PARAVIRTUALIZED
+
-+#if 0
-+#undef XSI_BASE
+/* At 1 MB, before per-cpu space but still addressable using addl instead
+ of movl. */
+#define XSI_BASE 0xfffffffffff00000
-+#endif
+
+/* Address of mapped regs. */
+#define XMAPPEDREGS_BASE (XSI_BASE + XSI_SIZE)
@@ -78724,8 +80398,147 @@
+#define ia64_pal_call_static xen_pal_call_static
+
+#endif /* _ASM_IA64_XEN_PRIVOP_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-um/page.h linux-2.6.18-xen/include/asm-um/page.h
---- linux-2.6.18/include/asm-um/page.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/xen/xcom_hcall.h linux-2.6.18-xen/include/asm-ia64/xen/xcom_hcall.h
+--- linux-2.6.18.1/include/asm-ia64/xen/xcom_hcall.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/include/asm-ia64/xen/xcom_hcall.h 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,74 @@
++/*
++ * Copyright (C) 2006 Tristan Gingold <tristan.gingold at bull.net>, Bull SAS
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#ifndef _LINUX_XENCOMM_HCALL_H_
++#define _LINUX_XENCOMM_HCALL_H_
++
++/* These function creates inline descriptor for the parameters and
++ calls the corresponding xencomm_arch_hypercall_X.
++ Architectures should defines HYPERVISOR_xxx as xencomm_hypercall_xxx unless
++ they want to use their own wrapper. */
++extern int xencomm_hypercall_console_io(int cmd, int count, char *str);
++
++extern int xencomm_hypercall_event_channel_op(int cmd, void *op);
++
++extern int xencomm_hypercall_xen_version(int cmd, void *arg);
++
++extern int xencomm_hypercall_physdev_op(int cmd, void *op);
++
++extern int xencomm_hypercall_grant_table_op(unsigned int cmd, void *op,
++ unsigned int count);
++
++extern int xencomm_hypercall_sched_op(int cmd, void *arg);
++
++extern int xencomm_hypercall_multicall(void *call_list, int nr_calls);
++
++extern int xencomm_hypercall_callback_op(int cmd, void *arg);
++
++extern int xencomm_hypercall_memory_op(unsigned int cmd, void *arg);
++
++extern unsigned long xencomm_hypercall_hvm_op(int cmd, void *arg);
++
++extern int xencomm_hypercall_suspend(unsigned long srec);
++
++/* Using mini xencomm. */
++extern int xencomm_mini_hypercall_console_io(int cmd, int count, char *str);
++
++extern int xencomm_mini_hypercall_event_channel_op(int cmd, void *op);
++
++extern int xencomm_mini_hypercall_xen_version(int cmd, void *arg);
++
++extern int xencomm_mini_hypercall_physdev_op(int cmd, void *op);
++
++extern int xencomm_mini_hypercall_grant_table_op(unsigned int cmd, void *op,
++ unsigned int count);
++
++extern int xencomm_mini_hypercall_sched_op(int cmd, void *arg);
++
++extern int xencomm_mini_hypercall_multicall(void *call_list, int nr_calls);
++
++extern int xencomm_mini_hypercall_callback_op(int cmd, void *arg);
++
++extern int xencomm_mini_hypercall_memory_op(unsigned int cmd, void *arg);
++
++/* For privcmd. Locally declare argument type to avoid include storm.
++ Type coherency will be checked within privcmd.c */
++struct privcmd_hypercall;
++extern int privcmd_hypercall(struct privcmd_hypercall *hypercall);
++
++#endif /* _LINUX_XENCOMM_HCALL_H_ */
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-ia64/xen/xencomm.h linux-2.6.18-xen/include/asm-ia64/xen/xencomm.h
+--- linux-2.6.18.1/include/asm-ia64/xen/xencomm.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/include/asm-ia64/xen/xencomm.h 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,57 @@
++/*
++ * Copyright (C) 2006 Hollis Blanchard <hollisb at us.ibm.com>, IBM Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#ifndef _LINUX_XENCOMM_H_
++#define _LINUX_XENCOMM_H_
++
++#include <xen/interface/xencomm.h>
++
++#define XENCOMM_MINI_ADDRS 3
++struct xencomm_mini {
++ struct xencomm_desc _desc;
++ uint64_t address[XENCOMM_MINI_ADDRS];
++};
++
++/* To avoid additionnal virt to phys conversion, an opaque structure is
++ presented. */
++struct xencomm_handle;
++
++extern int xencomm_create(void *buffer, unsigned long bytes,
++ struct xencomm_handle **desc, gfp_t type);
++extern void xencomm_free(struct xencomm_handle *desc);
++
++extern int xencomm_create_mini(struct xencomm_mini *area, int *nbr_area,
++ void *buffer, unsigned long bytes,
++ struct xencomm_handle **ret);
++
++/* Translate virtual address to physical address. */
++extern unsigned long xencomm_vaddr_to_paddr(unsigned long vaddr);
++
++/* Inline version. To be used only on linear space (kernel space). */
++static inline struct xencomm_handle *
++xencomm_create_inline(void *buffer)
++{
++ unsigned long paddr;
++
++ paddr = xencomm_vaddr_to_paddr((unsigned long)buffer);
++ return (struct xencomm_handle *)(paddr | XENCOMM_INLINE_FLAG);
++}
++
++#define xen_guest_handle(hnd) ((hnd).p)
++
++#endif /* _LINUX_XENCOMM_H_ */
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-um/page.h linux-2.6.18-xen/include/asm-um/page.h
+--- linux-2.6.18.1/include/asm-um/page.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-um/page.h 2006-09-04 16:31:18.000000000 +0200
@@ -114,7 +114,7 @@
extern struct page *arch_validate(struct page *page, gfp_t mask, int order);
@@ -78736,8 +80549,8 @@
#define HAVE_ARCH_FREE_PAGE
#include <asm-generic/memory_model.h>
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/apic.h linux-2.6.18-xen/include/asm-x86_64/apic.h
---- linux-2.6.18/include/asm-x86_64/apic.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/apic.h linux-2.6.18-xen/include/asm-x86_64/apic.h
+--- linux-2.6.18.1/include/asm-x86_64/apic.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-x86_64/apic.h 2006-09-04 16:31:18.000000000 +0200
@@ -98,11 +98,13 @@
extern int disable_timer_pin_1;
@@ -78753,8 +80566,8 @@
#endif /* CONFIG_X86_LOCAL_APIC */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/ipi.h linux-2.6.18-xen/include/asm-x86_64/ipi.h
---- linux-2.6.18/include/asm-x86_64/ipi.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/ipi.h linux-2.6.18-xen/include/asm-x86_64/ipi.h
+--- linux-2.6.18.1/include/asm-x86_64/ipi.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/asm-x86_64/ipi.h 2006-09-21 01:33:32.000000000 +0200
@@ -49,6 +49,7 @@
return SET_APIC_DEST_FIELD(mask);
@@ -78771,8 +80584,8 @@
+#endif /* CONFIG_XEN_UNPRIVILEGED_GUEST */
#endif /* __ASM_IPI_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/arch_hooks.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/arch_hooks.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/arch_hooks.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/arch_hooks.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/arch_hooks.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/arch_hooks.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/arch_hooks.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,27 @@
+#ifndef _ASM_ARCH_HOOKS_H
@@ -78802,8 +80615,8 @@
+extern void mca_nmi_hook(void);
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/bootsetup.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/bootsetup.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/bootsetup.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/bootsetup.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/bootsetup.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/bootsetup.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/bootsetup.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,42 @@
+
@@ -78848,8 +80661,8 @@
+#define RAMDISK_LOAD_FLAG 0x4000
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/desc.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/desc.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/desc.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/desc.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/desc.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/desc.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/desc.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,263 @@
+/* Written 2000 by Andi Kleen */
@@ -79115,8 +80928,8 @@
+#endif /* !__ASSEMBLY__ */
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/dma-mapping.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/dma-mapping.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/dma-mapping.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/dma-mapping.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/dma-mapping.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/dma-mapping.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/dma-mapping.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,208 @@
+#ifndef _X8664_DMA_MAPPING_H
@@ -79327,8 +81140,8 @@
+#endif /* _X8664_DMA_MAPPING_H */
+
+#include <asm-i386/mach-xen/asm/dma-mapping.h>
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/dmi.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/dmi.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/dmi.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/dmi.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/dmi.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/dmi.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/dmi.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,29 @@
+#ifndef _ASM_DMI_H
@@ -79360,8 +81173,8 @@
+#define dmi_iounmap bt_iounmap
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/e820.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/e820.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/e820.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/e820.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/e820.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/e820.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/e820.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,64 @@
+/*
@@ -79428,8 +81241,8 @@
+#endif/*!__ASSEMBLY__*/
+
+#endif/*__E820_HEADER*/
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/fixmap.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/fixmap.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/fixmap.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/fixmap.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/fixmap.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/fixmap.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/fixmap.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,113 @@
+/*
@@ -79545,8 +81358,8 @@
+}
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/floppy.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/floppy.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/floppy.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/floppy.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/floppy.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/floppy.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/floppy.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,206 @@
+/*
@@ -79755,8 +81568,8 @@
+#define EXTRA_FLOPPY_PARAMS
+
+#endif /* __ASM_XEN_X86_64_FLOPPY_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/hw_irq.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/hw_irq.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/hw_irq.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/hw_irq.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/hw_irq.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/hw_irq.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/hw_irq.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,136 @@
+#ifndef _ASM_HW_IRQ_H
@@ -79895,8 +81708,8 @@
+#endif
+
+#endif /* _ASM_HW_IRQ_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/hypercall.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/hypercall.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/hypercall.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/hypercall.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/hypercall.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/hypercall.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/hypercall.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,389 @@
+/******************************************************************************
@@ -80288,14 +82101,14 @@
+}
+
+#endif /* __HYPERCALL_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/hypervisor.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/hypervisor.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/hypervisor.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/hypervisor.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/hypervisor.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/hypervisor.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/hypervisor.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,2 @@
+
+#include <asm-i386/mach-xen/asm/hypervisor.h>
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/io.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/io.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/io.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/io.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/io.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/io.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/io.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,327 @@
+#ifndef _ASM_IO_H
@@ -80625,8 +82438,8 @@
+#define ARCH_HAS_DEV_MEM
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/irqflags.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/irqflags.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/irqflags.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/irqflags.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/irqflags.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/irqflags.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/irqflags.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,65 @@
+/*
@@ -80694,8 +82507,8 @@
+#endif
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/irq.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/irq.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/irq.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/irq.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/irq.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/irq.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/irq.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,38 @@
+#ifndef _ASM_IRQ_H
@@ -80736,8 +82549,8 @@
+#define __ARCH_HAS_DO_SOFTIRQ 1
+
+#endif /* _ASM_IRQ_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/maddr.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/maddr.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/maddr.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/maddr.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/maddr.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/maddr.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/maddr.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,139 @@
+#ifndef _X86_64_MADDR_H
@@ -80879,8 +82692,8 @@
+
+#endif /* _X86_64_MADDR_H */
+
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/mmu_context.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/mmu_context.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/mmu_context.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/mmu_context.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/mmu_context.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/mmu_context.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/mmu_context.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,135 @@
+#ifndef __X86_64_MMU_CONTEXT_H
@@ -81018,8 +82831,8 @@
+}
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/mmu.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/mmu.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/mmu.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/mmu.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/mmu.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/mmu.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/mmu.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,38 @@
+#ifndef __x86_64_MMU_H
@@ -81060,8 +82873,8 @@
+#endif
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/msr.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/msr.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/msr.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/msr.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/msr.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/msr.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/msr.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,399 @@
+#ifndef X86_64_MSR_H
@@ -81463,8 +83276,8 @@
+#define MSR_P4_U2L_ESCR1 0x3b1
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/nmi.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/nmi.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/nmi.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/nmi.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/nmi.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/nmi.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/nmi.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,93 @@
+/*
@@ -81560,8 +83373,8 @@
+#define NMI_INVALID 3
+
+#endif /* ASM_NMI_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/page.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/page.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/page.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/page.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/page.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/page.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/page.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,208 @@
+#ifndef _X86_64_PAGE_H
@@ -81772,8 +83585,8 @@
+#endif /* __KERNEL__ */
+
+#endif /* _X86_64_PAGE_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/param.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/param.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/param.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/param.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/param.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/param.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/param.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,22 @@
+#ifndef _ASMx86_64_PARAM_H
@@ -81798,8 +83611,8 @@
+#define MAXHOSTNAMELEN 64 /* max length of hostname */
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/pci.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/pci.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/pci.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/pci.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/pci.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/pci.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/pci.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,173 @@
+#ifndef __x8664_PCI_H
@@ -81975,8 +83788,8 @@
+#define pcibios_scan_all_fns(a, b) 1
+
+#endif /* __x8664_PCI_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/pgalloc.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/pgalloc.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/pgalloc.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/pgalloc.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/pgalloc.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/pgalloc.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/pgalloc.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,226 @@
+#ifndef _X86_64_PGALLOC_H
@@ -82205,8 +84018,8 @@
+#define __pud_free_tlb(tlb,x) pud_free((x))
+
+#endif /* _X86_64_PGALLOC_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/pgtable.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/pgtable.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/pgtable.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/pgtable.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/pgtable.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/pgtable.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/pgtable.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,558 @@
+#ifndef _X86_64_PGTABLE_H
@@ -82767,8 +84580,8 @@
+#include <asm-generic/pgtable.h>
+
+#endif /* _X86_64_PGTABLE_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/processor.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/processor.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/processor.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/processor.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/processor.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/processor.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/processor.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,504 @@
+/*
@@ -83275,8 +85088,8 @@
+#define HAVE_ARCH_PICK_MMAP_LAYOUT 1
+
+#endif /* __ASM_X86_64_PROCESSOR_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/ptrace.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/ptrace.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/ptrace.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/ptrace.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/ptrace.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/ptrace.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/ptrace.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,125 @@
+#ifndef _X86_64_PTRACE_H
@@ -83404,8 +85217,8 @@
+#endif
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/smp.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/smp.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/smp.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/smp.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/smp.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/smp.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/smp.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,150 @@
+#ifndef __ASM_SMP_H
@@ -83558,14 +85371,14 @@
+
+#endif
+
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/synch_bitops.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/synch_bitops.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/synch_bitops.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/synch_bitops.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/synch_bitops.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/synch_bitops.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/synch_bitops.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,2 @@
+
+#include <asm-i386/mach-xen/asm/synch_bitops.h>
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/system.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/system.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/system.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/system.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/system.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/system.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/system.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,264 @@
+#ifndef __ASM_SYSTEM_H
@@ -83832,8 +85645,8 @@
+extern void free_init_pages(char *what, unsigned long begin, unsigned long end);
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/timer.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/timer.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/timer.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/timer.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/timer.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/timer.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/timer.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,67 @@
+#ifndef _ASMi386_TIMER_H
@@ -83903,8 +85716,8 @@
+extern struct init_timer_opts timer_pmtmr_init;
+#endif
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/tlbflush.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/tlbflush.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/tlbflush.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/tlbflush.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/tlbflush.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/tlbflush.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/tlbflush.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,103 @@
+#ifndef _X8664_TLBFLUSH_H
@@ -84010,8 +85823,8 @@
+}
+
+#endif /* _X8664_TLBFLUSH_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/vga.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/vga.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/vga.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/vga.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/vga.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/vga.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/vga.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,20 @@
+/*
@@ -84034,8 +85847,8 @@
+#define vga_writeb(x,y) (*(y) = (x))
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/xor.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/xor.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/xor.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/xor.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/xor.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/asm/xor.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/xor.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,328 @@
+/*
@@ -84366,8 +86179,8 @@
+ We may also be able to load into the L1 only depending on how the cpu
+ deals with a load to a line that is being prefetched. */
+#define XOR_SELECT_TEMPLATE(FASTEST) (&xor_block_sse)
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/irq_vectors.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/irq_vectors.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/irq_vectors.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/irq_vectors.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/irq_vectors.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/irq_vectors.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/irq_vectors.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,123 @@
+/*
@@ -84493,8 +86306,8 @@
+#define irq_to_dynirq(_x) ((_x) - DYNIRQ_BASE)
+
+#endif /* _ASM_IRQ_VECTORS_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/mach_time.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/mach_time.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/mach_time.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/mach_time.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/mach_time.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/mach_time.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/mach_time.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,111 @@
+/*
@@ -84608,8 +86421,8 @@
+}
+
+#endif /* !_MACH_TIME_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/mach_timer.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/mach_timer.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/mach_timer.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/mach_timer.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/mach_timer.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/mach_timer.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/mach_timer.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,48 @@
+/*
@@ -84660,8 +86473,8 @@
+}
+
+#endif /* !_MACH_TIMER_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/setup_arch_post.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/setup_arch_post.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/setup_arch_post.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/setup_arch_post.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/setup_arch_post.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/setup_arch_post.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/setup_arch_post.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,58 @@
+/**
@@ -84722,8 +86535,8 @@
+ }
+#endif
+}
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/setup_arch_pre.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/setup_arch_pre.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/setup_arch_pre.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/asm-x86_64/mach-xen/setup_arch_pre.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/setup_arch_pre.h
+--- linux-2.6.18.1/include/asm-x86_64/mach-xen/setup_arch_pre.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/setup_arch_pre.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,5 @@
+/* Hook to call BIOS initialisation function */
@@ -84731,8 +86544,8 @@
+#define ARCH_SETUP machine_specific_arch_setup();
+
+static void __init machine_specific_arch_setup(void);
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/linux/elfnote.h linux-2.6.18-xen/include/linux/elfnote.h
---- linux-2.6.18/include/linux/elfnote.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/linux/elfnote.h linux-2.6.18-xen/include/linux/elfnote.h
+--- linux-2.6.18.1/include/linux/elfnote.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/linux/elfnote.h 2006-09-04 16:31:18.000000000 +0200
@@ -0,0 +1,90 @@
+#ifndef _LINUX_ELFNOTE_H
@@ -84825,8 +86638,8 @@
+#endif /* __ASSEMBLER__ */
+
+#endif /* _LINUX_ELFNOTE_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/linux/gfp.h linux-2.6.18-xen/include/linux/gfp.h
---- linux-2.6.18/include/linux/gfp.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/linux/gfp.h linux-2.6.18-xen/include/linux/gfp.h
+--- linux-2.6.18.1/include/linux/gfp.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/linux/gfp.h 2006-09-04 16:31:18.000000000 +0200
@@ -99,7 +99,11 @@
*/
@@ -84841,8 +86654,8 @@
#endif
extern struct page *
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/linux/highmem.h linux-2.6.18-xen/include/linux/highmem.h
---- linux-2.6.18/include/linux/highmem.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/linux/highmem.h linux-2.6.18-xen/include/linux/highmem.h
+--- linux-2.6.18.1/include/linux/highmem.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/linux/highmem.h 2006-09-04 16:31:18.000000000 +0200
@@ -24,10 +24,16 @@
@@ -84861,8 +86674,8 @@
static inline void *kmap(struct page *page)
{
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/linux/interrupt.h linux-2.6.18-xen/include/linux/interrupt.h
---- linux-2.6.18/include/linux/interrupt.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/linux/interrupt.h linux-2.6.18-xen/include/linux/interrupt.h
+--- linux-2.6.18.1/include/linux/interrupt.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/linux/interrupt.h 2006-09-04 16:31:18.000000000 +0200
@@ -166,6 +166,12 @@
@@ -84877,8 +86690,8 @@
#ifndef __ARCH_SET_SOFTIRQ_PENDING
#define set_softirq_pending(x) (local_softirq_pending() = (x))
#define or_softirq_pending(x) (local_softirq_pending() |= (x))
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/linux/mm.h linux-2.6.18-xen/include/linux/mm.h
---- linux-2.6.18/include/linux/mm.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/linux/mm.h linux-2.6.18-xen/include/linux/mm.h
+--- linux-2.6.18.1/include/linux/mm.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/linux/mm.h 2006-09-04 16:31:19.000000000 +0200
@@ -164,6 +164,9 @@
#define VM_NONLINEAR 0x00800000 /* Is non-linear (remap_file_pages) */
@@ -84904,8 +86717,8 @@
#ifdef CONFIG_PROC_FS
void vm_stat_account(struct mm_struct *, unsigned long, struct file *, long);
#else
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/linux/oprofile.h linux-2.6.18-xen/include/linux/oprofile.h
---- linux-2.6.18/include/linux/oprofile.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/linux/oprofile.h linux-2.6.18-xen/include/linux/oprofile.h
+--- linux-2.6.18.1/include/linux/oprofile.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/linux/oprofile.h 2006-09-04 16:31:19.000000000 +0200
@@ -16,6 +16,10 @@
#include <linux/types.h>
@@ -84939,8 +86752,22 @@
/**
* Create a file of the given name as a child of the given root, with
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/linux/skbuff.h linux-2.6.18-xen/include/linux/skbuff.h
---- linux-2.6.18/include/linux/skbuff.h 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/linux/pfn.h linux-2.6.18-xen/include/linux/pfn.h
+--- linux-2.6.18.1/include/linux/pfn.h 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/include/linux/pfn.h 2006-10-17 15:01:58.000000000 +0200
+@@ -4,6 +4,10 @@
+ #define PFN_ALIGN(x) (((unsigned long)(x) + (PAGE_SIZE - 1)) & PAGE_MASK)
+ #define PFN_UP(x) (((x) + PAGE_SIZE-1) >> PAGE_SHIFT)
+ #define PFN_DOWN(x) ((x) >> PAGE_SHIFT)
++#if defined(CONFIG_X86_XEN) && defined(CONFIG_X86_PAE)
++#define PFN_PHYS(x) ((unsigned long long)(x) << PAGE_SHIFT)
++#else
+ #define PFN_PHYS(x) ((x) << PAGE_SHIFT)
++#endif
+
+ #endif
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/linux/skbuff.h linux-2.6.18-xen/include/linux/skbuff.h
+--- linux-2.6.18.1/include/linux/skbuff.h 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/include/linux/skbuff.h 2006-09-04 16:31:19.000000000 +0200
@@ -203,6 +203,8 @@
* @local_df: allow local fragmentation
@@ -84993,10 +86820,10 @@
/**
* dev_alloc_skb - allocate an skbuff for receiving
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/balloon.h linux-2.6.18-xen/include/xen/balloon.h
---- linux-2.6.18/include/xen/balloon.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/include/xen/balloon.h 2006-09-04 16:31:19.000000000 +0200
-@@ -0,0 +1,67 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/balloon.h linux-2.6.18-xen/include/xen/balloon.h
+--- linux-2.6.18.1/include/xen/balloon.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/include/xen/balloon.h 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,57 @@
+/******************************************************************************
+ * balloon.h
+ *
@@ -85037,23 +86864,13 @@
+ * Inform the balloon driver that it should allow some slop for device-driver
+ * memory activities.
+ */
-+void
-+balloon_update_driver_allowance(
-+ long delta);
-+
-+/* Allocate an empty low-memory page range. */
-+struct page *
-+balloon_alloc_empty_page_range(
-+ unsigned long nr_pages);
++void balloon_update_driver_allowance(long delta);
+
-+/* Deallocate an empty page range, adding to the balloon. */
-+void
-+balloon_dealloc_empty_page_range(
-+ struct page *page, unsigned long nr_pages);
++/* Allocate/free a set of empty pages in low memory (i.e., no RAM mapped). */
++struct page **alloc_empty_pages_and_pagevec(int nr_pages);
++void free_empty_pages_and_pagevec(struct page **pagevec, int nr_pages);
+
-+void
-+balloon_release_driver_page(
-+ struct page *page);
++void balloon_release_driver_page(struct page *page);
+
+/*
+ * Prevent the balloon driver from changing the memory reservation during
@@ -85064,8 +86881,8 @@
+#define balloon_unlock(__flags) spin_unlock_irqrestore(&balloon_lock, __flags)
+
+#endif /* __ASM_BALLOON_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/cpu_hotplug.h linux-2.6.18-xen/include/xen/cpu_hotplug.h
---- linux-2.6.18/include/xen/cpu_hotplug.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/cpu_hotplug.h linux-2.6.18-xen/include/xen/cpu_hotplug.h
+--- linux-2.6.18.1/include/xen/cpu_hotplug.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/cpu_hotplug.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,43 @@
+#ifndef __XEN_CPU_HOTPLUG_H__
@@ -85111,8 +86928,8 @@
+#endif /* !defined(CONFIG_HOTPLUG_CPU) */
+
+#endif /* __XEN_CPU_HOTPLUG_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/driver_util.h linux-2.6.18-xen/include/xen/driver_util.h
---- linux-2.6.18/include/xen/driver_util.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/driver_util.h linux-2.6.18-xen/include/xen/driver_util.h
+--- linux-2.6.18.1/include/xen/driver_util.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/driver_util.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,15 @@
+
@@ -85130,8 +86947,8 @@
+extern void unlock_vm_area(struct vm_struct *area);
+
+#endif /* __ASM_XEN_DRIVER_UTIL_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/evtchn.h linux-2.6.18-xen/include/xen/evtchn.h
---- linux-2.6.18/include/xen/evtchn.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/evtchn.h linux-2.6.18-xen/include/xen/evtchn.h
+--- linux-2.6.18.1/include/xen/evtchn.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/evtchn.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,113 @@
+/******************************************************************************
@@ -85247,8 +87064,8 @@
+extern void notify_remote_via_irq(int irq);
+
+#endif /* __ASM_EVTCHN_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/features.h linux-2.6.18-xen/include/xen/features.h
---- linux-2.6.18/include/xen/features.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/features.h linux-2.6.18-xen/include/xen/features.h
+--- linux-2.6.18.1/include/xen/features.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/features.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,20 @@
+/******************************************************************************
@@ -85271,8 +87088,8 @@
+#define xen_feature(flag) (xen_features[flag])
+
+#endif /* __ASM_XEN_FEATURES_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/foreign_page.h linux-2.6.18-xen/include/xen/foreign_page.h
---- linux-2.6.18/include/xen/foreign_page.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/foreign_page.h linux-2.6.18-xen/include/xen/foreign_page.h
+--- linux-2.6.18.1/include/xen/foreign_page.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/foreign_page.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,30 @@
+/******************************************************************************
@@ -85305,8 +87122,8 @@
+ ( (void (*) (struct page *)) (page)->mapping )
+
+#endif /* __ASM_XEN_FOREIGN_PAGE_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/gnttab.h linux-2.6.18-xen/include/xen/gnttab.h
---- linux-2.6.18/include/xen/gnttab.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/gnttab.h linux-2.6.18-xen/include/xen/gnttab.h
+--- linux-2.6.18.1/include/xen/gnttab.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/gnttab.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,150 @@
+/******************************************************************************
@@ -85459,8 +87276,8 @@
+}
+
+#endif /* __ASM_GNTTAB_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/hvm.h linux-2.6.18-xen/include/xen/hvm.h
---- linux-2.6.18/include/xen/hvm.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/hvm.h linux-2.6.18-xen/include/xen/hvm.h
+--- linux-2.6.18.1/include/xen/hvm.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/hvm.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,24 @@
+/* Simple wrappers around HVM functions */
@@ -85487,8 +87304,8 @@
+}
+
+#endif /* XEN_HVM_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/hypervisor_sysfs.h linux-2.6.18-xen/include/xen/hypervisor_sysfs.h
---- linux-2.6.18/include/xen/hypervisor_sysfs.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/hypervisor_sysfs.h linux-2.6.18-xen/include/xen/hypervisor_sysfs.h
+--- linux-2.6.18.1/include/xen/hypervisor_sysfs.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/hypervisor_sysfs.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,32 @@
+/*
@@ -85523,8 +87340,8 @@
+};
+
+#endif /* _HYP_SYSFS_H_ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/acm.h linux-2.6.18-xen/include/xen/interface/acm.h
---- linux-2.6.18/include/xen/interface/acm.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/acm.h linux-2.6.18-xen/include/xen/interface/acm.h
+--- linux-2.6.18.1/include/xen/interface/acm.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/acm.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,187 @@
+/*
@@ -85714,8 +87531,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/acm_ops.h linux-2.6.18-xen/include/xen/interface/acm_ops.h
---- linux-2.6.18/include/xen/interface/acm_ops.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/acm_ops.h linux-2.6.18-xen/include/xen/interface/acm_ops.h
+--- linux-2.6.18.1/include/xen/interface/acm_ops.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/acm_ops.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,102 @@
+/*
@@ -85820,10 +87637,10 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/arch-ia64.h linux-2.6.18-xen/include/xen/interface/arch-ia64.h
---- linux-2.6.18/include/xen/interface/arch-ia64.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/include/xen/interface/arch-ia64.h 2006-09-04 16:31:19.000000000 +0200
-@@ -0,0 +1,448 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/arch-ia64.h linux-2.6.18-xen/include/xen/interface/arch-ia64.h
+--- linux-2.6.18.1/include/xen/interface/arch-ia64.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/include/xen/interface/arch-ia64.h 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,444 @@
+/******************************************************************************
+ * arch-ia64/hypervisor-if.h
+ *
@@ -85874,18 +87691,6 @@
+
+typedef unsigned long xen_ulong_t;
+
-+#define GPFN_MEM (0UL << 56) /* Guest pfn is normal mem */
-+#define GPFN_FRAME_BUFFER (1UL << 56) /* VGA framebuffer */
-+#define GPFN_LOW_MMIO (2UL << 56) /* Low MMIO range */
-+#define GPFN_PIB (3UL << 56) /* PIB base */
-+#define GPFN_IOSAPIC (4UL << 56) /* IOSAPIC base */
-+#define GPFN_LEGACY_IO (5UL << 56) /* Legacy I/O base */
-+#define GPFN_GFW (6UL << 56) /* Guest Firmware */
-+#define GPFN_HIGH_MMIO (7UL << 56) /* High MMIO range */
-+
-+#define GPFN_IO_MASK (7UL << 56) /* Guest pfn is I/O type */
-+#define GPFN_INV_MASK (31UL << 59) /* Guest pfn is invalid */
-+
+#define INVALID_MFN (~0UL)
+
+#define MEM_G (1UL << 30)
@@ -86162,33 +87967,33 @@
+typedef struct vcpu_guest_context vcpu_guest_context_t;
+DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t);
+
-+// dom0 vp op
++/* dom0 vp op */
+#define __HYPERVISOR_ia64_dom0vp_op __HYPERVISOR_arch_0
-+#define IA64_DOM0VP_ioremap 0 // map io space in machine
-+ // address to dom0 physical
-+ // address space.
-+ // currently physical
-+ // assignedg address equals to
-+ // machine address
-+#define IA64_DOM0VP_phystomach 1 // convert a pseudo physical
-+ // page frame number
-+ // to the corresponding
-+ // machine page frame number.
-+ // if no page is assigned,
-+ // INVALID_MFN or GPFN_INV_MASK
-+ // is returned depending on
-+ // domain's non-vti/vti mode.
-+#define IA64_DOM0VP_machtophys 3 // convert a machine page
-+ // frame number
-+ // to the corresponding
-+ // pseudo physical page frame
-+ // number of the caller domain
-+#define IA64_DOM0VP_zap_physmap 17 // unmap and free pages
-+ // contained in the specified
-+ // pseudo physical region
-+#define IA64_DOM0VP_add_physmap 18 // assigne machine page frane
-+ // to dom0's pseudo physical
-+ // address space.
++/* Map io space in machine address to dom0 physical address space.
++ Currently physical assigned address equals to machine address. */
++#define IA64_DOM0VP_ioremap 0
++
++/* Convert a pseudo physical page frame number to the corresponding
++ machine page frame number. If no page is assigned, INVALID_MFN or
++ GPFN_INV_MASK is returned depending on domain's non-vti/vti mode. */
++#define IA64_DOM0VP_phystomach 1
++
++/* Convert a machine page frame number to the corresponding pseudo physical
++ page frame number of the caller domain. */
++#define IA64_DOM0VP_machtophys 3
++
++/* Reserved for future use. */
++#define IA64_DOM0VP_iounmap 4
++
++/* Unmap and free pages contained in the specified pseudo physical region. */
++#define IA64_DOM0VP_zap_physmap 5
++
++/* Assign machine page frame to dom0's pseudo physical address space. */
++#define IA64_DOM0VP_add_physmap 6
++
++/* expose the p2m table into domain */
++#define IA64_DOM0VP_expose_p2m 7
++
+// flags for page assignement to pseudo physical address space
+#define _ASSIGN_readonly 0
+#define ASSIGN_readonly (1UL << _ASSIGN_readonly)
@@ -86221,15 +88026,12 @@
+
+#endif /* !__ASSEMBLY__ */
+
-+/* Address of shared_info in domain virtual space.
-+ This is the default address, for compatibility only. */
-+#define XSI_BASE 0xf100000000000000
-+
+/* Size of the shared_info area (this is not related to page size). */
+#define XSI_SHIFT 14
+#define XSI_SIZE (1 << XSI_SHIFT)
+/* Log size of mapped_regs area (64 KB - only 4KB is used). */
+#define XMAPPEDREGS_SHIFT 12
++#define XMAPPEDREGS_SIZE (1 << XMAPPEDREGS_SHIFT)
+/* Offset of XASI (Xen arch shared info) wrt XSI_BASE. */
+#define XMAPPEDREGS_OFS XSI_SIZE
+
@@ -86261,6 +88063,17 @@
+#define HYPERPRIVOP_GET_PSR 0x19
+#define HYPERPRIVOP_MAX 0x19
+
++/* Fast and light hypercalls. */
++#define __HYPERVISOR_ia64_fast_eoi 0x0200
++
++/* Xencomm macros. */
++#define XENCOMM_INLINE_MASK 0xf800000000000000UL
++#define XENCOMM_INLINE_FLAG 0x8000000000000000UL
++
++#define XENCOMM_IS_INLINE(addr) \
++ (((unsigned long)(addr) & XENCOMM_INLINE_MASK) == XENCOMM_INLINE_FLAG)
++#define XENCOMM_INLINE_ADDR(addr) \
++ ((unsigned long)(addr) & ~XENCOMM_INLINE_MASK)
+#endif /* __HYPERVISOR_IF_IA64_H__ */
+
+/*
@@ -86272,8 +88085,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/arch-powerpc.h linux-2.6.18-xen/include/xen/interface/arch-powerpc.h
---- linux-2.6.18/include/xen/interface/arch-powerpc.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/arch-powerpc.h linux-2.6.18-xen/include/xen/interface/arch-powerpc.h
+--- linux-2.6.18.1/include/xen/interface/arch-powerpc.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/arch-powerpc.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,115 @@
+/*
@@ -86391,8 +88204,8 @@
+#endif
+
+#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/arch-x86_32.h linux-2.6.18-xen/include/xen/interface/arch-x86_32.h
---- linux-2.6.18/include/xen/interface/arch-x86_32.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/arch-x86_32.h linux-2.6.18-xen/include/xen/interface/arch-x86_32.h
+--- linux-2.6.18.1/include/xen/interface/arch-x86_32.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/arch-x86_32.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,255 @@
+/******************************************************************************
@@ -86650,8 +88463,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/arch-x86_64.h linux-2.6.18-xen/include/xen/interface/arch-x86_64.h
---- linux-2.6.18/include/xen/interface/arch-x86_64.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/arch-x86_64.h linux-2.6.18-xen/include/xen/interface/arch-x86_64.h
+--- linux-2.6.18.1/include/xen/interface/arch-x86_64.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/arch-x86_64.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,322 @@
+/******************************************************************************
@@ -86976,8 +88789,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/callback.h linux-2.6.18-xen/include/xen/interface/callback.h
---- linux-2.6.18/include/xen/interface/callback.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/callback.h linux-2.6.18-xen/include/xen/interface/callback.h
+--- linux-2.6.18.1/include/xen/interface/callback.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/callback.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,74 @@
+/******************************************************************************
@@ -87054,8 +88867,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/dom0_ops.h linux-2.6.18-xen/include/xen/interface/dom0_ops.h
---- linux-2.6.18/include/xen/interface/dom0_ops.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/dom0_ops.h linux-2.6.18-xen/include/xen/interface/dom0_ops.h
+--- linux-2.6.18.1/include/xen/interface/dom0_ops.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/dom0_ops.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,102 @@
+/******************************************************************************
@@ -87160,8 +88973,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/domctl.h linux-2.6.18-xen/include/xen/interface/domctl.h
---- linux-2.6.18/include/xen/interface/domctl.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/domctl.h linux-2.6.18-xen/include/xen/interface/domctl.h
+--- linux-2.6.18.1/include/xen/interface/domctl.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/domctl.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,392 @@
+/******************************************************************************
@@ -87556,8 +89369,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/elfnote.h linux-2.6.18-xen/include/xen/interface/elfnote.h
---- linux-2.6.18/include/xen/interface/elfnote.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/elfnote.h linux-2.6.18-xen/include/xen/interface/elfnote.h
+--- linux-2.6.18.1/include/xen/interface/elfnote.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/elfnote.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,133 @@
+/******************************************************************************
@@ -87693,8 +89506,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/event_channel.h linux-2.6.18-xen/include/xen/interface/event_channel.h
---- linux-2.6.18/include/xen/interface/event_channel.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/event_channel.h linux-2.6.18-xen/include/xen/interface/event_channel.h
+--- linux-2.6.18.1/include/xen/interface/event_channel.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/event_channel.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,233 @@
+/******************************************************************************
@@ -87930,8 +89743,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/features.h linux-2.6.18-xen/include/xen/interface/features.h
---- linux-2.6.18/include/xen/interface/features.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/features.h linux-2.6.18-xen/include/xen/interface/features.h
+--- linux-2.6.18.1/include/xen/interface/features.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/features.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,53 @@
+/******************************************************************************
@@ -87987,8 +89800,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/grant_table.h linux-2.6.18-xen/include/xen/interface/grant_table.h
---- linux-2.6.18/include/xen/interface/grant_table.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/grant_table.h linux-2.6.18-xen/include/xen/interface/grant_table.h
+--- linux-2.6.18.1/include/xen/interface/grant_table.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/grant_table.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,362 @@
+/******************************************************************************
@@ -88353,8 +90166,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/hvm/e820.h linux-2.6.18-xen/include/xen/interface/hvm/e820.h
---- linux-2.6.18/include/xen/interface/hvm/e820.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/hvm/e820.h linux-2.6.18-xen/include/xen/interface/hvm/e820.h
+--- linux-2.6.18.1/include/xen/interface/hvm/e820.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/hvm/e820.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,32 @@
+#ifndef __XEN_PUBLIC_HVM_E820_H__
@@ -88389,8 +90202,8 @@
+#define HVM_BELOW_4G_MMIO_LENGTH ((1ULL << 32) - HVM_BELOW_4G_MMIO_START)
+
+#endif /* __XEN_PUBLIC_HVM_E820_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/hvm/hvm_info_table.h linux-2.6.18-xen/include/xen/interface/hvm/hvm_info_table.h
---- linux-2.6.18/include/xen/interface/hvm/hvm_info_table.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/hvm/hvm_info_table.h linux-2.6.18-xen/include/xen/interface/hvm/hvm_info_table.h
+--- linux-2.6.18.1/include/xen/interface/hvm/hvm_info_table.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/hvm/hvm_info_table.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,22 @@
+/******************************************************************************
@@ -88415,8 +90228,8 @@
+};
+
+#endif /* __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/hvm/ioreq.h linux-2.6.18-xen/include/xen/interface/hvm/ioreq.h
---- linux-2.6.18/include/xen/interface/hvm/ioreq.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/hvm/ioreq.h linux-2.6.18-xen/include/xen/interface/hvm/ioreq.h
+--- linux-2.6.18.1/include/xen/interface/hvm/ioreq.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/hvm/ioreq.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,99 @@
+/*
@@ -88518,8 +90331,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/hvm/params.h linux-2.6.18-xen/include/xen/interface/hvm/params.h
---- linux-2.6.18/include/xen/interface/hvm/params.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/hvm/params.h linux-2.6.18-xen/include/xen/interface/hvm/params.h
+--- linux-2.6.18.1/include/xen/interface/hvm/params.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/hvm/params.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,24 @@
+#ifndef __XEN_PUBLIC_HVM_PARAMS_H__
@@ -88546,8 +90359,8 @@
+DEFINE_XEN_GUEST_HANDLE(xen_hvm_param_t);
+
+#endif /* __XEN_PUBLIC_HVM_PARAMS_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/hvm/vmx_assist.h linux-2.6.18-xen/include/xen/interface/hvm/vmx_assist.h
---- linux-2.6.18/include/xen/interface/hvm/vmx_assist.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/hvm/vmx_assist.h linux-2.6.18-xen/include/xen/interface/hvm/vmx_assist.h
+--- linux-2.6.18.1/include/xen/interface/hvm/vmx_assist.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/hvm/vmx_assist.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,98 @@
+/*
@@ -88648,8 +90461,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/io/blkif.h linux-2.6.18-xen/include/xen/interface/io/blkif.h
---- linux-2.6.18/include/xen/interface/io/blkif.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/io/blkif.h linux-2.6.18-xen/include/xen/interface/io/blkif.h
+--- linux-2.6.18.1/include/xen/interface/io/blkif.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/io/blkif.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,87 @@
+/******************************************************************************
@@ -88739,8 +90552,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/io/console.h linux-2.6.18-xen/include/xen/interface/io/console.h
---- linux-2.6.18/include/xen/interface/io/console.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/io/console.h linux-2.6.18-xen/include/xen/interface/io/console.h
+--- linux-2.6.18.1/include/xen/interface/io/console.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/io/console.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,33 @@
+/******************************************************************************
@@ -88776,8 +90589,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/io/netif.h linux-2.6.18-xen/include/xen/interface/io/netif.h
---- linux-2.6.18/include/xen/interface/io/netif.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/io/netif.h linux-2.6.18-xen/include/xen/interface/io/netif.h
+--- linux-2.6.18.1/include/xen/interface/io/netif.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/io/netif.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,166 @@
+/******************************************************************************
@@ -88946,8 +90759,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/io/pciif.h linux-2.6.18-xen/include/xen/interface/io/pciif.h
---- linux-2.6.18/include/xen/interface/io/pciif.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/io/pciif.h linux-2.6.18-xen/include/xen/interface/io/pciif.h
+--- linux-2.6.18.1/include/xen/interface/io/pciif.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/io/pciif.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,55 @@
+/*
@@ -89005,9 +90818,9 @@
+};
+
+#endif /* __XEN_PCI_COMMON_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/io/ring.h linux-2.6.18-xen/include/xen/interface/io/ring.h
---- linux-2.6.18/include/xen/interface/io/ring.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/include/xen/interface/io/ring.h 2006-09-04 16:31:19.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/io/ring.h linux-2.6.18-xen/include/xen/interface/io/ring.h
+--- linux-2.6.18.1/include/xen/interface/io/ring.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/include/xen/interface/io/ring.h 2006-10-17 15:01:58.000000000 +0200
@@ -0,0 +1,273 @@
+/******************************************************************************
+ * ring.h
@@ -89036,7 +90849,7 @@
+ * power of two (so we can mask with (size-1) to loop around).
+ */
+#define __RING_SIZE(_s, _sz) \
-+ (__RD32(((_sz) - (long)&(_s)->ring + (long)(_s)) / sizeof((_s)->ring[0])))
++ (__RD32(((_sz) - (long)(_s)->ring + (long)(_s)) / sizeof((_s)->ring[0])))
+
+/*
+ * Macros to make the correct C datatypes for a new kind of ring.
@@ -89282,8 +91095,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/io/tpmif.h linux-2.6.18-xen/include/xen/interface/io/tpmif.h
---- linux-2.6.18/include/xen/interface/io/tpmif.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/io/tpmif.h linux-2.6.18-xen/include/xen/interface/io/tpmif.h
+--- linux-2.6.18.1/include/xen/interface/io/tpmif.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/io/tpmif.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,59 @@
+/******************************************************************************
@@ -89345,8 +91158,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/io/xenbus.h linux-2.6.18-xen/include/xen/interface/io/xenbus.h
---- linux-2.6.18/include/xen/interface/io/xenbus.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/io/xenbus.h linux-2.6.18-xen/include/xen/interface/io/xenbus.h
+--- linux-2.6.18.1/include/xen/interface/io/xenbus.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/io/xenbus.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,45 @@
+/*****************************************************************************
@@ -89394,8 +91207,8 @@
+typedef enum xenbus_state XenbusState;
+
+#endif /* _XEN_PUBLIC_IO_XENBUS_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/io/xs_wire.h linux-2.6.18-xen/include/xen/interface/io/xs_wire.h
---- linux-2.6.18/include/xen/interface/io/xs_wire.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/io/xs_wire.h linux-2.6.18-xen/include/xen/interface/io/xs_wire.h
+--- linux-2.6.18.1/include/xen/interface/io/xs_wire.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/io/xs_wire.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,97 @@
+/*
@@ -89495,8 +91308,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/memory.h linux-2.6.18-xen/include/xen/interface/memory.h
---- linux-2.6.18/include/xen/interface/memory.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/memory.h linux-2.6.18-xen/include/xen/interface/memory.h
+--- linux-2.6.18.1/include/xen/interface/memory.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/memory.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,243 @@
+/******************************************************************************
@@ -89742,8 +91555,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/nmi.h linux-2.6.18-xen/include/xen/interface/nmi.h
---- linux-2.6.18/include/xen/interface/nmi.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/nmi.h linux-2.6.18-xen/include/xen/interface/nmi.h
+--- linux-2.6.18.1/include/xen/interface/nmi.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/nmi.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,60 @@
+/******************************************************************************
@@ -89806,8 +91619,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/physdev.h linux-2.6.18-xen/include/xen/interface/physdev.h
---- linux-2.6.18/include/xen/interface/physdev.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/physdev.h linux-2.6.18-xen/include/xen/interface/physdev.h
+--- linux-2.6.18.1/include/xen/interface/physdev.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/physdev.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,149 @@
+
@@ -89959,8 +91772,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/platform.h linux-2.6.18-xen/include/xen/interface/platform.h
---- linux-2.6.18/include/xen/interface/platform.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/platform.h linux-2.6.18-xen/include/xen/interface/platform.h
+--- linux-2.6.18.1/include/xen/interface/platform.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/platform.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,125 @@
+/******************************************************************************
@@ -90088,8 +91901,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/sched.h linux-2.6.18-xen/include/xen/interface/sched.h
---- linux-2.6.18/include/xen/interface/sched.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/sched.h linux-2.6.18-xen/include/xen/interface/sched.h
+--- linux-2.6.18.1/include/xen/interface/sched.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/sched.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,103 @@
+/******************************************************************************
@@ -90195,8 +92008,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/sysctl.h linux-2.6.18-xen/include/xen/interface/sysctl.h
---- linux-2.6.18/include/xen/interface/sysctl.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/sysctl.h linux-2.6.18-xen/include/xen/interface/sysctl.h
+--- linux-2.6.18.1/include/xen/interface/sysctl.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/sysctl.h 2006-09-04 16:31:19.000000000 +0200
@@ -0,0 +1,151 @@
+/******************************************************************************
@@ -90350,8 +92163,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/trace.h linux-2.6.18-xen/include/xen/interface/trace.h
---- linux-2.6.18/include/xen/interface/trace.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/trace.h linux-2.6.18-xen/include/xen/interface/trace.h
+--- linux-2.6.18.1/include/xen/interface/trace.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/trace.h 2006-09-04 16:31:20.000000000 +0200
@@ -0,0 +1,87 @@
+/******************************************************************************
@@ -90441,8 +92254,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/vcpu.h linux-2.6.18-xen/include/xen/interface/vcpu.h
---- linux-2.6.18/include/xen/interface/vcpu.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/vcpu.h linux-2.6.18-xen/include/xen/interface/vcpu.h
+--- linux-2.6.18.1/include/xen/interface/vcpu.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/vcpu.h 2006-09-04 16:31:20.000000000 +0200
@@ -0,0 +1,121 @@
+/******************************************************************************
@@ -90566,8 +92379,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/version.h linux-2.6.18-xen/include/xen/interface/version.h
---- linux-2.6.18/include/xen/interface/version.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/version.h linux-2.6.18-xen/include/xen/interface/version.h
+--- linux-2.6.18.1/include/xen/interface/version.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/version.h 2006-09-04 16:31:20.000000000 +0200
@@ -0,0 +1,73 @@
+/******************************************************************************
@@ -90643,8 +92456,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/xencomm.h linux-2.6.18-xen/include/xen/interface/xencomm.h
---- linux-2.6.18/include/xen/interface/xencomm.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/xencomm.h linux-2.6.18-xen/include/xen/interface/xencomm.h
+--- linux-2.6.18.1/include/xen/interface/xencomm.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/xencomm.h 2006-09-04 16:31:20.000000000 +0200
@@ -0,0 +1,37 @@
+/*
@@ -90684,8 +92497,8 @@
+};
+
+#endif /* _XEN_XENCOMM_H_ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/xen-compat.h linux-2.6.18-xen/include/xen/interface/xen-compat.h
---- linux-2.6.18/include/xen/interface/xen-compat.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/xen-compat.h linux-2.6.18-xen/include/xen/interface/xen-compat.h
+--- linux-2.6.18.1/include/xen/interface/xen-compat.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/xen-compat.h 2006-09-04 16:31:20.000000000 +0200
@@ -0,0 +1,26 @@
+/******************************************************************************
@@ -90714,8 +92527,8 @@
+#endif
+
+#endif /* __XEN_PUBLIC_XEN_COMPAT_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/xen.h linux-2.6.18-xen/include/xen/interface/xen.h
---- linux-2.6.18/include/xen/interface/xen.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/xen.h linux-2.6.18-xen/include/xen/interface/xen.h
+--- linux-2.6.18.1/include/xen/interface/xen.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/xen.h 2006-09-21 01:33:32.000000000 +0200
@@ -0,0 +1,581 @@
+/******************************************************************************
@@ -91299,8 +93112,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/xenoprof.h linux-2.6.18-xen/include/xen/interface/xenoprof.h
---- linux-2.6.18/include/xen/interface/xenoprof.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/interface/xenoprof.h linux-2.6.18-xen/include/xen/interface/xenoprof.h
+--- linux-2.6.18.1/include/xen/interface/xenoprof.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/interface/xenoprof.h 2006-09-21 01:33:32.000000000 +0200
@@ -0,0 +1,110 @@
+/******************************************************************************
@@ -91413,8 +93226,8 @@
+ * indent-tabs-mode: nil
+ * End:
+ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/pcifront.h linux-2.6.18-xen/include/xen/pcifront.h
---- linux-2.6.18/include/xen/pcifront.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/pcifront.h linux-2.6.18-xen/include/xen/pcifront.h
+--- linux-2.6.18.1/include/xen/pcifront.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/pcifront.h 2006-09-04 16:31:20.000000000 +0200
@@ -0,0 +1,76 @@
+/*
@@ -91493,10 +93306,10 @@
+#endif /* __KERNEL__ */
+
+#endif /* __XEN_ASM_PCIFRONT_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/public/evtchn.h linux-2.6.18-xen/include/xen/public/evtchn.h
---- linux-2.6.18/include/xen/public/evtchn.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/include/xen/public/evtchn.h 2006-09-04 16:31:20.000000000 +0200
-@@ -0,0 +1,91 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/public/evtchn.h linux-2.6.18-xen/include/xen/public/evtchn.h
+--- linux-2.6.18.1/include/xen/public/evtchn.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/include/xen/public/evtchn.h 2006-10-17 15:01:58.000000000 +0200
+@@ -0,0 +1,88 @@
+/******************************************************************************
+ * evtchn.h
+ *
@@ -91532,9 +93345,6 @@
+#ifndef __LINUX_PUBLIC_EVTCHN_H__
+#define __LINUX_PUBLIC_EVTCHN_H__
+
-+/* /dev/xen/evtchn resides at device number major=10, minor=201 */
-+#define EVTCHN_MINOR 201
-+
+/*
+ * Bind a fresh port to VIRQ @virq.
+ * Return allocated port.
@@ -91588,8 +93398,8 @@
+ _IOC(_IOC_NONE, 'E', 5, 0)
+
+#endif /* __LINUX_PUBLIC_EVTCHN_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/public/privcmd.h linux-2.6.18-xen/include/xen/public/privcmd.h
---- linux-2.6.18/include/xen/public/privcmd.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/public/privcmd.h linux-2.6.18-xen/include/xen/public/privcmd.h
+--- linux-2.6.18.1/include/xen/public/privcmd.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/public/privcmd.h 2006-09-04 16:31:20.000000000 +0200
@@ -0,0 +1,79 @@
+/******************************************************************************
@@ -91671,8 +93481,8 @@
+ _IOC(_IOC_NONE, 'P', 3, sizeof(privcmd_mmapbatch_t))
+
+#endif /* __LINUX_PUBLIC_PRIVCMD_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/xenbus.h linux-2.6.18-xen/include/xen/xenbus.h
---- linux-2.6.18/include/xen/xenbus.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/xenbus.h linux-2.6.18-xen/include/xen/xenbus.h
+--- linux-2.6.18.1/include/xen/xenbus.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/xenbus.h 2006-09-21 01:33:32.000000000 +0200
@@ -0,0 +1,306 @@
+/******************************************************************************
@@ -91981,8 +93791,8 @@
+int xenbus_frontend_closed(struct xenbus_device *dev);
+
+#endif /* _XEN_XENBUS_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/xencons.h linux-2.6.18-xen/include/xen/xencons.h
---- linux-2.6.18/include/xen/xencons.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/xencons.h linux-2.6.18-xen/include/xen/xencons.h
+--- linux-2.6.18.1/include/xen/xencons.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/xencons.h 2006-09-21 01:33:32.000000000 +0200
@@ -0,0 +1,17 @@
+#ifndef __ASM_XENCONS_H__
@@ -92002,8 +93812,8 @@
+int xencons_ring_send(const char *data, unsigned len);
+
+#endif /* __ASM_XENCONS_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/xen_proc.h linux-2.6.18-xen/include/xen/xen_proc.h
---- linux-2.6.18/include/xen/xen_proc.h 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/include/xen/xen_proc.h linux-2.6.18-xen/include/xen/xen_proc.h
+--- linux-2.6.18.1/include/xen/xen_proc.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/include/xen/xen_proc.h 2006-09-04 16:31:20.000000000 +0200
@@ -0,0 +1,12 @@
+
@@ -92018,8 +93828,8 @@
+ const char *name);
+
+#endif /* __ASM_XEN_PROC_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/kernel/fork.c linux-2.6.18-xen/kernel/fork.c
---- linux-2.6.18/kernel/fork.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/kernel/fork.c linux-2.6.18-xen/kernel/fork.c
+--- linux-2.6.18.1/kernel/fork.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/kernel/fork.c 2006-09-05 10:45:48.000000000 +0200
@@ -276,6 +276,9 @@
if (retval)
@@ -92031,8 +93841,8 @@
retval = 0;
out:
up_write(&mm->mmap_sem);
-diff -urN -x .hg -x .hgtags linux-2.6.18/kernel/irq/manage.c linux-2.6.18-xen/kernel/irq/manage.c
---- linux-2.6.18/kernel/irq/manage.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/kernel/irq/manage.c linux-2.6.18-xen/kernel/irq/manage.c
+--- linux-2.6.18.1/kernel/irq/manage.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/kernel/irq/manage.c 2006-09-04 16:31:20.000000000 +0200
@@ -350,7 +350,6 @@
struct irqaction **p;
@@ -92042,8 +93852,8 @@
if (irq >= NR_IRQS)
return;
-diff -urN -x .hg -x .hgtags linux-2.6.18/kernel/Kconfig.preempt linux-2.6.18-xen/kernel/Kconfig.preempt
---- linux-2.6.18/kernel/Kconfig.preempt 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/kernel/Kconfig.preempt linux-2.6.18-xen/kernel/Kconfig.preempt
+--- linux-2.6.18.1/kernel/Kconfig.preempt 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/kernel/Kconfig.preempt 2006-09-04 16:31:20.000000000 +0200
@@ -35,6 +35,7 @@
@@ -92053,8 +93863,8 @@
help
This option reduces the latency of the kernel by making
all kernel code (that is not executing in a critical section)
-diff -urN -x .hg -x .hgtags linux-2.6.18/lib/Kconfig.debug linux-2.6.18-xen/lib/Kconfig.debug
---- linux-2.6.18/lib/Kconfig.debug 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/lib/Kconfig.debug linux-2.6.18-xen/lib/Kconfig.debug
+--- linux-2.6.18.1/lib/Kconfig.debug 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/lib/Kconfig.debug 2006-09-04 16:31:20.000000000 +0200
@@ -325,7 +325,7 @@
@@ -92065,21 +93875,19 @@
depends on !MODULES || !(MIPS || PPC || SUPERH || V850)
help
If you say Y here the resulting kernel image will be slightly larger
-diff -urN -x .hg -x .hgtags linux-2.6.18/lib/Makefile linux-2.6.18-xen/lib/Makefile
---- linux-2.6.18/lib/Makefile 2006-09-20 05:42:06.000000000 +0200
-+++ linux-2.6.18-xen/lib/Makefile 2006-09-21 01:33:32.000000000 +0200
-@@ -52,6 +52,9 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/lib/Makefile linux-2.6.18-xen/lib/Makefile
+--- linux-2.6.18.1/lib/Makefile 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/lib/Makefile 2006-10-17 15:01:59.000000000 +0200
+@@ -52,6 +52,7 @@
obj-$(CONFIG_AUDIT_GENERIC) += audit.o
obj-$(CONFIG_SWIOTLB) += swiotlb.o
-+ifneq ($(CONFIG_XEN_IA64_DOM0_NON_VP),y)
+swiotlb-$(CONFIG_XEN) := ../arch/i386/kernel/swiotlb.o
-+endif
hostprogs-y := gen_crc32table
clean-files := crc32table.h
-diff -urN -x .hg -x .hgtags linux-2.6.18/mm/highmem.c linux-2.6.18-xen/mm/highmem.c
---- linux-2.6.18/mm/highmem.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/mm/highmem.c linux-2.6.18-xen/mm/highmem.c
+--- linux-2.6.18.1/mm/highmem.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/mm/highmem.c 2006-09-04 16:31:20.000000000 +0200
@@ -142,6 +142,17 @@
return vaddr;
@@ -92099,10 +93907,18 @@
void fastcall *kmap_high(struct page *page)
{
unsigned long vaddr;
-diff -urN -x .hg -x .hgtags linux-2.6.18/mm/Kconfig linux-2.6.18-xen/mm/Kconfig
---- linux-2.6.18/mm/Kconfig 2006-09-20 05:42:06.000000000 +0200
-+++ linux-2.6.18-xen/mm/Kconfig 2006-09-04 16:31:20.000000000 +0200
-@@ -127,11 +127,14 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/mm/Kconfig linux-2.6.18-xen/mm/Kconfig
+--- linux-2.6.18.1/mm/Kconfig 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/mm/Kconfig 2006-09-22 16:38:35.000000000 +0200
+@@ -116,7 +116,6 @@
+ config MEMORY_HOTPLUG
+ bool "Allow for memory hot-add"
+ depends on SPARSEMEM && HOTPLUG && !SOFTWARE_SUSPEND && ARCH_ENABLE_MEMORY_HOTPLUG
+- depends on (IA64 || X86 || PPC64)
+
+ comment "Memory hotplug is currently incompatible with Software Suspend"
+ depends on SPARSEMEM && HOTPLUG && SOFTWARE_SUSPEND
+@@ -127,11 +126,14 @@
# Default to 4 for wider testing, though 8 might be more appropriate.
# ARM's adjust_pte (unused if VIPT) depends on mm-wide page_table_lock.
# PA-RISC 7xxx's spinlock_t would enlarge struct page from 32 to 44 bytes.
@@ -92117,19 +93933,28 @@
default "4"
#
-diff -urN -x .hg -x .hgtags linux-2.6.18/mm/memory.c linux-2.6.18-xen/mm/memory.c
---- linux-2.6.18/mm/memory.c 2006-09-20 05:42:06.000000000 +0200
-+++ linux-2.6.18-xen/mm/memory.c 2006-09-04 16:31:20.000000000 +0200
-@@ -390,7 +390,7 @@
-
- if (unlikely(vma->vm_flags & VM_PFNMAP)) {
- unsigned long off = (addr - vma->vm_start) >> PAGE_SHIFT;
-- if (pfn == vma->vm_pgoff + off)
-+ if ((pfn == vma->vm_pgoff + off) || !pfn_valid(pfn))
- return NULL;
- if (!is_cow_mapping(vma->vm_flags))
- return NULL;
-@@ -1030,6 +1030,26 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/mm/memory.c linux-2.6.18-xen/mm/memory.c
+--- linux-2.6.18.1/mm/memory.c 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/mm/memory.c 2006-10-17 15:01:59.000000000 +0200
+@@ -403,7 +403,8 @@
+ * and that the resulting page looks ok.
+ */
+ if (unlikely(!pfn_valid(pfn))) {
+- print_bad_pte(vma, pte, addr);
++ if (!(vma->vm_flags & VM_RESERVED))
++ print_bad_pte(vma, pte, addr);
+ return NULL;
+ }
+
+@@ -891,6 +892,7 @@
+ tlb_finish_mmu(tlb, address, end);
+ return end;
+ }
++EXPORT_SYMBOL(zap_page_range);
+
+ /*
+ * Do a quick page-table lookup for a single page.
+@@ -1030,6 +1032,26 @@
continue;
}
@@ -92156,7 +93981,7 @@
if (!vma || (vma->vm_flags & (VM_IO | VM_PFNMAP))
|| !(vm_flags & vma->vm_flags))
return i ? : -EFAULT;
-@@ -1369,6 +1389,102 @@
+@@ -1369,6 +1391,102 @@
}
EXPORT_SYMBOL(remap_pfn_range);
@@ -92259,8 +94084,8 @@
/*
* handle_pte_fault chooses page fault handler according to an entry
* which was read non-atomically. Before making any commitment, on
-diff -urN -x .hg -x .hgtags linux-2.6.18/mm/mmap.c linux-2.6.18-xen/mm/mmap.c
---- linux-2.6.18/mm/mmap.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/mm/mmap.c linux-2.6.18-xen/mm/mmap.c
+--- linux-2.6.18.1/mm/mmap.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/mm/mmap.c 2006-09-21 01:33:32.000000000 +0200
@@ -1963,6 +1963,10 @@
unsigned long nr_accounted = 0;
@@ -92273,9 +94098,9 @@
lru_add_drain();
flush_cache_mm(mm);
tlb = tlb_gather_mmu(mm, 1);
-diff -urN -x .hg -x .hgtags linux-2.6.18/mm/page_alloc.c linux-2.6.18-xen/mm/page_alloc.c
---- linux-2.6.18/mm/page_alloc.c 2006-09-20 05:42:06.000000000 +0200
-+++ linux-2.6.18-xen/mm/page_alloc.c 2006-09-04 16:31:20.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/mm/page_alloc.c linux-2.6.18-xen/mm/page_alloc.c
+--- linux-2.6.18.1/mm/page_alloc.c 2006-10-19 11:01:25.000000000 +0200
++++ linux-2.6.18-xen/mm/page_alloc.c 2006-10-17 15:01:59.000000000 +0200
@@ -443,7 +443,8 @@
int i;
int reserved = 0;
@@ -92296,9 +94121,9 @@
if (PageAnon(page))
page->mapping = NULL;
-diff -urN -x .hg -x .hgtags linux-2.6.18/net/core/dev.c linux-2.6.18-xen/net/core/dev.c
---- linux-2.6.18/net/core/dev.c 2006-09-20 05:42:06.000000000 +0200
-+++ linux-2.6.18-xen/net/core/dev.c 2006-09-04 16:31:20.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/net/core/dev.c linux-2.6.18-xen/net/core/dev.c
+--- linux-2.6.18.1/net/core/dev.c 2006-10-19 11:01:25.000000000 +0200
++++ linux-2.6.18-xen/net/core/dev.c 2006-10-17 15:01:59.000000000 +0200
@@ -118,6 +118,12 @@
#include <linux/err.h>
#include <linux/ctype.h>
@@ -92369,7 +94194,7 @@
/* GSO will handle the following emulations directly. */
if (netif_needs_gso(dev, skb))
goto gso;
-@@ -1796,6 +1845,19 @@
+@@ -1798,6 +1847,19 @@
}
#endif
@@ -92389,7 +94214,7 @@
list_for_each_entry_rcu(ptype, &ptype_all, list) {
if (!ptype->dev || ptype->dev == skb->dev) {
if (pt_prev)
-@@ -3582,6 +3644,7 @@
+@@ -3584,6 +3646,7 @@
EXPORT_SYMBOL(net_enable_timestamp);
EXPORT_SYMBOL(net_disable_timestamp);
EXPORT_SYMBOL(dev_get_flags);
@@ -92397,8 +94222,8 @@
#if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE)
EXPORT_SYMBOL(br_handle_frame_hook);
-diff -urN -x .hg -x .hgtags linux-2.6.18/net/core/skbuff.c linux-2.6.18-xen/net/core/skbuff.c
---- linux-2.6.18/net/core/skbuff.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/net/core/skbuff.c linux-2.6.18-xen/net/core/skbuff.c
+--- linux-2.6.18.1/net/core/skbuff.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/net/core/skbuff.c 2006-09-04 16:31:21.000000000 +0200
@@ -139,6 +139,7 @@
* Buffers may only be allocated from interrupts using a @gfp_mask of
@@ -92470,8 +94295,8 @@
C(pkt_type);
C(ip_summed);
C(priority);
-diff -urN -x .hg -x .hgtags linux-2.6.18/net/ipv4/netfilter/ip_nat_proto_tcp.c linux-2.6.18-xen/net/ipv4/netfilter/ip_nat_proto_tcp.c
---- linux-2.6.18/net/ipv4/netfilter/ip_nat_proto_tcp.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/net/ipv4/netfilter/ip_nat_proto_tcp.c linux-2.6.18-xen/net/ipv4/netfilter/ip_nat_proto_tcp.c
+--- linux-2.6.18.1/net/ipv4/netfilter/ip_nat_proto_tcp.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/net/ipv4/netfilter/ip_nat_proto_tcp.c 2006-09-04 16:31:22.000000000 +0200
@@ -129,7 +129,12 @@
if (hdrsize < sizeof(*hdr))
@@ -92487,8 +94312,8 @@
ip_nat_cheat_check(oldport ^ 0xFFFF,
newport,
hdr->check));
-diff -urN -x .hg -x .hgtags linux-2.6.18/net/ipv4/netfilter/ip_nat_proto_udp.c linux-2.6.18-xen/net/ipv4/netfilter/ip_nat_proto_udp.c
---- linux-2.6.18/net/ipv4/netfilter/ip_nat_proto_udp.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/net/ipv4/netfilter/ip_nat_proto_udp.c linux-2.6.18-xen/net/ipv4/netfilter/ip_nat_proto_udp.c
+--- linux-2.6.18.1/net/ipv4/netfilter/ip_nat_proto_udp.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/net/ipv4/netfilter/ip_nat_proto_udp.c 2006-09-04 16:31:22.000000000 +0200
@@ -114,7 +114,12 @@
portptr = &hdr->dest;
@@ -92504,8 +94329,8 @@
ip_nat_cheat_check(*portptr ^ 0xFFFF,
newport,
hdr->check));
-diff -urN -x .hg -x .hgtags linux-2.6.18/net/ipv4/xfrm4_output.c linux-2.6.18-xen/net/ipv4/xfrm4_output.c
---- linux-2.6.18/net/ipv4/xfrm4_output.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/net/ipv4/xfrm4_output.c linux-2.6.18-xen/net/ipv4/xfrm4_output.c
+--- linux-2.6.18.1/net/ipv4/xfrm4_output.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/net/ipv4/xfrm4_output.c 2006-09-04 16:31:23.000000000 +0200
@@ -18,6 +18,8 @@
#include <net/xfrm.h>
@@ -92527,8 +94352,8 @@
if (skb->ip_summed == CHECKSUM_HW) {
err = skb_checksum_help(skb, 0);
if (err)
-diff -urN -x .hg -x .hgtags linux-2.6.18/net/ipv6/addrconf.c linux-2.6.18-xen/net/ipv6/addrconf.c
---- linux-2.6.18/net/ipv6/addrconf.c 2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/net/ipv6/addrconf.c linux-2.6.18-xen/net/ipv6/addrconf.c
+--- linux-2.6.18.1/net/ipv6/addrconf.c 2006-09-20 05:42:06.000000000 +0200
+++ linux-2.6.18-xen/net/ipv6/addrconf.c 2006-09-04 16:31:23.000000000 +0200
@@ -2514,6 +2514,7 @@
spin_lock_bh(&ifp->lock);
@@ -92546,8 +94371,8 @@
(ipv6_addr_type(&ifp->addr) & IPV6_ADDR_LINKLOCAL)) {
struct in6_addr all_routers;
-diff -urN -x .hg -x .hgtags linux-2.6.18/scripts/Makefile.xen linux-2.6.18-xen/scripts/Makefile.xen
---- linux-2.6.18/scripts/Makefile.xen 1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.1/scripts/Makefile.xen linux-2.6.18-xen/scripts/Makefile.xen
+--- linux-2.6.18.1/scripts/Makefile.xen 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-xen/scripts/Makefile.xen 2006-09-04 16:31:23.000000000 +0200
@@ -0,0 +1,14 @@
+
Modified: dists/trunk/linux-2.6/debian/patches/series/1-extra
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/series/1-extra (original)
+++ dists/trunk/linux-2.6/debian/patches/series/1-extra Thu Oct 19 09:08:49 2006
@@ -1,5 +1,4 @@
+ debian/vserver-version.patch *_vserver *_xen-vserver
-+ features/all/vserver/vs2.0.2.1-t8.patch *_vserver *_xen-vserver
+ mips-tulip.patch mipsel
+ mips-tulip_dc21143.patch mipsel
+ mips-dec-scsi.patch mipsel
Modified: dists/trunk/linux-2.6/debian/patches/series/2-extra
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/series/2-extra (original)
+++ dists/trunk/linux-2.6/debian/patches/series/2-extra Thu Oct 19 09:08:49 2006
@@ -1,6 +1,4 @@
+ hppa.patch hppa
-+ features/all/xen/vserver-clash.patch *_xen-vserver
-+ features/all/xen/fedora-36175.patch *_xen *_xen-vserver
+ m68k-2.6.18.patch m68k
+ m68k-as.patch m68k
+ m68k-macro.patch m68k
Modified: dists/trunk/linux-2.6/debian/patches/series/3-extra
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/series/3-extra (original)
+++ dists/trunk/linux-2.6/debian/patches/series/3-extra Thu Oct 19 09:08:49 2006
@@ -1,5 +1,5 @@
+ hppa-fix-cross-compile.patch hppa
-- features/all/vserver/vs2.0.2.1-t8.patch *_vserver *_xen-vserver
+ features/all/vserver/vs2.0.2.2-rc2.patch *_vserver *_xen-vserver
+ features/all/vserver/bindmount-dev.patch *_vserver *_xen-vserver
-
++ features/all/xen/vserver-clash.patch *_xen-vserver
++ features/all/xen/fedora-36252.patch *_xen *_xen-vserver
More information about the Kernel-svn-changes
mailing list