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

Bastian Blank waldi at alioth.debian.org
Sun Dec 31 21:28:21 UTC 2006


Author: waldi
Date: Sun Dec 31 22:28:20 2006
New Revision: 8064

Added:
   dists/sid/linux-2.6/debian/patches/features/all/xen/fedora-2.6.18-36186.patch
      - copied, changed from r8013, dists/sid/linux-2.6/debian/patches/features/all/xen/fedora-2.6.18-36156.patch
Removed:
   dists/sid/linux-2.6/debian/patches/features/all/xen/fedora-2.6.18-36156.patch
Modified:
   dists/sid/linux-2.6/debian/changelog
   dists/sid/linux-2.6/debian/patches/series/9-extra
Log:
Update xen patch to changeset 36186 from Fedora 2.6.18 branch.

* debian/changelog: Update.
* debian/patches/features/all/xen/fedora-2.6.18-36156.patch: Remove.
* debian/patches/features/all/xen/fedora-2.6.18-36186.patch: Add.
* debian/patches/series/9-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 31 22:28:20 2006
@@ -15,7 +15,7 @@
   [ Bastian Blank ]
   * Bump ABI to 4.
   * Update vserver patch to 2.0.2.2-rc9.
-  * Update xen patch to changeset 36156 from Fedora 2.6.18 branch.
+  * Update xen patch to changeset 36186 from Fedora 2.6.18 branch.
   * Build only the pae version of xen. (closes: #390862)
 
   [ dann frazier ]
@@ -124,7 +124,7 @@
     memory accesses in ehci-hub-control() by adding an alignment attribute
     to the tbuf array declaration. Thanks to David Miller for the patch.
 
- -- Christian T. Steigies <cts at debian.org>  Sun, 31 Dec 2006 17:29:17 +0100
+ -- Bastian Blank <waldi at debian.org>  Sun, 31 Dec 2006 22:26:47 +0100
 
 linux-2.6 (2.6.18-8) unstable; urgency=low
 

Copied: dists/sid/linux-2.6/debian/patches/features/all/xen/fedora-2.6.18-36186.patch (from r8013, dists/sid/linux-2.6/debian/patches/features/all/xen/fedora-2.6.18-36156.patch)
==============================================================================
--- dists/sid/linux-2.6/debian/patches/features/all/xen/fedora-2.6.18-36156.patch	(original)
+++ dists/sid/linux-2.6/debian/patches/features/all/xen/fedora-2.6.18-36186.patch	Sun Dec 31 22:28:20 2006
@@ -1,5 +1,5 @@
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/boot-xen/Makefile linux-2.6.18-xen/arch/i386/boot-xen/Makefile
---- linux-2.6.18/arch/i386/boot-xen/Makefile	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/boot-xen/Makefile linux-2.6.18-xen/arch/i386/boot-xen/Makefile
+--- linux-2.6.18.3/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 @@
 +
@@ -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/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 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/Kconfig linux-2.6.18-xen/arch/i386/Kconfig
+--- linux-2.6.18.3/arch/i386/Kconfig	2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/arch/i386/Kconfig	2006-12-05 18:42:36.000000000 +0100
+@@ -16,6 +16,7 @@
  
  config GENERIC_TIME
  	bool
@@ -34,12 +34,7 @@
  	default y
  
  config LOCKDEP_SUPPORT
- 	bool
-+	depends on !X86_XEN
- 	default y
- 
- config STACKTRACE_SUPPORT
-@@ -103,6 +105,15 @@
+@@ -103,6 +104,15 @@
  	help
  	  Choose this option if your computer is a standard PC or compatible.
  
@@ -55,7 +50,7 @@
  config X86_ELAN
  	bool "AMD Elan"
  	help
-@@ -213,6 +224,7 @@
+@@ -213,6 +223,7 @@
  
  config HPET_TIMER
  	bool "HPET Timer Support"
@@ -63,7 +58,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 +275,7 @@
+@@ -263,7 +274,7 @@
  
  config X86_UP_APIC
  	bool "Local APIC support on uniprocessors"
@@ -72,7 +67,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 +300,12 @@
+@@ -288,12 +299,12 @@
  
  config X86_LOCAL_APIC
  	bool
@@ -87,7 +82,7 @@
  	default y
  
  config X86_VISWS_APIC
-@@ -303,7 +315,7 @@
+@@ -303,7 +314,7 @@
  
  config X86_MCE
  	bool "Machine Check Exception"
@@ -96,7 +91,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 +414,7 @@
+@@ -402,6 +413,7 @@
  
  config MICROCODE
  	tristate "/dev/cpu/microcode - Intel IA32 CPU microcode support"
@@ -104,7 +99,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 +432,7 @@
+@@ -419,6 +431,7 @@
  
  config X86_MSR
  	tristate "/dev/cpu/*/msr - Model-specific register support"
@@ -112,7 +107,7 @@
  	help
  	  This device gives privileged processes access to the x86
  	  Model-Specific Registers (MSRs).  It is a character device with
-@@ -434,6 +448,10 @@
+@@ -434,6 +447,10 @@
  	  with major 203 and minors 0 to 31 for /dev/cpu/0/cpuid to
  	  /dev/cpu/31/cpuid.
  
@@ -123,7 +118,7 @@
  source "drivers/firmware/Kconfig"
  
  choice
-@@ -607,7 +625,7 @@
+@@ -607,7 +624,7 @@
  
  config HIGHPTE
  	bool "Allocate 3rd-level pagetables from highmem"
@@ -132,7 +127,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 +634,7 @@
+@@ -616,6 +633,7 @@
  
  config MATH_EMULATION
  	bool "Math emulation"
@@ -140,7 +135,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 +660,8 @@
+@@ -641,6 +659,8 @@
  
  config MTRR
  	bool "MTRR (Memory Type Range Register) support"
@@ -149,7 +144,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 +696,7 @@
+@@ -675,7 +695,7 @@
  
  config EFI
  	bool "Boot from EFI support"
@@ -158,7 +153,7 @@
  	default n
  	---help---
  	This enables the the kernel to boot on EFI platforms using
-@@ -693,7 +714,7 @@
+@@ -693,7 +713,7 @@
  
  config IRQBALANCE
   	bool "Enable kernel irq balancing"
@@ -167,7 +162,7 @@
  	default y
  	help
   	  The default yes will allow the kernel to do irq load balancing.
-@@ -741,7 +762,7 @@
+@@ -741,7 +761,7 @@
  
  config KEXEC
  	bool "kexec system call (EXPERIMENTAL)"
@@ -176,7 +171,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 +815,7 @@
+@@ -794,6 +814,7 @@
  config COMPAT_VDSO
  	bool "Compat VDSO support"
  	default y
@@ -184,7 +179,7 @@
  	help
  	  Map the VDSO to the predictable old-style address too.
  	---help---
-@@ -810,18 +832,20 @@
+@@ -810,18 +831,20 @@
  	depends on HIGHMEM
  
  menu "Power management options (ACPI, APM)"
@@ -208,7 +203,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 +1030,7 @@
+@@ -1006,6 +1029,7 @@
  
  config PCI_GOBIOS
  	bool "BIOS"
@@ -216,7 +211,7 @@
  
  config PCI_GOMMCONFIG
  	bool "MMConfig"
-@@ -1013,6 +1038,13 @@
+@@ -1013,6 +1037,13 @@
  config PCI_GODIRECT
  	bool "Direct"
  
@@ -230,7 +225,7 @@
  config PCI_GOANY
  	bool "Any"
  
-@@ -1020,7 +1052,7 @@
+@@ -1020,7 +1051,7 @@
  
  config PCI_BIOS
  	bool
@@ -239,7 +234,7 @@
  	default y
  
  config PCI_DIRECT
-@@ -1033,6 +1065,18 @@
+@@ -1033,6 +1064,18 @@
  	depends on PCI && ACPI && (PCI_GOMMCONFIG || PCI_GOANY)
  	default y
  
@@ -258,7 +253,7 @@
  source "drivers/pci/pcie/Kconfig"
  
  source "drivers/pci/Kconfig"
-@@ -1043,7 +1087,7 @@
+@@ -1043,7 +1086,7 @@
  
  config ISA
  	bool "ISA support"
@@ -267,7 +262,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 +1114,7 @@
+@@ -1070,7 +1113,7 @@
  source "drivers/eisa/Kconfig"
  
  config MCA
@@ -276,7 +271,7 @@
  	default y if X86_VOYAGER
  	help
  	  MicroChannel Architecture is found in some IBM PS/2 machines and
-@@ -1146,6 +1190,8 @@
+@@ -1146,6 +1189,8 @@
  
  source "crypto/Kconfig"
  
@@ -285,7 +280,7 @@
  source "lib/Kconfig"
  
  #
-@@ -1171,7 +1217,7 @@
+@@ -1171,7 +1216,7 @@
  
  config X86_HT
  	bool
@@ -294,7 +289,7 @@
  	default y
  
  config X86_BIOS_REBOOT
-@@ -1184,6 +1230,16 @@
+@@ -1184,6 +1229,16 @@
  	depends on X86_SMP || (X86_VOYAGER && SMP)
  	default y
  
@@ -311,10 +306,10 @@
  config KTIME_SCALAR
  	bool
  	default y
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/Kconfig.cpu linux-2.6.18-xen/arch/i386/Kconfig.cpu
---- linux-2.6.18/arch/i386/Kconfig.cpu	2006-09-20 05:42:06.000000000 +0200
-+++ linux-2.6.18-xen/arch/i386/Kconfig.cpu	2006-11-19 14:26:21.000000000 +0100
-@@ -251,7 +251,7 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/Kconfig.cpu linux-2.6.18-xen/arch/i386/Kconfig.cpu
+--- linux-2.6.18.3/arch/i386/Kconfig.cpu	2006-12-06 09:06:08.000000000 +0100
++++ linux-2.6.18-xen/arch/i386/Kconfig.cpu	2006-12-05 18:42:36.000000000 +0100
+@@ -252,7 +252,7 @@
  
  config X86_F00F_BUG
  	bool
@@ -323,25 +318,17 @@
  	default y
  
  config X86_WP_WORKS_OK
-@@ -311,5 +311,5 @@
+@@ -312,5 +312,5 @@
  
  config X86_TSC
  	bool
 -	depends on (MWINCHIP3D || MWINCHIP2 || MCRUSOE || MEFFICEON || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || MK8 || MVIAC3_2 || MGEODEGX1 || MGEODE_LX) && !X86_NUMAQ
 +	depends on (MWINCHIP3D || MWINCHIP2 || MCRUSOE || MEFFICEON || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || MK8 || MVIAC3_2 || MGEODEGX1 || MGEODE_LX) && !X86_NUMAQ && !X86_XEN
  	default y
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/Kconfig.debug linux-2.6.18-xen/arch/i386/Kconfig.debug
---- linux-2.6.18/arch/i386/Kconfig.debug	2006-09-20 05:42:06.000000000 +0200
-+++ 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 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/Kconfig.debug linux-2.6.18-xen/arch/i386/Kconfig.debug
+--- linux-2.6.18.3/arch/i386/Kconfig.debug	2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/arch/i386/Kconfig.debug	2006-12-05 18:42:36.000000000 +0100
+@@ -79,6 +79,7 @@
  config DOUBLEFAULT
  	default y
  	bool "Enable doublefault exception handler" if EMBEDDED
@@ -349,9 +336,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/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
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/acpi/boot-xen.c linux-2.6.18-xen/arch/i386/kernel/acpi/boot-xen.c
+--- linux-2.6.18.3/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-12-05 18:42:36.000000000 +0100
 @@ -0,0 +1,1168 @@
 +/*
 + *  boot.c - Architecture-Specific Low-Level ACPI Boot Support
@@ -524,7 +511,7 @@
 +	unsigned long i;
 +	int config_size;
 +
-+	if (!phys_addr || !size || !cpu_has_apic)
++	if (!phys_addr || !size)
 +		return -EINVAL;
 +
 +	mcfg = (struct acpi_table_mcfg *)__acpi_map_table(phys_addr, size);
@@ -573,7 +560,7 @@
 +{
 +	struct acpi_table_madt *madt = NULL;
 +
-+	if (!phys_addr || !size)
++	if (!phys_addr || !size || !cpu_has_apic)
 +		return -EINVAL;
 +
 +	madt = (struct acpi_table_madt *)__acpi_map_table(phys_addr, size);
@@ -1113,7 +1100,7 @@
 +		return -ENODEV;
 +	}
 +
-+	if (!cpu_has_apic)
++	if (!cpu_has_apic) 
 +		return -ENODEV;
 +
 +	/*
@@ -1521,8 +1508,8 @@
 +
 +	return 0;
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/acpi/Makefile linux-2.6.18-xen/arch/i386/kernel/acpi/Makefile
---- linux-2.6.18/arch/i386/kernel/acpi/Makefile	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/acpi/Makefile linux-2.6.18-xen/arch/i386/kernel/acpi/Makefile
+--- linux-2.6.18.3/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
@@ -1532,9 +1519,9 @@
 +include $(srctree)/scripts/Makefile.xen
 +obj-y := $(call cherrypickxen, $(obj-y), $(src))
 +endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/alternative.c linux-2.6.18-xen/arch/i386/kernel/alternative.c
---- linux-2.6.18/arch/i386/kernel/alternative.c	2006-09-20 05:42:06.000000000 +0200
-+++ linux-2.6.18-xen/arch/i386/kernel/alternative.c	2006-11-19 14:26:21.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/alternative.c linux-2.6.18-xen/arch/i386/kernel/alternative.c
+--- linux-2.6.18.3/arch/i386/kernel/alternative.c	2006-12-06 09:06:08.000000000 +0100
++++ linux-2.6.18-xen/arch/i386/kernel/alternative.c	2006-12-05 18:42:36.000000000 +0100
 @@ -4,7 +4,11 @@
  #include <asm/alternative.h>
  #include <asm/sections.h>
@@ -1559,8 +1546,8 @@
  			DPRINTK("%s: vsyscall fixup: %p => %p\n",
  				__FUNCTION__, a->instr, instr);
  		}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/apic-xen.c linux-2.6.18-xen/arch/i386/kernel/apic-xen.c
---- linux-2.6.18/arch/i386/kernel/apic-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/apic-xen.c linux-2.6.18-xen/arch/i386/kernel/apic-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -1723,8 +1710,8 @@
 +
 +	return 0;
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/asm-offsets.c linux-2.6.18-xen/arch/i386/kernel/asm-offsets.c
---- linux-2.6.18/arch/i386/kernel/asm-offsets.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/asm-offsets.c linux-2.6.18-xen/arch/i386/kernel/asm-offsets.c
+--- linux-2.6.18.3/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);
@@ -1742,10 +1729,10 @@
  
  	DEFINE(PAGE_SIZE_asm, PAGE_SIZE);
  	DEFINE(VDSO_PRELINK, VDSO_PRELINK);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/cpu/common-xen.c linux-2.6.18-xen/arch/i386/kernel/cpu/common-xen.c
---- linux-2.6.18/arch/i386/kernel/cpu/common-xen.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/arch/i386/kernel/cpu/common-xen.c	2006-11-19 14:26:21.000000000 +0100
-@@ -0,0 +1,740 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/cpu/common-xen.c linux-2.6.18-xen/arch/i386/kernel/cpu/common-xen.c
+--- linux-2.6.18.3/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-12-05 18:42:36.000000000 +0100
+@@ -0,0 +1,739 @@
 +#include <linux/init.h>
 +#include <linux/string.h>
 +#include <linux/delay.h>
@@ -2045,7 +2032,7 @@
 +			if (c->x86 >= 0x6)
 +				c->x86_model += ((tfms >> 16) & 0xF) << 4;
 +			c->x86_mask = tfms & 15;
-+#if defined(CONFIG_X86_HT)
++#ifdef CONFIG_X86_HT
 +			c->apicid = phys_pkg_id((ebx >> 24) & 0xFF, 0);
 +#else
 +			c->apicid = (ebx >> 24) & 0xFF;
@@ -2242,7 +2229,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;
 +		}
@@ -2373,7 +2360,7 @@
 +	}
 +	printk(KERN_INFO "Initializing CPU#%d\n", cpu);
 +
-+	if (cpu_has_vme || cpu_has_de)
++	if (cpu_has_vme || cpu_has_tsc || 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");
@@ -2407,7 +2394,6 @@
 +				local_irq_enable();
 +		}
 +	}
-+
 +old_gdt:
 +	/*
 +	 * Initialize the per-CPU GDT with the boot GDT,
@@ -2486,8 +2472,8 @@
 +	per_cpu(cpu_tlbstate, cpu).active_mm = &init_mm;
 +}
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/cpu/Makefile linux-2.6.18-xen/arch/i386/kernel/cpu/Makefile
---- linux-2.6.18/arch/i386/kernel/cpu/Makefile	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/cpu/Makefile linux-2.6.18-xen/arch/i386/kernel/cpu/Makefile
+--- linux-2.6.18.3/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 @@
  
@@ -2498,8 +2484,8 @@
 +include $(srctree)/scripts/Makefile.xen
 +obj-y := $(call cherrypickxen, $(obj-y), $(src))
 +endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/cpu/mtrr/main-xen.c linux-2.6.18-xen/arch/i386/kernel/cpu/mtrr/main-xen.c
---- linux-2.6.18/arch/i386/kernel/cpu/mtrr/main-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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>
@@ -2699,8 +2685,8 @@
 +}
 +
 +subsys_initcall(mtrr_init);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/cpu/mtrr/Makefile linux-2.6.18-xen/arch/i386/kernel/cpu/mtrr/Makefile
---- linux-2.6.18/arch/i386/kernel/cpu/mtrr/Makefile	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/cpu/mtrr/Makefile linux-2.6.18-xen/arch/i386/kernel/cpu/mtrr/Makefile
+--- linux-2.6.18.3/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
@@ -2713,14 +2699,14 @@
 +obj-y := $(call filterxen, $(obj-y), $(n-obj-xen))
 +obj-y := $(call cherrypickxen, $(obj-y))
 +endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/early_printk-xen.c linux-2.6.18-xen/arch/i386/kernel/early_printk-xen.c
---- linux-2.6.18/arch/i386/kernel/early_printk-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/early_printk-xen.c linux-2.6.18-xen/arch/i386/kernel/early_printk-xen.c
+--- linux-2.6.18.3/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/arch/i386/kernel/entry.S linux-2.6.18-xen/arch/i386/kernel/entry.S
---- linux-2.6.18/arch/i386/kernel/entry.S	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/entry.S linux-2.6.18-xen/arch/i386/kernel/entry.S
+--- linux-2.6.18.3/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
@@ -2749,8 +2735,8 @@
  	pushfl;					\
  	pushl $__KERNEL_CS;			\
  	pushl $sysenter_past_esp
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/entry-xen.S linux-2.6.18-xen/arch/i386/kernel/entry-xen.S
---- linux-2.6.18/arch/i386/kernel/entry-xen.S	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/entry-xen.S linux-2.6.18-xen/arch/i386/kernel/entry-xen.S
+--- linux-2.6.18.3/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 @@
 +/*
@@ -3966,8 +3952,8 @@
 +#include "syscall_table.S"
 +
 +syscall_table_size=(.-sys_call_table)
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/fixup.c linux-2.6.18-xen/arch/i386/kernel/fixup.c
---- linux-2.6.18/arch/i386/kernel/fixup.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/fixup.c linux-2.6.18-xen/arch/i386/kernel/fixup.c
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -4062,8 +4048,8 @@
 +	return 0;
 +}
 +__initcall(fixup_init);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/head-xen.S linux-2.6.18-xen/arch/i386/kernel/head-xen.S
---- linux-2.6.18/arch/i386/kernel/head-xen.S	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/head-xen.S linux-2.6.18-xen/arch/i386/kernel/head-xen.S
+--- linux-2.6.18.3/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 @@
 +
@@ -4266,8 +4252,8 @@
 +	ELFNOTE(Xen, XEN_ELFNOTE_PAE_MODE,       .asciz, "no")
 +#endif
 +	ELFNOTE(Xen, XEN_ELFNOTE_LOADER,         .asciz, "generic")
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/init_task-xen.c linux-2.6.18-xen/arch/i386/kernel/init_task-xen.c
---- linux-2.6.18/arch/i386/kernel/init_task-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/init_task-xen.c linux-2.6.18-xen/arch/i386/kernel/init_task-xen.c
+--- linux-2.6.18.3/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>
@@ -4321,10 +4307,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/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 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/io_apic-xen.c linux-2.6.18-xen/arch/i386/kernel/io_apic-xen.c
+--- linux-2.6.18.3/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-12-05 18:42:36.000000000 +0100
+@@ -0,0 +1,2771 @@
 +/*
 + *	Intel IO-APIC support for multi-Pentium hosts.
 + *
@@ -6528,6 +6514,8 @@
 +	}
 +}
 +
++int timer_uses_ioapic_pin_0;
++
 +#ifndef CONFIG_XEN
 +static void enable_lapic_irq (unsigned int irq)
 +{
@@ -6643,8 +6631,6 @@
 +	spin_unlock_irqrestore(&ioapic_lock, flags);
 +}
 +
-+int timer_uses_ioapic_pin_0;
-+
 +/*
 + * 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
@@ -6769,7 +6755,6 @@
 +		"report.  Then try booting with the 'noapic' option");
 +}
 +#else
-+int timer_uses_ioapic_pin_0;
 +#define check_timer() ((void)0)
 +#endif
 +
@@ -7097,8 +7082,8 @@
 +}
 +
 +#endif /* CONFIG_ACPI */
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/ioport-xen.c linux-2.6.18-xen/arch/i386/kernel/ioport-xen.c
---- linux-2.6.18/arch/i386/kernel/ioport-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/ioport-xen.c linux-2.6.18-xen/arch/i386/kernel/ioport-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -7222,8 +7207,8 @@
 +	set_iopl_mask(t->iopl);
 +	return 0;
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/irq-xen.c linux-2.6.18-xen/arch/i386/kernel/irq-xen.c
---- linux-2.6.18/arch/i386/kernel/irq-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/irq-xen.c linux-2.6.18-xen/arch/i386/kernel/irq-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -7550,8 +7535,8 @@
 +}
 +#endif
 +
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/ldt-xen.c linux-2.6.18-xen/arch/i386/kernel/ldt-xen.c
---- linux-2.6.18/arch/i386/kernel/ldt-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/ldt-xen.c linux-2.6.18-xen/arch/i386/kernel/ldt-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -7824,8 +7809,8 @@
 +	}
 +	return ret;
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/Makefile linux-2.6.18-xen/arch/i386/kernel/Makefile
---- linux-2.6.18/arch/i386/kernel/Makefile	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/Makefile linux-2.6.18-xen/arch/i386/kernel/Makefile
+--- linux-2.6.18.3/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 @@
  
@@ -7870,8 +7855,8 @@
 +obj-y := $(call cherrypickxen, $(obj-y))
 +extra-y := $(call cherrypickxen, $(extra-y))
 +endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/microcode-xen.c linux-2.6.18-xen/arch/i386/kernel/microcode-xen.c
---- linux-2.6.18/arch/i386/kernel/microcode-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/microcode-xen.c linux-2.6.18-xen/arch/i386/kernel/microcode-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -8021,8 +8006,8 @@
 +module_init(microcode_init)
 +module_exit(microcode_exit)
 +MODULE_ALIAS_MISCDEV(MICROCODE_MINOR);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/mpparse-xen.c linux-2.6.18-xen/arch/i386/kernel/mpparse-xen.c
---- linux-2.6.18/arch/i386/kernel/mpparse-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/mpparse-xen.c linux-2.6.18-xen/arch/i386/kernel/mpparse-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -9210,8 +9195,8 @@
 +
 +#endif /* CONFIG_X86_IO_APIC */
 +#endif /* CONFIG_ACPI */
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/pci-dma-xen.c linux-2.6.18-xen/arch/i386/kernel/pci-dma-xen.c
---- linux-2.6.18/arch/i386/kernel/pci-dma-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/pci-dma-xen.c linux-2.6.18-xen/arch/i386/kernel/pci-dma-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -9593,10 +9578,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/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 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/process-xen.c linux-2.6.18-xen/arch/i386/kernel/process-xen.c
+--- linux-2.6.18.3/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-12-05 18:42:36.000000000 +0100
+@@ -0,0 +1,812 @@
 +/*
 + *  linux/arch/i386/kernel/process.c
 + *
@@ -9659,9 +9644,6 @@
 +#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;
@@ -10412,8 +10394,8 @@
 +		sp -= get_random_int() % 8192;
 +	return sp & ~0xf;
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/quirks-xen.c linux-2.6.18-xen/arch/i386/kernel/quirks-xen.c
---- linux-2.6.18/arch/i386/kernel/quirks-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/quirks-xen.c linux-2.6.18-xen/arch/i386/kernel/quirks-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -10463,10 +10445,10 @@
 +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_E7525_MCH,	quirk_intel_irqbalance);
 +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_E7520_MCH,	quirk_intel_irqbalance);
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/setup-xen.c linux-2.6.18-xen/arch/i386/kernel/setup-xen.c
---- linux-2.6.18/arch/i386/kernel/setup-xen.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/arch/i386/kernel/setup-xen.c	2006-11-19 14:26:22.000000000 +0100
-@@ -0,0 +1,1836 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/setup-xen.c linux-2.6.18-xen/arch/i386/kernel/setup-xen.c
+--- linux-2.6.18.3/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-12-05 18:42:36.000000000 +0100
+@@ -0,0 +1,1835 @@
 +/*
 + *  linux/arch/i386/kernel/setup.c
 + *
@@ -11858,13 +11840,15 @@
 +#ifdef CONFIG_XEN_PRIVILEGED_GUEST
 +	struct xen_memory_map memmap;
 +
-+	map = (struct e820entry *)__get_free_page(GFP_ATOMIC);
-+	nr_map = E820MAX;
-+
++	map = machine_e820.map;
 +	memmap.nr_entries = E820MAX;
++
 +	set_xen_guest_handle(memmap.buffer, map);
 +
-+	BUG_ON(HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap));
++	if(HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap))
++		BUG();
++	machine_e820.nr_map = memmap.nr_entries;
++	nr_map = memmap.nr_entries;
 +	e820_setup_gap(map, memmap.nr_entries);
 +#endif
 +
@@ -11903,9 +11887,6 @@
 +#endif
 +		}
 +	}
-+#ifdef CONFIG_XEN
-+	free_page((unsigned long)map);
-+#endif
 +}
 +
 +/*
@@ -12303,8 +12284,8 @@
 + * c-basic-offset:8
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/smp-xen.c linux-2.6.18-xen/arch/i386/kernel/smp-xen.c
---- linux-2.6.18/arch/i386/kernel/smp-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/smp-xen.c linux-2.6.18-xen/arch/i386/kernel/smp-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -12931,8 +12912,8 @@
 +	return IRQ_HANDLED;
 +}
 +
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/swiotlb.c linux-2.6.18-xen/arch/i386/kernel/swiotlb.c
---- linux-2.6.18/arch/i386/kernel/swiotlb.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/swiotlb.c linux-2.6.18-xen/arch/i386/kernel/swiotlb.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -13607,8 +13588,8 @@
 +EXPORT_SYMBOL(swiotlb_unmap_page);
 +EXPORT_SYMBOL(swiotlb_dma_mapping_error);
 +EXPORT_SYMBOL(swiotlb_dma_supported);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/sysenter.c linux-2.6.18-xen/arch/i386/kernel/sysenter.c
---- linux-2.6.18/arch/i386/kernel/sysenter.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/sysenter.c linux-2.6.18-xen/arch/i386/kernel/sysenter.c
+--- linux-2.6.18.3/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>
@@ -13669,9 +13650,9 @@
  
  	if (!boot_cpu_has(X86_FEATURE_SEP)) {
  		memcpy(syscall_page,
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/time-xen.c linux-2.6.18-xen/arch/i386/kernel/time-xen.c
---- linux-2.6.18/arch/i386/kernel/time-xen.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/arch/i386/kernel/time-xen.c	2006-11-19 14:26:22.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/time-xen.c linux-2.6.18-xen/arch/i386/kernel/time-xen.c
+--- linux-2.6.18.3/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-12-05 18:42:36.000000000 +0100
 @@ -0,0 +1,1101 @@
 +/*
 + *  linux/arch/i386/kernel/time.c
@@ -14671,14 +14652,14 @@
 +	cpu_clear(smp_processor_id(), nohz_cpu_mask);
 +}
 +
-+void safe_halt(void)
++void raw_safe_halt(void)
 +{
 +	stop_hz_timer();
 +	/* Blocking includes an implicit local_irq_enable(). */
 +	HYPERVISOR_block();
 +	start_hz_timer();
 +}
-+EXPORT_SYMBOL(safe_halt);
++EXPORT_SYMBOL(raw_safe_halt);
 +
 +void halt(void)
 +{
@@ -14774,8 +14755,8 @@
 +	return 0;
 +}
 +__initcall(xen_sysctl_init);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/traps.c linux-2.6.18-xen/arch/i386/kernel/traps.c
---- linux-2.6.18/arch/i386/kernel/traps.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/traps.c linux-2.6.18-xen/arch/i386/kernel/traps.c
+--- linux-2.6.18.3/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 @@
  
@@ -14797,10 +14778,10 @@
  }
  
  static void unknown_nmi_error(unsigned char reason, struct pt_regs * regs)
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/traps-xen.c linux-2.6.18-xen/arch/i386/kernel/traps-xen.c
---- linux-2.6.18/arch/i386/kernel/traps-xen.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/arch/i386/kernel/traps-xen.c	2006-11-19 14:26:22.000000000 +0100
-@@ -0,0 +1,1186 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/traps-xen.c linux-2.6.18-xen/arch/i386/kernel/traps-xen.c
+--- linux-2.6.18.3/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-12-05 18:42:36.000000000 +0100
+@@ -0,0 +1,1185 @@
 +/*
 + *  linux/arch/i386/traps.c
 + *
@@ -15986,9 +15967,8 @@
 +}
 +__setup("call_trace=", call_trace_setup);
 +#endif
-+
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/tsc.c linux-2.6.18-xen/arch/i386/kernel/tsc.c
---- linux-2.6.18/arch/i386/kernel/tsc.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/tsc.c linux-2.6.18-xen/arch/i386/kernel/tsc.c
+--- linux-2.6.18.3/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;
@@ -16006,8 +15986,8 @@
  
  static unsigned long calculate_cpu_khz(void)
  {
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/vm86.c linux-2.6.18-xen/arch/i386/kernel/vm86.c
---- linux-2.6.18/arch/i386/kernel/vm86.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/vm86.c linux-2.6.18-xen/arch/i386/kernel/vm86.c
+--- linux-2.6.18.3/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));
@@ -16063,8 +16043,8 @@
  
  	tsk->thread.screen_bitmap = info->screen_bitmap;
  	if (info->flags & VM86_SCREEN_BITMAP)
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/vmlinux.lds.S linux-2.6.18-xen/arch/i386/kernel/vmlinux.lds.S
---- linux-2.6.18/arch/i386/kernel/vmlinux.lds.S	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/vmlinux.lds.S linux-2.6.18-xen/arch/i386/kernel/vmlinux.lds.S
+--- linux-2.6.18.3/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)
@@ -16104,8 +16084,8 @@
 +
 +  NOTES
  }
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/kernel/vsyscall-note-xen.S linux-2.6.18-xen/arch/i386/kernel/vsyscall-note-xen.S
---- linux-2.6.18/arch/i386/kernel/vsyscall-note-xen.S	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/kernel/vsyscall-note-xen.S linux-2.6.18-xen/arch/i386/kernel/vsyscall-note-xen.S
+--- linux-2.6.18.3/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 @@
 +/*
@@ -16140,8 +16120,8 @@
 +NOTE_KERNELCAP_BEGIN(1, 1)
 +NOTE_KERNELCAP(1, "nosegneg")  /* Change 1 back to 0 when glibc is fixed! */
 +NOTE_KERNELCAP_END
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/lib/delay.c linux-2.6.18-xen/arch/i386/lib/delay.c
---- linux-2.6.18/arch/i386/lib/delay.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/lib/delay.c linux-2.6.18-xen/arch/i386/lib/delay.c
+--- linux-2.6.18.3/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;
@@ -16160,19 +16140,122 @@
  void __delay(unsigned long loops)
  {
  	delay_fn(loops);
-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
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/mach-xen/irqflags.c linux-2.6.18-xen/arch/i386/mach-xen/irqflags.c
+--- linux-2.6.18.3/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-12-05 18:42:36.000000000 +0100
+@@ -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.3/arch/i386/mach-xen/Makefile linux-2.6.18-xen/arch/i386/mach-xen/Makefile
+--- linux-2.6.18.3/arch/i386/mach-xen/Makefile	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/arch/i386/mach-xen/Makefile	2006-12-05 18:42:36.000000000 +0100
 @@ -0,0 +1,5 @@
 +#
 +# Makefile for the linux kernel.
 +#
 +
-+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 @@
++obj-y				:= setup.o irqflags.o
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/mach-xen/setup.c linux-2.6.18-xen/arch/i386/mach-xen/setup.c
+--- linux-2.6.18.3/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-12-05 18:42:36.000000000 +0100
+@@ -0,0 +1,154 @@
 +/*
 + *	Machine specific setup for generic
 + */
@@ -16185,6 +16268,7 @@
 +#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>
@@ -16326,8 +16410,8 @@
 +void __init pre_setup_arch_hook(void)
 +{
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/Makefile linux-2.6.18-xen/arch/i386/Makefile
---- linux-2.6.18/arch/i386/Makefile	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/Makefile linux-2.6.18-xen/arch/i386/Makefile
+--- linux-2.6.18.3/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 @@
  
@@ -16385,8 +16469,8 @@
  	       arch/$(ARCH)/boot/image.iso \
  	       arch/$(ARCH)/boot/mtools.conf
 +CLEAN_FILES += vmlinuz vmlinux-stripped
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/mm/fault-xen.c linux-2.6.18-xen/arch/i386/mm/fault-xen.c
---- linux-2.6.18/arch/i386/mm/fault-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/mm/fault-xen.c linux-2.6.18-xen/arch/i386/mm/fault-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -17159,8 +17243,8 @@
 +	}
 +}
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/mm/highmem-xen.c linux-2.6.18-xen/arch/i386/mm/highmem-xen.c
---- linux-2.6.18/arch/i386/mm/highmem-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/mm/highmem-xen.c linux-2.6.18-xen/arch/i386/mm/highmem-xen.c
+--- linux-2.6.18.3/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>
@@ -17296,8 +17380,8 @@
 +EXPORT_SYMBOL(kmap_atomic);
 +EXPORT_SYMBOL(kunmap_atomic);
 +EXPORT_SYMBOL(kmap_atomic_to_page);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/mm/hypervisor.c linux-2.6.18-xen/arch/i386/mm/hypervisor.c
---- linux-2.6.18/arch/i386/mm/hypervisor.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/mm/hypervisor.c linux-2.6.18-xen/arch/i386/mm/hypervisor.c
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -17757,8 +17841,8 @@
 +		mach_lp, (u64)entry_a | ((u64)entry_b<<32));
 +}
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/mm/init-xen.c linux-2.6.18-xen/arch/i386/mm/init-xen.c
---- linux-2.6.18/arch/i386/mm/init-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/mm/init-xen.c linux-2.6.18-xen/arch/i386/mm/init-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -18612,8 +18696,8 @@
 +}
 +#endif
 +
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/mm/ioremap-xen.c linux-2.6.18-xen/arch/i386/mm/ioremap-xen.c
---- linux-2.6.18/arch/i386/mm/ioremap-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/mm/ioremap-xen.c linux-2.6.18-xen/arch/i386/mm/ioremap-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -19059,8 +19143,8 @@
 +		--nrpages;
 +	}
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/mm/Makefile linux-2.6.18-xen/arch/i386/mm/Makefile
---- linux-2.6.18/arch/i386/mm/Makefile	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/mm/Makefile linux-2.6.18-xen/arch/i386/mm/Makefile
+--- linux-2.6.18.3/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
@@ -19074,8 +19158,8 @@
 +
 +obj-y := $(call cherrypickxen, $(obj-y))
 +endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/mm/pageattr.c linux-2.6.18-xen/arch/i386/mm/pageattr.c
---- linux-2.6.18/arch/i386/mm/pageattr.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/mm/pageattr.c linux-2.6.18-xen/arch/i386/mm/pageattr.c
+--- linux-2.6.18.3/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;
@@ -19086,44 +19170,8 @@
  		return;
  
  	spin_lock_irqsave(&pgd_lock, flags);
-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
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/mm/pgtable-xen.c linux-2.6.18-xen/arch/i386/mm/pgtable-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -19825,8 +19873,8 @@
 +	    !mm->context.has_foreign_mappings)
 +		mm_unpin(mm);
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/oprofile/Makefile linux-2.6.18-xen/arch/i386/oprofile/Makefile
---- linux-2.6.18/arch/i386/oprofile/Makefile	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/oprofile/Makefile linux-2.6.18-xen/arch/i386/oprofile/Makefile
+--- linux-2.6.18.3/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  \
@@ -19840,8 +19888,8 @@
  					   op_model_ppro.o op_model_p4.o
  oprofile-$(CONFIG_X86_IO_APIC)		+= nmi_timer_int.o
 +endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/oprofile/xenoprof.c linux-2.6.18-xen/arch/i386/oprofile/xenoprof.c
---- linux-2.6.18/arch/i386/oprofile/xenoprof.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/oprofile/xenoprof.c linux-2.6.18-xen/arch/i386/oprofile/xenoprof.c
+--- linux-2.6.18.3/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 @@
 +/**
@@ -20428,9 +20476,9 @@
 +        }
 +
 +}
-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
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/pci/irq-xen.c linux-2.6.18-xen/arch/i386/pci/irq-xen.c
+--- linux-2.6.18.3/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-12-05 18:42:36.000000000 +0100
 @@ -0,0 +1,1206 @@
 +/*
 + *	Low-Level PCI Support for PC -- Routing of Interrupts
@@ -20694,13 +20742,13 @@
 + */
 +static int pirq_via586_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
 +{
-+	static const unsigned int pirqmap[4] = { 3, 2, 5, 1 };
++	static const unsigned int pirqmap[5] = { 3, 2, 5, 1, 1 };
 +	return read_config_nybble(router, 0x55, pirqmap[pirq-1]);
 +}
 +
 +static int pirq_via586_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
 +{
-+	static const unsigned int pirqmap[4] = { 3, 2, 5, 1 };
++	static const unsigned int pirqmap[5] = { 3, 2, 5, 1, 1 };
 +	write_config_nybble(router, 0x55, pirqmap[pirq-1], irq);
 +	return 1;
 +}
@@ -21638,8 +21686,8 @@
 +
 +	return count;
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/pci/Makefile linux-2.6.18-xen/arch/i386/pci/Makefile
---- linux-2.6.18/arch/i386/pci/Makefile	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/pci/Makefile linux-2.6.18-xen/arch/i386/pci/Makefile
+--- linux-2.6.18.3/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
@@ -21661,8 +21709,8 @@
 +include $(srctree)/scripts/Makefile.xen
 +obj-y := $(call cherrypickxen, $(obj-y))
 +endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/pci/pcifront.c linux-2.6.18-xen/arch/i386/pci/pcifront.c
---- linux-2.6.18/arch/i386/pci/pcifront.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/pci/pcifront.c linux-2.6.18-xen/arch/i386/pci/pcifront.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -21720,8 +21768,8 @@
 +}
 +
 +arch_initcall(pcifront_x86_stub_init);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/i386/power/Makefile linux-2.6.18-xen/arch/i386/power/Makefile
---- linux-2.6.18/arch/i386/power/Makefile	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/i386/power/Makefile linux-2.6.18-xen/arch/i386/power/Makefile
+--- linux-2.6.18.3/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
@@ -21729,8 +21777,8 @@
 +obj-$(CONFIG_SOFTWARE_SUSPEND)	+= cpu.o
 +obj-$(CONFIG_ACPI_SLEEP)	+= cpu.o
  obj-$(CONFIG_SOFTWARE_SUSPEND)	+= swsusp.o
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/dig/setup.c linux-2.6.18-xen/arch/ia64/dig/setup.c
---- linux-2.6.18/arch/ia64/dig/setup.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/dig/setup.c linux-2.6.18-xen/arch/ia64/dig/setup.c
+--- linux-2.6.18.3/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>
@@ -21761,8 +21809,8 @@
 +	xen_start_info->console.domU.evtchn = 0;
 +#endif
  }
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/hp/sim/Makefile linux-2.6.18-xen/arch/ia64/hp/sim/Makefile
---- linux-2.6.18/arch/ia64/hp/sim/Makefile	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/hp/sim/Makefile linux-2.6.18-xen/arch/ia64/hp/sim/Makefile
+--- linux-2.6.18.3/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
@@ -21770,8 +21818,8 @@
  obj-$(CONFIG_HP_SIMSCSI) += simscsi.o
 +obj-$(CONFIG_XEN) += simserial.o
 +obj-$(CONFIG_XEN) += hpsim_console.o
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/Kconfig linux-2.6.18-xen/arch/ia64/Kconfig
---- linux-2.6.18/arch/ia64/Kconfig	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/Kconfig linux-2.6.18-xen/arch/ia64/Kconfig
+--- linux-2.6.18.3/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
@@ -21851,8 +21899,8 @@
 +endif
 +
 +source "drivers/xen/Kconfig"
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/kernel/asm-offsets.c linux-2.6.18-xen/arch/ia64/kernel/asm-offsets.c
---- linux-2.6.18/arch/ia64/kernel/asm-offsets.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/kernel/asm-offsets.c linux-2.6.18-xen/arch/ia64/kernel/asm-offsets.c
+--- linux-2.6.18.3/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);
@@ -21884,8 +21932,8 @@
 +	DEFINE_MAPPED_REG_OFS(XSI_BANK1_R16_OFS, bank1_regs[0]);
 +#endif /* CONFIG_XEN */
  }
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/kernel/entry.S linux-2.6.18-xen/arch/ia64/kernel/entry.S
---- linux-2.6.18/arch/ia64/kernel/entry.S	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/kernel/entry.S linux-2.6.18-xen/arch/ia64/kernel/entry.S
+--- linux-2.6.18.3/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
@@ -22006,8 +22054,8 @@
  	;;
  	mov ar.unat=r9
  	br.many b7
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/kernel/gate.lds.S linux-2.6.18-xen/arch/ia64/kernel/gate.lds.S
---- linux-2.6.18/arch/ia64/kernel/gate.lds.S	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/kernel/gate.lds.S linux-2.6.18-xen/arch/ia64/kernel/gate.lds.S
+--- linux-2.6.18.3/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 = .;
@@ -22038,8 +22086,8 @@
    }									:readable
    .IA_64.unwind_info		: { *(.IA_64.unwind_info*) }
    .IA_64.unwind			: { *(.IA_64.unwind*) }			:readable :unwind
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/kernel/gate.S linux-2.6.18-xen/arch/ia64/kernel/gate.S
---- linux-2.6.18/arch/ia64/kernel/gate.S	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/kernel/gate.S linux-2.6.18-xen/arch/ia64/kernel/gate.S
+--- linux-2.6.18.3/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>
@@ -22210,8 +22258,8 @@
  (p9)	mov r8=ENOSYS
  	FSYS_RETURN
  END(__kernel_syscall_via_epc)
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/kernel/head.S linux-2.6.18-xen/arch/ia64/kernel/head.S
---- linux-2.6.18/arch/ia64/kernel/head.S	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/kernel/head.S linux-2.6.18-xen/arch/ia64/kernel/head.S
+--- linux-2.6.18.3/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 @@
  	;;
@@ -22226,8 +22274,8 @@
  #ifdef CONFIG_SMP
  (isAP)	br.call.sptk.many rp=start_secondary
  .ret0:
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/kernel/iosapic.c linux-2.6.18-xen/arch/ia64/kernel/iosapic.c
---- linux-2.6.18/arch/ia64/kernel/iosapic.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/kernel/iosapic.c linux-2.6.18-xen/arch/ia64/kernel/iosapic.c
+--- linux-2.6.18.3/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;
@@ -22315,8 +22363,8 @@
  	if (pcat_compat) {
  		/*
  		 * Disable the compatibility mode interrupts (8259 style),
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/kernel/irq_ia64.c linux-2.6.18-xen/arch/ia64/kernel/irq_ia64.c
---- linux-2.6.18/arch/ia64/kernel/irq_ia64.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/kernel/irq_ia64.c linux-2.6.18-xen/arch/ia64/kernel/irq_ia64.c
+--- linux-2.6.18.3/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>
@@ -22620,8 +22668,8 @@
  #ifdef CONFIG_SMP
  	phys_cpu_id = cpu_physical_id(cpu);
  #else
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/kernel/pal.S linux-2.6.18-xen/arch/ia64/kernel/pal.S
---- linux-2.6.18/arch/ia64/kernel/pal.S	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/kernel/pal.S linux-2.6.18-xen/arch/ia64/kernel/pal.S
+--- linux-2.6.18.3/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>
@@ -22649,8 +22697,8 @@
  
  /*
   * Make a PAL call using the stacked registers calling convention.
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/kernel/patch.c linux-2.6.18-xen/arch/ia64/kernel/patch.c
---- linux-2.6.18/arch/ia64/kernel/patch.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/kernel/patch.c linux-2.6.18-xen/arch/ia64/kernel/patch.c
+--- linux-2.6.18.3/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();
@@ -22737,8 +22785,8 @@
  	ia64_patch_vtop(START(vtop), END(vtop));
  	ia64_patch_mckinley_e9(START(mckinley_e9), END(mckinley_e9));
  }
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/kernel/setup.c linux-2.6.18-xen/arch/ia64/kernel/setup.c
---- linux-2.6.18/arch/ia64/kernel/setup.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/kernel/setup.c linux-2.6.18-xen/arch/ia64/kernel/setup.c
+--- linux-2.6.18.3/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>
@@ -22943,8 +22991,8 @@
  	pm_idle = default_idle;
  }
  
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/Makefile linux-2.6.18-xen/arch/ia64/Makefile
---- linux-2.6.18/arch/ia64/Makefile	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/Makefile linux-2.6.18-xen/arch/ia64/Makefile
+--- linux-2.6.18.3/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
@@ -22986,8 +23034,8 @@
  
  define archhelp
    echo '* compressed	- Build compressed kernel image'
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/mm/ioremap.c linux-2.6.18-xen/arch/ia64/mm/ioremap.c
---- linux-2.6.18/arch/ia64/mm/ioremap.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/mm/ioremap.c linux-2.6.18-xen/arch/ia64/mm/ioremap.c
+--- linux-2.6.18.3/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 *
@@ -22999,14 +23047,14 @@
  	return (void __iomem *) (__IA64_UNCACHED_OFFSET | offset);
  }
  
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/xen/drivers/README linux-2.6.18-xen/arch/ia64/xen/drivers/README
---- linux-2.6.18/arch/ia64/xen/drivers/README	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/xen/drivers/README linux-2.6.18-xen/arch/ia64/xen/drivers/README
+--- linux-2.6.18.3/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/arch/ia64/xen/hypercall.S linux-2.6.18-xen/arch/ia64/xen/hypercall.S
---- linux-2.6.18/arch/ia64/xen/hypercall.S	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/xen/hypercall.S linux-2.6.18-xen/arch/ia64/xen/hypercall.S
+--- linux-2.6.18.3/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 @@
 +/*
@@ -23422,10 +23470,10 @@
 +	;; 
 +END(xen_ssm_i_1)
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/xen/hypervisor.c linux-2.6.18-xen/arch/ia64/xen/hypervisor.c
---- linux-2.6.18/arch/ia64/xen/hypervisor.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/arch/ia64/xen/hypervisor.c	2006-11-19 14:26:23.000000000 +0100
-@@ -0,0 +1,833 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/xen/hypervisor.c linux-2.6.18-xen/arch/ia64/xen/hypervisor.c
+--- linux-2.6.18.3/arch/ia64/xen/hypervisor.c	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/arch/ia64/xen/hypervisor.c	2006-12-05 18:42:36.000000000 +0100
+@@ -0,0 +1,847 @@
 +/******************************************************************************
 + * include/asm-ia64/shadow.h
 + *
@@ -23974,6 +24022,7 @@
 +};
 +
 +struct xen_ia64_privcmd_vma {
++	int				is_privcmd_mmapped;
 +	struct xen_ia64_privcmd_range*	range;
 +
 +	unsigned long			num_entries;
@@ -24112,12 +24161,15 @@
 +static void
 +xen_ia64_privcmd_vma_open(struct vm_area_struct* vma)
 +{
++	struct xen_ia64_privcmd_vma* old_privcmd_vma = (struct xen_ia64_privcmd_vma*)vma->vm_private_data;
 +	struct xen_ia64_privcmd_vma* privcmd_vma = (struct xen_ia64_privcmd_vma*)vma->vm_private_data;
 +	struct xen_ia64_privcmd_range* privcmd_range = privcmd_vma->range;
 +
 +	atomic_inc(&privcmd_range->ref_count);
 +	// vm_op->open() can't fail.
 +	privcmd_vma = kmalloc(sizeof(*privcmd_vma), GFP_KERNEL | __GFP_NOFAIL);
++	// copy original value if necessary
++	privcmd_vma->is_privcmd_mmapped = old_privcmd_vma->is_privcmd_mmapped;
 +
 +	__xen_ia64_privcmd_vma_open(vma, privcmd_vma, privcmd_range);
 +}
@@ -24153,6 +24205,14 @@
 +}
 +
 +int
++privcmd_enforce_singleshot_mapping(struct vm_area_struct *vma)
++{
++	struct xen_ia64_privcmd_vma* privcmd_vma =
++		(struct xen_ia64_privcmd_vma *)vma->vm_private_data;
++	return (xchg(&privcmd_vma->is_privcmd_mmapped, 1) == 0);
++}
++
++int
 +privcmd_mmap(struct file * file, struct vm_area_struct * vma)
 +{
 +	int error;
@@ -24177,6 +24237,8 @@
 +	if (privcmd_vma == NULL) {
 +		goto out_enomem1;
 +	}
++	privcmd_vma->is_privcmd_mmapped = 0;
++
 +	res = kzalloc(sizeof(*res), GFP_KERNEL);
 +	if (res == NULL) {
 +		goto out_enomem1;
@@ -24259,8 +24321,8 @@
 +	/* 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
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/xen/Makefile linux-2.6.18-xen/arch/ia64/xen/Makefile
+--- linux-2.6.18.3/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 @@
 +#
@@ -24271,8 +24333,8 @@
 +	 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
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/xen/util.c linux-2.6.18-xen/arch/ia64/xen/util.c
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -24390,8 +24452,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
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/xen/xenentry.S linux-2.6.18-xen/arch/ia64/xen/xenentry.S
+--- linux-2.6.18.3/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 @@
 +/*
@@ -25261,8 +25323,8 @@
 +#else
 +END(ia64_leave_kernel)
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/xen/xenhpski.c linux-2.6.18-xen/arch/ia64/xen/xenhpski.c
---- linux-2.6.18/arch/ia64/xen/xenhpski.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/xen/xenhpski.c linux-2.6.18-xen/arch/ia64/xen/xenhpski.c
+--- linux-2.6.18.3/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 @@
 +
@@ -25284,8 +25346,8 @@
 +	return 1;
 +}
 +
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/xen/xenivt.S linux-2.6.18-xen/arch/ia64/xen/xenivt.S
---- linux-2.6.18/arch/ia64/xen/xenivt.S	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/xen/xenivt.S linux-2.6.18-xen/arch/ia64/xen/xenivt.S
+--- linux-2.6.18.3/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 @@
 +/*
@@ -27457,8 +27519,8 @@
 +	br.call.sptk.many b6=evtchn_do_upcall
 +END(xen_event_callback)
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/xen/xenminstate.h linux-2.6.18-xen/arch/ia64/xen/xenminstate.h
---- linux-2.6.18/arch/ia64/xen/xenminstate.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/xen/xenminstate.h linux-2.6.18-xen/arch/ia64/xen/xenminstate.h
+--- linux-2.6.18.3/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 @@
 +
@@ -27829,8 +27891,8 @@
 +#else
 +#define SAVE_MIN		DO_SAVE_MIN(     , mov r30=r0, )
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/xen/xenpal.S linux-2.6.18-xen/arch/ia64/xen/xenpal.S
---- linux-2.6.18/arch/ia64/xen/xenpal.S	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/xen/xenpal.S linux-2.6.18-xen/arch/ia64/xen/xenpal.S
+--- linux-2.6.18.3/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 @@
 +/*
@@ -27909,8 +27971,8 @@
 +	srlz.d				// seralize restoration of psr.l
 +	br.ret.sptk.many b0
 +END(xen_pal_call_static)
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/ia64/xen/xensetup.S linux-2.6.18-xen/arch/ia64/xen/xensetup.S
---- linux-2.6.18/arch/ia64/xen/xensetup.S	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/ia64/xen/xensetup.S linux-2.6.18-xen/arch/ia64/xen/xensetup.S
+--- linux-2.6.18.3/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 @@
 +/*
@@ -27967,8 +28029,8 @@
 +	mov ar.pfs=r20
 +	br.ret.sptk.many b0
 +END(HYPERVISOR_suspend)
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/um/kernel/physmem.c linux-2.6.18-xen/arch/um/kernel/physmem.c
---- linux-2.6.18/arch/um/kernel/physmem.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/um/kernel/physmem.c linux-2.6.18-xen/arch/um/kernel/physmem.c
+--- linux-2.6.18.3/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);
@@ -27988,8 +28050,8 @@
  }
  
  int is_remapped(void *virt)
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/ia32/ia32entry-xen.S linux-2.6.18-xen/arch/x86_64/ia32/ia32entry-xen.S
---- linux-2.6.18/arch/x86_64/ia32/ia32entry-xen.S	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/ia32/ia32entry-xen.S linux-2.6.18-xen/arch/x86_64/ia32/ia32entry-xen.S
+--- linux-2.6.18.3/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 @@
 +/*
@@ -28735,8 +28797,8 @@
 +	.quad compat_sys_vmsplice
 +	.quad compat_sys_move_pages
 +ia32_syscall_end:		
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/ia32/Makefile linux-2.6.18-xen/arch/x86_64/ia32/Makefile
---- linux-2.6.18/arch/x86_64/ia32/Makefile	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/ia32/Makefile linux-2.6.18-xen/arch/x86_64/ia32/Makefile
+--- linux-2.6.18.3/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 $@ \
@@ -28766,8 +28828,8 @@
 +
 +obj-y := $(call cherrypickxen, $(obj-y))
 +endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/ia32/syscall32_syscall-xen.S linux-2.6.18-xen/arch/x86_64/ia32/syscall32_syscall-xen.S
---- linux-2.6.18/arch/x86_64/ia32/syscall32_syscall-xen.S	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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. */
@@ -28798,8 +28860,8 @@
 +syscall32_sysenter:
 +	.incbin "arch/x86_64/ia32/vsyscall-sysenter.so"
 +syscall32_sysenter_end:
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/ia32/syscall32-xen.c linux-2.6.18-xen/arch/x86_64/ia32/syscall32-xen.c
---- linux-2.6.18/arch/x86_64/ia32/syscall32-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/ia32/syscall32-xen.c linux-2.6.18-xen/arch/x86_64/ia32/syscall32-xen.c
+--- linux-2.6.18.3/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 */
@@ -28930,8 +28992,8 @@
 +	wrmsrl(MSR_CSTAR, ia32_cstar_target);
 +#endif
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/ia32/vsyscall-int80.S linux-2.6.18-xen/arch/x86_64/ia32/vsyscall-int80.S
---- linux-2.6.18/arch/x86_64/ia32/vsyscall-int80.S	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/ia32/vsyscall-int80.S linux-2.6.18-xen/arch/x86_64/ia32/vsyscall-int80.S
+--- linux-2.6.18.3/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 @@
 +/*
@@ -28992,8 +29054,8 @@
 + */
 +#define SYSCALL_ENTER_KERNEL    int $0x80
 +#include "vsyscall-sigreturn.S"
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/ia32/vsyscall-sigreturn.S linux-2.6.18-xen/arch/x86_64/ia32/vsyscall-sigreturn.S
---- linux-2.6.18/arch/x86_64/ia32/vsyscall-sigreturn.S	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/ia32/vsyscall-sigreturn.S linux-2.6.18-xen/arch/x86_64/ia32/vsyscall-sigreturn.S
+--- linux-2.6.18.3/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
@@ -29002,17 +29064,17 @@
 -#include "../../i386/kernel/vsyscall-note.S"
 +#include <vsyscall-note.S>
  
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/Kconfig linux-2.6.18-xen/arch/x86_64/Kconfig
---- linux-2.6.18/arch/x86_64/Kconfig	2006-09-20 05:42:06.000000000 +0200
-+++ linux-2.6.18-xen/arch/x86_64/Kconfig	2006-11-19 14:26:33.000000000 +0100
-@@ -26,6 +26,7 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/Kconfig linux-2.6.18-xen/arch/x86_64/Kconfig
+--- linux-2.6.18.3/arch/x86_64/Kconfig	2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/arch/x86_64/Kconfig	2006-12-05 18:42:36.000000000 +0100
+@@ -30,6 +30,7 @@
  
- config LOCKDEP_SUPPORT
+ config STACKTRACE_SUPPORT
  	bool
 +	depends on !X86_64_XEN
  	default y
  
- config STACKTRACE_SUPPORT
+ config SEMAPHORE_SLEEPERS
 @@ -135,6 +136,22 @@
  
  endchoice
@@ -29195,27 +29257,16 @@
 +source "drivers/xen/Kconfig"
 +
  source "lib/Kconfig"
-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
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/kernel/acpi/Makefile linux-2.6.18-xen/arch/x86_64/kernel/acpi/Makefile
+--- linux-2.6.18.3/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/arch/x86_64/kernel/apic-xen.c linux-2.6.18-xen/arch/x86_64/kernel/apic-xen.c
---- linux-2.6.18/arch/x86_64/kernel/apic-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/kernel/apic-xen.c linux-2.6.18-xen/arch/x86_64/kernel/apic-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -29415,8 +29466,8 @@
 +
 +	return 1;
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/asm-offsets.c linux-2.6.18-xen/arch/x86_64/kernel/asm-offsets.c
---- linux-2.6.18/arch/x86_64/kernel/asm-offsets.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/kernel/asm-offsets.c linux-2.6.18-xen/arch/x86_64/kernel/asm-offsets.c
+--- linux-2.6.18.3/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));
@@ -29429,10 +29480,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/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 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/kernel/e820-xen.c linux-2.6.18-xen/arch/x86_64/kernel/e820-xen.c
+--- linux-2.6.18.3/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-12-05 18:42:36.000000000 +0100
+@@ -0,0 +1,757 @@
 +/* 
 + * Handle the memory map.
 + * The functions here do the job until bootmem takes over.
@@ -29482,7 +29533,6 @@
 +
 +/* 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; 
 +
@@ -30191,8 +30241,8 @@
 +	printk(KERN_INFO "Allocating PCI resources starting at %lx (gap: %lx:%lx)\n",
 +		pci_mem_start, gapstart, gapsize);
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/early_printk-xen.c linux-2.6.18-xen/arch/x86_64/kernel/early_printk-xen.c
---- linux-2.6.18/arch/x86_64/kernel/early_printk-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +
@@ -30499,10 +30549,10 @@
 +}
 +
 +__setup("earlyprintk=", setup_early_printk);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/entry-xen.S linux-2.6.18-xen/arch/x86_64/kernel/entry-xen.S
---- linux-2.6.18/arch/x86_64/kernel/entry-xen.S	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/arch/x86_64/kernel/entry-xen.S	2006-11-19 14:26:33.000000000 +0100
-@@ -0,0 +1,1212 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/kernel/entry-xen.S linux-2.6.18-xen/arch/x86_64/kernel/entry-xen.S
+--- linux-2.6.18.3/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-12-05 18:42:36.000000000 +0100
+@@ -0,0 +1,1213 @@
 +/*
 + *  linux/arch/x86_64/entry.S
 + *
@@ -30845,7 +30895,8 @@
 +	movq %r10,%rcx	/* fixup for C */
 +	call *sys_call_table(,%rax,8)
 +1:	movq %rax,RAX-ARGOFFSET(%rsp)
-+	jmp ret_from_sys_call
++	/* Use IRET because user could have changed frame */
++	jmp int_ret_from_sys_call
 +	CFI_ENDPROC
 +END(system_call)
 +		
@@ -31715,10 +31766,10 @@
 +	CFI_ENDPROC
 +ENDPROC(arch_unwind_init_running)
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/genapic_xen.c linux-2.6.18-xen/arch/x86_64/kernel/genapic_xen.c
---- linux-2.6.18/arch/x86_64/kernel/genapic_xen.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/arch/x86_64/kernel/genapic_xen.c	2006-11-19 14:26:33.000000000 +0100
-@@ -0,0 +1,174 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/kernel/genapic_xen.c linux-2.6.18-xen/arch/x86_64/kernel/genapic_xen.c
+--- linux-2.6.18.3/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-12-05 18:42:36.000000000 +0100
+@@ -0,0 +1,176 @@
 +/*
 + * Copyright 2004 James Cleverdon, IBM.
 + * Subject to the GNU Public License, v.2
@@ -31854,12 +31905,14 @@
 +		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)
 +{
@@ -31893,8 +31946,8 @@
 +	.cpu_mask_to_apicid = xen_cpu_mask_to_apicid,
 +	.phys_pkg_id = phys_pkg_id,
 +};
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/genapic-xen.c linux-2.6.18-xen/arch/x86_64/kernel/genapic-xen.c
---- linux-2.6.18/arch/x86_64/kernel/genapic-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/kernel/genapic-xen.c linux-2.6.18-xen/arch/x86_64/kernel/genapic-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -32040,8 +32093,8 @@
 +	xen_send_IPI_shortcut(APIC_DEST_SELF, vector, APIC_DEST_PHYSICAL);
 +#endif
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/head64-xen.c linux-2.6.18-xen/arch/x86_64/kernel/head64-xen.c
---- linux-2.6.18/arch/x86_64/kernel/head64-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/kernel/head64-xen.c linux-2.6.18-xen/arch/x86_64/kernel/head64-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -32205,8 +32258,8 @@
 +	setup_boot_cpu_data();
 +	start_kernel();
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/head-xen.S linux-2.6.18-xen/arch/x86_64/kernel/head-xen.S
---- linux-2.6.18/arch/x86_64/kernel/head-xen.S	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/kernel/head-xen.S linux-2.6.18-xen/arch/x86_64/kernel/head-xen.S
+--- linux-2.6.18.3/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 @@
 +/*
@@ -32400,8 +32453,8 @@
 +	ELFNOTE(Xen, XEN_ELFNOTE_HYPERCALL_PAGE, .quad,  hypercall_page)
 +	ELFNOTE(Xen, XEN_ELFNOTE_FEATURES,       .asciz, "writable_page_tables|writable_descriptor_tables|auto_translated_physmap|pae_pgdir_above_4gb|supervisor_mode_kernel")
 +	ELFNOTE(Xen, XEN_ELFNOTE_LOADER,         .asciz, "generic")
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/init_task.c linux-2.6.18-xen/arch/x86_64/kernel/init_task.c
---- linux-2.6.18/arch/x86_64/kernel/init_task.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/kernel/init_task.c linux-2.6.18-xen/arch/x86_64/kernel/init_task.c
+--- linux-2.6.18.3/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);
@@ -32420,8 +32473,8 @@
  
  /* Copies of the original ist values from the tss are only accessed during
   * debugging, no special alignment required.
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/io_apic-xen.c linux-2.6.18-xen/arch/x86_64/kernel/io_apic-xen.c
---- linux-2.6.18/arch/x86_64/kernel/io_apic-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/*
@@ -34687,8 +34740,8 @@
 +}
 +#endif
 +#endif /* !CONFIG_XEN */
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/ioport-xen.c linux-2.6.18-xen/arch/x86_64/kernel/ioport-xen.c
---- linux-2.6.18/arch/x86_64/kernel/ioport-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/kernel/ioport-xen.c linux-2.6.18-xen/arch/x86_64/kernel/ioport-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -34790,8 +34843,112 @@
 +
 +	return 0;
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/irq-xen.c linux-2.6.18-xen/arch/x86_64/kernel/irq-xen.c
---- linux-2.6.18/arch/x86_64/kernel/irq-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/kernel/irqflags-xen.c linux-2.6.18-xen/arch/x86_64/kernel/irqflags-xen.c
+--- linux-2.6.18.3/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-12-05 18:42:36.000000000 +0100
+@@ -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.3/arch/x86_64/kernel/irq-xen.c linux-2.6.18-xen/arch/x86_64/kernel/irq-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -34992,8 +35149,8 @@
 +        printk("unexpected IRQ trap at vector %02x\n", irq);
 +}
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/ldt-xen.c linux-2.6.18-xen/arch/x86_64/kernel/ldt-xen.c
---- linux-2.6.18/arch/x86_64/kernel/ldt-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/kernel/ldt-xen.c linux-2.6.18-xen/arch/x86_64/kernel/ldt-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -35278,9 +35435,9 @@
 +	}
 +	return ret;
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/Makefile linux-2.6.18-xen/arch/x86_64/kernel/Makefile
---- linux-2.6.18/arch/x86_64/kernel/Makefile	2006-09-20 05:42:06.000000000 +0200
-+++ linux-2.6.18-xen/arch/x86_64/kernel/Makefile	2006-11-19 14:26:33.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/kernel/Makefile linux-2.6.18-xen/arch/x86_64/kernel/Makefile
+--- linux-2.6.18.3/arch/x86_64/kernel/Makefile	2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/arch/x86_64/kernel/Makefile	2006-12-05 18:42:36.000000000 +0100
 @@ -21,11 +21,13 @@
  obj-$(CONFIG_X86_CPUID)		+= cpuid.o
  obj-$(CONFIG_SMP)		+= smp.o smpboot.o trampoline.o
@@ -35296,11 +35453,12 @@
  obj-$(CONFIG_SOFTWARE_SUSPEND)	+= suspend_asm.o
  obj-$(CONFIG_CPU_FREQ)		+= cpufreq/
  obj-$(CONFIG_EARLY_PRINTK)	+= early_printk.o
-@@ -55,3 +57,17 @@
+@@ -55,3 +57,18 @@
  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
@@ -35314,8 +35472,8 @@
 +obj-y := $(call cherrypickxen, $(obj-y))
 +extra-y := $(call cherrypickxen, $(extra-y))
 +endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/mpparse-xen.c linux-2.6.18-xen/arch/x86_64/kernel/mpparse-xen.c
---- linux-2.6.18/arch/x86_64/kernel/mpparse-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/kernel/mpparse-xen.c linux-2.6.18-xen/arch/x86_64/kernel/mpparse-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -36329,8 +36487,8 @@
 +
 +#endif /*CONFIG_X86_IO_APIC*/
 +#endif /*CONFIG_ACPI*/
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/pci-swiotlb-xen.c linux-2.6.18-xen/arch/x86_64/kernel/pci-swiotlb-xen.c
---- linux-2.6.18/arch/x86_64/kernel/pci-swiotlb-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 */
@@ -36387,10 +36545,10 @@
 +	}
 +#endif
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/process-xen.c linux-2.6.18-xen/arch/x86_64/kernel/process-xen.c
---- linux-2.6.18/arch/x86_64/kernel/process-xen.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/arch/x86_64/kernel/process-xen.c	2006-11-19 14:26:33.000000000 +0100
-@@ -0,0 +1,792 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/kernel/process-xen.c linux-2.6.18-xen/arch/x86_64/kernel/process-xen.c
+--- linux-2.6.18.3/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-12-05 18:42:36.000000000 +0100
+@@ -0,0 +1,787 @@
 +/*
 + *  linux/arch/x86-64/kernel/process.c
 + *
@@ -36854,18 +37012,6 @@
 +	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;
@@ -36932,12 +37078,19 @@
 +	if (next->gs)
 +		HYPERVISOR_set_segment_base(SEGBASE_GS_USER, next->gs); 
 +
++	/* Must be after DS reload */
++	if (prev_p->thread_info->status & TS_USEDFPU) {
++		__save_init_fpu(prev_p); /* _not_ save_init_fpu() */
++		HYPERVISOR_fpu_taskswitch(1);
++	}
++
 +	/* 
-+	 * Switch the PDA.
++	 * Switch the PDA and FPU contexts.
 +	 */
 +	prev->userrsp = read_pda(oldrsp); 
 +	write_pda(oldrsp, next->userrsp); 
 +	write_pda(pcurrent, next_p); 
++
 +	write_pda(kernelstack,
 +		  task_stack_page(next_p) + THREAD_SIZE - PDA_STACKOFFSET);
 +
@@ -37183,8 +37336,8 @@
 +{
 +}
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/setup64-xen.c linux-2.6.18-xen/arch/x86_64/kernel/setup64-xen.c
---- linux-2.6.18/arch/x86_64/kernel/setup64-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/kernel/setup64-xen.c linux-2.6.18-xen/arch/x86_64/kernel/setup64-xen.c
+--- linux-2.6.18.3/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 @@
 +/* 
@@ -37548,10 +37701,10 @@
 +
 +	fpu_init(); 
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/setup-xen.c linux-2.6.18-xen/arch/x86_64/kernel/setup-xen.c
---- linux-2.6.18/arch/x86_64/kernel/setup-xen.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/arch/x86_64/kernel/setup-xen.c	2006-11-19 14:26:33.000000000 +0100
-@@ -0,0 +1,1638 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/kernel/setup-xen.c linux-2.6.18-xen/arch/x86_64/kernel/setup-xen.c
+--- linux-2.6.18.3/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-12-05 18:42:36.000000000 +0100
+@@ -0,0 +1,1637 @@
 +/*
 + *  linux/arch/x86-64/kernel/setup.c
 + *
@@ -37620,14 +37773,13 @@
 +#include <asm/dmi.h>
 +#ifdef CONFIG_XEN
 +#include <linux/percpu.h>
++#include <linux/pfn.h>
 +#include <xen/interface/physdev.h>
 +#include "setup_arch_pre.h"
 +#include <asm/hypervisor.h>
 +#include <xen/interface/nmi.h>
 +#include <xen/features.h>
 +#include <xen/xencons.h>
-+#define PFN_UP(x)       (((x) + PAGE_SIZE-1) >> PAGE_SHIFT)
-+#define PFN_PHYS(x)     ((x) << PAGE_SHIFT)
 +#include <asm/mach-xen/setup_arch_post.h>
 +#include <xen/interface/memory.h>
 +
@@ -39190,8 +39342,8 @@
 +}
 +device_initcall(add_pcspkr);
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/smp-xen.c linux-2.6.18-xen/arch/x86_64/kernel/smp-xen.c
---- linux-2.6.18/arch/x86_64/kernel/smp-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/kernel/smp-xen.c linux-2.6.18-xen/arch/x86_64/kernel/smp-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -39794,8 +39946,8 @@
 +	return 0; /* Should not happen */
 +#endif
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/traps-xen.c linux-2.6.18-xen/arch/x86_64/kernel/traps-xen.c
---- linux-2.6.18/arch/x86_64/kernel/traps-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/kernel/traps-xen.c linux-2.6.18-xen/arch/x86_64/kernel/traps-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -40970,8 +41122,8 @@
 +}
 +__setup("call_trace=", call_trace_setup);
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/vmlinux.lds.S linux-2.6.18-xen/arch/x86_64/kernel/vmlinux.lds.S
---- linux-2.6.18/arch/x86_64/kernel/vmlinux.lds.S	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/kernel/vmlinux.lds.S linux-2.6.18-xen/arch/x86_64/kernel/vmlinux.lds.S
+--- linux-2.6.18.3/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)
@@ -41054,8 +41206,8 @@
 +
 +  NOTES
  }
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/vsyscall-xen.c linux-2.6.18-xen/arch/x86_64/kernel/vsyscall-xen.c
---- linux-2.6.18/arch/x86_64/kernel/vsyscall-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/kernel/vsyscall-xen.c linux-2.6.18-xen/arch/x86_64/kernel/vsyscall-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -41297,8 +41449,8 @@
 +}
 +
 +__initcall(vsyscall_init);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/kernel/xen_entry.S linux-2.6.18-xen/arch/x86_64/kernel/xen_entry.S
---- linux-2.6.18/arch/x86_64/kernel/xen_entry.S	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/kernel/xen_entry.S linux-2.6.18-xen/arch/x86_64/kernel/xen_entry.S
+--- linux-2.6.18.3/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 @@
 +/*
@@ -41341,8 +41493,8 @@
 +VGCF_IN_SYSCALL = (1<<8)
 +        
 +	
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/Makefile linux-2.6.18-xen/arch/x86_64/Makefile
---- linux-2.6.18/arch/x86_64/Makefile	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/Makefile linux-2.6.18-xen/arch/x86_64/Makefile
+--- linux-2.6.18.3/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)
@@ -41385,8 +41537,8 @@
  
  archclean:
  	$(Q)$(MAKE) $(clean)=$(boot)
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/mm/fault-xen.c linux-2.6.18-xen/arch/x86_64/mm/fault-xen.c
---- linux-2.6.18/arch/x86_64/mm/fault-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/mm/fault-xen.c linux-2.6.18-xen/arch/x86_64/mm/fault-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -42112,8 +42264,8 @@
 +	return 1;
 +}
 +__setup("pagefaulttrace", enable_pagefaulttrace);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/mm/init-xen.c linux-2.6.18-xen/arch/x86_64/mm/init-xen.c
---- linux-2.6.18/arch/x86_64/mm/init-xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/mm/init-xen.c linux-2.6.18-xen/arch/x86_64/mm/init-xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -43316,8 +43468,8 @@
 +{
 +	return (addr >= VSYSCALL_START) && (addr < VSYSCALL_END);
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/mm/Makefile linux-2.6.18-xen/arch/x86_64/mm/Makefile
---- linux-2.6.18/arch/x86_64/mm/Makefile	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/mm/Makefile linux-2.6.18-xen/arch/x86_64/mm/Makefile
+--- linux-2.6.18.3/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
@@ -43333,10 +43485,10 @@
 +
 +obj-y := $(call cherrypickxen, $(obj-y))
 +endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/mm/pageattr-xen.c linux-2.6.18-xen/arch/x86_64/mm/pageattr-xen.c
---- linux-2.6.18/arch/x86_64/mm/pageattr-xen.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/arch/x86_64/mm/pageattr-xen.c	2006-11-19 14:26:34.000000000 +0100
-@@ -0,0 +1,396 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/mm/pageattr-xen.c linux-2.6.18-xen/arch/x86_64/mm/pageattr-xen.c
+--- linux-2.6.18.3/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-12-05 18:42:36.000000000 +0100
+@@ -0,0 +1,398 @@
 +/* 
 + * Copyright 2002 Andi Kleen, SuSE Labs. 
 + * Thanks to Ben LaHaise for precious feedback.
@@ -43660,11 +43812,13 @@
 +	 */
 +#ifndef CONFIG_XEN
 + 	BUG_ON(PageReserved(kpte_page));
++#else
++	if(!PageReserved(kpte_page))
 +#endif
-+	if (page_private(kpte_page) == 0) {
-+		save_page(kpte_page);
-+		revert_page(address, ref_prot);
-+	}
++		if (page_private(kpte_page) == 0) {
++			save_page(kpte_page);
++			revert_page(address, ref_prot);
++		}
 +	return 0;
 +} 
 +
@@ -43733,8 +43887,8 @@
 +
 +EXPORT_SYMBOL(change_page_attr);
 +EXPORT_SYMBOL(global_flush_tlb);
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/oprofile/Makefile linux-2.6.18-xen/arch/x86_64/oprofile/Makefile
---- linux-2.6.18/arch/x86_64/oprofile/Makefile	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/oprofile/Makefile linux-2.6.18-xen/arch/x86_64/oprofile/Makefile
+--- linux-2.6.18.3/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 \
@@ -43750,8 +43904,8 @@
 -
 +endif
  oprofile-y = $(DRIVER_OBJS) $(addprefix ../../i386/oprofile/, $(OPROFILE-y))
-diff -urN -x .hg -x .hgtags linux-2.6.18/arch/x86_64/pci/Makefile linux-2.6.18-xen/arch/x86_64/pci/Makefile
---- linux-2.6.18/arch/x86_64/pci/Makefile	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/arch/x86_64/pci/Makefile linux-2.6.18-xen/arch/x86_64/pci/Makefile
+--- linux-2.6.18.3/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 @@
  
@@ -43777,8 +43931,8 @@
 +
 +obj-y := $(call cherrypickxen, $(obj-y))
 +endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/acpi/Kconfig linux-2.6.18-xen/drivers/acpi/Kconfig
---- linux-2.6.18/drivers/acpi/Kconfig	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/acpi/Kconfig linux-2.6.18-xen/drivers/acpi/Kconfig
+--- linux-2.6.18.3/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 @@
  
@@ -43797,8 +43951,8 @@
  	default y
  	help
  	  The Power Management Timer is available on all ACPI-capable,
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/char/hangcheck-timer.c linux-2.6.18-xen/drivers/char/hangcheck-timer.c
---- linux-2.6.18/drivers/char/hangcheck-timer.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/char/hangcheck-timer.c linux-2.6.18-xen/drivers/char/hangcheck-timer.c
+--- linux-2.6.18.3/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);
@@ -43809,8 +43963,8 @@
  # define HAVE_MONOTONIC
  # define TIMER_FREQ 1000000000ULL
  #elif defined(CONFIG_IA64)
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/char/mem.c linux-2.6.18-xen/drivers/char/mem.c
---- linux-2.6.18/drivers/char/mem.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/char/mem.c linux-2.6.18-xen/drivers/char/mem.c
+--- linux-2.6.18.3/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 @@
  }
@@ -43846,8 +44000,8 @@
  
  static const struct file_operations kmem_fops = {
  	.llseek		= memory_lseek,
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/char/tpm/Kconfig linux-2.6.18-xen/drivers/char/tpm/Kconfig
---- linux-2.6.18/drivers/char/tpm/Kconfig	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/char/tpm/Kconfig linux-2.6.18-xen/drivers/char/tpm/Kconfig
+--- linux-2.6.18.3/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 @@
  
@@ -43873,8 +44027,8 @@
 +	  will be called tpm_xenu.
  
 +endmenu
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/char/tpm/Makefile linux-2.6.18-xen/drivers/char/tpm/Makefile
---- linux-2.6.18/drivers/char/tpm/Makefile	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/char/tpm/Makefile linux-2.6.18-xen/drivers/char/tpm/Makefile
+--- linux-2.6.18.3/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
@@ -43882,8 +44036,8 @@
  obj-$(CONFIG_TCG_INFINEON) += tpm_infineon.o
 +obj-$(CONFIG_TCG_XEN) += tpm_xenu.o
 +tpm_xenu-y = tpm_xen.o tpm_vtpm.o
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/char/tpm/tpm.c linux-2.6.18-xen/drivers/char/tpm/tpm.c
---- linux-2.6.18/drivers/char/tpm/tpm.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/char/tpm/tpm.c linux-2.6.18-xen/drivers/char/tpm/tpm.c
+--- linux-2.6.18.3/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 @@
  
@@ -44005,9 +44159,9 @@
  	return ret_size;
  }
  EXPORT_SYMBOL_GPL(tpm_read);
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/char/tpm/tpm.h linux-2.6.18-xen/drivers/char/tpm/tpm.h
---- linux-2.6.18/drivers/char/tpm/tpm.h	2006-09-20 05:42:06.000000000 +0200
-+++ linux-2.6.18-xen/drivers/char/tpm/tpm.h	2006-11-19 14:26:36.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/char/tpm/tpm.h linux-2.6.18-xen/drivers/char/tpm/tpm.h
+--- linux-2.6.18.3/drivers/char/tpm/tpm.h	2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/drivers/char/tpm/tpm.h	2006-12-05 18:42:36.000000000 +0100
 @@ -61,6 +61,7 @@
  	const u8 req_complete_mask;
  	const u8 req_complete_val;
@@ -44030,14 +44184,14 @@
  
 +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/drivers/char/tpm/tpm_vtpm.c linux-2.6.18-xen/drivers/char/tpm/tpm_vtpm.c
---- linux-2.6.18/drivers/char/tpm/tpm_vtpm.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/char/tpm/tpm_vtpm.c linux-2.6.18-xen/drivers/char/tpm/tpm_vtpm.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -44587,8 +44741,8 @@
 +	tpm_remove_hardware(dev);
 +	kfree(vtpms);
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/char/tpm/tpm_vtpm.h linux-2.6.18-xen/drivers/char/tpm/tpm_vtpm.h
---- linux-2.6.18/drivers/char/tpm/tpm_vtpm.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/char/tpm/tpm_vtpm.h linux-2.6.18-xen/drivers/char/tpm/tpm_vtpm.h
+--- linux-2.6.18.3/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
@@ -44659,8 +44813,8 @@
 +}
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/char/tpm/tpm_xen.c linux-2.6.18-xen/drivers/char/tpm/tpm_xen.c
---- linux-2.6.18/drivers/char/tpm/tpm_xen.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/char/tpm/tpm_xen.c linux-2.6.18-xen/drivers/char/tpm/tpm_xen.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -45419,8 +45573,8 @@
 +module_init(tpmif_init);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/char/tty_io.c linux-2.6.18-xen/drivers/char/tty_io.c
---- linux-2.6.18/drivers/char/tty_io.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/char/tty_io.c linux-2.6.18-xen/drivers/char/tty_io.c
+--- linux-2.6.18.3/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 */
@@ -45457,8 +45611,8 @@
  #endif
  	return 0;
  }
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/firmware/Kconfig linux-2.6.18-xen/drivers/firmware/Kconfig
---- linux-2.6.18/drivers/firmware/Kconfig	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/firmware/Kconfig linux-2.6.18-xen/drivers/firmware/Kconfig
+--- linux-2.6.18.3/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 @@
  
@@ -45469,8 +45623,8 @@
  	help
  	  Say Y or M here if you want to enable BIOS Enhanced Disk Drive
  	  Services real mode BIOS calls to determine which disk
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/ide/ide-lib.c linux-2.6.18-xen/drivers/ide/ide-lib.c
---- linux-2.6.18/drivers/ide/ide-lib.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/ide/ide-lib.c linux-2.6.18-xen/drivers/ide/ide-lib.c
+--- linux-2.6.18.3/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 @@
  {
@@ -45487,8 +45641,8 @@
  			addr = HWIF(drive)->pci_dev->dma_mask;
  	}
  
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/Makefile linux-2.6.18-xen/drivers/Makefile
---- linux-2.6.18/drivers/Makefile	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/Makefile linux-2.6.18-xen/drivers/Makefile
+--- linux-2.6.18.3/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/
@@ -45498,8 +45652,8 @@
  obj-$(CONFIG_IDE)		+= ide/
  obj-$(CONFIG_FC4)		+= fc4/
  obj-$(CONFIG_SCSI)		+= scsi/
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/oprofile/buffer_sync.c linux-2.6.18-xen/drivers/oprofile/buffer_sync.c
---- linux-2.6.18/drivers/oprofile/buffer_sync.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/oprofile/buffer_sync.c linux-2.6.18-xen/drivers/oprofile/buffer_sync.c
+--- linux-2.6.18.3/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 @@
   *
@@ -45621,8 +45775,8 @@
  				}
  			}
  		}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/oprofile/cpu_buffer.c linux-2.6.18-xen/drivers/oprofile/cpu_buffer.c
---- linux-2.6.18/drivers/oprofile/cpu_buffer.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/oprofile/cpu_buffer.c linux-2.6.18-xen/drivers/oprofile/cpu_buffer.c
+--- linux-2.6.18.3/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 @@
   *
@@ -45733,8 +45887,8 @@
  /*
   * This serves to avoid cpu buffer overflow, and makes sure
   * the task mortuary progresses
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/oprofile/cpu_buffer.h linux-2.6.18-xen/drivers/oprofile/cpu_buffer.h
---- linux-2.6.18/drivers/oprofile/cpu_buffer.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/oprofile/cpu_buffer.h linux-2.6.18-xen/drivers/oprofile/cpu_buffer.h
+--- linux-2.6.18.3/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;
@@ -45758,8 +45912,8 @@
 +#define CPU_DOMAIN_SWITCH       4
  
  #endif /* OPROFILE_CPU_BUFFER_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/oprofile/event_buffer.h linux-2.6.18-xen/drivers/oprofile/event_buffer.h
---- linux-2.6.18/drivers/oprofile/event_buffer.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/oprofile/event_buffer.h linux-2.6.18-xen/drivers/oprofile/event_buffer.h
+--- linux-2.6.18.3/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
@@ -45783,8 +45937,8 @@
  /* add data to the event buffer */
  void add_event_entry(unsigned long data);
   
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/oprofile/oprof.c linux-2.6.18-xen/drivers/oprofile/oprof.c
---- linux-2.6.18/drivers/oprofile/oprof.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/oprofile/oprof.c linux-2.6.18-xen/drivers/oprofile/oprof.c
+--- linux-2.6.18.3/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
@@ -45839,8 +45993,8 @@
  int oprofile_setup(void)
  {
  	int err;
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/oprofile/oprof.h linux-2.6.18-xen/drivers/oprofile/oprof.h
---- linux-2.6.18/drivers/oprofile/oprof.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/oprofile/oprof.h linux-2.6.18-xen/drivers/oprofile/oprof.h
+--- linux-2.6.18.3/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);
@@ -45851,8 +46005,8 @@
 +int oprofile_set_passive(int passive_domains[], unsigned int pdomains);
   
  #endif /* OPROF_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/oprofile/oprofile_files.c linux-2.6.18-xen/drivers/oprofile/oprofile_files.c
---- linux-2.6.18/drivers/oprofile/oprofile_files.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/oprofile/oprofile_files.c linux-2.6.18-xen/drivers/oprofile/oprofile_files.c
+--- linux-2.6.18.3/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
@@ -46087,8 +46241,8 @@
  	oprofilefs_create_file(sb, root, "buffer", &event_buffer_fops);
  	oprofilefs_create_ulong(sb, root, "buffer_size", &fs_buffer_size);
  	oprofilefs_create_ulong(sb, root, "buffer_watershed", &fs_buffer_watershed);
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/pci/Kconfig linux-2.6.18-xen/drivers/pci/Kconfig
---- linux-2.6.18/drivers/pci/Kconfig	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/pci/Kconfig linux-2.6.18-xen/drivers/pci/Kconfig
+--- linux-2.6.18.3/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)"
@@ -46098,30 +46252,8 @@
  	help
  	   This allows device drivers to enable MSI (Message Signaled
  	   Interrupts).  Message Signaled Interrupts enable a device to
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/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
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/serial/Kconfig linux-2.6.18-xen/drivers/serial/Kconfig
+--- linux-2.6.18.3/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
@@ -46131,8 +46263,8 @@
  	select SERIAL_CORE
  	---help---
  	  This selects whether you want to include the driver for the standard
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/balloon/balloon.c linux-2.6.18-xen/drivers/xen/balloon/balloon.c
---- linux-2.6.18/drivers/xen/balloon/balloon.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/balloon/balloon.c linux-2.6.18-xen/drivers/xen/balloon/balloon.c
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -46772,14 +46904,14 @@
 +EXPORT_SYMBOL_GPL(balloon_release_driver_page);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/balloon/Makefile linux-2.6.18-xen/drivers/xen/balloon/Makefile
---- linux-2.6.18/drivers/xen/balloon/Makefile	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/balloon/Makefile linux-2.6.18-xen/drivers/xen/balloon/Makefile
+--- linux-2.6.18.3/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/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
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/blkback/blkback.c linux-2.6.18-xen/drivers/xen/blkback/blkback.c
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -47331,8 +47463,8 @@
 +module_init(blkif_init);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blkback/common.h linux-2.6.18-xen/drivers/xen/blkback/common.h
---- linux-2.6.18/drivers/xen/blkback/common.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/blkback/common.h linux-2.6.18-xen/drivers/xen/blkback/common.h
+--- linux-2.6.18.3/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 @@
 +/* 
@@ -47468,8 +47600,8 @@
 +int blkif_schedule(void *arg);
 +
 +#endif /* __BLKIF__BACKEND__COMMON_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blkback/interface.c linux-2.6.18-xen/drivers/xen/blkback/interface.c
---- linux-2.6.18/drivers/xen/blkback/interface.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/blkback/interface.c linux-2.6.18-xen/drivers/xen/blkback/interface.c
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -47643,15 +47775,15 @@
 +	blkif_cachep = kmem_cache_create("blkif_cache", sizeof(blkif_t), 
 +					 0, 0, NULL, NULL);
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blkback/Makefile linux-2.6.18-xen/drivers/xen/blkback/Makefile
---- linux-2.6.18/drivers/xen/blkback/Makefile	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/blkback/Makefile linux-2.6.18-xen/drivers/xen/blkback/Makefile
+--- linux-2.6.18.3/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/drivers/xen/blkback/vbd.c linux-2.6.18-xen/drivers/xen/blkback/vbd.c
---- linux-2.6.18/drivers/xen/blkback/vbd.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/blkback/vbd.c linux-2.6.18-xen/drivers/xen/blkback/vbd.c
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -47773,8 +47905,8 @@
 + out:
 +	return rc;
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blkback/xenbus.c linux-2.6.18-xen/drivers/xen/blkback/xenbus.c
---- linux-2.6.18/drivers/xen/blkback/xenbus.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/blkback/xenbus.c linux-2.6.18-xen/drivers/xen/blkback/xenbus.c
+--- linux-2.6.18.3/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
@@ -48245,9 +48377,9 @@
 +{
 +	xenbus_register_backend(&blkback);
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blkfront/blkfront.c linux-2.6.18-xen/drivers/xen/blkfront/blkfront.c
---- linux-2.6.18/drivers/xen/blkfront/blkfront.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/blkfront/blkfront.c	2006-11-19 14:26:55.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/blkfront/blkfront.c linux-2.6.18-xen/drivers/xen/blkfront/blkfront.c
+--- linux-2.6.18.3/drivers/xen/blkfront/blkfront.c	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/blkfront/blkfront.c	2006-12-05 18:42:37.000000000 +0100
 @@ -0,0 +1,846 @@
 +/******************************************************************************
 + * blkfront.c
@@ -48524,7 +48656,7 @@
 +			xenbus_dev_fatal(dev, -ENODEV, "bdget failed");
 +
 +		mutex_lock(&bd->bd_mutex);
-+		if (info->users > 0 && system_state == SYSTEM_RUNNING)
++		if (info->users > 0)
 +			xenbus_dev_error(dev, -EBUSY,
 +					 "Device in use; refusing to close");
 +		else
@@ -49095,8 +49227,8 @@
 +module_exit(xlblk_exit);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blkfront/block.h linux-2.6.18-xen/drivers/xen/blkfront/block.h
---- linux-2.6.18/drivers/xen/blkfront/block.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/blkfront/block.h linux-2.6.18-xen/drivers/xen/blkfront/block.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -49253,8 +49385,8 @@
 +void xlvbd_del(struct blkfront_info *info);
 +
 +#endif /* __XEN_DRIVERS_BLOCK_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blkfront/Kconfig linux-2.6.18-xen/drivers/xen/blkfront/Kconfig
---- linux-2.6.18/drivers/xen/blkfront/Kconfig	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/blkfront/Kconfig linux-2.6.18-xen/drivers/xen/blkfront/Kconfig
+--- linux-2.6.18.3/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 @@
 +
@@ -49263,8 +49395,8 @@
 +	depends on ARCH_XEN
 +	help
 +	  Block device driver for Xen
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blkfront/Makefile linux-2.6.18-xen/drivers/xen/blkfront/Makefile
---- linux-2.6.18/drivers/xen/blkfront/Makefile	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/blkfront/Makefile linux-2.6.18-xen/drivers/xen/blkfront/Makefile
+--- linux-2.6.18.3/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 @@
 +
@@ -49272,8 +49404,8 @@
 +
 +xenblk-objs := blkfront.o vbd.o
 +
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blkfront/vbd.c linux-2.6.18-xen/drivers/xen/blkfront/vbd.c
---- linux-2.6.18/drivers/xen/blkfront/vbd.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/blkfront/vbd.c linux-2.6.18-xen/drivers/xen/blkfront/vbd.c
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -49594,9 +49726,9 @@
 +	blk_cleanup_queue(info->rq);
 +	info->rq = NULL;
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blktap/blktap.c linux-2.6.18-xen/drivers/xen/blktap/blktap.c
---- linux-2.6.18/drivers/xen/blktap/blktap.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/blktap/blktap.c	2006-11-19 14:26:55.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/blktap/blktapmain.c linux-2.6.18-xen/drivers/xen/blktap/blktapmain.c
+--- linux-2.6.18.3/drivers/xen/blktap/blktapmain.c	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/blktap/blktapmain.c	2006-12-05 18:42:37.000000000 +0100
 @@ -0,0 +1,1393 @@
 +/******************************************************************************
 + * drivers/xen/blktap/blktap.c
@@ -50991,8 +51123,8 @@
 +module_init(blkif_init);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blktap/common.h linux-2.6.18-xen/drivers/xen/blktap/common.h
---- linux-2.6.18/drivers/xen/blktap/common.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/blktap/common.h linux-2.6.18-xen/drivers/xen/blktap/common.h
+--- linux-2.6.18.3/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 @@
 +/* 
@@ -51115,8 +51247,8 @@
 +void signal_tapdisk(int idx);
 +
 +#endif /* __BLKIF__BACKEND__COMMON_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blktap/interface.c linux-2.6.18-xen/drivers/xen/blktap/interface.c
---- linux-2.6.18/drivers/xen/blktap/interface.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/blktap/interface.c linux-2.6.18-xen/drivers/xen/blktap/interface.c
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -51283,15 +51415,18 @@
 +	blkif_cachep = kmem_cache_create("blktapif_cache", sizeof(blkif_t), 
 +					 0, 0, NULL, NULL);
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blktap/Makefile linux-2.6.18-xen/drivers/xen/blktap/Makefile
---- linux-2.6.18/drivers/xen/blktap/Makefile	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/blktap/Makefile	2006-11-19 14:26:55.000000000 +0100
-@@ -0,0 +1,3 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/blktap/Makefile linux-2.6.18-xen/drivers/xen/blktap/Makefile
+--- linux-2.6.18.3/drivers/xen/blktap/Makefile	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/blktap/Makefile	2006-12-05 18:42:37.000000000 +0100
+@@ -0,0 +1,6 @@
 +LINUXINCLUDE += -I../xen/include/public/io
-+obj-y	:= xenbus.o interface.o blktap.o 
 +
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/blktap/xenbus.c linux-2.6.18-xen/drivers/xen/blktap/xenbus.c
---- linux-2.6.18/drivers/xen/blktap/xenbus.c	1970-01-01 01:00:00.000000000 +0100
++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.3/drivers/xen/blktap/xenbus.c linux-2.6.18-xen/drivers/xen/blktap/xenbus.c
+--- linux-2.6.18.3/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
@@ -51660,14 +51795,14 @@
 +{
 +	xenbus_register_backend(&blktap);
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/char/Makefile linux-2.6.18-xen/drivers/xen/char/Makefile
---- linux-2.6.18/drivers/xen/char/Makefile	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/char/Makefile linux-2.6.18-xen/drivers/xen/char/Makefile
+--- linux-2.6.18.3/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/drivers/xen/char/mem.c linux-2.6.18-xen/drivers/xen/char/mem.c
---- linux-2.6.18/drivers/xen/char/mem.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/char/mem.c linux-2.6.18-xen/drivers/xen/char/mem.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -51850,8 +51985,8 @@
 +	.mmap		= mmap_mem,
 +	.open		= open_mem,
 +};
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/console/console.c linux-2.6.18-xen/drivers/xen/console/console.c
---- linux-2.6.18/drivers/xen/console/console.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/console/console.c linux-2.6.18-xen/drivers/xen/console/console.c
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -52542,14 +52677,14 @@
 +module_init(xencons_init);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/console/Makefile linux-2.6.18-xen/drivers/xen/console/Makefile
---- linux-2.6.18/drivers/xen/console/Makefile	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/console/Makefile linux-2.6.18-xen/drivers/xen/console/Makefile
+--- linux-2.6.18.3/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/drivers/xen/console/xencons_ring.c linux-2.6.18-xen/drivers/xen/console/xencons_ring.c
---- linux-2.6.18/drivers/xen/console/xencons_ring.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/console/xencons_ring.c linux-2.6.18-xen/drivers/xen/console/xencons_ring.c
+--- linux-2.6.18.3/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 @@
 +/* 
@@ -52695,8 +52830,8 @@
 +{
 +	(void)xencons_ring_init();
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/core/cpu_hotplug.c linux-2.6.18-xen/drivers/xen/core/cpu_hotplug.c
---- linux-2.6.18/drivers/xen/core/cpu_hotplug.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/core/cpu_hotplug.c linux-2.6.18-xen/drivers/xen/core/cpu_hotplug.c
+--- linux-2.6.18.3/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 @@
 +
@@ -52887,8 +53022,8 @@
 +{
 +	xenbus_allowed_cpumask = cpu_present_map;
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/core/evtchn.c linux-2.6.18-xen/drivers/xen/core/evtchn.c
---- linux-2.6.18/drivers/xen/core/evtchn.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/core/evtchn.c linux-2.6.18-xen/drivers/xen/core/evtchn.c
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -53759,8 +53894,8 @@
 +		irq_desc[pirq_to_irq(i)].chip    = &pirq_type;
 +	}
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/core/features.c linux-2.6.18-xen/drivers/xen/core/features.c
---- linux-2.6.18/drivers/xen/core/features.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/core/features.c linux-2.6.18-xen/drivers/xen/core/features.c
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -53793,8 +53928,8 @@
 +			xen_features[i*32+j] = !!(fi.submap & 1<<j);
 +	}
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/core/gnttab.c linux-2.6.18-xen/drivers/xen/core/gnttab.c
---- linux-2.6.18/drivers/xen/core/gnttab.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/core/gnttab.c linux-2.6.18-xen/drivers/xen/core/gnttab.c
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -54280,8 +54415,8 @@
 +#ifdef CONFIG_XEN
 +core_initcall(gnttab_init);
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/core/hypervisor_sysfs.c linux-2.6.18-xen/drivers/xen/core/hypervisor_sysfs.c
---- linux-2.6.18/drivers/xen/core/hypervisor_sysfs.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/core/hypervisor_sysfs.c linux-2.6.18-xen/drivers/xen/core/hypervisor_sysfs.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -54343,8 +54478,8 @@
 +
 +device_initcall(hypervisor_subsys_init);
 +EXPORT_SYMBOL_GPL(hypervisor_subsys);
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/core/Makefile linux-2.6.18-xen/drivers/xen/core/Makefile
---- linux-2.6.18/drivers/xen/core/Makefile	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/core/Makefile linux-2.6.18-xen/drivers/xen/core/Makefile
+--- linux-2.6.18.3/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 @@
 +#
@@ -54360,8 +54495,8 @@
 +obj-$(CONFIG_XEN_SKBUFF)	+= skbuff.o
 +obj-$(CONFIG_XEN_REBOOT)	+= reboot.o
 +obj-$(CONFIG_XEN_SMPBOOT)	+= smpboot.o
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/core/reboot.c linux-2.6.18-xen/drivers/xen/core/reboot.c
---- linux-2.6.18/drivers/xen/core/reboot.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/core/reboot.c linux-2.6.18-xen/drivers/xen/core/reboot.c
+--- linux-2.6.18.3/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__
@@ -54748,8 +54883,8 @@
 +}
 +
 +subsys_initcall(setup_shutdown_event);
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/core/skbuff.c linux-2.6.18-xen/drivers/xen/core/skbuff.c
---- linux-2.6.18/drivers/xen/core/skbuff.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/core/skbuff.c linux-2.6.18-xen/drivers/xen/core/skbuff.c
+--- linux-2.6.18.3/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 @@
 +
@@ -54896,8 +55031,8 @@
 +core_initcall(skbuff_init);
 +
 +EXPORT_SYMBOL(__dev_alloc_skb);
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/core/smpboot.c linux-2.6.18-xen/drivers/xen/core/smpboot.c
---- linux-2.6.18/drivers/xen/core/smpboot.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/core/smpboot.c linux-2.6.18-xen/drivers/xen/core/smpboot.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -55329,8 +55464,8 @@
 +	return -EINVAL;
 +}
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/core/xen_proc.c linux-2.6.18-xen/drivers/xen/core/xen_proc.c
---- linux-2.6.18/drivers/xen/core/xen_proc.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/core/xen_proc.c linux-2.6.18-xen/drivers/xen/core/xen_proc.c
+--- linux-2.6.18.3/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 @@
 +
@@ -55351,8 +55486,8 @@
 +{
 +	remove_proc_entry(name, xen_base);
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/core/xen_sysfs.c linux-2.6.18-xen/drivers/xen/core/xen_sysfs.c
---- linux-2.6.18/drivers/xen/core/xen_sysfs.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/core/xen_sysfs.c linux-2.6.18-xen/drivers/xen/core/xen_sysfs.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -55733,8 +55868,8 @@
 +
 +module_init(hyper_sysfs_init);
 +module_exit(hyper_sysfs_exit);
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/evtchn/evtchn.c linux-2.6.18-xen/drivers/xen/evtchn/evtchn.c
---- linux-2.6.18/drivers/xen/evtchn/evtchn.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/evtchn/evtchn.c linux-2.6.18-xen/drivers/xen/evtchn/evtchn.c
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -56193,14 +56328,14 @@
 +module_exit(evtchn_cleanup);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/evtchn/Makefile linux-2.6.18-xen/drivers/xen/evtchn/Makefile
---- linux-2.6.18/drivers/xen/evtchn/Makefile	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/evtchn/Makefile linux-2.6.18-xen/drivers/xen/evtchn/Makefile
+--- linux-2.6.18.3/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/drivers/xen/Kconfig linux-2.6.18-xen/drivers/xen/Kconfig
---- linux-2.6.18/drivers/xen/Kconfig	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/Kconfig linux-2.6.18-xen/drivers/xen/Kconfig
+--- linux-2.6.18.3/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 @@
 +#
@@ -56463,8 +56598,8 @@
 +	depends on SMP
 +
 +endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/Makefile linux-2.6.18-xen/drivers/xen/Makefile
---- linux-2.6.18/drivers/xen/Makefile	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/Makefile linux-2.6.18-xen/drivers/xen/Makefile
+--- linux-2.6.18.3/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/
@@ -56484,9 +56619,9 @@
 +obj-$(CONFIG_XEN_NETDEV_FRONTEND)	+= netfront/
 +obj-$(CONFIG_XEN_PCIDEV_BACKEND)	+= pciback/
 +obj-$(CONFIG_XEN_PCIDEV_FRONTEND)	+= pcifront/
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/netback/common.h linux-2.6.18-xen/drivers/xen/netback/common.h
---- linux-2.6.18/drivers/xen/netback/common.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/netback/common.h	2006-11-19 14:26:56.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/netback/common.h linux-2.6.18-xen/drivers/xen/netback/common.h
+--- linux-2.6.18.3/drivers/xen/netback/common.h	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/netback/common.h	2006-12-05 18:42:37.000000000 +0100
 @@ -0,0 +1,141 @@
 +/******************************************************************************
 + * arch/xen/drivers/netif/backend/common.h
@@ -56596,7 +56731,7 @@
 +
 +void netif_disconnect(netif_t *netif);
 +
-+netif_t *netif_alloc(domid_t domid, unsigned int handle, u8 be_mac[ETH_ALEN]);
++netif_t *netif_alloc(domid_t domid, unsigned int handle);
 +int netif_map(netif_t *netif, unsigned long tx_ring_ref,
 +	      unsigned long rx_ring_ref, unsigned int evtchn);
 +
@@ -56629,10 +56764,10 @@
 +}
 +
 +#endif /* __NETIF__BACKEND__COMMON_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/netback/interface.c linux-2.6.18-xen/drivers/xen/netback/interface.c
---- linux-2.6.18/drivers/xen/netback/interface.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/netback/interface.c	2006-11-19 14:26:56.000000000 +0100
-@@ -0,0 +1,357 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/netback/interface.c linux-2.6.18-xen/drivers/xen/netback/interface.c
+--- linux-2.6.18.3/drivers/xen/netback/interface.c	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/netback/interface.c	2006-12-05 18:42:37.000000000 +0100
+@@ -0,0 +1,352 @@
 +/******************************************************************************
 + * arch/xen/drivers/netif/backend/interface.c
 + * 
@@ -56761,7 +56896,7 @@
 +	.get_link = ethtool_op_get_link,
 +};
 +
-+netif_t *netif_alloc(domid_t domid, unsigned int handle, u8 be_mac[ETH_ALEN])
++netif_t *netif_alloc(domid_t domid, unsigned int handle)
 +{
 +	int err = 0, i;
 +	struct net_device *dev;
@@ -56788,6 +56923,7 @@
 +	netif->credit_bytes = netif->remaining_credit = ~0UL;
 +	netif->credit_usec  = 0UL;
 +	init_timer(&netif->credit_timeout);
++	netif->credit_timeout.expires = jiffies;
 +
 +	dev->hard_start_xmit = netif_be_start_xmit;
 +	dev->get_stats       = netif_be_get_stats;
@@ -56803,20 +56939,14 @@
 +		printk(KERN_WARNING "netbk: WARNING: device '%s' has non-zero "
 +		       "queue length (%lu)!\n", dev->name, dev->tx_queue_len);
 +
-+	for (i = 0; i < ETH_ALEN; i++)
-+		if (be_mac[i] != 0)
-+			break;
-+	if (i == ETH_ALEN) {
-+		/*
-+		 * Initialise a dummy MAC address. We choose the numerically
-+		 * largest non-broadcast address to prevent the address getting
-+		 * stolen by an Ethernet bridge for STP purposes.
-+		 * (FE:FF:FF:FF:FF:FF)
-+		 */ 
-+		memset(dev->dev_addr, 0xFF, ETH_ALEN);
-+		dev->dev_addr[0] &= ~0x01;
-+	} else
-+		memcpy(dev->dev_addr, be_mac, ETH_ALEN);
++	/*
++	 * Initialise a dummy MAC address. We choose the numerically
++	 * largest non-broadcast address to prevent the address getting
++	 * stolen by an Ethernet bridge for STP purposes.
++	 * (FE:FF:FF:FF:FF:FF)
++	 */ 
++	memset(dev->dev_addr, 0xFF, ETH_ALEN);
++	dev->dev_addr[0] &= ~0x01;
 +
 +	rtnl_lock();
 +	err = register_netdevice(dev);
@@ -56990,8 +57120,8 @@
 +	}
 +	netif_free(netif);
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/netback/loopback.c linux-2.6.18-xen/drivers/xen/netback/loopback.c
---- linux-2.6.18/drivers/xen/netback/loopback.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/netback/loopback.c linux-2.6.18-xen/drivers/xen/netback/loopback.c
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -57314,8 +57444,8 @@
 +module_exit(loopback_exit);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/netback/Makefile linux-2.6.18-xen/drivers/xen/netback/Makefile
---- linux-2.6.18/drivers/xen/netback/Makefile	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/netback/Makefile linux-2.6.18-xen/drivers/xen/netback/Makefile
+--- linux-2.6.18.3/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
@@ -57323,10 +57453,10 @@
 +
 +netbk-y   := netback.o xenbus.o interface.o
 +netloop-y := loopback.o
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/netback/netback.c linux-2.6.18-xen/drivers/xen/netback/netback.c
---- linux-2.6.18/drivers/xen/netback/netback.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/netback/netback.c	2006-11-19 14:26:56.000000000 +0100
-@@ -0,0 +1,1485 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/netback/netback.c linux-2.6.18-xen/drivers/xen/netback/netback.c
+--- linux-2.6.18.3/drivers/xen/netback/netback.c	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/netback/netback.c	2006-12-05 18:42:37.000000000 +0100
+@@ -0,0 +1,1510 @@
 +/******************************************************************************
 + * drivers/xen/netback/netback.c
 + * 
@@ -57408,7 +57538,7 @@
 +
 +#define PKT_PROT_LEN 64
 +
-+static struct {
++static struct pending_tx_info {
 +	netif_tx_request_t req;
 +	netif_t *netif;
 +} pending_tx_info[MAX_PENDING_REQS];
@@ -57704,14 +57834,22 @@
 +		   flipped. */
 +		meta->copy = 1;
 +		copy_gop = npo->copy + npo->copy_prod++;
-+		copy_gop->source.domid = DOMID_SELF;
++		copy_gop->flags = GNTCOPY_dest_gref;
++		if (PageForeign(page)) {
++			struct pending_tx_info *src_pend =
++				&pending_tx_info[page->index];
++			copy_gop->source.domid = src_pend->netif->domid;
++			copy_gop->source.u.ref = src_pend->req.gref;
++			copy_gop->flags |= GNTCOPY_source_gref;
++		} else {
++			copy_gop->source.domid = DOMID_SELF;
++			copy_gop->source.u.gmfn = old_mfn;
++		}
 +		copy_gop->source.offset = offset;
-+		copy_gop->source.u.gmfn = old_mfn;
 +		copy_gop->dest.domid = netif->domid;
 +		copy_gop->dest.offset = 0;
 +		copy_gop->dest.u.ref = req->gref;
 +		copy_gop->len = size;
-+		copy_gop->flags = GNTCOPY_dest_gref;
 +	} else {
 +		meta->copy = 0;
 +		if (!xen_feature(XENFEAT_auto_translated_physmap)) {
@@ -58123,10 +58261,27 @@
 +}
 +
 +
++static void tx_add_credit(netif_t *netif)
++{
++	unsigned long max_burst;
++
++	/*
++	 * Allow a burst big enough to transmit a jumbo packet of up to 128kB.
++	 * Otherwise the interface can seize up due to insufficient credit.
++	 */
++	max_burst = RING_GET_REQUEST(&netif->tx, netif->tx.req_cons)->size;
++	max_burst = min(max_burst, 131072UL);
++	max_burst = max(max_burst, netif->credit_bytes);
++
++	netif->remaining_credit = min(netif->remaining_credit +
++				      netif->credit_bytes,
++				      max_burst);
++}
++
 +static void tx_credit_callback(unsigned long data)
 +{
 +	netif_t *netif = (netif_t *)data;
-+	netif->remaining_credit = netif->credit_bytes;
++	tx_add_credit(netif);
 +	netif_schedule_work(netif);
 +}
 +
@@ -58188,20 +58343,28 @@
 +	netif_put(netif);
 +}
 +
-+static int netbk_count_requests(netif_t *netif, netif_tx_request_t *txp,
-+				int work_to_do)
++static int netbk_count_requests(netif_t *netif, netif_tx_request_t *first,
++				netif_tx_request_t *txp, int work_to_do)
 +{
-+	netif_tx_request_t *first = txp;
 +	RING_IDX cons = netif->tx.req_cons;
 +	int frags = 0;
 +
-+	while (txp->flags & NETTXF_more_data) {
++	if (!(first->flags & NETTXF_more_data))
++		return 0;
++
++	do {
 +		if (frags >= work_to_do) {
 +			DPRINTK("Need more frags\n");
 +			return -frags;
 +		}
 +
-+		txp = RING_GET_REQUEST(&netif->tx, cons + frags);
++		if (unlikely(frags >= MAX_SKB_FRAGS)) {
++			DPRINTK("Too many frags\n");
++			return -frags;
++		}
++
++		memcpy(txp, RING_GET_REQUEST(&netif->tx, cons + frags),
++		       sizeof(*txp));
 +		if (txp->size > first->size) {
 +			DPRINTK("Frags galore\n");
 +			return -frags;
@@ -58215,27 +58378,25 @@
 +				txp->offset, txp->size);
 +			return -frags;
 +		}
-+	}
++	} while ((txp++)->flags & NETTXF_more_data);
 +
 +	return frags;
 +}
 +
 +static gnttab_map_grant_ref_t *netbk_get_requests(netif_t *netif,
 +						  struct sk_buff *skb,
++						  netif_tx_request_t *txp,
 +						  gnttab_map_grant_ref_t *mop)
 +{
 +	struct skb_shared_info *shinfo = skb_shinfo(skb);
 +	skb_frag_t *frags = shinfo->frags;
-+	netif_tx_request_t *txp;
 +	unsigned long pending_idx = *((u16 *)skb->data);
-+	RING_IDX cons = netif->tx.req_cons;
 +	int i, start;
 +
 +	/* Skip first skb fragment if it is on same page as header fragment. */
 +	start = ((unsigned long)shinfo->frags[0].page == pending_idx);
 +
-+	for (i = start; i < shinfo->nr_frags; i++) {
-+		txp = RING_GET_REQUEST(&netif->tx, cons++);
++	for (i = start; i < shinfo->nr_frags; i++, txp++) {
 +		pending_idx = pending_ring[MASK_PEND_IDX(pending_cons++)];
 +
 +		gnttab_set_map_op(mop++, idx_to_kaddr(pending_idx),
@@ -58349,7 +58510,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 {
@@ -58358,18 +58519,18 @@
 +			return -EBADR;
 +		}
 +
-+		extra = (struct netif_extra_info *)
-+			RING_GET_REQUEST(&netif->tx, cons);
-+		if (unlikely(!extra->type ||
-+			     extra->type >= XEN_NETIF_EXTRA_TYPE_MAX)) {
++		memcpy(&extra, RING_GET_REQUEST(&netif->tx, cons),
++		       sizeof(extra));
++		if (unlikely(!extra.type ||
++			     extra.type >= XEN_NETIF_EXTRA_TYPE_MAX)) {
 +			netif->tx.req_cons = ++cons;
-+			DPRINTK("Invalid extra type: %d\n", extra->type);
++			DPRINTK("Invalid extra type: %d\n", extra.type);
 +			return -EINVAL;
 +		}
 +
-+		memcpy(&extras[extra->type - 1], extra, sizeof(*extra));
++		memcpy(&extras[extra.type - 1], &extra, sizeof(extra));
 +		netif->tx.req_cons = ++cons;
-+	} while (extra->flags & XEN_NETIF_EXTRA_FLAG_MORE);
++	} while (extra.flags & XEN_NETIF_EXTRA_FLAG_MORE);
 +
 +	return work_to_do;
 +}
@@ -58404,6 +58565,7 @@
 +	struct sk_buff *skb;
 +	netif_t *netif;
 +	netif_tx_request_t txreq;
++	netif_tx_request_t txfrags[MAX_SKB_FRAGS];
 +	struct netif_extra_info extras[XEN_NETIF_EXTRA_TYPE_MAX - 1];
 +	u16 pending_idx;
 +	RING_IDX i;
@@ -58449,12 +58611,11 @@
 +			/* Passed the point where we can replenish credit? */
 +			if (time_after_eq(now, next_credit)) {
 +				netif->credit_timeout.expires = now;
-+				netif->remaining_credit = netif->credit_bytes;
++				tx_add_credit(netif);
 +			}
 +
 +			/* Still too big to send right now? Set a callback. */
 +			if (txreq.size > netif->remaining_credit) {
-+				netif->remaining_credit = 0;
 +				netif->credit_timeout.data     =
 +					(unsigned long)netif;
 +				netif->credit_timeout.function =
@@ -58481,19 +58642,13 @@
 +			}
 +		}
 +
-+		ret = netbk_count_requests(netif, &txreq, work_to_do);
++		ret = netbk_count_requests(netif, &txreq, txfrags, work_to_do);
 +		if (unlikely(ret < 0)) {
 +			netbk_tx_err(netif, &txreq, i - ret);
 +			continue;
 +		}
 +		i += ret;
 +
-+		if (unlikely(ret > MAX_SKB_FRAGS)) {
-+			DPRINTK("Too many frags\n");
-+			netbk_tx_err(netif, &txreq, i);
-+			continue;
-+		}
-+
 +		if (unlikely(txreq.size < ETH_HLEN)) {
 +			DPRINTK("Bad packet size: %d\n", txreq.size);
 +			netbk_tx_err(netif, &txreq, i);
@@ -58562,7 +58717,7 @@
 +
 +		pending_cons++;
 +
-+		mop = netbk_get_requests(netif, skb, mop);
++		mop = netbk_get_requests(netif, skb, txfrags, mop);
 +
 +		netif->tx.req_cons = i;
 +		netif_schedule_work(netif);
@@ -58812,10 +58967,10 @@
 +module_init(netback_init);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/netback/xenbus.c linux-2.6.18-xen/drivers/xen/netback/xenbus.c
---- linux-2.6.18/drivers/xen/netback/xenbus.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/drivers/xen/netback/xenbus.c	2006-11-19 14:26:56.000000000 +0100
-@@ -0,0 +1,479 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/netback/xenbus.c linux-2.6.18-xen/drivers/xen/netback/xenbus.c
+--- linux-2.6.18.3/drivers/xen/netback/xenbus.c	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/netback/xenbus.c	2006-12-05 18:42:37.000000000 +0100
+@@ -0,0 +1,438 @@
 +/*  Xenbus code for netif backend
 +    Copyright (C) 2005 Rusty Russell <rusty at rustcorp.com.au>
 +    Copyright (C) 2005 XenSource Ltd
@@ -58846,29 +59001,20 @@
 +    printk("netback/xenbus (%s:%d) " fmt ".\n", __FUNCTION__, __LINE__, ##args)
 +#endif
 +
-+struct backend_info
-+{
++struct backend_info {
 +	struct xenbus_device *dev;
 +	netif_t *netif;
-+	struct xenbus_watch backend_watch;
 +	enum xenbus_state frontend_state;
 +};
 +
 +static int connect_rings(struct backend_info *);
 +static void connect(struct backend_info *);
-+static void maybe_connect(struct backend_info *);
-+static void backend_changed(struct xenbus_watch *, const char **,
-+			    unsigned int);
++static void backend_create_netif(struct backend_info *be);
 +
 +static int netback_remove(struct xenbus_device *dev)
 +{
 +	struct backend_info *be = dev->dev.driver_data;
 +
-+	if (be->backend_watch.node) {
-+		unregister_xenbus_watch(&be->backend_watch);
-+		kfree(be->backend_watch.node);
-+		be->backend_watch.node = NULL;
-+	}
 +	if (be->netif) {
 +		netif_disconnect(be->netif);
 +		be->netif = NULL;
@@ -58881,8 +59027,7 @@
 +
 +/**
 + * Entry point to this code when a new device is created.  Allocate the basic
-+ * structures, and watch the store waiting for the hotplug scripts to tell us
-+ * the device's handle.  Switch to InitWait.
++ * structures and switch to InitWait.
 + */
 +static int netback_probe(struct xenbus_device *dev,
 +			 const struct xenbus_device_id *id)
@@ -58901,11 +59046,6 @@
 +	be->dev = dev;
 +	dev->dev.driver_data = be;
 +
-+	err = xenbus_watch_path2(dev, dev->nodename, "handle",
-+				 &be->backend_watch, backend_changed);
-+	if (err)
-+		goto fail;
-+
 +	do {
 +		err = xenbus_transaction_start(&xbt);
 +		if (err) {
@@ -58926,7 +59066,8 @@
 +			goto abort_transaction;
 +		}
 +
-+		err = xenbus_printf(xbt, dev->nodename, "feature-rx-copy", "%d", 1);
++		err = xenbus_printf(xbt, dev->nodename,
++				    "feature-rx-copy", "%d", 1);
 +		if (err) {
 +			message = "writing feature-copying";
 +			goto abort_transaction;
@@ -58941,9 +59082,11 @@
 +	}
 +
 +	err = xenbus_switch_state(dev, XenbusStateInitWait);
-+	if (err) {
++	if (err)
 +		goto fail;
-+	}
++
++	/* This kicks hotplug scripts, so do it immediately. */
++	backend_create_netif(be);
 +
 +	return 0;
 +
@@ -58993,48 +59136,30 @@
 +}
 +
 +
-+/**
-+ * Callback received when the hotplug scripts have placed the handle node.
-+ * Read it, and create a netif structure.  If the frontend is ready, connect.
-+ */
-+static void backend_changed(struct xenbus_watch *watch,
-+			    const char **vec, unsigned int len)
++static void backend_create_netif(struct backend_info *be)
 +{
 +	int err;
 +	long handle;
-+	struct backend_info *be
-+		= container_of(watch, struct backend_info, backend_watch);
 +	struct xenbus_device *dev = be->dev;
 +
-+	DPRINTK("");
++	if (be->netif != NULL)
++		return;
 +
 +	err = xenbus_scanf(XBT_NIL, dev->nodename, "handle", "%li", &handle);
-+	if (XENBUS_EXIST_ERR(err)) {
-+		/* Since this watch will fire once immediately after it is
-+		   registered, we expect this.  Ignore it, and wait for the
-+		   hotplug scripts. */
-+		return;
-+	}
 +	if (err != 1) {
 +		xenbus_dev_fatal(dev, err, "reading handle");
 +		return;
 +	}
 +
-+	if (be->netif == NULL) {
-+		u8 be_mac[ETH_ALEN] = { 0, 0, 0, 0, 0, 0 };
-+
-+		be->netif = netif_alloc(dev->otherend_id, handle, be_mac);
-+		if (IS_ERR(be->netif)) {
-+			err = PTR_ERR(be->netif);
-+			be->netif = NULL;
-+			xenbus_dev_fatal(dev, err, "creating interface");
-+			return;
-+		}
-+
-+		kobject_uevent(&dev->dev.kobj, KOBJ_ONLINE);
-+
-+		maybe_connect(be);
++	be->netif = netif_alloc(dev->otherend_id, handle);
++	if (IS_ERR(be->netif)) {
++		err = PTR_ERR(be->netif);
++		be->netif = NULL;
++		xenbus_dev_fatal(dev, err, "creating interface");
++		return;
 +	}
++
++	kobject_uevent(&dev->dev.kobj, KOBJ_ONLINE);
 +}
 +
 +
@@ -59067,11 +59192,9 @@
 +		break;
 +
 +	case XenbusStateConnected:
-+		if (!be->netif) {
-+			/* reconnect: setup be->netif */
-+			backend_changed(&be->backend_watch, NULL, 0);
-+		}
-+		maybe_connect(be);
++		backend_create_netif(be);
++		if (be->netif)
++			connect(be);
 +		break;
 +
 +	case XenbusStateClosing:
@@ -59097,15 +59220,6 @@
 +}
 +
 +
-+/* ** Connection ** */
-+
-+
-+static void maybe_connect(struct backend_info *be)
-+{
-+	if (be->netif && (be->frontend_state == XenbusStateConnected))
-+		connect(be);
-+}
-+
 +static void xen_net_read_rate(struct xenbus_device *dev,
 +			      unsigned long *bytes, unsigned long *usec)
 +{
@@ -59295,8 +59409,8 @@
 +{
 +	xenbus_register_backend(&netback);
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/netfront/Kconfig linux-2.6.18-xen/drivers/xen/netfront/Kconfig
---- linux-2.6.18/drivers/xen/netfront/Kconfig	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/netfront/Kconfig linux-2.6.18-xen/drivers/xen/netfront/Kconfig
+--- linux-2.6.18.3/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 @@
 +
@@ -59305,17 +59419,17 @@
 +	depends on NETDEVICES && ARCH_XEN
 +	help
 +	  Network driver for Xen
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/netfront/Makefile linux-2.6.18-xen/drivers/xen/netfront/Makefile
---- linux-2.6.18/drivers/xen/netfront/Makefile	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/netfront/Makefile linux-2.6.18-xen/drivers/xen/netfront/Makefile
+--- linux-2.6.18.3/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/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
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/netfront/netfront.c linux-2.6.18-xen/drivers/xen/netfront/netfront.c
+--- linux-2.6.18.3/drivers/xen/netfront/netfront.c	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/netfront/netfront.c	2006-12-05 18:42:37.000000000 +0100
 @@ -0,0 +1,2138 @@
 +/******************************************************************************
 + * Virtual network driver for conversing with remote driver backends.
@@ -59460,7 +59574,6 @@
 +	spinlock_t   tx_lock;
 +	spinlock_t   rx_lock;
 +
-+	unsigned int handle;
 +	unsigned int evtchn, irq;
 +	unsigned int copying_receiver;
 +
@@ -59549,9 +59662,8 @@
 +#define WPRINTK(fmt, args...)				\
 +	printk(KERN_WARNING "netfront: " fmt, ##args)
 +
-+static int talk_to_backend(struct xenbus_device *, struct netfront_info *);
 +static int setup_device(struct xenbus_device *, struct netfront_info *);
-+static struct net_device *create_netdev(int, int, struct xenbus_device *);
++static struct net_device *create_netdev(struct xenbus_device *);
 +
 +static void netfront_closing(struct xenbus_device *);
 +
@@ -59561,7 +59673,7 @@
 +static void close_netdev(struct netfront_info *);
 +static void netif_free(struct netfront_info *);
 +
-+static void network_connect(struct net_device *);
++static int network_connect(struct net_device *);
 +static void network_tx_buf_gc(struct net_device *);
 +static void network_alloc_rx_buffers(struct net_device *);
 +static int send_fake_arp(struct net_device *);
@@ -59584,8 +59696,7 @@
 +/**
 + * Entry point to this code when a new device is created.  Allocate the basic
 + * structures and the ring buffers for communication with the backend, and
-+ * inform the backend of the appropriate details for those.  Switch to
-+ * Connected state.
++ * inform the backend of the appropriate details for those.
 + */
 +static int __devinit netfront_probe(struct xenbus_device *dev,
 +				    const struct xenbus_device_id *id)
@@ -59593,32 +59704,8 @@
 +	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(handle, use_copy, dev);
++	netdev = create_netdev(dev);
 +	if (IS_ERR(netdev)) {
 +		err = PTR_ERR(netdev);
 +		xenbus_dev_fatal(dev, err, "creating netdev");
@@ -59628,23 +59715,13 @@
 +	info = netdev_priv(netdev);
 +	dev->dev.driver_data = info;
 +
-+	err = talk_to_backend(dev, info);
-+	if (err)
-+		goto fail_backend;
-+
 +	err = open_netdev(info);
 +	if (err)
-+		goto fail_open;
-+
-+	IPRINTK("Created netdev %s with %sing receive path.\n",
-+		netdev->name, info->copying_receiver ? "copy" : "flipp");
++		goto fail;
 +
 +	return 0;
 +
-+ fail_open:
-+	xennet_sysfs_delif(info->netdev);
-+	unregister_netdev(netdev);
-+ fail_backend:
++ fail:
 +	free_netdev(netdev);
 +	dev->dev.driver_data = NULL;
 +	return err;
@@ -59664,7 +59741,7 @@
 +	DPRINTK("%s\n", dev->nodename);
 +
 +	netif_disconnect_backend(info);
-+	return talk_to_backend(dev, info);
++	return 0;
 +}
 +
 +static int xen_net_read_mac(struct xenbus_device *dev, u8 mac[])
@@ -59775,7 +59852,7 @@
 +	xenbus_transaction_end(xbt, 1);
 +	xenbus_dev_fatal(dev, err, "%s", message);
 + destroy_ring:
-+	netif_free(info);
++	netif_disconnect_backend(info);
 + out:
 +	return err;
 +}
@@ -59865,7 +59942,10 @@
 +		break;
 +
 +	case XenbusStateInitWait:
-+		network_connect(netdev);
++		if (network_connect(netdev) != 0) {
++			netif_free(np);
++			break;
++		}
 +		xenbus_switch_state(dev, XenbusStateConnected);
 +		(void)send_fake_arp(netdev);
 +		break;
@@ -60439,6 +60519,7 @@
 +			if (net_ratelimit())
 +				WPRINTK("rx->offset: %x, size: %u\n",
 +					rx->offset, rx->status);
++			xennet_move_rx_slot(np, skb, ref);
 +			err = -EINVAL;
 +			goto next;
 +		}
@@ -60449,7 +60530,8 @@
 +		 * situation to the system controller to reboot the backed.
 +		 */
 +		if (ref == GRANT_INVALID_REF) {
-+			WPRINTK("Bad rx response id %d.\n", rx->id);
++			if (net_ratelimit())
++				WPRINTK("Bad rx response id %d.\n", rx->id);
 +			err = -EINVAL;
 +			goto next;
 +		}
@@ -60521,6 +60603,9 @@
 +		err = -E2BIG;
 +	}
 +
++	if (unlikely(err))
++		np->rx.rsp_cons = cons + frags;
++
 +	*pages_flipped_p = pages_flipped;
 +
 +	return err;
@@ -60625,9 +60710,9 @@
 +	rp = np->rx.sring->rsp_prod;
 +	rmb(); /* Ensure we see queued responses up to 'rp'. */
 +
-+	for (i = np->rx.rsp_cons, work_done = 0;
-+	     (i != rp) && (work_done < budget);
-+	     np->rx.rsp_cons = ++i, work_done++) {
++	i = np->rx.rsp_cons;
++	work_done = 0;
++	while ((i != rp) && (work_done < budget)) {
 +		memcpy(rx, RING_GET_RESPONSE(&np->rx, i), sizeof(*rx));
 +		memset(extras, 0, sizeof(extras));
 +
@@ -60635,12 +60720,11 @@
 +					   &pages_flipped);
 +
 +		if (unlikely(err)) {
-+err:
-+			i = np->rx.rsp_cons + skb_queue_len(&tmpq) - 1;
-+			work_done--;
++err:	
 +			while ((skb = __skb_dequeue(&tmpq)))
 +				__skb_queue_tail(&errq, skb);
 +			np->stats.rx_errors++;
++			i = np->rx.rsp_cons;
 +			continue;
 +		}
 +
@@ -60652,6 +60736,7 @@
 +
 +			if (unlikely(xennet_set_skb_gso(skb, gso))) {
 +				__skb_queue_head(&tmpq, skb);
++				np->rx.rsp_cons += skb_queue_len(&tmpq);
 +				goto err;
 +			}
 +		}
@@ -60715,6 +60800,9 @@
 +		np->stats.rx_bytes += skb->len;
 +
 +		__skb_queue_tail(&rxq, skb);
++
++		np->rx.rsp_cons = ++i;
++		work_done++;
 +	}
 +
 +	if (pages_flipped) {
@@ -60962,16 +61050,41 @@
 +		xennet_set_tso(dev, 1);
 +}
 +
-+static void network_connect(struct net_device *dev)
++static int network_connect(struct net_device *dev)
 +{
 +	struct netfront_info *np = netdev_priv(dev);
-+	int i, requeue_idx;
++	int i, requeue_idx, err;
 +	struct sk_buff *skb;
 +	grant_ref_t ref;
 +	netif_rx_request_t *req;
++	unsigned int feature_rx_copy, feature_rx_flip;
++
++	err = xenbus_scanf(XBT_NIL, np->xbdev->otherend,
++			   "feature-rx-copy", "%u", &feature_rx_copy);
++	if (err != 1)
++		feature_rx_copy = 0;
++	err = xenbus_scanf(XBT_NIL, np->xbdev->otherend,
++			   "feature-rx-flip", "%u", &feature_rx_flip);
++	if (err != 1)
++		feature_rx_flip = 1;
++
++	/*
++	 * Copy packets on receive path if:
++	 *  (a) This was requested by user, and the backend supports it; or
++	 *  (b) Flipping was requested, but this is unsupported by the backend.
++	 */
++	np->copying_receiver = ((MODPARM_rx_copy && feature_rx_copy) ||
++				(MODPARM_rx_flip && !feature_rx_flip));
++
++	err = talk_to_backend(np->xbdev, np);
++	if (err)
++		return err;
 +
 +	xennet_set_features(dev);
 +
++	IPRINTK("device %s has %sing receive path.\n",
++		dev->name, np->copying_receiver ? "copy" : "flipp");
++
 +	spin_lock_irq(&np->tx_lock);
 +	spin_lock(&np->rx_lock);
 +
@@ -61027,6 +61140,8 @@
 +
 +	spin_unlock(&np->rx_lock);
 +	spin_unlock_irq(&np->tx_lock);
++
++	return 0;
 +}
 +
 +static void netif_uninit(struct net_device *dev)
@@ -61192,8 +61307,7 @@
 +{
 +}
 +
-+static struct net_device * __devinit
-+create_netdev(int handle, int copying_receiver, struct xenbus_device *dev)
++static struct net_device * __devinit create_netdev(struct xenbus_device *dev)
 +{
 +	int i, err = 0;
 +	struct net_device *netdev = NULL;
@@ -61207,9 +61321,7 @@
 +	}
 +
 +	np                   = netdev_priv(netdev);
-+	np->handle           = handle;
 +	np->xbdev            = dev;
-+	np->copying_receiver = copying_receiver;
 +
 +	netif_carrier_off(netdev);
 +
@@ -61340,10 +61452,12 @@
 +
 +	err = xennet_sysfs_addif(info->netdev);
 +	if (err) {
-+		/* This can be non-fatal: it only means no tuning parameters */
++		unregister_netdev(info->netdev);
 +		printk(KERN_WARNING "%s: add sysfs failed err=%d\n",
 +		       __FUNCTION__, err);
++		return err;
 +	}
++
 +	return 0;
 +}
 +
@@ -61455,8 +61569,8 @@
 +module_exit(netif_exit);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/conf_space.c linux-2.6.18-xen/drivers/xen/pciback/conf_space.c
---- linux-2.6.18/drivers/xen/pciback/conf_space.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/pciback/conf_space.c linux-2.6.18-xen/drivers/xen/pciback/conf_space.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -61884,8 +61998,8 @@
 +{
 +	return pciback_config_capability_init();
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/conf_space_capability.c linux-2.6.18-xen/drivers/xen/pciback/conf_space_capability.c
---- linux-2.6.18/drivers/xen/pciback/conf_space_capability.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/pciback/conf_space_capability.c linux-2.6.18-xen/drivers/xen/pciback/conf_space_capability.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -61959,8 +62073,8 @@
 +
 +	return 0;
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/conf_space_capability.h linux-2.6.18-xen/drivers/xen/pciback/conf_space_capability.h
---- linux-2.6.18/drivers/xen/pciback/conf_space_capability.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/pciback/conf_space_capability.h linux-2.6.18-xen/drivers/xen/pciback/conf_space_capability.h
+--- linux-2.6.18.3/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 @@
 +/*
@@ -61986,8 +62100,8 @@
 +};
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/conf_space_capability_pm.c linux-2.6.18-xen/drivers/xen/pciback/conf_space_capability_pm.c
---- linux-2.6.18/drivers/xen/pciback/conf_space_capability_pm.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/*
@@ -62103,8 +62217,8 @@
 +	.capability = PCI_CAP_ID_PM,
 +	.fields = caplist_pm,
 +};
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/conf_space_capability_vpd.c linux-2.6.18-xen/drivers/xen/pciback/conf_space_capability_vpd.c
---- linux-2.6.18/drivers/xen/pciback/conf_space_capability_vpd.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/*
@@ -62149,8 +62263,8 @@
 +	.capability = PCI_CAP_ID_VPD,
 +	.fields = caplist_vpd,
 +};
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/conf_space.h linux-2.6.18-xen/drivers/xen/pciback/conf_space.h
---- linux-2.6.18/drivers/xen/pciback/conf_space.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/pciback/conf_space.h linux-2.6.18-xen/drivers/xen/pciback/conf_space.h
+--- linux-2.6.18.3/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 @@
 +/*
@@ -62279,8 +62393,8 @@
 +int pciback_config_capability_add_fields(struct pci_dev *dev);
 +
 +#endif				/* __XEN_PCIBACK_CONF_SPACE_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/conf_space_header.c linux-2.6.18-xen/drivers/xen/pciback/conf_space_header.c
---- linux-2.6.18/drivers/xen/pciback/conf_space_header.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/pciback/conf_space_header.c linux-2.6.18-xen/drivers/xen/pciback/conf_space_header.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -62582,8 +62696,8 @@
 +      out:
 +	return err;
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/conf_space_quirks.c linux-2.6.18-xen/drivers/xen/pciback/conf_space_quirks.c
---- linux-2.6.18/drivers/xen/pciback/conf_space_quirks.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/pciback/conf_space_quirks.c linux-2.6.18-xen/drivers/xen/pciback/conf_space_quirks.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -62714,8 +62828,8 @@
 +      out:
 +	return ret;
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/conf_space_quirks.h linux-2.6.18-xen/drivers/xen/pciback/conf_space_quirks.h
---- linux-2.6.18/drivers/xen/pciback/conf_space_quirks.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/pciback/conf_space_quirks.h linux-2.6.18-xen/drivers/xen/pciback/conf_space_quirks.h
+--- linux-2.6.18.3/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 @@
 +/*
@@ -62753,8 +62867,8 @@
 +int pciback_field_is_dup(struct pci_dev *dev, int reg);
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/Makefile linux-2.6.18-xen/drivers/xen/pciback/Makefile
---- linux-2.6.18/drivers/xen/pciback/Makefile	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/pciback/Makefile linux-2.6.18-xen/drivers/xen/pciback/Makefile
+--- linux-2.6.18.3/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
@@ -62772,8 +62886,8 @@
 +ifeq ($(CONFIG_XEN_PCIDEV_BE_DEBUG),y)
 +EXTRA_CFLAGS += -DDEBUG
 +endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/passthrough.c linux-2.6.18-xen/drivers/xen/pciback/passthrough.c
---- linux-2.6.18/drivers/xen/pciback/passthrough.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/pciback/passthrough.c linux-2.6.18-xen/drivers/xen/pciback/passthrough.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -62933,8 +63047,8 @@
 +	kfree(dev_data);
 +	pdev->pci_dev_data = NULL;
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/pciback.h linux-2.6.18-xen/drivers/xen/pciback/pciback.h
---- linux-2.6.18/drivers/xen/pciback/pciback.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/pciback/pciback.h linux-2.6.18-xen/drivers/xen/pciback/pciback.h
+--- linux-2.6.18.3/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 @@
 +/*
@@ -63030,8 +63144,8 @@
 +
 +extern int verbose_request;
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/pciback_ops.c linux-2.6.18-xen/drivers/xen/pciback/pciback_ops.c
---- linux-2.6.18/drivers/xen/pciback/pciback_ops.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/pciback/pciback_ops.c linux-2.6.18-xen/drivers/xen/pciback/pciback_ops.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -63129,8 +63243,8 @@
 +
 +	return IRQ_HANDLED;
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/pci_stub.c linux-2.6.18-xen/drivers/xen/pciback/pci_stub.c
---- linux-2.6.18/drivers/xen/pciback/pci_stub.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/pciback/pci_stub.c linux-2.6.18-xen/drivers/xen/pciback/pci_stub.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -64049,8 +64163,8 @@
 +module_exit(pciback_cleanup);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/slot.c linux-2.6.18-xen/drivers/xen/pciback/slot.c
---- linux-2.6.18/drivers/xen/pciback/slot.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/pciback/slot.c linux-2.6.18-xen/drivers/xen/pciback/slot.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -64204,8 +64318,8 @@
 +	kfree(slot_dev);
 +	pdev->pci_dev_data = NULL;
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/vpci.c linux-2.6.18-xen/drivers/xen/pciback/vpci.c
---- linux-2.6.18/drivers/xen/pciback/vpci.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/pciback/vpci.c linux-2.6.18-xen/drivers/xen/pciback/vpci.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -64412,8 +64526,8 @@
 +	kfree(vpci_dev);
 +	pdev->pci_dev_data = NULL;
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pciback/xenbus.c linux-2.6.18-xen/drivers/xen/pciback/xenbus.c
---- linux-2.6.18/drivers/xen/pciback/xenbus.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/pciback/xenbus.c linux-2.6.18-xen/drivers/xen/pciback/xenbus.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -64874,8 +64988,8 @@
 +{
 +	xenbus_unregister_driver(&xenbus_pciback_driver);
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pcifront/Makefile linux-2.6.18-xen/drivers/xen/pcifront/Makefile
---- linux-2.6.18/drivers/xen/pcifront/Makefile	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/pcifront/Makefile linux-2.6.18-xen/drivers/xen/pcifront/Makefile
+--- linux-2.6.18.3/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
@@ -64885,8 +64999,8 @@
 +ifeq ($(CONFIG_XEN_PCIDEV_FE_DEBUG),y)
 +EXTRA_CFLAGS += -DDEBUG
 +endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pcifront/pci.c linux-2.6.18-xen/drivers/xen/pcifront/pci.c
---- linux-2.6.18/drivers/xen/pcifront/pci.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/pcifront/pci.c linux-2.6.18-xen/drivers/xen/pcifront/pci.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -64935,8 +65049,8 @@
 +
 +	spin_unlock(&pcifront_dev_lock);
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pcifront/pcifront.h linux-2.6.18-xen/drivers/xen/pcifront/pcifront.h
---- linux-2.6.18/drivers/xen/pcifront/pcifront.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/pcifront/pcifront.h linux-2.6.18-xen/drivers/xen/pcifront/pcifront.h
+--- linux-2.6.18.3/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 @@
 +/*
@@ -64979,8 +65093,8 @@
 +void pcifront_free_roots(struct pcifront_device *pdev);
 +
 +#endif	/* __XEN_PCIFRONT_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pcifront/pci_op.c linux-2.6.18-xen/drivers/xen/pcifront/pci_op.c
---- linux-2.6.18/drivers/xen/pcifront/pci_op.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/pcifront/pci_op.c linux-2.6.18-xen/drivers/xen/pcifront/pci_op.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -65256,8 +65370,8 @@
 +		kfree(bus_entry);
 +	}
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/pcifront/xenbus.c linux-2.6.18-xen/drivers/xen/pcifront/xenbus.c
---- linux-2.6.18/drivers/xen/pcifront/xenbus.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/pcifront/xenbus.c linux-2.6.18-xen/drivers/xen/pcifront/xenbus.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -65555,16 +65669,16 @@
 +
 +/* Initialize after the Xen PCI Frontend Stub is initialized */
 +subsys_initcall(pcifront_init);
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/privcmd/Makefile linux-2.6.18-xen/drivers/xen/privcmd/Makefile
---- linux-2.6.18/drivers/xen/privcmd/Makefile	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/privcmd/Makefile linux-2.6.18-xen/drivers/xen/privcmd/Makefile
+--- linux-2.6.18.3/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/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 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/privcmd/privcmd.c linux-2.6.18-xen/drivers/xen/privcmd/privcmd.c
+--- linux-2.6.18.3/drivers/xen/privcmd/privcmd.c	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/drivers/xen/privcmd/privcmd.c	2006-12-05 18:42:37.000000000 +0100
+@@ -0,0 +1,294 @@
 +/******************************************************************************
 + * privcmd.c
 + * 
@@ -65601,6 +65715,10 @@
 +static struct proc_dir_entry *privcmd_intf;
 +static struct proc_dir_entry *capabilities_intf;
 +
++#ifndef HAVE_ARCH_PRIVCMD_MMAP
++static int privcmd_enforce_singleshot_mapping(struct vm_area_struct *vma);
++#endif
++
 +static int privcmd_ioctl(struct inode *inode, struct file *file,
 +			 unsigned int cmd, unsigned long data)
 +{
@@ -65688,12 +65806,10 @@
 +
 +		vma = find_vma(mm, msg.va);
 +		rc = -EINVAL;
-+		if (!vma || (msg.va != vma->vm_start) || vma->vm_private_data)
++		if (!vma || (msg.va != vma->vm_start) ||
++		    !privcmd_enforce_singleshot_mapping(vma))
 +			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++) {
@@ -65703,7 +65819,7 @@
 +
 +			/* Do not allow range to wrap the address space. */
 +			rc = -EINVAL;
-+			if ((msg.npages > (INT_MAX >> PAGE_SHIFT)) ||
++			if ((msg.npages > (LONG_MAX >> PAGE_SHIFT)) ||
 +			    ((unsigned long)(msg.npages << PAGE_SHIFT) >= -va))
 +				goto mmap_out;
 +
@@ -65747,7 +65863,7 @@
 +		if (copy_from_user(&m, udata, sizeof(m)))
 +			return -EFAULT;
 +
-+		if ((m.num <= 0) || (m.num > (INT_MAX >> PAGE_SHIFT)))
++		if ((m.num <= 0) || (m.num > (LONG_MAX >> PAGE_SHIFT)))
 +			return -EINVAL;
 +
 +		down_read(&mm->mmap_sem);
@@ -65755,15 +65871,13 @@
 +		vma = find_vma(mm, m.addr);
 +		if (!vma ||
 +		    (m.addr != vma->vm_start) ||
-+		    ((m.addr + (m.num<<PAGE_SHIFT)) != vma->vm_end) ||
-+		    vma->vm_private_data) {
++		    ((m.addr + ((unsigned long)m.num<<PAGE_SHIFT)) !=
++		     vma->vm_end) ||
++		    !privcmd_enforce_singleshot_mapping(vma)) {
 +			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++) {
@@ -65817,6 +65931,11 @@
 +
 +	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 = {
@@ -65854,8 +65973,8 @@
 +}
 +
 +__initcall(privcmd_init);
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/tpmback/common.h linux-2.6.18-xen/drivers/xen/tpmback/common.h
---- linux-2.6.18/drivers/xen/tpmback/common.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/tpmback/common.h linux-2.6.18-xen/drivers/xen/tpmback/common.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -65944,8 +66063,8 @@
 +}
 +
 +#endif /* __TPMIF__BACKEND__COMMON_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/tpmback/interface.c linux-2.6.18-xen/drivers/xen/tpmback/interface.c
---- linux-2.6.18/drivers/xen/tpmback/interface.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/tpmback/interface.c linux-2.6.18-xen/drivers/xen/tpmback/interface.c
+--- linux-2.6.18.3/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 @@
 + /*****************************************************************************
@@ -66130,16 +66249,16 @@
 +{
 +	kmem_cache_destroy(tpmif_cachep);
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/tpmback/Makefile linux-2.6.18-xen/drivers/xen/tpmback/Makefile
---- linux-2.6.18/drivers/xen/tpmback/Makefile	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/tpmback/Makefile linux-2.6.18-xen/drivers/xen/tpmback/Makefile
+--- linux-2.6.18.3/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/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
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/tpmback/tpmback.c linux-2.6.18-xen/drivers/xen/tpmback/tpmback.c
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -67086,8 +67205,8 @@
 +}
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/tpmback/xenbus.c linux-2.6.18-xen/drivers/xen/tpmback/xenbus.c
---- linux-2.6.18/drivers/xen/tpmback/xenbus.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/tpmback/xenbus.c linux-2.6.18-xen/drivers/xen/tpmback/xenbus.c
+--- linux-2.6.18.3/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
@@ -67377,8 +67496,8 @@
 +{
 +	xenbus_unregister_driver(&tpmback);
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/util.c linux-2.6.18-xen/drivers/xen/util.c
---- linux-2.6.18/drivers/xen/util.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/util.c linux-2.6.18-xen/drivers/xen/util.c
+--- linux-2.6.18.3/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 @@
 +
@@ -67451,8 +67570,8 @@
 +	preempt_enable();
 +}
 +EXPORT_SYMBOL_GPL(unlock_vm_area);
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/xenbus/Makefile linux-2.6.18-xen/drivers/xen/xenbus/Makefile
---- linux-2.6.18/drivers/xen/xenbus/Makefile	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/xenbus/Makefile linux-2.6.18-xen/drivers/xen/xenbus/Makefile
+--- linux-2.6.18.3/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
@@ -67467,8 +67586,8 @@
 +xenbus-objs += xenbus_xs.o
 +xenbus-objs += xenbus_probe.o
 +obj-$(CONFIG_XEN_XENBUS_DEV) += xenbus_dev.o
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/xenbus/xenbus_backend_client.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_backend_client.c
---- linux-2.6.18/drivers/xen/xenbus/xenbus_backend_client.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/xenbus/xenbus_backend_client.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_backend_client.c
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -67618,8 +67737,8 @@
 +EXPORT_SYMBOL_GPL(xenbus_dev_is_online);
 +
 +MODULE_LICENSE("Dual BSD/GPL");
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/xenbus/xenbus_client.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_client.c
---- linux-2.6.18/drivers/xen/xenbus/xenbus_client.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/xenbus/xenbus_client.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_client.c
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -67921,8 +68040,8 @@
 +	return result;
 +}
 +EXPORT_SYMBOL_GPL(xenbus_read_driver_state);
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/xenbus/xenbus_comms.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_comms.c
---- linux-2.6.18/drivers/xen/xenbus/xenbus_comms.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/xenbus/xenbus_comms.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_comms.c
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -68128,8 +68247,8 @@
 +
 +	return 0;
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/xenbus/xenbus_comms.h linux-2.6.18-xen/drivers/xen/xenbus/xenbus_comms.h
---- linux-2.6.18/drivers/xen/xenbus/xenbus_comms.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/xenbus/xenbus_comms.h linux-2.6.18-xen/drivers/xen/xenbus/xenbus_comms.h
+--- linux-2.6.18.3/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 @@
 +/*
@@ -68177,8 +68296,8 @@
 +extern int xen_store_evtchn;
 +
 +#endif /* _XENBUS_COMMS_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/xenbus/xenbus_dev.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_dev.c
---- linux-2.6.18/drivers/xen/xenbus/xenbus_dev.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/xenbus/xenbus_dev.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_dev.c
+--- linux-2.6.18.3/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 @@
 +/*
@@ -68537,8 +68656,8 @@
 +
 +	return 0;
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/xenbus/xenbus_probe.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_probe.c
---- linux-2.6.18/drivers/xen/xenbus/xenbus_probe.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/xenbus/xenbus_probe.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_probe.c
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -69730,8 +69849,8 @@
 +
 +late_initcall(boot_wait_for_devices);
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/drivers/xen/xenbus/xenbus_xs.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_xs.c
---- linux-2.6.18/drivers/xen/xenbus/xenbus_xs.c	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/drivers/xen/xenbus/xenbus_xs.c linux-2.6.18-xen/drivers/xen/xenbus/xenbus_xs.c
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -70587,8 +70706,8 @@
 +
 +	return 0;
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/fs/Kconfig linux-2.6.18-xen/fs/Kconfig
---- linux-2.6.18/fs/Kconfig	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/fs/Kconfig linux-2.6.18-xen/fs/Kconfig
+--- linux-2.6.18.3/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
@@ -70598,8 +70717,8 @@
  	help
  	  hugetlbfs is a filesystem backing for HugeTLB pages, based on
  	  ramfs. For architectures that support it, say Y here and read
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-generic/vmlinux.lds.h linux-2.6.18-xen/include/asm-generic/vmlinux.lds.h
---- linux-2.6.18/include/asm-generic/vmlinux.lds.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-generic/vmlinux.lds.h linux-2.6.18-xen/include/asm-generic/vmlinux.lds.h
+--- linux-2.6.18.3/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) }			\
@@ -70608,8 +70727,8 @@
 +
 +#define NOTES								\
 +		.notes : { *(.note.*) } :note
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/apic.h linux-2.6.18-xen/include/asm-i386/apic.h
---- linux-2.6.18/include/asm-i386/apic.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-i386/apic.h linux-2.6.18-xen/include/asm-i386/apic.h
+--- linux-2.6.18.3/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 @@
  
@@ -70624,29 +70743,19 @@
  
  extern int timer_over_8254;
  
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/fixmap.h linux-2.6.18-xen/include/asm-i386/fixmap.h
---- linux-2.6.18/include/asm-i386/fixmap.h	2006-09-20 05:42:06.000000000 +0200
-+++ linux-2.6.18-xen/include/asm-i386/fixmap.h	2006-11-19 14:27:04.000000000 +0100
-@@ -19,7 +19,7 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-i386/fixmap.h linux-2.6.18-xen/include/asm-i386/fixmap.h
+--- linux-2.6.18.3/include/asm-i386/fixmap.h	2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/include/asm-i386/fixmap.h	2006-12-05 18:42:37.000000000 +0100
+@@ -19,6 +19,7 @@
   * Leave one empty page between vmalloc'ed areas and
   * the start of the fixmap.
   */
--#define __FIXADDR_TOP	0xfffff000
-+extern unsigned long __FIXADDR_TOP;
++
+ #define __FIXADDR_TOP	0xfffff000
  
  #ifndef __ASSEMBLY__
- #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
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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);
@@ -70667,8 +70776,8 @@
  static inline unsigned char get_nmi_reason(void)
  {
  	return inb(0x61);
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/agp.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/agp.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/agp.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -70708,8 +70817,8 @@
 +	dma_free_coherent(NULL,PAGE_SIZE<<(order),(table),virt_to_bus(table))
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/desc.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/desc.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/desc.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -70876,8 +70985,8 @@
 +#endif /* !__ASSEMBLY__ */
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/dma-mapping.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/dma-mapping.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/dma-mapping.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -71031,8 +71140,8 @@
 +				  dma_addr_t device_addr, size_t size);
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/fixmap.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/fixmap.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/fixmap.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/*
@@ -71191,8 +71300,8 @@
 +
 +#endif /* !__ASSEMBLY__ */
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/floppy.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/floppy.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/floppy.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/*
@@ -71342,8 +71451,8 @@
 +#define EXTRA_FLOPPY_PARAMS
 +
 +#endif /* __ASM_XEN_I386_FLOPPY_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/highmem.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/highmem.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/highmem.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/*
@@ -71426,8 +71535,84 @@
 +#endif /* __KERNEL__ */
 +
 +#endif /* _ASM_HIGHMEM_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/hypercall.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/hypercall.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/hypercall.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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-12-05 18:42:37.000000000 +0100
+@@ -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.3/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.3/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 @@
 +/******************************************************************************
@@ -71819,8 +72004,8 @@
 +
 +
 +#endif /* __HYPERCALL_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/hypervisor.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/hypervisor.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/hypervisor.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/******************************************************************************
@@ -72057,8 +72242,8 @@
 +}
 +
 +#endif /* __HYPERVISOR_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/io.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/io.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/io.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -72450,8 +72635,92 @@
 +#define ARCH_HAS_DEV_MEM
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/kmap_types.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/kmap_types.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/kmap_types.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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-12-05 18:42:37.000000000 +0100
+@@ -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.3/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.3/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
@@ -72485,8 +72754,8 @@
 +#undef D
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/maddr.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/maddr.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/maddr.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -72649,8 +72918,8 @@
 +#define __pte_ma(x)	((pte_t) { (x) } )
 +
 +#endif /* _I386_MADDR_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/mmu_context.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/mmu_context.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/mmu_context.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -72761,8 +73030,8 @@
 +}
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/mmu.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/mmu.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/mmu.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -72794,8 +73063,8 @@
 +#define arch_dup_mmap(mm, oldmm) ((void)(oldmm), _arch_dup_mmap(mm))
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/page.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/page.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/page.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -73018,8 +73287,8 @@
 +#endif /* __KERNEL__ */
 +
 +#endif /* _I386_PAGE_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/param.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/param.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/param.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -73045,8 +73314,8 @@
 +#define COMMAND_LINE_SIZE 256
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/pci.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pci.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/pci.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -73202,8 +73471,8 @@
 +#define pcibios_scan_all_fns(a, b)	1
 +
 +#endif /* __i386_PCI_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/pgalloc.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgalloc.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/pgalloc.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -73269,8 +73538,8 @@
 +#define check_pgt_cache()	do { } while (0)
 +
 +#endif /* _I386_PGALLOC_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/pgtable-2level-defs.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable-2level-defs.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/pgtable-2level-defs.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -73294,8 +73563,8 @@
 +#define PTRS_PER_PTE	1024
 +
 +#endif /* _I386_PGTABLE_2LEVEL_DEFS_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/pgtable-2level.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable-2level.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/pgtable-2level.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -73385,8 +73654,8 @@
 +void vmalloc_sync_all(void);
 +
 +#endif /* _I386_PGTABLE_2LEVEL_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/pgtable-3level-defs.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable-3level-defs.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/pgtable-3level-defs.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -73414,8 +73683,8 @@
 +#define PTRS_PER_PTE	512
 +
 +#endif /* _I386_PGTABLE_3LEVEL_DEFS_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/pgtable-3level.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable-3level.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/pgtable-3level.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -73603,8 +73872,8 @@
 +#define vmalloc_sync_all() ((void)0)
 +
 +#endif /* _I386_PGTABLE_3LEVEL_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/pgtable.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/pgtable.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/pgtable.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -74115,8 +74384,8 @@
 +#include <asm-generic/pgtable.h>
 +
 +#endif /* _I386_PGTABLE_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/processor.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/processor.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/processor.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/*
@@ -74860,8 +75129,8 @@
 +extern int sysenter_setup(void);
 +
 +#endif /* __ASM_I386_PROCESSOR_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/ptrace.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/ptrace.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/ptrace.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -74954,8 +75223,8 @@
 +#endif /* __KERNEL__ */
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/scatterlist.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/scatterlist.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/scatterlist.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -74980,8 +75249,8 @@
 +#define ISA_DMA_THRESHOLD (0x00ffffff)
 +
 +#endif /* !(_I386_SCATTERLIST_H) */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/segment.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/segment.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/segment.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -75101,8 +75370,8 @@
 +#define IDT_ENTRIES 256
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/setup.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/setup.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/setup.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/*
@@ -75186,8 +75455,8 @@
 +#endif /* __ASSEMBLY__ */
 +
 +#endif /* _i386_SETUP_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/smp.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/smp.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/smp.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -75293,10 +75562,10 @@
 +
 +#endif
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/spinlock.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/spinlock.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/spinlock.h	1970-01-01 01:00:00.000000000 +0100
-+++ 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 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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-12-05 18:42:37.000000000 +0100
+@@ -0,0 +1,202 @@
 +#ifndef __ASM_SPINLOCK_H
 +#define __ASM_SPINLOCK_H
 +
@@ -75330,6 +75599,11 @@
 +	"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" \
@@ -75356,17 +75630,24 @@
 +	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;
 +}
@@ -75382,7 +75663,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)
@@ -75396,7 +75677,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)
@@ -75477,18 +75758,18 @@
 +
 +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/include/asm-i386/mach-xen/asm/swiotlb.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/swiotlb.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/swiotlb.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -75532,8 +75813,8 @@
 +#endif
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/synch_bitops.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/synch_bitops.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/synch_bitops.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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__
@@ -75677,10 +75958,10 @@
 +#define synch_cmpxchg_subword synch_cmpxchg
 +
 +#endif /* __XEN_SYNCH_BITOPS_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/system.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/system.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/system.h	1970-01-01 01:00:00.000000000 +0100
-+++ 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 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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-12-05 18:42:37.000000000 +0100
+@@ -0,0 +1,495 @@
 +#ifndef __ASM_SYSTEM_H
 +#define __ASM_SYSTEM_H
 +
@@ -75779,10 +76060,6 @@
 +#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__( \
@@ -75791,12 +76068,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; \
@@ -75819,7 +76096,6 @@
 +		:"=r" (__dummy)); \
 +	__dummy; \
 +})
-+
 +#define read_cr4_safe() ({			      \
 +	unsigned int __dummy;			      \
 +	/* This could fault if %cr4 does not exist */ \
@@ -75833,13 +76109,17 @@
 +})
 +
 +#define write_cr4(x) \
-+	__asm__ __volatile__("movl %0,%%cr4": :"r" (x));
++	__asm__ __volatile__("movl %0,%%cr4": :"r" (x))
++/*
++ * Clear and set 'TS' bit respectively
++ */
++#define clts() (HYPERVISOR_fpu_taskswitch(0))
 +#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)
 +{
@@ -76150,92 +76430,7 @@
 +#define set_mb(var, value) do { var = value; barrier(); } while (0)
 +#endif
 +
-+/* 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; })
++#include <linux/irqflags.h>
 +
 +/*
 + * disable hlt during certain critical i/o operations
@@ -76262,8 +76457,8 @@
 +void default_idle(void);
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/timer.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/timer.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/timer.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -76336,8 +76531,8 @@
 +extern struct init_timer_opts timer_pmtmr_init;
 +#endif
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/tlbflush.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/tlbflush.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/tlbflush.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -76441,8 +76636,8 @@
 +}
 +
 +#endif /* _I386_TLBFLUSH_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/asm/vga.h linux-2.6.18-xen/include/asm-i386/mach-xen/asm/vga.h
---- linux-2.6.18/include/asm-i386/mach-xen/asm/vga.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/*
@@ -76465,8 +76660,8 @@
 +#define vga_writeb(x,y) (*(y) = (x))
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/irq_vectors.h linux-2.6.18-xen/include/asm-i386/mach-xen/irq_vectors.h
---- linux-2.6.18/include/asm-i386/mach-xen/irq_vectors.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/*
@@ -76594,8 +76789,8 @@
 +#define irq_to_dynirq(_x)	((_x) - DYNIRQ_BASE)
 +
 +#endif /* _ASM_IRQ_VECTORS_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/mach_traps.h linux-2.6.18-xen/include/asm-i386/mach-xen/mach_traps.h
---- linux-2.6.18/include/asm-i386/mach-xen/mach_traps.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/*
@@ -76631,30 +76826,17 @@
 +static inline void reassert_nmi(void) {}
 +
 +#endif /* !_MACH_TRAPS_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/mach-xen/setup_arch.h linux-2.6.18-xen/include/asm-i386/mach-xen/setup_arch.h
---- linux-2.6.18/include/asm-i386/mach-xen/setup_arch.h	1970-01-01 01:00:00.000000000 +0100
-+++ 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 @@
-+
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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-12-05 18:42:37.000000000 +0100
+@@ -0,0 +1,5 @@
 +/* 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/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
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-i386/pgtable-2level-defs.h linux-2.6.18-xen/include/asm-i386/pgtable-2level-defs.h
+--- linux-2.6.18.3/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
@@ -76665,8 +76847,8 @@
  /*
   * traditional i386 two-level paging structure:
   */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-i386/pgtable-3level-defs.h linux-2.6.18-xen/include/asm-i386/pgtable-3level-defs.h
---- linux-2.6.18/include/asm-i386/pgtable-3level-defs.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-i386/pgtable-3level-defs.h linux-2.6.18-xen/include/asm-i386/pgtable-3level-defs.h
+--- linux-2.6.18.3/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
@@ -76677,8 +76859,8 @@
  /*
   * PGDIR_SHIFT determines what a top-level page table entry can map
   */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/agp.h linux-2.6.18-xen/include/asm-ia64/agp.h
---- linux-2.6.18/include/asm-ia64/agp.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-ia64/agp.h linux-2.6.18-xen/include/asm-ia64/agp.h
+--- linux-2.6.18.3/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()
@@ -76725,9 +76907,9 @@
 +#endif /* CONFIG_XEN */
  
  #endif /* _ASM_IA64_AGP_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/dma-mapping.h linux-2.6.18-xen/include/asm-ia64/dma-mapping.h
---- linux-2.6.18/include/asm-ia64/dma-mapping.h	2006-09-20 05:42:06.000000000 +0200
-+++ linux-2.6.18-xen/include/asm-ia64/dma-mapping.h	2006-11-19 14:27:04.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-ia64/dma-mapping.h linux-2.6.18-xen/include/asm-ia64/dma-mapping.h
+--- linux-2.6.18.3/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-12-05 18:42:37.000000000 +0100
 @@ -6,20 +6,67 @@
   *	David Mosberger-Tang <davidm at hpl.hp.com>
   */
@@ -76818,7 +77000,7 @@
  
  static inline int
  dma_set_mask (struct device *dev, u64 mask)
-@@ -61,4 +110,30 @@
+@@ -61,4 +110,29 @@
  
  #define dma_is_consistent(dma_handle)	(1)	/* all we do is coherent memory... */
  
@@ -76846,17 +77028,16 @@
 +	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/include/asm-ia64/fixmap.h linux-2.6.18-xen/include/asm-ia64/fixmap.h
---- linux-2.6.18/include/asm-ia64/fixmap.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-ia64/fixmap.h linux-2.6.18-xen/include/asm-ia64/fixmap.h
+--- linux-2.6.18.3/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/include/asm-ia64/gcc_intrin.h linux-2.6.18-xen/include/asm-ia64/gcc_intrin.h
---- linux-2.6.18/include/asm-ia64/gcc_intrin.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-ia64/gcc_intrin.h linux-2.6.18-xen/include/asm-ia64/gcc_intrin.h
+--- linux-2.6.18.3/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 @@
  
@@ -77047,8 +77228,8 @@
 +#define __ia64_get_psr_i()	(__ia64_getreg(_IA64_REG_PSR) & 0x4000UL)
 +
  #endif /* _ASM_IA64_GCC_INTRIN_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/hw_irq.h linux-2.6.18-xen/include/asm-ia64/hw_irq.h
---- linux-2.6.18/include/asm-ia64/hw_irq.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-ia64/hw_irq.h linux-2.6.18-xen/include/asm-ia64/hw_irq.h
+--- linux-2.6.18.3/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>
@@ -77075,8 +77256,8 @@
  	platform_send_ipi(smp_processor_id(), vector, IA64_IPI_DM_INT, 0);
  }
  
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/hypercall.h linux-2.6.18-xen/include/asm-ia64/hypercall.h
---- linux-2.6.18/include/asm-ia64/hypercall.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-ia64/hypercall.h linux-2.6.18-xen/include/asm-ia64/hypercall.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -77502,10 +77683,10 @@
 +#define HYPERVISOR_update_va_mapping(va, new_val, flags) (0)
 +
 +#endif /* __HYPERCALL_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/hypervisor.h linux-2.6.18-xen/include/asm-ia64/hypervisor.h
---- linux-2.6.18/include/asm-ia64/hypervisor.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.18-xen/include/asm-ia64/hypervisor.h	2006-11-19 14:27:05.000000000 +0100
-@@ -0,0 +1,218 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-ia64/hypervisor.h linux-2.6.18-xen/include/asm-ia64/hypervisor.h
+--- linux-2.6.18.3/include/asm-ia64/hypervisor.h	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen/include/asm-ia64/hypervisor.h	2006-12-05 18:42:37.000000000 +0100
+@@ -0,0 +1,219 @@
 +/******************************************************************************
 + * hypervisor.h
 + * 
@@ -77647,6 +77828,7 @@
 +			   pgprot_t prot,
 +			   domid_t  domid);
 +struct file;
++int privcmd_enforce_singleshot_mapping(struct vm_area_struct *vma);
 +int privcmd_mmap(struct file * file, struct vm_area_struct * vma);
 +#define HAVE_ARCH_PRIVCMD_MMAP
 +
@@ -77724,8 +77906,8 @@
 +#endif
 +
 +#endif /* __HYPERVISOR_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/intel_intrin.h linux-2.6.18-xen/include/asm-ia64/intel_intrin.h
---- linux-2.6.18/include/asm-ia64/intel_intrin.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-ia64/intel_intrin.h linux-2.6.18-xen/include/asm-ia64/intel_intrin.h
+--- linux-2.6.18.3/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
@@ -77850,8 +78032,8 @@
  #define __builtin_trap()	__break(0);
  
  #endif /* _ASM_IA64_INTEL_INTRIN_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/io.h linux-2.6.18-xen/include/asm-ia64/io.h
---- linux-2.6.18/include/asm-ia64/io.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-ia64/io.h linux-2.6.18-xen/include/asm-ia64/io.h
+--- linux-2.6.18.3/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
@@ -77907,8 +78089,8 @@
  
  # endif /* KERNEL */
  
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/iosapic.h linux-2.6.18-xen/include/asm-ia64/iosapic.h
---- linux-2.6.18/include/asm-ia64/iosapic.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-ia64/iosapic.h linux-2.6.18-xen/include/asm-ia64/iosapic.h
+--- linux-2.6.18.3/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 @@
  
@@ -77926,8 +78108,8 @@
  
  static inline void iosapic_eoi(char __iomem *iosapic, u32 vector)
  {
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/irq.h linux-2.6.18-xen/include/asm-ia64/irq.h
---- linux-2.6.18/include/asm-ia64/irq.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-ia64/irq.h linux-2.6.18-xen/include/asm-ia64/irq.h
+--- linux-2.6.18.3/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
@@ -77969,8 +78151,8 @@
  
  static __inline__ int
  irq_canonicalize (int irq)
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/machvec_dig.h linux-2.6.18-xen/include/asm-ia64/machvec_dig.h
---- linux-2.6.18/include/asm-ia64/machvec_dig.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-ia64/machvec_dig.h linux-2.6.18-xen/include/asm-ia64/machvec_dig.h
+--- linux-2.6.18.3/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"
@@ -77992,8 +78174,8 @@
 +#endif
 +
  #endif /* _ASM_IA64_MACHVEC_DIG_h */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/maddr.h linux-2.6.18-xen/include/asm-ia64/maddr.h
---- linux-2.6.18/include/asm-ia64/maddr.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-ia64/maddr.h linux-2.6.18-xen/include/asm-ia64/maddr.h
+--- linux-2.6.18.3/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
@@ -78088,8 +78270,8 @@
 +typedef unsigned long maddr_t;	// to compile netback, netfront
 +
 +#endif /* _ASM_IA64_MADDR_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/meminit.h linux-2.6.18-xen/include/asm-ia64/meminit.h
---- linux-2.6.18/include/asm-ia64/meminit.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-ia64/meminit.h linux-2.6.18-xen/include/asm-ia64/meminit.h
+--- linux-2.6.18.3/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
@@ -78107,8 +78289,8 @@
  
  struct rsvd_region {
  	unsigned long start;	/* virtual address of beginning of element */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/page.h linux-2.6.18-xen/include/asm-ia64/page.h
---- linux-2.6.18/include/asm-ia64/page.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-ia64/page.h linux-2.6.18-xen/include/asm-ia64/page.h
+--- linux-2.6.18.3/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))
@@ -78175,8 +78357,8 @@
 +#endif /* __ASSEMBLY__ */
 +#endif /* __KERNEL__ */
  #endif /* _ASM_IA64_PAGE_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/pal.h linux-2.6.18-xen/include/asm-ia64/pal.h
---- linux-2.6.18/include/asm-ia64/pal.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-ia64/pal.h linux-2.6.18-xen/include/asm-ia64/pal.h
+--- linux-2.6.18.3/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__
@@ -78186,8 +78368,8 @@
  #include <asm/fpu.h>
  
  /*
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/pgalloc.h linux-2.6.18-xen/include/asm-ia64/pgalloc.h
---- linux-2.6.18/include/asm-ia64/pgalloc.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-ia64/pgalloc.h linux-2.6.18-xen/include/asm-ia64/pgalloc.h
+--- linux-2.6.18.3/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
@@ -78201,8 +78383,8 @@
  }
  
  static inline void
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/privop.h linux-2.6.18-xen/include/asm-ia64/privop.h
---- linux-2.6.18/include/asm-ia64/privop.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-ia64/privop.h linux-2.6.18-xen/include/asm-ia64/privop.h
+--- linux-2.6.18.3/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
@@ -78264,8 +78446,8 @@
 +#endif /* !__ASSEMBLY */
 +
 +#endif /* _ASM_IA64_PRIVOP_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/processor.h linux-2.6.18-xen/include/asm-ia64/processor.h
---- linux-2.6.18/include/asm-ia64/processor.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-ia64/processor.h linux-2.6.18-xen/include/asm-ia64/processor.h
+--- linux-2.6.18.3/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>
@@ -78275,8 +78457,8 @@
  
  #define IA64_NUM_DBG_REGS	8
  /*
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/synch_bitops.h linux-2.6.18-xen/include/asm-ia64/synch_bitops.h
---- linux-2.6.18/include/asm-ia64/synch_bitops.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-ia64/synch_bitops.h linux-2.6.18-xen/include/asm-ia64/synch_bitops.h
+--- linux-2.6.18.3/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__
@@ -78340,8 +78522,8 @@
 +#define synch_cmpxchg_subword synch_cmpxchg
 +
 +#endif /* __XEN_SYNCH_BITOPS_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/system.h linux-2.6.18-xen/include/asm-ia64/system.h
---- linux-2.6.18/include/asm-ia64/system.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-ia64/system.h linux-2.6.18-xen/include/asm-ia64/system.h
+--- linux-2.6.18.3/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)			\
@@ -78361,8 +78543,8 @@
  
  #define irqs_disabled()				\
  ({						\
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-ia64/xen/privop.h linux-2.6.18-xen/include/asm-ia64/xen/privop.h
---- linux-2.6.18/include/asm-ia64/xen/privop.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-ia64/xen/privop.h linux-2.6.18-xen/include/asm-ia64/xen/privop.h
+--- linux-2.6.18.3/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
@@ -78669,8 +78851,8 @@
 +#define	ia64_pal_call_static		xen_pal_call_static
 +
 +#endif /* _ASM_IA64_XEN_PRIVOP_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-um/page.h linux-2.6.18-xen/include/asm-um/page.h
---- linux-2.6.18/include/asm-um/page.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-um/page.h linux-2.6.18-xen/include/asm-um/page.h
+--- linux-2.6.18.3/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);
@@ -78681,8 +78863,8 @@
  #define HAVE_ARCH_FREE_PAGE
  
  #include <asm-generic/memory_model.h>
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/apic.h linux-2.6.18-xen/include/asm-x86_64/apic.h
---- linux-2.6.18/include/asm-x86_64/apic.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-x86_64/apic.h linux-2.6.18-xen/include/asm-x86_64/apic.h
+--- linux-2.6.18.3/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;
@@ -78698,8 +78880,26 @@
  
  #endif /* CONFIG_X86_LOCAL_APIC */
  
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/arch_hooks.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/arch_hooks.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/arch_hooks.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/asm-x86_64/ipi.h linux-2.6.18-xen/include/asm-x86_64/ipi.h
+--- linux-2.6.18.3/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-12-05 18:42:37.000000000 +0100
+@@ -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.3/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.3/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
@@ -78729,8 +78929,8 @@
 +extern void mca_nmi_hook(void);
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/bootsetup.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/bootsetup.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/bootsetup.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +
@@ -78775,8 +78975,8 @@
 +#define RAMDISK_LOAD_FLAG		0x4000	
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/desc.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/desc.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/desc.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 */ 
@@ -79042,10 +79242,10 @@
 +#endif /* !__ASSEMBLY__ */
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/dma-mapping.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/dma-mapping.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/dma-mapping.h	1970-01-01 01:00:00.000000000 +0100
-+++ 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 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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-12-05 18:42:37.000000000 +0100
+@@ -0,0 +1,207 @@
 +#ifndef _X8664_DMA_MAPPING_H
 +#define _X8664_DMA_MAPPING_H 1
 +
@@ -79248,14 +79448,13 @@
 +
 +extern struct device fallback_dev;
 +#endif
-+
 +extern int panic_on_overflow;
 +
 +#endif /* _X8664_DMA_MAPPING_H */
 +
 +#include <asm-i386/mach-xen/asm/dma-mapping.h>
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/dmi.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/dmi.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/dmi.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -79287,8 +79486,8 @@
 +#define dmi_iounmap bt_iounmap
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/e820.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/e820.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/e820.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/*
@@ -79355,8 +79554,8 @@
 +#endif/*!__ASSEMBLY__*/
 +
 +#endif/*__E820_HEADER*/
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/fixmap.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/fixmap.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/fixmap.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/*
@@ -79472,8 +79671,8 @@
 +}
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/floppy.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/floppy.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/floppy.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/*
@@ -79682,10 +79881,10 @@
 +#define EXTRA_FLOPPY_PARAMS
 +
 +#endif /* __ASM_XEN_X86_64_FLOPPY_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/hw_irq.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/hw_irq.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/hw_irq.h	1970-01-01 01:00:00.000000000 +0100
-+++ 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 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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-12-05 18:42:37.000000000 +0100
+@@ -0,0 +1,136 @@
 +#ifndef _ASM_HW_IRQ_H
 +#define _ASM_HW_IRQ_H
 +
@@ -79819,12 +80018,11 @@
 +
 +#define platform_legacy_irq(irq)	((irq) < 16)
 +
-+
 +#endif
 +
 +#endif /* _ASM_HW_IRQ_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/hypercall.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/hypercall.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/hypercall.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/******************************************************************************
@@ -80216,14 +80414,14 @@
 +}
 +
 +#endif /* __HYPERCALL_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/hypervisor.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/hypervisor.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/hypervisor.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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/include/asm-x86_64/mach-xen/asm/io.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/io.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/io.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -80553,8 +80751,77 @@
 +#define ARCH_HAS_DEV_MEM
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/irq.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/irq.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/irq.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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-12-05 18:42:37.000000000 +0100
+@@ -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.3/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.3/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
@@ -80595,8 +80862,8 @@
 +#define __ARCH_HAS_DO_SOFTIRQ 1
 +
 +#endif /* _ASM_IRQ_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/maddr.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/maddr.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/maddr.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -80738,8 +81005,8 @@
 +
 +#endif /* _X86_64_MADDR_H */
 +
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/mmu_context.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/mmu_context.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/mmu_context.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -80877,8 +81144,8 @@
 +}
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/mmu.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/mmu.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/mmu.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -80919,8 +81186,8 @@
 +#endif
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/msr.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/msr.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/msr.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -81322,8 +81589,8 @@
 +#define MSR_P4_U2L_ESCR1 		0x3b1
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/nmi.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/nmi.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/nmi.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/*
@@ -81419,8 +81686,8 @@
 +#define NMI_INVALID	3
 +
 +#endif /* ASM_NMI_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/page.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/page.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/page.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -81631,8 +81898,8 @@
 +#endif /* __KERNEL__ */
 +
 +#endif /* _X86_64_PAGE_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/param.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/param.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/param.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -81657,8 +81924,8 @@
 +#define MAXHOSTNAMELEN	64	/* max length of hostname */
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/pci.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/pci.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/pci.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -81834,8 +82101,8 @@
 +#define pcibios_scan_all_fns(a, b)	1
 +
 +#endif /* __x8664_PCI_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/pgalloc.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/pgalloc.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/pgalloc.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -82064,8 +82331,8 @@
 +#define __pud_free_tlb(tlb,x)   pud_free((x))
 +
 +#endif /* _X86_64_PGALLOC_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/pgtable.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/pgtable.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/pgtable.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -82626,10 +82893,10 @@
 +#include <asm-generic/pgtable.h>
 +
 +#endif /* _X86_64_PGTABLE_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/processor.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/processor.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/processor.h	1970-01-01 01:00:00.000000000 +0100
-+++ 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 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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-12-05 18:42:37.000000000 +0100
+@@ -0,0 +1,503 @@
 +/*
 + * include/asm-x86_64/processor.h
 + *
@@ -82706,7 +82973,6 @@
 +	__u8	phys_proc_id;	/* Physical Processor id. */
 +	__u8	cpu_core_id;	/* Core id. */
 +#endif
-+
 +} ____cacheline_aligned;
 +
 +#define X86_VENDOR_INTEL 0
@@ -83134,8 +83400,8 @@
 +#define HAVE_ARCH_PICK_MMAP_LAYOUT 1
 +
 +#endif /* __ASM_X86_64_PROCESSOR_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/ptrace.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/ptrace.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/ptrace.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -83263,8 +83529,8 @@
 +#endif
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/smp.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/smp.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/smp.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -83417,16 +83683,16 @@
 +
 +#endif
 +
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/synch_bitops.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/synch_bitops.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/synch_bitops.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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/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 @@
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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-12-05 18:42:37.000000000 +0100
+@@ -0,0 +1,264 @@
 +#ifndef __ASM_SYSTEM_H
 +#define __ASM_SYSTEM_H
 +
@@ -83466,7 +83732,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						    \
@@ -83680,101 +83946,19 @@
 +
 +#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/include/asm-x86_64/mach-xen/asm/timer.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/timer.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/timer.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -83844,8 +84028,8 @@
 +extern struct init_timer_opts timer_pmtmr_init;
 +#endif
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/tlbflush.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/tlbflush.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/tlbflush.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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
@@ -83951,8 +84135,8 @@
 +}
 +
 +#endif /* _X8664_TLBFLUSH_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/vga.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/vga.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/vga.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/*
@@ -83975,8 +84159,8 @@
 +#define vga_writeb(x,y) (*(y) = (x))
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/asm/xor.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/asm/xor.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/asm/xor.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/*
@@ -84307,8 +84491,8 @@
 +   We may also be able to load into the L1 only depending on how the cpu
 +   deals with a load to a line that is being prefetched.  */
 +#define XOR_SELECT_TEMPLATE(FASTEST) (&xor_block_sse)
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/irq_vectors.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/irq_vectors.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/irq_vectors.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/*
@@ -84434,8 +84618,8 @@
 +#define irq_to_dynirq(_x)	((_x) - DYNIRQ_BASE)
 +
 +#endif /* _ASM_IRQ_VECTORS_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/mach_time.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/mach_time.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/mach_time.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/*
@@ -84549,8 +84733,8 @@
 +}
 +
 +#endif /* !_MACH_TIME_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/mach_timer.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/mach_timer.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/mach_timer.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/*
@@ -84601,8 +84785,8 @@
 +}
 +
 +#endif /* !_MACH_TIMER_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/setup_arch_post.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/setup_arch_post.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/setup_arch_post.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/**
@@ -84663,8 +84847,8 @@
 +	}
 +#endif
 +}
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/asm-x86_64/mach-xen/setup_arch_pre.h linux-2.6.18-xen/include/asm-x86_64/mach-xen/setup_arch_pre.h
---- linux-2.6.18/include/asm-x86_64/mach-xen/setup_arch_pre.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 */
@@ -84672,8 +84856,8 @@
 +#define ARCH_SETUP machine_specific_arch_setup();
 +
 +static void __init machine_specific_arch_setup(void);
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/linux/elfnote.h linux-2.6.18-xen/include/linux/elfnote.h
---- linux-2.6.18/include/linux/elfnote.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/linux/elfnote.h linux-2.6.18-xen/include/linux/elfnote.h
+--- linux-2.6.18.3/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
@@ -84766,8 +84950,8 @@
 +#endif	/* __ASSEMBLER__ */
 +
 +#endif /* _LINUX_ELFNOTE_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/linux/gfp.h linux-2.6.18-xen/include/linux/gfp.h
---- linux-2.6.18/include/linux/gfp.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/linux/gfp.h linux-2.6.18-xen/include/linux/gfp.h
+--- linux-2.6.18.3/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 @@
   */
@@ -84782,8 +84966,8 @@
  #endif
  
  extern struct page *
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/linux/highmem.h linux-2.6.18-xen/include/linux/highmem.h
---- linux-2.6.18/include/linux/highmem.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/linux/highmem.h linux-2.6.18-xen/include/linux/highmem.h
+--- linux-2.6.18.3/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 @@
  
@@ -84802,8 +84986,8 @@
  
  static inline void *kmap(struct page *page)
  {
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/linux/interrupt.h linux-2.6.18-xen/include/linux/interrupt.h
---- linux-2.6.18/include/linux/interrupt.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/linux/interrupt.h linux-2.6.18-xen/include/linux/interrupt.h
+--- linux-2.6.18.3/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 @@
  
@@ -84818,8 +85002,8 @@
  #ifndef __ARCH_SET_SOFTIRQ_PENDING
  #define set_softirq_pending(x) (local_softirq_pending() = (x))
  #define or_softirq_pending(x)  (local_softirq_pending() |= (x))
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/linux/mm.h linux-2.6.18-xen/include/linux/mm.h
---- linux-2.6.18/include/linux/mm.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/linux/mm.h linux-2.6.18-xen/include/linux/mm.h
+--- linux-2.6.18.3/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) */
@@ -84845,8 +85029,8 @@
  #ifdef CONFIG_PROC_FS
  void vm_stat_account(struct mm_struct *, unsigned long, struct file *, long);
  #else
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/linux/oprofile.h linux-2.6.18-xen/include/linux/oprofile.h
---- linux-2.6.18/include/linux/oprofile.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/linux/oprofile.h linux-2.6.18-xen/include/linux/oprofile.h
+--- linux-2.6.18.3/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>
@@ -84880,8 +85064,22 @@
  
  /**
   * Create a file of the given name as a child of the given root, with
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/linux/skbuff.h linux-2.6.18-xen/include/linux/skbuff.h
---- linux-2.6.18/include/linux/skbuff.h	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/linux/pfn.h linux-2.6.18-xen/include/linux/pfn.h
+--- linux-2.6.18.3/include/linux/pfn.h	2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/include/linux/pfn.h	2006-12-05 18:42:37.000000000 +0100
+@@ -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.3/include/linux/skbuff.h linux-2.6.18-xen/include/linux/skbuff.h
+--- linux-2.6.18.3/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
@@ -84934,19 +85132,8 @@
  
  /**
   *	dev_alloc_skb - allocate an skbuff for receiving
-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
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/balloon.h linux-2.6.18-xen/include/xen/balloon.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -85006,8 +85193,8 @@
 +#define balloon_unlock(__flags) spin_unlock_irqrestore(&balloon_lock, __flags)
 +
 +#endif /* __ASM_BALLOON_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/cpu_hotplug.h linux-2.6.18-xen/include/xen/cpu_hotplug.h
---- linux-2.6.18/include/xen/cpu_hotplug.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/cpu_hotplug.h linux-2.6.18-xen/include/xen/cpu_hotplug.h
+--- linux-2.6.18.3/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__
@@ -85053,8 +85240,8 @@
 +#endif /* !defined(CONFIG_HOTPLUG_CPU) */
 +
 +#endif /* __XEN_CPU_HOTPLUG_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/driver_util.h linux-2.6.18-xen/include/xen/driver_util.h
---- linux-2.6.18/include/xen/driver_util.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/driver_util.h linux-2.6.18-xen/include/xen/driver_util.h
+--- linux-2.6.18.3/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 @@
 +
@@ -85072,8 +85259,8 @@
 +extern void unlock_vm_area(struct vm_struct *area);
 +
 +#endif /* __ASM_XEN_DRIVER_UTIL_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/evtchn.h linux-2.6.18-xen/include/xen/evtchn.h
---- linux-2.6.18/include/xen/evtchn.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/evtchn.h linux-2.6.18-xen/include/xen/evtchn.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -85189,8 +85376,8 @@
 +extern void notify_remote_via_irq(int irq);
 +
 +#endif /* __ASM_EVTCHN_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/features.h linux-2.6.18-xen/include/xen/features.h
---- linux-2.6.18/include/xen/features.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/features.h linux-2.6.18-xen/include/xen/features.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -85213,8 +85400,8 @@
 +#define xen_feature(flag)	(xen_features[flag])
 +
 +#endif /* __ASM_XEN_FEATURES_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/foreign_page.h linux-2.6.18-xen/include/xen/foreign_page.h
---- linux-2.6.18/include/xen/foreign_page.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/foreign_page.h linux-2.6.18-xen/include/xen/foreign_page.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -85247,8 +85434,8 @@
 +	( (void (*) (struct page *)) (page)->mapping )
 +
 +#endif /* __ASM_XEN_FOREIGN_PAGE_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/gnttab.h linux-2.6.18-xen/include/xen/gnttab.h
---- linux-2.6.18/include/xen/gnttab.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/gnttab.h linux-2.6.18-xen/include/xen/gnttab.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -85401,8 +85588,8 @@
 +}
 +
 +#endif /* __ASM_GNTTAB_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/hvm.h linux-2.6.18-xen/include/xen/hvm.h
---- linux-2.6.18/include/xen/hvm.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/hvm.h linux-2.6.18-xen/include/xen/hvm.h
+--- linux-2.6.18.3/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 */
@@ -85429,8 +85616,8 @@
 +}
 +
 +#endif /* XEN_HVM_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/hypervisor_sysfs.h linux-2.6.18-xen/include/xen/hypervisor_sysfs.h
---- linux-2.6.18/include/xen/hypervisor_sysfs.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/hypervisor_sysfs.h linux-2.6.18-xen/include/xen/hypervisor_sysfs.h
+--- linux-2.6.18.3/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 @@
 +/*
@@ -85465,8 +85652,8 @@
 +};
 +
 +#endif /* _HYP_SYSFS_H_ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/acm.h linux-2.6.18-xen/include/xen/interface/acm.h
---- linux-2.6.18/include/xen/interface/acm.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/acm.h linux-2.6.18-xen/include/xen/interface/acm.h
+--- linux-2.6.18.3/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 @@
 +/*
@@ -85656,8 +85843,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/acm_ops.h linux-2.6.18-xen/include/xen/interface/acm_ops.h
---- linux-2.6.18/include/xen/interface/acm_ops.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/acm_ops.h linux-2.6.18-xen/include/xen/interface/acm_ops.h
+--- linux-2.6.18.3/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 @@
 +/*
@@ -85762,8 +85949,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/arch-ia64.h linux-2.6.18-xen/include/xen/interface/arch-ia64.h
---- linux-2.6.18/include/xen/interface/arch-ia64.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/arch-ia64.h linux-2.6.18-xen/include/xen/interface/arch-ia64.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -86214,8 +86401,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/arch-powerpc.h linux-2.6.18-xen/include/xen/interface/arch-powerpc.h
---- linux-2.6.18/include/xen/interface/arch-powerpc.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/arch-powerpc.h linux-2.6.18-xen/include/xen/interface/arch-powerpc.h
+--- linux-2.6.18.3/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 @@
 +/*
@@ -86333,8 +86520,8 @@
 +#endif
 +
 +#endif
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/arch-x86_32.h linux-2.6.18-xen/include/xen/interface/arch-x86_32.h
---- linux-2.6.18/include/xen/interface/arch-x86_32.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/arch-x86_32.h linux-2.6.18-xen/include/xen/interface/arch-x86_32.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -86592,8 +86779,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/arch-x86_64.h linux-2.6.18-xen/include/xen/interface/arch-x86_64.h
---- linux-2.6.18/include/xen/interface/arch-x86_64.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/arch-x86_64.h linux-2.6.18-xen/include/xen/interface/arch-x86_64.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -86918,8 +87105,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/callback.h linux-2.6.18-xen/include/xen/interface/callback.h
---- linux-2.6.18/include/xen/interface/callback.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/callback.h linux-2.6.18-xen/include/xen/interface/callback.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -86996,8 +87183,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/dom0_ops.h linux-2.6.18-xen/include/xen/interface/dom0_ops.h
---- linux-2.6.18/include/xen/interface/dom0_ops.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/dom0_ops.h linux-2.6.18-xen/include/xen/interface/dom0_ops.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -87102,8 +87289,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/domctl.h linux-2.6.18-xen/include/xen/interface/domctl.h
---- linux-2.6.18/include/xen/interface/domctl.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/domctl.h linux-2.6.18-xen/include/xen/interface/domctl.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -87498,8 +87685,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/elfnote.h linux-2.6.18-xen/include/xen/interface/elfnote.h
---- linux-2.6.18/include/xen/interface/elfnote.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/elfnote.h linux-2.6.18-xen/include/xen/interface/elfnote.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -87635,8 +87822,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/event_channel.h linux-2.6.18-xen/include/xen/interface/event_channel.h
---- linux-2.6.18/include/xen/interface/event_channel.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/event_channel.h linux-2.6.18-xen/include/xen/interface/event_channel.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -87872,8 +88059,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/features.h linux-2.6.18-xen/include/xen/interface/features.h
---- linux-2.6.18/include/xen/interface/features.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/features.h linux-2.6.18-xen/include/xen/interface/features.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -87929,8 +88116,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/grant_table.h linux-2.6.18-xen/include/xen/interface/grant_table.h
---- linux-2.6.18/include/xen/interface/grant_table.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/grant_table.h linux-2.6.18-xen/include/xen/interface/grant_table.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -88295,8 +88482,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/hvm/e820.h linux-2.6.18-xen/include/xen/interface/hvm/e820.h
---- linux-2.6.18/include/xen/interface/hvm/e820.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/hvm/e820.h linux-2.6.18-xen/include/xen/interface/hvm/e820.h
+--- linux-2.6.18.3/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__
@@ -88331,8 +88518,8 @@
 +#define HVM_BELOW_4G_MMIO_LENGTH    ((1ULL << 32) - HVM_BELOW_4G_MMIO_START)
 +
 +#endif /* __XEN_PUBLIC_HVM_E820_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/hvm/hvm_info_table.h linux-2.6.18-xen/include/xen/interface/hvm/hvm_info_table.h
---- linux-2.6.18/include/xen/interface/hvm/hvm_info_table.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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 @@
 +/******************************************************************************
@@ -88357,8 +88544,8 @@
 +};
 +
 +#endif /* __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/hvm/ioreq.h linux-2.6.18-xen/include/xen/interface/hvm/ioreq.h
---- linux-2.6.18/include/xen/interface/hvm/ioreq.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/hvm/ioreq.h linux-2.6.18-xen/include/xen/interface/hvm/ioreq.h
+--- linux-2.6.18.3/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 @@
 +/*
@@ -88460,8 +88647,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/hvm/params.h linux-2.6.18-xen/include/xen/interface/hvm/params.h
---- linux-2.6.18/include/xen/interface/hvm/params.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/hvm/params.h linux-2.6.18-xen/include/xen/interface/hvm/params.h
+--- linux-2.6.18.3/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__
@@ -88488,8 +88675,8 @@
 +DEFINE_XEN_GUEST_HANDLE(xen_hvm_param_t);
 +
 +#endif /* __XEN_PUBLIC_HVM_PARAMS_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/hvm/vmx_assist.h linux-2.6.18-xen/include/xen/interface/hvm/vmx_assist.h
---- linux-2.6.18/include/xen/interface/hvm/vmx_assist.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/hvm/vmx_assist.h linux-2.6.18-xen/include/xen/interface/hvm/vmx_assist.h
+--- linux-2.6.18.3/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 @@
 +/*
@@ -88590,8 +88777,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/io/blkif.h linux-2.6.18-xen/include/xen/interface/io/blkif.h
---- linux-2.6.18/include/xen/interface/io/blkif.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/io/blkif.h linux-2.6.18-xen/include/xen/interface/io/blkif.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -88681,8 +88868,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/io/console.h linux-2.6.18-xen/include/xen/interface/io/console.h
---- linux-2.6.18/include/xen/interface/io/console.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/io/console.h linux-2.6.18-xen/include/xen/interface/io/console.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -88718,8 +88905,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/io/netif.h linux-2.6.18-xen/include/xen/interface/io/netif.h
---- linux-2.6.18/include/xen/interface/io/netif.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/io/netif.h linux-2.6.18-xen/include/xen/interface/io/netif.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -88888,8 +89075,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/io/pciif.h linux-2.6.18-xen/include/xen/interface/io/pciif.h
---- linux-2.6.18/include/xen/interface/io/pciif.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/io/pciif.h linux-2.6.18-xen/include/xen/interface/io/pciif.h
+--- linux-2.6.18.3/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 @@
 +/*
@@ -88947,8 +89134,8 @@
 +};
 +
 +#endif /* __XEN_PCI_COMMON_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/io/ring.h linux-2.6.18-xen/include/xen/interface/io/ring.h
---- linux-2.6.18/include/xen/interface/io/ring.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/io/ring.h linux-2.6.18-xen/include/xen/interface/io/ring.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -89224,8 +89411,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/io/tpmif.h linux-2.6.18-xen/include/xen/interface/io/tpmif.h
---- linux-2.6.18/include/xen/interface/io/tpmif.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/io/tpmif.h linux-2.6.18-xen/include/xen/interface/io/tpmif.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -89287,8 +89474,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/io/xenbus.h linux-2.6.18-xen/include/xen/interface/io/xenbus.h
---- linux-2.6.18/include/xen/interface/io/xenbus.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/io/xenbus.h linux-2.6.18-xen/include/xen/interface/io/xenbus.h
+--- linux-2.6.18.3/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 @@
 +/*****************************************************************************
@@ -89336,8 +89523,8 @@
 +typedef enum xenbus_state XenbusState;
 +
 +#endif /* _XEN_PUBLIC_IO_XENBUS_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/io/xs_wire.h linux-2.6.18-xen/include/xen/interface/io/xs_wire.h
---- linux-2.6.18/include/xen/interface/io/xs_wire.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/io/xs_wire.h linux-2.6.18-xen/include/xen/interface/io/xs_wire.h
+--- linux-2.6.18.3/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 @@
 +/*
@@ -89437,8 +89624,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/memory.h linux-2.6.18-xen/include/xen/interface/memory.h
---- linux-2.6.18/include/xen/interface/memory.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/memory.h linux-2.6.18-xen/include/xen/interface/memory.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -89684,8 +89871,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/nmi.h linux-2.6.18-xen/include/xen/interface/nmi.h
---- linux-2.6.18/include/xen/interface/nmi.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/nmi.h linux-2.6.18-xen/include/xen/interface/nmi.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -89748,8 +89935,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/physdev.h linux-2.6.18-xen/include/xen/interface/physdev.h
---- linux-2.6.18/include/xen/interface/physdev.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/physdev.h linux-2.6.18-xen/include/xen/interface/physdev.h
+--- linux-2.6.18.3/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 @@
 +
@@ -89901,8 +90088,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/platform.h linux-2.6.18-xen/include/xen/interface/platform.h
---- linux-2.6.18/include/xen/interface/platform.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/platform.h linux-2.6.18-xen/include/xen/interface/platform.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -90030,8 +90217,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/sched.h linux-2.6.18-xen/include/xen/interface/sched.h
---- linux-2.6.18/include/xen/interface/sched.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/sched.h linux-2.6.18-xen/include/xen/interface/sched.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -90137,8 +90324,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/sysctl.h linux-2.6.18-xen/include/xen/interface/sysctl.h
---- linux-2.6.18/include/xen/interface/sysctl.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/sysctl.h linux-2.6.18-xen/include/xen/interface/sysctl.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -90292,8 +90479,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/trace.h linux-2.6.18-xen/include/xen/interface/trace.h
---- linux-2.6.18/include/xen/interface/trace.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/trace.h linux-2.6.18-xen/include/xen/interface/trace.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -90383,8 +90570,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/vcpu.h linux-2.6.18-xen/include/xen/interface/vcpu.h
---- linux-2.6.18/include/xen/interface/vcpu.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/vcpu.h linux-2.6.18-xen/include/xen/interface/vcpu.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -90508,8 +90695,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/version.h linux-2.6.18-xen/include/xen/interface/version.h
---- linux-2.6.18/include/xen/interface/version.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/version.h linux-2.6.18-xen/include/xen/interface/version.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -90585,8 +90772,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/xencomm.h linux-2.6.18-xen/include/xen/interface/xencomm.h
---- linux-2.6.18/include/xen/interface/xencomm.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/xencomm.h linux-2.6.18-xen/include/xen/interface/xencomm.h
+--- linux-2.6.18.3/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 @@
 +/*
@@ -90626,8 +90813,8 @@
 +};
 +
 +#endif /* _XEN_XENCOMM_H_ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/xen-compat.h linux-2.6.18-xen/include/xen/interface/xen-compat.h
---- linux-2.6.18/include/xen/interface/xen-compat.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/xen-compat.h linux-2.6.18-xen/include/xen/interface/xen-compat.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -90656,8 +90843,8 @@
 +#endif
 +
 +#endif /* __XEN_PUBLIC_XEN_COMPAT_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/xen.h linux-2.6.18-xen/include/xen/interface/xen.h
---- linux-2.6.18/include/xen/interface/xen.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/xen.h linux-2.6.18-xen/include/xen/interface/xen.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -91241,8 +91428,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/interface/xenoprof.h linux-2.6.18-xen/include/xen/interface/xenoprof.h
---- linux-2.6.18/include/xen/interface/xenoprof.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/interface/xenoprof.h linux-2.6.18-xen/include/xen/interface/xenoprof.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -91355,8 +91542,8 @@
 + * indent-tabs-mode: nil
 + * End:
 + */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/pcifront.h linux-2.6.18-xen/include/xen/pcifront.h
---- linux-2.6.18/include/xen/pcifront.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/pcifront.h linux-2.6.18-xen/include/xen/pcifront.h
+--- linux-2.6.18.3/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 @@
 +/*
@@ -91435,8 +91622,8 @@
 +#endif /* __KERNEL__ */
 +
 +#endif /* __XEN_ASM_PCIFRONT_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/public/evtchn.h linux-2.6.18-xen/include/xen/public/evtchn.h
---- linux-2.6.18/include/xen/public/evtchn.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/public/evtchn.h linux-2.6.18-xen/include/xen/public/evtchn.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -91527,8 +91714,8 @@
 +	_IOC(_IOC_NONE, 'E', 5, 0)
 +
 +#endif /* __LINUX_PUBLIC_EVTCHN_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/public/privcmd.h linux-2.6.18-xen/include/xen/public/privcmd.h
---- linux-2.6.18/include/xen/public/privcmd.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/public/privcmd.h linux-2.6.18-xen/include/xen/public/privcmd.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -91610,8 +91797,8 @@
 +	_IOC(_IOC_NONE, 'P', 3, sizeof(privcmd_mmapbatch_t))
 +
 +#endif /* __LINUX_PUBLIC_PRIVCMD_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/xenbus.h linux-2.6.18-xen/include/xen/xenbus.h
---- linux-2.6.18/include/xen/xenbus.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/xenbus.h linux-2.6.18-xen/include/xen/xenbus.h
+--- linux-2.6.18.3/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 @@
 +/******************************************************************************
@@ -91920,8 +92107,8 @@
 +int xenbus_frontend_closed(struct xenbus_device *dev);
 +
 +#endif /* _XEN_XENBUS_H */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/xencons.h linux-2.6.18-xen/include/xen/xencons.h
---- linux-2.6.18/include/xen/xencons.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/xencons.h linux-2.6.18-xen/include/xen/xencons.h
+--- linux-2.6.18.3/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__
@@ -91941,8 +92128,8 @@
 +int xencons_ring_send(const char *data, unsigned len);
 +
 +#endif /* __ASM_XENCONS_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/include/xen/xen_proc.h linux-2.6.18-xen/include/xen/xen_proc.h
---- linux-2.6.18/include/xen/xen_proc.h	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/include/xen/xen_proc.h linux-2.6.18-xen/include/xen/xen_proc.h
+--- linux-2.6.18.3/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 @@
 +
@@ -91957,8 +92144,8 @@
 +	const char *name);
 +
 +#endif /* __ASM_XEN_PROC_H__ */
-diff -urN -x .hg -x .hgtags linux-2.6.18/kernel/fork.c linux-2.6.18-xen/kernel/fork.c
---- linux-2.6.18/kernel/fork.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/kernel/fork.c linux-2.6.18-xen/kernel/fork.c
+--- linux-2.6.18.3/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)
@@ -91970,8 +92157,19 @@
  	retval = 0;
  out:
  	up_write(&mm->mmap_sem);
-diff -urN -x .hg -x .hgtags linux-2.6.18/kernel/Kconfig.preempt linux-2.6.18-xen/kernel/Kconfig.preempt
---- linux-2.6.18/kernel/Kconfig.preempt	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/kernel/irq/manage.c linux-2.6.18-xen/kernel/irq/manage.c
+--- linux-2.6.18.3/kernel/irq/manage.c	2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-xen/kernel/irq/manage.c	2006-12-05 18:42:37.000000000 +0100
+@@ -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.3/kernel/Kconfig.preempt linux-2.6.18-xen/kernel/Kconfig.preempt
+--- linux-2.6.18.3/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 @@
  
@@ -91981,8 +92179,8 @@
  	help
  	  This option reduces the latency of the kernel by making
  	  all kernel code (that is not executing in a critical section)
-diff -urN -x .hg -x .hgtags linux-2.6.18/lib/Kconfig.debug linux-2.6.18-xen/lib/Kconfig.debug
---- linux-2.6.18/lib/Kconfig.debug	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/lib/Kconfig.debug linux-2.6.18-xen/lib/Kconfig.debug
+--- linux-2.6.18.3/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 @@
  
@@ -91993,8 +92191,8 @@
  	depends on !MODULES || !(MIPS || PPC || SUPERH || V850)
  	help
  	  If you say Y here the resulting kernel image will be slightly larger
-diff -urN -x .hg -x .hgtags linux-2.6.18/lib/Makefile linux-2.6.18-xen/lib/Makefile
---- linux-2.6.18/lib/Makefile	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/lib/Makefile linux-2.6.18-xen/lib/Makefile
+--- linux-2.6.18.3/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
@@ -92006,8 +92204,8 @@
  
  hostprogs-y	:= gen_crc32table
  clean-files	:= crc32table.h
-diff -urN -x .hg -x .hgtags linux-2.6.18/mm/highmem.c linux-2.6.18-xen/mm/highmem.c
---- linux-2.6.18/mm/highmem.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/mm/highmem.c linux-2.6.18-xen/mm/highmem.c
+--- linux-2.6.18.3/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;
@@ -92027,8 +92225,8 @@
  void fastcall *kmap_high(struct page *page)
  {
  	unsigned long vaddr;
-diff -urN -x .hg -x .hgtags linux-2.6.18/mm/Kconfig linux-2.6.18-xen/mm/Kconfig
---- linux-2.6.18/mm/Kconfig	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/mm/Kconfig linux-2.6.18-xen/mm/Kconfig
+--- linux-2.6.18.3/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
@@ -92053,9 +92251,9 @@
  	default "4"
  
  #
-diff -urN -x .hg -x .hgtags linux-2.6.18/mm/memory.c linux-2.6.18-xen/mm/memory.c
---- linux-2.6.18/mm/memory.c	2006-09-20 05:42:06.000000000 +0200
-+++ linux-2.6.18-xen/mm/memory.c	2006-11-19 14:27:16.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/mm/memory.c linux-2.6.18-xen/mm/memory.c
+--- linux-2.6.18.3/mm/memory.c	2006-12-06 09:06:09.000000000 +0100
++++ linux-2.6.18-xen/mm/memory.c	2006-12-05 18:42:37.000000000 +0100
 @@ -403,7 +403,8 @@
  	 * and that the resulting page looks ok.
  	 */
@@ -92066,7 +92264,15 @@
  		return NULL;
  	}
  
-@@ -1030,6 +1031,26 @@
+@@ -891,6 +892,7 @@
+ 		tlb_finish_mmu(tlb, address, end);
+ 	return end;
+ }
++EXPORT_SYMBOL(zap_page_range);
+ 
+ /*
+  * Do a quick page-table lookup for a single page.
+@@ -1030,6 +1032,26 @@
  			continue;
  		}
  
@@ -92093,7 +92299,7 @@
  		if (!vma || (vma->vm_flags & (VM_IO | VM_PFNMAP))
  				|| !(vm_flags & vma->vm_flags))
  			return i ? : -EFAULT;
-@@ -1369,6 +1390,102 @@
+@@ -1369,6 +1391,102 @@
  }
  EXPORT_SYMBOL(remap_pfn_range);
  
@@ -92196,8 +92402,8 @@
  /*
   * handle_pte_fault chooses page fault handler according to an entry
   * which was read non-atomically.  Before making any commitment, on
-diff -urN -x .hg -x .hgtags linux-2.6.18/mm/mmap.c linux-2.6.18-xen/mm/mmap.c
---- linux-2.6.18/mm/mmap.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/mm/mmap.c linux-2.6.18-xen/mm/mmap.c
+--- linux-2.6.18.3/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;
@@ -92210,9 +92416,9 @@
  	lru_add_drain();
  	flush_cache_mm(mm);
  	tlb = tlb_gather_mmu(mm, 1);
-diff -urN -x .hg -x .hgtags linux-2.6.18/mm/page_alloc.c linux-2.6.18-xen/mm/page_alloc.c
---- linux-2.6.18/mm/page_alloc.c	2006-09-20 05:42:06.000000000 +0200
-+++ linux-2.6.18-xen/mm/page_alloc.c	2006-11-19 14:27:16.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/mm/page_alloc.c linux-2.6.18-xen/mm/page_alloc.c
+--- linux-2.6.18.3/mm/page_alloc.c	2006-12-06 09:06:09.000000000 +0100
++++ linux-2.6.18-xen/mm/page_alloc.c	2006-12-05 18:42:37.000000000 +0100
 @@ -443,7 +443,8 @@
  	int i;
  	int reserved = 0;
@@ -92233,9 +92439,9 @@
  
  	if (PageAnon(page))
  		page->mapping = NULL;
-diff -urN -x .hg -x .hgtags linux-2.6.18/net/core/dev.c linux-2.6.18-xen/net/core/dev.c
---- linux-2.6.18/net/core/dev.c	2006-09-20 05:42:06.000000000 +0200
-+++ linux-2.6.18-xen/net/core/dev.c	2006-11-19 14:27:17.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/net/core/dev.c linux-2.6.18-xen/net/core/dev.c
+--- linux-2.6.18.3/net/core/dev.c	2006-12-06 09:06:10.000000000 +0100
++++ linux-2.6.18-xen/net/core/dev.c	2006-12-05 18:42:37.000000000 +0100
 @@ -118,6 +118,12 @@
  #include <linux/err.h>
  #include <linux/ctype.h>
@@ -92306,7 +92512,7 @@
  	/* GSO will handle the following emulations directly. */
  	if (netif_needs_gso(dev, skb))
  		goto gso;
-@@ -1796,6 +1845,19 @@
+@@ -1798,6 +1847,19 @@
  	}
  #endif
  
@@ -92326,7 +92532,7 @@
  	list_for_each_entry_rcu(ptype, &ptype_all, list) {
  		if (!ptype->dev || ptype->dev == skb->dev) {
  			if (pt_prev) 
-@@ -3582,6 +3644,7 @@
+@@ -3584,6 +3646,7 @@
  EXPORT_SYMBOL(net_enable_timestamp);
  EXPORT_SYMBOL(net_disable_timestamp);
  EXPORT_SYMBOL(dev_get_flags);
@@ -92334,9 +92540,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/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
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/net/core/skbuff.c linux-2.6.18-xen/net/core/skbuff.c
+--- linux-2.6.18.3/net/core/skbuff.c	2006-12-06 09:06:10.000000000 +0100
++++ linux-2.6.18-xen/net/core/skbuff.c	2006-12-05 18:42:37.000000000 +0100
 @@ -139,6 +139,7 @@
   *	Buffers may only be allocated from interrupts using a @gfp_mask of
   *	%GFP_ATOMIC.
@@ -92353,7 +92559,7 @@
  
  /**
   *	alloc_skb_from_cache	-	allocate a network buffer
-@@ -210,14 +212,18 @@
+@@ -210,14 +212,17 @@
   */
  struct sk_buff *alloc_skb_from_cache(kmem_cache_t *cp,
  				     unsigned int size,
@@ -92362,7 +92568,6 @@
 +				     int fclone)
  {
 +	kmem_cache_t *cache;
-+	struct skb_shared_info *shinfo;
  	struct sk_buff *skb;
  	u8 *data;
  
@@ -92375,26 +92580,11 @@
  	if (!skb)
  		goto out;
  
-@@ -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;
+@@ -241,10 +246,20 @@
+ 	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);
@@ -92412,7 +92602,7 @@
  	skb = NULL;
  	goto out;
  }
-@@ -464,6 +482,10 @@
+@@ -464,6 +479,10 @@
  	C(local_df);
  	n->cloned = 1;
  	n->nohdr = 0;
@@ -92423,8 +92613,8 @@
  	C(pkt_type);
  	C(ip_summed);
  	C(priority);
-diff -urN -x .hg -x .hgtags linux-2.6.18/net/ipv4/netfilter/ip_nat_proto_tcp.c linux-2.6.18-xen/net/ipv4/netfilter/ip_nat_proto_tcp.c
---- linux-2.6.18/net/ipv4/netfilter/ip_nat_proto_tcp.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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))
@@ -92440,8 +92630,8 @@
  					ip_nat_cheat_check(oldport ^ 0xFFFF,
  							   newport,
  							   hdr->check));
-diff -urN -x .hg -x .hgtags linux-2.6.18/net/ipv4/netfilter/ip_nat_proto_udp.c linux-2.6.18-xen/net/ipv4/netfilter/ip_nat_proto_udp.c
---- linux-2.6.18/net/ipv4/netfilter/ip_nat_proto_udp.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/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.3/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;
@@ -92457,8 +92647,8 @@
  					ip_nat_cheat_check(*portptr ^ 0xFFFF,
  							   newport,
  							   hdr->check));
-diff -urN -x .hg -x .hgtags linux-2.6.18/net/ipv4/xfrm4_output.c linux-2.6.18-xen/net/ipv4/xfrm4_output.c
---- linux-2.6.18/net/ipv4/xfrm4_output.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/net/ipv4/xfrm4_output.c linux-2.6.18-xen/net/ipv4/xfrm4_output.c
+--- linux-2.6.18.3/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>
@@ -92480,8 +92670,8 @@
  	if (skb->ip_summed == CHECKSUM_HW) {
  		err = skb_checksum_help(skb, 0);
  		if (err)
-diff -urN -x .hg -x .hgtags linux-2.6.18/net/ipv6/addrconf.c linux-2.6.18-xen/net/ipv6/addrconf.c
---- linux-2.6.18/net/ipv6/addrconf.c	2006-09-20 05:42:06.000000000 +0200
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/net/ipv6/addrconf.c linux-2.6.18-xen/net/ipv6/addrconf.c
+--- linux-2.6.18.3/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);
@@ -92499,8 +92689,8 @@
  	    (ipv6_addr_type(&ifp->addr) & IPV6_ADDR_LINKLOCAL)) {
  		struct in6_addr all_routers;
  
-diff -urN -x .hg -x .hgtags linux-2.6.18/scripts/Makefile.xen linux-2.6.18-xen/scripts/Makefile.xen
---- linux-2.6.18/scripts/Makefile.xen	1970-01-01 01:00:00.000000000 +0100
+diff -urN -x .hg -x .hgtags linux-2.6.18.3/scripts/Makefile.xen linux-2.6.18-xen/scripts/Makefile.xen
+--- linux-2.6.18.3/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 @@
 +

Modified: dists/sid/linux-2.6/debian/patches/series/9-extra
==============================================================================
--- dists/sid/linux-2.6/debian/patches/series/9-extra	(original)
+++ dists/sid/linux-2.6/debian/patches/series/9-extra	Sun Dec 31 22:28:20 2006
@@ -1,7 +1,7 @@
 + features/all/vserver/vs2.0.2.2-rc9.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-2.6.18-36156.patch *_xen *_xen-vserver
++ features/all/xen/fedora-2.6.18-36186.patch *_xen *_xen-vserver
 + features/all/xen/vserver-update.patch *_xen-vserver
 + m68k-atari-net.patch m68k
 + m68k-atari-video2.patch m68k



More information about the Kernel-svn-changes mailing list