[kernel] r7917 - in dists/sid/linux-2.6/debian: . patches/features/all/xen patches/series

Bastian Blank waldi at alioth.debian.org
Sun Dec 3 15:47:31 CET 2006


Author: waldi
Date: Sun Dec  3 15:47:28 2006
New Revision: 7917

Added:
   dists/sid/linux-2.6/debian/patches/features/all/xen/README
   dists/sid/linux-2.6/debian/patches/features/all/xen/fedora-2.6.18-36156.patch
      - copied, changed from r7815, dists/sid/linux-2.6/debian/patches/features/all/xen/fedora-36252.patch
Removed:
   dists/sid/linux-2.6/debian/patches/features/all/xen/fedora-36252.patch
Modified:
   dists/sid/linux-2.6/debian/changelog
   dists/sid/linux-2.6/debian/patches/series/7-extra
Log:
* debian/changelog: Update.
* debian/patches/features/all/xen/README: Add informations about patch source.
* debian/patches/features/all/xen/fedora-2.6.18-36156.patch: Add.
* debian/patches/features/all/xen/fedora-36252.patch: Remove.
* debian/patches/series/7-extra: Update.


Modified: dists/sid/linux-2.6/debian/changelog
==============================================================================
--- dists/sid/linux-2.6/debian/changelog	(original)
+++ dists/sid/linux-2.6/debian/changelog	Sun Dec  3 15:47:28 2006
@@ -4,6 +4,7 @@
   * Emit conflict lines for initramfs generators. (closes: #400305)
   * Update vserver patch to 2.0.2.2-rc8.
   * s390: Add patch to fix posix types.
+  * Update xen patch to changeset 36156 from fedora 2.6.18 branch.
 
   [ Martin Michlmayr ]
   * r8169: Add an option to ignore parity errors.
@@ -16,7 +17,7 @@
   * sata: Avoid null pointer dereference in SATA Promise.
   * cifs: Set CIFS preferred IO size.
 
- -- Bastian Blank <waldi at debian.org>  Sat,  2 Dec 2006 10:40:12 +0100
+ -- Bastian Blank <waldi at debian.org>  Sun,  3 Dec 2006 15:43:38 +0100
 
 linux-2.6 (2.6.18-6) unstable; urgency=low
 

Added: dists/sid/linux-2.6/debian/patches/features/all/xen/README
==============================================================================
--- (empty file)
+++ dists/sid/linux-2.6/debian/patches/features/all/xen/README	Sun Dec  3 15:47:28 2006
@@ -0,0 +1 @@
+This patch is from http://hg.et.redhat.com/kernel/linux-2.6.18-xen.

Copied: dists/sid/linux-2.6/debian/patches/features/all/xen/fedora-2.6.18-36156.patch (from r7815, dists/sid/linux-2.6/debian/patches/features/all/xen/fedora-36252.patch)
==============================================================================
--- dists/sid/linux-2.6/debian/patches/features/all/xen/fedora-36252.patch	(original)
+++ dists/sid/linux-2.6/debian/patches/features/all/xen/fedora-2.6.18-36156.patch	Sun Dec  3 15:47:28 2006
@@ -1,6 +1,6 @@
-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
+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
++++ linux-2.6.18-xen/arch/i386/boot-xen/Makefile	2006-11-19 14:26:21.000000000 +0100
 @@ -0,0 +1,21 @@
 +
 +OBJCOPYFLAGS := -g --strip-unneeded
@@ -23,10 +23,10 @@
 +	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.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 @@
+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-11-19 14:26:21.000000000 +0100
+@@ -16,10 +16,12 @@
  
  config GENERIC_TIME
  	bool
@@ -34,7 +34,12 @@
  	default y
  
  config LOCKDEP_SUPPORT
-@@ -103,6 +104,15 @@
+ 	bool
++	depends on !X86_XEN
+ 	default y
+ 
+ config STACKTRACE_SUPPORT
+@@ -103,6 +105,15 @@
  	help
  	  Choose this option if your computer is a standard PC or compatible.
  
@@ -50,7 +55,7 @@
  config X86_ELAN
  	bool "AMD Elan"
  	help
-@@ -213,6 +223,7 @@
+@@ -213,6 +224,7 @@
  
  config HPET_TIMER
  	bool "HPET Timer Support"
@@ -58,7 +63,7 @@
  	help
  	  This enables the use of the HPET for the kernel's internal timer.
  	  HPET is the next generation timer replacing legacy 8254s.
-@@ -263,7 +274,7 @@
+@@ -263,7 +275,7 @@
  
  config X86_UP_APIC
  	bool "Local APIC support on uniprocessors"
@@ -67,7 +72,7 @@
  	help
  	  A local APIC (Advanced Programmable Interrupt Controller) is an
  	  integrated interrupt controller in the CPU. If you have a single-CPU
-@@ -288,12 +299,12 @@
+@@ -288,12 +300,12 @@
  
  config X86_LOCAL_APIC
  	bool
@@ -82,7 +87,7 @@
  	default y
  
  config X86_VISWS_APIC
-@@ -303,7 +314,7 @@
+@@ -303,7 +315,7 @@
  
  config X86_MCE
  	bool "Machine Check Exception"
@@ -91,7 +96,7 @@
  	---help---
  	  Machine Check Exception support allows the processor to notify the
  	  kernel if it detects a problem (e.g. overheating, component failure).
-@@ -402,6 +413,7 @@
+@@ -402,6 +414,7 @@
  
  config MICROCODE
  	tristate "/dev/cpu/microcode - Intel IA32 CPU microcode support"
@@ -99,7 +104,7 @@
  	---help---
  	  If you say Y here and also to "/dev file system support" in the
  	  'File systems' section, you will be able to update the microcode on
-@@ -419,6 +431,7 @@
+@@ -419,6 +432,7 @@
  
  config X86_MSR
  	tristate "/dev/cpu/*/msr - Model-specific register support"
@@ -107,7 +112,7 @@
  	help
  	  This device gives privileged processes access to the x86
  	  Model-Specific Registers (MSRs).  It is a character device with
-@@ -434,6 +447,10 @@
+@@ -434,6 +448,10 @@
  	  with major 203 and minors 0 to 31 for /dev/cpu/0/cpuid to
  	  /dev/cpu/31/cpuid.
  
@@ -118,7 +123,7 @@
  source "drivers/firmware/Kconfig"
  
  choice
-@@ -607,7 +624,7 @@
+@@ -607,7 +625,7 @@
  
  config HIGHPTE
  	bool "Allocate 3rd-level pagetables from highmem"
@@ -127,7 +132,7 @@
  	help
  	  The VM uses one page table entry for each page of physical memory.
  	  For systems with a lot of RAM, this can be wasteful of precious
-@@ -616,6 +633,7 @@
+@@ -616,6 +634,7 @@
  
  config MATH_EMULATION
  	bool "Math emulation"
@@ -135,7 +140,7 @@
  	---help---
  	  Linux can emulate a math coprocessor (used for floating point
  	  operations) if you don't have one. 486DX and Pentium processors have
-@@ -641,6 +659,8 @@
+@@ -641,6 +660,8 @@
  
  config MTRR
  	bool "MTRR (Memory Type Range Register) support"
@@ -144,7 +149,7 @@
  	---help---
  	  On Intel P6 family processors (Pentium Pro, Pentium II and later)
  	  the Memory Type Range Registers (MTRRs) may be used to control
-@@ -675,7 +695,7 @@
+@@ -675,7 +696,7 @@
  
  config EFI
  	bool "Boot from EFI support"
@@ -153,7 +158,7 @@
  	default n
  	---help---
  	This enables the the kernel to boot on EFI platforms using
-@@ -693,7 +713,7 @@
+@@ -693,7 +714,7 @@
  
  config IRQBALANCE
   	bool "Enable kernel irq balancing"
@@ -162,7 +167,7 @@
  	default y
  	help
   	  The default yes will allow the kernel to do irq load balancing.
-@@ -741,7 +761,7 @@
+@@ -741,7 +762,7 @@
  
  config KEXEC
  	bool "kexec system call (EXPERIMENTAL)"
@@ -171,7 +176,7 @@
  	help
  	  kexec is a system call that implements the ability to shutdown your
  	  current kernel, and to start another kernel.  It is like a reboot
-@@ -794,6 +814,7 @@
+@@ -794,6 +815,7 @@
  config COMPAT_VDSO
  	bool "Compat VDSO support"
  	default y
@@ -179,7 +184,7 @@
  	help
  	  Map the VDSO to the predictable old-style address too.
  	---help---
-@@ -810,18 +831,20 @@
+@@ -810,18 +832,20 @@
  	depends on HIGHMEM
  
  menu "Power management options (ACPI, APM)"
@@ -203,7 +208,7 @@
  	---help---
  	  APM is a BIOS specification for saving power using several different
  	  techniques. This is mostly useful for battery powered laptops with
-@@ -1006,6 +1029,7 @@
+@@ -1006,6 +1030,7 @@
  
  config PCI_GOBIOS
  	bool "BIOS"
@@ -211,7 +216,7 @@
  
  config PCI_GOMMCONFIG
  	bool "MMConfig"
-@@ -1013,6 +1037,13 @@
+@@ -1013,6 +1038,13 @@
  config PCI_GODIRECT
  	bool "Direct"
  
@@ -225,7 +230,7 @@
  config PCI_GOANY
  	bool "Any"
  
-@@ -1020,7 +1051,7 @@
+@@ -1020,7 +1052,7 @@
  
  config PCI_BIOS
  	bool
@@ -234,7 +239,7 @@
  	default y
  
  config PCI_DIRECT
-@@ -1033,6 +1064,18 @@
+@@ -1033,6 +1065,18 @@
  	depends on PCI && ACPI && (PCI_GOMMCONFIG || PCI_GOANY)
  	default y
  
@@ -253,7 +258,7 @@
  source "drivers/pci/pcie/Kconfig"
  
  source "drivers/pci/Kconfig"
-@@ -1043,7 +1086,7 @@
+@@ -1043,7 +1087,7 @@
  
  config ISA
  	bool "ISA support"
@@ -262,7 +267,7 @@
  	help
  	  Find out whether you have ISA slots on your motherboard.  ISA is the
  	  name of a bus system, i.e. the way the CPU talks to the other stuff
-@@ -1070,7 +1113,7 @@
+@@ -1070,7 +1114,7 @@
  source "drivers/eisa/Kconfig"
  
  config MCA
@@ -271,7 +276,7 @@
  	default y if X86_VOYAGER
  	help
  	  MicroChannel Architecture is found in some IBM PS/2 machines and
-@@ -1146,6 +1189,8 @@
+@@ -1146,6 +1190,8 @@
  
  source "crypto/Kconfig"
  
@@ -280,7 +285,7 @@
  source "lib/Kconfig"
  
  #
-@@ -1171,7 +1216,7 @@
+@@ -1171,7 +1217,7 @@
  
  config X86_HT
  	bool
@@ -289,7 +294,7 @@
  	default y
  
  config X86_BIOS_REBOOT
-@@ -1184,6 +1229,16 @@
+@@ -1184,6 +1230,16 @@
  	depends on X86_SMP || (X86_VOYAGER && SMP)
  	default y
  
@@ -306,9 +311,9 @@
  config KTIME_SCALAR
  	bool
  	default y
-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
+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
++++ linux-2.6.18-xen/arch/i386/Kconfig.cpu	2006-11-19 14:26:21.000000000 +0100
 @@ -251,7 +251,7 @@
  
  config X86_F00F_BUG
@@ -325,10 +330,18 @@
 -	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.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 @@
+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
++++ linux-2.6.18-xen/arch/i386/Kconfig.debug	2006-11-19 14:26:21.000000000 +0100
+@@ -2,6 +2,7 @@
+ 
+ config TRACE_IRQFLAGS_SUPPORT
+ 	bool
++	depends on !X86_XEN
+ 	default y
+ 
+ source "lib/Kconfig.debug"
+@@ -79,6 +80,7 @@
  config DOUBLEFAULT
  	default y
  	bool "Enable doublefault exception handler" if EMBEDDED
@@ -336,9 +349,9 @@
  	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.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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/acpi/boot-xen.c	2006-11-19 14:26:21.000000000 +0100
 @@ -0,0 +1,1168 @@
 +/*
 + *  boot.c - Architecture-Specific Low-Level ACPI Boot Support
@@ -511,7 +524,7 @@
 +	unsigned long i;
 +	int config_size;
 +
-+	if (!phys_addr || !size)
++	if (!phys_addr || !size || !cpu_has_apic)
 +		return -EINVAL;
 +
 +	mcfg = (struct acpi_table_mcfg *)__acpi_map_table(phys_addr, size);
@@ -560,7 +573,7 @@
 +{
 +	struct acpi_table_madt *madt = NULL;
 +
-+	if (!phys_addr || !size || !cpu_has_apic)
++	if (!phys_addr || !size)
 +		return -EINVAL;
 +
 +	madt = (struct acpi_table_madt *)__acpi_map_table(phys_addr, size);
@@ -1100,7 +1113,7 @@
 +		return -ENODEV;
 +	}
 +
-+	if (!cpu_has_apic) 
++	if (!cpu_has_apic)
 +		return -ENODEV;
 +
 +	/*
@@ -1508,9 +1521,9 @@
 +
 +	return 0;
 +}
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/acpi/Makefile	2006-11-19 14:26:21.000000000 +0100
 @@ -6,3 +6,7 @@
  obj-y				+= cstate.o processor.o
  endif
@@ -1519,9 +1532,9 @@
 +include $(srctree)/scripts/Makefile.xen
 +obj-y := $(call cherrypickxen, $(obj-y), $(src))
 +endif
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/alternative.c	2006-11-19 14:26:21.000000000 +0100
 @@ -4,7 +4,11 @@
  #include <asm/alternative.h>
  #include <asm/sections.h>
@@ -1546,9 +1559,9 @@
  			DPRINTK("%s: vsyscall fixup: %p => %p\n",
  				__FUNCTION__, a->instr, instr);
  		}
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/apic-xen.c	2006-11-19 14:26:21.000000000 +0100
 @@ -0,0 +1,160 @@
 +/*
 + *	Local APIC handling, local APIC timers
@@ -1710,9 +1723,9 @@
 +
 +	return 0;
 +}
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/asm-offsets.c	2006-11-19 14:26:21.000000000 +0100
 @@ -66,9 +66,14 @@
  	OFFSET(pbe_orig_address, pbe, orig_address);
  	OFFSET(pbe_next, pbe, next);
@@ -1729,10 +1742,10 @@
  
  	DEFINE(PAGE_SIZE_asm, PAGE_SIZE);
  	DEFINE(VDSO_PRELINK, VDSO_PRELINK);
-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 @@
+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
++++ linux-2.6.18-xen/arch/i386/kernel/cpu/common-xen.c	2006-11-19 14:26:21.000000000 +0100
+@@ -0,0 +1,740 @@
 +#include <linux/init.h>
 +#include <linux/string.h>
 +#include <linux/delay.h>
@@ -2032,7 +2045,7 @@
 +			if (c->x86 >= 0x6)
 +				c->x86_model += ((tfms >> 16) & 0xF) << 4;
 +			c->x86_mask = tfms & 15;
-+#ifdef CONFIG_X86_HT
++#if defined(CONFIG_X86_HT)
 +			c->apicid = phys_pkg_id((ebx >> 24) & 0xFF, 0);
 +#else
 +			c->apicid = (ebx >> 24) & 0xFF;
@@ -2229,7 +2242,7 @@
 +
 +		if (smp_num_siblings > NR_CPUS) {
 +			printk(KERN_WARNING "CPU: Unsupported number of the "
-+					"siblings %d", smp_num_siblings);
++			       "siblings %d", smp_num_siblings);
 +			smp_num_siblings = 1;
 +			return;
 +		}
@@ -2360,7 +2373,7 @@
 +	}
 +	printk(KERN_INFO "Initializing CPU#%d\n", cpu);
 +
-+	if (cpu_has_vme || cpu_has_tsc || cpu_has_de)
++	if (cpu_has_vme || cpu_has_de)
 +		clear_in_cr4(X86_CR4_VME|X86_CR4_PVI|X86_CR4_TSD|X86_CR4_DE);
 +	if (tsc_disable && cpu_has_tsc) {
 +		printk(KERN_NOTICE "Disabling TSC...\n");
@@ -2394,6 +2407,7 @@
 +				local_irq_enable();
 +		}
 +	}
++
 +old_gdt:
 +	/*
 +	 * Initialize the per-CPU GDT with the boot GDT,
@@ -2472,9 +2486,9 @@
 +	per_cpu(cpu_tlbstate, cpu).active_mm = &init_mm;
 +}
 +#endif
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/cpu/Makefile	2006-11-19 14:26:21.000000000 +0100
 @@ -17,3 +17,8 @@
  
  obj-$(CONFIG_MTRR)	+= 	mtrr/
@@ -2484,9 +2498,9 @@
 +include $(srctree)/scripts/Makefile.xen
 +obj-y := $(call cherrypickxen, $(obj-y), $(src))
 +endif
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/cpu/mtrr/main-xen.c	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,197 @@
 +#include <linux/init.h>
 +#include <linux/proc_fs.h>
@@ -2685,9 +2699,9 @@
 +}
 +
 +subsys_initcall(mtrr_init);
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/cpu/mtrr/Makefile	2006-11-19 14:26:22.000000000 +0100
 @@ -3,3 +3,10 @@
  obj-y		+= cyrix.o
  obj-y		+= centaur.o
@@ -2699,15 +2713,15 @@
 +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.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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/early_printk-xen.c	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,2 @@
 +
 +#include "../../x86_64/kernel/early_printk-xen.c"
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/entry.S	2006-11-19 14:26:22.000000000 +0100
 @@ -269,7 +269,7 @@
  	CFI_STARTPROC simple
  	CFI_DEF_CFA esp, 0
@@ -2735,9 +2749,9 @@
  	pushfl;					\
  	pushl $__KERNEL_CS;			\
  	pushl $sysenter_past_esp
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/entry-xen.S	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,1213 @@
 +/*
 + *  linux/arch/i386/entry.S
@@ -3952,9 +3966,9 @@
 +#include "syscall_table.S"
 +
 +syscall_table_size=(.-sys_call_table)
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/fixup.c	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,92 @@
 +/******************************************************************************
 + * fixup.c
@@ -4048,9 +4062,9 @@
 +	return 0;
 +}
 +__initcall(fixup_init);
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/head-xen.S	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,200 @@
 +
 +
@@ -4252,9 +4266,9 @@
 +	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.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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/init_task-xen.c	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,51 @@
 +#include <linux/mm.h>
 +#include <linux/module.h>
@@ -4307,10 +4321,10 @@
 +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.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 @@
+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
++++ linux-2.6.18-xen/arch/i386/kernel/io_apic-xen.c	2006-11-19 14:26:22.000000000 +0100
+@@ -0,0 +1,2772 @@
 +/*
 + *	Intel IO-APIC support for multi-Pentium hosts.
 + *
@@ -6628,9 +6642,9 @@
 +	io_apic_write(apic, 0x10 + 2 * pin, *(((int *)&entry0) + 0));
 +	spin_unlock_irqrestore(&ioapic_lock, flags);
 +}
-+#endif /* CONFIG_XEN */
++
 +int timer_uses_ioapic_pin_0;
-+#ifdef CONFI_XEN
++
 +/*
 + * This code may look a bit paranoid, but it's supposed to cooperate with
 + * a wide range of boards and BIOS bugs.  Fortunately only the timer IRQ
@@ -6755,6 +6769,7 @@
 +		"report.  Then try booting with the 'noapic' option");
 +}
 +#else
++int timer_uses_ioapic_pin_0;
 +#define check_timer() ((void)0)
 +#endif
 +
@@ -7082,9 +7097,9 @@
 +}
 +
 +#endif /* CONFIG_ACPI */
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/ioport-xen.c	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,121 @@
 +/*
 + *	linux/arch/i386/kernel/ioport.c
@@ -7207,9 +7222,9 @@
 +	set_iopl_mask(t->iopl);
 +	return 0;
 +}
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/irq-xen.c	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,324 @@
 +/*
 + *	linux/arch/i386/kernel/irq.c
@@ -7535,9 +7550,9 @@
 +}
 +#endif
 +
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/ldt-xen.c	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,270 @@
 +/*
 + * linux/kernel/ldt.c
@@ -7809,9 +7824,9 @@
 +	}
 +	return ret;
 +}
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/Makefile	2006-11-19 14:26:21.000000000 +0100
 @@ -44,6 +44,12 @@
  
  obj-$(CONFIG_SCx200)		+= scx200.o
@@ -7855,9 +7870,9 @@
 +obj-y := $(call cherrypickxen, $(obj-y))
 +extra-y := $(call cherrypickxen, $(extra-y))
 +endif
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/microcode-xen.c	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,147 @@
 +/*
 + *	Intel CPU Microcode Update Driver for Linux
@@ -8006,9 +8021,9 @@
 +module_init(microcode_init)
 +module_exit(microcode_exit)
 +MODULE_ALIAS_MISCDEV(MICROCODE_MINOR);
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/mpparse-xen.c	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,1185 @@
 +/*
 + *	Intel Multiprocessor Specification 1.1 and 1.4
@@ -9195,9 +9210,9 @@
 +
 +#endif /* CONFIG_X86_IO_APIC */
 +#endif /* CONFIG_ACPI */
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/pci-dma-xen.c	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,379 @@
 +/*
 + * Dynamic DMA mapping support.
@@ -9578,10 +9593,10 @@
 +		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.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 @@
+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
++++ linux-2.6.18-xen/arch/i386/kernel/process-xen.c	2006-11-19 14:26:22.000000000 +0100
+@@ -0,0 +1,815 @@
 +/*
 + *  linux/arch/i386/kernel/process.c
 + *
@@ -9644,6 +9659,9 @@
 +#include <asm/tlbflush.h>
 +#include <asm/cpu.h>
 +
++#include <asm/tlbflush.h>
++#include <asm/cpu.h>
++
 +asmlinkage void ret_from_fork(void) __asm__("ret_from_fork");
 +
 +static int hlt_counter;
@@ -10394,9 +10412,9 @@
 +		sp -= get_random_int() % 8192;
 +	return sp & ~0xf;
 +}
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/quirks-xen.c	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,47 @@
 +/*
 + * This file contains work-arounds for x86 and x86_64 platform bugs.
@@ -10445,10 +10463,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.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 @@
+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-11-19 14:26:22.000000000 +0100
+@@ -0,0 +1,1836 @@
 +/*
 + *  linux/arch/i386/kernel/setup.c
 + *
@@ -10494,6 +10512,9 @@
 +#include <linux/init.h>
 +#include <linux/edd.h>
 +#include <linux/nodemask.h>
++#include <linux/kernel.h>
++#include <linux/percpu.h>
++#include <linux/notifier.h>
 +#include <linux/kexec.h>
 +#include <linux/crash_dump.h>
 +#include <linux/dmi.h>
@@ -11837,15 +11858,13 @@
 +#ifdef CONFIG_XEN_PRIVILEGED_GUEST
 +	struct xen_memory_map memmap;
 +
-+	map = machine_e820.map;
-+	memmap.nr_entries = E820MAX;
++	map = (struct e820entry *)__get_free_page(GFP_ATOMIC);
++	nr_map = E820MAX;
 +
++	memmap.nr_entries = E820MAX;
 +	set_xen_guest_handle(memmap.buffer, map);
 +
-+	if(HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap))
-+		BUG();
-+	machine_e820.nr_map = memmap.nr_entries;
-+	nr_map = memmap.nr_entries;
++	BUG_ON(HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap));
 +	e820_setup_gap(map, memmap.nr_entries);
 +#endif
 +
@@ -11884,6 +11903,9 @@
 +#endif
 +		}
 +	}
++#ifdef CONFIG_XEN
++	free_page((unsigned long)map);
++#endif
 +}
 +
 +/*
@@ -12281,9 +12303,9 @@
 + * c-basic-offset:8
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/smp-xen.c	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,624 @@
 +/*
 + *	Intel SMP support routines.
@@ -12909,9 +12931,9 @@
 +	return IRQ_HANDLED;
 +}
 +
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/swiotlb.c	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,672 @@
 +/*
 + * Dynamic DMA mapping support.
@@ -13585,9 +13607,9 @@
 +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.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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/sysenter.c	2006-11-19 14:26:22.000000000 +0100
 @@ -23,6 +23,10 @@
  #include <asm/pgtable.h>
  #include <asm/unistd.h>
@@ -13647,9 +13669,9 @@
  
  	if (!boot_cpu_has(X86_FEATURE_SEP)) {
  		memcpy(syscall_page,
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/time-xen.c	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,1101 @@
 +/*
 + *  linux/arch/i386/kernel/time.c
@@ -14649,14 +14671,14 @@
 +	cpu_clear(smp_processor_id(), nohz_cpu_mask);
 +}
 +
-+void raw_safe_halt(void)
++void safe_halt(void)
 +{
 +	stop_hz_timer();
 +	/* Blocking includes an implicit local_irq_enable(). */
 +	HYPERVISOR_block();
 +	start_hz_timer();
 +}
-+EXPORT_SYMBOL(raw_safe_halt);
++EXPORT_SYMBOL(safe_halt);
 +
 +void halt(void)
 +{
@@ -14752,9 +14774,9 @@
 +	return 0;
 +}
 +__initcall(xen_sysctl_init);
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/traps.c	2006-11-19 14:26:22.000000000 +0100
 @@ -642,18 +642,11 @@
  
  static void io_check_error(unsigned char reason, struct pt_regs * regs)
@@ -14775,10 +14797,10 @@
  }
  
  static void unknown_nmi_error(unsigned char reason, struct pt_regs * regs)
-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 @@
+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
++++ linux-2.6.18-xen/arch/i386/kernel/traps-xen.c	2006-11-19 14:26:22.000000000 +0100
+@@ -0,0 +1,1186 @@
 +/*
 + *  linux/arch/i386/traps.c
 + *
@@ -14989,8 +15011,9 @@
 +					printk("Full inexact backtrace again:\n");
 +			} else if (call_trace >= 1)
 +				return;
-+		} else
++			else
 +				printk("Full inexact backtrace again:\n");
++		} else
 +			printk("Inexact backtrace:\n");
 +	}
 +
@@ -15963,9 +15986,10 @@
 +}
 +__setup("call_trace=", call_trace_setup);
 +#endif
-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
++
+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
++++ linux-2.6.18-xen/arch/i386/kernel/tsc.c	2006-11-19 14:26:22.000000000 +0100
 @@ -101,6 +101,7 @@
  	return (cyc * cyc2ns_scale) >> CYC2NS_SCALE_FACTOR;
  }
@@ -15982,9 +16006,9 @@
  
  static unsigned long calculate_cpu_khz(void)
  {
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/vm86.c	2006-11-19 14:26:22.000000000 +0100
 @@ -97,7 +97,9 @@
  struct pt_regs * FASTCALL(save_v86_state(struct kernel_vm86_regs * regs));
  struct pt_regs * fastcall save_v86_state(struct kernel_vm86_regs * regs)
@@ -16039,9 +16063,9 @@
  
  	tsk->thread.screen_bitmap = info->screen_bitmap;
  	if (info->flags & VM86_SCREEN_BITMAP)
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/vmlinux.lds.S	2006-11-19 14:26:22.000000000 +0100
 @@ -13,6 +13,12 @@
  OUTPUT_ARCH(i386)
  ENTRY(phys_startup_32)
@@ -16080,9 +16104,9 @@
 +
 +  NOTES
  }
-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
+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
++++ linux-2.6.18-xen/arch/i386/kernel/vsyscall-note-xen.S	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,32 @@
 +/*
 + * This supplies .note.* sections to go into the PT_NOTE inside the vDSO text.
@@ -16116,9 +16140,9 @@
 +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.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
+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
++++ linux-2.6.18-xen/arch/i386/lib/delay.c	2006-11-19 14:26:22.000000000 +0100
 @@ -61,6 +61,7 @@
  	delay_fn = delay_tsc;
  }
@@ -16136,122 +16160,19 @@
  void __delay(unsigned long loops)
  {
  	delay_fn(loops);
-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>
-+#include <linux/smp.h>
-+#include <asm/irqflags.h>
-+#include <asm/hypervisor.h>
-+
-+/* interrupt control.. */
-+
-+/* 
-+ * The use of 'barrier' in the following reflects their use as local-lock
-+ * operations. Reentrancy must be prevented (e.g., __cli()) /before/ following
-+ * critical operations are executed. All critical operations must complete
-+ * /before/ reentrancy is permitted (e.g., __sti()). Alpha architecture also
-+ * includes these barriers, for example.
-+ */
-+
-+unsigned long __raw_local_save_flags(void)
-+{
-+	struct vcpu_info *_vcpu;
-+	unsigned long flags;
-+
-+	preempt_disable();
-+	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];
-+	flags = _vcpu->evtchn_upcall_mask;
-+	preempt_enable();
-+
-+	return flags;
-+}
-+EXPORT_SYMBOL(__raw_local_save_flags);
-+
-+void raw_local_irq_restore(unsigned long flags)
-+{
-+	struct vcpu_info *_vcpu;
-+
-+	preempt_disable();
-+	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];
-+	if ((_vcpu->evtchn_upcall_mask = flags) == 0) {
-+		barrier(); /* unmask then check (avoid races) */
-+		if (unlikely(_vcpu->evtchn_upcall_pending))
-+			force_evtchn_callback();
-+		preempt_enable();
-+	} else
-+		preempt_enable_no_resched();
-+
-+}
-+EXPORT_SYMBOL(raw_local_irq_restore);
-+
-+void raw_local_irq_disable(void)
-+{
-+	struct vcpu_info *_vcpu;
-+
-+	preempt_disable();
-+	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];
-+	_vcpu->evtchn_upcall_mask = 1;
-+	preempt_enable_no_resched();
-+}
-+EXPORT_SYMBOL(raw_local_irq_disable);
-+
-+void raw_local_irq_enable(void)
-+{
-+	struct vcpu_info *_vcpu;
-+
-+	preempt_disable();
-+	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];
-+	_vcpu->evtchn_upcall_mask = 0;
-+	barrier(); /* unmask then check (avoid races) */
-+	if (unlikely(_vcpu->evtchn_upcall_pending))
-+		force_evtchn_callback();
-+	preempt_enable();
-+}
-+EXPORT_SYMBOL(raw_local_irq_enable);
-+
-+/* Cannot use preempt_enable() here as we would recurse in preempt_sched(). */
-+int raw_irqs_disabled(void)
-+{
-+	struct vcpu_info *_vcpu;
-+	int disabled;
-+
-+	preempt_disable();
-+	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];
-+	disabled = (_vcpu->evtchn_upcall_mask != 0);
-+	preempt_enable_no_resched();
-+	return disabled;
-+}
-+EXPORT_SYMBOL(raw_irqs_disabled);
-+
-+unsigned long __raw_local_irq_save(void)
-+{
-+	struct vcpu_info *_vcpu;
-+	unsigned long flags;
-+
-+	preempt_disable();
-+	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];
-+	flags = _vcpu->evtchn_upcall_mask;
-+	_vcpu->evtchn_upcall_mask = 1;
-+	preempt_enable_no_resched();
-+
-+	return flags;
-+}
-+EXPORT_SYMBOL(__raw_local_irq_save);
-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
+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
++++ linux-2.6.18-xen/arch/i386/mach-xen/Makefile	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,5 @@
 +#
 +# Makefile for the linux kernel.
 +#
 +
-+obj-y				:= setup.o irqflags.o
-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 @@
++obj-y				:= setup.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
++++ linux-2.6.18-xen/arch/i386/mach-xen/setup.c	2006-11-19 14:26:22.000000000 +0100
+@@ -0,0 +1,153 @@
 +/*
 + *	Machine specific setup for generic
 + */
@@ -16264,7 +16185,6 @@
 +#include <asm/arch_hooks.h>
 +#include <asm/e820.h>
 +#include <asm/setup.h>
-+#include <asm/fixmap.h>
 +
 +#include <xen/interface/callback.h>
 +#include <xen/interface/memory.h>
@@ -16406,9 +16326,9 @@
 +void __init pre_setup_arch_hook(void)
 +{
 +}
-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
+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
++++ linux-2.6.18-xen/arch/i386/Makefile	2006-11-19 14:26:21.000000000 +0100
 @@ -48,6 +48,11 @@
  
  CFLAGS += $(cflags-y)
@@ -16465,9 +16385,9 @@
  	       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.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
+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
++++ linux-2.6.18-xen/arch/i386/mm/fault-xen.c	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,770 @@
 +/*
 + *  linux/arch/i386/mm/fault.c
@@ -17239,9 +17159,9 @@
 +	}
 +}
 +#endif
-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
+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
++++ linux-2.6.18-xen/arch/i386/mm/highmem-xen.c	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,133 @@
 +#include <linux/highmem.h>
 +#include <linux/module.h>
@@ -17376,9 +17296,9 @@
 +EXPORT_SYMBOL(kmap_atomic);
 +EXPORT_SYMBOL(kunmap_atomic);
 +EXPORT_SYMBOL(kmap_atomic_to_page);
-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
+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
++++ linux-2.6.18-xen/arch/i386/mm/hypervisor.c	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,457 @@
 +/******************************************************************************
 + * mm/hypervisor.c
@@ -17837,9 +17757,9 @@
 +		mach_lp, (u64)entry_a | ((u64)entry_b<<32));
 +}
 +#endif
-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
+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
++++ linux-2.6.18-xen/arch/i386/mm/init-xen.c	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,851 @@
 +/*
 + *  linux/arch/i386/mm/init.c
@@ -18692,9 +18612,9 @@
 +}
 +#endif
 +
-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
+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-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,443 @@
 +/*
 + * arch/i386/mm/ioremap.c
@@ -19139,9 +19059,9 @@
 +		--nrpages;
 +	}
 +}
-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
+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
++++ linux-2.6.18-xen/arch/i386/mm/Makefile	2006-11-19 14:26:22.000000000 +0100
 @@ -8,3 +8,11 @@
  obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o
  obj-$(CONFIG_HIGHMEM) += highmem.o
@@ -19154,9 +19074,9 @@
 +
 +obj-y := $(call cherrypickxen, $(obj-y))
 +endif
-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
+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
++++ linux-2.6.18-xen/arch/i386/mm/pageattr.c	2006-11-19 14:26:22.000000000 +0100
 @@ -84,7 +84,7 @@
  	unsigned long flags;
  
@@ -19166,9 +19086,45 @@
  		return;
  
  	spin_lock_irqsave(&pgd_lock, flags);
-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
+diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/mm/pgtable.c linux-2.6.18-xen/arch/i386/mm/pgtable.c
+--- linux-2.6.18/arch/i386/mm/pgtable.c	2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/arch/i386/mm/pgtable.c	2006-11-19 14:26:22.000000000 +0100
+@@ -12,6 +12,7 @@
+ #include <linux/slab.h>
+ #include <linux/pagemap.h>
+ #include <linux/spinlock.h>
++#include <linux/module.h>
+ 
+ #include <asm/system.h>
+ #include <asm/pgtable.h>
+@@ -137,6 +138,10 @@
+ 	__flush_tlb_one(vaddr);
+ }
+ 
++static int nr_fixmaps = 0;
++unsigned long __FIXADDR_TOP = 0xfffff000;
++EXPORT_SYMBOL(__FIXADDR_TOP);
++
+ void __set_fixmap (enum fixed_addresses idx, unsigned long phys, pgprot_t flags)
+ {
+ 	unsigned long address = __fix_to_virt(idx);
+@@ -146,6 +151,13 @@
+ 		return;
+ 	}
+ 	set_pte_pfn(address, phys >> PAGE_SHIFT, flags);
++	nr_fixmaps++;
++}
++
++void set_fixaddr_top(unsigned long top)
++{
++	BUG_ON(nr_fixmaps > 0);
++	__FIXADDR_TOP = top - PAGE_SIZE;
+ }
+ 
+ pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
+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
++++ linux-2.6.18-xen/arch/i386/mm/pgtable-xen.c	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,699 @@
 +/*
 + *  linux/arch/i386/mm/pgtable.c
@@ -19869,9 +19825,9 @@
 +	    !mm->context.has_foreign_mappings)
 +		mm_unpin(mm);
 +}
-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
+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
++++ linux-2.6.18-xen/arch/i386/oprofile/Makefile	2006-11-19 14:26:22.000000000 +0100
 @@ -6,7 +6,11 @@
  		oprofilefs.o oprofile_stats.o  \
  		timer_int.o )
@@ -19884,9 +19840,9 @@
  					   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.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
+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
++++ linux-2.6.18-xen/arch/i386/oprofile/xenoprof.c	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,584 @@
 +/**
 + * @file xenoprof.c
@@ -20472,9 +20428,9 @@
 +        }
 +
 +}
-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
+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
++++ linux-2.6.18-xen/arch/i386/pci/irq-xen.c	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,1206 @@
 +/*
 + *	Low-Level PCI Support for PC -- Routing of Interrupts
@@ -21682,9 +21638,9 @@
 +
 +	return count;
 +}
-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
+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
++++ linux-2.6.18-xen/arch/i386/pci/Makefile	2006-11-19 14:26:22.000000000 +0100
 @@ -4,6 +4,10 @@
  obj-$(CONFIG_PCI_MMCONFIG)	+= mmconfig.o direct.o
  obj-$(CONFIG_PCI_DIRECT)	+= direct.o
@@ -21705,9 +21661,9 @@
 +include $(srctree)/scripts/Makefile.xen
 +obj-y := $(call cherrypickxen, $(obj-y))
 +endif
-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
+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
++++ linux-2.6.18-xen/arch/i386/pci/pcifront.c	2006-11-19 14:26:22.000000000 +0100
 @@ -0,0 +1,55 @@
 +/*
 + * PCI Frontend Stub - puts some "dummy" functions in to the Linux x86 PCI core
@@ -21764,18 +21720,18 @@
 +}
 +
 +arch_initcall(pcifront_x86_stub_init);
-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
+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
++++ linux-2.6.18-xen/arch/i386/power/Makefile	2006-11-19 14:26:22.000000000 +0100
 @@ -1,2 +1,4 @@
 -obj-$(CONFIG_PM)		+= cpu.o
 +obj-$(CONFIG_PM_LEGACY)		+= cpu.o
 +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.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
+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
++++ linux-2.6.18-xen/arch/ia64/dig/setup.c	2006-11-19 14:26:22.000000000 +0100
 @@ -24,6 +24,8 @@
  #include <asm/machvec.h>
  #include <asm/system.h>
@@ -21805,19 +21761,19 @@
 +	xen_start_info->console.domU.evtchn = 0;
 +#endif
  }
-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
+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
++++ linux-2.6.18-xen/arch/ia64/hp/sim/Makefile	2006-11-19 14:26:22.000000000 +0100
 @@ -14,3 +14,5 @@
  obj-$(CONFIG_HP_SIMSERIAL) += simserial.o
  obj-$(CONFIG_HP_SIMSERIAL_CONSOLE) += hpsim_console.o
  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.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 @@
+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-11-19 14:26:22.000000000 +0100
+@@ -58,6 +58,20 @@
  	bool
  	default y
  
@@ -21835,24 +21791,10 @@
 +	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 +493,21 @@
+@@ -465,6 +479,21 @@
  	bool
  	default PCI
  
@@ -21874,7 +21816,7 @@
  source "drivers/pci/pcie/Kconfig"
  
  source "drivers/pci/Kconfig"
-@@ -528,3 +571,34 @@
+@@ -528,3 +557,34 @@
  source "security/Kconfig"
  
  source "crypto/Kconfig"
@@ -21909,9 +21851,9 @@
 +endif
 +
 +source "drivers/xen/Kconfig"
-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
+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
++++ linux-2.6.18-xen/arch/ia64/kernel/asm-offsets.c	2006-11-19 14:26:22.000000000 +0100
 @@ -268,4 +268,29 @@
  	DEFINE(IA64_TIME_SOURCE_MMIO64, TIME_SOURCE_MMIO64);
  	DEFINE(IA64_TIME_SOURCE_MMIO32, TIME_SOURCE_MMIO32);
@@ -21942,9 +21884,9 @@
 +	DEFINE_MAPPED_REG_OFS(XSI_BANK1_R16_OFS, bank1_regs[0]);
 +#endif /* CONFIG_XEN */
  }
-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
+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
++++ linux-2.6.18-xen/arch/ia64/kernel/entry.S	2006-11-19 14:26:22.000000000 +0100
 @@ -180,7 +180,7 @@
   *	called.  The code starting at .map relies on this.  The rest of the code
   *	doesn't care about the interrupt masking status.
@@ -22064,9 +22006,9 @@
  	;;
  	mov ar.unat=r9
  	br.many b7
-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
+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
++++ linux-2.6.18-xen/arch/ia64/kernel/gate.lds.S	2006-11-19 14:26:22.000000000 +0100
 @@ -43,6 +43,28 @@
  				    __start_gate_brl_fsys_bubble_down_patchlist = .;
  				    *(.data.patch.brl_fsys_bubble_down)
@@ -22096,9 +22038,9 @@
    }									: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.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
+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
++++ linux-2.6.18-xen/arch/ia64/kernel/gate.S	2006-11-19 14:26:22.000000000 +0100
 @@ -6,13 +6,15 @@
   * 	David Mosberger-Tang <davidm at hpl.hp.com>
   */
@@ -22268,9 +22210,9 @@
  (p9)	mov r8=ENOSYS
  	FSYS_RETURN
  END(__kernel_syscall_via_epc)
-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
+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
++++ linux-2.6.18-xen/arch/ia64/kernel/head.S	2006-11-19 14:26:22.000000000 +0100
 @@ -367,6 +367,12 @@
  	;;
  (isBP)	st8 [r2]=r28		// save the address of the boot param area passed by the bootloader
@@ -22284,9 +22226,9 @@
  #ifdef CONFIG_SMP
  (isAP)	br.call.sptk.many rp=start_secondary
  .ret0:
-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
+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
++++ linux-2.6.18-xen/arch/ia64/kernel/iosapic.c	2006-11-19 14:26:22.000000000 +0100
 @@ -159,6 +159,65 @@
  static int iosapic_kmalloc_ok;
  static LIST_HEAD(free_rte_list);
@@ -22373,9 +22315,9 @@
  	if (pcat_compat) {
  		/*
  		 * Disable the compatibility mode interrupts (8259 style),
-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
+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
++++ linux-2.6.18-xen/arch/ia64/kernel/irq_ia64.c	2006-11-19 14:26:22.000000000 +0100
 @@ -30,6 +30,9 @@
  #include <linux/smp_lock.h>
  #include <linux/threads.h>
@@ -22678,9 +22620,9 @@
  #ifdef CONFIG_SMP
  	phys_cpu_id = cpu_physical_id(cpu);
  #else
-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
+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
++++ linux-2.6.18-xen/arch/ia64/kernel/pal.S	2006-11-19 14:26:23.000000000 +0100
 @@ -16,6 +16,7 @@
  #include <asm/processor.h>
  
@@ -22707,9 +22649,9 @@
  
  /*
   * Make a PAL call using the stacked registers calling convention.
-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
+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
++++ linux-2.6.18-xen/arch/ia64/kernel/patch.c	2006-11-19 14:26:23.000000000 +0100
 @@ -184,6 +184,73 @@
  	ia64_srlz_i();
  }
@@ -22795,9 +22737,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.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
+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-11-19 14:26:23.000000000 +0100
 @@ -60,6 +60,10 @@
  #include <asm/system.h>
  #include <asm/unistd.h>
@@ -22809,13 +22751,11 @@
  
  #if defined(CONFIG_SMP) && (IA64_CPU_SIZE > PAGE_SIZE)
  # error "struct cpuinfo_ia64 too big!"
-@@ -70,6 +74,24 @@
+@@ -70,6 +74,22 @@
  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)
 +{
@@ -22834,7 +22774,7 @@
  extern void ia64_setup_printk_clock(void);
  
  DEFINE_PER_CPU(struct cpuinfo_ia64, cpu_info);
-@@ -176,15 +198,33 @@
+@@ -176,15 +196,33 @@
  	return 0;
  }
  
@@ -22869,7 +22809,7 @@
  				struct rsvd_region tmp;
  				tmp = rsvd_region[j];
  				rsvd_region[j] = rsvd_region[j + 1];
-@@ -192,6 +232,36 @@
+@@ -192,6 +230,36 @@
  			}
  		}
  	}
@@ -22906,7 +22846,7 @@
  }
  
  /*
-@@ -242,6 +312,14 @@
+@@ -242,6 +310,14 @@
  	rsvd_region[n].end   = (unsigned long) ia64_imva(_end);
  	n++;
  
@@ -22921,7 +22861,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 +411,16 @@
+@@ -333,6 +409,16 @@
  {
  	int earlycons = 0;
  
@@ -22938,13 +22878,12 @@
  #ifdef CONFIG_SERIAL_SGI_L1_CONSOLE
  	{
  		extern int sn_serial_console_early_setup(void);
-@@ -402,6 +490,15 @@
+@@ -402,6 +488,14 @@
  {
  	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);
@@ -22954,7 +22893,7 @@
  	ia64_patch_vtop((u64) __start___vtop_patchlist, (u64) __end___vtop_patchlist);
  
  	*cmdline_p = __va(ia64_boot_param->command_line);
-@@ -478,6 +575,23 @@
+@@ -478,6 +572,23 @@
  			conswitchp = &vga_con;
  # endif
  	}
@@ -22978,7 +22917,7 @@
  #endif
  
  	/* enable IA-64 Machine Check Abort Handling unless disabled */
-@@ -486,6 +600,9 @@
+@@ -486,6 +597,9 @@
  
  	platform_setup(cmdline_p);
  	paging_init();
@@ -22988,7 +22927,7 @@
  }
  
  /*
-@@ -870,6 +987,15 @@
+@@ -870,6 +984,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();
@@ -23004,9 +22943,9 @@
  	pm_idle = default_idle;
  }
  
-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
+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
++++ linux-2.6.18-xen/arch/ia64/Makefile	2006-11-19 14:26:22.000000000 +0100
 @@ -45,6 +45,12 @@
  endif
  
@@ -23047,9 +22986,9 @@
  
  define archhelp
    echo '* compressed	- Build compressed kernel image'
-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
+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
++++ linux-2.6.18-xen/arch/ia64/mm/ioremap.c	2006-11-19 14:26:23.000000000 +0100
 @@ -16,6 +16,9 @@
  static inline void __iomem *
  __ioremap (unsigned long offset, unsigned long size)
@@ -23060,15 +22999,15 @@
  	return (void __iomem *) (__IA64_UNCACHED_OFFSET | offset);
  }
  
-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
+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
++++ linux-2.6.18-xen/arch/ia64/xen/drivers/README	2006-11-19 14:26:23.000000000 +0100
 @@ -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.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
+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
++++ linux-2.6.18-xen/arch/ia64/xen/hypercall.S	2006-11-19 14:26:23.000000000 +0100
 @@ -0,0 +1,413 @@
 +/*
 + * Support routines for Xen hypercalls
@@ -23483,10 +23422,10 @@
 +	;; 
 +END(xen_ssm_i_1)
 +#endif
-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 @@
+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-11-19 14:26:23.000000000 +0100
+@@ -0,0 +1,833 @@
 +/******************************************************************************
 + * include/asm-ia64/shadow.h
 + *
@@ -23529,11 +23468,59 @@
 +int running_on_xen;
 +EXPORT_SYMBOL(running_on_xen);
 +
-+#ifdef CONFIG_XEN_IA64_EXPOSE_P2M
-+static int p2m_expose_init(void);
-+#else
-+#define p2m_expose_init() (-ENOSYS)
-+#endif
++//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);
 +
 +//XXX same as i386, x86_64 contiguous_bitmap_set(), contiguous_bitmap_clear()
 +// move those to lib/contiguous_bitmap?
@@ -23812,6 +23799,8 @@
 +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++) {
@@ -23819,7 +23808,29 @@
 +				(struct gnttab_map_grant_ref*)uop + i);
 +		}
 +	}
-+	return xencomm_mini_hypercall_grant_table_op(cmd, uop, count);
++	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);
 +}
 +EXPORT_SYMBOL(HYPERVISOR_grant_table_op);
 +
@@ -23943,10 +23954,6 @@
 +	       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);
@@ -23967,7 +23974,6 @@
 +};
 +
 +struct xen_ia64_privcmd_vma {
-+	int				is_privcmd_mmapped;
 +	struct xen_ia64_privcmd_range*	range;
 +
 +	unsigned long			num_entries;
@@ -24096,1911 +24102,297 @@
 +	privcmd_vma->entries = &privcmd_range->entries[entry_offset];
 +	vma->vm_private_data = privcmd_vma;
 +	for (i = 0; i < privcmd_vma->num_entries; i++) {
-+		xen_ia64_privcmd_entry_open(privcmd_range, entry_offset + i);
-+	}
-+
-+	vma->vm_private_data = privcmd_vma;
-+	vma->vm_ops = &xen_ia64_privcmd_vm_ops;
-+}
-+
-+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);
-+}
-+
-+static void
-+xen_ia64_privcmd_vma_close(struct vm_area_struct* vma)
-+{
-+	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;
-+	unsigned long entry_offset = vma->vm_pgoff - privcmd_range->pgoff;
-+	unsigned long i;
-+
-+	for (i = 0; i < privcmd_vma->num_entries; i++) {
-+		xen_ia64_privcmd_entry_close(privcmd_range, entry_offset + i);
-+	}
-+	vma->vm_private_data = NULL;
-+	kfree(privcmd_vma);
-+
-+	if (atomic_dec_and_test(&privcmd_range->ref_count)) {
-+#if 1
-+		for (i = 0; i < privcmd_range->num_entries; i++) {
-+			struct xen_ia64_privcmd_entry* entry =
-+				&privcmd_range->entries[i];
-+			BUG_ON(atomic_read(&entry->map_count) != 0);
-+			BUG_ON(entry->gpfn != INVALID_GPFN);
-+		}
-+#endif
-+		release_resource(privcmd_range->res);
-+		kfree(privcmd_range->res);
-+		vfree(privcmd_range);
-+	}
-+}
-+
-+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;
-+	unsigned long size = vma->vm_end - vma->vm_start;
-+	unsigned long num_entries = size >> PAGE_SHIFT;
-+	struct xen_ia64_privcmd_range* privcmd_range = NULL;
-+	struct xen_ia64_privcmd_vma* privcmd_vma = NULL;
-+	struct resource* res = NULL;
-+	unsigned long i;
-+	BUG_ON(!is_running_on_xen());
-+
-+	BUG_ON(file->private_data != NULL);
-+
-+	error = -ENOMEM;
-+	privcmd_range =
-+		vmalloc(sizeof(*privcmd_range) +
-+			sizeof(privcmd_range->entries[0]) * num_entries);
-+	if (privcmd_range == NULL) {
-+		goto out_enomem0;
-+	}
-+	privcmd_vma = kmalloc(sizeof(*privcmd_vma), GFP_KERNEL);
-+	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;
-+	}
-+	res->name = "Xen privcmd mmap";
-+	error = allocate_resource(&iomem_resource, res, size,
-+				  privcmd_resource_min, privcmd_resource_max,
-+				  privcmd_resource_align, NULL, NULL);
-+	if (error) {
-+		goto out_enomem1;
-+	}
-+	privcmd_range->res = res;
-+
-+	/* DONTCOPY is essential for Xen as copy_page_range is broken. */
-+	vma->vm_flags |= VM_RESERVED | VM_IO | VM_DONTCOPY | VM_PFNMAP;
-+
-+	atomic_set(&privcmd_range->ref_count, 1);
-+	privcmd_range->pgoff = vma->vm_pgoff;
-+	privcmd_range->num_entries = num_entries;
-+	for (i = 0; i < privcmd_range->num_entries; i++) {
-+		xen_ia64_privcmd_init_entry(&privcmd_range->entries[i]);
-+	}
-+
-+	__xen_ia64_privcmd_vma_open(vma, privcmd_vma, privcmd_range);
-+	return 0;
-+
-+out_enomem1:
-+	kfree(res);
-+	kfree(privcmd_vma);
-+out_enomem0:
-+	vfree(privcmd_range);
-+	return error;
-+}
-+
-+int
-+direct_remap_pfn_range(struct vm_area_struct *vma,
-+		       unsigned long address,	// process virtual address
-+		       unsigned long mfn,	// mfn, mfn + 1, ... mfn + size/PAGE_SIZE
-+		       unsigned long size,
-+		       pgprot_t prot,
-+		       domid_t  domid)		// target domain
-+{
-+	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;
-+	unsigned long entry_offset = vma->vm_pgoff - privcmd_range->pgoff;
-+
-+	unsigned long i;
-+	unsigned long offset;
-+	int error = 0;
-+	BUG_ON(!is_running_on_xen());
-+
-+#if 0
-+	if (prot != vm->vm_page_prot) {
-+		return -EINVAL;
-+	}
-+#endif
-+
-+	i = (address - vma->vm_start) >> PAGE_SHIFT;
-+	for (offset = 0; offset < size; offset += PAGE_SIZE) {
-+		error = xen_ia64_privcmd_entry_mmap(vma, (address + offset) & PAGE_MASK, privcmd_range, entry_offset + i, mfn, prot, domid);
-+		if (error != 0) {
-+			break;
-+		}
-+
-+		i++;
-+		mfn++;
-+        }
-+
-+	return error;
-+}
-+
-+
-+/* Called after suspend, to resume time.  */
-+void
-+time_resume(void)
-+{
-+	extern void ia64_cpu_local_tick(void);
-+
-+	/* Just trigger a tick.  */
-+	ia64_cpu_local_tick();
-+}
-+
-+///////////////////////////////////////////////////////////////////////////
-+// 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 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.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
-+ *
-+ * Copyright (c) 2006 Isaku Yamahata <yamahata at valinux co jp>
-+ *                    VA Linux Systems Japan K.K.
-+ *
-+ * 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/mm.h>
-+#include <linux/module.h>
-+#include <linux/slab.h>
-+#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)
-+{
-+	int order;
-+	unsigned long virt;
-+	unsigned long nr_pages;
-+	struct vm_struct* area;
-+	
-+	order = get_order(size);
-+	virt = __get_free_pages(GFP_KERNEL, order);
-+	if (virt == 0) {
-+		goto err0;
-+	}
-+	nr_pages = 1 << order;
-+	scrub_pages(virt, nr_pages);
-+	
-+	area = kmalloc(sizeof(*area), GFP_KERNEL);
-+	if (area == NULL) {
-+		goto err1;
-+	}
-+	
-+        area->flags = VM_IOREMAP;//XXX
-+        area->addr = (void*)virt;
-+        area->size = size;
-+        area->pages = NULL; //XXX
-+        area->nr_pages = nr_pages;
-+        area->phys_addr = 0; 	/* xenbus_map_ring_valloc uses this field!  */
-+
-+	return area;
-+
-+err1:
-+	free_pages(virt, order);
-+err0:
-+	return NULL;
-+	
-+}
-+EXPORT_SYMBOL_GPL(alloc_vm_area);
-+
-+void free_vm_area(struct vm_struct *area)
-+{
-+	unsigned int order = get_order(area->size);
-+	unsigned long i;
-+	unsigned long phys_addr = __pa(area->addr);
-+
-+	// This area is used for foreign page mappping.
-+	// So underlying machine page may not be assigned.
-+	for (i = 0; i < (1 << order); i++) {
-+		unsigned long ret;
-+		unsigned long gpfn = (phys_addr >> PAGE_SHIFT) + i;
-+		struct xen_memory_reservation reservation = {
-+			.nr_extents   = 1,
-+			.address_bits = 0,
-+			.extent_order = 0,
-+			.domid        = DOMID_SELF
-+		};
-+		set_xen_guest_handle(reservation.extent_start, &gpfn);
-+		ret = HYPERVISOR_memory_op(XENMEM_populate_physmap,
-+					   &reservation);
-+		BUG_ON(ret != 1);
-+	}
-+	free_pages((unsigned long)area->addr, order);
-+	kfree(area);
-+}
-+EXPORT_SYMBOL_GPL(free_vm_area);
-+
-+void lock_vm_area(struct vm_struct *area)
-+{
-+	// nothing
-+}
-+EXPORT_SYMBOL_GPL(lock_vm_area);
-+
-+void unlock_vm_area(struct vm_struct *area)
-+{
-+	// nothing
-+}
-+EXPORT_SYMBOL_GPL(unlock_vm_area);
-+
-+/*
-+ * Local variables:
-+ *  c-file-style: "linux"
-+ *  indent-tabs-mode: t
-+ *  c-indent-level: 8
-+ *  c-basic-offset: 8
-+ *  tab-width: 8
-+ * End:
-+ */
-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;
++		xen_ia64_privcmd_entry_open(privcmd_range, entry_offset + i);
 +	}
 +
-+	rc = xencomm_create(arg, argsize, &desc, GFP_KERNEL);
-+	if (rc)
-+		return rc;
++	vma->vm_private_data = privcmd_vma;
++	vma->vm_ops = &xen_ia64_privcmd_vm_ops;
++}
 +
-+	rc = xencomm_arch_hypercall_xen_version(cmd, desc);
++static void
++xen_ia64_privcmd_vma_open(struct vm_area_struct* vma)
++{
++	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;
 +
-+	xencomm_free(desc);
++	atomic_inc(&privcmd_range->ref_count);
++	// vm_op->open() can't fail.
++	privcmd_vma = kmalloc(sizeof(*privcmd_vma), GFP_KERNEL | __GFP_NOFAIL);
 +
-+	return rc;
++	__xen_ia64_privcmd_vma_open(vma, privcmd_vma, privcmd_range);
 +}
 +
-+static int
-+xencomm_privcmd_event_channel_op(privcmd_hypercall_t *hypercall)
++static void
++xen_ia64_privcmd_vma_close(struct vm_area_struct* vma)
 +{
-+	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;
++	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;
++	unsigned long entry_offset = vma->vm_pgoff - privcmd_range->pgoff;
++	unsigned long i;
 +
-+	default:
-+		printk("%s: unknown EVTCHNOP %d\n", __func__, cmd);
-+		return -EINVAL;
++	for (i = 0; i < privcmd_vma->num_entries; i++) {
++		xen_ia64_privcmd_entry_close(privcmd_range, entry_offset + i);
 +	}
++	vma->vm_private_data = NULL;
++	kfree(privcmd_vma);
 +
-+	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;
++	if (atomic_dec_and_test(&privcmd_range->ref_count)) {
++#if 1
++		for (i = 0; i < privcmd_range->num_entries; i++) {
++			struct xen_ia64_privcmd_entry* entry =
++				&privcmd_range->entries[i];
++			BUG_ON(atomic_read(&entry->map_count) != 0);
++			BUG_ON(entry->gpfn != INVALID_GPFN);
++		}
++#endif
++		release_resource(privcmd_range->res);
++		kfree(privcmd_range->res);
++		vfree(privcmd_range);
++	}
 +}
 +
-+static int
-+xencomm_privcmd_hvm_op(privcmd_hypercall_t *hypercall)
++int
++privcmd_mmap(struct file * file, struct vm_area_struct * vma)
 +{
-+	int cmd = hypercall->arg[0];
-+	struct xencomm_handle *desc;
-+	unsigned int argsize;
-+	int ret;
++	int error;
++	unsigned long size = vma->vm_end - vma->vm_start;
++	unsigned long num_entries = size >> PAGE_SHIFT;
++	struct xen_ia64_privcmd_range* privcmd_range = NULL;
++	struct xen_ia64_privcmd_vma* privcmd_vma = NULL;
++	struct resource* res = NULL;
++	unsigned long i;
++	BUG_ON(!is_running_on_xen());
 +
-+	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;
++	BUG_ON(file->private_data != NULL);
++
++	error = -ENOMEM;
++	privcmd_range =
++		vmalloc(sizeof(*privcmd_range) +
++			sizeof(privcmd_range->entries[0]) * num_entries);
++	if (privcmd_range == NULL) {
++		goto out_enomem0;
++	}
++	privcmd_vma = kmalloc(sizeof(*privcmd_vma), GFP_KERNEL);
++	if (privcmd_vma == NULL) {
++		goto out_enomem1;
++	}
++	res = kzalloc(sizeof(*res), GFP_KERNEL);
++	if (res == NULL) {
++		goto out_enomem1;
++	}
++	res->name = "Xen privcmd mmap";
++	error = allocate_resource(&iomem_resource, res, size,
++				  privcmd_resource_min, privcmd_resource_max,
++				  privcmd_resource_align, NULL, NULL);
++	if (error) {
++		goto out_enomem1;
 +	}
++	privcmd_range->res = res;
 +
-+	ret = xencomm_create((void *)hypercall->arg[1], argsize,
-+	                     &desc, GFP_KERNEL);
-+	if (ret)
-+		return ret;
++	/* DONTCOPY is essential for Xen as copy_page_range is broken. */
++	vma->vm_flags |= VM_RESERVED | VM_IO | VM_DONTCOPY | VM_PFNMAP;
++
++	atomic_set(&privcmd_range->ref_count, 1);
++	privcmd_range->pgoff = vma->vm_pgoff;
++	privcmd_range->num_entries = num_entries;
++	for (i = 0; i < privcmd_range->num_entries; i++) {
++		xen_ia64_privcmd_init_entry(&privcmd_range->entries[i]);
++	}
 +
-+	ret = xencomm_arch_hypercall_hvm_op(cmd, desc);
++	__xen_ia64_privcmd_vma_open(vma, privcmd_vma, privcmd_range);
++	return 0;
 +
-+	xencomm_free(desc);
-+	return ret;
++out_enomem1:
++	kfree(res);
++	kfree(privcmd_vma);
++out_enomem0:
++	vfree(privcmd_range);
++	return error;
 +}
 +
-+static int
-+xencomm_privcmd_sched_op(privcmd_hypercall_t *hypercall)
++int
++direct_remap_pfn_range(struct vm_area_struct *vma,
++		       unsigned long address,	// process virtual address
++		       unsigned long mfn,	// mfn, mfn + 1, ... mfn + size/PAGE_SIZE
++		       unsigned long size,
++		       pgprot_t prot,
++		       domid_t  domid)		// target domain
 +{
-+	int cmd = hypercall->arg[0];
-+	struct xencomm_handle *desc;
-+	unsigned int argsize;
-+	int ret;
++	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;
++	unsigned long entry_offset = vma->vm_pgoff - privcmd_range->pgoff;
 +
-+	switch (cmd) {
-+	case SCHEDOP_remote_shutdown:
-+		argsize = sizeof(sched_remote_shutdown_t);
-+		break;
-+	default:
-+		printk("%s: unknown SCHEDOP %d\n", __func__, cmd);
++	unsigned long i;
++	unsigned long offset;
++	int error = 0;
++	BUG_ON(!is_running_on_xen());
++
++#if 0
++	if (prot != vm->vm_page_prot) {
 +		return -EINVAL;
 +	}
++#endif
 +
-+	ret = xencomm_create((void *)hypercall->arg[1], argsize,
-+	                     &desc, GFP_KERNEL);
-+	if (ret)
-+		return ret;
++	i = (address - vma->vm_start) >> PAGE_SHIFT;
++	for (offset = 0; offset < size; offset += PAGE_SIZE) {
++		error = xen_ia64_privcmd_entry_mmap(vma, (address + offset) & PAGE_MASK, privcmd_range, entry_offset + i, mfn, prot, domid);
++		if (error != 0) {
++			break;
++		}
 +
-+	ret = xencomm_arch_hypercall_sched_op(cmd, desc);
++		i++;
++		mfn++;
++        }
 +
-+	xencomm_free(desc);
-+	return ret;
++	return error;
 +}
 +
-+int
-+privcmd_hypercall(privcmd_hypercall_t *hypercall)
++
++/* Called after suspend, to resume time.  */
++void
++time_resume(void)
 +{
-+	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;
-+	}
++	extern void ia64_cpu_local_tick(void);
++
++	/* 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-11-19 14:26:23.000000000 +0100
+@@ -0,0 +1,8 @@
++#
++# Makefile for Xen components
++#
 +
-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
++obj-y := hypercall.o xenivt.o xenentry.o xensetup.o xenpal.o xenhpski.o \
++	 hypervisor.o pci-dma-xen.o util.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-11-19 14:26:23.000000000 +0100
+@@ -0,0 +1,115 @@
++/******************************************************************************
++ * arch/ia64/xen/util.c
++ * This file is the ia64 counterpart of drivers/xen/util.c
++ *
++ * Copyright (c) 2006 Isaku Yamahata <yamahata at valinux co jp>
++ *                    VA Linux Systems Japan K.K.
 + *
 + * 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
++ * 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;
++#include <linux/module.h>
++#include <linux/slab.h>
++#include <linux/vmalloc.h>
++#include <asm/uaccess.h>
++#include <xen/driver_util.h>
 +
-+/* Translate virtual address to physical address.  */
-+unsigned long
-+xencomm_vaddr_to_paddr(unsigned long vaddr)
++struct vm_struct *alloc_vm_area(unsigned long size)
 +{
-+	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);
++	int order;
++	unsigned long virt;
++	unsigned long nr_pages;
++	struct vm_struct* area;
++	
++	order = get_order(size);
++	virt = __get_free_pages(GFP_KERNEL, order);
++	if (virt == 0) {
++		goto err0;
 +	}
-+#endif
-+
-+	if (vaddr > TASK_SIZE) {
-+		/* kernel address */
-+		return __pa(vaddr);
++	nr_pages = 1 << order;
++	scrub_pages(virt, nr_pages);
++	
++	area = kmalloc(sizeof(*area), GFP_KERNEL);
++	if (area == NULL) {
++		goto err1;
 +	}
++	
++        area->flags = VM_IOREMAP;//XXX
++        area->addr = (void*)virt;
++        area->size = size;
++        area->pages = NULL; //XXX
++        area->nr_pages = nr_pages;
++        area->phys_addr = 0; 	/* xenbus_map_ring_valloc uses this field!  */
 +
-+	/* 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 area;
 +
-+	return (page_to_pfn(page) << PAGE_SHIFT) | (vaddr & ~PAGE_MASK);
++err1:
++	free_pages(virt, order);
++err0:
++	return NULL;
++	
 +}
++EXPORT_SYMBOL_GPL(alloc_vm_area);
 +
-+static int
-+xencomm_init(struct xencomm_desc *desc, void *buffer, unsigned long bytes)
++void free_vm_area(struct vm_struct *area)
 +{
-+	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;
-+	}
++	unsigned int order = get_order(area->size);
++	unsigned long i;
++	unsigned long phys_addr = __pa(area->addr);
 +
-+	if (recorded < bytes) {
-+		printk("%s: could only translate %ld of %ld bytes\n",
-+		       __func__, recorded, bytes);
-+		return -ENOSPC;
++	// This area is used for foreign page mappping.
++	// So underlying machine page may not be assigned.
++	for (i = 0; i < (1 << order); i++) {
++		unsigned long ret;
++		unsigned long gpfn = (phys_addr >> PAGE_SHIFT) + i;
++		struct xen_memory_reservation reservation = {
++			.nr_extents   = 1,
++			.address_bits = 0,
++			.extent_order = 0,
++			.domid        = DOMID_SELF
++		};
++		set_xen_guest_handle(reservation.extent_start, &gpfn);
++		ret = HYPERVISOR_memory_op(XENMEM_populate_physmap,
++					   &reservation);
++		BUG_ON(ret != 1);
 +	}
-+
-+	/* 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));
++	free_pages((unsigned long)area->addr, order);
++	kfree(area);
 +}
++EXPORT_SYMBOL_GPL(free_vm_area);
 +
-+int
-+xencomm_create(void *buffer, unsigned long bytes,
-+               struct xencomm_handle **ret, gfp_t gfp_mask)
++void lock_vm_area(struct vm_struct *area)
 +{
-+	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;
++	// nothing
 +}
++EXPORT_SYMBOL_GPL(lock_vm_area);
 +
-+/* "mini" routines, for stack-based communications: */
-+
-+static void *
-+xencomm_alloc_mini(struct xencomm_mini *area, int *nbr_area)
++void unlock_vm_area(struct vm_struct *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;
++	// nothing
 +}
++EXPORT_SYMBOL_GPL(unlock_vm_area);
 +
-+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
++/*
++ * Local variables:
++ *  c-file-style: "linux"
++ *  indent-tabs-mode: t
++ *  c-indent-level: 8
++ *  c-basic-offset: 8
++ *  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
++++ linux-2.6.18-xen/arch/ia64/xen/xenentry.S	2006-11-19 14:26:23.000000000 +0100
 @@ -0,0 +1,867 @@
 +/*
 + * ia64/xen/entry.S
@@ -26869,9 +25261,9 @@
 +#else
 +END(ia64_leave_kernel)
 +#endif
-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
+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
++++ linux-2.6.18-xen/arch/ia64/xen/xenhpski.c	2006-11-19 14:26:23.000000000 +0100
 @@ -0,0 +1,19 @@
 +
 +extern unsigned long xen_get_cpuid(int);
@@ -26892,9 +25284,9 @@
 +	return 1;
 +}
 +
-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
+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
++++ linux-2.6.18-xen/arch/ia64/xen/xenivt.S	2006-11-19 14:26:23.000000000 +0100
 @@ -0,0 +1,2169 @@
 +/*
 + * arch/ia64/xen/ivt.S
@@ -29065,9 +27457,9 @@
 +	br.call.sptk.many b6=evtchn_do_upcall
 +END(xen_event_callback)
 +#endif
-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
+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
++++ linux-2.6.18-xen/arch/ia64/xen/xenminstate.h	2006-11-19 14:26:23.000000000 +0100
 @@ -0,0 +1,368 @@
 +
 +#include <asm/cache.h>
@@ -29437,9 +27829,9 @@
 +#else
 +#define SAVE_MIN		DO_SAVE_MIN(     , mov r30=r0, )
 +#endif
-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
+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
++++ linux-2.6.18-xen/arch/ia64/xen/xenpal.S	2006-11-19 14:26:23.000000000 +0100
 @@ -0,0 +1,76 @@
 +/*
 + * ia64/xen/xenpal.S
@@ -29517,10 +27909,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.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 @@
+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-11-19 14:26:23.000000000 +0100
+@@ -0,0 +1,54 @@
 +/*
 + * Support routines for Xen
 + *
@@ -29545,11 +27937,12 @@
 +	
 +	mov cr.iva=r10
 +
-+	/* Set xsi base.  */
-+#define FW_HYPERCALL_SET_SHARED_INFO_VA			0x600
-+(isBP)	mov r2=FW_HYPERCALL_SET_SHARED_INFO_VA
++#if XSI_BASE != 0xf100000000000000UL
++	/* Backward compatibility.  */
++(isBP)	mov r2=0x600
 +(isBP)	movl r28=XSI_BASE;;
 +(isBP)	break 0x1000;;
++#endif
 +
 +	br.ret.sptk.many rp
 +	;;
@@ -29559,24 +27952,24 @@
 +
 +/* Stub for suspend.
 +   Just force the stacked registers to be written in memory.  */	
-+GLOBAL_ENTRY(xencomm_arch_hypercall_suspend)
-+	mov r15=r32
-+	;; 
++GLOBAL_ENTRY(HYPERVISOR_suspend)
 +	alloc r20=ar.pfs,0,0,0,0
-+	mov r2=__HYPERVISOR_sched_op
-+	;; 
++	mov r14=2
++	mov r15=r12
++	;;
 +	/* We don't want to deal with RSE.  */
 +	flushrs
-+	mov r14=2 // SCHEDOP_shutdown
++	mov r2=__HYPERVISOR_sched_op
++	st4 [r12]=r14
 +	;;
 +	break 0x1000
 +	;; 
 +	mov ar.pfs=r20
 +	br.ret.sptk.many b0
-+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
++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
++++ linux-2.6.18-xen/arch/um/kernel/physmem.c	2006-11-19 14:26:32.000000000 +0100
 @@ -226,7 +226,7 @@
  EXPORT_SYMBOL(physmem_remove_mapping);
  EXPORT_SYMBOL(physmem_subst_mapping);
@@ -29595,9 +27988,9 @@
  }
  
  int is_remapped(void *virt)
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/ia32/ia32entry-xen.S	2006-11-19 14:26:33.000000000 +0100
 @@ -0,0 +1,743 @@
 +/*
 + * Compatibility mode system call entry point for x86-64. 
@@ -30342,9 +28735,9 @@
 +	.quad compat_sys_vmsplice
 +	.quad compat_sys_move_pages
 +ia32_syscall_end:		
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/ia32/Makefile	2006-11-19 14:26:33.000000000 +0100
 @@ -27,9 +27,25 @@
  			   -Wl,-soname=linux-gate.so.1 -o $@ \
  			   -Wl,-T,$(filter-out FORCE,$^)
@@ -30373,9 +28766,9 @@
 +
 +obj-y := $(call cherrypickxen, $(obj-y))
 +endif
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/ia32/syscall32_syscall-xen.S	2006-11-19 14:26:33.000000000 +0100
 @@ -0,0 +1,28 @@
 +/* 32bit VDSOs mapped into user space. */
 +
@@ -30405,9 +28798,9 @@
 +syscall32_sysenter:
 +	.incbin "arch/x86_64/ia32/vsyscall-sysenter.so"
 +syscall32_sysenter_end:
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/ia32/syscall32-xen.c	2006-11-19 14:26:33.000000000 +0100
 @@ -0,0 +1,128 @@
 +/* Copyright 2002,2003 Andi Kleen, SuSE Labs */
 +
@@ -30537,9 +28930,9 @@
 +	wrmsrl(MSR_CSTAR, ia32_cstar_target);
 +#endif
 +}
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/ia32/vsyscall-int80.S	2006-11-19 14:26:33.000000000 +0100
 @@ -0,0 +1,58 @@
 +/*
 + * Code for the vsyscall page.  This version uses the old int $0x80 method.
@@ -30599,9 +28992,9 @@
 + */
 +#define SYSCALL_ENTER_KERNEL    int $0x80
 +#include "vsyscall-sigreturn.S"
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/ia32/vsyscall-sigreturn.S	2006-11-19 14:26:33.000000000 +0100
 @@ -139,5 +139,5 @@
  	.align 4
  .LENDFDE3:
@@ -30609,17 +29002,17 @@
 -#include "../../i386/kernel/vsyscall-note.S"
 +#include <vsyscall-note.S>
  
-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 @@
+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-11-19 14:26:33.000000000 +0100
+@@ -26,6 +26,7 @@
  
- config STACKTRACE_SUPPORT
+ config LOCKDEP_SUPPORT
  	bool
 +	depends on !X86_64_XEN
  	default y
  
- config SEMAPHORE_SLEEPERS
+ config STACKTRACE_SUPPORT
 @@ -135,6 +136,22 @@
  
  endchoice
@@ -30802,17 +29195,28 @@
 +source "drivers/xen/Kconfig"
 +
  source "lib/Kconfig"
-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
+diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/Kconfig.debug linux-2.6.18-xen/arch/x86_64/Kconfig.debug
+--- linux-2.6.18/arch/x86_64/Kconfig.debug	2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/arch/x86_64/Kconfig.debug	2006-11-19 14:26:33.000000000 +0100
+@@ -2,6 +2,7 @@
+ 
+ config TRACE_IRQFLAGS_SUPPORT
+ 	bool
++	depends on !X86_64_XEN
+ 	default y
+ 
+ source "lib/Kconfig.debug"
+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
++++ linux-2.6.18-xen/arch/x86_64/kernel/acpi/Makefile	2006-11-19 14:26:33.000000000 +0100
 @@ -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.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
+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
++++ linux-2.6.18-xen/arch/x86_64/kernel/apic-xen.c	2006-11-19 14:26:33.000000000 +0100
 @@ -0,0 +1,197 @@
 +/*
 + *	Local APIC handling, local APIC timers
@@ -31011,9 +29415,9 @@
 +
 +	return 1;
 +}
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/kernel/asm-offsets.c	2006-11-19 14:26:33.000000000 +0100
 @@ -67,8 +67,10 @@
  	DEFINE(pbe_address, offsetof(struct pbe, address));
  	DEFINE(pbe_orig_address, offsetof(struct pbe, orig_address));
@@ -31025,10 +29429,10 @@
  	BLANK();
  	DEFINE(crypto_tfm_ctx_offset, offsetof(struct crypto_tfm, __crt_ctx));
  	return 0;
-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 @@
+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
++++ linux-2.6.18-xen/arch/x86_64/kernel/e820-xen.c	2006-11-19 14:26:33.000000000 +0100
+@@ -0,0 +1,758 @@
 +/* 
 + * Handle the memory map.
 + * The functions here do the job until bootmem takes over.
@@ -31078,6 +29482,7 @@
 +
 +/* Check for some hardcoded bad areas that early boot is not allowed to touch */ 
 +static inline int bad_addr(unsigned long *addrp, unsigned long size)
++
 +{ 
 +	unsigned long addr = *addrp, last = addr + size; 
 +
@@ -31786,9 +30191,9 @@
 +	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.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
+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
++++ linux-2.6.18-xen/arch/x86_64/kernel/early_printk-xen.c	2006-11-19 14:26:33.000000000 +0100
 @@ -0,0 +1,304 @@
 +
 +#include <linux/console.h>
@@ -32094,10 +30499,10 @@
 +}
 +
 +__setup("earlyprintk=", setup_early_printk);
-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 @@
+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-11-19 14:26:33.000000000 +0100
+@@ -0,0 +1,1212 @@
 +/*
 + *  linux/arch/x86_64/entry.S
 + *
@@ -32440,8 +30845,7 @@
 +	movq %r10,%rcx	/* fixup for C */
 +	call *sys_call_table(,%rax,8)
 +1:	movq %rax,RAX-ARGOFFSET(%rsp)
-+	/* Use IRET because user could have changed frame */
-+	jmp int_ret_from_sys_call
++	jmp ret_from_sys_call
 +	CFI_ENDPROC
 +END(system_call)
 +		
@@ -33311,10 +31715,10 @@
 +	CFI_ENDPROC
 +ENDPROC(arch_unwind_init_running)
 +#endif
-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 @@
+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
++++ linux-2.6.18-xen/arch/x86_64/kernel/genapic_xen.c	2006-11-19 14:26:33.000000000 +0100
+@@ -0,0 +1,174 @@
 +/*
 + * Copyright 2004 James Cleverdon, IBM.
 + * Subject to the GNU Public License, v.2
@@ -33450,14 +31854,12 @@
 +		xen_send_IPI_shortcut(APIC_DEST_ALLINC, vector, APIC_DEST_LOGICAL);
 +}
 +
-+#ifdef CONFIG_XEN_PRIVILEGED_GUEST
 +static int xen_apic_id_registered(void)
 +{
 +	/* better be set */
 +	Dprintk("%s\n", __FUNCTION__);
 +	return physid_isset(smp_processor_id(), phys_cpu_present_map);
 +}
-+#endif
 +
 +static unsigned int xen_cpu_mask_to_apicid(cpumask_t cpumask)
 +{
@@ -33491,9 +31893,9 @@
 +	.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.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
+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
++++ linux-2.6.18-xen/arch/x86_64/kernel/genapic-xen.c	2006-11-19 14:26:33.000000000 +0100
 @@ -0,0 +1,143 @@
 +/*
 + * Copyright 2004 James Cleverdon, IBM.
@@ -33638,9 +32040,9 @@
 +	xen_send_IPI_shortcut(APIC_DEST_SELF, vector, APIC_DEST_PHYSICAL);
 +#endif
 +}
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/kernel/head64-xen.c	2006-11-19 14:26:33.000000000 +0100
 @@ -0,0 +1,161 @@
 +/*
 + *  linux/arch/x86_64/kernel/head64.c -- prepare to run common code
@@ -33803,9 +32205,9 @@
 +	setup_boot_cpu_data();
 +	start_kernel();
 +}
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/kernel/head-xen.S	2006-11-19 14:26:33.000000000 +0100
 @@ -0,0 +1,191 @@
 +/*
 + *  linux/arch/x86_64/kernel/head.S -- start in 32bit and switch to 64bit
@@ -33998,9 +32400,9 @@
 +	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.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
+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
++++ linux-2.6.18-xen/arch/x86_64/kernel/init_task.c	2006-11-19 14:26:33.000000000 +0100
 @@ -37,6 +37,8 @@
  struct task_struct init_task = INIT_TASK(init_task);
  
@@ -34018,9 +32420,9 @@
  
  /* 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.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
+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
++++ linux-2.6.18-xen/arch/x86_64/kernel/io_apic-xen.c	2006-11-19 14:26:33.000000000 +0100
 @@ -0,0 +1,2263 @@
 +/*
 + *	Intel IO-APIC support for multi-Pentium hosts.
@@ -36285,9 +34687,9 @@
 +}
 +#endif
 +#endif /* !CONFIG_XEN */
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/kernel/ioport-xen.c	2006-11-19 14:26:33.000000000 +0100
 @@ -0,0 +1,99 @@
 +/*
 + *	linux/arch/x86_64/kernel/ioport.c
@@ -36388,113 +34790,9 @@
 +
 +	return 0;
 +}
-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>
-+#include <linux/smp.h>
-+#include <asm/irqflags.h>
-+#include <asm/hypervisor.h>
-+
-+/* 
-+ * The use of 'barrier' in the following reflects their use as local-lock
-+ * operations. Reentrancy must be prevented (e.g., __cli()) /before/ following
-+ * critical operations are executed. All critical operations must complete
-+ * /before/ reentrancy is permitted (e.g., __sti()). Alpha architecture also
-+ * includes these barriers, for example.
-+ */
-+
-+unsigned long __raw_local_save_flags(void)
-+{
-+	struct vcpu_info *_vcpu;
-+	unsigned long flags;
-+
-+	preempt_disable();
-+	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];
-+	flags = _vcpu->evtchn_upcall_mask;
-+	preempt_enable();
-+
-+	return flags;
-+}
-+EXPORT_SYMBOL(__raw_local_save_flags);
-+
-+void raw_local_irq_restore(unsigned long flags)
-+{
-+	struct vcpu_info *_vcpu;
-+	preempt_disable();
-+	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];
-+	if ((_vcpu->evtchn_upcall_mask = flags) == 0) {
-+		barrier(); /* unmask then check (avoid races) */
-+		if ( unlikely(_vcpu->evtchn_upcall_pending) )
-+			force_evtchn_callback();
-+		preempt_enable();
-+	} else
-+		preempt_enable_no_resched();
-+}
-+EXPORT_SYMBOL(raw_local_irq_restore);
-+
-+void raw_local_irq_disable(void)
-+{
-+	struct vcpu_info *_vcpu;
-+
-+	preempt_disable();
-+	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];
-+	_vcpu->evtchn_upcall_mask = 1;
-+	preempt_enable_no_resched();
-+}
-+EXPORT_SYMBOL(raw_local_irq_disable);
-+
-+void raw_local_irq_enable(void)
-+{
-+	struct vcpu_info *_vcpu;
-+
-+	preempt_disable();
-+	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];
-+	_vcpu->evtchn_upcall_mask = 0;
-+	barrier(); /* unmask then check (avoid races) */
-+	if ( unlikely(_vcpu->evtchn_upcall_pending) )
-+		force_evtchn_callback();
-+	preempt_enable();
-+}
-+EXPORT_SYMBOL(raw_local_irq_enable);
-+
-+/*
-+ * For spinlocks, etc.:
-+ */
-+
-+unsigned long __raw_local_irq_save(void)
-+{
-+	struct vcpu_info *_vcpu;
-+	unsigned long flags;
-+
-+	preempt_disable();
-+	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];
-+	flags = _vcpu->evtchn_upcall_mask;
-+	_vcpu->evtchn_upcall_mask = 1;
-+	preempt_enable_no_resched();
-+
-+	return flags;
-+}
-+EXPORT_SYMBOL(__raw_local_irq_save);
-+
-+/* Cannot use preempt_enable() here as we would recurse in preempt_sched(). */
-+int raw_irqs_disabled(void)
-+{
-+	struct vcpu_info *_vcpu;
-+	int disabled;
-+
-+	preempt_disable();
-+	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];
-+	disabled = (_vcpu->evtchn_upcall_mask != 0);
-+	preempt_enable_no_resched();
-+
-+	return disabled;
-+}
-+EXPORT_SYMBOL(raw_irqs_disabled);
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/kernel/irq-xen.c	2006-11-19 14:26:33.000000000 +0100
 @@ -0,0 +1,198 @@
 +/*
 + *	linux/arch/x86_64/kernel/irq.c
@@ -36694,9 +34992,9 @@
 +        printk("unexpected IRQ trap at vector %02x\n", irq);
 +}
 +#endif
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/kernel/ldt-xen.c	2006-11-19 14:26:33.000000000 +0100
 @@ -0,0 +1,282 @@
 +/*
 + * linux/arch/x86_64/kernel/ldt.c
@@ -36980,9 +35278,9 @@
 +	}
 +	return ret;
 +}
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/kernel/Makefile	2006-11-19 14:26:33.000000000 +0100
 @@ -21,11 +21,13 @@
  obj-$(CONFIG_X86_CPUID)		+= cpuid.o
  obj-$(CONFIG_SMP)		+= smp.o smpboot.o trampoline.o
@@ -36998,12 +35296,11 @@
  obj-$(CONFIG_SOFTWARE_SUSPEND)	+= suspend_asm.o
  obj-$(CONFIG_CPU_FREQ)		+= cpufreq/
  obj-$(CONFIG_EARLY_PRINTK)	+= early_printk.o
-@@ -55,3 +57,18 @@
+@@ -55,3 +57,17 @@
  msr-$(subst m,y,$(CONFIG_X86_MSR))  += ../../i386/kernel/msr.o
  alternative-y			+= ../../i386/kernel/alternative.o
  
 +ifdef CONFIG_XEN
-+obj-y				+= irqflags.o
 +time-y				+= ../../i386/kernel/time-xen.o
 +pci-dma-y			+= ../../i386/kernel/pci-dma-xen.o
 +microcode-$(subst m,y,$(CONFIG_MICROCODE))  := ../../i386/kernel/microcode-xen.o
@@ -37017,9 +35314,9 @@
 +obj-y := $(call cherrypickxen, $(obj-y))
 +extra-y := $(call cherrypickxen, $(extra-y))
 +endif
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/kernel/mpparse-xen.c	2006-11-19 14:26:33.000000000 +0100
 @@ -0,0 +1,1011 @@
 +/*
 + *	Intel Multiprocessor Specification 1.1 and 1.4
@@ -38032,9 +36329,9 @@
 +
 +#endif /*CONFIG_X86_IO_APIC*/
 +#endif /*CONFIG_ACPI*/
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/kernel/pci-swiotlb-xen.c	2006-11-19 14:26:33.000000000 +0100
 @@ -0,0 +1,54 @@
 +/* Glue code to lib/swiotlb.c */
 +
@@ -38090,10 +36387,10 @@
 +	}
 +#endif
 +}
-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 @@
+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-11-19 14:26:33.000000000 +0100
+@@ -0,0 +1,792 @@
 +/*
 + *  linux/arch/x86-64/kernel/process.c
 + *
@@ -38557,6 +36854,18 @@
 +	multicall_entry_t _mcl[8], *mcl = _mcl;
 +
 +	/*
++	 * This is basically '__unlazy_fpu', except that we queue a
++	 * multicall to indicate FPU task switch, rather than
++	 * synchronously trapping to Xen.
++	 */
++	if (prev_p->thread_info->status & TS_USEDFPU) {
++		__save_init_fpu(prev_p); /* _not_ save_init_fpu() */
++		mcl->op      = __HYPERVISOR_fpu_taskswitch;
++		mcl->args[0] = 1;
++		mcl++;
++	}
++
++	/*
 +	 * Reload esp0, LDT and the page table pointer:
 +	 */
 +	mcl->op      = __HYPERVISOR_stack_switch;
@@ -38624,24 +36933,11 @@
 +		HYPERVISOR_set_segment_base(SEGBASE_GS_USER, next->gs); 
 +
 +	/* 
-+	 * Switch the PDA and FPU context.
++	 * Switch the PDA.
 +	 */
 +	prev->userrsp = read_pda(oldrsp); 
 +	write_pda(oldrsp, next->userrsp); 
 +	write_pda(pcurrent, next_p); 
-+
-+	/* This must be here to ensure both math_state_restore() and
-+	   kernel_fpu_begin() work consistently. 
-+	   And the AMD workaround requires it to be after DS reload. */
-+	/*
-+	 * This is basically '__unlazy_fpu', except that we queue a
-+	 * multicall to indicate FPU task switch, rather than
-+	 * synchronously trapping to Xen.
-+	 */
-+	if (prev_p->thread_info->status & TS_USEDFPU) {
-+		__save_init_fpu(prev_p); /* _not_ save_init_fpu() */
-+		HYPERVISOR_fpu_taskswitch(1);
-+	}
 +	write_pda(kernelstack,
 +		  task_stack_page(next_p) + THREAD_SIZE - PDA_STACKOFFSET);
 +
@@ -38887,9 +37183,9 @@
 +{
 +}
 +#endif
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/kernel/setup64-xen.c	2006-11-19 14:26:34.000000000 +0100
 @@ -0,0 +1,361 @@
 +/* 
 + * X86-64 specific CPU setup.
@@ -39252,10 +37548,10 @@
 +
 +	fpu_init(); 
 +}
-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 @@
+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-11-19 14:26:33.000000000 +0100
+@@ -0,0 +1,1638 @@
 +/*
 + *  linux/arch/x86-64/kernel/setup.c
 + *
@@ -39324,13 +37620,14 @@
 +#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>
 +
@@ -40893,9 +39190,9 @@
 +}
 +device_initcall(add_pcspkr);
 +#endif
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/kernel/smp-xen.c	2006-11-19 14:26:34.000000000 +0100
 @@ -0,0 +1,600 @@
 +/*
 + *	Intel SMP support routines.
@@ -41497,10 +39794,10 @@
 +	return 0; /* Should not happen */
 +#endif
 +}
-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 @@
+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-11-19 14:26:34.000000000 +0100
+@@ -0,0 +1,1172 @@
 +/*
 + *  linux/arch/x86-64/traps.c
 + *
@@ -41615,7 +39912,6 @@
 +#define call_trace (-1)
 +#endif
 +
-+
 +#ifdef CONFIG_KALLSYMS
 +# include <linux/kallsyms.h>
 +void printk_address(unsigned long address)
@@ -41682,7 +39978,7 @@
 +			break;
 +#endif
 +		default:
-+			end = per_cpu(orig_tss, cpu).ist[k];
++			end = per_cpu(orig_ist, cpu).ist[k];
 +			break;
 +		}
 +		/*
@@ -42674,9 +40970,9 @@
 +}
 +__setup("call_trace=", call_trace_setup);
 +#endif
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/kernel/vmlinux.lds.S	2006-11-19 14:26:34.000000000 +0100
 @@ -13,6 +13,12 @@
  OUTPUT_ARCH(i386:x86-64)
  ENTRY(phys_startup_64)
@@ -42758,9 +41054,9 @@
 +
 +  NOTES
  }
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/kernel/vsyscall-xen.c	2006-11-19 14:26:34.000000000 +0100
 @@ -0,0 +1,239 @@
 +/*
 + *  linux/arch/x86_64/kernel/vsyscall.c
@@ -43001,9 +41297,9 @@
 +}
 +
 +__initcall(vsyscall_init);
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/kernel/xen_entry.S	2006-11-19 14:26:34.000000000 +0100
 @@ -0,0 +1,40 @@
 +/*
 + * Copied from arch/xen/i386/kernel/entry.S
@@ -43045,9 +41341,9 @@
 +VGCF_IN_SYSCALL = (1<<8)
 +        
 +	
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/Makefile	2006-11-19 14:26:33.000000000 +0100
 @@ -32,6 +32,10 @@
  cflags-$(CONFIG_MPSC) += $(call cc-option,-march=nocona)
  cflags-$(CONFIG_GENERIC_CPU) += $(call cc-option,-mtune=generic)
@@ -43089,9 +41385,9 @@
  
  archclean:
  	$(Q)$(MAKE) $(clean)=$(boot)
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/mm/fault-xen.c	2006-11-19 14:26:34.000000000 +0100
 @@ -0,0 +1,723 @@
 +/*
 + *  linux/arch/x86-64/mm/fault.c
@@ -43816,9 +42112,9 @@
 +	return 1;
 +}
 +__setup("pagefaulttrace", enable_pagefaulttrace);
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/mm/init-xen.c	2006-11-19 14:26:34.000000000 +0100
 @@ -0,0 +1,1200 @@
 +/*
 + *  linux/arch/x86_64/mm/init.c
@@ -45020,9 +43316,9 @@
 +{
 +	return (addr >= VSYSCALL_START) && (addr < VSYSCALL_END);
 +}
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/mm/Makefile	2006-11-19 14:26:34.000000000 +0100
 @@ -9,3 +9,13 @@
  obj-$(CONFIG_ACPI_NUMA) += srat.o
  
@@ -45037,10 +43333,10 @@
 +
 +obj-y := $(call cherrypickxen, $(obj-y))
 +endif
-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 @@
+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-11-19 14:26:34.000000000 +0100
+@@ -0,0 +1,396 @@
 +/* 
 + * Copyright 2002 Andi Kleen, SuSE Labs. 
 + * Thanks to Ben LaHaise for precious feedback.
@@ -45364,13 +43660,11 @@
 +	 */
 +#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;
 +} 
 +
@@ -45439,9 +43733,9 @@
 +
 +EXPORT_SYMBOL(change_page_attr);
 +EXPORT_SYMBOL(global_flush_tlb);
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/oprofile/Makefile	2006-11-19 14:26:34.000000000 +0100
 @@ -11,9 +11,12 @@
  	oprofilefs.o oprofile_stats.o \
  	timer_int.o )
@@ -45456,9 +43750,9 @@
 -
 +endif
  oprofile-y = $(DRIVER_OBJS) $(addprefix ../../i386/oprofile/, $(OPROFILE-y))
-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
+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
++++ linux-2.6.18-xen/arch/x86_64/pci/Makefile	2006-11-19 14:26:34.000000000 +0100
 @@ -15,11 +15,23 @@
  
  obj-$(CONFIG_NUMA)	+= k8-bus.o
@@ -45483,9 +43777,9 @@
 +
 +obj-y := $(call cherrypickxen, $(obj-y))
 +endif
-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
+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
++++ linux-2.6.18-xen/drivers/acpi/Kconfig	2006-11-19 14:26:34.000000000 +0100
 @@ -45,7 +45,7 @@
  
  config ACPI_SLEEP
@@ -45503,9 +43797,9 @@
  	default y
  	help
  	  The Power Management Timer is available on all ACPI-capable,
-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
+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
++++ linux-2.6.18-xen/drivers/char/hangcheck-timer.c	2006-11-19 14:26:36.000000000 +0100
 @@ -117,7 +117,7 @@
  __setup("hcheck_dump_tasks", hangcheck_parse_dump_tasks);
  #endif /* not MODULE */
@@ -45515,9 +43809,9 @@
  # define HAVE_MONOTONIC
  # define TIMER_FREQ 1000000000ULL
  #elif defined(CONFIG_IA64)
-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
+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
++++ linux-2.6.18-xen/drivers/char/mem.c	2006-11-19 14:26:36.000000000 +0100
 @@ -101,6 +101,7 @@
  }
  #endif
@@ -45552,9 +43846,9 @@
  
  static const struct file_operations kmem_fops = {
  	.llseek		= memory_lseek,
-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
+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
++++ linux-2.6.18-xen/drivers/char/tpm/Kconfig	2006-11-19 14:26:36.000000000 +0100
 @@ -31,7 +31,7 @@
  
  config TCG_NSC
@@ -45579,18 +43873,18 @@
 +	  will be called tpm_xenu.
  
 +endmenu
-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
+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
++++ linux-2.6.18-xen/drivers/char/tpm/Makefile	2006-11-19 14:26:36.000000000 +0100
 @@ -9,3 +9,5 @@
  obj-$(CONFIG_TCG_NSC) += tpm_nsc.o
  obj-$(CONFIG_TCG_ATMEL) += tpm_atmel.o
  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.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
+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
++++ linux-2.6.18-xen/drivers/char/tpm/tpm.c	2006-11-19 14:26:36.000000000 +0100
 @@ -30,7 +30,9 @@
  
  enum tpm_const {
@@ -45711,9 +44005,9 @@
  	return ret_size;
  }
  EXPORT_SYMBOL_GPL(tpm_read);
-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
+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
++++ linux-2.6.18-xen/drivers/char/tpm/tpm.h	2006-11-19 14:26:36.000000000 +0100
 @@ -61,6 +61,7 @@
  	const u8 req_complete_mask;
  	const u8 req_complete_val;
@@ -45736,15 +44030,15 @@
  
 +static inline u32 get_chip_buffersize(struct tpm_chip *chip)
 +{
-+	return chip->vendor.buffersize;
++	return chip->vendor->buffersize;
 +}
 +
  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.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
+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
++++ linux-2.6.18-xen/drivers/char/tpm/tpm_vtpm.c	2006-11-19 14:26:36.000000000 +0100
 @@ -0,0 +1,547 @@
 +/*
 + * Copyright (C) 2006 IBM Corporation
@@ -46293,9 +44587,9 @@
 +	tpm_remove_hardware(dev);
 +	kfree(vtpms);
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/char/tpm/tpm_vtpm.h	2006-11-19 14:26:36.000000000 +0100
 @@ -0,0 +1,68 @@
 +#ifndef TPM_VTPM_H
 +#define TPM_VTPM_H
@@ -46365,9 +44659,9 @@
 +}
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/drivers/char/tpm/tpm_xen.c	2006-11-19 14:26:36.000000000 +0100
 @@ -0,0 +1,756 @@
 +/*
 + * Copyright (c) 2005, IBM Corporation
@@ -47125,9 +45419,9 @@
 +module_init(tpmif_init);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-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
+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-11-19 14:26:36.000000000 +0100
 @@ -130,6 +130,8 @@
     vt.c for deeply disgusting hack reasons */
  DEFINE_MUTEX(tty_mutex);
@@ -47163,9 +45457,9 @@
  #endif
  	return 0;
  }
-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
+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
++++ linux-2.6.18-xen/drivers/firmware/Kconfig	2006-11-19 14:26:37.000000000 +0100
 @@ -7,7 +7,7 @@
  
  config EDD
@@ -47175,9 +45469,9 @@
  	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.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
+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
++++ linux-2.6.18-xen/drivers/ide/ide-lib.c	2006-11-19 14:26:39.000000000 +0100
 @@ -408,10 +408,10 @@
  {
  	u64 addr = BLK_BOUNCE_HIGH;	/* dma64_addr_t */
@@ -47193,9 +45487,9 @@
  			addr = HWIF(drive)->pci_dev->dma_mask;
  	}
  
-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
+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
++++ linux-2.6.18-xen/drivers/Makefile	2006-11-19 14:26:34.000000000 +0100
 @@ -31,6 +31,7 @@
  obj-$(CONFIG_NUBUS)		+= nubus/
  obj-$(CONFIG_ATM)		+= atm/
@@ -47204,9 +45498,9 @@
  obj-$(CONFIG_IDE)		+= ide/
  obj-$(CONFIG_FC4)		+= fc4/
  obj-$(CONFIG_SCSI)		+= scsi/
-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
+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
++++ linux-2.6.18-xen/drivers/oprofile/buffer_sync.c	2006-11-19 14:26:47.000000000 +0100
 @@ -6,6 +6,10 @@
   *
   * @author John Levon <levon at movementarian.org>
@@ -47327,9 +45621,9 @@
  				}
  			}
  		}
-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
+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
++++ linux-2.6.18-xen/drivers/oprofile/cpu_buffer.c	2006-11-19 14:26:47.000000000 +0100
 @@ -6,6 +6,10 @@
   *
   * @author John Levon <levon at movementarian.org>
@@ -47439,9 +45733,9 @@
  /*
   * This serves to avoid cpu buffer overflow, and makes sure
   * the task mortuary progresses
-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
+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
++++ linux-2.6.18-xen/drivers/oprofile/cpu_buffer.h	2006-11-19 14:26:47.000000000 +0100
 @@ -36,7 +36,7 @@
  	volatile unsigned long tail_pos;
  	unsigned long buffer_size;
@@ -47464,9 +45758,9 @@
 +#define CPU_DOMAIN_SWITCH       4
  
  #endif /* OPROFILE_CPU_BUFFER_H */
-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
+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
++++ linux-2.6.18-xen/drivers/oprofile/event_buffer.h	2006-11-19 14:26:47.000000000 +0100
 @@ -29,15 +29,20 @@
  #define CPU_SWITCH_CODE 		2
  #define COOKIE_SWITCH_CODE 		3
@@ -47489,9 +45783,9 @@
  /* add data to the event buffer */
  void add_event_entry(unsigned long data);
   
-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
+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
++++ linux-2.6.18-xen/drivers/oprofile/oprof.c	2006-11-19 14:26:47.000000000 +0100
 @@ -5,6 +5,10 @@
   * @remark Read the file COPYING
   *
@@ -47545,9 +45839,9 @@
  int oprofile_setup(void)
  {
  	int err;
-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
+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
++++ linux-2.6.18-xen/drivers/oprofile/oprof.h	2006-11-19 14:26:47.000000000 +0100
 @@ -35,5 +35,8 @@
  void oprofile_timer_init(struct oprofile_operations * ops);
  
@@ -47557,9 +45851,9 @@
 +int oprofile_set_passive(int passive_domains[], unsigned int pdomains);
   
  #endif /* OPROF_H */
-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
+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
++++ linux-2.6.18-xen/drivers/oprofile/oprofile_files.c	2006-11-19 14:26:47.000000000 +0100
 @@ -5,15 +5,21 @@
   * @remark Read the file COPYING
   *
@@ -47793,9 +46087,9 @@
  	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.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
+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
++++ linux-2.6.18-xen/drivers/pci/Kconfig	2006-11-19 14:26:47.000000000 +0100
 @@ -5,6 +5,7 @@
  	bool "Message Signaled Interrupts (MSI and MSI-X)"
  	depends on PCI
@@ -47804,9 +46098,31 @@
  	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.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
+diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/scsi/scsi_error.c linux-2.6.18-xen/drivers/scsi/scsi_error.c
+--- linux-2.6.18/drivers/scsi/scsi_error.c	2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/drivers/scsi/scsi_error.c	2006-11-19 14:26:51.000000000 +0100
+@@ -56,6 +56,7 @@
+ 				printk("Waking error handler thread\n"));
+ 	}
+ }
++EXPORT_SYMBOL_GPL(scsi_eh_wakeup);
+ 
+ /**
+  * scsi_schedule_eh - schedule EH for SCSI host
+diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/scsi/scsi_priv.h linux-2.6.18-xen/drivers/scsi/scsi_priv.h
+--- linux-2.6.18/drivers/scsi/scsi_priv.h	2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/drivers/scsi/scsi_priv.h	2006-11-19 14:26:51.000000000 +0100
+@@ -52,7 +52,6 @@
+ extern void scsi_times_out(struct scsi_cmnd *cmd);
+ extern int scsi_error_handler(void *host);
+ extern int scsi_decide_disposition(struct scsi_cmnd *cmd);
+-extern void scsi_eh_wakeup(struct Scsi_Host *shost);
+ extern int scsi_eh_scmd_add(struct scsi_cmnd *, int);
+ 
+ /* scsi_lib.c */
+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-11-19 14:26:51.000000000 +0100
 @@ -11,6 +11,7 @@
  config SERIAL_8250
  	tristate "8250/16550 and compatible serial support"
@@ -47815,9 +46131,9 @@
  	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.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
+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-11-19 14:26:55.000000000 +0100
 @@ -0,0 +1,637 @@
 +/******************************************************************************
 + * balloon.c
@@ -48456,15 +46772,15 @@
 +EXPORT_SYMBOL_GPL(balloon_release_driver_page);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-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
+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
++++ linux-2.6.18-xen/drivers/xen/balloon/Makefile	2006-11-19 14:26:55.000000000 +0100
 @@ -0,0 +1,2 @@
 +
 +obj-y += balloon.o
-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
+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-11-19 14:26:55.000000000 +0100
 @@ -0,0 +1,549 @@
 +/******************************************************************************
 + * arch/xen/drivers/blkif/backend/main.c
@@ -48978,7 +47294,7 @@
 +	if (!is_running_on_xen())
 +		return -ENODEV;
 +
-+	mmap_pages            = blkif_reqs * BLKIF_MAX_SEGMENTS_PER_REQUEST;
++	mmap_pages = blkif_reqs * BLKIF_MAX_SEGMENTS_PER_REQUEST;
 +
 +	pending_reqs          = kmalloc(sizeof(pending_reqs[0]) *
 +					blkif_reqs, GFP_KERNEL);
@@ -49015,9 +47331,9 @@
 +module_init(blkif_init);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-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
+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
++++ linux-2.6.18-xen/drivers/xen/blkback/common.h	2006-11-19 14:26:55.000000000 +0100
 @@ -0,0 +1,133 @@
 +/* 
 + * This program is free software; you can redistribute it and/or
@@ -49152,9 +47468,9 @@
 +int blkif_schedule(void *arg);
 +
 +#endif /* __BLKIF__BACKEND__COMMON_H__ */
-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
+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
++++ linux-2.6.18-xen/drivers/xen/blkback/interface.c	2006-11-19 14:26:55.000000000 +0100
 @@ -0,0 +1,171 @@
 +/******************************************************************************
 + * arch/xen/drivers/blkif/backend/interface.c
@@ -49327,16 +47643,16 @@
 +	blkif_cachep = kmem_cache_create("blkif_cache", sizeof(blkif_t), 
 +					 0, 0, NULL, NULL);
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/xen/blkback/Makefile	2006-11-19 14:26:55.000000000 +0100
 @@ -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.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
+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
++++ linux-2.6.18-xen/drivers/xen/blkback/vbd.c	2006-11-19 14:26:55.000000000 +0100
 @@ -0,0 +1,119 @@
 +/******************************************************************************
 + * blkback/vbd.c
@@ -49457,9 +47773,9 @@
 + out:
 +	return rc;
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/xen/blkback/xenbus.c	2006-11-19 14:26:55.000000000 +0100
 @@ -0,0 +1,468 @@
 +/*  Xenbus code for blkif backend
 +    Copyright (C) 2005 Rusty Russell <rusty at rustcorp.com.au>
@@ -49929,9 +48245,9 @@
 +{
 +	xenbus_register_backend(&blkback);
 +}
-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
+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-11-19 14:26:55.000000000 +0100
 @@ -0,0 +1,846 @@
 +/******************************************************************************
 + * blkfront.c
@@ -50208,7 +48524,7 @@
 +			xenbus_dev_fatal(dev, -ENODEV, "bdget failed");
 +
 +		mutex_lock(&bd->bd_mutex);
-+		if (info->users > 0)
++		if (info->users > 0 && system_state == SYSTEM_RUNNING)
 +			xenbus_dev_error(dev, -EBUSY,
 +					 "Device in use; refusing to close");
 +		else
@@ -50779,9 +49095,9 @@
 +module_exit(xlblk_exit);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-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
+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
++++ linux-2.6.18-xen/drivers/xen/blkfront/block.h	2006-11-19 14:26:55.000000000 +0100
 @@ -0,0 +1,154 @@
 +/******************************************************************************
 + * block.h
@@ -50937,9 +49253,9 @@
 +void xlvbd_del(struct blkfront_info *info);
 +
 +#endif /* __XEN_DRIVERS_BLOCK_H__ */
-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
+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
++++ linux-2.6.18-xen/drivers/xen/blkfront/Kconfig	2006-11-19 14:26:55.000000000 +0100
 @@ -0,0 +1,6 @@
 +
 +config XENBLOCK
@@ -50947,18 +49263,18 @@
 +	depends on ARCH_XEN
 +	help
 +	  Block device driver for Xen
-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
+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
++++ linux-2.6.18-xen/drivers/xen/blkfront/Makefile	2006-11-19 14:26:55.000000000 +0100
 @@ -0,0 +1,5 @@
 +
 +obj-$(CONFIG_XEN_BLKDEV_FRONTEND)	:= xenblk.o
 +
 +xenblk-objs := blkfront.o vbd.o
 +
-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
+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
++++ linux-2.6.18-xen/drivers/xen/blkfront/vbd.c	2006-11-19 14:26:55.000000000 +0100
 @@ -0,0 +1,318 @@
 +/******************************************************************************
 + * vbd.c
@@ -51278,9 +49594,9 @@
 +	blk_cleanup_queue(info->rq);
 +	info->rq = NULL;
 +}
-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
+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-11-19 14:26:55.000000000 +0100
 @@ -0,0 +1,1393 @@
 +/******************************************************************************
 + * drivers/xen/blktap/blktap.c
@@ -52675,9 +50991,9 @@
 +module_init(blkif_init);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-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
+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
++++ linux-2.6.18-xen/drivers/xen/blktap/common.h	2006-11-19 14:26:55.000000000 +0100
 @@ -0,0 +1,120 @@
 +/* 
 + * This program is free software; you can redistribute it and/or
@@ -52799,9 +51115,9 @@
 +void signal_tapdisk(int idx);
 +
 +#endif /* __BLKIF__BACKEND__COMMON_H__ */
-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
+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
++++ linux-2.6.18-xen/drivers/xen/blktap/interface.c	2006-11-19 14:26:55.000000000 +0100
 @@ -0,0 +1,164 @@
 +/******************************************************************************
 + * drivers/xen/blktap/interface.c
@@ -52967,19 +51283,16 @@
 +	blkif_cachep = kmem_cache_create("blktapif_cache", sizeof(blkif_t), 
 +					 0, 0, NULL, NULL);
 +}
-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 @@
+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-11-19 14:26:55.000000000 +0100
+@@ -0,0 +1,3 @@
 +LINUXINCLUDE += -I../xen/include/public/io
++obj-y	:= xenbus.o interface.o blktap.o 
 +
-+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
+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-11-19 14:26:55.000000000 +0100
 @@ -0,0 +1,366 @@
 +/* drivers/xen/blktap/xenbus.c
 + *
@@ -53347,15 +51660,15 @@
 +{
 +	xenbus_register_backend(&blktap);
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/xen/char/Makefile	2006-11-19 14:26:55.000000000 +0100
 @@ -0,0 +1,2 @@
 +
 +obj-y	:= mem.o
-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
+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
++++ linux-2.6.18-xen/drivers/xen/char/mem.c	2006-11-19 14:26:55.000000000 +0100
 @@ -0,0 +1,180 @@
 +/*
 + *  Originally from linux/drivers/char/mem.c
@@ -53537,9 +51850,9 @@
 +	.mmap		= mmap_mem,
 +	.open		= open_mem,
 +};
-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
+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
++++ linux-2.6.18-xen/drivers/xen/console/console.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,688 @@
 +/******************************************************************************
 + * console.c
@@ -54229,15 +52542,15 @@
 +module_init(xencons_init);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-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
+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
++++ linux-2.6.18-xen/drivers/xen/console/Makefile	2006-11-19 14:26:55.000000000 +0100
 @@ -0,0 +1,2 @@
 +
 +obj-y	:= console.o xencons_ring.o
-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
+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
++++ linux-2.6.18-xen/drivers/xen/console/xencons_ring.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,143 @@
 +/* 
 + * This program is free software; you can redistribute it and/or
@@ -54382,9 +52695,9 @@
 +{
 +	(void)xencons_ring_init();
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/xen/core/cpu_hotplug.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,188 @@
 +
 +#include <linux/init.h>
@@ -54574,9 +52887,9 @@
 +{
 +	xenbus_allowed_cpumask = cpu_present_map;
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/xen/core/evtchn.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,868 @@
 +/******************************************************************************
 + * evtchn.c
@@ -55446,9 +53759,9 @@
 +		irq_desc[pirq_to_irq(i)].chip    = &pirq_type;
 +	}
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/xen/core/features.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,30 @@
 +/******************************************************************************
 + * features.c
@@ -55480,9 +53793,9 @@
 +			xen_features[i*32+j] = !!(fi.submap & 1<<j);
 +	}
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/xen/core/gnttab.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,483 @@
 +/******************************************************************************
 + * gnttab.c
@@ -55967,9 +54280,9 @@
 +#ifdef CONFIG_XEN
 +core_initcall(gnttab_init);
 +#endif
-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
+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
++++ linux-2.6.18-xen/drivers/xen/core/hypervisor_sysfs.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,59 @@
 +/*
 + *  copyright (c) 2006 IBM Corporation
@@ -56030,9 +54343,9 @@
 +
 +device_initcall(hypervisor_subsys_init);
 +EXPORT_SYMBOL_GPL(hypervisor_subsys);
-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
+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
++++ linux-2.6.18-xen/drivers/xen/core/Makefile	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,13 @@
 +#
 +# Makefile for the linux kernel.
@@ -56047,9 +54360,9 @@
 +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.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
+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
++++ linux-2.6.18-xen/drivers/xen/core/reboot.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,384 @@
 +#define __KERNEL_SYSCALLS__
 +#include <linux/version.h>
@@ -56435,9 +54748,9 @@
 +}
 +
 +subsys_initcall(setup_shutdown_event);
-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
+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-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,144 @@
 +
 +#include <linux/module.h>
@@ -56583,9 +54896,9 @@
 +core_initcall(skbuff_init);
 +
 +EXPORT_SYMBOL(__dev_alloc_skb);
-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
+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
++++ linux-2.6.18-xen/drivers/xen/core/smpboot.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,429 @@
 +/*
 + *	Xen SMP booting functions
@@ -57016,9 +55329,9 @@
 +	return -EINVAL;
 +}
 +#endif
-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
+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
++++ linux-2.6.18-xen/drivers/xen/core/xen_proc.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,18 @@
 +
 +#include <linux/proc_fs.h>
@@ -57038,9 +55351,9 @@
 +{
 +	remove_proc_entry(name, xen_base);
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/xen/core/xen_sysfs.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,378 @@
 +/*
 + *  copyright (c) 2006 IBM Corporation
@@ -57420,9 +55733,9 @@
 +
 +module_init(hyper_sysfs_init);
 +module_exit(hyper_sysfs_exit);
-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
+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-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,456 @@
 +/******************************************************************************
 + * evtchn.c
@@ -57880,15 +56193,15 @@
 +module_exit(evtchn_cleanup);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-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
+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
++++ linux-2.6.18-xen/drivers/xen/evtchn/Makefile	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,2 @@
 +
 +obj-y	:= evtchn.o
-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
+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
++++ linux-2.6.18-xen/drivers/xen/Kconfig	2006-11-19 14:26:55.000000000 +0100
 @@ -0,0 +1,260 @@
 +#
 +# This Kconfig describe xen options
@@ -58150,9 +56463,9 @@
 +	depends on SMP
 +
 +endif
-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
+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
++++ linux-2.6.18-xen/drivers/xen/Makefile	2006-11-19 14:26:55.000000000 +0100
 @@ -0,0 +1,17 @@
 +obj-y	+= core/
 +obj-y	+= console/
@@ -58171,9 +56484,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.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
+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-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,141 @@
 +/******************************************************************************
 + * arch/xen/drivers/netif/backend/common.h
@@ -58283,7 +56596,7 @@
 +
 +void netif_disconnect(netif_t *netif);
 +
-+netif_t *netif_alloc(domid_t domid, unsigned int handle);
++netif_t *netif_alloc(domid_t domid, unsigned int handle, u8 be_mac[ETH_ALEN]);
 +int netif_map(netif_t *netif, unsigned long tx_ring_ref,
 +	      unsigned long rx_ring_ref, unsigned int evtchn);
 +
@@ -58316,10 +56629,10 @@
 +}
 +
 +#endif /* __NETIF__BACKEND__COMMON_H__ */
-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 @@
+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-11-19 14:26:56.000000000 +0100
+@@ -0,0 +1,357 @@
 +/******************************************************************************
 + * arch/xen/drivers/netif/backend/interface.c
 + * 
@@ -58448,7 +56761,7 @@
 +	.get_link = ethtool_op_get_link,
 +};
 +
-+netif_t *netif_alloc(domid_t domid, unsigned int handle)
++netif_t *netif_alloc(domid_t domid, unsigned int handle, u8 be_mac[ETH_ALEN])
 +{
 +	int err = 0, i;
 +	struct net_device *dev;
@@ -58475,7 +56788,6 @@
 +	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;
@@ -58491,14 +56803,20 @@
 +		printk(KERN_WARNING "netbk: WARNING: device '%s' has non-zero "
 +		       "queue length (%lu)!\n", dev->name, dev->tx_queue_len);
 +
-+	/*
-+	 * 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;
++	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);
 +
 +	rtnl_lock();
 +	err = register_netdevice(dev);
@@ -58672,9 +56990,9 @@
 +	}
 +	netif_free(netif);
 +}
-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
+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-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,320 @@
 +/******************************************************************************
 + * netback/loopback.c
@@ -58996,19 +57314,19 @@
 +module_exit(loopback_exit);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-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
+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
++++ linux-2.6.18-xen/drivers/xen/netback/Makefile	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,5 @@
 +obj-$(CONFIG_XEN_NETDEV_BACKEND) := netbk.o
 +obj-$(CONFIG_XEN_NETDEV_LOOPBACK) += netloop.o
 +
 +netbk-y   := netback.o xenbus.o interface.o
 +netloop-y := loopback.o
-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 @@
+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-11-19 14:26:56.000000000 +0100
+@@ -0,0 +1,1485 @@
 +/******************************************************************************
 + * drivers/xen/netback/netback.c
 + * 
@@ -59090,7 +57408,7 @@
 +
 +#define PKT_PROT_LEN 64
 +
-+static struct pending_tx_info {
++static struct {
 +	netif_tx_request_t req;
 +	netif_t *netif;
 +} pending_tx_info[MAX_PENDING_REQS];
@@ -59386,22 +57704,14 @@
 +		   flipped. */
 +		meta->copy = 1;
 +		copy_gop = npo->copy + npo->copy_prod++;
-+		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.domid = DOMID_SELF;
 +		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)) {
@@ -59813,27 +58123,10 @@
 +}
 +
 +
-+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;
-+	tx_add_credit(netif);
++	netif->remaining_credit = netif->credit_bytes;
 +	netif_schedule_work(netif);
 +}
 +
@@ -59895,28 +58188,20 @@
 +	netif_put(netif);
 +}
 +
-+static int netbk_count_requests(netif_t *netif, netif_tx_request_t *first,
-+				netif_tx_request_t *txp, int work_to_do)
++static int netbk_count_requests(netif_t *netif, 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;
 +
-+	if (!(first->flags & NETTXF_more_data))
-+		return 0;
-+
-+	do {
++	while (txp->flags & NETTXF_more_data) {
 +		if (frags >= work_to_do) {
 +			DPRINTK("Need more frags\n");
 +			return -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));
++		txp = RING_GET_REQUEST(&netif->tx, cons + frags);
 +		if (txp->size > first->size) {
 +			DPRINTK("Frags galore\n");
 +			return -frags;
@@ -59930,25 +58215,27 @@
 +				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++) {
++	for (i = start; i < shinfo->nr_frags; i++) {
++		txp = RING_GET_REQUEST(&netif->tx, cons++);
 +		pending_idx = pending_ring[MASK_PEND_IDX(pending_cons++)];
 +
 +		gnttab_set_map_op(mop++, idx_to_kaddr(pending_idx),
@@ -60062,7 +58349,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 {
@@ -60071,18 +58358,18 @@
 +			return -EBADR;
 +		}
 +
-+		memcpy(&extra, RING_GET_REQUEST(&netif->tx, cons),
-+		       sizeof(extra));
-+		if (unlikely(!extra.type ||
-+			     extra.type >= XEN_NETIF_EXTRA_TYPE_MAX)) {
++		extra = (struct netif_extra_info *)
++			RING_GET_REQUEST(&netif->tx, cons);
++		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;
 +}
@@ -60117,7 +58404,6 @@
 +	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;
@@ -60163,11 +58449,12 @@
 +			/* Passed the point where we can replenish credit? */
 +			if (time_after_eq(now, next_credit)) {
 +				netif->credit_timeout.expires = now;
-+				tx_add_credit(netif);
++				netif->remaining_credit = netif->credit_bytes;
 +			}
 +
 +			/* 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 =
@@ -60194,13 +58481,19 @@
 +			}
 +		}
 +
-+		ret = netbk_count_requests(netif, &txreq, txfrags, work_to_do);
++		ret = netbk_count_requests(netif, &txreq, 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);
@@ -60269,7 +58562,7 @@
 +
 +		pending_cons++;
 +
-+		mop = netbk_get_requests(netif, skb, txfrags, mop);
++		mop = netbk_get_requests(netif, skb, mop);
 +
 +		netif->tx.req_cons = i;
 +		netif_schedule_work(netif);
@@ -60359,6 +58652,7 @@
 +{
 +	/* Ready for next use. */
 +	init_page_count(page);
++
 +	netif_idx_release(page->index);
 +}
 +
@@ -60518,10 +58812,10 @@
 +module_init(netback_init);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-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 @@
+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-11-19 14:26:56.000000000 +0100
+@@ -0,0 +1,479 @@
 +/*  Xenbus code for netif backend
 +    Copyright (C) 2005 Rusty Russell <rusty at rustcorp.com.au>
 +    Copyright (C) 2005 XenSource Ltd
@@ -60552,20 +58846,29 @@
 +    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 backend_create_netif(struct backend_info *be);
++static void maybe_connect(struct backend_info *);
++static void backend_changed(struct xenbus_watch *, const char **,
++			    unsigned int);
 +
 +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;
@@ -60578,7 +58881,8 @@
 +
 +/**
 + * Entry point to this code when a new device is created.  Allocate the basic
-+ * structures and switch to InitWait.
++ * structures, and watch the store waiting for the hotplug scripts to tell us
++ * the device's handle.  Switch to InitWait.
 + */
 +static int netback_probe(struct xenbus_device *dev,
 +			 const struct xenbus_device_id *id)
@@ -60597,6 +58901,11 @@
 +	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) {
@@ -60617,8 +58926,7 @@
 +			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;
@@ -60633,11 +58941,9 @@
 +	}
 +
 +	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;
 +
@@ -60687,30 +58993,48 @@
 +}
 +
 +
-+static void backend_create_netif(struct backend_info *be)
++/**
++ * 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)
 +{
 +	int err;
 +	long handle;
++	struct backend_info *be
++		= container_of(watch, struct backend_info, backend_watch);
 +	struct xenbus_device *dev = be->dev;
 +
-+	if (be->netif != NULL)
-+		return;
++	DPRINTK("");
 +
 +	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;
 +	}
 +
-+	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;
-+	}
++	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);
 +
-+	kobject_uevent(&dev->dev.kobj, KOBJ_ONLINE);
++		maybe_connect(be);
++	}
 +}
 +
 +
@@ -60743,9 +59067,11 @@
 +		break;
 +
 +	case XenbusStateConnected:
-+		backend_create_netif(be);
-+		if (be->netif)
-+			connect(be);
++		if (!be->netif) {
++			/* reconnect: setup be->netif */
++			backend_changed(&be->backend_watch, NULL, 0);
++		}
++		maybe_connect(be);
 +		break;
 +
 +	case XenbusStateClosing:
@@ -60771,6 +59097,15 @@
 +}
 +
 +
++/* ** 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)
 +{
@@ -60960,9 +59295,9 @@
 +{
 +	xenbus_register_backend(&netback);
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/xen/netfront/Kconfig	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,6 @@
 +
 +config XENNET
@@ -60970,17 +59305,17 @@
 +	depends on NETDEVICES && ARCH_XEN
 +	help
 +	  Network driver for Xen
-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
+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
++++ linux-2.6.18-xen/drivers/xen/netfront/Makefile	2006-11-19 14:26:56.000000000 +0100
 @@ -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.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
+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-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,2138 @@
 +/******************************************************************************
 + * Virtual network driver for conversing with remote driver backends.
@@ -61125,6 +59460,7 @@
 +	spinlock_t   tx_lock;
 +	spinlock_t   rx_lock;
 +
++	unsigned int handle;
 +	unsigned int evtchn, irq;
 +	unsigned int copying_receiver;
 +
@@ -61213,8 +59549,9 @@
 +#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(struct xenbus_device *);
++static struct net_device *create_netdev(int, int, struct xenbus_device *);
 +
 +static void netfront_closing(struct xenbus_device *);
 +
@@ -61224,7 +59561,7 @@
 +static void close_netdev(struct netfront_info *);
 +static void netif_free(struct netfront_info *);
 +
-+static int network_connect(struct net_device *);
++static void 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 *);
@@ -61247,7 +59584,8 @@
 +/**
 + * 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.
++ * inform the backend of the appropriate details for those.  Switch to
++ * Connected state.
 + */
 +static int __devinit netfront_probe(struct xenbus_device *dev,
 +				    const struct xenbus_device_id *id)
@@ -61255,8 +59593,32 @@
 +	int err;
 +	struct net_device *netdev;
 +	struct netfront_info *info;
++	unsigned int handle, feature_rx_copy, feature_rx_flip, use_copy;
++
++	err = xenbus_scanf(XBT_NIL, dev->nodename, "handle", "%u", &handle);
++	if (err != 1) {
++		xenbus_dev_fatal(dev, err, "reading handle");
++		return err;
++	}
++
++	err = xenbus_scanf(XBT_NIL, dev->otherend, "feature-rx-copy", "%u",
++			   &feature_rx_copy);
++	if (err != 1)
++		feature_rx_copy = 0;
++	err = xenbus_scanf(XBT_NIL, dev->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.
++	 */
++	use_copy = (MODPARM_rx_copy && feature_rx_copy) ||
++		(MODPARM_rx_flip && !feature_rx_flip);
 +
-+	netdev = create_netdev(dev);
++	netdev = create_netdev(handle, use_copy, dev);
 +	if (IS_ERR(netdev)) {
 +		err = PTR_ERR(netdev);
 +		xenbus_dev_fatal(dev, err, "creating netdev");
@@ -61266,13 +59628,23 @@
 +	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;
++		goto fail_open;
++
++	IPRINTK("Created netdev %s with %sing receive path.\n",
++		netdev->name, info->copying_receiver ? "copy" : "flipp");
 +
 +	return 0;
 +
-+ fail:
++ fail_open:
++	xennet_sysfs_delif(info->netdev);
++	unregister_netdev(netdev);
++ fail_backend:
 +	free_netdev(netdev);
 +	dev->dev.driver_data = NULL;
 +	return err;
@@ -61292,7 +59664,7 @@
 +	DPRINTK("%s\n", dev->nodename);
 +
 +	netif_disconnect_backend(info);
-+	return 0;
++	return talk_to_backend(dev, info);
 +}
 +
 +static int xen_net_read_mac(struct xenbus_device *dev, u8 mac[])
@@ -61403,7 +59775,7 @@
 +	xenbus_transaction_end(xbt, 1);
 +	xenbus_dev_fatal(dev, err, "%s", message);
 + destroy_ring:
-+	netif_disconnect_backend(info);
++	netif_free(info);
 + out:
 +	return err;
 +}
@@ -61493,10 +59865,7 @@
 +		break;
 +
 +	case XenbusStateInitWait:
-+		if (network_connect(netdev) != 0) {
-+			netif_free(np);
-+			break;
-+		}
++		network_connect(netdev);
 +		xenbus_switch_state(dev, XenbusStateConnected);
 +		(void)send_fake_arp(netdev);
 +		break;
@@ -62070,7 +60439,6 @@
 +			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;
 +		}
@@ -62081,8 +60449,7 @@
 +		 * situation to the system controller to reboot the backed.
 +		 */
 +		if (ref == GRANT_INVALID_REF) {
-+			if (net_ratelimit())
-+				WPRINTK("Bad rx response id %d.\n", rx->id);
++			WPRINTK("Bad rx response id %d.\n", rx->id);
 +			err = -EINVAL;
 +			goto next;
 +		}
@@ -62154,9 +60521,6 @@
 +		err = -E2BIG;
 +	}
 +
-+	if (unlikely(err))
-+		np->rx.rsp_cons = cons + frags;
-+
 +	*pages_flipped_p = pages_flipped;
 +
 +	return err;
@@ -62261,9 +60625,9 @@
 +	rp = np->rx.sring->rsp_prod;
 +	rmb(); /* Ensure we see queued responses up to 'rp'. */
 +
-+	i = np->rx.rsp_cons;
-+	work_done = 0;
-+	while ((i != rp) && (work_done < budget)) {
++	for (i = np->rx.rsp_cons, work_done = 0;
++	     (i != rp) && (work_done < budget);
++	     np->rx.rsp_cons = ++i, work_done++) {
 +		memcpy(rx, RING_GET_RESPONSE(&np->rx, i), sizeof(*rx));
 +		memset(extras, 0, sizeof(extras));
 +
@@ -62271,11 +60635,12 @@
 +					   &pages_flipped);
 +
 +		if (unlikely(err)) {
-+err:	
++err:
++			i = np->rx.rsp_cons + skb_queue_len(&tmpq) - 1;
++			work_done--;
 +			while ((skb = __skb_dequeue(&tmpq)))
 +				__skb_queue_tail(&errq, skb);
 +			np->stats.rx_errors++;
-+			i = np->rx.rsp_cons;
 +			continue;
 +		}
 +
@@ -62287,7 +60652,6 @@
 +
 +			if (unlikely(xennet_set_skb_gso(skb, gso))) {
 +				__skb_queue_head(&tmpq, skb);
-+				np->rx.rsp_cons += skb_queue_len(&tmpq);
 +				goto err;
 +			}
 +		}
@@ -62351,9 +60715,6 @@
 +		np->stats.rx_bytes += skb->len;
 +
 +		__skb_queue_tail(&rxq, skb);
-+
-+		np->rx.rsp_cons = ++i;
-+		work_done++;
 +	}
 +
 +	if (pages_flipped) {
@@ -62601,41 +60962,16 @@
 +		xennet_set_tso(dev, 1);
 +}
 +
-+static int network_connect(struct net_device *dev)
++static void network_connect(struct net_device *dev)
 +{
 +	struct netfront_info *np = netdev_priv(dev);
-+	int i, requeue_idx, err;
++	int i, requeue_idx;
 +	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);
 +
@@ -62691,8 +61027,6 @@
 +
 +	spin_unlock(&np->rx_lock);
 +	spin_unlock_irq(&np->tx_lock);
-+
-+	return 0;
 +}
 +
 +static void netif_uninit(struct net_device *dev)
@@ -62858,7 +61192,8 @@
 +{
 +}
 +
-+static struct net_device * __devinit create_netdev(struct xenbus_device *dev)
++static struct net_device * __devinit
++create_netdev(int handle, int copying_receiver, struct xenbus_device *dev)
 +{
 +	int i, err = 0;
 +	struct net_device *netdev = NULL;
@@ -62872,7 +61207,9 @@
 +	}
 +
 +	np                   = netdev_priv(netdev);
++	np->handle           = handle;
 +	np->xbdev            = dev;
++	np->copying_receiver = copying_receiver;
 +
 +	netif_carrier_off(netdev);
 +
@@ -63003,12 +61340,10 @@
 +
 +	err = xennet_sysfs_addif(info->netdev);
 +	if (err) {
-+		unregister_netdev(info->netdev);
++		/* This can be non-fatal: it only means no tuning parameters */
 +		printk(KERN_WARNING "%s: add sysfs failed err=%d\n",
 +		       __FUNCTION__, err);
-+		return err;
 +	}
-+
 +	return 0;
 +}
 +
@@ -63120,9 +61455,9 @@
 +module_exit(netif_exit);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-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
+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
++++ linux-2.6.18-xen/drivers/xen/pciback/conf_space.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,425 @@
 +/*
 + * PCI Backend - Functions for creating a virtual configuration space for
@@ -63549,9 +61884,9 @@
 +{
 +	return pciback_config_capability_init();
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/xen/pciback/conf_space_capability.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,71 @@
 +/*
 + * PCI Backend - Handles the virtual fields found on the capability lists
@@ -63624,9 +61959,9 @@
 +
 +	return 0;
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/xen/pciback/conf_space_capability.h	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,23 @@
 +/*
 + * PCI Backend - Data structures for special overlays for structures on
@@ -63651,9 +61986,9 @@
 +};
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/drivers/xen/pciback/conf_space_capability_pm.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,113 @@
 +/*
 + * PCI Backend - Configuration space overlay for power management
@@ -63768,9 +62103,9 @@
 +	.capability = PCI_CAP_ID_PM,
 +	.fields = caplist_pm,
 +};
-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
+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
++++ linux-2.6.18-xen/drivers/xen/pciback/conf_space_capability_vpd.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,42 @@
 +/*
 + * PCI Backend - Configuration space overlay for Vital Product Data
@@ -63814,9 +62149,9 @@
 +	.capability = PCI_CAP_ID_VPD,
 +	.fields = caplist_vpd,
 +};
-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
+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
++++ linux-2.6.18-xen/drivers/xen/pciback/conf_space.h	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,126 @@
 +/*
 + * PCI Backend - Common data structures for overriding the configuration space
@@ -63944,9 +62279,9 @@
 +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.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
+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
++++ linux-2.6.18-xen/drivers/xen/pciback/conf_space_header.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,299 @@
 +/*
 + * PCI Backend - Handles the virtual fields in the configuration space headers.
@@ -64247,9 +62582,9 @@
 +      out:
 +	return err;
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/xen/pciback/conf_space_quirks.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,128 @@
 +/*
 + * PCI Backend - Handle special overlays for broken devices.
@@ -64379,9 +62714,9 @@
 +      out:
 +	return ret;
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/xen/pciback/conf_space_quirks.h	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,35 @@
 +/*
 + * PCI Backend - Data structures for special overlays for broken devices.
@@ -64418,9 +62753,9 @@
 +int pciback_field_is_dup(struct pci_dev *dev, int reg);
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/drivers/xen/pciback/Makefile	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,15 @@
 +obj-$(CONFIG_XEN_PCIDEV_BACKEND) += pciback.o
 +
@@ -64437,9 +62772,9 @@
 +ifeq ($(CONFIG_XEN_PCIDEV_BE_DEBUG),y)
 +EXTRA_CFLAGS += -DDEBUG
 +endif
-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
+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
++++ linux-2.6.18-xen/drivers/xen/pciback/passthrough.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,157 @@
 +/*
 + * PCI Backend - Provides restricted access to the real PCI bus topology
@@ -64598,9 +62933,9 @@
 +	kfree(dev_data);
 +	pdev->pci_dev_data = NULL;
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/xen/pciback/pciback.h	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,93 @@
 +/*
 + * PCI Backend Common Data Structures & Function Declarations
@@ -64695,9 +63030,9 @@
 +
 +extern int verbose_request;
 +#endif
-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
+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
++++ linux-2.6.18-xen/drivers/xen/pciback/pciback_ops.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,95 @@
 +/*
 + * PCI Backend Operations - respond to PCI requests from Frontend
@@ -64794,9 +63129,9 @@
 +
 +	return IRQ_HANDLED;
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/xen/pciback/pci_stub.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,916 @@
 +/*
 + * PCI Stub Driver - Grabs devices in backend to be exported later
@@ -65714,9 +64049,9 @@
 +module_exit(pciback_cleanup);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-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
+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
++++ linux-2.6.18-xen/drivers/xen/pciback/slot.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,151 @@
 +/*
 + * PCI Backend - Provides a Virtual PCI bus (with real devices)
@@ -65869,9 +64204,9 @@
 +	kfree(slot_dev);
 +	pdev->pci_dev_data = NULL;
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/xen/pciback/vpci.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,204 @@
 +/*
 + * PCI Backend - Provides a Virtual PCI bus (with real devices)
@@ -66077,9 +64412,9 @@
 +	kfree(vpci_dev);
 +	pdev->pci_dev_data = NULL;
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/xen/pciback/xenbus.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,458 @@
 +/*
 + * PCI Backend Xenbus Setup - handles setup with frontend and xend
@@ -66539,9 +64874,9 @@
 +{
 +	xenbus_unregister_driver(&xenbus_pciback_driver);
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/xen/pcifront/Makefile	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,7 @@
 +obj-y += pcifront.o
 +
@@ -66550,9 +64885,9 @@
 +ifeq ($(CONFIG_XEN_PCIDEV_FE_DEBUG),y)
 +EXTRA_CFLAGS += -DDEBUG
 +endif
-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
+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
++++ linux-2.6.18-xen/drivers/xen/pcifront/pci.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,46 @@
 +/*
 + * PCI Frontend Operations - ensure only one PCI frontend runs at a time
@@ -66600,9 +64935,9 @@
 +
 +	spin_unlock(&pcifront_dev_lock);
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/xen/pcifront/pcifront.h	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,40 @@
 +/*
 + * PCI Frontend - Common data structures & function declarations
@@ -66644,9 +64979,9 @@
 +void pcifront_free_roots(struct pcifront_device *pdev);
 +
 +#endif	/* __XEN_PCIFRONT_H__ */
-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
+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
++++ linux-2.6.18-xen/drivers/xen/pcifront/pci_op.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,273 @@
 +/*
 + * PCI Frontend Operations - Communicates with frontend
@@ -66921,9 +65256,9 @@
 +		kfree(bus_entry);
 +	}
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/xen/pcifront/xenbus.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,295 @@
 +/*
 + * PCI Frontend Xenbus Setup - handles setup with backend (imports page/evtchn)
@@ -67220,16 +65555,16 @@
 +
 +/* Initialize after the Xen PCI Frontend Stub is initialized */
 +subsys_initcall(pcifront_init);
-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
+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
++++ linux-2.6.18-xen/drivers/xen/privcmd/Makefile	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,2 @@
 +
 +obj-$(CONFIG_XEN_PRIVCMD)	:= privcmd.o
-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 @@
+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-11-19 14:26:56.000000000 +0100
+@@ -0,0 +1,289 @@
 +/******************************************************************************
 + * privcmd.c
 + * 
@@ -67266,10 +65601,6 @@
 +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)
 +{
@@ -67318,7 +65649,18 @@
 +				: "r8", "r10", "memory" );
 +		}
 +#elif defined (__ia64__)
-+		ret = privcmd_hypercall(&hypercall);
++		__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");
 +#endif
 +	}
 +	break;
@@ -67346,10 +65688,12 @@
 +
 +		vma = find_vma(mm, msg.va);
 +		rc = -EINVAL;
-+		if (!vma || (msg.va != vma->vm_start) ||
-+		    !privcmd_enforce_singleshot_mapping(vma))
++		if (!vma || (msg.va != vma->vm_start) || vma->vm_private_data)
 +			goto mmap_out;
 +
++		/* Mapping is a one-shot operation per vma. */
++		vma->vm_private_data = (void *)1;
++
 +		va = vma->vm_start;
 +
 +		for (i = 0; i < mmapcmd.num; i++) {
@@ -67359,7 +65703,7 @@
 +
 +			/* Do not allow range to wrap the address space. */
 +			rc = -EINVAL;
-+			if ((msg.npages > (LONG_MAX >> PAGE_SHIFT)) ||
++			if ((msg.npages > (INT_MAX >> PAGE_SHIFT)) ||
 +			    ((unsigned long)(msg.npages << PAGE_SHIFT) >= -va))
 +				goto mmap_out;
 +
@@ -67403,7 +65747,7 @@
 +		if (copy_from_user(&m, udata, sizeof(m)))
 +			return -EFAULT;
 +
-+		if ((m.num <= 0) || (m.num > (LONG_MAX >> PAGE_SHIFT)))
++		if ((m.num <= 0) || (m.num > (INT_MAX >> PAGE_SHIFT)))
 +			return -EINVAL;
 +
 +		down_read(&mm->mmap_sem);
@@ -67411,13 +65755,15 @@
 +		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)) {
++		    ((m.addr + (m.num<<PAGE_SHIFT)) != vma->vm_end) ||
++		    vma->vm_private_data) {
 +			up_read(&mm->mmap_sem);
 +			return -EINVAL;
 +		}
 +
++		/* Mapping is a one-shot operation per vma. */
++		vma->vm_private_data = (void *)1;
++
 +		p = m.arr;
 +		addr = m.addr;
 +		for (i = 0; i < m.num; i++, addr += PAGE_SIZE, p++) {
@@ -67471,11 +65817,6 @@
 +
 +	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 = {
@@ -67513,9 +65854,9 @@
 +}
 +
 +__initcall(privcmd_init);
-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
+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-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,86 @@
 +/******************************************************************************
 + * drivers/xen/tpmback/common.h
@@ -67603,9 +65944,9 @@
 +}
 +
 +#endif /* __TPMIF__BACKEND__COMMON_H__ */
-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
+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-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,182 @@
 + /*****************************************************************************
 + * drivers/xen/tpmback/interface.c
@@ -67789,17 +66130,17 @@
 +{
 +	kmem_cache_destroy(tpmif_cachep);
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/xen/tpmback/Makefile	2006-11-19 14:26:56.000000000 +0100
 @@ -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.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
+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-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,944 @@
 +/******************************************************************************
 + * drivers/xen/tpmback/tpmback.c
@@ -68745,9 +67086,9 @@
 +}
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-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
+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
++++ linux-2.6.18-xen/drivers/xen/tpmback/xenbus.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,287 @@
 +/*  Xenbus code for tpmif backend
 +    Copyright (C) 2005 IBM Corporation
@@ -69036,9 +67377,9 @@
 +{
 +	xenbus_unregister_driver(&tpmback);
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/xen/util.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,70 @@
 +
 +#include <linux/mm.h>
@@ -69110,9 +67451,9 @@
 +	preempt_enable();
 +}
 +EXPORT_SYMBOL_GPL(unlock_vm_area);
-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
+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
++++ linux-2.6.18-xen/drivers/xen/xenbus/Makefile	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,12 @@
 +obj-y	+= xenbus.o
 +obj-$(CONFIG_XEN_BACKEND) += xenbus_be.o
@@ -69126,9 +67467,9 @@
 +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.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
+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
++++ linux-2.6.18-xen/drivers/xen/xenbus/xenbus_backend_client.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,147 @@
 +/******************************************************************************
 + * Backend-client-facing interface for the Xenbus driver.  In other words, the
@@ -69277,9 +67618,9 @@
 +EXPORT_SYMBOL_GPL(xenbus_dev_is_online);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-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
+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
++++ linux-2.6.18-xen/drivers/xen/xenbus/xenbus_client.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,299 @@
 +/******************************************************************************
 + * Client-facing interface for the Xenbus driver.  In other words, the
@@ -69580,9 +67921,9 @@
 +	return result;
 +}
 +EXPORT_SYMBOL_GPL(xenbus_read_driver_state);
-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
+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
++++ linux-2.6.18-xen/drivers/xen/xenbus/xenbus_comms.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,203 @@
 +/******************************************************************************
 + * xenbus_comms.c
@@ -69787,9 +68128,9 @@
 +
 +	return 0;
 +}
-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
+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
++++ linux-2.6.18-xen/drivers/xen/xenbus/xenbus_comms.h	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,45 @@
 +/*
 + * Private include for xenbus communications.
@@ -69836,9 +68177,9 @@
 +extern int xen_store_evtchn;
 +
 +#endif /* _XENBUS_COMMS_H */
-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
+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
++++ linux-2.6.18-xen/drivers/xen/xenbus/xenbus_dev.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,356 @@
 +/*
 + * xenbus_dev.c
@@ -70196,10 +68537,10 @@
 +
 +	return 0;
 +}
-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 @@
+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-11-19 14:26:56.000000000 +0100
+@@ -0,0 +1,1189 @@
 +/******************************************************************************
 + * Talks to Xen Store to figure out what devices we have.
 + *
@@ -70250,7 +68591,6 @@
 +#include <asm/maddr.h>
 +#include <asm/pgtable.h>
 +#include <asm/hypervisor.h>
-+#include <asm/hypercall.h>
 +#include <xen/xenbus.h>
 +#include <xen/xen_proc.h>
 +#include <xen/evtchn.h>
@@ -71390,9 +69730,9 @@
 +
 +late_initcall(boot_wait_for_devices);
 +#endif
-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
+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
++++ linux-2.6.18-xen/drivers/xen/xenbus/xenbus_xs.c	2006-11-19 14:26:56.000000000 +0100
 @@ -0,0 +1,853 @@
 +/******************************************************************************
 + * xenbus_xs.c
@@ -72247,9 +70587,9 @@
 +
 +	return 0;
 +}
-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
+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
++++ linux-2.6.18-xen/fs/Kconfig	2006-11-19 14:26:56.000000000 +0100
 @@ -865,6 +865,7 @@
  config HUGETLBFS
  	bool "HugeTLB file system support"
@@ -72258,9 +70598,9 @@
  	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.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
+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
++++ linux-2.6.18-xen/include/asm-generic/vmlinux.lds.h	2006-11-19 14:27:04.000000000 +0100
 @@ -194,3 +194,6 @@
  		.stab.index 0 : { *(.stab.index) }			\
  		.stab.indexstr 0 : { *(.stab.indexstr) }		\
@@ -72268,9 +70608,9 @@
 +
 +#define NOTES								\
 +		.notes : { *(.note.*) } :note
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/apic.h	2006-11-19 14:27:04.000000000 +0100
 @@ -119,10 +119,12 @@
  
  extern int disable_timer_pin_1;
@@ -72284,20 +70624,30 @@
  
  extern int timer_over_8254;
  
-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 @@
+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
++++ linux-2.6.18-xen/include/asm-i386/fixmap.h	2006-11-19 14:27:04.000000000 +0100
+@@ -19,7 +19,7 @@
   * Leave one empty page between vmalloc'ed areas and
   * the start of the fixmap.
   */
-+
- #define __FIXADDR_TOP	0xfffff000
+-#define __FIXADDR_TOP	0xfffff000
++extern unsigned long __FIXADDR_TOP;
  
  #ifndef __ASSEMBLY__
-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
+ #include <linux/kernel.h>
+@@ -94,6 +94,8 @@
+ extern void __set_fixmap (enum fixed_addresses idx,
+ 					unsigned long phys, pgprot_t flags);
+ 
++extern void set_fixaddr_top(unsigned long top);
++
+ #define set_fixmap(idx, phys) \
+ 		__set_fixmap(idx, phys, PAGE_KERNEL)
+ /*
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-default/mach_traps.h	2006-11-19 14:27:04.000000000 +0100
 @@ -15,6 +15,18 @@
  	outb(reason, 0x61);
  }
@@ -72317,9 +70667,9 @@
  static inline unsigned char get_nmi_reason(void)
  {
  	return inb(0x61);
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/agp.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,37 @@
 +#ifndef AGP_H
 +#define AGP_H 1
@@ -72358,9 +70708,9 @@
 +	dma_free_coherent(NULL,PAGE_SIZE<<(order),(table),virt_to_bus(table))
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/desc.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,164 @@
 +#ifndef __ARCH_DESC_H
 +#define __ARCH_DESC_H
@@ -72526,9 +70876,9 @@
 +#endif /* !__ASSEMBLY__ */
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/dma-mapping.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,151 @@
 +#ifndef _ASM_I386_DMA_MAPPING_H
 +#define _ASM_I386_DMA_MAPPING_H
@@ -72681,9 +71031,9 @@
 +				  dma_addr_t device_addr, size_t size);
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/fixmap.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,156 @@
 +/*
 + * fixmap.h: compile-time virtual memory allocation
@@ -72841,9 +71191,9 @@
 +
 +#endif /* !__ASSEMBLY__ */
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/floppy.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,147 @@
 +/*
 + * Architecture specific parts of the Floppy driver
@@ -72992,9 +71342,9 @@
 +#define EXTRA_FLOPPY_PARAMS
 +
 +#endif /* __ASM_XEN_I386_FLOPPY_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/highmem.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,80 @@
 +/*
 + * highmem.h: virtual kernel memory mappings for high memory
@@ -73076,85 +71426,9 @@
 +#endif /* __KERNEL__ */
 +
 +#endif /* _ASM_HIGHMEM_H */
-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
-+#define _ASM_HW_IRQ_H
-+
-+/*
-+ *	linux/include/asm/hw_irq.h
-+ *
-+ *	(C) 1992, 1993 Linus Torvalds, (C) 1997 Ingo Molnar
-+ *
-+ *	moved some of the old arch/i386/kernel/irq.h to here. VY
-+ *
-+ *	IRQ/IPI changes taken from work by Thomas Radke
-+ *	<tomsoft at informatik.tu-chemnitz.de>
-+ */
-+
-+#include <linux/profile.h>
-+#include <asm/atomic.h>
-+#include <asm/irq.h>
-+#include <asm/sections.h>
-+
-+struct hw_interrupt_type;
-+
-+#define NMI_VECTOR		0x02
-+
-+/*
-+ * Various low-level irq details needed by irq.c, process.c,
-+ * time.c, io_apic.c and smp.c
-+ *
-+ * Interrupt entry/exit code at both C and assembly level
-+ */
-+
-+extern u8 irq_vector[NR_IRQ_VECTORS];
-+#define IO_APIC_VECTOR(irq)	(irq_vector[irq])
-+#define AUTO_ASSIGN		-1
-+
-+extern void (*interrupt[NR_IRQS])(void);
-+
-+#ifdef CONFIG_SMP
-+fastcall void reschedule_interrupt(void);
-+fastcall void invalidate_interrupt(void);
-+fastcall void call_function_interrupt(void);
-+#endif
-+
-+#ifdef CONFIG_X86_LOCAL_APIC
-+fastcall void apic_timer_interrupt(void);
-+fastcall void error_interrupt(void);
-+fastcall void spurious_interrupt(void);
-+fastcall void thermal_interrupt(struct pt_regs *);
-+#define platform_legacy_irq(irq)	((irq) < 16)
-+#endif
-+
-+void disable_8259A_irq(unsigned int irq);
-+void enable_8259A_irq(unsigned int irq);
-+int i8259A_irq_pending(unsigned int irq);
-+void make_8259A_irq(unsigned int irq);
-+void init_8259A(int aeoi);
-+void FASTCALL(send_IPI_self(int vector));
-+void init_VISWS_APIC_irqs(void);
-+void setup_IO_APIC(void);
-+void disable_IO_APIC(void);
-+void print_IO_APIC(void);
-+int IO_APIC_get_PCI_irq_vector(int bus, int slot, int fn);
-+void send_IPI(int dest, int vector);
-+void setup_ioapic_dest(void);
-+
-+extern unsigned long io_apic_irqs;
-+
-+extern atomic_t irq_err_count;
-+extern atomic_t irq_mis_count;
-+
-+#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.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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/hypercall.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,389 @@
 +/******************************************************************************
 + * hypercall.h
@@ -73545,9 +71819,9 @@
 +
 +
 +#endif /* __HYPERCALL_H__ */
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/hypervisor.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,234 @@
 +/******************************************************************************
 + * hypervisor.h
@@ -73783,9 +72057,9 @@
 +}
 +
 +#endif /* __HYPERVISOR_H__ */
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/io.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,389 @@
 +#ifndef _ASM_IO_H
 +#define _ASM_IO_H
@@ -74176,93 +72450,9 @@
 +#define ARCH_HAS_DEV_MEM
 +
 +#endif
-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 @@
-+/*
-+ * include/asm-i386/irqflags.h
-+ *
-+ * IRQ flags handling
-+ *
-+ * This file gets included from lowlevel asm headers too, to provide
-+ * wrapped versions of the local_irq_*() APIs, based on the
-+ * raw_local_irq_*() functions from the lowlevel headers.
-+ */
-+#ifndef _ASM_IRQFLAGS_H
-+#define _ASM_IRQFLAGS_H
-+
-+#ifndef __ASSEMBLY__
-+
-+#define raw_local_save_flags(flags) \
-+		do { (flags) = __raw_local_save_flags(); } while (0)
-+
-+unsigned long __raw_local_save_flags(void);
-+void raw_local_irq_restore(unsigned long flags);
-+void raw_local_irq_disable(void);
-+void raw_local_irq_enable(void);
-+
-+/*
-+ * Used in the idle loop; sti takes one instruction cycle
-+ * to complete:
-+ */
-+void raw_safe_halt(void);
-+
-+/*
-+ * Used when interrupts are already enabled or to
-+ * shutdown the processor:
-+ */
-+void halt(void);
-+
-+static inline int raw_irqs_disabled_flags(unsigned long flags)
-+{
-+	return flags != 0;
-+}
-+
-+int raw_irqs_disabled(void);
-+
-+/*
-+ * For spinlocks, etc:
-+ */
-+unsigned long __raw_local_irq_save(void);
-+#define raw_local_irq_save(flags) \
-+		do { (flags) = __raw_local_irq_save(); } while (0)
-+
-+#endif /* __ASSEMBLY__ */
-+
-+/*
-+ * Do the CPU's IRQ-state tracing from assembly code. We call a
-+ * C function, so save all the C-clobbered registers:
-+ */
-+#ifdef CONFIG_TRACE_IRQFLAGS
-+
-+# define TRACE_IRQS_ON				\
-+	pushl %eax;				\
-+	pushl %ecx;				\
-+	pushl %edx;				\
-+	call trace_hardirqs_on;			\
-+	popl %edx;				\
-+	popl %ecx;				\
-+	popl %eax;
-+
-+# define TRACE_IRQS_OFF				\
-+	pushl %eax;				\
-+	pushl %ecx;				\
-+	pushl %edx;				\
-+	call trace_hardirqs_off;		\
-+	popl %edx;				\
-+	popl %ecx;				\
-+	popl %eax;
-+
-+#else
-+# define TRACE_IRQS_ON
-+# define TRACE_IRQS_OFF
-+#endif
-+
-+#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/kmap_types.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,31 @@
 +#ifndef _ASM_KMAP_TYPES_H
 +#define _ASM_KMAP_TYPES_H
@@ -74295,9 +72485,9 @@
 +#undef D
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/maddr.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,160 @@
 +#ifndef _I386_MADDR_H
 +#define _I386_MADDR_H
@@ -74459,9 +72649,9 @@
 +#define __pte_ma(x)	((pte_t) { (x) } )
 +
 +#endif /* _I386_MADDR_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/mmu_context.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,108 @@
 +#ifndef __I386_SCHED_H
 +#define __I386_SCHED_H
@@ -74571,9 +72761,9 @@
 +}
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/mmu.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,29 @@
 +#ifndef __i386_MMU_H
 +#define __i386_MMU_H
@@ -74604,9 +72794,9 @@
 +#define arch_dup_mmap(mm, oldmm) ((void)(oldmm), _arch_dup_mmap(mm))
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/page.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,220 @@
 +#ifndef _I386_PAGE_H
 +#define _I386_PAGE_H
@@ -74828,9 +73018,9 @@
 +#endif /* __KERNEL__ */
 +
 +#endif /* _I386_PAGE_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/param.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,23 @@
 +#ifndef _ASMi386_PARAM_H
 +#define _ASMi386_PARAM_H
@@ -74855,9 +73045,9 @@
 +#define COMMAND_LINE_SIZE 256
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pci.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,153 @@
 +#ifndef __i386_PCI_H
 +#define __i386_PCI_H
@@ -75012,9 +73202,9 @@
 +#define pcibios_scan_all_fns(a, b)	1
 +
 +#endif /* __i386_PCI_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgalloc.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,63 @@
 +#ifndef _I386_PGALLOC_H
 +#define _I386_PGALLOC_H
@@ -75079,9 +73269,9 @@
 +#define check_pgt_cache()	do { } while (0)
 +
 +#endif /* _I386_PGALLOC_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable-2level-defs.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,21 @@
 +#ifndef _I386_PGTABLE_2LEVEL_DEFS_H
 +#define _I386_PGTABLE_2LEVEL_DEFS_H
@@ -75104,9 +73294,9 @@
 +#define PTRS_PER_PTE	1024
 +
 +#endif /* _I386_PGTABLE_2LEVEL_DEFS_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable-2level.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,87 @@
 +#ifndef _I386_PGTABLE_2LEVEL_H
 +#define _I386_PGTABLE_2LEVEL_H
@@ -75195,9 +73385,9 @@
 +void vmalloc_sync_all(void);
 +
 +#endif /* _I386_PGTABLE_2LEVEL_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable-3level-defs.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,25 @@
 +#ifndef _I386_PGTABLE_3LEVEL_DEFS_H
 +#define _I386_PGTABLE_3LEVEL_DEFS_H
@@ -75224,9 +73414,9 @@
 +#define PTRS_PER_PTE	512
 +
 +#endif /* _I386_PGTABLE_3LEVEL_DEFS_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable-3level.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,185 @@
 +#ifndef _I386_PGTABLE_3LEVEL_H
 +#define _I386_PGTABLE_3LEVEL_H
@@ -75413,9 +73603,9 @@
 +#define vmalloc_sync_all() ((void)0)
 +
 +#endif /* _I386_PGTABLE_3LEVEL_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,508 @@
 +#ifndef _I386_PGTABLE_H
 +#define _I386_PGTABLE_H
@@ -75925,9 +74115,9 @@
 +#include <asm-generic/pgtable.h>
 +
 +#endif /* _I386_PGTABLE_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/processor.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,741 @@
 +/*
 + * include/asm-i386/processor.h
@@ -76670,9 +74860,9 @@
 +extern int sysenter_setup(void);
 +
 +#endif /* __ASM_I386_PROCESSOR_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/ptrace.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,90 @@
 +#ifndef _I386_PTRACE_H
 +#define _I386_PTRACE_H
@@ -76764,9 +74954,9 @@
 +#endif /* __KERNEL__ */
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/scatterlist.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,22 @@
 +#ifndef _I386_SCATTERLIST_H
 +#define _I386_SCATTERLIST_H
@@ -76790,9 +74980,9 @@
 +#define ISA_DMA_THRESHOLD (0x00ffffff)
 +
 +#endif /* !(_I386_SCATTERLIST_H) */
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/segment.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,117 @@
 +#ifndef _ASM_SEGMENT_H
 +#define _ASM_SEGMENT_H
@@ -76911,9 +75101,9 @@
 +#define IDT_ENTRIES 256
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/setup.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,81 @@
 +/*
 + *	Just a place holder. We don't want to have to test x86 before
@@ -76996,9 +75186,9 @@
 +#endif /* __ASSEMBLY__ */
 +
 +#endif /* _i386_SETUP_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/smp.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,103 @@
 +#ifndef __ASM_SMP_H
 +#define __ASM_SMP_H
@@ -77103,10 +75293,10 @@
 +
 +#endif
 +#endif
-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 @@
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/spinlock.h	2006-11-19 14:27:04.000000000 +0100
+@@ -0,0 +1,190 @@
 +#ifndef __ASM_SPINLOCK_H
 +#define __ASM_SPINLOCK_H
 +
@@ -77140,11 +75330,6 @@
 +	"jmp 1b\n" \
 +	"3:\n\t"
 +
-+/*
-+ * NOTE: there's an irqs-on section here, which normally would have to be
-+ * irq-traced, but on CONFIG_TRACE_IRQFLAGS we never use
-+ * __raw_spin_lock_string_flags().
-+ */
 +#define __raw_spin_lock_string_flags \
 +	"\n1:\t" \
 +	LOCK_PREFIX " ; decb %0\n\t" \
@@ -77171,24 +75356,17 @@
 +	asm(__raw_spin_lock_string : "+m" (lock->slock) : : "memory");
 +}
 +
-+/*
-+ * It is easier for the lock validator if interrupts are not re-enabled
-+ * in the middle of a lock-acquire. This is a performance feature anyway
-+ * so we turn it off:
-+ */
-+#ifndef CONFIG_PROVE_LOCKING
 +static inline void __raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long flags)
 +{
 +	asm(__raw_spin_lock_string_flags : "+m" (lock->slock) : "r" (flags) : "memory");
 +}
-+#endif
 +
 +static inline int __raw_spin_trylock(raw_spinlock_t *lock)
 +{
 +	char oldval;
 +	__asm__ __volatile__(
 +		"xchgb %b0,%1"
-+		:"=q" (oldval), "+m" (lock->slock)
++		:"=q" (oldval), "=m" (lock->slock)
 +		:"0" (0) : "memory");
 +	return oldval > 0;
 +}
@@ -77204,7 +75382,7 @@
 +
 +#define __raw_spin_unlock_string \
 +	"movb $1,%0" \
-+		:"+m" (lock->slock) : : "memory"
++		:"=m" (lock->slock) : : "memory"
 +
 +
 +static inline void __raw_spin_unlock(raw_spinlock_t *lock)
@@ -77218,7 +75396,7 @@
 +
 +#define __raw_spin_unlock_string \
 +	"xchgb %b0, %1" \
-+		:"=q" (oldval), "+m" (lock->slock) \
++		:"=q" (oldval), "=m" (lock->slock) \
 +		:"0" (oldval) : "memory"
 +
 +static inline void __raw_spin_unlock(raw_spinlock_t *lock)
@@ -77299,19 +75477,19 @@
 +
 +static inline void __raw_read_unlock(raw_rwlock_t *rw)
 +{
-+	asm volatile(LOCK_PREFIX "incl %0" :"+m" (rw->lock) : : "memory");
++	asm volatile(LOCK_PREFIX "incl %0" :"=m" (rw->lock) : : "memory");
 +}
 +
 +static inline void __raw_write_unlock(raw_rwlock_t *rw)
 +{
 +	asm volatile(LOCK_PREFIX "addl $" RW_LOCK_BIAS_STR ", %0"
-+				 : "+m" (rw->lock) : : "memory");
++				 : "=m" (rw->lock) : : "memory");
 +}
 +
 +#endif /* __ASM_SPINLOCK_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/swiotlb.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,41 @@
 +#ifndef _ASM_SWIOTLB_H
 +#define _ASM_SWIOTLB_H 1
@@ -77354,9 +75532,9 @@
 +#endif
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/synch_bitops.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,141 @@
 +#ifndef __XEN_SYNCH_BITOPS_H__
 +#define __XEN_SYNCH_BITOPS_H__
@@ -77499,10 +75677,10 @@
 +#define synch_cmpxchg_subword synch_cmpxchg
 +
 +#endif /* __XEN_SYNCH_BITOPS_H__ */
-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 @@
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/system.h	2006-11-19 14:27:04.000000000 +0100
+@@ -0,0 +1,581 @@
 +#ifndef __ASM_SYSTEM_H
 +#define __ASM_SYSTEM_H
 +
@@ -77524,6 +75702,10 @@
 +struct task_struct;	/* one of the stranger aspects of C forward declarations.. */
 +extern struct task_struct * FASTCALL(__switch_to(struct task_struct *prev, struct task_struct *next));
 +
++/*
++ * Saving eflags is important. It switches not only IOPL between tasks,
++ * it also protects other tasks from NT leaking through sysenter etc.
++ */
 +#define switch_to(prev,next,last) do {					\
 +	unsigned long esi,edi;						\
 +	asm volatile("pushfl\n\t"		/* Save flags */	\
@@ -77597,6 +75779,10 @@
 +#define savesegment(seg, value) \
 +	asm volatile("mov %%" #seg ",%0":"=rm" (value))
 +
++/*
++ * Clear and set 'TS' bit respectively
++ */
++#define clts() (HYPERVISOR_fpu_taskswitch(0))
 +#define read_cr0() ({ \
 +	unsigned int __dummy; \
 +	__asm__ __volatile__( \
@@ -77605,12 +75791,12 @@
 +	__dummy; \
 +})
 +#define write_cr0(x) \
-+	__asm__ __volatile__("movl %0,%%cr0": :"r" (x))
++	__asm__ __volatile__("movl %0,%%cr0": :"r" (x));
 +
 +#define read_cr2() \
 +	(HYPERVISOR_shared_info->vcpu_info[smp_processor_id()].arch.cr2)
 +#define write_cr2(x) \
-+	__asm__ __volatile__("movl %0,%%cr2": :"r" (x))
++	__asm__ __volatile__("movl %0,%%cr2": :"r" (x));
 +
 +#define read_cr3() ({ \
 +	unsigned int __dummy; \
@@ -77633,6 +75819,7 @@
 +		:"=r" (__dummy)); \
 +	__dummy; \
 +})
++
 +#define read_cr4_safe() ({			      \
 +	unsigned int __dummy;			      \
 +	/* This could fault if %cr4 does not exist */ \
@@ -77646,17 +75833,13 @@
 +})
 +
 +#define write_cr4(x) \
-+	__asm__ __volatile__("movl %0,%%cr4": :"r" (x))
-+/*
-+ * Clear and set 'TS' bit respectively
-+ */
-+#define clts() (HYPERVISOR_fpu_taskswitch(0))
++	__asm__ __volatile__("movl %0,%%cr4": :"r" (x));
 +#define stts() (HYPERVISOR_fpu_taskswitch(1))
 +
 +#endif	/* __KERNEL__ */
 +
 +#define wbinvd() \
-+	__asm__ __volatile__ ("wbinvd": : :"memory")
++	__asm__ __volatile__ ("wbinvd": : :"memory");
 +
 +static inline unsigned long get_limit(unsigned long segment)
 +{
@@ -77967,7 +76150,92 @@
 +#define set_mb(var, value) do { var = value; barrier(); } while (0)
 +#endif
 +
-+#include <linux/irqflags.h>
++/* interrupt control.. */
++
++/* 
++ * The use of 'barrier' in the following reflects their use as local-lock
++ * operations. Reentrancy must be prevented (e.g., __cli()) /before/ following
++ * critical operations are executed. All critical operations must complete
++ * /before/ reentrancy is permitted (e.g., __sti()). Alpha architecture also
++ * includes these barriers, for example.
++ */
++
++#define __cli()								\
++do {									\
++	vcpu_info_t *_vcpu;						\
++	preempt_disable();						\
++	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];		\
++	_vcpu->evtchn_upcall_mask = 1;					\
++	preempt_enable_no_resched();					\
++	barrier();							\
++} while (0)
++
++#define __sti()								\
++do {									\
++	vcpu_info_t *_vcpu;						\
++	barrier();							\
++	preempt_disable();						\
++	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];		\
++	_vcpu->evtchn_upcall_mask = 0;					\
++	barrier(); /* unmask then check (avoid races) */		\
++	if (unlikely(_vcpu->evtchn_upcall_pending))			\
++		force_evtchn_callback();				\
++	preempt_enable();						\
++} while (0)
++
++#define __save_flags(x)							\
++do {									\
++	vcpu_info_t *_vcpu;						\
++	preempt_disable();						\
++	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];		\
++	(x) = _vcpu->evtchn_upcall_mask;				\
++	preempt_enable();						\
++} while (0)
++
++#define __restore_flags(x)						\
++do {									\
++	vcpu_info_t *_vcpu;						\
++	barrier();							\
++	preempt_disable();						\
++	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];		\
++	if ((_vcpu->evtchn_upcall_mask = (x)) == 0) {			\
++		barrier(); /* unmask then check (avoid races) */	\
++		if (unlikely(_vcpu->evtchn_upcall_pending))		\
++			force_evtchn_callback();			\
++		preempt_enable();					\
++	} else								\
++		preempt_enable_no_resched();				\
++} while (0)
++
++void safe_halt(void);
++void halt(void);
++
++#define __save_and_cli(x)						\
++do {									\
++	vcpu_info_t *_vcpu;						\
++	preempt_disable();						\
++	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];		\
++	(x) = _vcpu->evtchn_upcall_mask;				\
++	_vcpu->evtchn_upcall_mask = 1;					\
++	preempt_enable_no_resched();					\
++	barrier();							\
++} while (0)
++
++#define local_irq_save(x)	__save_and_cli(x)
++#define local_irq_restore(x)	__restore_flags(x)
++#define local_save_flags(x)	__save_flags(x)
++#define local_irq_disable()	__cli()
++#define local_irq_enable()	__sti()
++
++/* Cannot use preempt_enable() here as we would recurse in preempt_sched(). */
++#define irqs_disabled()							\
++({	int ___x;							\
++	vcpu_info_t *_vcpu;						\
++	preempt_disable();						\
++	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];		\
++	___x = (_vcpu->evtchn_upcall_mask != 0);			\
++	preempt_enable_no_resched();					\
++	___x; })
 +
 +/*
 + * disable hlt during certain critical i/o operations
@@ -77994,9 +76262,9 @@
 +void default_idle(void);
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/timer.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,70 @@
 +#ifndef _ASMi386_TIMER_H
 +#define _ASMi386_TIMER_H
@@ -78068,9 +76336,9 @@
 +extern struct init_timer_opts timer_pmtmr_init;
 +#endif
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/tlbflush.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,101 @@
 +#ifndef _I386_TLBFLUSH_H
 +#define _I386_TLBFLUSH_H
@@ -78173,9 +76441,9 @@
 +}
 +
 +#endif /* _I386_TLBFLUSH_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/asm/vga.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,20 @@
 +/*
 + *	Access to VGA videoram
@@ -78197,9 +76465,9 @@
 +#define vga_writeb(x,y) (*(y) = (x))
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/irq_vectors.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,125 @@
 +/*
 + * This file should contain #defines for all of the interrupt vector
@@ -78326,9 +76594,9 @@
 +#define irq_to_dynirq(_x)	((_x) - DYNIRQ_BASE)
 +
 +#endif /* _ASM_IRQ_VECTORS_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/mach_traps.h	2006-11-19 14:27:04.000000000 +0100
 @@ -0,0 +1,33 @@
 +/*
 + *  include/asm-xen/asm-i386/mach-xen/mach_traps.h
@@ -78363,18 +76631,31 @@
 +static inline void reassert_nmi(void) {}
 +
 +#endif /* !_MACH_TRAPS_H */
-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 @@
+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
++++ linux-2.6.18-xen/include/asm-i386/mach-xen/setup_arch.h	2006-11-19 14:27:04.000000000 +0100
+@@ -0,0 +1,6 @@
++
 +/* Hook to call BIOS initialisation function */
 +
 +#define ARCH_SETUP machine_specific_arch_setup();
 +
 +void __init machine_specific_arch_setup(void);
-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
+diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/page.h linux-2.6.18-xen/include/asm-i386/page.h
+--- linux-2.6.18/include/asm-i386/page.h	2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/include/asm-i386/page.h	2006-11-19 14:27:04.000000000 +0100
+@@ -122,7 +122,7 @@
+ 
+ #define PAGE_OFFSET		((unsigned long)__PAGE_OFFSET)
+ #define VMALLOC_RESERVE		((unsigned long)__VMALLOC_RESERVE)
+-#define MAXMEM			(-__PAGE_OFFSET-__VMALLOC_RESERVE)
++#define MAXMEM			(__FIXADDR_TOP-__PAGE_OFFSET-__VMALLOC_RESERVE)
+ #define __pa(x)			((unsigned long)(x)-PAGE_OFFSET)
+ #define __va(x)			((void *)((unsigned long)(x)+PAGE_OFFSET))
+ #define pfn_to_kaddr(pfn)      __va((pfn) << PAGE_SHIFT)
+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
++++ linux-2.6.18-xen/include/asm-i386/pgtable-2level-defs.h	2006-11-19 14:27:04.000000000 +0100
 @@ -1,6 +1,8 @@
  #ifndef _I386_PGTABLE_2LEVEL_DEFS_H
  #define _I386_PGTABLE_2LEVEL_DEFS_H
@@ -78384,9 +76665,9 @@
  /*
   * traditional i386 two-level paging structure:
   */
-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
+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
++++ linux-2.6.18-xen/include/asm-i386/pgtable-3level-defs.h	2006-11-19 14:27:04.000000000 +0100
 @@ -1,6 +1,8 @@
  #ifndef _I386_PGTABLE_3LEVEL_DEFS_H
  #define _I386_PGTABLE_3LEVEL_DEFS_H
@@ -78396,10 +76677,10 @@
  /*
   * PGDIR_SHIFT determines what a top-level page table entry can map
   */
-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 @@
+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
++++ linux-2.6.18-xen/include/asm-ia64/agp.h	2006-11-19 14:27:04.000000000 +0100
+@@ -19,13 +19,44 @@
  #define flush_agp_cache()		mb()
  
  /* Convert a physical address to an address suitable for the GART. */
@@ -78412,11 +76693,12 @@
 +#endif
  
  /* GATT allocation. Returns/accepts GATT kernel virtual address. */
--#define alloc_gatt_pages(order)		\
--	((char *)__get_free_pages(GFP_KERNEL, (order)))
--#define free_gatt_pages(table, order)	\
--	free_pages((unsigned long)(table), (order))
-+#ifdef CONFIG_XEN
++#ifndef CONFIG_XEN
+ #define alloc_gatt_pages(order)		\
+ 	((char *)__get_free_pages(GFP_KERNEL, (order)))
+ #define free_gatt_pages(table, order)	\
+ 	free_pages((unsigned long)(table), (order))
++#else
 +#include <asm/hypervisor.h>
 +static inline char*
 +alloc_gatt_pages(unsigned int order)
@@ -78440,25 +76722,17 @@
 +	xen_destroy_contiguous_region((unsigned long)table, order);
 +	free_pages((unsigned long)table, order);
 +}
-+#else	/* CONFIG_XEN */
-+/* Convert a physical address to an address suitable for the GART. */
-+#define phys_to_gart(x) (x)
-+#define gart_to_phys(x) (x)
-+
-+/* GATT allocation. Returns/accepts GATT kernel virtual address. */
-+#define alloc_gatt_pages(order)         \
-+        ((char *)__get_free_pages(GFP_KERNEL, (order)))
-+#define free_gatt_pages(table, order)   \
-+        free_pages((unsigned long)(table), (order))
-+#endif	/* CONFIG_XEN */
++#endif /* CONFIG_XEN */
  
  #endif /* _ASM_IA64_AGP_H */
-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 @@
+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
++++ linux-2.6.18-xen/include/asm-ia64/dma-mapping.h	2006-11-19 14:27:04.000000000 +0100
+@@ -6,20 +6,67 @@
+  *	David Mosberger-Tang <davidm at hpl.hp.com>
   */
  #include <asm/machvec.h>
++#ifndef CONFIG_XEN
  
 -#define dma_alloc_coherent	platform_dma_alloc_coherent
 -#define dma_alloc_noncoherent	platform_dma_alloc_coherent	/* coherent mem. is cheap */
@@ -78470,8 +76744,6 @@
 -#define dma_unmap_sg		platform_dma_unmap_sg
 -#define dma_sync_single_for_cpu	platform_dma_sync_single_for_cpu
 -#define dma_sync_sg_for_cpu	platform_dma_sync_sg_for_cpu
-+#ifndef CONFIG_XEN
-+
 +#define dma_alloc_coherent      platform_dma_alloc_coherent
 +#define dma_alloc_noncoherent   platform_dma_alloc_coherent     /* coherent mem. is cheap */
 +#define dma_free_coherent       platform_dma_free_coherent
@@ -78488,7 +76760,6 @@
 +#define dma_sync_sg_for_device  platform_dma_sync_sg_for_device
 +#define dma_mapping_error       platform_dma_mapping_error
 +
-+
 +#else /* CONFIG_XEN */
 +/* Needed for arch/i386/kernel/swiotlb.c and arch/i386/kernel/pci-dma-xen.c */
 +#include <asm/hypervisor.h>
@@ -78537,7 +76808,7 @@
  
  #define dma_map_page(dev, pg, off, size, dir)				\
  	dma_map_single(dev, page_address(pg) + (off), (size), (dir))
-@@ -36,7 +85,9 @@
+@@ -36,7 +83,9 @@
  #define dma_sync_single_range_for_device(dev, dma_handle, offset, size, dir)	\
  	dma_sync_single_for_device(dev, dma_handle, size, dir)
  
@@ -78547,7 +76818,7 @@
  
  static inline int
  dma_set_mask (struct device *dev, u64 mask)
-@@ -61,4 +112,29 @@
+@@ -61,4 +110,30 @@
  
  #define dma_is_consistent(dma_handle)	(1)	/* all we do is coherent memory... */
  
@@ -78575,17 +76846,18 @@
 +	return (((((unsigned long)p & ~PAGE_MASK) + size) > PAGE_SIZE) &&
 +	        !test_bit(__pa(p) >> PAGE_SHIFT, contiguous_bitmap));
 +}
++#endif
 +
  #endif /* _ASM_IA64_DMA_MAPPING_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-ia64/fixmap.h	2006-11-19 14:27:04.000000000 +0100
 @@ -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.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
+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
++++ linux-2.6.18-xen/include/asm-ia64/gcc_intrin.h	2006-11-19 14:27:04.000000000 +0100
 @@ -26,7 +26,7 @@
  
  register unsigned long ia64_r13 asm ("r13") __attribute_used__;
@@ -78775,9 +77047,9 @@
 +#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.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
+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
++++ linux-2.6.18-xen/include/asm-ia64/hw_irq.h	2006-11-19 14:27:05.000000000 +0100
 @@ -15,7 +15,11 @@
  #include <asm/ptrace.h>
  #include <asm/smp.h>
@@ -78803,9 +77075,9 @@
  	platform_send_ipi(smp_processor_id(), vector, IA64_IPI_DM_INT, 0);
  }
  
-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
+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-11-19 14:27:05.000000000 +0100
 @@ -0,0 +1,423 @@
 +/******************************************************************************
 + * hypercall.h
@@ -78842,13 +77114,12 @@
 +#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.
 + */
@@ -78967,117 +77238,157 @@
 +	(type)__res;                                            \
 +})
 +
-+
 +static inline int
-+xencomm_arch_hypercall_sched_op(int cmd, struct xencomm_handle *arg)
++HYPERVISOR_sched_op_compat(
++    int cmd, unsigned long arg)
 +{
-+	return _hypercall2(int, sched_op, cmd, arg);
++	return _hypercall2(int, sched_op_compat, cmd, arg);
 +}
 +
-+static inline long
-+HYPERVISOR_set_timer_op(u64 timeout)
++static inline int
++HYPERVISOR_sched_op(
++	int cmd, void *arg)
 +{
-+	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);
++	return _hypercall2(int, sched_op, cmd, arg);
 +}
 +
-+static inline int
-+xencomm_arch_hypercall_dom0_op(struct xencomm_handle *op)
++static inline long
++HYPERVISOR_set_timer_op(
++    u64 timeout)
 +{
-+	return _hypercall1(int, dom0_op, op);
++    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
-+xencomm_arch_hypercall_sysctl(struct xencomm_handle *op)
++HYPERVISOR_dom0_op(
++    dom0_op_t *dom0_op)
 +{
-+	return _hypercall1(int, sysctl, op);
++    dom0_op->interface_version = DOM0_INTERFACE_VERSION;
++    return _hypercall1(int, dom0_op, dom0_op);
 +}
 +
 +static inline int
-+xencomm_arch_hypercall_domctl(struct xencomm_handle *op)
++HYPERVISOR_multicall(
++    void *call_list, int nr_calls)
 +{
-+	return _hypercall1(int, domctl, op);
++    return _hypercall2(int, multicall, call_list, nr_calls);
 +}
 +
++//XXX xen/ia64 copy_from_guest() is broken.
++//    This is a temporal work around until it is fixed.
 +static inline int
-+xencomm_arch_hypercall_multicall(struct xencomm_handle *call_list,
-+				 int nr_calls)
++____HYPERVISOR_memory_op(
++    unsigned int cmd, void *arg)
 +{
-+	return _hypercall2(int, multicall, call_list, nr_calls);
++    return _hypercall2(int, memory_op, cmd, arg);
 +}
 +
++#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
-+xencomm_arch_hypercall_memory_op(unsigned int cmd, struct xencomm_handle *arg)
++HYPERVISOR_memory_op(
++    unsigned int cmd, void *arg)
 +{
-+	return _hypercall2(int, memory_op, cmd, arg);
++    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 */
 +}
 +
 +static inline int
-+xencomm_arch_hypercall_event_channel_op(int cmd, struct xencomm_handle *arg)
++HYPERVISOR_event_channel_op(
++    int cmd, void *arg)
 +{
-+	return _hypercall2(int, event_channel_op, cmd, 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;
 +}
 +
 +static inline int
-+xencomm_arch_hypercall_acm_op(unsigned int cmd, struct xencomm_handle *arg)
++HYPERVISOR_acm_op(
++	unsigned int cmd, void *arg)
 +{
-+	return _hypercall2(int, acm_op, cmd, arg);
++    return _hypercall2(int, acm_op, cmd, arg);
 +}
 +
 +static inline int
-+xencomm_arch_hypercall_xen_version(int cmd, struct xencomm_handle *arg)
++HYPERVISOR_xen_version(
++    int cmd, void *arg)
 +{
-+	return _hypercall2(int, xen_version, cmd, arg);
++    return _hypercall2(int, xen_version, cmd, arg);
 +}
 +
 +static inline int
-+xencomm_arch_hypercall_console_io(int cmd, int count,
-+                                  struct xencomm_handle *str)
++HYPERVISOR_console_io(
++    int cmd, int count, char *str)
 +{
-+	return _hypercall3(int, console_io, cmd, count, str);
++    return _hypercall3(int, console_io, cmd, count, str);
 +}
 +
 +static inline int
-+xencomm_arch_hypercall_physdev_op(int cmd, struct xencomm_handle *arg)
++HYPERVISOR_physdev_op(
++    int cmd, void *arg)
 +{
-+	return _hypercall2(int, physdev_op, cmd, arg);
++    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;
 +}
 +
++//XXX __HYPERVISOR_grant_table_op is used for this hypercall constant.
 +static inline int
-+xencomm_arch_hypercall_grant_table_op(unsigned int cmd,
-+                                      struct xencomm_handle *uop,
-+                                      unsigned int count)
++____HYPERVISOR_grant_table_op(
++    unsigned int cmd, void *uop, unsigned int count,
++    unsigned long pa1, unsigned long pa2)
 +{
-+	return _hypercall3(int, grant_table_op, cmd, uop, count);
++    return _hypercall5(int, grant_table_op, cmd, uop, count, pa1, pa2);
 +}
 +
 +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
-+xencomm_arch_hypercall_callback_op(int cmd, struct xencomm_handle *arg)
++HYPERVISOR_vcpu_op(
++	int cmd, int vcpuid, void *extra_args)
 +{
-+	return _hypercall2(int, callback_op, cmd, arg);
++    return _hypercall3(int, vcpu_op, cmd, vcpuid, extra_args);
 +}
 +
++extern int HYPERVISOR_suspend(unsigned long srec);
++
 +static inline unsigned long
-+xencomm_arch_hypercall_hvm_op(int cmd, void *arg)
++HYPERVISOR_hvm_op(
++	int cmd, void *arg)
 +{
 +	return _hypercall2(unsigned long, hvm_op, cmd, arg);
 +}
 +
 +static inline int
-+HYPERVISOR_physdev_op(int cmd, void *arg)
++HYPERVISOR_callback_op(
++	int cmd, void *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);
-+	}
++	return _hypercall2(int, callback_op, cmd, arg);
 +}
 +
 +extern fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs);
@@ -79187,53 +77498,14 @@
 +	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.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 @@
+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-11-19 14:27:05.000000000 +0100
+@@ -0,0 +1,218 @@
 +/******************************************************************************
 + * hypervisor.h
 + * 
@@ -79310,6 +77582,9 @@
 +{
 +	int rc = HYPERVISOR_sched_op(SCHEDOP_yield, NULL);
 +
++	if (rc == -ENOSYS)
++		rc = HYPERVISOR_sched_op_compat(SCHEDOP_yield, 0);
++
 +	return rc;
 +}
 +
@@ -79319,6 +77594,9 @@
 +{
 +	int rc = HYPERVISOR_sched_op(SCHEDOP_block, NULL);
 +
++	if (rc == -ENOSYS)
++		rc = HYPERVISOR_sched_op_compat(SCHEDOP_block, 0);
++
 +	return rc;
 +}
 +
@@ -79332,6 +77610,9 @@
 +
 +	int rc = HYPERVISOR_sched_op(SCHEDOP_shutdown, &sched_shutdown);
 +
++	if (rc == -ENOSYS)
++		rc = HYPERVISOR_sched_op_compat(SCHEDOP_shutdown, reason);
++
 +	return rc;
 +}
 +
@@ -79348,6 +77629,8 @@
 +
 +	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;
 +}
@@ -79364,7 +77647,6 @@
 +			   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
 +
@@ -79442,9 +77724,9 @@
 +#endif
 +
 +#endif /* __HYPERVISOR_H__ */
-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
+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
++++ linux-2.6.18-xen/include/asm-ia64/intel_intrin.h	2006-11-19 14:27:05.000000000 +0100
 @@ -16,8 +16,10 @@
  		 	 * intrinsic
  		 	 */
@@ -79568,9 +77850,9 @@
  #define __builtin_trap()	__break(0);
  
  #endif /* _ASM_IA64_INTEL_INTRIN_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-ia64/io.h	2006-11-19 14:27:05.000000000 +0100
 @@ -66,9 +66,11 @@
  #define PIO_RESERVED		__IA64_UNCACHED_OFFSET
  #define HAVE_ARCH_PIO_SIZE
@@ -79625,9 +77907,9 @@
  
  # endif /* KERNEL */
  
-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
+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
++++ linux-2.6.18-xen/include/asm-ia64/iosapic.h	2006-11-19 14:27:05.000000000 +0100
 @@ -53,6 +53,7 @@
  
  #define NR_IOSAPICS			256
@@ -79644,9 +77926,9 @@
  
  static inline void iosapic_eoi(char __iomem *iosapic, u32 vector)
  {
-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
+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
++++ linux-2.6.18-xen/include/asm-ia64/irq.h	2006-11-19 14:27:05.000000000 +0100
 @@ -11,8 +11,39 @@
   * 02/29/00     D.Mosberger	moved most things into hw_irq.h
   */
@@ -79687,9 +77969,9 @@
  
  static __inline__ int
  irq_canonicalize (int irq)
-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
+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
++++ linux-2.6.18-xen/include/asm-ia64/machvec_dig.h	2006-11-19 14:27:05.000000000 +0100
 @@ -13,4 +13,19 @@
  #define platform_name		"dig"
  #define platform_setup		dig_setup
@@ -79710,10 +77992,10 @@
 +#endif
 +
  #endif /* _ASM_IA64_MACHVEC_DIG_h */
-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 @@
+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-11-19 14:27:05.000000000 +0100
+@@ -0,0 +1,92 @@
 +#ifndef _ASM_IA64_MADDR_H
 +#define _ASM_IA64_MADDR_H
 +
@@ -79726,26 +78008,11 @@
 +
 +#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
@@ -79821,9 +78088,9 @@
 +typedef unsigned long maddr_t;	// to compile netback, netfront
 +
 +#endif /* _ASM_IA64_MADDR_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-ia64/meminit.h	2006-11-19 14:27:05.000000000 +0100
 @@ -16,10 +16,15 @@
   * 	- command line string
   * 	- kernel code & data
@@ -79840,9 +78107,9 @@
  
  struct rsvd_region {
  	unsigned long start;	/* virtual address of beginning of element */
-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
+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
++++ linux-2.6.18-xen/include/asm-ia64/page.h	2006-11-19 14:27:05.000000000 +0100
 @@ -126,7 +126,9 @@
  # define pfn_valid(pfn)		(((pfn) >= min_low_pfn) && ((pfn) < max_low_pfn) && ia64_pfn_valid(pfn))
  #endif
@@ -79857,6 +78124,7 @@
  					 (((current->personality & READ_IMPLIES_EXEC) != 0)	\
  					  ? VM_EXEC : 0))
  
+-# endif /* __KERNEL__ */
 +#ifndef __ASSEMBLY__
 +#ifdef CONFIG_XEN
 +
@@ -79905,11 +78173,11 @@
 +
 +#endif /* CONFIG_XEN */
 +#endif /* __ASSEMBLY__ */
- # endif /* __KERNEL__ */
++#endif /* __KERNEL__ */
  #endif /* _ASM_IA64_PAGE_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-ia64/pal.h	2006-11-19 14:27:05.000000000 +0100
 @@ -82,6 +82,7 @@
  #ifndef __ASSEMBLY__
  
@@ -79918,9 +78186,9 @@
  #include <asm/fpu.h>
  
  /*
-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
+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
++++ linux-2.6.18-xen/include/asm-ia64/pgalloc.h	2006-11-19 14:27:05.000000000 +0100
 @@ -125,7 +125,11 @@
  static inline void
  pmd_populate(struct mm_struct *mm, pmd_t * pmd_entry, struct page *pte)
@@ -79933,9 +78201,9 @@
  }
  
  static inline void
-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
+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
++++ linux-2.6.18-xen/include/asm-ia64/privop.h	2006-11-19 14:27:05.000000000 +0100
 @@ -0,0 +1,59 @@
 +#ifndef _ASM_IA64_PRIVOP_H
 +#define _ASM_IA64_PRIVOP_H
@@ -79996,9 +78264,9 @@
 +#endif /* !__ASSEMBLY */
 +
 +#endif /* _ASM_IA64_PRIVOP_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-ia64/processor.h	2006-11-19 14:27:05.000000000 +0100
 @@ -18,6 +18,7 @@
  #include <asm/kregs.h>
  #include <asm/ptrace.h>
@@ -80007,9 +78275,9 @@
  
  #define IA64_NUM_DBG_REGS	8
  /*
-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
+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
++++ linux-2.6.18-xen/include/asm-ia64/synch_bitops.h	2006-11-19 14:27:05.000000000 +0100
 @@ -0,0 +1,61 @@
 +#ifndef __XEN_SYNCH_BITOPS_H__
 +#define __XEN_SYNCH_BITOPS_H__
@@ -80072,9 +78340,9 @@
 +#define synch_cmpxchg_subword synch_cmpxchg
 +
 +#endif /* __XEN_SYNCH_BITOPS_H__ */
-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
+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
++++ linux-2.6.18-xen/include/asm-ia64/system.h	2006-11-19 14:27:05.000000000 +0100
 @@ -123,7 +123,7 @@
  #define __local_irq_save(x)			\
  do {						\
@@ -80093,10 +78361,10 @@
  
  #define irqs_disabled()				\
  ({						\
-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 @@
+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-11-19 14:27:05.000000000 +0100
+@@ -0,0 +1,304 @@
 +#ifndef _ASM_IA64_XEN_PRIVOP_H
 +#define _ASM_IA64_XEN_PRIVOP_H
 +
@@ -80113,9 +78381,12 @@
 +
 +#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)
@@ -80398,148 +78669,9 @@
 +#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.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
+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
++++ linux-2.6.18-xen/include/asm-um/page.h	2006-11-19 14:27:09.000000000 +0100
 @@ -114,7 +114,7 @@
  extern struct page *arch_validate(struct page *page, gfp_t mask, int order);
  #define HAVE_ARCH_VALIDATE
@@ -80549,9 +78681,9 @@
  #define HAVE_ARCH_FREE_PAGE
  
  #include <asm-generic/memory_model.h>
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/apic.h	2006-11-19 14:27:10.000000000 +0100
 @@ -98,11 +98,13 @@
  extern int disable_timer_pin_1;
  
@@ -80566,27 +78698,9 @@
  
  #endif /* CONFIG_X86_LOCAL_APIC */
  
-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);
- }
- 
-+#ifndef CONFIG_XEN_UNPRIVILEGED_GUEST
- static inline void __send_IPI_shortcut(unsigned int shortcut, int vector, unsigned int dest)
- {
- 	/*
-@@ -113,5 +114,6 @@
- 	}
- 	local_irq_restore(flags);
- }
-+#endif /* CONFIG_XEN_UNPRIVILEGED_GUEST */
- 
- #endif /* __ASM_IPI_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/arch_hooks.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,27 @@
 +#ifndef _ASM_ARCH_HOOKS_H
 +#define _ASM_ARCH_HOOKS_H
@@ -80615,9 +78729,9 @@
 +extern void mca_nmi_hook(void);
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/bootsetup.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,42 @@
 +
 +#ifndef _X86_64_BOOTSETUP_H
@@ -80661,9 +78775,9 @@
 +#define RAMDISK_LOAD_FLAG		0x4000	
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/desc.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,263 @@
 +/* Written 2000 by Andi Kleen */ 
 +#ifndef __ARCH_DESC_H
@@ -80928,9 +79042,9 @@
 +#endif /* !__ASSEMBLY__ */
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/dma-mapping.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,208 @@
 +#ifndef _X8664_DMA_MAPPING_H
 +#define _X8664_DMA_MAPPING_H 1
@@ -81140,9 +79254,9 @@
 +#endif /* _X8664_DMA_MAPPING_H */
 +
 +#include <asm-i386/mach-xen/asm/dma-mapping.h>
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/dmi.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,29 @@
 +#ifndef _ASM_DMI_H
 +#define _ASM_DMI_H 1
@@ -81173,9 +79287,9 @@
 +#define dmi_iounmap bt_iounmap
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/e820.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,64 @@
 +/*
 + * structures and definitions for the int 15, ax=e820 memory map
@@ -81241,9 +79355,9 @@
 +#endif/*!__ASSEMBLY__*/
 +
 +#endif/*__E820_HEADER*/
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/fixmap.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,113 @@
 +/*
 + * fixmap.h: compile-time virtual memory allocation
@@ -81358,9 +79472,9 @@
 +}
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/floppy.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,206 @@
 +/*
 + * Architecture specific parts of the Floppy driver
@@ -81568,10 +79682,10 @@
 +#define EXTRA_FLOPPY_PARAMS
 +
 +#endif /* __ASM_XEN_X86_64_FLOPPY_H */
-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 @@
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/hw_irq.h	2006-11-19 14:27:11.000000000 +0100
+@@ -0,0 +1,137 @@
 +#ifndef _ASM_HW_IRQ_H
 +#define _ASM_HW_IRQ_H
 +
@@ -81705,12 +79819,13 @@
 +
 +#define platform_legacy_irq(irq)	((irq) < 16)
 +
++
 +#endif
 +
 +#endif /* _ASM_HW_IRQ_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/hypercall.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,389 @@
 +/******************************************************************************
 + * hypercall.h
@@ -82101,15 +80216,15 @@
 +}
 +
 +#endif /* __HYPERCALL_H__ */
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/hypervisor.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,2 @@
 +
 +#include <asm-i386/mach-xen/asm/hypervisor.h>
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/io.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,327 @@
 +#ifndef _ASM_IO_H
 +#define _ASM_IO_H
@@ -82438,78 +80553,9 @@
 +#define ARCH_HAS_DEV_MEM
 +
 +#endif
-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 @@
-+/*
-+ * include/asm-x86_64/irqflags.h
-+ *
-+ * IRQ flags handling
-+ *
-+ * This file gets included from lowlevel asm headers too, to provide
-+ * wrapped versions of the local_irq_*() APIs, based on the
-+ * raw_local_irq_*() functions from the lowlevel headers.
-+ */
-+#ifndef _ASM_IRQFLAGS_H
-+#define _ASM_IRQFLAGS_H
-+
-+#ifndef __ASSEMBLY__
-+/*
-+ * Interrupt control:
-+ */
-+
-+unsigned long __raw_local_save_flags(void);
-+#define raw_local_save_flags(flags) \
-+		do { (flags) = __raw_local_save_flags(); } while (0)
-+
-+void raw_local_irq_restore(unsigned long flags);
-+void raw_local_irq_disable(void);
-+void raw_local_irq_enable(void);
-+
-+static inline int raw_irqs_disabled_flags(unsigned long flags)
-+{
-+	return flags != 0;
-+}
-+
-+/*
-+ * For spinlocks, etc.:
-+ */
-+
-+unsigned long __raw_local_irq_save(void);
-+
-+#define raw_local_irq_save(flags) \
-+		do { (flags) = __raw_local_irq_save(); } while (0)
-+
-+int raw_irqs_disabled(void);
-+
-+/*
-+ * Used in the idle loop; sti takes one instruction cycle
-+ * to complete:
-+ */
-+void raw_safe_halt(void);
-+
-+
-+/*
-+ * Used when interrupts are already enabled or to
-+ * shutdown the processor:
-+ */
-+void halt(void);
-+
-+#else /* __ASSEMBLY__: */
-+# ifdef CONFIG_TRACE_IRQFLAGS
-+#  define TRACE_IRQS_ON		call trace_hardirqs_on_thunk
-+#  define TRACE_IRQS_OFF	call trace_hardirqs_off_thunk
-+# else
-+#  define TRACE_IRQS_ON
-+#  define TRACE_IRQS_OFF
-+# endif
-+#endif
-+
-+#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/irq.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,38 @@
 +#ifndef _ASM_IRQ_H
 +#define _ASM_IRQ_H
@@ -82549,9 +80595,9 @@
 +#define __ARCH_HAS_DO_SOFTIRQ 1
 +
 +#endif /* _ASM_IRQ_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/maddr.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,139 @@
 +#ifndef _X86_64_MADDR_H
 +#define _X86_64_MADDR_H
@@ -82692,9 +80738,9 @@
 +
 +#endif /* _X86_64_MADDR_H */
 +
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/mmu_context.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,135 @@
 +#ifndef __X86_64_MMU_CONTEXT_H
 +#define __X86_64_MMU_CONTEXT_H
@@ -82831,9 +80877,9 @@
 +}
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/mmu.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,38 @@
 +#ifndef __x86_64_MMU_H
 +#define __x86_64_MMU_H
@@ -82873,9 +80919,9 @@
 +#endif
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/msr.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,399 @@
 +#ifndef X86_64_MSR_H
 +#define X86_64_MSR_H 1
@@ -83276,9 +81322,9 @@
 +#define MSR_P4_U2L_ESCR1 		0x3b1
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/nmi.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,93 @@
 +/*
 + *  linux/include/asm-i386/nmi.h
@@ -83373,9 +81419,9 @@
 +#define NMI_INVALID	3
 +
 +#endif /* ASM_NMI_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/page.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,208 @@
 +#ifndef _X86_64_PAGE_H
 +#define _X86_64_PAGE_H
@@ -83585,9 +81631,9 @@
 +#endif /* __KERNEL__ */
 +
 +#endif /* _X86_64_PAGE_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/param.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,22 @@
 +#ifndef _ASMx86_64_PARAM_H
 +#define _ASMx86_64_PARAM_H
@@ -83611,9 +81657,9 @@
 +#define MAXHOSTNAMELEN	64	/* max length of hostname */
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/pci.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,173 @@
 +#ifndef __x8664_PCI_H
 +#define __x8664_PCI_H
@@ -83788,9 +81834,9 @@
 +#define pcibios_scan_all_fns(a, b)	1
 +
 +#endif /* __x8664_PCI_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/pgalloc.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,226 @@
 +#ifndef _X86_64_PGALLOC_H
 +#define _X86_64_PGALLOC_H
@@ -84018,9 +82064,9 @@
 +#define __pud_free_tlb(tlb,x)   pud_free((x))
 +
 +#endif /* _X86_64_PGALLOC_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/pgtable.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,558 @@
 +#ifndef _X86_64_PGTABLE_H
 +#define _X86_64_PGTABLE_H
@@ -84580,9 +82626,9 @@
 +#include <asm-generic/pgtable.h>
 +
 +#endif /* _X86_64_PGTABLE_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/processor.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,504 @@
 +/*
 + * include/asm-x86_64/processor.h
@@ -84660,6 +82706,7 @@
 +	__u8	phys_proc_id;	/* Physical Processor id. */
 +	__u8	cpu_core_id;	/* Core id. */
 +#endif
++
 +} ____cacheline_aligned;
 +
 +#define X86_VENDOR_INTEL 0
@@ -84828,11 +82875,10 @@
 +} __attribute__((packed)) ____cacheline_aligned;
 +
 +DECLARE_PER_CPU(struct tss_struct,init_tss);
++/* Save the original ist values for checking stack pointers during debugging */
 +#endif
 +
-+
 +extern struct cpuinfo_x86 boot_cpu_data;
-+/* Save the original ist values for checking stack pointers during debugging */
 +struct orig_ist {
 +	unsigned long ist[7];
 +};
@@ -85088,9 +83134,9 @@
 +#define HAVE_ARCH_PICK_MMAP_LAYOUT 1
 +
 +#endif /* __ASM_X86_64_PROCESSOR_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/ptrace.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,125 @@
 +#ifndef _X86_64_PTRACE_H
 +#define _X86_64_PTRACE_H
@@ -85217,9 +83263,9 @@
 +#endif
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/smp.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,150 @@
 +#ifndef __ASM_SMP_H
 +#define __ASM_SMP_H
@@ -85371,16 +83417,16 @@
 +
 +#endif
 +
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/synch_bitops.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,2 @@
 +
 +#include <asm-i386/mach-xen/asm/synch_bitops.h>
-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 @@
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/system.h	2006-11-19 14:27:11.000000000 +0100
+@@ -0,0 +1,346 @@
 +#ifndef __ASM_SYSTEM_H
 +#define __ASM_SYSTEM_H
 +
@@ -85420,7 +83466,7 @@
 +		     "thread_return:\n\t"					    \
 +		     "movq %%gs:%P[pda_pcurrent],%%rsi\n\t"			  \
 +		     "movq %P[thread_info](%%rsi),%%r8\n\t"			  \
-+		     LOCK_PREFIX "btr  %[tif_fork],%P[ti_flags](%%r8)\n\t"	  \
++		     LOCK_PREFIX "btr  %[tif_fork],%P[ti_flags](%%r8)\n\t"		  \
 +		     "movq %%rax,%%rdi\n\t" 					  \
 +		     "jc   ret_from_fork\n\t"					  \
 +		     RESTORE_CONTEXT						    \
@@ -85634,20 +83680,102 @@
 +
 +#define warn_if_not_ulong(x) do { unsigned long foo; (void) (&(x) == &foo); } while (0)
 +
++
++/* 
++ * The use of 'barrier' in the following reflects their use as local-lock
++ * operations. Reentrancy must be prevented (e.g., __cli()) /before/ following
++ * critical operations are executed. All critical operations must complete
++ * /before/ reentrancy is permitted (e.g., __sti()). Alpha architecture also
++ * includes these barriers, for example.
++ */
++
++#define __cli()								\
++do {									\
++	vcpu_info_t *_vcpu;						\
++	preempt_disable();						\
++	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];		\
++	_vcpu->evtchn_upcall_mask = 1;					\
++	preempt_enable_no_resched();					\
++	barrier();							\
++} while (0)
++
++#define __sti()								\
++do {									\
++	vcpu_info_t *_vcpu;						\
++	barrier();							\
++	preempt_disable();						\
++	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];		\
++	_vcpu->evtchn_upcall_mask = 0;					\
++	barrier(); /* unmask then check (avoid races) */		\
++	if ( unlikely(_vcpu->evtchn_upcall_pending) )			\
++		force_evtchn_callback();				\
++	preempt_enable();						\
++} while (0)
++
++#define __save_flags(x)							\
++do {									\
++	vcpu_info_t *_vcpu;						\
++	preempt_disable();						\
++	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];		\
++	(x) = _vcpu->evtchn_upcall_mask;				\
++	preempt_enable();						\
++} while (0)
++
++#define __restore_flags(x)						\
++do {									\
++	vcpu_info_t *_vcpu;						\
++	barrier();							\
++	preempt_disable();						\
++	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];		\
++	if ((_vcpu->evtchn_upcall_mask = (x)) == 0) {			\
++		barrier(); /* unmask then check (avoid races) */	\
++		if ( unlikely(_vcpu->evtchn_upcall_pending) )		\
++			force_evtchn_callback();			\
++		preempt_enable();					\
++	} else								\
++		preempt_enable_no_resched();				\
++} while (0)
++
++#define __save_and_cli(x)						\
++do {									\
++	vcpu_info_t *_vcpu;						\
++	preempt_disable();						\
++	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];		\
++	(x) = _vcpu->evtchn_upcall_mask;				\
++	_vcpu->evtchn_upcall_mask = 1;					\
++	preempt_enable_no_resched();					\
++	barrier();							\
++} while (0)
++
++#define local_irq_save(x)	__save_and_cli(x)
++#define local_irq_restore(x)	__restore_flags(x)
++#define local_save_flags(x)	__save_flags(x)
++#define local_irq_disable()	__cli()
++#define local_irq_enable()	__sti()
++
++/* Cannot use preempt_enable() here as we would recurse in preempt_sched(). */
++#define irqs_disabled()							\
++({	int ___x;							\
++	vcpu_info_t *_vcpu;						\
++	preempt_disable();						\
++	_vcpu = &HYPERVISOR_shared_info->vcpu_info[__vcpu_id];		\
++	___x = (_vcpu->evtchn_upcall_mask != 0);			\
++	preempt_enable_no_resched();					\
++	___x; })
++
 +void safe_halt(void);
 +void halt(void);
 +
-+#include <linux/irqflags.h>
-+
 +void cpu_idle_wait(void);
 +
 +extern unsigned long arch_align_stack(unsigned long sp);
++
 +extern void free_init_pages(char *what, unsigned long begin, unsigned long end);
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/timer.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,67 @@
 +#ifndef _ASMi386_TIMER_H
 +#define _ASMi386_TIMER_H
@@ -85716,9 +83844,9 @@
 +extern struct init_timer_opts timer_pmtmr_init;
 +#endif
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/tlbflush.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,103 @@
 +#ifndef _X8664_TLBFLUSH_H
 +#define _X8664_TLBFLUSH_H
@@ -85823,9 +83951,9 @@
 +}
 +
 +#endif /* _X8664_TLBFLUSH_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/vga.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,20 @@
 +/*
 + *	Access to VGA videoram
@@ -85847,9 +83975,9 @@
 +#define vga_writeb(x,y) (*(y) = (x))
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/xor.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,328 @@
 +/*
 + * x86-64 changes / gcc fixes from Andi Kleen. 
@@ -86179,9 +84307,9 @@
 +   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.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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/irq_vectors.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,123 @@
 +/*
 + * This file should contain #defines for all of the interrupt vector
@@ -86306,9 +84434,9 @@
 +#define irq_to_dynirq(_x)	((_x) - DYNIRQ_BASE)
 +
 +#endif /* _ASM_IRQ_VECTORS_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/mach_time.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,111 @@
 +/*
 + *  include/asm-i386/mach-default/mach_time.h
@@ -86421,9 +84549,9 @@
 +}
 +
 +#endif /* !_MACH_TIME_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/mach_timer.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,48 @@
 +/*
 + *  include/asm-i386/mach-default/mach_timer.h
@@ -86473,9 +84601,9 @@
 +}
 +
 +#endif /* !_MACH_TIMER_H */
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/setup_arch_post.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,58 @@
 +/**
 + * machine_specific_* - Hooks for machine specific setup.
@@ -86535,18 +84663,18 @@
 +	}
 +#endif
 +}
-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
+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
++++ linux-2.6.18-xen/include/asm-x86_64/mach-xen/setup_arch_pre.h	2006-11-19 14:27:11.000000000 +0100
 @@ -0,0 +1,5 @@
 +/* Hook to call BIOS initialisation function */
 +
 +#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.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
+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
++++ linux-2.6.18-xen/include/linux/elfnote.h	2006-11-19 14:27:14.000000000 +0100
 @@ -0,0 +1,90 @@
 +#ifndef _LINUX_ELFNOTE_H
 +#define _LINUX_ELFNOTE_H
@@ -86638,9 +84766,9 @@
 +#endif	/* __ASSEMBLER__ */
 +
 +#endif /* _LINUX_ELFNOTE_H */
-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
+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
++++ linux-2.6.18-xen/include/linux/gfp.h	2006-11-19 14:27:14.000000000 +0100
 @@ -99,7 +99,11 @@
   */
  
@@ -86654,9 +84782,9 @@
  #endif
  
  extern struct page *
-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
+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
++++ linux-2.6.18-xen/include/linux/highmem.h	2006-11-19 14:27:14.000000000 +0100
 @@ -24,10 +24,16 @@
  
  /* declarations for linux/mm/highmem.c */
@@ -86674,9 +84802,9 @@
  
  static inline void *kmap(struct page *page)
  {
-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
+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
++++ linux-2.6.18-xen/include/linux/interrupt.h	2006-11-19 14:27:14.000000000 +0100
 @@ -166,6 +166,12 @@
  
  #endif /* CONFIG_GENERIC_HARDIRQS */
@@ -86690,9 +84818,9 @@
  #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.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
+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
++++ linux-2.6.18-xen/include/linux/mm.h	2006-11-19 14:27:14.000000000 +0100
 @@ -164,6 +164,9 @@
  #define VM_NONLINEAR	0x00800000	/* Is non-linear (remap_file_pages) */
  #define VM_MAPPED_COPY	0x01000000	/* T if mapped copy of data (nommu mmap) */
@@ -86717,9 +84845,9 @@
  #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.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
+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
++++ linux-2.6.18-xen/include/linux/oprofile.h	2006-11-19 14:27:14.000000000 +0100
 @@ -16,6 +16,10 @@
  #include <linux/types.h>
  #include <linux/spinlock.h>
@@ -86752,23 +84880,9 @@
  
  /**
   * 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.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
+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
++++ linux-2.6.18-xen/include/linux/skbuff.h	2006-11-19 14:27:15.000000000 +0100
 @@ -203,6 +203,8 @@
   *	@local_df: allow local fragmentation
   *	@cloned: Head may be cloned (check refcnt to be sure)
@@ -86820,9 +84934,20 @@
  
  /**
   *	dev_alloc_skb - allocate an skbuff for receiving
-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
+diff -urN -x .hg -x .hgtags linux-2.6.18/include/scsi/scsi_eh.h linux-2.6.18-xen/include/scsi/scsi_eh.h
+--- linux-2.6.18/include/scsi/scsi_eh.h	2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/include/scsi/scsi_eh.h	2006-11-19 14:27:15.000000000 +0100
+@@ -34,6 +34,7 @@
+ }
+ 
+ 
++extern void scsi_eh_wakeup(struct Scsi_Host *shost);
+ extern void scsi_eh_finish_cmd(struct scsi_cmnd *scmd,
+ 			       struct list_head *done_q);
+ extern void scsi_eh_flush_done_q(struct list_head *done_q);
+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-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,57 @@
 +/******************************************************************************
 + * balloon.h
@@ -86881,9 +85006,9 @@
 +#define balloon_unlock(__flags) spin_unlock_irqrestore(&balloon_lock, __flags)
 +
 +#endif /* __ASM_BALLOON_H__ */
-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
+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
++++ linux-2.6.18-xen/include/xen/cpu_hotplug.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,43 @@
 +#ifndef __XEN_CPU_HOTPLUG_H__
 +#define __XEN_CPU_HOTPLUG_H__
@@ -86928,9 +85053,9 @@
 +#endif /* !defined(CONFIG_HOTPLUG_CPU) */
 +
 +#endif /* __XEN_CPU_HOTPLUG_H__ */
-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
+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
++++ linux-2.6.18-xen/include/xen/driver_util.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,15 @@
 +
 +#ifndef __ASM_XEN_DRIVER_UTIL_H__
@@ -86947,9 +85072,9 @@
 +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.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
+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
++++ linux-2.6.18-xen/include/xen/evtchn.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,113 @@
 +/******************************************************************************
 + * evtchn.h
@@ -87064,9 +85189,9 @@
 +extern void notify_remote_via_irq(int irq);
 +
 +#endif /* __ASM_EVTCHN_H__ */
-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
+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
++++ linux-2.6.18-xen/include/xen/features.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,20 @@
 +/******************************************************************************
 + * features.h
@@ -87088,9 +85213,9 @@
 +#define xen_feature(flag)	(xen_features[flag])
 +
 +#endif /* __ASM_XEN_FEATURES_H__ */
-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
+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
++++ linux-2.6.18-xen/include/xen/foreign_page.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,30 @@
 +/******************************************************************************
 + * foreign_page.h
@@ -87122,9 +85247,9 @@
 +	( (void (*) (struct page *)) (page)->mapping )
 +
 +#endif /* __ASM_XEN_FOREIGN_PAGE_H__ */
-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
+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
++++ linux-2.6.18-xen/include/xen/gnttab.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,150 @@
 +/******************************************************************************
 + * gnttab.h
@@ -87276,9 +85401,9 @@
 +}
 +
 +#endif /* __ASM_GNTTAB_H__ */
-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
+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
++++ linux-2.6.18-xen/include/xen/hvm.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,24 @@
 +/* Simple wrappers around HVM functions */
 +#ifndef XEN_HVM_H__
@@ -87304,9 +85429,9 @@
 +}
 +
 +#endif /* XEN_HVM_H__ */
-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
+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
++++ linux-2.6.18-xen/include/xen/hypervisor_sysfs.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,32 @@
 +/*
 + *  copyright (c) 2006 IBM Corporation
@@ -87340,9 +85465,9 @@
 +};
 +
 +#endif /* _HYP_SYSFS_H_ */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/acm.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,187 @@
 +/*
 + * acm.h: Xen access control module interface defintions
@@ -87531,9 +85656,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/acm_ops.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,102 @@
 +/*
 + * acm_ops.h: Xen access control module hypervisor commands
@@ -87637,10 +85762,10 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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 @@
+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-11-19 14:27:15.000000000 +0100
+@@ -0,0 +1,448 @@
 +/******************************************************************************
 + * arch-ia64/hypervisor-if.h
 + * 
@@ -87691,6 +85816,18 @@
 +
 +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)
@@ -87967,33 +86104,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
-+/*  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
-+
++#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.
 +// flags for page assignement to pseudo physical address space
 +#define _ASSIGN_readonly                0
 +#define ASSIGN_readonly                 (1UL << _ASSIGN_readonly)
@@ -88026,12 +86163,15 @@
 +
 +#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
 +
@@ -88063,17 +86203,6 @@
 +#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__ */
 +
 +/*
@@ -88085,9 +86214,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/arch-powerpc.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,115 @@
 +/*
 + * This program is free software; you can redistribute it and/or modify
@@ -88204,9 +86333,9 @@
 +#endif
 +
 +#endif
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/arch-x86_32.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,255 @@
 +/******************************************************************************
 + * arch-x86_32.h
@@ -88463,9 +86592,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/arch-x86_64.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,322 @@
 +/******************************************************************************
 + * arch-x86_64.h
@@ -88789,9 +86918,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/callback.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,74 @@
 +/******************************************************************************
 + * callback.h
@@ -88867,9 +86996,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/dom0_ops.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,102 @@
 +/******************************************************************************
 + * dom0_ops.h
@@ -88973,9 +87102,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/domctl.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,392 @@
 +/******************************************************************************
 + * domctl.h
@@ -89369,9 +87498,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/elfnote.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,133 @@
 +/******************************************************************************
 + * elfnote.h
@@ -89506,9 +87635,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/event_channel.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,233 @@
 +/******************************************************************************
 + * event_channel.h
@@ -89743,9 +87872,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/features.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,53 @@
 +/******************************************************************************
 + * features.h
@@ -89800,9 +87929,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/grant_table.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,362 @@
 +/******************************************************************************
 + * grant_table.h
@@ -90166,9 +88295,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/hvm/e820.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,32 @@
 +#ifndef __XEN_PUBLIC_HVM_E820_H__
 +#define __XEN_PUBLIC_HVM_E820_H__
@@ -90202,9 +88331,9 @@
 +#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.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
+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
++++ linux-2.6.18-xen/include/xen/interface/hvm/hvm_info_table.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,22 @@
 +/******************************************************************************
 + * hvm/hvm_info_table.h
@@ -90228,9 +88357,9 @@
 +};
 +
 +#endif /* __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__ */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/hvm/ioreq.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,99 @@
 +/*
 + * ioreq.h: I/O request definitions for device models
@@ -90331,9 +88460,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/hvm/params.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,24 @@
 +#ifndef __XEN_PUBLIC_HVM_PARAMS_H__
 +#define __XEN_PUBLIC_HVM_PARAMS_H__
@@ -90359,9 +88488,9 @@
 +DEFINE_XEN_GUEST_HANDLE(xen_hvm_param_t);
 +
 +#endif /* __XEN_PUBLIC_HVM_PARAMS_H__ */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/hvm/vmx_assist.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,98 @@
 +/*
 + * vmx_assist.h: Context definitions for the VMXASSIST world switch.
@@ -90461,9 +88590,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/io/blkif.h	2006-11-19 14:27:15.000000000 +0100
 @@ -0,0 +1,87 @@
 +/******************************************************************************
 + * blkif.h
@@ -90552,9 +88681,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/io/console.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,33 @@
 +/******************************************************************************
 + * console.h
@@ -90589,9 +88718,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/io/netif.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,166 @@
 +/******************************************************************************
 + * netif.h
@@ -90759,9 +88888,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/io/pciif.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,55 @@
 +/*
 + * PCI Backend/Frontend Common Data Structures & Macros
@@ -90818,9 +88947,9 @@
 +};
 +
 +#endif /* __XEN_PCI_COMMON_H__ */
-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
+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-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,273 @@
 +/******************************************************************************
 + * ring.h
@@ -91095,9 +89224,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/io/tpmif.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,59 @@
 +/******************************************************************************
 + * tpmif.h
@@ -91158,9 +89287,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/io/xenbus.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,45 @@
 +/*****************************************************************************
 + * xenbus.h
@@ -91207,9 +89336,9 @@
 +typedef enum xenbus_state XenbusState;
 +
 +#endif /* _XEN_PUBLIC_IO_XENBUS_H */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/io/xs_wire.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,97 @@
 +/*
 + * Details of the "wire" protocol between Xen Store Daemon and client
@@ -91308,9 +89437,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/memory.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,243 @@
 +/******************************************************************************
 + * memory.h
@@ -91555,9 +89684,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/nmi.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,60 @@
 +/******************************************************************************
 + * nmi.h
@@ -91619,9 +89748,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/physdev.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,149 @@
 +
 +#ifndef __XEN_PUBLIC_PHYSDEV_H__
@@ -91772,9 +89901,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/platform.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,125 @@
 +/******************************************************************************
 + * platform.h
@@ -91901,9 +90030,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/sched.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,103 @@
 +/******************************************************************************
 + * sched.h
@@ -92008,9 +90137,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/sysctl.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,151 @@
 +/******************************************************************************
 + * sysctl.h
@@ -92163,9 +90292,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/trace.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,87 @@
 +/******************************************************************************
 + * include/public/trace.h
@@ -92254,9 +90383,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/vcpu.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,121 @@
 +/******************************************************************************
 + * vcpu.h
@@ -92379,9 +90508,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/version.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,73 @@
 +/******************************************************************************
 + * version.h
@@ -92456,9 +90585,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/xencomm.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,37 @@
 +/*
 + * Copyright (C) 2006 Hollis Blanchard <hollisb at us.ibm.com>, IBM Corporation
@@ -92497,9 +90626,9 @@
 +};
 +
 +#endif /* _XEN_XENCOMM_H_ */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/xen-compat.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,26 @@
 +/******************************************************************************
 + * xen-compat.h
@@ -92527,9 +90656,9 @@
 +#endif
 +
 +#endif /* __XEN_PUBLIC_XEN_COMPAT_H__ */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/xen.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,581 @@
 +/******************************************************************************
 + * xen.h
@@ -93112,9 +91241,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/interface/xenoprof.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,110 @@
 +/******************************************************************************
 + * xenoprof.h
@@ -93226,9 +91355,9 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-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
+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
++++ linux-2.6.18-xen/include/xen/pcifront.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,76 @@
 +/*
 + * PCI Frontend - arch-dependendent declarations
@@ -93306,9 +91435,9 @@
 +#endif /* __KERNEL__ */
 +
 +#endif /* __XEN_ASM_PCIFRONT_H__ */
-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
+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-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,88 @@
 +/******************************************************************************
 + * evtchn.h
@@ -93398,9 +91527,9 @@
 +	_IOC(_IOC_NONE, 'E', 5, 0)
 +
 +#endif /* __LINUX_PUBLIC_EVTCHN_H__ */
-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
+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
++++ linux-2.6.18-xen/include/xen/public/privcmd.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,79 @@
 +/******************************************************************************
 + * privcmd.h
@@ -93481,9 +91610,9 @@
 +	_IOC(_IOC_NONE, 'P', 3, sizeof(privcmd_mmapbatch_t))
 +
 +#endif /* __LINUX_PUBLIC_PRIVCMD_H__ */
-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
+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
++++ linux-2.6.18-xen/include/xen/xenbus.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,306 @@
 +/******************************************************************************
 + * xenbus.h
@@ -93791,9 +91920,9 @@
 +int xenbus_frontend_closed(struct xenbus_device *dev);
 +
 +#endif /* _XEN_XENBUS_H */
-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
+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
++++ linux-2.6.18-xen/include/xen/xencons.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,17 @@
 +#ifndef __ASM_XENCONS_H__
 +#define __ASM_XENCONS_H__
@@ -93812,9 +91941,9 @@
 +int xencons_ring_send(const char *data, unsigned len);
 +
 +#endif /* __ASM_XENCONS_H__ */
-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
+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
++++ linux-2.6.18-xen/include/xen/xen_proc.h	2006-11-19 14:27:16.000000000 +0100
 @@ -0,0 +1,12 @@
 +
 +#ifndef __ASM_XEN_PROC_H__
@@ -93828,9 +91957,9 @@
 +	const char *name);
 +
 +#endif /* __ASM_XEN_PROC_H__ */
-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
+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
++++ linux-2.6.18-xen/kernel/fork.c	2006-11-19 14:27:16.000000000 +0100
 @@ -276,6 +276,9 @@
  		if (retval)
  			goto out;
@@ -93841,20 +91970,9 @@
  	retval = 0;
  out:
  	up_write(&mm->mmap_sem);
-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;
- 	unsigned long flags;
- 
--	WARN_ON(in_interrupt());
- 	if (irq >= NR_IRQS)
- 		return;
- 
-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
+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
++++ linux-2.6.18-xen/kernel/Kconfig.preempt	2006-11-19 14:27:16.000000000 +0100
 @@ -35,6 +35,7 @@
  
  config PREEMPT
@@ -93863,9 +91981,9 @@
  	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.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
+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
++++ linux-2.6.18-xen/lib/Kconfig.debug	2006-11-19 14:27:16.000000000 +0100
 @@ -325,7 +325,7 @@
  
  config UNWIND_INFO
@@ -93875,20 +91993,22 @@
  	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.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 @@
+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-11-19 14:27:16.000000000 +0100
+@@ -52,6 +52,9 @@
  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.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
+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
++++ linux-2.6.18-xen/mm/highmem.c	2006-11-19 14:27:16.000000000 +0100
 @@ -142,6 +142,17 @@
  	return vaddr;
  }
@@ -93907,9 +92027,9 @@
  void fastcall *kmap_high(struct page *page)
  {
  	unsigned long vaddr;
-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
+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-11-19 14:27:16.000000000 +0100
 @@ -116,7 +116,6 @@
  config MEMORY_HOTPLUG
  	bool "Allow for memory hot-add"
@@ -93933,9 +92053,9 @@
  	default "4"
  
  #
-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
+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-11-19 14:27:16.000000000 +0100
 @@ -403,7 +403,8 @@
  	 * and that the resulting page looks ok.
  	 */
@@ -93946,15 +92066,7 @@
  		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 @@
+@@ -1030,6 +1031,26 @@
  			continue;
  		}
  
@@ -93981,7 +92093,7 @@
  		if (!vma || (vma->vm_flags & (VM_IO | VM_PFNMAP))
  				|| !(vm_flags & vma->vm_flags))
  			return i ? : -EFAULT;
-@@ -1369,6 +1391,102 @@
+@@ -1369,6 +1390,102 @@
  }
  EXPORT_SYMBOL(remap_pfn_range);
  
@@ -94084,9 +92196,9 @@
  /*
   * 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.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
+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
++++ linux-2.6.18-xen/mm/mmap.c	2006-11-19 14:27:16.000000000 +0100
 @@ -1963,6 +1963,10 @@
  	unsigned long nr_accounted = 0;
  	unsigned long end;
@@ -94098,9 +92210,9 @@
  	lru_add_drain();
  	flush_cache_mm(mm);
  	tlb = tlb_gather_mmu(mm, 1);
-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
+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-11-19 14:27:16.000000000 +0100
 @@ -443,7 +443,8 @@
  	int i;
  	int reserved = 0;
@@ -94121,9 +92233,9 @@
  
  	if (PageAnon(page))
  		page->mapping = NULL;
-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
+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-11-19 14:27:17.000000000 +0100
 @@ -118,6 +118,12 @@
  #include <linux/err.h>
  #include <linux/ctype.h>
@@ -94194,7 +92306,7 @@
  	/* GSO will handle the following emulations directly. */
  	if (netif_needs_gso(dev, skb))
  		goto gso;
-@@ -1798,6 +1847,19 @@
+@@ -1796,6 +1845,19 @@
  	}
  #endif
  
@@ -94214,7 +92326,7 @@
  	list_for_each_entry_rcu(ptype, &ptype_all, list) {
  		if (!ptype->dev || ptype->dev == skb->dev) {
  			if (pt_prev) 
-@@ -3584,6 +3646,7 @@
+@@ -3582,6 +3644,7 @@
  EXPORT_SYMBOL(net_enable_timestamp);
  EXPORT_SYMBOL(net_disable_timestamp);
  EXPORT_SYMBOL(dev_get_flags);
@@ -94222,9 +92334,9 @@
  
  #if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE)
  EXPORT_SYMBOL(br_handle_frame_hook);
-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
+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
++++ linux-2.6.18-xen/net/core/skbuff.c	2006-11-19 14:27:17.000000000 +0100
 @@ -139,6 +139,7 @@
   *	Buffers may only be allocated from interrupts using a @gfp_mask of
   *	%GFP_ATOMIC.
@@ -94241,7 +92353,7 @@
  
  /**
   *	alloc_skb_from_cache	-	allocate a network buffer
-@@ -210,14 +212,17 @@
+@@ -210,14 +212,18 @@
   */
  struct sk_buff *alloc_skb_from_cache(kmem_cache_t *cp,
  				     unsigned int size,
@@ -94250,6 +92362,7 @@
 +				     int fclone)
  {
 +	kmem_cache_t *cache;
++	struct skb_shared_info *shinfo;
  	struct sk_buff *skb;
  	u8 *data;
  
@@ -94262,11 +92375,26 @@
  	if (!skb)
  		goto out;
  
-@@ -241,10 +246,20 @@
- 	skb_shinfo(skb)->gso_segs = 0;
- 	skb_shinfo(skb)->gso_type = 0;
- 	skb_shinfo(skb)->frag_list = NULL;
-+
+@@ -234,17 +240,29 @@
+ 	skb->data = data;
+ 	skb->tail = data;
+ 	skb->end  = data + size;
++	/* make sure we initialize shinfo sequentially */
++	shinfo = skb_shinfo(skb);
++	atomic_set(&shinfo->dataref, 1);
++	shinfo->nr_frags  = 0;
++	shinfo->gso_size = 0;
++	shinfo->gso_segs = 0;
++	shinfo->gso_type = 0;
++	shinfo->ip6_frag_id = 0;
++	shinfo->frag_list = NULL;
+ 
+-	atomic_set(&(skb_shinfo(skb)->dataref), 1);
+-	skb_shinfo(skb)->nr_frags  = 0;
+-	skb_shinfo(skb)->gso_size = 0;
+-	skb_shinfo(skb)->gso_segs = 0;
+-	skb_shinfo(skb)->gso_type = 0;
+-	skb_shinfo(skb)->frag_list = NULL;
 +	if (fclone) {
 +		struct sk_buff *child = skb + 1;
 +		atomic_t *fclone_ref = (atomic_t *) (child + 1);
@@ -94284,7 +92412,7 @@
  	skb = NULL;
  	goto out;
  }
-@@ -464,6 +479,10 @@
+@@ -464,6 +482,10 @@
  	C(local_df);
  	n->cloned = 1;
  	n->nohdr = 0;
@@ -94295,9 +92423,9 @@
  	C(pkt_type);
  	C(ip_summed);
  	C(priority);
-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
+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
++++ linux-2.6.18-xen/net/ipv4/netfilter/ip_nat_proto_tcp.c	2006-11-19 14:27:18.000000000 +0100
 @@ -129,7 +129,12 @@
  	if (hdrsize < sizeof(*hdr))
  		return 1;
@@ -94312,9 +92440,9 @@
  					ip_nat_cheat_check(oldport ^ 0xFFFF,
  							   newport,
  							   hdr->check));
-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
+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
++++ linux-2.6.18-xen/net/ipv4/netfilter/ip_nat_proto_udp.c	2006-11-19 14:27:18.000000000 +0100
 @@ -114,7 +114,12 @@
  		portptr = &hdr->dest;
  	}
@@ -94329,9 +92457,9 @@
  					ip_nat_cheat_check(*portptr ^ 0xFFFF,
  							   newport,
  							   hdr->check));
-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
+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
++++ linux-2.6.18-xen/net/ipv4/xfrm4_output.c	2006-11-19 14:27:18.000000000 +0100
 @@ -18,6 +18,8 @@
  #include <net/xfrm.h>
  #include <net/icmp.h>
@@ -94352,9 +92480,9 @@
  	if (skb->ip_summed == CHECKSUM_HW) {
  		err = skb_checksum_help(skb, 0);
  		if (err)
-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
+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
++++ linux-2.6.18-xen/net/ipv6/addrconf.c	2006-11-19 14:27:18.000000000 +0100
 @@ -2514,6 +2514,7 @@
  	spin_lock_bh(&ifp->lock);
  
@@ -94371,9 +92499,9 @@
  	    (ipv6_addr_type(&ifp->addr) & IPV6_ADDR_LINKLOCAL)) {
  		struct in6_addr all_routers;
  
-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
+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
++++ linux-2.6.18-xen/scripts/Makefile.xen	2006-11-19 14:27:19.000000000 +0100
 @@ -0,0 +1,14 @@
 +
 +# cherrypickxen($1 = allobj)

Modified: dists/sid/linux-2.6/debian/patches/series/7-extra
==============================================================================
--- dists/sid/linux-2.6/debian/patches/series/7-extra	(original)
+++ dists/sid/linux-2.6/debian/patches/series/7-extra	Sun Dec  3 15:47:28 2006
@@ -1,7 +1,7 @@
 + features/all/vserver/vs2.0.2.2-rc8.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
++ features/all/xen/fedora-2.6.18-36156.patch *_xen *_xen-vserver
 + features/all/xen/vserver-update.patch *_xen-vserver
 + bugfix/r8169-ignore-parity.patch arm
 + bugfix/arm/r8169-ignore-parity-n2100.patch arm



More information about the Kernel-svn-changes mailing list