summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Buchholz <rbu@gentoo.org>2008-08-28 19:08:00 +0000
committerRobert Buchholz <rbu@gentoo.org>2008-08-28 19:08:00 +0000
commitaf5f48bdae2a14ea9877d7f64aac1db80c3582eb (patch)
treeeab4b204ec281e1cb13b06964a91d0d12a19f799
parentReleasing 2.6.18-11 (diff)
downloadxen-af5f48bdae2a14ea9877d7f64aac1db80c3582eb.tar.gz
xen-af5f48bdae2a14ea9877d7f64aac1db80c3582eb.tar.bz2
xen-af5f48bdae2a14ea9877d7f64aac1db80c3582eb.zip
Upgrade patches to Xen 3.3.0 and Debian Security 2.6.18.dfsg.1-22etch2
svn path=/patches/; revision=81
-rw-r--r--trunk/2.6.18/00000_README62
-rw-r--r--trunk/2.6.18/10002_xen-3.3.0.patch (renamed from trunk/2.6.18/10001_xen-3.2.0.patch)87479
-rw-r--r--trunk/2.6.18/30073_nfs-write-corruption.patch76
-rw-r--r--trunk/2.6.18/30074_x86-clear-df-before-calling-signal-handler.patch57
-rw-r--r--trunk/2.6.18/30075_3w-xxxx-bigmem-corruption.patch42
-rw-r--r--trunk/2.6.18/30076_dnotify-race-locking.patch29
-rw-r--r--trunk/2.6.18/30077_sctp-make-sure-n-sizeof-does-not-overflow.patch29
-rw-r--r--trunk/2.6.18/30078_esp-iv-in-linear-part-of-skb.patch48
-rw-r--r--trunk/2.6.18/30079a_amd64-fix-zeroing-on-exception-in-copy_user-pre.patch798
-rw-r--r--trunk/2.6.18/30079b_amd64-fix-zeroing-on-exception-in-copy_user.patch272
-rw-r--r--trunk/2.6.18/30080_tty-fix-for-tty-operations-bugs.patch183
-rw-r--r--trunk/2.6.18/30081_check-privileges-before-setting-mount-propagation.patch28
-rw-r--r--trunk/2.6.18/30082a_x86-add-copy_user_handle_tail.patch56
-rw-r--r--trunk/2.6.18/30082b_x86-fix-copy_user.patch537
-rw-r--r--trunk/2.6.18/30083_x86-wrong-register-was-used-in-align-macro.patch29
-rw-r--r--trunk/2.6.18/30084_cifs-fix-compiler-warning.patch21
-rw-r--r--trunk/2.6.18/30085_netfilter-nf_nat_snmp_basic-fix-range-check.patch27
-rw-r--r--trunk/2.6.18/30086_sound-ensure-device-number-is-valid-in-snd_seq_oss_synth_make_info.patch30
-rw-r--r--trunk/2.6.18/30087_vfs-fix-lookup-on-deleted-directory.patch71
19 files changed, 81334 insertions, 8540 deletions
diff --git a/trunk/2.6.18/00000_README b/trunk/2.6.18/00000_README
index 7ee89f7..c9c4c91 100644
--- a/trunk/2.6.18/00000_README
+++ b/trunk/2.6.18/00000_README
@@ -19,8 +19,8 @@ Numbering
Patches
-------
-10001_xen-3.2.0.patch
- Upstream 3.2.0 patch
+10002_xen-3.3.0.patch
+ Upstream 3.3.0 patch
30001_nfnetlink_log-null-deref.patch
[SECURITY] Fix remotely exploitable NULL pointer dereference in
@@ -329,6 +329,64 @@ Patches
heap overflow
See CVE-2008-1673
+30073_nfs-write-corruption.patch
+ Fix potential nfs write corruption (closes: #470719)
+
+30074_x86-clear-df-before-calling-signal-handler.patch
+ [i386/amd64] Clear DF before calling signal handler. (closes: #469058)
+ CVE-2008-1367
+
+30075_3w-xxxx-bigmem-corruption.patch
+ 3w-xxxx: Fix data corruption on em64t systems w/ > 2GB of memory
+ (closes: #464923).
+
+30076_dnotify-race-locking.patch
+ Add missing locking for the dnotify-race fix that was included in
+ the upstream commit
+
+30077_sctp-make-sure-n-sizeof-does-not-overflow.patch
+ [SECURITY] Fix potential overflow condition in
+ sctp_getsockopt_local_addrs_old
+ See CVE-2008-2826
+
+30078_esp-iv-in-linear-part-of-skb.patch
+ [SECURITY] Avoid tripping BUG() in IPsec code when the first fragment
+ of an ESP packet does not contain the entire ESP header and IV
+ See CVE-2007-6282
+
+30079a_amd64-fix-zeroing-on-exception-in-copy_user-pre.patch
+30079b_amd64-fix-zeroing-on-exception-in-copy_user.patch
+ [SECURITY] [amd64] Fix potential information leak when a copy
+ operation fails by properly zeroing out destination memory
+ See CVE-2008-2729
+
+30080_tty-fix-for-tty-operations-bugs.patch
+ [SECURITY] Fix issues with tty operation handling in various drivers
+ See CVE-2008-2812
+
+30081_check-privileges-before-setting-mount-propagation.patch
+ [SECURITY] Check CAP_SYS_ADMIN when changing mountpoint type
+ See CVE-2008-2931
+
+30082a_x86-add-copy_user_handle_tail.patch
+30082b_x86-fix-copy_user.patch
+ [SECURITY][amd64] Fix memory leak in the copy_user routine, see #490910.
+ See CVE-2008-0598
+
+30083_x86-wrong-register-was-used-in-align-macro.patch
+ Fix regression introduced upstream by the fix for CVE-2008-0598
+
+30084_cifs-fix-compiler-warning.patch
+30085_netfilter-nf_nat_snmp_basic-fix-range-check.patch
+ Fix regressions introduced upstream by the fixes for CVE-2008-1673
+
+30086_sound-ensure-device-number-is-valid-in-snd_seq_oss_synth_make_info.patch
+ Fix possible information leak in seq_oss_synth.c
+ See CVE-2008-3272
+
+30087_vfs-fix-lookup-on-deleted-directory.patch
+ Fix potential memory leak in lookup path
+ See CVE-2008-3275
50009_gentooify-tls-warning.patch
Change tls warning instructions to apply directly to Gentoo.
diff --git a/trunk/2.6.18/10001_xen-3.2.0.patch b/trunk/2.6.18/10002_xen-3.3.0.patch
index d3d6c2b..996125c 100644
--- a/trunk/2.6.18/10001_xen-3.2.0.patch
+++ b/trunk/2.6.18/10002_xen-3.3.0.patch
@@ -1,6 +1,32 @@
-diff -rpuN linux-2.6.18.8/arch/i386/Kconfig linux-2.6.18-xen-3.2.0/arch/i386/Kconfig
---- linux-2.6.18.8/arch/i386/Kconfig 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/Kconfig 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/boot/Makefile linux-2.6.18-xen-3.3.0/arch/i386/boot/Makefile
+--- linux-2.6.18.8/arch/i386/boot/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/boot/Makefile 2008-08-21 11:36:07.000000000 +0200
+@@ -26,7 +26,7 @@ SVGA_MODE := -DSVGA_MODE=NORMAL_VGA
+ #RAMDISK := -DRAMDISK=512
+
+ targets := vmlinux.bin bootsect bootsect.o \
+- setup setup.o zImage bzImage
++ setup setup.o zImage bzImage vmlinuz vmlinux-stripped
+ subdir- := compressed
+
+ hostprogs-y := tools/build
+@@ -133,5 +133,13 @@ zlilo: $(BOOTIMAGE)
+ cp System.map $(INSTALL_PATH)/
+ if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi
+
++$(obj)/vmlinuz: $(obj)/vmlinux-stripped FORCE
++ $(call if_changed,gzip)
++ @echo 'Kernel: $@ is ready' ' (#'`cat .version`')'
++
++$(obj)/vmlinux-stripped: OBJCOPYFLAGS := -g --strip-unneeded
++$(obj)/vmlinux-stripped: vmlinux FORCE
++ $(call if_changed,objcopy)
++
+ install:
+ sh $(srctree)/$(src)/install.sh $(KERNELRELEASE) $(BOOTIMAGE) System.map "$(INSTALL_PATH)"
+diff -rpuN linux-2.6.18.8/arch/i386/Kconfig linux-2.6.18-xen-3.3.0/arch/i386/Kconfig
+--- linux-2.6.18.8/arch/i386/Kconfig 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/Kconfig 2008-08-21 11:36:07.000000000 +0200
@@ -16,6 +16,7 @@ config X86_32
config GENERIC_TIME
@@ -9,13 +35,14 @@ diff -rpuN linux-2.6.18.8/arch/i386/Kconfig linux-2.6.18-xen-3.2.0/arch/i386/Kco
default y
config LOCKDEP_SUPPORT
-@@ -103,6 +104,16 @@ config X86_PC
+@@ -103,6 +104,17 @@ config X86_PC
help
Choose this option if your computer is a standard PC or compatible.
+config X86_XEN
+ bool "Xen-compatible"
+ select XEN
++ select X86_PAE
+ select X86_UP_APIC if !SMP && XEN_PRIVILEGED_GUEST
+ select X86_UP_IOAPIC if !SMP && XEN_PRIVILEGED_GUEST
+ select SWIOTLB
@@ -26,7 +53,7 @@ diff -rpuN linux-2.6.18.8/arch/i386/Kconfig linux-2.6.18-xen-3.2.0/arch/i386/Kco
config X86_ELAN
bool "AMD Elan"
help
-@@ -213,6 +224,7 @@ source "arch/i386/Kconfig.cpu"
+@@ -213,6 +225,7 @@ source "arch/i386/Kconfig.cpu"
config HPET_TIMER
bool "HPET Timer Support"
@@ -34,7 +61,7 @@ diff -rpuN linux-2.6.18.8/arch/i386/Kconfig linux-2.6.18-xen-3.2.0/arch/i386/Kco
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 @@ source "kernel/Kconfig.preempt"
+@@ -263,7 +276,7 @@ source "kernel/Kconfig.preempt"
config X86_UP_APIC
bool "Local APIC support on uniprocessors"
@@ -43,7 +70,7 @@ diff -rpuN linux-2.6.18.8/arch/i386/Kconfig linux-2.6.18-xen-3.2.0/arch/i386/Kco
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 @@ config X86_UP_IOAPIC
+@@ -288,12 +301,12 @@ config X86_UP_IOAPIC
config X86_LOCAL_APIC
bool
@@ -58,7 +85,7 @@ diff -rpuN linux-2.6.18.8/arch/i386/Kconfig linux-2.6.18-xen-3.2.0/arch/i386/Kco
default y
config X86_VISWS_APIC
-@@ -303,7 +315,7 @@ config X86_VISWS_APIC
+@@ -303,7 +316,7 @@ config X86_VISWS_APIC
config X86_MCE
bool "Machine Check Exception"
@@ -67,7 +94,16 @@ diff -rpuN linux-2.6.18.8/arch/i386/Kconfig linux-2.6.18-xen-3.2.0/arch/i386/Kco
---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 @@ config X86_REBOOTFIXUPS
+@@ -384,7 +397,7 @@ config I8K
+
+ config X86_REBOOTFIXUPS
+ bool "Enable X86 board specific fixups for reboot"
+- depends on X86
++ depends on !X86_XEN
+ default n
+ ---help---
+ This enables chipset and/or board specific fixups to be done
+@@ -402,6 +415,7 @@ config X86_REBOOTFIXUPS
config MICROCODE
tristate "/dev/cpu/microcode - Intel IA32 CPU microcode support"
@@ -75,7 +111,7 @@ diff -rpuN linux-2.6.18.8/arch/i386/Kconfig linux-2.6.18-xen-3.2.0/arch/i386/Kco
---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
-@@ -434,6 +447,10 @@ config X86_CPUID
+@@ -434,6 +448,10 @@ config X86_CPUID
with major 203 and minors 0 to 31 for /dev/cpu/0/cpuid to
/dev/cpu/31/cpuid.
@@ -86,7 +122,7 @@ diff -rpuN linux-2.6.18.8/arch/i386/Kconfig linux-2.6.18-xen-3.2.0/arch/i386/Kco
source "drivers/firmware/Kconfig"
choice
-@@ -616,6 +633,7 @@ config HIGHPTE
+@@ -616,6 +634,7 @@ config HIGHPTE
config MATH_EMULATION
bool "Math emulation"
@@ -94,12 +130,11 @@ diff -rpuN linux-2.6.18.8/arch/i386/Kconfig linux-2.6.18-xen-3.2.0/arch/i386/Kco
---help---
Linux can emulate a math coprocessor (used for floating point
operations) if you don't have one. 486DX and Pentium processors have
-@@ -641,6 +659,8 @@ config MATH_EMULATION
+@@ -641,6 +660,7 @@ config MATH_EMULATION
config MTRR
bool "MTRR (Memory Type Range Register) support"
+ depends on !XEN_UNPRIVILEGED_GUEST
-+ default y if X86_XEN
---help---
On Intel P6 family processors (Pentium Pro, Pentium II and later)
the Memory Type Range Registers (MTRRs) may be used to control
@@ -130,7 +165,15 @@ diff -rpuN linux-2.6.18.8/arch/i386/Kconfig linux-2.6.18-xen-3.2.0/arch/i386/Kco
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
-@@ -793,6 +813,7 @@ config HOTPLUG_CPU
+@@ -760,6 +780,7 @@ config CRASH_DUMP
+ bool "kernel crash dumps (EXPERIMENTAL)"
+ depends on EXPERIMENTAL
+ depends on HIGHMEM
++ depends on !XEN
+ help
+ Generate crash dump after being started by kexec.
+
+@@ -793,6 +814,7 @@ config HOTPLUG_CPU
config COMPAT_VDSO
bool "Compat VDSO support"
@@ -138,7 +181,7 @@ diff -rpuN linux-2.6.18.8/arch/i386/Kconfig linux-2.6.18-xen-3.2.0/arch/i386/Kco
default y
help
Map the VDSO to the predictable old-style address too.
-@@ -810,18 +831,18 @@ config ARCH_ENABLE_MEMORY_HOTPLUG
+@@ -810,18 +832,18 @@ config ARCH_ENABLE_MEMORY_HOTPLUG
depends on HIGHMEM
menu "Power management options (ACPI, APM)"
@@ -161,7 +204,7 @@ diff -rpuN linux-2.6.18.8/arch/i386/Kconfig linux-2.6.18-xen-3.2.0/arch/i386/Kco
---help---
APM is a BIOS specification for saving power using several different
techniques. This is mostly useful for battery powered laptops with
-@@ -1006,6 +1027,7 @@ choice
+@@ -1006,6 +1028,7 @@ choice
config PCI_GOBIOS
bool "BIOS"
@@ -169,7 +212,7 @@ diff -rpuN linux-2.6.18.8/arch/i386/Kconfig linux-2.6.18-xen-3.2.0/arch/i386/Kco
config PCI_GOMMCONFIG
bool "MMConfig"
-@@ -1013,6 +1035,13 @@ config PCI_GOMMCONFIG
+@@ -1013,6 +1036,13 @@ config PCI_GOMMCONFIG
config PCI_GODIRECT
bool "Direct"
@@ -183,7 +226,7 @@ diff -rpuN linux-2.6.18.8/arch/i386/Kconfig linux-2.6.18-xen-3.2.0/arch/i386/Kco
config PCI_GOANY
bool "Any"
-@@ -1020,7 +1049,7 @@ endchoice
+@@ -1020,7 +1050,7 @@ endchoice
config PCI_BIOS
bool
@@ -192,13 +235,14 @@ diff -rpuN linux-2.6.18.8/arch/i386/Kconfig linux-2.6.18-xen-3.2.0/arch/i386/Kco
default y
config PCI_DIRECT
-@@ -1033,6 +1062,18 @@ config PCI_MMCONFIG
+@@ -1033,6 +1063,19 @@ config PCI_MMCONFIG
depends on PCI && ACPI && (PCI_GOMMCONFIG || PCI_GOANY)
default y
+config XEN_PCIDEV_FRONTEND
+ bool
+ depends on PCI && X86_XEN && (PCI_GOXEN_FE || PCI_GOANY)
++ select HOTPLUG
+ default y
+
+config XEN_PCIDEV_FE_DEBUG
@@ -211,7 +255,7 @@ diff -rpuN linux-2.6.18.8/arch/i386/Kconfig linux-2.6.18-xen-3.2.0/arch/i386/Kco
source "drivers/pci/pcie/Kconfig"
source "drivers/pci/Kconfig"
-@@ -1043,7 +1084,7 @@ config ISA_DMA_API
+@@ -1043,7 +1086,7 @@ config ISA_DMA_API
config ISA
bool "ISA support"
@@ -220,7 +264,7 @@ diff -rpuN linux-2.6.18.8/arch/i386/Kconfig linux-2.6.18-xen-3.2.0/arch/i386/Kco
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 +1111,7 @@ config EISA
+@@ -1070,7 +1113,7 @@ config EISA
source "drivers/eisa/Kconfig"
config MCA
@@ -229,7 +273,7 @@ diff -rpuN linux-2.6.18.8/arch/i386/Kconfig linux-2.6.18-xen-3.2.0/arch/i386/Kco
default y if X86_VOYAGER
help
MicroChannel Architecture is found in some IBM PS/2 machines and
-@@ -1146,6 +1187,8 @@ source "security/Kconfig"
+@@ -1146,6 +1189,8 @@ source "security/Kconfig"
source "crypto/Kconfig"
@@ -238,7 +282,7 @@ diff -rpuN linux-2.6.18.8/arch/i386/Kconfig linux-2.6.18-xen-3.2.0/arch/i386/Kco
source "lib/Kconfig"
#
-@@ -1171,7 +1214,7 @@ config X86_SMP
+@@ -1171,7 +1216,7 @@ config X86_SMP
config X86_HT
bool
@@ -247,10 +291,13 @@ diff -rpuN linux-2.6.18.8/arch/i386/Kconfig linux-2.6.18-xen-3.2.0/arch/i386/Kco
default y
config X86_BIOS_REBOOT
-@@ -1184,6 +1227,16 @@ config X86_TRAMPOLINE
+@@ -1182,6 +1227,17 @@ config X86_BIOS_REBOOT
+ config X86_TRAMPOLINE
+ bool
depends on X86_SMP || (X86_VOYAGER && SMP)
- default y
-
++ depends on !XEN
++ default y
++
+config X86_NO_TSS
+ bool
+ depends on X86_XEN
@@ -259,14 +306,12 @@ diff -rpuN linux-2.6.18.8/arch/i386/Kconfig linux-2.6.18-xen-3.2.0/arch/i386/Kco
+config X86_NO_IDT
+ bool
+ depends on X86_XEN
-+ default y
-+
- config KTIME_SCALAR
- bool
default y
-diff -rpuN linux-2.6.18.8/arch/i386/Kconfig.cpu linux-2.6.18-xen-3.2.0/arch/i386/Kconfig.cpu
---- linux-2.6.18.8/arch/i386/Kconfig.cpu 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/Kconfig.cpu 2008-02-15 16:21:49.000000000 -0800
+
+ config KTIME_SCALAR
+diff -rpuN linux-2.6.18.8/arch/i386/Kconfig.cpu linux-2.6.18-xen-3.3.0/arch/i386/Kconfig.cpu
+--- linux-2.6.18.8/arch/i386/Kconfig.cpu 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/Kconfig.cpu 2008-08-21 11:36:07.000000000 +0200
@@ -252,7 +252,7 @@ config X86_PPRO_FENCE
config X86_F00F_BUG
@@ -283,9 +328,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/Kconfig.cpu linux-2.6.18-xen-3.2.0/arch/i386
- 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 -rpuN linux-2.6.18.8/arch/i386/Kconfig.debug linux-2.6.18-xen-3.2.0/arch/i386/Kconfig.debug
---- linux-2.6.18.8/arch/i386/Kconfig.debug 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/Kconfig.debug 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/Kconfig.debug linux-2.6.18-xen-3.3.0/arch/i386/Kconfig.debug
+--- linux-2.6.18.8/arch/i386/Kconfig.debug 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/Kconfig.debug 2008-08-21 11:36:07.000000000 +0200
@@ -79,6 +79,7 @@ config X86_MPPARSE
config DOUBLEFAULT
default y
@@ -294,107 +339,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/Kconfig.debug linux-2.6.18-xen-3.2.0/arch/i3
help
This option allows trapping of rare doublefault exceptions that
would otherwise cause a system to silently reboot. Disabling this
-diff -rpuN linux-2.6.18.8/arch/i386/Makefile linux-2.6.18-xen-3.2.0/arch/i386/Makefile
---- linux-2.6.18.8/arch/i386/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/Makefile 2008-02-15 16:21:49.000000000 -0800
-@@ -71,6 +71,10 @@ mcore-$(CONFIG_X86_BIGSMP) := mach-defau
- mflags-$(CONFIG_X86_SUMMIT) := -Iinclude/asm-i386/mach-summit
- mcore-$(CONFIG_X86_SUMMIT) := mach-default
-
-+# Xen subarch support
-+mflags-$(CONFIG_X86_XEN) := -Iinclude/asm-i386/mach-xen
-+mcore-$(CONFIG_X86_XEN) := mach-xen
-+
- # generic subarchitecture
- mflags-$(CONFIG_X86_GENERICARCH) := -Iinclude/asm-i386/mach-generic
- mcore-$(CONFIG_X86_GENERICARCH) := mach-default
-@@ -102,9 +106,20 @@ AFLAGS += $(mflags-y)
-
- boot := arch/i386/boot
-
--PHONY += zImage bzImage compressed zlilo bzlilo \
-+PHONY += zImage bzImage vmlinuz compressed zlilo bzlilo \
- zdisk bzdisk fdimage fdimage144 fdimage288 isoimage install
-
-+ifdef CONFIG_XEN
-+CPPFLAGS := -D__XEN_INTERFACE_VERSION__=$(CONFIG_XEN_INTERFACE_VERSION) \
-+ -Iinclude$(if $(KBUILD_SRC),2)/asm/mach-xen $(CPPFLAGS)
-+all: vmlinuz
-+
-+# KBUILD_IMAGE specifies the target image being built
-+KBUILD_IMAGE := $(boot)/vmlinuz
-+
-+vmlinuz: vmlinux
-+ $(Q)$(MAKE) $(build)=$(boot) $(KBUILD_IMAGE)
-+else
- all: bzImage
-
- # KBUILD_IMAGE specify target image being built
-@@ -124,6 +139,7 @@ zdisk bzdisk: vmlinux
-
- fdimage fdimage144 fdimage288 isoimage: vmlinux
- $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@
-+endif
-
- install:
- $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) install
-diff -rpuN linux-2.6.18.8/arch/i386/boot/Makefile linux-2.6.18-xen-3.2.0/arch/i386/boot/Makefile
---- linux-2.6.18.8/arch/i386/boot/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/boot/Makefile 2008-02-15 16:21:49.000000000 -0800
-@@ -26,7 +26,7 @@ SVGA_MODE := -DSVGA_MODE=NORMAL_VGA
- #RAMDISK := -DRAMDISK=512
-
- targets := vmlinux.bin bootsect bootsect.o \
-- setup setup.o zImage bzImage
-+ setup setup.o zImage bzImage vmlinuz vmlinux-stripped
- subdir- := compressed
-
- hostprogs-y := tools/build
-@@ -133,5 +133,13 @@ zlilo: $(BOOTIMAGE)
- cp System.map $(INSTALL_PATH)/
- if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi
-
-+$(obj)/vmlinuz: $(obj)/vmlinux-stripped FORCE
-+ $(call if_changed,gzip)
-+ @echo 'Kernel: $@ is ready' ' (#'`cat .version`')'
-+
-+$(obj)/vmlinux-stripped: OBJCOPYFLAGS := -g --strip-unneeded
-+$(obj)/vmlinux-stripped: vmlinux FORCE
-+ $(call if_changed,objcopy)
-+
- install:
- sh $(srctree)/$(src)/install.sh $(KERNELRELEASE) $(BOOTIMAGE) System.map "$(INSTALL_PATH)"
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/Makefile linux-2.6.18-xen-3.2.0/arch/i386/kernel/Makefile
---- linux-2.6.18.8/arch/i386/kernel/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/Makefile 2008-02-15 16:21:49.000000000 -0800
-@@ -43,6 +43,7 @@ obj-$(CONFIG_K8_NB) += k8.o
- EXTRA_AFLAGS := -traditional
-
- obj-$(CONFIG_SCx200) += scx200.o
-+obj-$(CONFIG_XEN) += fixup.o
-
- # vsyscall.o contains the vsyscall DSO images as __initdata.
- # We must build both images before we can assemble it.
-@@ -80,5 +81,8 @@ $(obj)/vsyscall-syms.o: $(src)/vsyscall.
- $(obj)/vsyscall-sysenter.o $(obj)/vsyscall-note.o FORCE
- $(call if_changed,syscall)
-
-+early_printk-y += ../../x86_64/kernel/early_printk.o
- k8-y += ../../x86_64/kernel/k8.o
-
-+disabled-obj-$(CONFIG_XEN) := i8259.o reboot.o smpboot.o trampoline.o
-+%/head.o %/head.s: $(if $(CONFIG_XEN),EXTRA_AFLAGS,dummy) :=
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/acpi/Makefile linux-2.6.18-xen-3.2.0/arch/i386/kernel/acpi/Makefile
---- linux-2.6.18.8/arch/i386/kernel/acpi/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/acpi/Makefile 2008-02-15 16:21:49.000000000 -0800
-@@ -6,3 +6,4 @@ ifneq ($(CONFIG_ACPI_PROCESSOR),)
- obj-y += cstate.o processor.o
- endif
-
-+disabled-obj-$(CONFIG_XEN) := cstate.o wakeup.o
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/acpi/boot-xen.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/acpi/boot-xen.c
---- linux-2.6.18.8/arch/i386/kernel/acpi/boot-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/acpi/boot-xen.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/acpi/boot-xen.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/acpi/boot-xen.c
+--- linux-2.6.18.8/arch/i386/kernel/acpi/boot-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/acpi/boot-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,1168 @@
+/*
+ * boot.c - Architecture-Specific Low-Level ACPI Boot Support
@@ -1564,10 +1511,278 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/acpi/boot-xen.c linux-2.6.18-xen-3.2.
+
+ return 0;
+}
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/acpi/sleep-xen.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/acpi/sleep-xen.c
---- linux-2.6.18.8/arch/i386/kernel/acpi/sleep-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/acpi/sleep-xen.c 2008-02-15 16:21:49.000000000 -0800
-@@ -0,0 +1,134 @@
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/acpi/Makefile linux-2.6.18-xen-3.3.0/arch/i386/kernel/acpi/Makefile
+--- linux-2.6.18.8/arch/i386/kernel/acpi/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/acpi/Makefile 2008-08-21 11:36:07.000000000 +0200
+@@ -4,5 +4,9 @@ obj-$(CONFIG_ACPI_SLEEP) += sleep.o wake
+
+ ifneq ($(CONFIG_ACPI_PROCESSOR),)
+ obj-y += cstate.o processor.o
++ifneq ($(CONFIG_PROCESSOR_EXTERNAL_CONTROL),)
++obj-$(CONFIG_XEN) += processor_extcntl_xen.o
++endif
+ endif
+
++disabled-obj-$(CONFIG_XEN) := cstate.o wakeup.o
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/acpi/processor.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/acpi/processor.c
+--- linux-2.6.18.8/arch/i386/kernel/acpi/processor.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/acpi/processor.c 2008-08-21 11:36:07.000000000 +0200
+@@ -62,7 +62,18 @@ static void init_intel_pdc(struct acpi_p
+ /* Initialize _PDC data based on the CPU vendor */
+ void arch_acpi_processor_init_pdc(struct acpi_processor *pr)
+ {
++#ifdef CONFIG_XEN
++ /*
++ * As a work-around, just use cpu0's cpuinfo for all processors.
++ * Further work is required to expose xen hypervisor interface of
++ * getting physical cpuinfo to dom0 kernel and then
++ * arch_acpi_processor_init_pdc can set _PDC parameters according
++ * to Xen's phys information.
++ */
++ unsigned int cpu = 0;
++#else
+ unsigned int cpu = pr->id;
++#endif /* CONFIG_XEN */
+ struct cpuinfo_x86 *c = cpu_data + cpu;
+
+ pr->pdc = NULL;
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/acpi/processor_extcntl_xen.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/acpi/processor_extcntl_xen.c
+--- linux-2.6.18.8/arch/i386/kernel/acpi/processor_extcntl_xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/acpi/processor_extcntl_xen.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,229 @@
++/*
++ * processor_extcntl_xen.c - interface to notify Xen
++ *
++ * Copyright (C) 2008, Intel corporation
++ *
++ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or (at
++ * your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License along
++ * with this program; if not, write to the Free Software Foundation, Inc.,
++ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/types.h>
++#include <linux/acpi.h>
++#include <linux/pm.h>
++#include <linux/cpu.h>
++
++#include <linux/cpufreq.h>
++#include <acpi/processor.h>
++#include <asm/hypercall.h>
++
++static int xen_processor_pmbits;
++
++static int xen_cx_notifier(struct acpi_processor *pr, int action)
++{
++ int ret, count = 0, i;
++ xen_platform_op_t op = {
++ .cmd = XENPF_set_processor_pminfo,
++ .interface_version = XENPF_INTERFACE_VERSION,
++ .u.set_pminfo.id = pr->acpi_id,
++ .u.set_pminfo.type = XEN_PM_CX,
++ };
++ struct xen_processor_cx *data, *buf;
++ struct acpi_processor_cx *cx;
++
++ if (action == PROCESSOR_PM_CHANGE)
++ return -EINVAL;
++
++ /* Convert to Xen defined structure and hypercall */
++ buf = kzalloc(pr->power.count * sizeof(struct xen_processor_cx),
++ GFP_KERNEL);
++ if (!buf)
++ return -ENOMEM;
++
++ data = buf;
++ for (i = 1; i <= pr->power.count; i++) {
++ cx = &pr->power.states[i];
++ /* Skip invalid cstate entry */
++ if (!cx->valid)
++ continue;
++
++ data->type = cx->type;
++ data->latency = cx->latency;
++ data->power = cx->power;
++ data->reg.space_id = cx->reg.space_id;
++ data->reg.bit_width = cx->reg.bit_width;
++ data->reg.bit_offset = cx->reg.bit_offset;
++ data->reg.access_size = cx->reg.reserved;
++ data->reg.address = cx->reg.address;
++
++ /* Get dependency relationships */
++ if (cx->csd_count) {
++ printk("Wow! _CSD is found. Not support for now!\n");
++ kfree(buf);
++ return -EINVAL;
++ } else {
++ data->dpcnt = 0;
++ set_xen_guest_handle(data->dp, NULL);
++ }
++
++ data++;
++ count++;
++ }
++
++ if (!count) {
++ printk("No available Cx info for cpu %d\n", pr->acpi_id);
++ kfree(buf);
++ return -EINVAL;
++ }
++
++ op.u.set_pminfo.power.count = count;
++ op.u.set_pminfo.power.flags.bm_control = pr->flags.bm_control;
++ op.u.set_pminfo.power.flags.bm_check = pr->flags.bm_check;
++ op.u.set_pminfo.power.flags.has_cst = pr->flags.has_cst;
++ op.u.set_pminfo.power.flags.power_setup_done = pr->flags.power_setup_done;
++
++ set_xen_guest_handle(op.u.set_pminfo.power.states, buf);
++ ret = HYPERVISOR_platform_op(&op);
++ kfree(buf);
++ return ret;
++}
++
++static void convert_pct_reg(struct xen_pct_register *xpct,
++ struct acpi_pct_register *apct)
++{
++ xpct->descriptor = apct->descriptor;
++ xpct->length = apct->length;
++ xpct->space_id = apct->space_id;
++ xpct->bit_width = apct->bit_width;
++ xpct->bit_offset = apct->bit_offset;
++ xpct->reserved = apct->reserved;
++ xpct->address = apct->address;
++}
++
++static void convert_pss_states(struct xen_processor_px *xpss,
++ struct acpi_processor_px *apss, int state_count)
++{
++ int i;
++ for(i=0; i<state_count; i++) {
++ xpss->core_frequency = apss->core_frequency;
++ xpss->power = apss->power;
++ xpss->transition_latency = apss->transition_latency;
++ xpss->bus_master_latency = apss->bus_master_latency;
++ xpss->control = apss->control;
++ xpss->status = apss->status;
++ xpss++;
++ apss++;
++ }
++}
++
++static void convert_psd_pack(struct xen_psd_package *xpsd,
++ struct acpi_psd_package *apsd)
++{
++ xpsd->num_entries = apsd->num_entries;
++ xpsd->revision = apsd->revision;
++ xpsd->domain = apsd->domain;
++ xpsd->coord_type = apsd->coord_type;
++ xpsd->num_processors = apsd->num_processors;
++}
++
++static int xen_px_notifier(struct acpi_processor *pr, int action)
++{
++ int ret;
++ xen_platform_op_t op = {
++ .cmd = XENPF_set_processor_pminfo,
++ .interface_version = XENPF_INTERFACE_VERSION,
++ .u.set_pminfo.id = pr->acpi_id,
++ .u.set_pminfo.type = XEN_PM_PX,
++ };
++ struct xen_processor_performance *perf;
++ struct xen_processor_px *states = NULL;
++ struct acpi_processor_performance *px;
++ struct acpi_psd_package *pdomain;
++
++ /* leave dynamic ppc handle in the future */
++ if (action == PROCESSOR_PM_CHANGE)
++ return 0;
++
++ perf = &op.u.set_pminfo.perf;
++ px = pr->performance;
++
++ perf->flags = XEN_PX_PPC |
++ XEN_PX_PCT |
++ XEN_PX_PSS |
++ XEN_PX_PSD;
++
++ /* ppc */
++ perf->ppc = pr->performance_platform_limit;
++
++ /* pct */
++ convert_pct_reg(&perf->control_register, &px->control_register);
++ convert_pct_reg(&perf->status_register, &px->status_register);
++
++ /* pss */
++ perf->state_count = px->state_count;
++ states = kzalloc(px->state_count*sizeof(xen_processor_px_t),GFP_KERNEL);
++ if (!states)
++ return -ENOMEM;
++ convert_pss_states(states, px->states, px->state_count);
++ set_xen_guest_handle(perf->states, states);
++
++ /* psd */
++ pdomain = &px->domain_info;
++ convert_psd_pack(&perf->domain_info, pdomain);
++ if (perf->domain_info.num_processors) {
++ if (pdomain->coord_type == DOMAIN_COORD_TYPE_SW_ALL)
++ perf->shared_type = CPUFREQ_SHARED_TYPE_ALL;
++ else if (pdomain->coord_type == DOMAIN_COORD_TYPE_SW_ANY)
++ perf->shared_type = CPUFREQ_SHARED_TYPE_ANY;
++ else if (pdomain->coord_type == DOMAIN_COORD_TYPE_HW_ALL)
++ perf->shared_type = CPUFREQ_SHARED_TYPE_HW;
++ } else
++ perf->shared_type = CPUFREQ_SHARED_TYPE_NONE;
++
++ ret = HYPERVISOR_platform_op(&op);
++ kfree(states);
++ return ret;
++}
++
++static int xen_tx_notifier(struct acpi_processor *pr, int action)
++{
++ return -EINVAL;
++}
++static int xen_hotplug_notifier(struct acpi_processor *pr, int event)
++{
++ return -EINVAL;
++}
++
++static struct processor_extcntl_ops xen_extcntl_ops = {
++ .hotplug = xen_hotplug_notifier,
++};
++
++void arch_acpi_processor_init_extcntl(const struct processor_extcntl_ops **ops)
++{
++ xen_processor_pmbits = (xen_start_info->flags & SIF_PM_MASK) >> 8;
++
++ if (xen_processor_pmbits & XEN_PROCESSOR_PM_CX)
++ xen_extcntl_ops.pm_ops[PM_TYPE_IDLE] = xen_cx_notifier;
++ if (xen_processor_pmbits & XEN_PROCESSOR_PM_PX)
++ xen_extcntl_ops.pm_ops[PM_TYPE_PERF] = xen_px_notifier;
++ if (xen_processor_pmbits & XEN_PROCESSOR_PM_TX)
++ xen_extcntl_ops.pm_ops[PM_TYPE_THR] = xen_tx_notifier;
++
++ *ops = &xen_extcntl_ops;
++}
++EXPORT_SYMBOL(arch_acpi_processor_init_extcntl);
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/acpi/sleep-xen.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/acpi/sleep-xen.c
+--- linux-2.6.18.8/arch/i386/kernel/acpi/sleep-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/acpi/sleep-xen.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,113 @@
+/*
+ * sleep.c - x86-specific ACPI sleep support.
+ *
@@ -1680,31 +1895,10 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/acpi/sleep-xen.c linux-2.6.18-xen-3.2
+}
+
+core_initcall(acpisleep_dmi_init);
-+
-+#else /* CONFIG_ACPI_PV_SLEEP */
-+#include <asm/hypervisor.h>
-+#include <xen/interface/platform.h>
-+int acpi_notify_hypervisor_state(u8 sleep_state,
-+ u32 pm1a_cnt, u32 pm1b_cnt)
-+{
-+ struct xen_platform_op op = {
-+ .cmd = XENPF_enter_acpi_sleep,
-+ .interface_version = XENPF_INTERFACE_VERSION,
-+ .u = {
-+ .enter_acpi_sleep = {
-+ .pm1a_cnt_val = (u16)pm1a_cnt,
-+ .pm1b_cnt_val = (u16)pm1b_cnt,
-+ .sleep_state = sleep_state,
-+ },
-+ },
-+ };
-+
-+ return HYPERVISOR_platform_op(&op);
-+}
+#endif /* CONFIG_ACPI_PV_SLEEP */
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/apic-xen.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/apic-xen.c
---- linux-2.6.18.8/arch/i386/kernel/apic-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/apic-xen.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/apic-xen.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/apic-xen.c
+--- linux-2.6.18.8/arch/i386/kernel/apic-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/apic-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,155 @@
+/*
+ * Local APIC handling, local APIC timers
@@ -1861,9 +2055,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/apic-xen.c linux-2.6.18-xen-3.2.0/arc
+
+ return 0;
+}
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/asm-offsets.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/asm-offsets.c
---- linux-2.6.18.8/arch/i386/kernel/asm-offsets.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/asm-offsets.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/asm-offsets.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/asm-offsets.c
+--- linux-2.6.18.8/arch/i386/kernel/asm-offsets.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/asm-offsets.c 2008-08-21 11:36:07.000000000 +0200
@@ -66,9 +66,14 @@ void foo(void)
OFFSET(pbe_orig_address, pbe, orig_address);
OFFSET(pbe_next, pbe, next);
@@ -1880,17 +2074,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/asm-offsets.c linux-2.6.18-xen-3.2.0/
DEFINE(PAGE_SIZE_asm, PAGE_SIZE);
DEFINE(VDSO_PRELINK, VDSO_PRELINK);
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/cpu/Makefile linux-2.6.18-xen-3.2.0/arch/i386/kernel/cpu/Makefile
---- linux-2.6.18.8/arch/i386/kernel/cpu/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/cpu/Makefile 2008-02-15 16:21:49.000000000 -0800
-@@ -17,3 +17,4 @@ obj-$(CONFIG_X86_MCE) += mcheck/
-
- obj-$(CONFIG_MTRR) += mtrr/
- obj-$(CONFIG_CPU_FREQ) += cpufreq/
-+
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/cpu/common-xen.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/cpu/common-xen.c
---- linux-2.6.18.8/arch/i386/kernel/cpu/common-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/cpu/common-xen.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/cpu/common-xen.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/cpu/common-xen.c
+--- linux-2.6.18.8/arch/i386/kernel/cpu/common-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/cpu/common-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,743 @@
+#include <linux/init.h>
+#include <linux/string.h>
@@ -2635,9 +2821,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/cpu/common-xen.c linux-2.6.18-xen-3.2
+ per_cpu(cpu_tlbstate, cpu).active_mm = &init_mm;
+}
+#endif
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/cpu/cpufreq/powernow-k8.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/cpu/cpufreq/powernow-k8.c
---- linux-2.6.18.8/arch/i386/kernel/cpu/cpufreq/powernow-k8.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/cpu/cpufreq/powernow-k8.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/cpu/cpufreq/powernow-k8.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/cpu/cpufreq/powernow-k8.c
+--- linux-2.6.18.8/arch/i386/kernel/cpu/cpufreq/powernow-k8.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/cpu/cpufreq/powernow-k8.c 2008-08-21 11:36:07.000000000 +0200
@@ -46,7 +46,7 @@
#define PFX "powernow-k8: "
@@ -3074,9 +3260,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/cpu/cpufreq/powernow-k8.c linux-2.6.1
printk(KERN_INFO PFX "Found %d %s "
"processors (" VERSION ")\n", supported_cpus,
boot_cpu_data.x86_model_id);
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/cpu/cpufreq/powernow-k8.h linux-2.6.18-xen-3.2.0/arch/i386/kernel/cpu/cpufreq/powernow-k8.h
---- linux-2.6.18.8/arch/i386/kernel/cpu/cpufreq/powernow-k8.h 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/cpu/cpufreq/powernow-k8.h 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/cpu/cpufreq/powernow-k8.h linux-2.6.18-xen-3.3.0/arch/i386/kernel/cpu/cpufreq/powernow-k8.h
+--- linux-2.6.18.8/arch/i386/kernel/cpu/cpufreq/powernow-k8.h 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/cpu/cpufreq/powernow-k8.h 2008-08-21 11:36:07.000000000 +0200
@@ -1,5 +1,5 @@
/*
- * (c) 2003-2006 Advanced Micro Devices, Inc.
@@ -3147,17 +3333,17 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/cpu/cpufreq/powernow-k8.h linux-2.6.1
/* define the two driver architectures */
#define CPU_OPTERON 0
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/cpu/mtrr/Makefile linux-2.6.18-xen-3.2.0/arch/i386/kernel/cpu/mtrr/Makefile
---- linux-2.6.18.8/arch/i386/kernel/cpu/mtrr/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/cpu/mtrr/Makefile 2008-02-15 16:21:49.000000000 -0800
-@@ -3,3 +3,4 @@ obj-y += amd.o
- obj-y += cyrix.o
- obj-y += centaur.o
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/cpu/Makefile linux-2.6.18-xen-3.3.0/arch/i386/kernel/cpu/Makefile
+--- linux-2.6.18.8/arch/i386/kernel/cpu/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/cpu/Makefile 2008-08-21 11:36:07.000000000 +0200
+@@ -17,3 +17,4 @@ obj-$(CONFIG_X86_MCE) += mcheck/
-+obj-$(CONFIG_XEN) := main.o if.o
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/cpu/mtrr/main-xen.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/cpu/mtrr/main-xen.c
---- linux-2.6.18.8/arch/i386/kernel/cpu/mtrr/main-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/cpu/mtrr/main-xen.c 2008-02-15 16:21:49.000000000 -0800
+ obj-$(CONFIG_MTRR) += mtrr/
+ obj-$(CONFIG_CPU_FREQ) += cpufreq/
++
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/cpu/mtrr/main-xen.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/cpu/mtrr/main-xen.c
+--- linux-2.6.18.8/arch/i386/kernel/cpu/mtrr/main-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/cpu/mtrr/main-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,198 @@
+#include <linux/init.h>
+#include <linux/proc_fs.h>
@@ -3357,9 +3543,17 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/cpu/mtrr/main-xen.c linux-2.6.18-xen-
+}
+
+subsys_initcall(mtrr_init);
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/crash.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/crash.c
---- linux-2.6.18.8/arch/i386/kernel/crash.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/crash.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/cpu/mtrr/Makefile linux-2.6.18-xen-3.3.0/arch/i386/kernel/cpu/mtrr/Makefile
+--- linux-2.6.18.8/arch/i386/kernel/cpu/mtrr/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/cpu/mtrr/Makefile 2008-08-21 11:36:07.000000000 +0200
+@@ -3,3 +3,4 @@ obj-y += amd.o
+ obj-y += cyrix.o
+ obj-y += centaur.o
+
++obj-$(CONFIG_XEN) := main.o if.o
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/crash.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/crash.c
+--- linux-2.6.18.8/arch/i386/kernel/crash.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/crash.c 2008-08-21 11:36:07.000000000 +0200
@@ -90,6 +90,7 @@ static void crash_save_self(struct pt_re
crash_save_this_cpu(regs, cpu);
}
@@ -3389,15 +3583,45 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/crash.c linux-2.6.18-xen-3.2.0/arch/i
+#endif /* CONFIG_XEN */
crash_save_self(regs);
}
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/early_printk-xen.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/early_printk-xen.c
---- linux-2.6.18.8/arch/i386/kernel/early_printk-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/early_printk-xen.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/early_printk-xen.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/early_printk-xen.c
+--- linux-2.6.18.8/arch/i386/kernel/early_printk-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/early_printk-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,2 @@
+
+#include "../../x86_64/kernel/early_printk-xen.c"
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/entry-xen.S linux-2.6.18-xen-3.2.0/arch/i386/kernel/entry-xen.S
---- linux-2.6.18.8/arch/i386/kernel/entry-xen.S 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/entry-xen.S 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/entry.S linux-2.6.18-xen-3.3.0/arch/i386/kernel/entry.S
+--- linux-2.6.18.8/arch/i386/kernel/entry.S 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/entry.S 2008-08-21 11:36:07.000000000 +0200
+@@ -269,7 +269,7 @@ ENTRY(sysenter_entry)
+ CFI_STARTPROC simple
+ CFI_DEF_CFA esp, 0
+ CFI_REGISTER esp, ebp
+- movl TSS_sysenter_esp0(%esp),%esp
++ movl SYSENTER_stack_esp0(%esp),%esp
+ sysenter_past_esp:
+ /*
+ * No need to follow this irqs on/off section: the syscall
+@@ -689,7 +689,7 @@ device_not_available_emulate:
+ * that sets up the real kernel stack. Check here, since we can't
+ * allow the wrong stack to be used.
+ *
+- * "TSS_sysenter_esp0+12" is because the NMI/debug handler will have
++ * "SYSENTER_stack_esp0+12" is because the NMI/debug handler will have
+ * already pushed 3 words if it hits on the sysenter instruction:
+ * eflags, cs and eip.
+ *
+@@ -701,7 +701,7 @@ device_not_available_emulate:
+ cmpw $__KERNEL_CS,4(%esp); \
+ jne ok; \
+ label: \
+- movl TSS_sysenter_esp0+offset(%esp),%esp; \
++ movl SYSENTER_stack_esp0+offset(%esp),%esp; \
+ pushfl; \
+ pushl $__KERNEL_CS; \
+ pushl $sysenter_past_esp
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/entry-xen.S linux-2.6.18-xen-3.3.0/arch/i386/kernel/entry-xen.S
+--- linux-2.6.18.8/arch/i386/kernel/entry-xen.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/entry-xen.S 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,1238 @@
+/*
+ * linux/arch/i386/entry.S
@@ -4637,39 +4861,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/entry-xen.S linux-2.6.18-xen-3.2.0/ar
+#include "syscall_table.S"
+
+syscall_table_size=(.-sys_call_table)
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/entry.S linux-2.6.18-xen-3.2.0/arch/i386/kernel/entry.S
---- linux-2.6.18.8/arch/i386/kernel/entry.S 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/entry.S 2008-02-15 16:21:49.000000000 -0800
-@@ -269,7 +269,7 @@ ENTRY(sysenter_entry)
- CFI_STARTPROC simple
- CFI_DEF_CFA esp, 0
- CFI_REGISTER esp, ebp
-- movl TSS_sysenter_esp0(%esp),%esp
-+ movl SYSENTER_stack_esp0(%esp),%esp
- sysenter_past_esp:
- /*
- * No need to follow this irqs on/off section: the syscall
-@@ -689,7 +689,7 @@ device_not_available_emulate:
- * that sets up the real kernel stack. Check here, since we can't
- * allow the wrong stack to be used.
- *
-- * "TSS_sysenter_esp0+12" is because the NMI/debug handler will have
-+ * "SYSENTER_stack_esp0+12" is because the NMI/debug handler will have
- * already pushed 3 words if it hits on the sysenter instruction:
- * eflags, cs and eip.
- *
-@@ -701,7 +701,7 @@ device_not_available_emulate:
- cmpw $__KERNEL_CS,4(%esp); \
- jne ok; \
- label: \
-- movl TSS_sysenter_esp0+offset(%esp),%esp; \
-+ movl SYSENTER_stack_esp0+offset(%esp),%esp; \
- pushfl; \
- pushl $__KERNEL_CS; \
- pushl $sysenter_past_esp
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/fixup.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/fixup.c
---- linux-2.6.18.8/arch/i386/kernel/fixup.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/fixup.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/fixup.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/fixup.c
+--- linux-2.6.18.8/arch/i386/kernel/fixup.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/fixup.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,88 @@
+/******************************************************************************
+ * fixup.c
@@ -4759,9 +4953,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/fixup.c linux-2.6.18-xen-3.2.0/arch/i
+ return 0;
+}
+__initcall(fixup_init);
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/head-xen.S linux-2.6.18-xen-3.2.0/arch/i386/kernel/head-xen.S
---- linux-2.6.18.8/arch/i386/kernel/head-xen.S 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/head-xen.S 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/head-xen.S linux-2.6.18-xen-3.3.0/arch/i386/kernel/head-xen.S
+--- linux-2.6.18.8/arch/i386/kernel/head-xen.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/head-xen.S 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,207 @@
+
+
@@ -4970,9 +5164,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/head-xen.S linux-2.6.18-xen-3.2.0/arc
+#endif
+ ELFNOTE(Xen, XEN_ELFNOTE_LOADER, .asciz, "generic")
+ ELFNOTE(Xen, XEN_ELFNOTE_SUSPEND_CANCEL, .long, 1)
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/init_task-xen.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/init_task-xen.c
---- linux-2.6.18.8/arch/i386/kernel/init_task-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/init_task-xen.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/init_task-xen.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/init_task-xen.c
+--- linux-2.6.18.8/arch/i386/kernel/init_task-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/init_task-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,51 @@
+#include <linux/mm.h>
+#include <linux/module.h>
@@ -5025,9 +5219,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/init_task-xen.c linux-2.6.18-xen-3.2.
+DEFINE_PER_CPU(struct tss_struct, init_tss) ____cacheline_internodealigned_in_smp = INIT_TSS;
+#endif
+
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/io_apic-xen.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/io_apic-xen.c
---- linux-2.6.18.8/arch/i386/kernel/io_apic-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/io_apic-xen.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/io_apic-xen.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/io_apic-xen.c
+--- linux-2.6.18.8/arch/i386/kernel/io_apic-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/io_apic-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,2770 @@
+/*
+ * Intel IO-APIC support for multi-Pentium hosts.
@@ -7799,9 +7993,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/io_apic-xen.c linux-2.6.18-xen-3.2.0/
+}
+
+#endif /* CONFIG_ACPI */
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/ioport-xen.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/ioport-xen.c
---- linux-2.6.18.8/arch/i386/kernel/ioport-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/ioport-xen.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/ioport-xen.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/ioport-xen.c
+--- linux-2.6.18.8/arch/i386/kernel/ioport-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/ioport-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,123 @@
+/*
+ * linux/arch/i386/kernel/ioport.c
@@ -7926,9 +8120,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/ioport-xen.c linux-2.6.18-xen-3.2.0/a
+ set_iopl_mask(t->iopl);
+ return 0;
+}
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/irq-xen.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/irq-xen.c
---- linux-2.6.18.8/arch/i386/kernel/irq-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/irq-xen.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/irq-xen.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/irq-xen.c
+--- linux-2.6.18.8/arch/i386/kernel/irq-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/irq-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,324 @@
+/*
+ * linux/arch/i386/kernel/irq.c
@@ -8254,9 +8448,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/irq-xen.c linux-2.6.18-xen-3.2.0/arch
+}
+#endif
+
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/ldt-xen.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/ldt-xen.c
---- linux-2.6.18.8/arch/i386/kernel/ldt-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/ldt-xen.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/ldt-xen.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/ldt-xen.c
+--- linux-2.6.18.8/arch/i386/kernel/ldt-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/ldt-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,270 @@
+/*
+ * linux/kernel/ldt.c
@@ -8528,10 +8722,10 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/ldt-xen.c linux-2.6.18-xen-3.2.0/arch
+ }
+ return ret;
+}
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/machine_kexec.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/machine_kexec.c
---- linux-2.6.18.8/arch/i386/kernel/machine_kexec.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/machine_kexec.c 2008-02-15 16:21:49.000000000 -0800
-@@ -19,123 +19,52 @@
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/machine_kexec.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/machine_kexec.c
+--- linux-2.6.18.8/arch/i386/kernel/machine_kexec.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/machine_kexec.c 2008-08-21 11:36:07.000000000 +0200
+@@ -19,123 +19,67 @@
#include <asm/desc.h>
#include <asm/system.h>
@@ -8554,7 +8748,10 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/machine_kexec.c linux-2.6.18-xen-3.2.
-
- /* Find the current page table */
- pgtable_level2 = __va(read_cr3());
--
++#ifdef CONFIG_XEN
++#include <xen/interface/kexec.h>
++#endif
+
- /* Find the indexes of the physical address to identity map */
- level1_index = (address % LEVEL1_SIZE)/LEVEL0_SIZE;
- level2_index = address / LEVEL1_SIZE;
@@ -8568,22 +8765,32 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/machine_kexec.c linux-2.6.18-xen-3.2.
- */
- load_cr3(pgtable_level2);
-}
--
++#define PAGE_ALIGNED __attribute__ ((__aligned__(PAGE_SIZE)))
++static u32 kexec_pgd[1024] PAGE_ALIGNED;
++#ifdef CONFIG_X86_PAE
++static u32 kexec_pmd0[1024] PAGE_ALIGNED;
++static u32 kexec_pmd1[1024] PAGE_ALIGNED;
++#endif
++static u32 kexec_pte0[1024] PAGE_ALIGNED;
++static u32 kexec_pte1[1024] PAGE_ALIGNED;
+
-#else
-#define LEVEL1_SIZE (1UL << 21UL)
-#define LEVEL2_SIZE (1UL << 30UL)
-static u64 pgtable_level1[512] PAGE_ALIGNED;
-static u64 pgtable_level2[512] PAGE_ALIGNED;
--
++#ifdef CONFIG_XEN
+
-static void identity_map_page(unsigned long address)
-{
- unsigned long level1_index, level2_index, level3_index;
- u64 *pgtable_level3;
--
++#define __ma(x) (pfn_to_mfn(__pa((x)) >> PAGE_SHIFT) << PAGE_SHIFT)
+
- /* Find the current page table */
- pgtable_level3 = __va(read_cr3());
-+#ifdef CONFIG_XEN
-+#include <xen/interface/kexec.h>
++#if PAGES_NR > KEXEC_XEN_NO_PAGES
++#error PAGES_NR is greater than KEXEC_XEN_NO_PAGES - Xen support will break
+#endif
- /* Find the indexes of the physical address to identity map */
@@ -8602,63 +8809,59 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/machine_kexec.c linux-2.6.18-xen-3.2.
- */
- load_cr3(pgtable_level3);
-}
-+#define PAGE_ALIGNED __attribute__ ((__aligned__(PAGE_SIZE)))
-+static u32 kexec_pgd[1024] PAGE_ALIGNED;
-+#ifdef CONFIG_X86_PAE
-+static u32 kexec_pmd0[1024] PAGE_ALIGNED;
-+static u32 kexec_pmd1[1024] PAGE_ALIGNED;
++#if PA_CONTROL_PAGE != 0
++#error PA_CONTROL_PAGE is non zero - Xen support will break
#endif
-+static u32 kexec_pte0[1024] PAGE_ALIGNED;
-+static u32 kexec_pte1[1024] PAGE_ALIGNED;
-static void set_idt(void *newidt, __u16 limit)
--{
++void machine_kexec_setup_load_arg(xen_kexec_image_t *xki, struct kimage *image)
+ {
- struct Xgt_desc_struct curidt;
-+#ifdef CONFIG_XEN
++ void *control_page;
- /* ia32 supports unaliged loads & stores */
- curidt.size = limit;
- curidt.address = (unsigned long)newidt;
-+#define __ma(x) (pfn_to_mfn(__pa((x)) >> PAGE_SHIFT) << PAGE_SHIFT)
++ memset(xki->page_list, 0, sizeof(xki->page_list));
- load_idt(&curidt);
-};
-+#if PAGES_NR > KEXEC_XEN_NO_PAGES
-+#error PAGES_NR is greater than KEXEC_XEN_NO_PAGES - Xen support will break
-+#endif
++ control_page = page_address(image->control_code_page);
++ memcpy(control_page, relocate_kernel, PAGE_SIZE);
-+#if PA_CONTROL_PAGE != 0
-+#error PA_CONTROL_PAGE is non zero - Xen support will break
++ xki->page_list[PA_CONTROL_PAGE] = __ma(control_page);
++ xki->page_list[PA_PGD] = __ma(kexec_pgd);
++#ifdef CONFIG_X86_PAE
++ xki->page_list[PA_PMD_0] = __ma(kexec_pmd0);
++ xki->page_list[PA_PMD_1] = __ma(kexec_pmd1);
+#endif
++ xki->page_list[PA_PTE_0] = __ma(kexec_pte0);
++ xki->page_list[PA_PTE_1] = __ma(kexec_pte1);
-static void set_gdt(void *newgdt, __u16 limit)
-+void machine_kexec_setup_load_arg(xen_kexec_image_t *xki, struct kimage *image)
- {
+-{
- struct Xgt_desc_struct curgdt;
-+ void *control_page;
-
+-
- /* ia32 supports unaligned loads & stores */
- curgdt.size = limit;
- curgdt.address = (unsigned long)newgdt;
-+ memset(xki->page_list, 0, sizeof(xki->page_list));
-
+-
- load_gdt(&curgdt);
-};
-+ control_page = page_address(image->control_code_page);
-+ memcpy(control_page, relocate_kernel, PAGE_SIZE);
++}
-static void load_segments(void)
--{
++int __init machine_kexec_setup_resources(struct resource *hypervisor,
++ struct resource *phys_cpus,
++ int nr_phys_cpus)
+ {
-#define __STR(X) #X
-#define STR(X) __STR(X)
-+ xki->page_list[PA_CONTROL_PAGE] = __ma(control_page);
-+ xki->page_list[PA_PGD] = __ma(kexec_pgd);
-+#ifdef CONFIG_X86_PAE
-+ xki->page_list[PA_PMD_0] = __ma(kexec_pmd0);
-+ xki->page_list[PA_PMD_1] = __ma(kexec_pmd1);
-+#endif
-+ xki->page_list[PA_PTE_0] = __ma(kexec_pte0);
-+ xki->page_list[PA_PTE_1] = __ma(kexec_pte1);
++ int k;
++
++ /* The per-cpu crash note resources belong to the hypervisor resource */
++ for (k = 0; k < nr_phys_cpus; k++)
++ request_resource(hypervisor, phys_cpus + k);
- __asm__ __volatile__ (
- "\tljmp $"STR(__KERNEL_CS)",$1f\n"
@@ -8672,6 +8875,7 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/machine_kexec.c linux-2.6.18-xen-3.2.
- ::: "eax", "memory");
-#undef STR
-#undef __STR
++ return 0;
}
-typedef asmlinkage NORET_TYPE void (*relocate_new_kernel_t)(
@@ -8683,11 +8887,13 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/machine_kexec.c linux-2.6.18-xen-3.2.
-extern const unsigned char relocate_new_kernel[];
-extern void relocate_new_kernel_end(void);
-extern const unsigned int relocate_new_kernel_size;
++void machine_kexec_register_resources(struct resource *res) { ; }
++
+#endif /* CONFIG_XEN */
/*
* A architecture hook called to validate the
-@@ -163,49 +92,38 @@ void machine_kexec_cleanup(struct kimage
+@@ -163,49 +107,38 @@ void machine_kexec_cleanup(struct kimage
{
}
@@ -8761,9 +8967,29 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/machine_kexec.c linux-2.6.18-xen-3.2.
+ image->start, cpu_has_pae);
}
+#endif
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/microcode-xen.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/microcode-xen.c
---- linux-2.6.18.8/arch/i386/kernel/microcode-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/microcode-xen.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/Makefile linux-2.6.18-xen-3.3.0/arch/i386/kernel/Makefile
+--- linux-2.6.18.8/arch/i386/kernel/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/Makefile 2008-08-21 11:36:07.000000000 +0200
+@@ -43,6 +43,7 @@ obj-$(CONFIG_K8_NB) += k8.o
+ EXTRA_AFLAGS := -traditional
+
+ obj-$(CONFIG_SCx200) += scx200.o
++obj-$(CONFIG_XEN) += fixup.o
+
+ # vsyscall.o contains the vsyscall DSO images as __initdata.
+ # We must build both images before we can assemble it.
+@@ -80,5 +81,8 @@ $(obj)/vsyscall-syms.o: $(src)/vsyscall.
+ $(obj)/vsyscall-sysenter.o $(obj)/vsyscall-note.o FORCE
+ $(call if_changed,syscall)
+
++early_printk-y += ../../x86_64/kernel/early_printk.o
+ k8-y += ../../x86_64/kernel/k8.o
+
++disabled-obj-$(CONFIG_XEN) := i8259.o reboot.o smpboot.o
++%/head.o %/head.s: $(if $(CONFIG_XEN),EXTRA_AFLAGS,dummy) :=
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/microcode-xen.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/microcode-xen.c
+--- linux-2.6.18.8/arch/i386/kernel/microcode-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/microcode-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,144 @@
+/*
+ * Intel CPU Microcode Update Driver for Linux
@@ -8909,9 +9135,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/microcode-xen.c linux-2.6.18-xen-3.2.
+module_init(microcode_init)
+module_exit(microcode_exit)
+MODULE_ALIAS_MISCDEV(MICROCODE_MINOR);
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/mpparse-xen.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/mpparse-xen.c
---- linux-2.6.18.8/arch/i386/kernel/mpparse-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/mpparse-xen.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/mpparse-xen.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/mpparse-xen.c
+--- linux-2.6.18.8/arch/i386/kernel/mpparse-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/mpparse-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,1185 @@
+/*
+ * Intel Multiprocessor Specification 1.1 and 1.4
@@ -10098,10 +10324,10 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/mpparse-xen.c linux-2.6.18-xen-3.2.0/
+
+#endif /* CONFIG_X86_IO_APIC */
+#endif /* CONFIG_ACPI */
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/pci-dma-xen.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/pci-dma-xen.c
---- linux-2.6.18.8/arch/i386/kernel/pci-dma-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/pci-dma-xen.c 2008-02-15 16:21:49.000000000 -0800
-@@ -0,0 +1,382 @@
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/pci-dma-xen.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/pci-dma-xen.c
+--- linux-2.6.18.8/arch/i386/kernel/pci-dma-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/pci-dma-xen.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,415 @@
+/*
+ * Dynamic DMA mapping support.
+ *
@@ -10181,6 +10407,39 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/pci-dma-xen.c linux-2.6.18-xen-3.2.0/
+ } \
+} while (0)
+
++static int check_pages_physically_contiguous(unsigned long pfn,
++ unsigned int offset,
++ size_t length)
++{
++ unsigned long next_mfn;
++ int i;
++ int nr_pages;
++
++ next_mfn = pfn_to_mfn(pfn);
++ nr_pages = (offset + length + PAGE_SIZE-1) >> PAGE_SHIFT;
++
++ for (i = 1; i < nr_pages; i++) {
++ if (pfn_to_mfn(++pfn) != ++next_mfn)
++ return 0;
++ }
++ return 1;
++}
++
++int range_straddles_page_boundary(paddr_t p, size_t size)
++{
++ extern unsigned long *contiguous_bitmap;
++ unsigned long pfn = p >> PAGE_SHIFT;
++ unsigned int offset = p & ~PAGE_MASK;
++
++ if (offset + size <= PAGE_SIZE)
++ return 0;
++ if (test_bit(pfn, contiguous_bitmap))
++ return 0;
++ if (check_pages_physically_contiguous(pfn, offset, size))
++ return 0;
++ return 1;
++}
++
+int
+dma_map_sg(struct device *hwdev, struct scatterlist *sg, int nents,
+ enum dma_data_direction direction)
@@ -10484,10 +10743,10 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/pci-dma-xen.c linux-2.6.18-xen-3.2.0/
+ swiotlb_sync_single_for_device(dev, dma_handle, size, direction);
+}
+EXPORT_SYMBOL(dma_sync_single_for_device);
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/process-xen.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/process-xen.c
---- linux-2.6.18.8/arch/i386/kernel/process-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/process-xen.c 2008-02-15 16:21:49.000000000 -0800
-@@ -0,0 +1,856 @@
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/process-xen.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/process-xen.c
+--- linux-2.6.18.8/arch/i386/kernel/process-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/process-xen.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,877 @@
+/*
+ * linux/arch/i386/kernel/process.c
+ *
@@ -11042,8 +11301,14 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/process-xen.c linux-2.6.18-xen-3.2.0/
+#ifndef CONFIG_X86_NO_TSS
+ struct tss_struct *tss = &per_cpu(init_tss, cpu);
+#endif
++#if CONFIG_XEN_COMPAT > 0x030002
+ struct physdev_set_iopl iopl_op;
+ struct physdev_set_iobitmap iobmp_op;
++#else
++ struct physdev_op _pdo[2], *pdo = _pdo;
++#define iopl_op pdo->u.set_iopl
++#define iobmp_op pdo->u.set_iobitmap
++#endif
+ multicall_entry_t _mcl[8], *mcl = _mcl;
+
+ /* XEN NOTE: FS/GS saved in switch_mm(), not here. */
@@ -11091,9 +11356,15 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/process-xen.c linux-2.6.18-xen-3.2.0/
+
+ if (unlikely(prev->iopl != next->iopl)) {
+ iopl_op.iopl = (next->iopl == 0) ? 1 : (next->iopl >> 12) & 3;
++#if CONFIG_XEN_COMPAT > 0x030002
+ mcl->op = __HYPERVISOR_physdev_op;
+ mcl->args[0] = PHYSDEVOP_set_iopl;
+ mcl->args[1] = (unsigned long)&iopl_op;
++#else
++ mcl->op = __HYPERVISOR_physdev_op_compat;
++ pdo->cmd = PHYSDEVOP_set_iopl;
++ mcl->args[0] = (unsigned long)pdo++;
++#endif
+ mcl++;
+ }
+
@@ -11101,12 +11372,21 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/process-xen.c linux-2.6.18-xen-3.2.0/
+ set_xen_guest_handle(iobmp_op.bitmap,
+ (char *)next->io_bitmap_ptr);
+ iobmp_op.nr_ports = next->io_bitmap_ptr ? IO_BITMAP_BITS : 0;
++#if CONFIG_XEN_COMPAT > 0x030002
+ mcl->op = __HYPERVISOR_physdev_op;
+ mcl->args[0] = PHYSDEVOP_set_iobitmap;
+ mcl->args[1] = (unsigned long)&iobmp_op;
++#else
++ mcl->op = __HYPERVISOR_physdev_op_compat;
++ pdo->cmd = PHYSDEVOP_set_iobitmap;
++ mcl->args[0] = (unsigned long)pdo++;
++#endif
+ mcl++;
+ }
+
++#if CONFIG_XEN_COMPAT <= 0x030002
++ BUG_ON(pdo > _pdo + ARRAY_SIZE(_pdo));
++#endif
+ BUG_ON(mcl > _mcl + ARRAY_SIZE(_mcl));
+ if (unlikely(HYPERVISOR_multicall_check(_mcl, mcl - _mcl, NULL)))
+ BUG();
@@ -11344,9 +11624,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/process-xen.c linux-2.6.18-xen-3.2.0/
+ sp -= get_random_int() % 8192;
+ return sp & ~0xf;
+}
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/quirks-xen.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/quirks-xen.c
---- linux-2.6.18.8/arch/i386/kernel/quirks-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/quirks-xen.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/quirks-xen.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/quirks-xen.c
+--- linux-2.6.18.8/arch/i386/kernel/quirks-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/quirks-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,47 @@
+/*
+ * This file contains work-arounds for x86 and x86_64 platform bugs.
@@ -11395,9 +11675,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/quirks-xen.c linux-2.6.18-xen-3.2.0/a
+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 -rpuN linux-2.6.18.8/arch/i386/kernel/relocate_kernel.S linux-2.6.18-xen-3.2.0/arch/i386/kernel/relocate_kernel.S
---- linux-2.6.18.8/arch/i386/kernel/relocate_kernel.S 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/relocate_kernel.S 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/relocate_kernel.S linux-2.6.18-xen-3.3.0/arch/i386/kernel/relocate_kernel.S
+--- linux-2.6.18.8/arch/i386/kernel/relocate_kernel.S 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/relocate_kernel.S 2008-08-21 11:36:07.000000000 +0200
@@ -7,16 +7,138 @@
*/
@@ -11630,10 +11910,56 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/relocate_kernel.S linux-2.6.18-xen-3.
+idt_48:
+ .word 0 /* limit */
+ .long 0 /* base */
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/setup-xen.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/setup-xen.c
---- linux-2.6.18.8/arch/i386/kernel/setup-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/setup-xen.c 2008-02-15 16:21:49.000000000 -0800
-@@ -0,0 +1,1919 @@
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/setup.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/setup.c
+--- linux-2.6.18.8/arch/i386/kernel/setup.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/setup.c 2008-08-21 11:36:07.000000000 +0200
+@@ -261,7 +261,12 @@ static struct resource standard_io_resou
+ }, {
+ .name = "keyboard",
+ .start = 0x0060,
+- .end = 0x006f,
++ .end = 0x0060,
++ .flags = IORESOURCE_BUSY | IORESOURCE_IO
++}, {
++ .name = "keyboard",
++ .start = 0x0064,
++ .end = 0x0064,
+ .flags = IORESOURCE_BUSY | IORESOURCE_IO
+ }, {
+ .name = "dma page reg",
+@@ -956,6 +961,28 @@ efi_memory_present_wrapper(unsigned long
+ return 0;
+ }
+
++/*
++ * This function checks if any part of the range <start,end> is mapped
++ * with type.
++ */
++int
++e820_any_mapped(u64 start, u64 end, unsigned type)
++{
++ int i;
++
++ for (i = 0; i < e820.nr_map; i++) {
++ const struct e820entry *ei = &e820.map[i];
++
++ if (type && ei->type != type)
++ continue;
++ if (ei->addr >= end || ei->addr + ei->size <= start)
++ continue;
++ return 1;
++ }
++ return 0;
++}
++EXPORT_SYMBOL_GPL(e820_any_mapped);
++
+ /*
+ * This function checks if the entire range <start,end> is mapped with type.
+ *
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/setup-xen.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/setup-xen.c
+--- linux-2.6.18.8/arch/i386/kernel/setup-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/setup-xen.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,1924 @@
+/*
+ * linux/arch/i386/kernel/setup.c
+ *
@@ -11919,7 +12245,12 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/setup-xen.c linux-2.6.18-xen-3.2.0/ar
+}, {
+ .name = "keyboard",
+ .start = 0x0060,
-+ .end = 0x006f,
++ .end = 0x0060,
++ .flags = IORESOURCE_BUSY | IORESOURCE_IO
++}, {
++ .name = "keyboard",
++ .start = 0x0064,
++ .end = 0x0064,
+ .flags = IORESOURCE_BUSY | IORESOURCE_IO
+}, {
+ .name = "dma page reg",
@@ -12372,6 +12703,21 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/setup-xen.c linux-2.6.18-xen-3.2.0/ar
+#endif
+ add_memory_region(start, size, type);
+ } while (biosmap++,--nr_map);
++
++#ifdef CONFIG_XEN
++ if (is_initial_xendomain()) {
++ struct xen_memory_map memmap;
++
++ memmap.nr_entries = E820MAX;
++ set_xen_guest_handle(memmap.buffer, machine_e820.map);
++
++ if (HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap))
++ BUG();
++ machine_e820.nr_map = memmap.nr_entries;
++ } else
++ machine_e820 = e820;
++#endif
++
+ return 0;
+}
+
@@ -13038,10 +13384,6 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/setup-xen.c linux-2.6.18-xen-3.2.0/ar
+ crashk_res.end - crashk_res.start + 1);
+#endif
+#endif
-+
-+ if (!xen_feature(XENFEAT_auto_translated_physmap))
-+ phys_to_machine_mapping =
-+ (unsigned long *)xen_start_info->mfn_list;
+}
+
+/*
@@ -13209,18 +13551,8 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/setup-xen.c linux-2.6.18-xen-3.2.0/ar
+static void __init register_memory(void)
+{
+#ifdef CONFIG_XEN
-+ if (is_initial_xendomain()) {
-+ struct xen_memory_map memmap;
-+
-+ memmap.nr_entries = E820MAX;
-+ set_xen_guest_handle(memmap.buffer, machine_e820.map);
-+
-+ if (HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap))
-+ BUG();
-+
-+ machine_e820.nr_map = memmap.nr_entries;
++ if (is_initial_xendomain())
+ e820_setup_gap(machine_e820.map, machine_e820.nr_map);
-+ }
+ else
+#endif
+ e820_setup_gap(e820.map, e820.nr_map);
@@ -13263,6 +13595,7 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/setup-xen.c linux-2.6.18-xen-3.2.0/ar
+ VMASST_TYPE_writable_pagetables));
+
+ memcpy(&boot_cpu_data, &new_cpu_data, sizeof(new_cpu_data));
++ pre_setup_arch_hook();
+ early_cpu_init();
+#ifdef CONFIG_SMP
+ prefill_possible_map();
@@ -13316,8 +13649,6 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/setup-xen.c linux-2.6.18-xen-3.2.0/ar
+ rd_doload = ((RAMDISK_FLAGS & RAMDISK_LOAD_FLAG) != 0);
+#endif
+
-+ setup_xen_features();
-+
+ ARCH_SETUP
+ if (efi_enabled)
+ efi_init();
@@ -13553,41 +13884,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/setup-xen.c linux-2.6.18-xen-3.2.0/ar
+ * c-basic-offset:8
+ * End:
+ */
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/setup.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/setup.c
---- linux-2.6.18.8/arch/i386/kernel/setup.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/setup.c 2008-02-15 16:21:49.000000000 -0800
-@@ -956,6 +956,28 @@ efi_memory_present_wrapper(unsigned long
- return 0;
- }
-
-+/*
-+ * This function checks if any part of the range <start,end> is mapped
-+ * with type.
-+ */
-+int
-+e820_any_mapped(u64 start, u64 end, unsigned type)
-+{
-+ int i;
-+
-+ for (i = 0; i < e820.nr_map; i++) {
-+ const struct e820entry *ei = &e820.map[i];
-+
-+ if (type && ei->type != type)
-+ continue;
-+ if (ei->addr >= end || ei->addr + ei->size <= start)
-+ continue;
-+ return 1;
-+ }
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(e820_any_mapped);
-+
- /*
- * This function checks if the entire range <start,end> is mapped with type.
- *
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/smp-xen.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/smp-xen.c
---- linux-2.6.18.8/arch/i386/kernel/smp-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/smp-xen.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/smp-xen.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/smp-xen.c
+--- linux-2.6.18.8/arch/i386/kernel/smp-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/smp-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,605 @@
+/*
+ * Intel SMP support routines.
@@ -14194,9 +14493,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/smp-xen.c linux-2.6.18-xen-3.2.0/arch
+ return IRQ_HANDLED;
+}
+
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/sysenter.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/sysenter.c
---- linux-2.6.18.8/arch/i386/kernel/sysenter.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/sysenter.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/sysenter.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/sysenter.c
+--- linux-2.6.18.8/arch/i386/kernel/sysenter.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/sysenter.c 2008-08-21 11:36:07.000000000 +0200
@@ -23,6 +23,10 @@
#include <asm/pgtable.h>
#include <asm/unistd.h>
@@ -14254,10 +14553,36 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/sysenter.c linux-2.6.18-xen-3.2.0/arc
}
/*
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/time-xen.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/time-xen.c
---- linux-2.6.18.8/arch/i386/kernel/time-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/time-xen.c 2008-02-15 16:21:49.000000000 -0800
-@@ -0,0 +1,1194 @@
+@@ -75,11 +109,6 @@ int __init sysenter_setup(void)
+ #ifdef CONFIG_COMPAT_VDSO
+ __set_fixmap(FIX_VDSO, __pa(syscall_page), PAGE_READONLY);
+ printk("Compat vDSO mapped to %08lx.\n", __fix_to_virt(FIX_VDSO));
+-#else
+- /*
+- * In the non-compat case the ELF coredumping code needs the fixmap:
+- */
+- __set_fixmap(FIX_VDSO, __pa(syscall_page), PAGE_KERNEL_RO);
+ #endif
+
+ if (!boot_cpu_has(X86_FEATURE_SEP)) {
+@@ -142,6 +171,13 @@ int arch_setup_additional_pages(struct l
+ vma->vm_end = addr + PAGE_SIZE;
+ /* MAYWRITE to allow gdb to COW and set breakpoints */
+ vma->vm_flags = VM_READ|VM_EXEC|VM_MAYREAD|VM_MAYEXEC|VM_MAYWRITE;
++ /*
++ * Make sure the vDSO gets into every core dump.
++ * Dumping its contents makes post-mortem fully interpretable later
++ * without matching up the same kernel and hardware config to see
++ * what PC values meant.
++ */
++ vma->vm_flags |= VM_ALWAYSDUMP;
+ vma->vm_flags |= mm->def_flags;
+ vma->vm_page_prot = protection_map[vma->vm_flags & 7];
+ vma->vm_ops = &syscall_vm_ops;
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/time-xen.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/time-xen.c
+--- linux-2.6.18.8/arch/i386/kernel/time-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/time-xen.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,1209 @@
+/*
+ * linux/arch/i386/kernel/time.c
+ *
@@ -14397,13 +14722,21 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/time-xen.c linux-2.6.18-xen-3.2.0/arc
+}
+static DECLARE_WORK(clock_was_set_work, __clock_was_set, NULL);
+
++/*
++ * GCC 4.3 can turn loops over an induction variable into division. We do
++ * not support arbitrary 64-bit division, and so must break the induction.
++ */
++#define clobber_induction_variable(v) asm ( "" : "+r" (v) )
++
+static inline void __normalize_time(time_t *sec, s64 *nsec)
+{
+ while (*nsec >= NSEC_PER_SEC) {
++ clobber_induction_variable(*nsec);
+ (*nsec) -= NSEC_PER_SEC;
+ (*sec)++;
+ }
+ while (*nsec < 0) {
++ clobber_induction_variable(*nsec);
+ (*nsec) += NSEC_PER_SEC;
+ (*sec)--;
+ }
@@ -14566,21 +14899,28 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/time-xen.c linux-2.6.18-xen-3.2.0/arc
+{
+ struct vcpu_time_info *src;
+ struct shadow_time_info *dst;
++ unsigned long flags;
++ u32 pre_version, post_version;
+
+ src = &vcpu_info(cpu)->time;
+ dst = &per_cpu(shadow_time, cpu);
+
++ local_irq_save(flags);
++
+ do {
-+ dst->version = src->version;
++ pre_version = dst->version = src->version;
+ rmb();
+ dst->tsc_timestamp = src->tsc_timestamp;
+ dst->system_timestamp = src->system_time;
+ dst->tsc_to_nsec_mul = src->tsc_to_system_mul;
+ dst->tsc_shift = src->tsc_shift;
+ rmb();
-+ } while ((src->version & 1) | (dst->version ^ src->version));
++ post_version = src->version;
++ } while ((pre_version & 1) | (pre_version ^ post_version));
+
+ dst->tsc_to_usec_mul = dst->tsc_to_nsec_mul / 1000;
++
++ local_irq_restore(flags);
+}
+
+static inline int time_values_up_to_date(unsigned int cpu)
@@ -15265,7 +15605,7 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/time-xen.c linux-2.6.18-xen-3.2.0/arc
+ j = jiffies + 1;
+ }
+
-+ singleshot.timeout_abs_ns = jiffies_to_st(j);
++ singleshot.timeout_abs_ns = jiffies_to_st(j) + NS_PER_TICK/2;
+ singleshot.flags = 0;
+ rc = HYPERVISOR_vcpu_op(VCPUOP_set_singleshot_timer, cpu, &singleshot);
+#if CONFIG_XEN_COMPAT <= 0x030004
@@ -15452,9 +15792,32 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/time-xen.c linux-2.6.18-xen-3.2.0/arc
+ return 0;
+}
+__initcall(xen_sysctl_init);
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/traps-xen.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/traps-xen.c
---- linux-2.6.18.8/arch/i386/kernel/traps-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/traps-xen.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/traps.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/traps.c
+--- linux-2.6.18.8/arch/i386/kernel/traps.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/traps.c 2008-08-21 11:36:07.000000000 +0200
+@@ -642,18 +642,11 @@ static void mem_parity_error(unsigned ch
+
+ static void io_check_error(unsigned char reason, struct pt_regs * regs)
+ {
+- unsigned long i;
+-
+ printk(KERN_EMERG "NMI: IOCK error (debug interrupt?)\n");
+ show_registers(regs);
+
+ /* Re-enable the IOCK line, wait for a few seconds */
+- reason = (reason & 0xf) | 8;
+- outb(reason, 0x61);
+- i = 2000;
+- while (--i) udelay(1000);
+- reason &= ~8;
+- outb(reason, 0x61);
++ clear_io_check_error(reason);
+ }
+
+ static void unknown_nmi_error(unsigned char reason, struct pt_regs * regs)
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/traps-xen.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/traps-xen.c
+--- linux-2.6.18.8/arch/i386/kernel/traps-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/traps-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,1190 @@
+/*
+ * linux/arch/i386/traps.c
@@ -16552,7 +16915,7 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/traps-xen.c linux-2.6.18-xen-3.2.0/ar
+ * NB. All these are "trap gates" (i.e. events_mask isn't set) except
+ * for those that specify <dpl>|4 in the second field.
+ */
-+static trap_info_t trap_table[] = {
++static trap_info_t __cpuinitdata trap_table[] = {
+ { 0, 0, __KERNEL_CS, (unsigned long)divide_error },
+ { 1, 0|4, __KERNEL_CS, (unsigned long)debug },
+ { 3, 3|4, __KERNEL_CS, (unsigned long)int3 },
@@ -16613,7 +16976,7 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/traps-xen.c linux-2.6.18-xen-3.2.0/ar
+ cpu_init();
+}
+
-+void smp_trap_init(trap_info_t *trap_ctxt)
++void __cpuinit smp_trap_init(trap_info_t *trap_ctxt)
+{
+ const trap_info_t *t = trap_table;
+
@@ -16646,32 +17009,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/traps-xen.c linux-2.6.18-xen-3.2.0/ar
+}
+__setup("call_trace=", call_trace_setup);
+#endif
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/traps.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/traps.c
---- linux-2.6.18.8/arch/i386/kernel/traps.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/traps.c 2008-02-15 16:21:49.000000000 -0800
-@@ -642,18 +642,11 @@ static void mem_parity_error(unsigned ch
-
- static void io_check_error(unsigned char reason, struct pt_regs * regs)
- {
-- unsigned long i;
--
- printk(KERN_EMERG "NMI: IOCK error (debug interrupt?)\n");
- show_registers(regs);
-
- /* Re-enable the IOCK line, wait for a few seconds */
-- reason = (reason & 0xf) | 8;
-- outb(reason, 0x61);
-- i = 2000;
-- while (--i) udelay(1000);
-- reason &= ~8;
-- outb(reason, 0x61);
-+ clear_io_check_error(reason);
- }
-
- static void unknown_nmi_error(unsigned char reason, struct pt_regs * regs)
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/vm86.c linux-2.6.18-xen-3.2.0/arch/i386/kernel/vm86.c
---- linux-2.6.18.8/arch/i386/kernel/vm86.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/vm86.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/vm86.c linux-2.6.18-xen-3.3.0/arch/i386/kernel/vm86.c
+--- linux-2.6.18.8/arch/i386/kernel/vm86.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/vm86.c 2008-08-21 11:36:07.000000000 +0200
@@ -97,7 +97,9 @@
struct pt_regs * FASTCALL(save_v86_state(struct kernel_vm86_regs * regs));
struct pt_regs * fastcall save_v86_state(struct kernel_vm86_regs * regs)
@@ -16726,9 +17066,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/vm86.c linux-2.6.18-xen-3.2.0/arch/i3
tsk->thread.screen_bitmap = info->screen_bitmap;
if (info->flags & VM86_SCREEN_BITMAP)
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/vmlinux.lds.S linux-2.6.18-xen-3.2.0/arch/i386/kernel/vmlinux.lds.S
---- linux-2.6.18.8/arch/i386/kernel/vmlinux.lds.S 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/vmlinux.lds.S 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/vmlinux.lds.S linux-2.6.18-xen-3.3.0/arch/i386/kernel/vmlinux.lds.S
+--- linux-2.6.18.8/arch/i386/kernel/vmlinux.lds.S 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/vmlinux.lds.S 2008-08-21 11:36:07.000000000 +0200
@@ -13,6 +13,12 @@ OUTPUT_FORMAT("elf32-i386", "elf32-i386"
OUTPUT_ARCH(i386)
ENTRY(phys_startup_32)
@@ -16771,9 +17111,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/vmlinux.lds.S linux-2.6.18-xen-3.2.0/
+
+ NOTES
}
-diff -rpuN linux-2.6.18.8/arch/i386/kernel/vsyscall-note-xen.S linux-2.6.18-xen-3.2.0/arch/i386/kernel/vsyscall-note-xen.S
---- linux-2.6.18.8/arch/i386/kernel/vsyscall-note-xen.S 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/kernel/vsyscall-note-xen.S 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/kernel/vsyscall-note-xen.S linux-2.6.18-xen-3.3.0/arch/i386/kernel/vsyscall-note-xen.S
+--- linux-2.6.18.8/arch/i386/kernel/vsyscall-note-xen.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/kernel/vsyscall-note-xen.S 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,32 @@
+/*
+ * This supplies .note.* sections to go into the PT_NOTE inside the vDSO text.
@@ -16807,17 +17147,17 @@ diff -rpuN linux-2.6.18.8/arch/i386/kernel/vsyscall-note-xen.S linux-2.6.18-xen-
+NOTE_KERNELCAP_BEGIN(1, 1)
+NOTE_KERNELCAP(0, "nosegneg")
+NOTE_KERNELCAP_END
-diff -rpuN linux-2.6.18.8/arch/i386/lib/Makefile linux-2.6.18-xen-3.2.0/arch/i386/lib/Makefile
---- linux-2.6.18.8/arch/i386/lib/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/lib/Makefile 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/lib/Makefile linux-2.6.18-xen-3.3.0/arch/i386/lib/Makefile
+--- linux-2.6.18.8/arch/i386/lib/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/lib/Makefile 2008-08-21 11:36:07.000000000 +0200
@@ -7,3 +7,4 @@ lib-y = checksum.o delay.o usercopy.o ge
bitops.o
lib-$(CONFIG_X86_USE_3DNOW) += mmx.o
+lib-$(CONFIG_XEN_SCRUB_PAGES) += scrub.o
-diff -rpuN linux-2.6.18.8/arch/i386/lib/scrub.c linux-2.6.18-xen-3.2.0/arch/i386/lib/scrub.c
---- linux-2.6.18.8/arch/i386/lib/scrub.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/lib/scrub.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/lib/scrub.c linux-2.6.18-xen-3.3.0/arch/i386/lib/scrub.c
+--- linux-2.6.18.8/arch/i386/lib/scrub.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/lib/scrub.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,21 @@
+#include <asm/cpufeature.h>
+#include <asm/page.h>
@@ -16840,23 +17180,24 @@ diff -rpuN linux-2.6.18.8/arch/i386/lib/scrub.c linux-2.6.18-xen-3.2.0/arch/i386
+ for (; count--; v += PAGE_SIZE)
+ clear_page(v);
+}
-diff -rpuN linux-2.6.18.8/arch/i386/mach-xen/Makefile linux-2.6.18-xen-3.2.0/arch/i386/mach-xen/Makefile
---- linux-2.6.18.8/arch/i386/mach-xen/Makefile 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/mach-xen/Makefile 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/mach-xen/Makefile linux-2.6.18-xen-3.3.0/arch/i386/mach-xen/Makefile
+--- linux-2.6.18.8/arch/i386/mach-xen/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/mach-xen/Makefile 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,5 @@
+#
+# Makefile for the linux kernel.
+#
+
+obj-y := setup.o
-diff -rpuN linux-2.6.18.8/arch/i386/mach-xen/setup.c linux-2.6.18-xen-3.2.0/arch/i386/mach-xen/setup.c
---- linux-2.6.18.8/arch/i386/mach-xen/setup.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/mach-xen/setup.c 2008-02-15 16:21:49.000000000 -0800
-@@ -0,0 +1,147 @@
+diff -rpuN linux-2.6.18.8/arch/i386/mach-xen/setup.c linux-2.6.18-xen-3.3.0/arch/i386/mach-xen/setup.c
+--- linux-2.6.18.8/arch/i386/mach-xen/setup.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/mach-xen/setup.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,158 @@
+/*
+ * Machine specific setup for generic
+ */
+
++#include <linux/mm.h>
+#include <linux/smp.h>
+#include <linux/init.h>
+#include <linux/interrupt.h>
@@ -16942,17 +17283,39 @@ diff -rpuN linux-2.6.18.8/arch/i386/mach-xen/setup.c linux-2.6.18-xen-3.2.0/arch
+extern void failsafe_callback(void);
+extern void nmi(void);
+
-+unsigned long *machine_to_phys_mapping;
++unsigned long *machine_to_phys_mapping = (void *)MACH2PHYS_VIRT_START;
+EXPORT_SYMBOL(machine_to_phys_mapping);
+unsigned int machine_to_phys_order;
+EXPORT_SYMBOL(machine_to_phys_order);
+
-+void __init machine_specific_arch_setup(void)
++void __init pre_setup_arch_hook(void)
+{
-+ int ret;
+ struct xen_machphys_mapping mapping;
+ unsigned long machine_to_phys_nr_ents;
+ struct xen_platform_parameters pp;
++
++ init_mm.pgd = swapper_pg_dir = (pgd_t *)xen_start_info->pt_base;
++
++ setup_xen_features();
++
++ if (HYPERVISOR_xen_version(XENVER_platform_parameters, &pp) == 0)
++ set_fixaddr_top(pp.virt_start);
++
++ if (HYPERVISOR_memory_op(XENMEM_machphys_mapping, &mapping) == 0) {
++ machine_to_phys_mapping = (unsigned long *)mapping.v_start;
++ machine_to_phys_nr_ents = mapping.max_mfn + 1;
++ } else
++ machine_to_phys_nr_ents = MACH2PHYS_NR_ENTRIES;
++ machine_to_phys_order = fls(machine_to_phys_nr_ents - 1);
++
++ if (!xen_feature(XENFEAT_auto_translated_physmap))
++ phys_to_machine_mapping =
++ (unsigned long *)xen_start_info->mfn_list;
++}
++
++void __init machine_specific_arch_setup(void)
++{
++ int ret;
+ static struct callback_register __initdata event = {
+ .type = CALLBACKTYPE_event,
+ .address = { __KERNEL_CS, (unsigned long)hypervisor_callback },
@@ -16987,30 +17350,54 @@ diff -rpuN linux-2.6.18.8/arch/i386/mach-xen/setup.c linux-2.6.18-xen-3.2.0/arch
+ HYPERVISOR_nmi_op(XENNMI_register_callback, &cb);
+ }
+#endif
++}
+diff -rpuN linux-2.6.18.8/arch/i386/Makefile linux-2.6.18-xen-3.3.0/arch/i386/Makefile
+--- linux-2.6.18.8/arch/i386/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/Makefile 2008-08-21 11:36:07.000000000 +0200
+@@ -71,6 +71,10 @@ mcore-$(CONFIG_X86_BIGSMP) := mach-defau
+ mflags-$(CONFIG_X86_SUMMIT) := -Iinclude/asm-i386/mach-summit
+ mcore-$(CONFIG_X86_SUMMIT) := mach-default
+
++# Xen subarch support
++mflags-$(CONFIG_X86_XEN) := -Iinclude/asm-i386/mach-xen
++mcore-$(CONFIG_X86_XEN) := mach-xen
+
-+ if (HYPERVISOR_xen_version(XENVER_platform_parameters, &pp) == 0)
-+ set_fixaddr_top(pp.virt_start);
+ # generic subarchitecture
+ mflags-$(CONFIG_X86_GENERICARCH) := -Iinclude/asm-i386/mach-generic
+ mcore-$(CONFIG_X86_GENERICARCH) := mach-default
+@@ -102,9 +106,20 @@ AFLAGS += $(mflags-y)
+
+ boot := arch/i386/boot
+
+-PHONY += zImage bzImage compressed zlilo bzlilo \
++PHONY += zImage bzImage vmlinuz compressed zlilo bzlilo \
+ zdisk bzdisk fdimage fdimage144 fdimage288 isoimage install
+
++ifdef CONFIG_XEN
++CPPFLAGS := -D__XEN_INTERFACE_VERSION__=$(CONFIG_XEN_INTERFACE_VERSION) \
++ -Iinclude$(if $(KBUILD_SRC),2)/asm/mach-xen $(CPPFLAGS)
++all: vmlinuz
+
-+ machine_to_phys_mapping = (unsigned long *)MACH2PHYS_VIRT_START;
-+ machine_to_phys_nr_ents = MACH2PHYS_NR_ENTRIES;
-+ if (HYPERVISOR_memory_op(XENMEM_machphys_mapping, &mapping) == 0) {
-+ machine_to_phys_mapping = (unsigned long *)mapping.v_start;
-+ machine_to_phys_nr_ents = mapping.max_mfn + 1;
-+ }
-+ while ((1UL << machine_to_phys_order) < machine_to_phys_nr_ents )
-+ machine_to_phys_order++;
-+}
-diff -rpuN linux-2.6.18.8/arch/i386/mm/Makefile linux-2.6.18-xen-3.2.0/arch/i386/mm/Makefile
---- linux-2.6.18.8/arch/i386/mm/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/mm/Makefile 2008-02-15 16:21:49.000000000 -0800
-@@ -8,3 +8,4 @@ obj-$(CONFIG_NUMA) += discontig.o
- obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o
- obj-$(CONFIG_HIGHMEM) += highmem.o
- obj-$(CONFIG_BOOT_IOREMAP) += boot_ioremap.o
-+obj-$(CONFIG_XEN) += hypervisor.o
-diff -rpuN linux-2.6.18.8/arch/i386/mm/fault-xen.c linux-2.6.18-xen-3.2.0/arch/i386/mm/fault-xen.c
---- linux-2.6.18.8/arch/i386/mm/fault-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/mm/fault-xen.c 2008-02-15 16:21:49.000000000 -0800
++# KBUILD_IMAGE specifies the target image being built
++KBUILD_IMAGE := $(boot)/vmlinuz
++
++vmlinuz: vmlinux
++ $(Q)$(MAKE) $(build)=$(boot) $(KBUILD_IMAGE)
++else
+ all: bzImage
+
+ # KBUILD_IMAGE specify target image being built
+@@ -124,6 +139,7 @@ zdisk bzdisk: vmlinux
+
+ fdimage fdimage144 fdimage288 isoimage: vmlinux
+ $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@
++endif
+
+ install:
+ $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) install
+diff -rpuN linux-2.6.18.8/arch/i386/mm/fault-xen.c linux-2.6.18-xen-3.3.0/arch/i386/mm/fault-xen.c
+--- linux-2.6.18.8/arch/i386/mm/fault-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/mm/fault-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,779 @@
+/*
+ * linux/arch/i386/mm/fault.c
@@ -17791,9 +18178,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/mm/fault-xen.c linux-2.6.18-xen-3.2.0/arch/i
+ }
+}
+#endif
-diff -rpuN linux-2.6.18.8/arch/i386/mm/highmem-xen.c linux-2.6.18-xen-3.2.0/arch/i386/mm/highmem-xen.c
---- linux-2.6.18.8/arch/i386/mm/highmem-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/mm/highmem-xen.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/mm/highmem-xen.c linux-2.6.18-xen-3.3.0/arch/i386/mm/highmem-xen.c
+--- linux-2.6.18.8/arch/i386/mm/highmem-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/mm/highmem-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,136 @@
+#include <linux/highmem.h>
+#include <linux/module.h>
@@ -17931,9 +18318,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/mm/highmem-xen.c linux-2.6.18-xen-3.2.0/arch
+EXPORT_SYMBOL(kmap_atomic_pte);
+EXPORT_SYMBOL(kunmap_atomic);
+EXPORT_SYMBOL(kmap_atomic_to_page);
-diff -rpuN linux-2.6.18.8/arch/i386/mm/hypervisor.c linux-2.6.18-xen-3.2.0/arch/i386/mm/hypervisor.c
---- linux-2.6.18.8/arch/i386/mm/hypervisor.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/mm/hypervisor.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/mm/hypervisor.c linux-2.6.18-xen-3.3.0/arch/i386/mm/hypervisor.c
+--- linux-2.6.18.8/arch/i386/mm/hypervisor.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/mm/hypervisor.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,602 @@
+/******************************************************************************
+ * mm/hypervisor.c
@@ -18537,10 +18924,10 @@ diff -rpuN linux-2.6.18.8/arch/i386/mm/hypervisor.c linux-2.6.18-xen-3.2.0/arch/
+ BUG_ON(rc && rc != -ENOSYS);
+ return !rc;
+}
-diff -rpuN linux-2.6.18.8/arch/i386/mm/init-xen.c linux-2.6.18-xen-3.2.0/arch/i386/mm/init-xen.c
---- linux-2.6.18.8/arch/i386/mm/init-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/mm/init-xen.c 2008-02-15 16:21:49.000000000 -0800
-@@ -0,0 +1,850 @@
+diff -rpuN linux-2.6.18.8/arch/i386/mm/init-xen.c linux-2.6.18-xen-3.3.0/arch/i386/mm/init-xen.c
+--- linux-2.6.18.8/arch/i386/mm/init-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/mm/init-xen.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,847 @@
+/*
+ * linux/arch/i386/mm/init.c
+ *
@@ -18931,9 +19318,6 @@ diff -rpuN linux-2.6.18.8/arch/i386/mm/init-xen.c linux-2.6.18-xen-3.2.0/arch/i3
+ unsigned long vaddr;
+ pgd_t *pgd_base = (pgd_t *)xen_start_info->pt_base;
+
-+ swapper_pg_dir = pgd_base;
-+ init_mm.pgd = pgd_base;
-+
+ /* Enable PSE if available */
+ if (cpu_has_pse) {
+ set_in_cr4(X86_CR4_PSE);
@@ -19391,9 +19775,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/mm/init-xen.c linux-2.6.18-xen-3.2.0/arch/i3
+}
+#endif
+
-diff -rpuN linux-2.6.18.8/arch/i386/mm/ioremap-xen.c linux-2.6.18-xen-3.2.0/arch/i386/mm/ioremap-xen.c
---- linux-2.6.18.8/arch/i386/mm/ioremap-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/mm/ioremap-xen.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/mm/ioremap-xen.c linux-2.6.18-xen-3.3.0/arch/i386/mm/ioremap-xen.c
+--- linux-2.6.18.8/arch/i386/mm/ioremap-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/mm/ioremap-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,443 @@
+/*
+ * arch/i386/mm/ioremap.c
@@ -19473,7 +19857,7 @@ diff -rpuN linux-2.6.18.8/arch/i386/mm/ioremap-xen.c linux-2.6.18-xen-3.2.0/arch
+ * Fill in the machine address: PTE ptr is done later by
+ * apply_to_page_range().
+ */
-+ v->val = __pte_val(pfn_pte_ma(mfn, prot));
++ v->val = __pte_val(pfn_pte_ma(mfn, prot)) | _PAGE_IO;
+
+ mfn++;
+ address += PAGE_SIZE;
@@ -19838,9 +20222,17 @@ diff -rpuN linux-2.6.18.8/arch/i386/mm/ioremap-xen.c linux-2.6.18-xen-3.2.0/arch
+ --nrpages;
+ }
+}
-diff -rpuN linux-2.6.18.8/arch/i386/mm/pageattr.c linux-2.6.18-xen-3.2.0/arch/i386/mm/pageattr.c
---- linux-2.6.18.8/arch/i386/mm/pageattr.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/mm/pageattr.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/mm/Makefile linux-2.6.18-xen-3.3.0/arch/i386/mm/Makefile
+--- linux-2.6.18.8/arch/i386/mm/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/mm/Makefile 2008-08-21 11:36:07.000000000 +0200
+@@ -8,3 +8,4 @@ obj-$(CONFIG_NUMA) += discontig.o
+ obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o
+ obj-$(CONFIG_HIGHMEM) += highmem.o
+ obj-$(CONFIG_BOOT_IOREMAP) += boot_ioremap.o
++obj-$(CONFIG_XEN) += hypervisor.o
+diff -rpuN linux-2.6.18.8/arch/i386/mm/pageattr.c linux-2.6.18-xen-3.3.0/arch/i386/mm/pageattr.c
+--- linux-2.6.18.8/arch/i386/mm/pageattr.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/mm/pageattr.c 2008-08-21 11:36:07.000000000 +0200
@@ -84,7 +84,7 @@ static void set_pmd_pte(pte_t *kpte, uns
unsigned long flags;
@@ -19850,9 +20242,117 @@ diff -rpuN linux-2.6.18.8/arch/i386/mm/pageattr.c linux-2.6.18-xen-3.2.0/arch/i3
return;
spin_lock_irqsave(&pgd_lock, flags);
-diff -rpuN linux-2.6.18.8/arch/i386/mm/pgtable-xen.c linux-2.6.18-xen-3.2.0/arch/i386/mm/pgtable-xen.c
---- linux-2.6.18.8/arch/i386/mm/pgtable-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/mm/pgtable-xen.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/mm/pgtable.c linux-2.6.18-xen-3.3.0/arch/i386/mm/pgtable.c
+--- linux-2.6.18.8/arch/i386/mm/pgtable.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/mm/pgtable.c 2008-08-21 11:36:07.000000000 +0200
+@@ -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 @@ void set_pmd_pfn(unsigned long vaddr, un
+ __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 @@ void __set_fixmap (enum fixed_addresses
+ 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)
+@@ -214,9 +226,10 @@ void pgd_ctor(void *pgd, kmem_cache_t *c
+ spin_lock_irqsave(&pgd_lock, flags);
+ }
+
+- clone_pgd_range((pgd_t *)pgd + USER_PTRS_PER_PGD,
+- swapper_pg_dir + USER_PTRS_PER_PGD,
+- KERNEL_PGD_PTRS);
++ if (PTRS_PER_PMD == 1 || HAVE_SHARED_KERNEL_PMD)
++ clone_pgd_range((pgd_t *)pgd + USER_PTRS_PER_PGD,
++ swapper_pg_dir + USER_PTRS_PER_PGD,
++ KERNEL_PGD_PTRS);
+ if (PTRS_PER_PMD > 1)
+ return;
+
+@@ -248,6 +261,30 @@ pgd_t *pgd_alloc(struct mm_struct *mm)
+ goto out_oom;
+ set_pgd(&pgd[i], __pgd(1 + __pa(pmd)));
+ }
++
++ if (!HAVE_SHARED_KERNEL_PMD) {
++ unsigned long flags;
++
++ for (i = USER_PTRS_PER_PGD; i < PTRS_PER_PGD; i++) {
++ pmd_t *pmd = kmem_cache_alloc(pmd_cache, GFP_KERNEL);
++ if (!pmd)
++ goto out_oom;
++ set_pgd(&pgd[USER_PTRS_PER_PGD], __pgd(1 + __pa(pmd)));
++ }
++
++ spin_lock_irqsave(&pgd_lock, flags);
++ for (i = USER_PTRS_PER_PGD; i < PTRS_PER_PGD; i++) {
++ unsigned long v = (unsigned long)i << PGDIR_SHIFT;
++ pgd_t *kpgd = pgd_offset_k(v);
++ pud_t *kpud = pud_offset(kpgd, v);
++ pmd_t *kpmd = pmd_offset(kpud, v);
++ pmd_t *pmd = (void *)__va(pgd_val(pgd[i])-1);
++ memcpy(pmd, kpmd, PAGE_SIZE);
++ }
++ pgd_list_add(pgd);
++ spin_unlock_irqrestore(&pgd_lock, flags);
++ }
++
+ return pgd;
+
+ out_oom:
+@@ -262,9 +299,23 @@ void pgd_free(pgd_t *pgd)
+ int i;
+
+ /* in the PAE case user pgd entries are overwritten before usage */
+- if (PTRS_PER_PMD > 1)
+- for (i = 0; i < USER_PTRS_PER_PGD; ++i)
+- kmem_cache_free(pmd_cache, (void *)__va(pgd_val(pgd[i])-1));
++ if (PTRS_PER_PMD > 1) {
++ for (i = 0; i < USER_PTRS_PER_PGD; ++i) {
++ pmd_t *pmd = (void *)__va(pgd_val(pgd[i])-1);
++ kmem_cache_free(pmd_cache, pmd);
++ }
++ if (!HAVE_SHARED_KERNEL_PMD) {
++ unsigned long flags;
++ spin_lock_irqsave(&pgd_lock, flags);
++ pgd_list_del(pgd);
++ spin_unlock_irqrestore(&pgd_lock, flags);
++ for (i = USER_PTRS_PER_PGD; i < PTRS_PER_PGD; i++) {
++ pmd_t *pmd = (void *)__va(pgd_val(pgd[i])-1);
++ memset(pmd, 0, PTRS_PER_PMD*sizeof(pmd_t));
++ kmem_cache_free(pmd_cache, pmd);
++ }
++ }
++ }
+ /* in the non-PAE case, free_pgtables() clears user pgd entries */
+ kmem_cache_free(pgd_cache, pgd);
+ }
+diff -rpuN linux-2.6.18.8/arch/i386/mm/pgtable-xen.c linux-2.6.18-xen-3.3.0/arch/i386/mm/pgtable-xen.c
+--- linux-2.6.18.8/arch/i386/mm/pgtable-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/mm/pgtable-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,725 @@
+/*
+ * linux/arch/i386/mm/pgtable.c
@@ -20579,117 +21079,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/mm/pgtable-xen.c linux-2.6.18-xen-3.2.0/arch
+ !mm->context.has_foreign_mappings)
+ mm_unpin(mm);
+}
-diff -rpuN linux-2.6.18.8/arch/i386/mm/pgtable.c linux-2.6.18-xen-3.2.0/arch/i386/mm/pgtable.c
---- linux-2.6.18.8/arch/i386/mm/pgtable.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/mm/pgtable.c 2008-02-15 16:21:49.000000000 -0800
-@@ -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 @@ void set_pmd_pfn(unsigned long vaddr, un
- __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 @@ void __set_fixmap (enum fixed_addresses
- 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)
-@@ -214,9 +226,10 @@ void pgd_ctor(void *pgd, kmem_cache_t *c
- spin_lock_irqsave(&pgd_lock, flags);
- }
-
-- clone_pgd_range((pgd_t *)pgd + USER_PTRS_PER_PGD,
-- swapper_pg_dir + USER_PTRS_PER_PGD,
-- KERNEL_PGD_PTRS);
-+ if (PTRS_PER_PMD == 1 || HAVE_SHARED_KERNEL_PMD)
-+ clone_pgd_range((pgd_t *)pgd + USER_PTRS_PER_PGD,
-+ swapper_pg_dir + USER_PTRS_PER_PGD,
-+ KERNEL_PGD_PTRS);
- if (PTRS_PER_PMD > 1)
- return;
-
-@@ -248,6 +261,30 @@ pgd_t *pgd_alloc(struct mm_struct *mm)
- goto out_oom;
- set_pgd(&pgd[i], __pgd(1 + __pa(pmd)));
- }
-+
-+ if (!HAVE_SHARED_KERNEL_PMD) {
-+ unsigned long flags;
-+
-+ for (i = USER_PTRS_PER_PGD; i < PTRS_PER_PGD; i++) {
-+ pmd_t *pmd = kmem_cache_alloc(pmd_cache, GFP_KERNEL);
-+ if (!pmd)
-+ goto out_oom;
-+ set_pgd(&pgd[USER_PTRS_PER_PGD], __pgd(1 + __pa(pmd)));
-+ }
-+
-+ spin_lock_irqsave(&pgd_lock, flags);
-+ for (i = USER_PTRS_PER_PGD; i < PTRS_PER_PGD; i++) {
-+ unsigned long v = (unsigned long)i << PGDIR_SHIFT;
-+ pgd_t *kpgd = pgd_offset_k(v);
-+ pud_t *kpud = pud_offset(kpgd, v);
-+ pmd_t *kpmd = pmd_offset(kpud, v);
-+ pmd_t *pmd = (void *)__va(pgd_val(pgd[i])-1);
-+ memcpy(pmd, kpmd, PAGE_SIZE);
-+ }
-+ pgd_list_add(pgd);
-+ spin_unlock_irqrestore(&pgd_lock, flags);
-+ }
-+
- return pgd;
-
- out_oom:
-@@ -262,9 +299,23 @@ void pgd_free(pgd_t *pgd)
- int i;
-
- /* in the PAE case user pgd entries are overwritten before usage */
-- if (PTRS_PER_PMD > 1)
-- for (i = 0; i < USER_PTRS_PER_PGD; ++i)
-- kmem_cache_free(pmd_cache, (void *)__va(pgd_val(pgd[i])-1));
-+ if (PTRS_PER_PMD > 1) {
-+ for (i = 0; i < USER_PTRS_PER_PGD; ++i) {
-+ pmd_t *pmd = (void *)__va(pgd_val(pgd[i])-1);
-+ kmem_cache_free(pmd_cache, pmd);
-+ }
-+ if (!HAVE_SHARED_KERNEL_PMD) {
-+ unsigned long flags;
-+ spin_lock_irqsave(&pgd_lock, flags);
-+ pgd_list_del(pgd);
-+ spin_unlock_irqrestore(&pgd_lock, flags);
-+ for (i = USER_PTRS_PER_PGD; i < PTRS_PER_PGD; i++) {
-+ pmd_t *pmd = (void *)__va(pgd_val(pgd[i])-1);
-+ memset(pmd, 0, PTRS_PER_PMD*sizeof(pmd_t));
-+ kmem_cache_free(pmd_cache, pmd);
-+ }
-+ }
-+ }
- /* in the non-PAE case, free_pgtables() clears user pgd entries */
- kmem_cache_free(pgd_cache, pgd);
- }
-diff -rpuN linux-2.6.18.8/arch/i386/oprofile/Makefile linux-2.6.18-xen-3.2.0/arch/i386/oprofile/Makefile
---- linux-2.6.18.8/arch/i386/oprofile/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/oprofile/Makefile 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/oprofile/Makefile linux-2.6.18-xen-3.3.0/arch/i386/oprofile/Makefile
+--- linux-2.6.18.8/arch/i386/oprofile/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/oprofile/Makefile 2008-08-21 11:36:07.000000000 +0200
@@ -6,7 +6,14 @@ DRIVER_OBJS = $(addprefix ../../../drive
oprofilefs.o oprofile_stats.o \
timer_int.o )
@@ -20705,9 +21097,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/oprofile/Makefile linux-2.6.18-xen-3.2.0/arc
op_model_ppro.o op_model_p4.o
oprofile-$(CONFIG_X86_IO_APIC) += nmi_timer_int.o
+endif
-diff -rpuN linux-2.6.18.8/arch/i386/oprofile/xenoprof.c linux-2.6.18-xen-3.2.0/arch/i386/oprofile/xenoprof.c
---- linux-2.6.18.8/arch/i386/oprofile/xenoprof.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/oprofile/xenoprof.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/oprofile/xenoprof.c linux-2.6.18-xen-3.3.0/arch/i386/oprofile/xenoprof.c
+--- linux-2.6.18.8/arch/i386/oprofile/xenoprof.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/oprofile/xenoprof.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,179 @@
+/**
+ * @file xenoprof.c
@@ -20888,24 +21280,30 @@ diff -rpuN linux-2.6.18.8/arch/i386/oprofile/xenoprof.c linux-2.6.18-xen-3.2.0/a
+{
+ xenoprofile_exit();
+}
-diff -rpuN linux-2.6.18.8/arch/i386/pci/Makefile linux-2.6.18-xen-3.2.0/arch/i386/pci/Makefile
---- linux-2.6.18.8/arch/i386/pci/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/pci/Makefile 2008-02-15 16:21:49.000000000 -0800
-@@ -4,6 +4,10 @@ obj-$(CONFIG_PCI_BIOS) += pcbios.o
- obj-$(CONFIG_PCI_MMCONFIG) += mmconfig.o direct.o
- obj-$(CONFIG_PCI_DIRECT) += direct.o
-
-+# pcifront should be after pcbios.o, mmconfig.o, and direct.o as it should only
-+# take over if direct access to the PCI bus is unavailable
-+obj-$(CONFIG_XEN_PCIDEV_FRONTEND) += pcifront.o
-+
- pci-y := fixup.o
- pci-$(CONFIG_ACPI) += acpi.o
- pci-y += legacy.o irq.o
-diff -rpuN linux-2.6.18.8/arch/i386/pci/irq-xen.c linux-2.6.18-xen-3.2.0/arch/i386/pci/irq-xen.c
---- linux-2.6.18.8/arch/i386/pci/irq-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/pci/irq-xen.c 2008-02-15 16:21:49.000000000 -0800
-@@ -0,0 +1,1205 @@
+diff -rpuN linux-2.6.18.8/arch/i386/pci/irq.c linux-2.6.18-xen-3.3.0/arch/i386/pci/irq.c
+--- linux-2.6.18.8/arch/i386/pci/irq.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/pci/irq.c 2008-08-21 11:36:07.000000000 +0200
+@@ -543,6 +543,16 @@ static __init int intel_router_probe(str
+ case PCI_DEVICE_ID_INTEL_ICH8_2:
+ case PCI_DEVICE_ID_INTEL_ICH8_3:
+ case PCI_DEVICE_ID_INTEL_ICH8_4:
++ case PCI_DEVICE_ID_INTEL_ICH9_0:
++ case PCI_DEVICE_ID_INTEL_ICH9_1:
++ case PCI_DEVICE_ID_INTEL_ICH9_2:
++ case PCI_DEVICE_ID_INTEL_ICH9_3:
++ case PCI_DEVICE_ID_INTEL_ICH9_4:
++ case PCI_DEVICE_ID_INTEL_ICH9_5:
++ case PCI_DEVICE_ID_INTEL_ICH10_0:
++ case PCI_DEVICE_ID_INTEL_ICH10_1:
++ case PCI_DEVICE_ID_INTEL_ICH10_2:
++ case PCI_DEVICE_ID_INTEL_ICH10_3:
+ r->name = "PIIX/ICH";
+ r->get = pirq_piix_get;
+ r->set = pirq_piix_set;
+diff -rpuN linux-2.6.18.8/arch/i386/pci/irq-xen.c linux-2.6.18-xen-3.3.0/arch/i386/pci/irq-xen.c
+--- linux-2.6.18.8/arch/i386/pci/irq-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/pci/irq-xen.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,1215 @@
+/*
+ * Low-Level PCI Support for PC -- Routing of Interrupts
+ *
@@ -21167,13 +21565,13 @@ diff -rpuN linux-2.6.18.8/arch/i386/pci/irq-xen.c linux-2.6.18-xen-3.2.0/arch/i3
+ */
+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;
+}
@@ -21455,6 +21853,16 @@ diff -rpuN linux-2.6.18.8/arch/i386/pci/irq-xen.c linux-2.6.18-xen-3.2.0/arch/i3
+ case PCI_DEVICE_ID_INTEL_ICH8_2:
+ case PCI_DEVICE_ID_INTEL_ICH8_3:
+ case PCI_DEVICE_ID_INTEL_ICH8_4:
++ case PCI_DEVICE_ID_INTEL_ICH9_0:
++ case PCI_DEVICE_ID_INTEL_ICH9_1:
++ case PCI_DEVICE_ID_INTEL_ICH9_2:
++ case PCI_DEVICE_ID_INTEL_ICH9_3:
++ case PCI_DEVICE_ID_INTEL_ICH9_4:
++ case PCI_DEVICE_ID_INTEL_ICH9_5:
++ case PCI_DEVICE_ID_INTEL_ICH10_0:
++ case PCI_DEVICE_ID_INTEL_ICH10_1:
++ case PCI_DEVICE_ID_INTEL_ICH10_2:
++ case PCI_DEVICE_ID_INTEL_ICH10_3:
+ r->name = "PIIX/ICH";
+ r->get = pirq_piix_get;
+ r->set = pirq_piix_set;
@@ -22111,25 +22519,23 @@ diff -rpuN linux-2.6.18.8/arch/i386/pci/irq-xen.c linux-2.6.18-xen-3.2.0/arch/i3
+
+ return count;
+}
-diff -rpuN linux-2.6.18.8/arch/i386/pci/irq.c linux-2.6.18-xen-3.2.0/arch/i386/pci/irq.c
---- linux-2.6.18.8/arch/i386/pci/irq.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/pci/irq.c 2008-02-15 16:21:49.000000000 -0800
-@@ -543,6 +543,12 @@ static __init int intel_router_probe(str
- case PCI_DEVICE_ID_INTEL_ICH8_2:
- case PCI_DEVICE_ID_INTEL_ICH8_3:
- case PCI_DEVICE_ID_INTEL_ICH8_4:
-+ case PCI_DEVICE_ID_INTEL_ICH9_0:
-+ case PCI_DEVICE_ID_INTEL_ICH9_1:
-+ case PCI_DEVICE_ID_INTEL_ICH9_2:
-+ case PCI_DEVICE_ID_INTEL_ICH9_3:
-+ case PCI_DEVICE_ID_INTEL_ICH9_4:
-+ case PCI_DEVICE_ID_INTEL_ICH9_5:
- r->name = "PIIX/ICH";
- r->get = pirq_piix_get;
- r->set = pirq_piix_set;
-diff -rpuN linux-2.6.18.8/arch/i386/pci/pcifront.c linux-2.6.18-xen-3.2.0/arch/i386/pci/pcifront.c
---- linux-2.6.18.8/arch/i386/pci/pcifront.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/pci/pcifront.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/pci/Makefile linux-2.6.18-xen-3.3.0/arch/i386/pci/Makefile
+--- linux-2.6.18.8/arch/i386/pci/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/pci/Makefile 2008-08-21 11:36:07.000000000 +0200
+@@ -4,6 +4,10 @@ obj-$(CONFIG_PCI_BIOS) += pcbios.o
+ obj-$(CONFIG_PCI_MMCONFIG) += mmconfig.o direct.o
+ obj-$(CONFIG_PCI_DIRECT) += direct.o
+
++# pcifront should be after pcbios.o, mmconfig.o, and direct.o as it should only
++# take over if direct access to the PCI bus is unavailable
++obj-$(CONFIG_XEN_PCIDEV_FRONTEND) += pcifront.o
++
+ pci-y := fixup.o
+ pci-$(CONFIG_ACPI) += acpi.o
+ pci-y += legacy.o irq.o
+diff -rpuN linux-2.6.18.8/arch/i386/pci/pcifront.c linux-2.6.18-xen-3.3.0/arch/i386/pci/pcifront.c
+--- linux-2.6.18.8/arch/i386/pci/pcifront.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/pci/pcifront.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,55 @@
+/*
+ * PCI Frontend Stub - puts some "dummy" functions in to the Linux x86 PCI core
@@ -22186,18 +22592,9 @@ diff -rpuN linux-2.6.18.8/arch/i386/pci/pcifront.c linux-2.6.18-xen-3.2.0/arch/i
+}
+
+arch_initcall(pcifront_x86_stub_init);
-diff -rpuN linux-2.6.18.8/arch/i386/power/Makefile linux-2.6.18-xen-3.2.0/arch/i386/power/Makefile
---- linux-2.6.18.8/arch/i386/power/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/power/Makefile 2008-02-15 16:21:49.000000000 -0800
-@@ -1,2 +1,4 @@
--obj-$(CONFIG_PM) += cpu.o
-+obj-$(subst m,y,$(CONFIG_APM)) += cpu.o
-+obj-$(CONFIG_SOFTWARE_SUSPEND) += cpu.o
-+obj-$(CONFIG_ACPI_SLEEP) += cpu.o
- obj-$(CONFIG_SOFTWARE_SUSPEND) += swsusp.o
-diff -rpuN linux-2.6.18.8/arch/i386/power/cpu.c linux-2.6.18-xen-3.2.0/arch/i386/power/cpu.c
---- linux-2.6.18.8/arch/i386/power/cpu.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/i386/power/cpu.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/power/cpu.c linux-2.6.18-xen-3.3.0/arch/i386/power/cpu.c
+--- linux-2.6.18.8/arch/i386/power/cpu.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/power/cpu.c 2008-08-21 11:36:07.000000000 +0200
@@ -62,11 +62,12 @@ static void do_fpu_end(void)
static void fix_processor_context(void)
@@ -22212,158 +22609,18 @@ diff -rpuN linux-2.6.18.8/arch/i386/power/cpu.c linux-2.6.18-xen-3.2.0/arch/i386
load_TR_desc(); /* This does ltr */
load_LDT(&current->active_mm->context); /* This does lldt */
-diff -rpuN linux-2.6.18.8/arch/ia64/Kconfig linux-2.6.18-xen-3.2.0/arch/ia64/Kconfig
---- linux-2.6.18.8/arch/ia64/Kconfig 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/Kconfig 2008-02-15 16:21:49.000000000 -0800
-@@ -58,6 +58,28 @@ config GENERIC_IOMAP
- bool
- default y
-
-+config XEN
-+ bool "Xen hypervisor support"
-+ default y
-+ select XEN_XENCOMM
-+ help
-+ Enable Xen hypervisor support. Resulting kernel runs
-+ both as a guest OS on Xen and natively on hardware.
-+
-+config XEN_IA64_EXPOSE_P2M
-+ bool "Xen/IA64 exposure p2m table"
-+ depends on XEN
-+ default y
-+ help
-+ expose p2m from xen
-+
-+config XEN_IA64_EXPOSE_P2M_USE_DTR
-+ bool "Xen/IA64 map p2m table with dtr"
-+ depends on XEN_IA64_EXPOSE_P2M
-+ default y
-+ help
-+ use dtr to map the exposed p2m table
-+
- config SCHED_NO_NO_OMIT_FRAME_POINTER
- bool
- default y
-@@ -133,6 +155,10 @@ config IA64_SGI_SN2
- config IA64_HP_SIM
- bool "Ski-simulator"
-
-+config IA64_XEN
-+ bool "Xen guest"
-+ depends on XEN
-+
- endchoice
-
- choice
-@@ -431,6 +457,29 @@ config SGI_SN
-
- source "drivers/sn/Kconfig"
-
-+config KEXEC
-+ bool "kexec system call (EXPERIMENTAL)"
-+ depends on EXPERIMENTAL && !IA64_HP_SIM && (!SMP || HOTPLUG_CPU)
-+ 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
-+ but it is indepedent of the system firmware. And like a reboot
-+ you can start any kernel with it, not just Linux.
-+
-+ The name comes from the similiarity to the exec system call.
-+
-+ It is an ongoing process to be certain the hardware in a machine
-+ is properly shutdown, so do not be surprised if this code does not
-+ initially work for you. It may help to enable device hotplugging
-+ support. As of this writing the exact hardware interface is
-+ strongly in flux, so no good recommendation can be made.
-+
-+config CRASH_DUMP
-+ bool "kernel crash dumps (EXPERIMENTAL)"
-+ depends on EXPERIMENTAL && IA64_MCA_RECOVERY && !IA64_HP_SIM && (!SMP || HOTPLUG_CPU)
-+ help
-+ Generate crash dump after being started by kexec.
-+
- source "drivers/firmware/Kconfig"
-
- source "fs/Kconfig.binfmt"
-@@ -465,6 +514,21 @@ config PCI_DOMAINS
- bool
- default PCI
-
-+config XEN_PCIDEV_FRONTEND
-+ bool "Xen PCI Frontend"
-+ depends on PCI && XEN
-+ default y
-+ help
-+ The PCI device frontend driver allows the kernel to import arbitrary
-+ PCI devices from a PCI backend to support PCI driver domains.
-+
-+config XEN_PCIDEV_FE_DEBUG
-+ bool "Xen PCI Frontend Debugging"
-+ depends on XEN_PCIDEV_FRONTEND
-+ default n
-+ help
-+ Enables some debug statements within the PCI Frontend.
-+
- source "drivers/pci/pcie/Kconfig"
-
- source "drivers/pci/Kconfig"
-@@ -528,3 +592,16 @@ source "arch/ia64/Kconfig.debug"
- source "security/Kconfig"
-
- source "crypto/Kconfig"
-+
-+#
-+# override default values of drivers/xen/Kconfig
-+#
-+if XEN
-+config XEN_SMPBOOT
-+ default n
-+
-+config XEN_DEVMEM
-+ default n
-+endif
-+
-+source "drivers/xen/Kconfig"
-diff -rpuN linux-2.6.18.8/arch/ia64/Makefile linux-2.6.18-xen-3.2.0/arch/ia64/Makefile
---- linux-2.6.18.8/arch/ia64/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/Makefile 2008-02-15 16:21:49.000000000 -0800
-@@ -45,6 +45,12 @@ ifeq ($(call cc-version),0304)
- endif
-
- CFLAGS += $(cflags-y)
-+
-+cppflags-$(CONFIG_XEN) += \
-+ -D__XEN_INTERFACE_VERSION__=$(CONFIG_XEN_INTERFACE_VERSION)
-+
-+CPPFLAGS += $(cppflags-y)
-+
- head-y := arch/ia64/kernel/head.o arch/ia64/kernel/init_task.o
-
- libs-y += arch/ia64/lib/
-@@ -54,7 +60,9 @@ core-$(CONFIG_IA64_DIG) += arch/ia64/di
- core-$(CONFIG_IA64_GENERIC) += arch/ia64/dig/
- core-$(CONFIG_IA64_HP_ZX1) += arch/ia64/dig/
- core-$(CONFIG_IA64_HP_ZX1_SWIOTLB) += arch/ia64/dig/
-+core-$(CONFIG_IA64_XEN) += arch/ia64/dig/
- core-$(CONFIG_IA64_SGI_SN2) += arch/ia64/sn/
-+core-$(CONFIG_XEN) += arch/ia64/xen/
-
- drivers-$(CONFIG_PCI) += arch/ia64/pci/
- drivers-$(CONFIG_IA64_HP_SIM) += arch/ia64/hp/sim/
-@@ -87,8 +95,8 @@ CLEAN_FILES += vmlinux.gz bootloader
- boot: lib/lib.a vmlinux
- $(Q)$(MAKE) $(build)=$(boot) $@
-
--install: vmlinux.gz
-- sh $(srctree)/arch/ia64/install.sh $(KERNELRELEASE) $< System.map "$(INSTALL_PATH)"
-+install:
-+ -yes | sh $(srctree)/arch/ia64/install.sh $(KERNELRELEASE) vmlinux.gz System.map "$(INSTALL_PATH)"
-
- define archhelp
- echo '* compressed - Build compressed kernel image'
-diff -rpuN linux-2.6.18.8/arch/ia64/hp/common/sba_iommu.c linux-2.6.18-xen-3.2.0/arch/ia64/hp/common/sba_iommu.c
---- linux-2.6.18.8/arch/ia64/hp/common/sba_iommu.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/hp/common/sba_iommu.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/i386/power/Makefile linux-2.6.18-xen-3.3.0/arch/i386/power/Makefile
+--- linux-2.6.18.8/arch/i386/power/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/i386/power/Makefile 2008-08-21 11:36:07.000000000 +0200
+@@ -1,2 +1,4 @@
+-obj-$(CONFIG_PM) += cpu.o
++obj-$(subst m,y,$(CONFIG_APM)) += cpu.o
++obj-$(CONFIG_SOFTWARE_SUSPEND) += cpu.o
++obj-$(CONFIG_ACPI_SLEEP) += cpu.o
+ obj-$(CONFIG_SOFTWARE_SUSPEND) += swsusp.o
+diff -rpuN linux-2.6.18.8/arch/ia64/hp/common/sba_iommu.c linux-2.6.18-xen-3.3.0/arch/ia64/hp/common/sba_iommu.c
+--- linux-2.6.18.8/arch/ia64/hp/common/sba_iommu.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/hp/common/sba_iommu.c 2008-08-21 11:36:07.000000000 +0200
@@ -42,6 +42,11 @@
#include <asm/system.h> /* wmb() */
@@ -22701,83 +22958,121 @@ diff -rpuN linux-2.6.18.8/arch/ia64/hp/common/sba_iommu.c linux-2.6.18-xen-3.2.0
DBG_INIT("%s() prefetch spill addr: 0x%lx\n", __FUNCTION__, prefetch_spill_page);
}
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/Makefile linux-2.6.18-xen-3.2.0/arch/ia64/kernel/Makefile
---- linux-2.6.18.8/arch/ia64/kernel/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/Makefile 2008-02-15 16:21:49.000000000 -0800
-@@ -28,6 +28,8 @@ obj-$(CONFIG_IA64_CYCLONE) += cyclone.o
- obj-$(CONFIG_CPU_FREQ) += cpufreq/
- obj-$(CONFIG_IA64_MCA_RECOVERY) += mca_recovery.o
- obj-$(CONFIG_KPROBES) += kprobes.o jprobes.o
-+obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o crash.o
-+obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
- obj-$(CONFIG_IA64_UNCACHED_ALLOCATOR) += uncached.o
- obj-$(CONFIG_AUDIT) += audit.o
- mca_recovery-y += mca_drv.o mca_drv_asm.o
-@@ -61,3 +63,61 @@ $(obj)/gate-syms.o: $(obj)/gate.lds $(ob
- # We must build gate.so before we can assemble it.
- # Note: kbuild does not track this dependency due to usage of .incbin
- $(obj)/gate-data.o: $(obj)/gate.so
+diff -rpuN linux-2.6.18.8/arch/ia64/Kconfig linux-2.6.18-xen-3.3.0/arch/ia64/Kconfig
+--- linux-2.6.18.8/arch/ia64/Kconfig 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/Kconfig 2008-08-21 11:36:07.000000000 +0200
+@@ -58,6 +58,28 @@ config GENERIC_IOMAP
+ bool
+ default y
+
++config XEN
++ bool "Xen hypervisor support"
++ default y
++ select XEN_XENCOMM
++ help
++ Enable Xen hypervisor support. Resulting kernel runs
++ both as a guest OS on Xen and natively on hardware.
+
-+#
-+# gate page paravirtualization for xen
-+#
-+obj-$(CONFIG_XEN) += xengate-data.o
++config XEN_IA64_EXPOSE_P2M
++ bool "Xen/IA64 exposure p2m table"
++ depends on XEN
++ default y
++ help
++ expose p2m from xen
+
-+ifeq ($(CONFIG_XEN), y)
-+# The gate DSO image is built using a special linker script.
-+targets += xengate.so xengate-syms.o
-+endif
++config XEN_IA64_EXPOSE_P2M_USE_DTR
++ bool "Xen/IA64 map p2m table with dtr"
++ depends on XEN_IA64_EXPOSE_P2M
++ default y
++ help
++ use dtr to map the exposed p2m table
+
-+extra-$(CONFIG_XEN) += xengate.so xengate.lds xengate.o
+ config SCHED_NO_NO_OMIT_FRAME_POINTER
+ bool
+ default y
+@@ -133,6 +155,10 @@ config IA64_SGI_SN2
+ config IA64_HP_SIM
+ bool "Ski-simulator"
+
++config IA64_XEN
++ bool "Xen guest"
++ depends on XEN
+
-+AFLAGS_xengate.o += -D__XEN_IA64_VDSO_PARAVIRT
-+$(obj)/xengate.o: $(src)/gate.S FORCE
-+ $(call if_changed_dep,as_o_S)
+ endchoice
+
+ choice
+@@ -431,6 +457,29 @@ config SGI_SN
+
+ source "drivers/sn/Kconfig"
+
++config KEXEC
++ bool "kexec system call (EXPERIMENTAL)"
++ depends on EXPERIMENTAL && !IA64_HP_SIM && (!SMP || HOTPLUG_CPU) && !XEN_UNPRIVILEGED_GUEST
++ 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
++ but it is indepedent of the system firmware. And like a reboot
++ you can start any kernel with it, not just Linux.
+
-+CPPFLAGS_xengate.lds := -P -C -U$(ARCH) -D__XEN_IA64_VDSO_PARAVIRT
-+$(obj)/xengate.lds: $(src)/gate.lds.S
-+ $(call if_changed_dep,cpp_lds_S)
++ The name comes from the similiarity to the exec system call.
+
-+GATECFLAGS_xengate.so = -shared -s -Wl,-soname=linux-gate.so.1 \
-+ $(call ld-option, -Wl$(comma)--hash-style=sysv)
-+$(obj)/xengate.so: $(obj)/xengate.lds $(obj)/xengate.o FORCE
-+ $(call if_changed,gate)
++ It is an ongoing process to be certain the hardware in a machine
++ is properly shutdown, so do not be surprised if this code does not
++ initially work for you. It may help to enable device hotplugging
++ support. As of this writing the exact hardware interface is
++ strongly in flux, so no good recommendation can be made.
+
-+ifeq ($(CONFIG_XEN), y)
-+$(obj)/built-in.o: $(obj)/xengate-syms.o
-+$(obj)/built-in.o: ld_flags += -R $(obj)/xengate-syms.o
-+$(obj)/mca_recovery.o: $(obj)/gate-syms.o $(obj)/xengate-syms.o
-+endif
++config CRASH_DUMP
++ bool "kernel crash dumps (EXPERIMENTAL)"
++ depends on EXPERIMENTAL && IA64_MCA_RECOVERY && !IA64_HP_SIM && (!SMP || HOTPLUG_CPU)
++ help
++ Generate crash dump after being started by kexec.
+
-+GATECFLAGS_xengate-syms.o = -r
-+$(obj)/xengate-syms.o: $(obj)/xengate.lds $(obj)/xengate.o FORCE
-+ $(call if_changed,gate)
-+$(obj)/xengate-data.o: $(obj)/xengate.so
+ source "drivers/firmware/Kconfig"
+
+ source "fs/Kconfig.binfmt"
+@@ -465,6 +514,21 @@ config PCI_DOMAINS
+ bool
+ default PCI
+
++config XEN_PCIDEV_FRONTEND
++ bool "Xen PCI Frontend"
++ depends on PCI && XEN
++ default y
++ help
++ The PCI device frontend driver allows the kernel to import arbitrary
++ PCI devices from a PCI backend to support PCI driver domains.
++
++config XEN_PCIDEV_FE_DEBUG
++ bool "Xen PCI Frontend Debugging"
++ depends on XEN_PCIDEV_FRONTEND
++ default n
++ help
++ Enables some debug statements within the PCI Frontend.
++
+ source "drivers/pci/pcie/Kconfig"
+
+ source "drivers/pci/Kconfig"
+@@ -528,3 +592,16 @@ source "arch/ia64/Kconfig.debug"
+ source "security/Kconfig"
+
+ source "crypto/Kconfig"
+
+#
-+# .tmp_gate.o to calculate padding size for __kernel_syscall_via_epc
++# override default values of drivers/xen/Kconfig
+#
-+extra-$(CONFIG_XEN) += gate-skip.s .tmp_gate.o
++if XEN
++config XEN_SMPBOOT
++ default n
+
-+ifeq ($(CONFIG_XEN), y)
-+AFLAGS_gate.o += -D__KERNEL_SYSCALL_VIA_EPC_PADDING
-+$(obj)/gate.o: $(obj)/gate-skip.s FORCE
++config XEN_DEVMEM
++ default n
+endif
+
-+$(obj)/.tmp_gate.o: $(src)/gate.S FORCE
-+ $(call if_changed_dep,as_o_S)
-+
-+quiet_cmd_gate_size = GATE_SIZE $@
-+ cmd_gate_size = $(NM) --extern-only --print-size $(obj)/xengate.o | \
-+ $(AWK) '/__kernel_syscall_via_epc/{printf "\t.skip 0x"$$2" - "}' > $@; \
-+ $(NM) --extern-only --print-size $(obj)/.tmp_gate.o | \
-+ $(AWK) '/__kernel_syscall_via_epc/{printf "0x"$$2"\n"}' >> $@
-+
-+$(obj)/gate-skip.s: $(obj)/xengate.o $(obj)/.tmp_gate.o FORCE
-+ $(call if_changed,gate_size)
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/acpi.c linux-2.6.18-xen-3.2.0/arch/ia64/kernel/acpi.c
---- linux-2.6.18.8/arch/ia64/kernel/acpi.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/acpi.c 2008-02-15 16:21:49.000000000 -0800
++source "drivers/xen/Kconfig"
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/acpi.c linux-2.6.18-xen-3.3.0/arch/ia64/kernel/acpi.c
+--- linux-2.6.18.8/arch/ia64/kernel/acpi.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/acpi.c 2008-08-21 11:36:07.000000000 +0200
@@ -109,6 +109,10 @@ const char *acpi_get_sysname(void)
return "hpzx1";
} else if (!strcmp(hdr->oem_id, "SGI")) {
@@ -22798,9 +23093,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/acpi.c linux-2.6.18-xen-3.2.0/arch/ia
# else
# error Unknown platform. Fix acpi.c.
# endif
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/asm-offsets.c linux-2.6.18-xen-3.2.0/arch/ia64/kernel/asm-offsets.c
---- linux-2.6.18.8/arch/ia64/kernel/asm-offsets.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/asm-offsets.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/asm-offsets.c linux-2.6.18-xen-3.3.0/arch/ia64/kernel/asm-offsets.c
+--- linux-2.6.18.8/arch/ia64/kernel/asm-offsets.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/asm-offsets.c 2008-08-21 11:36:07.000000000 +0200
@@ -268,4 +268,29 @@ void foo(void)
DEFINE(IA64_TIME_SOURCE_MMIO64, TIME_SOURCE_MMIO64);
DEFINE(IA64_TIME_SOURCE_MMIO32, TIME_SOURCE_MMIO32);
@@ -22831,9 +23126,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/asm-offsets.c linux-2.6.18-xen-3.2.0/
+ DEFINE_MAPPED_REG_OFS(XSI_B1NATS_OFS, vnat);
+#endif /* CONFIG_XEN */
}
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/crash.c linux-2.6.18-xen-3.2.0/arch/ia64/kernel/crash.c
---- linux-2.6.18.8/arch/ia64/kernel/crash.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/crash.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/crash.c linux-2.6.18-xen-3.3.0/arch/ia64/kernel/crash.c
+--- linux-2.6.18.8/arch/ia64/kernel/crash.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/crash.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,222 @@
+/*
+ * arch/ia64/kernel/crash.c
@@ -23057,9 +23352,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/crash.c linux-2.6.18-xen-3.2.0/arch/i
+
+__initcall(machine_crash_setup);
+
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/crash_dump.c linux-2.6.18-xen-3.2.0/arch/ia64/kernel/crash_dump.c
---- linux-2.6.18.8/arch/ia64/kernel/crash_dump.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/crash_dump.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/crash_dump.c linux-2.6.18-xen-3.3.0/arch/ia64/kernel/crash_dump.c
+--- linux-2.6.18.8/arch/ia64/kernel/crash_dump.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/crash_dump.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,48 @@
+/*
+ * kernel/crash_dump.c - Memory preserving reboot related code.
@@ -23109,10 +23404,16 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/crash_dump.c linux-2.6.18-xen-3.2.0/a
+ return csize;
+}
+
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/efi.c linux-2.6.18-xen-3.2.0/arch/ia64/kernel/efi.c
---- linux-2.6.18.8/arch/ia64/kernel/efi.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/efi.c 2008-02-15 16:21:49.000000000 -0800
-@@ -26,6 +26,7 @@
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/efi.c linux-2.6.18-xen-3.3.0/arch/ia64/kernel/efi.c
+--- linux-2.6.18.8/arch/ia64/kernel/efi.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/efi.c 2008-08-21 11:36:07.000000000 +0200
+@@ -21,11 +21,13 @@
+ * Skip non-WB memory and ignore empty memory ranges.
+ */
+ #include <linux/module.h>
++#include <linux/bootmem.h>
+ #include <linux/kernel.h>
+ #include <linux/init.h>
#include <linux/types.h>
#include <linux/time.h>
#include <linux/efi.h>
@@ -23120,7 +23421,7 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/efi.c linux-2.6.18-xen-3.2.0/arch/ia6
#include <asm/io.h>
#include <asm/kregs.h>
-@@ -34,6 +35,11 @@
+@@ -34,6 +36,11 @@
#include <asm/processor.h>
#include <asm/mca.h>
@@ -23132,7 +23433,7 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/efi.c linux-2.6.18-xen-3.2.0/arch/ia6
#define EFI_DEBUG 0
extern efi_status_t efi_call_phys (void *, ...);
-@@ -41,7 +47,7 @@ extern efi_status_t efi_call_phys (void
+@@ -41,7 +48,7 @@ extern efi_status_t efi_call_phys (void
struct efi efi;
EXPORT_SYMBOL(efi);
static efi_runtime_services_t *runtime;
@@ -23141,7 +23442,7 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/efi.c linux-2.6.18-xen-3.2.0/arch/ia6
#define efi_call_virt(f, args...) (*(f))(args)
-@@ -421,6 +427,8 @@ efi_init (void)
+@@ -421,6 +428,8 @@ efi_init (void)
mem_limit = memparse(cp + 4, &cp);
} else if (memcmp(cp, "max_addr=", 9) == 0) {
max_addr = GRANULEROUNDDOWN(memparse(cp + 9, &cp));
@@ -23150,7 +23451,7 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/efi.c linux-2.6.18-xen-3.2.0/arch/ia6
} else {
while (*cp != ' ' && *cp)
++cp;
-@@ -428,6 +436,8 @@ efi_init (void)
+@@ -428,6 +437,8 @@ efi_init (void)
++cp;
}
}
@@ -23159,7 +23460,7 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/efi.c linux-2.6.18-xen-3.2.0/arch/ia6
if (max_addr != ~0UL)
printk(KERN_INFO "Ignoring memory above %luMB\n", max_addr >> 20);
-@@ -894,7 +904,8 @@ find_memmap_space (void)
+@@ -894,7 +905,8 @@ find_memmap_space (void)
as = max(contig_low, md->phys_addr);
ae = min(contig_high, efi_md_end(md));
@@ -23169,7 +23470,19 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/efi.c linux-2.6.18-xen-3.2.0/arch/ia6
ae = min(ae, max_addr);
if (ae <= as)
continue;
-@@ -1004,7 +1015,8 @@ efi_memmap_init(unsigned long *s, unsign
+@@ -965,6 +977,11 @@ efi_memmap_init(unsigned long *s, unsign
+ if (!is_available_memory(md))
+ continue;
+
++#ifdef CONFIG_CRASH_DUMP
++ /* saved_max_pfn should ignore max_addr= command line arg */
++ if (saved_max_pfn < (efi_md_end(md) >> PAGE_SHIFT))
++ saved_max_pfn = (efi_md_end(md) >> PAGE_SHIFT);
++#endif
+ /*
+ * Round ends inward to granule boundaries
+ * Give trimmings to uncached allocator
+@@ -1004,7 +1021,8 @@ efi_memmap_init(unsigned long *s, unsign
} else
ae = efi_md_end(md);
@@ -23179,7 +23492,7 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/efi.c linux-2.6.18-xen-3.2.0/arch/ia6
ae = min(ae, max_addr);
if (ae <= as)
continue;
-@@ -1033,21 +1045,22 @@ efi_memmap_init(unsigned long *s, unsign
+@@ -1033,21 +1051,22 @@ efi_memmap_init(unsigned long *s, unsign
*e = (u64)++k;
}
@@ -23211,7 +23524,7 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/efi.c linux-2.6.18-xen-3.2.0/arch/ia6
res = NULL;
for (p = efi_map_start; p < efi_map_end; p += efi_desc_size) {
-@@ -1106,7 +1119,7 @@ efi_initialize_iomem_resources(struct re
+@@ -1106,7 +1125,7 @@ efi_initialize_iomem_resources(struct re
res->end = md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT) - 1;
res->flags = flags;
@@ -23220,7 +23533,7 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/efi.c linux-2.6.18-xen-3.2.0/arch/ia6
kfree(res);
else {
/*
-@@ -1114,8 +1127,135 @@ efi_initialize_iomem_resources(struct re
+@@ -1114,8 +1133,135 @@ efi_initialize_iomem_resources(struct re
* kernel data so we try it repeatedly and
* let the resource manager test it.
*/
@@ -23248,7 +23561,7 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/efi.c linux-2.6.18-xen-3.2.0/arch/ia6
}
+
+#ifdef CONFIG_PROC_IOMEM_MACHINE
-+static int
++static void
+efi_initialize_iomem_machine_resources(void)
+{
+ unsigned long size;
@@ -23262,7 +23575,7 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/efi.c linux-2.6.18-xen-3.2.0/arch/ia6
+ for (size = 1024; 1; size += 1024) {
+ memmap_info = kmalloc(size, GFP_KERNEL);
+ if (memmap_info == NULL)
-+ return -ENOMEM;
++ return; /* -ENOMEM, but no way to return error */
+
+ memmap.nr_entries = size;
+ set_xen_guest_handle(memmap.buffer, memmap_info);
@@ -23358,9 +23671,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/efi.c linux-2.6.18-xen-3.2.0/arch/ia6
+ return ~0UL;
+}
+#endif
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/entry.S linux-2.6.18-xen-3.2.0/arch/ia64/kernel/entry.S
---- linux-2.6.18.8/arch/ia64/kernel/entry.S 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/entry.S 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/entry.S linux-2.6.18-xen-3.3.0/arch/ia64/kernel/entry.S
+--- linux-2.6.18.8/arch/ia64/kernel/entry.S 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/entry.S 2008-08-21 11:36:07.000000000 +0200
@@ -180,7 +180,7 @@ END(sys_clone)
* called. The code starting at .map relies on this. The rest of the code
* doesn't care about the interrupt masking status.
@@ -23507,9 +23820,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/entry.S linux-2.6.18-xen-3.2.0/arch/i
data8 sys_ni_syscall // reserved for vserver
data8 sys_waitid // 1270
data8 sys_add_key
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/fsys.S linux-2.6.18-xen-3.2.0/arch/ia64/kernel/fsys.S
---- linux-2.6.18.8/arch/ia64/kernel/fsys.S 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/fsys.S 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/fsys.S linux-2.6.18-xen-3.3.0/arch/ia64/kernel/fsys.S
+--- linux-2.6.18.8/arch/ia64/kernel/fsys.S 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/fsys.S 2008-08-21 11:36:07.000000000 +0200
@@ -516,11 +516,34 @@ ENTRY(fsys_fallback_syscall)
adds r17=-1024,r15
movl r14=sys_call_table
@@ -23571,9 +23884,37 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/fsys.S linux-2.6.18-xen-3.2.0/arch/ia
cmp.eq p8,p0=r3,r0 // A
(p10) br.cond.spnt.many ia64_ret_from_syscall // B return if bad call-frame or r15 is a NaT
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/gate.S linux-2.6.18-xen-3.2.0/arch/ia64/kernel/gate.S
---- linux-2.6.18.8/arch/ia64/kernel/gate.S 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/gate.S 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/gate.lds.S linux-2.6.18-xen-3.3.0/arch/ia64/kernel/gate.lds.S
+--- linux-2.6.18.8/arch/ia64/kernel/gate.lds.S 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/gate.lds.S 2008-08-21 11:36:07.000000000 +0200
+@@ -28,6 +28,24 @@ SECTIONS
+ . = GATE_ADDR + 0x500;
+
+ .data.patch : {
++#ifdef __XEN_IA64_VDSO_PARAVIRT
++#define __start_gate_mckinley_e9_patchlist \
++ __start_gate_mckinley_e9_patchlist_xen
++#define __end_gate_mckinley_e9_patchlist \
++ __end_gate_mckinley_e9_patchlist_xen
++#define __start_gate_vtop_patchlist \
++ __start_gate_vtop_patchlist_xen
++#define __end_gate_vtop_patchlist \
++ __end_gate_vtop_patchlist_xen
++#define __start_gate_fsyscall_patchlist \
++ __start_gate_fsyscall_patchlist_xen
++#define __end_gate_fsyscall_patchlist \
++ __end_gate_fsyscall_patchlist_xen
++#define __start_gate_brl_fsys_bubble_down_patchlist \
++ __start_gate_brl_fsys_bubble_down_patchlist_xen
++#define __end_gate_brl_fsys_bubble_down_patchlist \
++ __end_gate_brl_fsys_bubble_down_patchlist_xen
++#endif
+ __start_gate_mckinley_e9_patchlist = .;
+ *(.data.patch.mckinley_e9)
+ __end_gate_mckinley_e9_patchlist = .;
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/gate.S linux-2.6.18-xen-3.3.0/arch/ia64/kernel/gate.S
+--- linux-2.6.18.8/arch/ia64/kernel/gate.S 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/gate.S 2008-08-21 11:36:07.000000000 +0200
@@ -32,102 +32,6 @@
[1:](pr)brl.cond.sptk 0; \
.xdata4 ".data.patch.brl_fsys_bubble_down", 1b-.
@@ -23832,37 +24173,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/gate.S linux-2.6.18-xen-3.2.0/arch/ia
+.include "arch/ia64/kernel/gate-skip.s"
+#endif
+END(__kernel_syscall_via_epc)
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/gate.lds.S linux-2.6.18-xen-3.2.0/arch/ia64/kernel/gate.lds.S
---- linux-2.6.18.8/arch/ia64/kernel/gate.lds.S 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/gate.lds.S 2008-02-15 16:21:49.000000000 -0800
-@@ -28,6 +28,24 @@ SECTIONS
- . = GATE_ADDR + 0x500;
-
- .data.patch : {
-+#ifdef __XEN_IA64_VDSO_PARAVIRT
-+#define __start_gate_mckinley_e9_patchlist \
-+ __start_gate_mckinley_e9_patchlist_xen
-+#define __end_gate_mckinley_e9_patchlist \
-+ __end_gate_mckinley_e9_patchlist_xen
-+#define __start_gate_vtop_patchlist \
-+ __start_gate_vtop_patchlist_xen
-+#define __end_gate_vtop_patchlist \
-+ __end_gate_vtop_patchlist_xen
-+#define __start_gate_fsyscall_patchlist \
-+ __start_gate_fsyscall_patchlist_xen
-+#define __end_gate_fsyscall_patchlist \
-+ __end_gate_fsyscall_patchlist_xen
-+#define __start_gate_brl_fsys_bubble_down_patchlist \
-+ __start_gate_brl_fsys_bubble_down_patchlist_xen
-+#define __end_gate_brl_fsys_bubble_down_patchlist \
-+ __end_gate_brl_fsys_bubble_down_patchlist_xen
-+#endif
- __start_gate_mckinley_e9_patchlist = .;
- *(.data.patch.mckinley_e9)
- __end_gate_mckinley_e9_patchlist = .;
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/head.S linux-2.6.18-xen-3.2.0/arch/ia64/kernel/head.S
---- linux-2.6.18.8/arch/ia64/kernel/head.S 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/head.S 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/head.S linux-2.6.18-xen-3.3.0/arch/ia64/kernel/head.S
+--- linux-2.6.18.8/arch/ia64/kernel/head.S 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/head.S 2008-08-21 11:36:07.000000000 +0200
@@ -367,6 +367,12 @@ start_ap:
;;
(isBP) st8 [r2]=r28 // save the address of the boot param area passed by the bootloader
@@ -23876,9 +24189,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/head.S linux-2.6.18-xen-3.2.0/arch/ia
#ifdef CONFIG_SMP
(isAP) br.call.sptk.many rp=start_secondary
.ret0:
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/iosapic.c linux-2.6.18-xen-3.2.0/arch/ia64/kernel/iosapic.c
---- linux-2.6.18.8/arch/ia64/kernel/iosapic.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/iosapic.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/iosapic.c linux-2.6.18-xen-3.3.0/arch/ia64/kernel/iosapic.c
+--- linux-2.6.18.8/arch/ia64/kernel/iosapic.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/iosapic.c 2008-08-21 11:36:07.000000000 +0200
@@ -159,6 +159,75 @@ static unsigned char pcat_compat __devin
static int iosapic_kmalloc_ok;
static LIST_HEAD(free_rte_list);
@@ -24003,9 +24316,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/iosapic.c linux-2.6.18-xen-3.2.0/arch
if (pcat_compat) {
/*
* Disable the compatibility mode interrupts (8259 style),
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/irq_ia64.c linux-2.6.18-xen-3.2.0/arch/ia64/kernel/irq_ia64.c
---- linux-2.6.18.8/arch/ia64/kernel/irq_ia64.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/irq_ia64.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/irq_ia64.c linux-2.6.18-xen-3.3.0/arch/ia64/kernel/irq_ia64.c
+--- linux-2.6.18.8/arch/ia64/kernel/irq_ia64.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/irq_ia64.c 2008-08-21 11:36:07.000000000 +0200
@@ -30,6 +30,9 @@
#include <linux/smp_lock.h>
#include <linux/threads.h>
@@ -24044,7 +24357,7 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/irq_ia64.c linux-2.6.18-xen-3.2.0/arc
pos = vector - IA64_FIRST_DEVICE_VECTOR;
if (!test_and_clear_bit(pos, ia64_vector_mask))
printk(KERN_WARNING "%s: double free!\n", __FUNCTION__);
-@@ -240,12 +257,340 @@ static struct irqaction ipi_irqaction =
+@@ -240,12 +257,342 @@ static struct irqaction ipi_irqaction =
};
#endif
@@ -24325,12 +24638,11 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/irq_ia64.c linux-2.6.18-xen-3.2.0/arc
+xen_platform_send_ipi(int cpu, int vector, int delivery_mode, int redirect)
+{
+ int irq = -1;
++ extern void xen_send_ipi(int cpu, int vec);
+
+#ifdef CONFIG_SMP
+ /* TODO: we need to call vcpu_up here */
+ if (unlikely(vector == ap_wakeup_vector)) {
-+ extern void xen_send_ipi (int cpu, int vec);
-+
+ /* XXX
+ * This should be in __cpu_up(cpu) in ia64 smpboot.c
+ * like x86. But don't want to modify it,
@@ -24357,6 +24669,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/irq_ia64.c linux-2.6.18-xen-3.2.0/arc
+ case IA64_CPEP_VECTOR:
+ irq = per_cpu(ipi_to_irq, cpu)[CPEP_VECTOR];
+ break;
++ case IA64_TIMER_VECTOR:
++ xen_send_ipi(cpu, vector);
++ return;
+ default:
+ printk(KERN_WARNING "Unsupported IPI type 0x%x\n",
+ vector);
@@ -24385,7 +24700,7 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/irq_ia64.c linux-2.6.18-xen-3.2.0/arc
for (irq = 0; irq < NR_IRQS; ++irq)
if (irq_to_vector(irq) == vec) {
desc = irq_desc + irq;
-@@ -267,6 +612,10 @@ init_IRQ (void)
+@@ -267,6 +614,10 @@ init_IRQ (void)
pfm_init_percpu();
#endif
platform_irq_init();
@@ -24396,7 +24711,7 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/irq_ia64.c linux-2.6.18-xen-3.2.0/arc
}
void
-@@ -276,6 +625,13 @@ ia64_send_ipi (int cpu, int vector, int
+@@ -276,6 +627,13 @@ ia64_send_ipi (int cpu, int vector, int
unsigned long ipi_data;
unsigned long phys_cpu_id;
@@ -24410,10 +24725,10 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/irq_ia64.c linux-2.6.18-xen-3.2.0/arc
#ifdef CONFIG_SMP
phys_cpu_id = cpu_physical_id(cpu);
#else
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/machine_kexec.c linux-2.6.18-xen-3.2.0/arch/ia64/kernel/machine_kexec.c
---- linux-2.6.18.8/arch/ia64/kernel/machine_kexec.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/machine_kexec.c 2008-02-15 16:21:49.000000000 -0800
-@@ -0,0 +1,145 @@
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/machine_kexec.c linux-2.6.18-xen-3.3.0/arch/ia64/kernel/machine_kexec.c
+--- linux-2.6.18.8/arch/ia64/kernel/machine_kexec.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/machine_kexec.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,204 @@
+/*
+ * arch/ia64/kernel/machine_kexec.c
+ *
@@ -24558,10 +24873,143 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/machine_kexec.c linux-2.6.18-xen-3.2.
+ xki->reboot_code_buffer =
+ kexec_page_to_pfn(image->control_code_page) << PAGE_SHIFT;
+}
++
++static struct resource xen_hypervisor_heap_res;
++
++int __init machine_kexec_setup_resources(struct resource *hypervisor,
++ struct resource *phys_cpus,
++ int nr_phys_cpus)
++{
++ xen_kexec_range_t range;
++ int k;
++
++ /* fill in xen_hypervisor_heap_res with hypervisor heap
++ * machine address range
++ */
++
++ memset(&range, 0, sizeof(range));
++ range.range = KEXEC_RANGE_MA_XENHEAP;
++
++ if (HYPERVISOR_kexec_op(KEXEC_CMD_kexec_get_range, &range))
++ return -1;
++
++ xen_hypervisor_heap_res.name = "Hypervisor heap";
++ xen_hypervisor_heap_res.start = range.start;
++ xen_hypervisor_heap_res.end = range.start + range.size - 1;
++ xen_hypervisor_heap_res.flags = IORESOURCE_BUSY | IORESOURCE_MEM;
++
++ /* The per-cpu crash note resources belong inside the
++ * hypervisor heap resource */
++ for (k = 0; k < nr_phys_cpus; k++)
++ request_resource(&xen_hypervisor_heap_res, phys_cpus + k);
++
++ /* fill in efi_memmap_res with EFI memmap machine address range */
++
++ memset(&range, 0, sizeof(range));
++ range.range = KEXEC_RANGE_MA_EFI_MEMMAP;
++
++ if (HYPERVISOR_kexec_op(KEXEC_CMD_kexec_get_range, &range))
++ return -1;
++
++ efi_memmap_res.start = range.start;
++ efi_memmap_res.end = range.start + range.size - 1;
++
++ /* fill in boot_param_res with boot parameter machine address range */
++
++ memset(&range, 0, sizeof(range));
++ range.range = KEXEC_RANGE_MA_BOOT_PARAM;
++
++ if (HYPERVISOR_kexec_op(KEXEC_CMD_kexec_get_range, &range))
++ return -1;
++
++ boot_param_res.start = range.start;
++ boot_param_res.end = range.start + range.size - 1;
++
++ return 0;
++}
++
++void machine_kexec_register_resources(struct resource *res)
++{
++ request_resource(res, &xen_hypervisor_heap_res);
++}
+#endif /* CONFIG_XEN */
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/mca.c linux-2.6.18-xen-3.2.0/arch/ia64/kernel/mca.c
---- linux-2.6.18.8/arch/ia64/kernel/mca.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/mca.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/Makefile linux-2.6.18-xen-3.3.0/arch/ia64/kernel/Makefile
+--- linux-2.6.18.8/arch/ia64/kernel/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/Makefile 2008-08-21 11:36:07.000000000 +0200
+@@ -28,6 +28,8 @@ obj-$(CONFIG_IA64_CYCLONE) += cyclone.o
+ obj-$(CONFIG_CPU_FREQ) += cpufreq/
+ obj-$(CONFIG_IA64_MCA_RECOVERY) += mca_recovery.o
+ obj-$(CONFIG_KPROBES) += kprobes.o jprobes.o
++obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o crash.o
++obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
+ obj-$(CONFIG_IA64_UNCACHED_ALLOCATOR) += uncached.o
+ obj-$(CONFIG_AUDIT) += audit.o
+ mca_recovery-y += mca_drv.o mca_drv_asm.o
+@@ -61,3 +63,61 @@ $(obj)/gate-syms.o: $(obj)/gate.lds $(ob
+ # We must build gate.so before we can assemble it.
+ # Note: kbuild does not track this dependency due to usage of .incbin
+ $(obj)/gate-data.o: $(obj)/gate.so
++
++#
++# gate page paravirtualization for xen
++#
++obj-$(CONFIG_XEN) += xengate-data.o
++
++ifeq ($(CONFIG_XEN), y)
++# The gate DSO image is built using a special linker script.
++targets += xengate.so xengate-syms.o
++endif
++
++extra-$(CONFIG_XEN) += xengate.so xengate.lds xengate.o
++
++AFLAGS_xengate.o += -D__XEN_IA64_VDSO_PARAVIRT
++$(obj)/xengate.o: $(src)/gate.S FORCE
++ $(call if_changed_dep,as_o_S)
++
++CPPFLAGS_xengate.lds := -P -C -U$(ARCH) -D__XEN_IA64_VDSO_PARAVIRT
++$(obj)/xengate.lds: $(src)/gate.lds.S
++ $(call if_changed_dep,cpp_lds_S)
++
++GATECFLAGS_xengate.so = -shared -s -Wl,-soname=linux-gate.so.1 \
++ $(call ld-option, -Wl$(comma)--hash-style=sysv)
++$(obj)/xengate.so: $(obj)/xengate.lds $(obj)/xengate.o FORCE
++ $(call if_changed,gate)
++
++ifeq ($(CONFIG_XEN), y)
++$(obj)/built-in.o: $(obj)/xengate-syms.o
++$(obj)/built-in.o: ld_flags += -R $(obj)/xengate-syms.o
++$(obj)/mca_recovery.o: $(obj)/gate-syms.o $(obj)/xengate-syms.o
++endif
++
++GATECFLAGS_xengate-syms.o = -r
++$(obj)/xengate-syms.o: $(obj)/xengate.lds $(obj)/xengate.o FORCE
++ $(call if_changed,gate)
++$(obj)/xengate-data.o: $(obj)/xengate.so
++
++#
++# .tmp_gate.o to calculate padding size for __kernel_syscall_via_epc
++#
++extra-$(CONFIG_XEN) += gate-skip.s .tmp_gate.o
++
++ifeq ($(CONFIG_XEN), y)
++AFLAGS_gate.o += -D__KERNEL_SYSCALL_VIA_EPC_PADDING
++$(obj)/gate.o: $(obj)/gate-skip.s FORCE
++endif
++
++$(obj)/.tmp_gate.o: $(src)/gate.S FORCE
++ $(call if_changed_dep,as_o_S)
++
++quiet_cmd_gate_size = GATE_SIZE $@
++ cmd_gate_size = $(NM) --extern-only --print-size $(obj)/xengate.o | \
++ $(AWK) '/__kernel_syscall_via_epc/{printf "\t.skip 0x"$$2" - "}' > $@; \
++ $(NM) --extern-only --print-size $(obj)/.tmp_gate.o | \
++ $(AWK) '/__kernel_syscall_via_epc/{printf "0x"$$2"\n"}' >> $@
++
++$(obj)/gate-skip.s: $(obj)/xengate.o $(obj)/.tmp_gate.o FORCE
++ $(call if_changed,gate_size)
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/mca.c linux-2.6.18-xen-3.3.0/arch/ia64/kernel/mca.c
+--- linux-2.6.18.8/arch/ia64/kernel/mca.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/mca.c 2008-08-21 11:36:07.000000000 +0200
@@ -79,6 +79,7 @@
#include <asm/system.h>
#include <asm/sal.h>
@@ -24618,9 +25066,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/mca.c linux-2.6.18-xen-3.2.0/arch/ia6
if (notify_die(DIE_MCA_MONARCH_LEAVE, "MCA", regs, (long)&nd, 0, recover)
== NOTIFY_STOP)
ia64_mca_spin(__FUNCTION__);
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/pal.S linux-2.6.18-xen-3.2.0/arch/ia64/kernel/pal.S
---- linux-2.6.18.8/arch/ia64/kernel/pal.S 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/pal.S 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/pal.S linux-2.6.18-xen-3.3.0/arch/ia64/kernel/pal.S
+--- linux-2.6.18.8/arch/ia64/kernel/pal.S 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/pal.S 2008-08-21 11:36:07.000000000 +0200
@@ -16,6 +16,7 @@
#include <asm/processor.h>
@@ -24647,9 +25095,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/pal.S linux-2.6.18-xen-3.2.0/arch/ia6
/*
* Make a PAL call using the stacked registers calling convention.
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/patch.c linux-2.6.18-xen-3.2.0/arch/ia64/kernel/patch.c
---- linux-2.6.18.8/arch/ia64/kernel/patch.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/patch.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/patch.c linux-2.6.18-xen-3.3.0/arch/ia64/kernel/patch.c
+--- linux-2.6.18.8/arch/ia64/kernel/patch.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/patch.c 2008-08-21 11:36:07.000000000 +0200
@@ -184,9 +184,37 @@ patch_brl_fsys_bubble_down (unsigned lon
ia64_srlz_i();
}
@@ -24688,9 +25136,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/patch.c linux-2.6.18-xen-3.2.0/arch/i
# define START(name) ((unsigned long) __start_gate_##name##_patchlist)
# define END(name) ((unsigned long)__end_gate_##name##_patchlist)
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/perfmon.c linux-2.6.18-xen-3.2.0/arch/ia64/kernel/perfmon.c
---- linux-2.6.18.8/arch/ia64/kernel/perfmon.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/perfmon.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/perfmon.c linux-2.6.18-xen-3.3.0/arch/ia64/kernel/perfmon.c
+--- linux-2.6.18.8/arch/ia64/kernel/perfmon.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/perfmon.c 2008-08-21 11:36:07.000000000 +0200
@@ -52,6 +52,31 @@
#include <asm/delay.h>
@@ -24888,10 +25336,10 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/perfmon.c linux-2.6.18-xen-3.2.0/arch
DPRINT(("ctx_state=%d task [%d]\n", ctx->ctx_state, task ? task->pid : -1));
prev_state = ctx->ctx_state;
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/relocate_kernel.S linux-2.6.18-xen-3.2.0/arch/ia64/kernel/relocate_kernel.S
---- linux-2.6.18.8/arch/ia64/kernel/relocate_kernel.S 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/relocate_kernel.S 2008-02-15 16:21:49.000000000 -0800
-@@ -0,0 +1,380 @@
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/relocate_kernel.S linux-2.6.18-xen-3.3.0/arch/ia64/kernel/relocate_kernel.S
+--- linux-2.6.18.8/arch/ia64/kernel/relocate_kernel.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/relocate_kernel.S 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,338 @@
+/*
+ * arch/ia64/kernel/relocate_kernel.S
+ *
@@ -24914,11 +25362,7 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/relocate_kernel.S linux-2.6.18-xen-3.
+ */
+GLOBAL_ENTRY(relocate_new_kernel)
+ .prologue
-+#ifdef CONFIG_XEN
-+ alloc r31=ar.pfs,8,0,0,0
-+#else
+ alloc r31=ar.pfs,4,0,0,0
-+#endif
+ .body
+.reloc_entry:
+{
@@ -24931,11 +25375,7 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/relocate_kernel.S linux-2.6.18-xen-3.
+ srlz.i
+}
+ ;;
-+#ifdef CONFIG_XEN
-+ dep r2=0,r2,60,4 //to physical address
-+#else
+ dep r2=0,r2,61,3 //to physical address
-+#endif
+ ;;
+ //first switch to physical mode
+ add r3=1f-.reloc_entry, r2
@@ -24960,18 +25400,13 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/relocate_kernel.S linux-2.6.18-xen-3.
+ //physical mode code begin
+ mov b6=in1
+#ifdef CONFIG_XEN
-+ dep r28=0,in2,60,4 //to physical address
++ mov r28=in2 //already a physical address
+#else
+ dep r28=0,in2,61,3 //to physical address
-+#endif
+
+ // purge all TC entries
+#define O(member) IA64_CPUINFO_##member##_OFFSET
-+#ifdef CONFIG_XEN
-+ mov r2=in4 // load phys addr of cpu_info into r2
-+#else
+ GET_THIS_PADDR(r2, cpu_info) // load phys addr of cpu_info into r2
-+#endif
+ ;;
+ addl r17=O(PTCE_STRIDE),r2
+ addl r2=O(PTCE_BASE),r2
@@ -25005,11 +25440,7 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/relocate_kernel.S linux-2.6.18-xen-3.
+ srlz.i
+ ;;
+ //purge TR entry for kernel text and data
-+#ifdef CONFIG_XEN
-+ mov r16=in5
-+#else
+ movl r16=KERNEL_START
-+#endif
+ mov r18=KERNEL_TR_PAGE_SHIFT<<2
+ ;;
+ ptr.i r16, r18
@@ -25040,11 +25471,7 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/relocate_kernel.S linux-2.6.18-xen-3.
+ mov r16=IA64_KR(CURRENT_STACK)
+ ;;
+ shl r16=r16,IA64_GRANULE_SHIFT
-+#ifdef CONFIG_XEN
-+ mov r19=in6
-+#else
+ movl r19=PAGE_OFFSET
-+#endif
+ ;;
+ add r16=r19,r16
+ mov r18=IA64_GRANULE_SHIFT<<2
@@ -25053,20 +25480,7 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/relocate_kernel.S linux-2.6.18-xen-3.
+ ;;
+ srlz.i
+ ;;
-+
-+#ifdef XEN
-+ /* XXX: Is this neccessary ??? */
-+ // purge TR entry for VHPT
-+ mov r16=in7
-+ ;;
-+ dep r16=0,r16,0,IA64_GRANULE_SHIFT
-+ mov r18=IA64_GRANULE_SHIFT<<2
-+ ;;
-+ ptr.d r16,r18
-+ ;;
-+ srlz.i
-+ ;;
-+#endif
++#endif /* ! CONFIG_XEN */
+
+ //copy segments
+ movl r16=PAGE_MASK
@@ -25115,18 +25529,10 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/relocate_kernel.S linux-2.6.18-xen-3.
+
+.align 32
+memory_stack:
-+#ifdef CONFIG_XEN
-+ .fill 4096, 1, 0
-+#else
+ .fill 8192, 1, 0
-+#endif
+memory_stack_end:
+register_stack:
-+#ifdef CONFIG_XEN
-+ .fill 4096, 1, 0
-+#else
+ .fill 8192, 1, 0
-+#endif
+register_stack_end:
+relocate_new_kernel_end:
+END(relocate_new_kernel)
@@ -25272,9 +25678,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/relocate_kernel.S linux-2.6.18-xen-3.
+END(ia64_dump_cpu_regs)
+
+
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/salinfo.c linux-2.6.18-xen-3.2.0/arch/ia64/kernel/salinfo.c
---- linux-2.6.18.8/arch/ia64/kernel/salinfo.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/salinfo.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/salinfo.c linux-2.6.18-xen-3.3.0/arch/ia64/kernel/salinfo.c
+--- linux-2.6.18.8/arch/ia64/kernel/salinfo.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/salinfo.c 2008-08-21 11:36:07.000000000 +0200
@@ -375,6 +375,25 @@ salinfo_log_open(struct inode *inode, st
data->open = 0;
return -ENOMEM;
@@ -25332,9 +25738,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/salinfo.c linux-2.6.18-xen-3.2.0/arch
vfree(data->log_buffer);
vfree(data->oemdata);
data->log_buffer = NULL;
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/setup.c linux-2.6.18-xen-3.2.0/arch/ia64/kernel/setup.c
---- linux-2.6.18.8/arch/ia64/kernel/setup.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/setup.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/setup.c linux-2.6.18-xen-3.3.0/arch/ia64/kernel/setup.c
+--- linux-2.6.18.8/arch/ia64/kernel/setup.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/setup.c 2008-08-21 11:36:07.000000000 +0200
@@ -43,6 +43,8 @@
#include <linux/initrd.h>
#include <linux/pm.h>
@@ -25450,15 +25856,15 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/setup.c linux-2.6.18-xen-3.2.0/arch/i
+ }
+ }
+ }
-+#ifdef CONFIG_XEN
-+ }
-+#endif
+ efi_memmap_res.start = ia64_boot_param->efi_memmap;
+ efi_memmap_res.end = efi_memmap_res.start +
+ ia64_boot_param->efi_memmap_size;
+ boot_param_res.start = kexec_virt_to_phys(ia64_boot_param);
+ boot_param_res.end = boot_param_res.start +
+ sizeof(*ia64_boot_param);
++#ifdef CONFIG_XEN
++ }
++#endif
+ }
+#endif
/* end of memory marker */
@@ -25623,9 +26029,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/setup.c linux-2.6.18-xen-3.2.0/arch/i
pm_idle = default_idle;
}
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/smp.c linux-2.6.18-xen-3.2.0/arch/ia64/kernel/smp.c
---- linux-2.6.18.8/arch/ia64/kernel/smp.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/smp.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/smp.c linux-2.6.18-xen-3.3.0/arch/ia64/kernel/smp.c
+--- linux-2.6.18.8/arch/ia64/kernel/smp.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/smp.c 2008-08-21 11:36:07.000000000 +0200
@@ -30,6 +30,7 @@
#include <linux/delay.h>
#include <linux/efi.h>
@@ -25708,9 +26114,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/smp.c linux-2.6.18-xen-3.2.0/arch/ia6
call_data = &data;
mb(); /* ensure store to call_data precedes setting of IPI_CALL_FUNC */
send_IPI_allbutself(IPI_CALL_FUNC);
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/time.c linux-2.6.18-xen-3.2.0/arch/ia64/kernel/time.c
---- linux-2.6.18.8/arch/ia64/kernel/time.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/time.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/time.c linux-2.6.18-xen-3.3.0/arch/ia64/kernel/time.c
+--- linux-2.6.18.8/arch/ia64/kernel/time.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/time.c 2008-08-21 11:36:07.000000000 +0200
@@ -29,6 +29,14 @@
#include <asm/sections.h>
#include <asm/system.h>
@@ -25958,9 +26364,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/time.c linux-2.6.18-xen-3.2.0/arch/ia
/* Setup the CPU local timer tick */
ia64_cpu_local_tick();
}
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/vmlinux.lds.S linux-2.6.18-xen-3.2.0/arch/ia64/kernel/vmlinux.lds.S
---- linux-2.6.18.8/arch/ia64/kernel/vmlinux.lds.S 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/vmlinux.lds.S 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/vmlinux.lds.S linux-2.6.18-xen-3.3.0/arch/ia64/kernel/vmlinux.lds.S
+--- linux-2.6.18.8/arch/ia64/kernel/vmlinux.lds.S 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/vmlinux.lds.S 2008-08-21 11:36:07.000000000 +0200
@@ -183,6 +183,12 @@ SECTIONS
__start_gate_section = .;
*(.data.gate)
@@ -25974,27 +26380,64 @@ diff -rpuN linux-2.6.18.8/arch/ia64/kernel/vmlinux.lds.S linux-2.6.18-xen-3.2.0/
}
. = ALIGN(PAGE_SIZE); /* make sure the gate page doesn't expose kernel data */
-diff -rpuN linux-2.6.18.8/arch/ia64/kernel/xengate-data.S linux-2.6.18-xen-3.2.0/arch/ia64/kernel/xengate-data.S
---- linux-2.6.18.8/arch/ia64/kernel/xengate-data.S 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/kernel/xengate-data.S 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/kernel/xengate-data.S linux-2.6.18-xen-3.3.0/arch/ia64/kernel/xengate-data.S
+--- linux-2.6.18.8/arch/ia64/kernel/xengate-data.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/kernel/xengate-data.S 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,3 @@
+ .section .data.gate.xen, "aw"
+
+ .incbin "arch/ia64/kernel/xengate.so"
-diff -rpuN linux-2.6.18.8/arch/ia64/mm/contig.c linux-2.6.18-xen-3.2.0/arch/ia64/mm/contig.c
---- linux-2.6.18.8/arch/ia64/mm/contig.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/mm/contig.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/Makefile linux-2.6.18-xen-3.3.0/arch/ia64/Makefile
+--- linux-2.6.18.8/arch/ia64/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/Makefile 2008-08-21 11:36:07.000000000 +0200
+@@ -45,6 +45,12 @@ ifeq ($(call cc-version),0304)
+ endif
+
+ CFLAGS += $(cflags-y)
++
++cppflags-$(CONFIG_XEN) += \
++ -D__XEN_INTERFACE_VERSION__=$(CONFIG_XEN_INTERFACE_VERSION)
++
++CPPFLAGS += $(cppflags-y)
++
+ head-y := arch/ia64/kernel/head.o arch/ia64/kernel/init_task.o
+
+ libs-y += arch/ia64/lib/
+@@ -54,7 +60,9 @@ core-$(CONFIG_IA64_DIG) += arch/ia64/di
+ core-$(CONFIG_IA64_GENERIC) += arch/ia64/dig/
+ core-$(CONFIG_IA64_HP_ZX1) += arch/ia64/dig/
+ core-$(CONFIG_IA64_HP_ZX1_SWIOTLB) += arch/ia64/dig/
++core-$(CONFIG_IA64_XEN) += arch/ia64/dig/
+ core-$(CONFIG_IA64_SGI_SN2) += arch/ia64/sn/
++core-$(CONFIG_XEN) += arch/ia64/xen/
+
+ drivers-$(CONFIG_PCI) += arch/ia64/pci/
+ drivers-$(CONFIG_IA64_HP_SIM) += arch/ia64/hp/sim/
+@@ -87,8 +95,8 @@ CLEAN_FILES += vmlinux.gz bootloader
+ boot: lib/lib.a vmlinux
+ $(Q)$(MAKE) $(build)=$(boot) $@
+
+-install: vmlinux.gz
+- sh $(srctree)/arch/ia64/install.sh $(KERNELRELEASE) $< System.map "$(INSTALL_PATH)"
++install:
++ -yes | sh $(srctree)/arch/ia64/install.sh $(KERNELRELEASE) vmlinux.gz System.map "$(INSTALL_PATH)"
+
+ define archhelp
+ echo '* compressed - Build compressed kernel image'
+diff -rpuN linux-2.6.18.8/arch/ia64/mm/contig.c linux-2.6.18-xen-3.3.0/arch/ia64/mm/contig.c
+--- linux-2.6.18.8/arch/ia64/mm/contig.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/mm/contig.c 2008-08-21 11:36:07.000000000 +0200
@@ -18,6 +18,9 @@
#include <linux/efi.h>
#include <linux/mm.h>
#include <linux/swap.h>
-+#ifdef CONFIG_XEN
++#if defined(CONFIG_XEN) && defined(CONFIG_KEXEC)
+#include <linux/kexec.h>
+#endif
#include <asm/meminit.h>
#include <asm/pgalloc.h>
-@@ -172,8 +175,17 @@ find_memory (void)
+@@ -172,8 +175,12 @@ find_memory (void)
/* Free all available memory, then mark bootmem-map as being in use. */
efi_memmap_walk(filter_rsvd_memory, free_bootmem);
reserve_bootmem(bootmap_start, bootmap_size);
@@ -26004,17 +26447,35 @@ diff -rpuN linux-2.6.18.8/arch/ia64/mm/contig.c linux-2.6.18-xen-3.2.0/arch/ia64
find_initrd();
+
-+#ifdef CONFIG_CRASH_DUMP
-+ /* If we are doing a crash dump, we still need to know the real mem
-+ * size before original memory map is * reset. */
-+ saved_max_pfn = max_pfn;
-+#endif
}
#ifdef CONFIG_SMP
-diff -rpuN linux-2.6.18.8/arch/ia64/mm/init.c linux-2.6.18-xen-3.2.0/arch/ia64/mm/init.c
---- linux-2.6.18.8/arch/ia64/mm/init.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/mm/init.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/mm/discontig.c linux-2.6.18-xen-3.3.0/arch/ia64/mm/discontig.c
+--- linux-2.6.18.8/arch/ia64/mm/discontig.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/mm/discontig.c 2008-08-21 11:36:07.000000000 +0200
+@@ -21,6 +21,9 @@
+ #include <linux/acpi.h>
+ #include <linux/efi.h>
+ #include <linux/nodemask.h>
++#if defined(CONFIG_XEN) && defined(CONFIG_KEXEC)
++#include <linux/kexec.h>
++#endif
+ #include <asm/pgalloc.h>
+ #include <asm/tlb.h>
+ #include <asm/meminit.h>
+@@ -502,6 +505,9 @@ void __init find_memory(void)
+ reserve_pernode_space();
+ memory_less_nodes();
+ initialize_pernode_data();
++#if defined(CONFIG_XEN) && defined(CONFIG_KEXEC)
++ xen_machine_kexec_setup_resources();
++#endif
+
+ max_pfn = max_low_pfn;
+
+diff -rpuN linux-2.6.18.8/arch/ia64/mm/init.c linux-2.6.18-xen-3.3.0/arch/ia64/mm/init.c
+--- linux-2.6.18.8/arch/ia64/mm/init.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/mm/init.c 2008-08-21 11:36:07.000000000 +0200
@@ -303,16 +303,34 @@ static void __init
setup_gate (void)
{
@@ -26052,9 +26513,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/mm/init.c linux-2.6.18-xen-3.2.0/arch/ia64/m
put_kernel_page(page, GATE_ADDR + PAGE_SIZE, PAGE_GATE);
#else
put_kernel_page(page, GATE_ADDR + PERCPU_PAGE_SIZE, PAGE_GATE);
-diff -rpuN linux-2.6.18.8/arch/ia64/mm/ioremap.c linux-2.6.18-xen-3.2.0/arch/ia64/mm/ioremap.c
---- linux-2.6.18.8/arch/ia64/mm/ioremap.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/mm/ioremap.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/mm/ioremap.c linux-2.6.18-xen-3.3.0/arch/ia64/mm/ioremap.c
+--- linux-2.6.18.8/arch/ia64/mm/ioremap.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/mm/ioremap.c 2008-08-21 11:36:07.000000000 +0200
@@ -16,6 +16,9 @@
static inline void __iomem *
__ioremap (unsigned long offset, unsigned long size)
@@ -26065,20 +26526,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/mm/ioremap.c linux-2.6.18-xen-3.2.0/arch/ia6
return (void __iomem *) (__IA64_UNCACHED_OFFSET | offset);
}
-diff -rpuN linux-2.6.18.8/arch/ia64/oprofile/Makefile linux-2.6.18-xen-3.2.0/arch/ia64/oprofile/Makefile
---- linux-2.6.18.8/arch/ia64/oprofile/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/oprofile/Makefile 2008-02-15 16:21:49.000000000 -0800
-@@ -8,3 +8,7 @@ DRIVER_OBJS := $(addprefix ../../../driv
-
- oprofile-y := $(DRIVER_OBJS) init.o backtrace.o
- oprofile-$(CONFIG_PERFMON) += perfmon.o
-+ifeq ($(CONFIG_XEN), y)
-+oprofile-$(CONFIG_PERFMON) += xenoprof.o \
-+ ../../../drivers/xen/xenoprof/xenoprofile.o
-+endif
-diff -rpuN linux-2.6.18.8/arch/ia64/oprofile/init.c linux-2.6.18-xen-3.2.0/arch/ia64/oprofile/init.c
---- linux-2.6.18.8/arch/ia64/oprofile/init.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/oprofile/init.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/oprofile/init.c linux-2.6.18-xen-3.3.0/arch/ia64/oprofile/init.c
+--- linux-2.6.18.8/arch/ia64/oprofile/init.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/oprofile/init.c 2008-08-21 11:36:07.000000000 +0200
@@ -11,6 +11,8 @@
#include <linux/oprofile.h>
#include <linux/init.h>
@@ -26115,9 +26565,20 @@ diff -rpuN linux-2.6.18.8/arch/ia64/oprofile/init.c linux-2.6.18-xen-3.2.0/arch/
#ifdef CONFIG_PERFMON
perfmon_exit();
#endif
-diff -rpuN linux-2.6.18.8/arch/ia64/oprofile/oprofile_perfmon.h linux-2.6.18-xen-3.2.0/arch/ia64/oprofile/oprofile_perfmon.h
---- linux-2.6.18.8/arch/ia64/oprofile/oprofile_perfmon.h 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/oprofile/oprofile_perfmon.h 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/oprofile/Makefile linux-2.6.18-xen-3.3.0/arch/ia64/oprofile/Makefile
+--- linux-2.6.18.8/arch/ia64/oprofile/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/oprofile/Makefile 2008-08-21 11:36:07.000000000 +0200
+@@ -8,3 +8,7 @@ DRIVER_OBJS := $(addprefix ../../../driv
+
+ oprofile-y := $(DRIVER_OBJS) init.o backtrace.o
+ oprofile-$(CONFIG_PERFMON) += perfmon.o
++ifeq ($(CONFIG_XEN), y)
++oprofile-$(CONFIG_PERFMON) += xenoprof.o \
++ ../../../drivers/xen/xenoprof/xenoprofile.o
++endif
+diff -rpuN linux-2.6.18.8/arch/ia64/oprofile/oprofile_perfmon.h linux-2.6.18-xen-3.3.0/arch/ia64/oprofile/oprofile_perfmon.h
+--- linux-2.6.18.8/arch/ia64/oprofile/oprofile_perfmon.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/oprofile/oprofile_perfmon.h 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,30 @@
+#ifndef OPROFILE_PERFMON_H
+#define OPROFILE_PERFMON_H
@@ -26149,9 +26610,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/oprofile/oprofile_perfmon.h linux-2.6.18-xen
+#endif /* CONFIG_XEN */
+
+#endif /* OPROFILE_PERFMON_H */
-diff -rpuN linux-2.6.18.8/arch/ia64/oprofile/perfmon.c linux-2.6.18-xen-3.2.0/arch/ia64/oprofile/perfmon.c
---- linux-2.6.18.8/arch/ia64/oprofile/perfmon.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/oprofile/perfmon.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/oprofile/perfmon.c linux-2.6.18-xen-3.3.0/arch/ia64/oprofile/perfmon.c
+--- linux-2.6.18.8/arch/ia64/oprofile/perfmon.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/oprofile/perfmon.c 2008-08-21 11:36:07.000000000 +0200
@@ -13,6 +13,7 @@
#include <asm/perfmon.h>
#include <asm/ptrace.h>
@@ -26227,9 +26688,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/oprofile/perfmon.c linux-2.6.18-xen-3.2.0/ar
- pfm_unregister_buffer_fmt(oprofile_fmt.fmt_uuid);
+ __perfmon_exit();
}
-diff -rpuN linux-2.6.18.8/arch/ia64/oprofile/xenoprof.c linux-2.6.18-xen-3.2.0/arch/ia64/oprofile/xenoprof.c
---- linux-2.6.18.8/arch/ia64/oprofile/xenoprof.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/oprofile/xenoprof.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/oprofile/xenoprof.c linux-2.6.18-xen-3.3.0/arch/ia64/oprofile/xenoprof.c
+--- linux-2.6.18.8/arch/ia64/oprofile/xenoprof.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/oprofile/xenoprof.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,142 @@
+/******************************************************************************
+ * xenoprof ia64 specific part
@@ -26373,9 +26834,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/oprofile/xenoprof.c linux-2.6.18-xen-3.2.0/a
+
+ return ret;
+}
-diff -rpuN linux-2.6.18.8/arch/ia64/pci/pci.c linux-2.6.18-xen-3.2.0/arch/ia64/pci/pci.c
---- linux-2.6.18.8/arch/ia64/pci/pci.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/pci/pci.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/pci/pci.c linux-2.6.18-xen-3.3.0/arch/ia64/pci/pci.c
+--- linux-2.6.18.8/arch/ia64/pci/pci.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/pci/pci.c 2008-08-21 11:36:07.000000000 +0200
@@ -30,6 +30,15 @@
#include <asm/irq.h>
#include <asm/hw_irq.h>
@@ -26625,9 +27086,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/pci/pci.c linux-2.6.18-xen-3.2.0/arch/ia64/p
+}
+EXPORT_SYMBOL(xen_pcibios_setup_root_windows);
+#endif
-diff -rpuN linux-2.6.18.8/arch/ia64/sn/kernel/setup.c linux-2.6.18-xen-3.2.0/arch/ia64/sn/kernel/setup.c
---- linux-2.6.18.8/arch/ia64/sn/kernel/setup.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/sn/kernel/setup.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/sn/kernel/setup.c linux-2.6.18-xen-3.3.0/arch/ia64/sn/kernel/setup.c
+--- linux-2.6.18.8/arch/ia64/sn/kernel/setup.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/sn/kernel/setup.c 2008-08-21 11:36:07.000000000 +0200
@@ -763,5 +763,13 @@ int sn_prom_feature_available(int id)
return 0;
return test_bit(id, sn_prom_features);
@@ -26642,9 +27103,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/sn/kernel/setup.c linux-2.6.18-xen-3.2.0/arc
+}
EXPORT_SYMBOL(sn_prom_feature_available);
-diff -rpuN linux-2.6.18.8/arch/ia64/sn/pci/pcibr/pcibr_provider.c linux-2.6.18-xen-3.2.0/arch/ia64/sn/pci/pcibr/pcibr_provider.c
---- linux-2.6.18.8/arch/ia64/sn/pci/pcibr/pcibr_provider.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/sn/pci/pcibr/pcibr_provider.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/sn/pci/pcibr/pcibr_provider.c linux-2.6.18-xen-3.3.0/arch/ia64/sn/pci/pcibr/pcibr_provider.c
+--- linux-2.6.18.8/arch/ia64/sn/pci/pcibr/pcibr_provider.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/sn/pci/pcibr/pcibr_provider.c 2008-08-21 11:36:07.000000000 +0200
@@ -15,6 +15,7 @@
#include <asm/sn/pcibus_provider_defs.h>
#include <asm/sn/pcidev.h>
@@ -26666,9 +27127,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/sn/pci/pcibr/pcibr_provider.c linux-2.6.18-x
spin_lock_init(&soft->pbi_lock);
-diff -rpuN linux-2.6.18.8/arch/ia64/sn/pci/tioca_provider.c linux-2.6.18-xen-3.2.0/arch/ia64/sn/pci/tioca_provider.c
---- linux-2.6.18.8/arch/ia64/sn/pci/tioca_provider.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/sn/pci/tioca_provider.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/sn/pci/tioca_provider.c linux-2.6.18-xen-3.3.0/arch/ia64/sn/pci/tioca_provider.c
+--- linux-2.6.18.8/arch/ia64/sn/pci/tioca_provider.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/sn/pci/tioca_provider.c 2008-08-21 11:36:07.000000000 +0200
@@ -611,7 +611,9 @@ tioca_bus_fixup(struct pcibus_bussoft *p
return NULL;
@@ -26680,9 +27141,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/sn/pci/tioca_provider.c linux-2.6.18-xen-3.2
/* init kernel-private area */
-diff -rpuN linux-2.6.18.8/arch/ia64/sn/pci/tioce_provider.c linux-2.6.18-xen-3.2.0/arch/ia64/sn/pci/tioce_provider.c
---- linux-2.6.18.8/arch/ia64/sn/pci/tioce_provider.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/sn/pci/tioce_provider.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/sn/pci/tioce_provider.c linux-2.6.18-xen-3.3.0/arch/ia64/sn/pci/tioce_provider.c
+--- linux-2.6.18.8/arch/ia64/sn/pci/tioce_provider.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/sn/pci/tioce_provider.c 2008-08-21 11:36:07.000000000 +0200
@@ -1006,7 +1006,9 @@ tioce_bus_fixup(struct pcibus_bussoft *p
return NULL;
@@ -26694,22 +27155,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/sn/pci/tioce_provider.c linux-2.6.18-xen-3.2
tioce_kern = tioce_kern_init(tioce_common);
if (tioce_kern == NULL) {
-diff -rpuN linux-2.6.18.8/arch/ia64/xen/Makefile linux-2.6.18-xen-3.2.0/arch/ia64/xen/Makefile
---- linux-2.6.18.8/arch/ia64/xen/Makefile 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/xen/Makefile 2008-02-15 16:21:49.000000000 -0800
-@@ -0,0 +1,9 @@
-+#
-+# Makefile for Xen components
-+#
-+
-+obj-y := hypercall.o xenivt.o xenentry.o xensetup.o xenpal.o xenhpski.o \
-+ hypervisor.o util.o xencomm.o xcom_hcall.o \
-+ xcom_privcmd.o xen_dma.o
-+
-+obj-$(CONFIG_IA64_GENERIC) += machvec.o
-diff -rpuN linux-2.6.18.8/arch/ia64/xen/hypercall.S linux-2.6.18-xen-3.2.0/arch/ia64/xen/hypercall.S
---- linux-2.6.18.8/arch/ia64/xen/hypercall.S 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/xen/hypercall.S 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/xen/hypercall.S linux-2.6.18-xen-3.3.0/arch/ia64/xen/hypercall.S
+--- linux-2.6.18.8/arch/ia64/xen/hypercall.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/xen/hypercall.S 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,141 @@
+/*
+ * Support routines for Xen hypercalls
@@ -26852,10 +27300,10 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/hypercall.S linux-2.6.18-xen-3.2.0/arch/
+ br.ret.sptk.many b0
+ ;;
+END(__hypercall)
-diff -rpuN linux-2.6.18.8/arch/ia64/xen/hypervisor.c linux-2.6.18-xen-3.2.0/arch/ia64/xen/hypervisor.c
---- linux-2.6.18.8/arch/ia64/xen/hypervisor.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/xen/hypervisor.c 2008-02-15 16:21:49.000000000 -0800
-@@ -0,0 +1,1511 @@
+diff -rpuN linux-2.6.18.8/arch/ia64/xen/hypervisor.c linux-2.6.18-xen-3.3.0/arch/ia64/xen/hypervisor.c
+--- linux-2.6.18.8/arch/ia64/xen/hypervisor.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/xen/hypervisor.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,1526 @@
+/******************************************************************************
+ * include/asm-ia64/shadow.h
+ *
@@ -27511,6 +27959,12 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/hypervisor.c linux-2.6.18-xen-3.2.0/arch
+
+ prot = vma->vm_page_prot;
+ error = remap_pfn_range(vma, addr, gpfn, 1 << PAGE_SHIFT, prot);
++ /*
++ * VM_PFNMAP is set in remap_pfn_range().
++ * Reset the flag to avoid BUG_ON() in do_no_page().
++ */
++ vma->vm_flags &= ~VM_PFNMAP;
++
+ if (error != 0) {
+ error = HYPERVISOR_zap_physmap(gpfn, 0);
+ if (error)
@@ -27564,9 +28018,18 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/hypervisor.c linux-2.6.18-xen-3.2.0/arch
+static void xen_ia64_privcmd_vma_open(struct vm_area_struct *vma);
+static void xen_ia64_privcmd_vma_close(struct vm_area_struct *vma);
+
++static struct page *
++xen_ia64_privcmd_vma_nopage(struct vm_area_struct *vma,
++ unsigned long address,
++ int *type)
++{
++ return NOPAGE_SIGBUS;
++}
++
+struct vm_operations_struct xen_ia64_privcmd_vm_ops = {
-+ .open = &xen_ia64_privcmd_vma_open,
-+ .close = &xen_ia64_privcmd_vma_close,
++ .open = xen_ia64_privcmd_vma_open,
++ .close = xen_ia64_privcmd_vma_close,
++ .nopage = xen_ia64_privcmd_vma_nopage
+};
+
+static void
@@ -27690,7 +28153,7 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/hypervisor.c linux-2.6.18-xen-3.2.0/arch
+ privcmd_range->res = res;
+
+ /* DONTCOPY is essential for Xen as copy_page_range is broken. */
-+ vma->vm_flags |= VM_RESERVED | VM_IO | VM_DONTCOPY | VM_PFNMAP;
++ vma->vm_flags |= VM_RESERVED | VM_IO | VM_DONTCOPY;
+
+ atomic_set(&privcmd_range->ref_count, 1);
+ privcmd_range->pgoff = vma->vm_pgoff;
@@ -28367,17 +28830,30 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/hypervisor.c linux-2.6.18-xen-3.2.0/arch
+ xen_ia64_enable_opt_feature();
+ /* add more if necessary */
+}
-diff -rpuN linux-2.6.18.8/arch/ia64/xen/machvec.c linux-2.6.18-xen-3.2.0/arch/ia64/xen/machvec.c
---- linux-2.6.18.8/arch/ia64/xen/machvec.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/xen/machvec.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/xen/machvec.c linux-2.6.18-xen-3.3.0/arch/ia64/xen/machvec.c
+--- linux-2.6.18.8/arch/ia64/xen/machvec.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/xen/machvec.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,4 @@
+#define MACHVEC_PLATFORM_NAME xen
+#define MACHVEC_PLATFORM_HEADER <asm/machvec_xen.h>
+#include <asm/machvec_init.h>
+
-diff -rpuN linux-2.6.18.8/arch/ia64/xen/swiotlb.c linux-2.6.18-xen-3.2.0/arch/ia64/xen/swiotlb.c
---- linux-2.6.18.8/arch/ia64/xen/swiotlb.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/xen/swiotlb.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/xen/Makefile linux-2.6.18-xen-3.3.0/arch/ia64/xen/Makefile
+--- linux-2.6.18.8/arch/ia64/xen/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/xen/Makefile 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,9 @@
++#
++# Makefile for Xen components
++#
++
++obj-y := hypercall.o xenivt.o xenentry.o xensetup.o xenpal.o \
++ hypervisor.o util.o xencomm.o xcom_hcall.o \
++ xcom_privcmd.o xcom_asm.o xen_dma.o
++
++obj-$(CONFIG_IA64_GENERIC) += machvec.o
+diff -rpuN linux-2.6.18.8/arch/ia64/xen/swiotlb.c linux-2.6.18-xen-3.3.0/arch/ia64/xen/swiotlb.c
+--- linux-2.6.18.8/arch/ia64/xen/swiotlb.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/xen/swiotlb.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,906 @@
+/*
+ * Dynamic DMA mapping support.
@@ -29285,9 +29761,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/swiotlb.c linux-2.6.18-xen-3.2.0/arch/ia
+EXPORT_SYMBOL(swiotlb_alloc_coherent);
+EXPORT_SYMBOL(swiotlb_free_coherent);
+EXPORT_SYMBOL(swiotlb_dma_supported);
-diff -rpuN linux-2.6.18.8/arch/ia64/xen/util.c linux-2.6.18-xen-3.2.0/arch/ia64/xen/util.c
---- linux-2.6.18.8/arch/ia64/xen/util.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/xen/util.c 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/xen/util.c linux-2.6.18-xen-3.3.0/arch/ia64/xen/util.c
+--- linux-2.6.18.8/arch/ia64/xen/util.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/xen/util.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,102 @@
+/******************************************************************************
+ * arch/ia64/xen/util.c
@@ -29391,10 +29867,41 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/util.c linux-2.6.18-xen-3.2.0/arch/ia64/
+ * tab-width: 8
+ * End:
+ */
-diff -rpuN linux-2.6.18.8/arch/ia64/xen/xcom_hcall.c linux-2.6.18-xen-3.2.0/arch/ia64/xen/xcom_hcall.c
---- linux-2.6.18.8/arch/ia64/xen/xcom_hcall.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/xen/xcom_hcall.c 2008-02-15 16:21:49.000000000 -0800
-@@ -0,0 +1,663 @@
+diff -rpuN linux-2.6.18.8/arch/ia64/xen/xcom_asm.S linux-2.6.18-xen-3.3.0/arch/ia64/xen/xcom_asm.S
+--- linux-2.6.18.8/arch/ia64/xen/xcom_asm.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/xen/xcom_asm.S 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,27 @@
++/*
++ * xencomm suspend support
++ * Support routines for Xen
++ *
++ * Copyright (C) 2005 Dan Magenheimer <dan.magenheimer@hp.com>
++ */
++#include <asm/asmmacro.h>
++#include <xen/interface/xen.h>
++
++/*
++ * Stub for suspend.
++ * Just force the stacked registers to be written in memory.
++ */
++GLOBAL_ENTRY(xencomm_arch_hypercall_suspend)
++ ;;
++ alloc r20=ar.pfs,0,0,6,0
++ mov r2=__HYPERVISOR_sched_op
++ ;;
++ /* We don't want to deal with RSE. */
++ flushrs
++ mov r33=r32
++ mov r32=2 // SCHEDOP_shutdown
++ ;;
++ break 0x1000
++ ;;
++ br.ret.sptk.many b0
++END(xencomm_arch_hypercall_suspend)
+diff -rpuN linux-2.6.18.8/arch/ia64/xen/xcom_hcall.c linux-2.6.18-xen-3.3.0/arch/ia64/xen/xcom_hcall.c
+--- linux-2.6.18.8/arch/ia64/xen/xcom_hcall.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/xen/xcom_hcall.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,671 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
@@ -29541,6 +30048,16 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/xcom_hcall.c linux-2.6.18-xen-3.2.0/arch
+ case PHYSDEVOP_irq_status_query:
+ argsize = sizeof(physdev_irq_status_query_t);
+ break;
++ case PHYSDEVOP_manage_pci_add:
++ case PHYSDEVOP_manage_pci_remove:
++ argsize = sizeof(physdev_manage_pci_t);
++ break;
++ case PHYSDEVOP_map_pirq:
++ argsize = sizeof(physdev_map_pirq_t);
++ break;
++ case PHYSDEVOP_unmap_pirq:
++ argsize = sizeof(physdev_unmap_pirq_t);
++ break;
+
+ default:
+ printk("%s: unknown physdev op %d\n", __func__, cmd);
@@ -29881,7 +30398,6 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/xcom_hcall.c linux-2.6.18-xen-3.2.0/arch
+}
+EXPORT_SYMBOL_GPL(xencomm_hypercall_hvm_op);
+
-+#ifndef CONFIG_VMX_GUEST
+int
+xencomm_hypercall_suspend(unsigned long srec)
+{
@@ -29892,7 +30408,6 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/xcom_hcall.c linux-2.6.18-xen-3.2.0/arch
+ return xencomm_arch_hypercall_suspend(
+ xencomm_map_no_alloc(&arg, sizeof(arg)));
+}
-+#endif
+
+int
+xencomm_hypercall_xenoprof_op(int op, void *arg)
@@ -30058,10 +30573,10 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/xcom_hcall.c linux-2.6.18-xen-3.2.0/arch
+
+ return xencomm_arch_hypercall_kexec_op(cmd, desc);
+}
-diff -rpuN linux-2.6.18.8/arch/ia64/xen/xcom_privcmd.c linux-2.6.18-xen-3.2.0/arch/ia64/xen/xcom_privcmd.c
---- linux-2.6.18.8/arch/ia64/xen/xcom_privcmd.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/xen/xcom_privcmd.c 2008-02-15 16:21:49.000000000 -0800
-@@ -0,0 +1,823 @@
+diff -rpuN linux-2.6.18.8/arch/ia64/xen/xcom_privcmd.c linux-2.6.18-xen-3.3.0/arch/ia64/xen/xcom_privcmd.c
+--- linux-2.6.18.8/arch/ia64/xen/xcom_privcmd.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/xen/xcom_privcmd.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,902 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
@@ -30175,6 +30690,7 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/xcom_privcmd.c linux-2.6.18-xen-3.2.0/ar
+ break;
+ case XEN_SYSCTL_tbuf_op:
+ case XEN_SYSCTL_sched_id:
++ case XEN_SYSCTL_availheap:
+ break;
+ case XEN_SYSCTL_perfc_op:
+ {
@@ -30390,6 +30906,8 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/xcom_privcmd.c linux-2.6.18-xen-3.2.0/ar
+ case XEN_DOMCTL_settimeoffset:
+ case XEN_DOMCTL_sendtrigger:
+ case XEN_DOMCTL_set_opt_feature:
++ case XEN_DOMCTL_assign_device:
++ case XEN_DOMCTL_subscribe:
+ break;
+ case XEN_DOMCTL_pin_mem_cacheattr:
+ return -ENOSYS;
@@ -30500,15 +31018,18 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/xcom_privcmd.c linux-2.6.18-xen-3.2.0/ar
+ * may cause the soft lockup warning.
+ * In order to avoid the warning, we limit
+ * the number of extents and repeat the hypercall.
-+ * The following value is determined by experimentation.
-+ * If the following limit causes soft lockup warning,
++ * The following value is determined by evaluation.
++ * Time of one hypercall should be smaller than
++ * a vcpu time slice. The time with current
++ * MEMORYOP_MAX_EXTENTS is around 5 msec.
++ * If the following limit causes some issues,
+ * we should decrease this value.
+ *
+ * Another way would be that start with small value and
+ * increase adoptively measuring hypercall time.
+ * It might be over-kill.
+ */
-+#define MEMORYOP_MAX_EXTENTS (MEMORYOP_XENCOMM_LIMIT / 4)
++#define MEMORYOP_MAX_EXTENTS (MEMORYOP_XENCOMM_LIMIT / 512)
+
+ while (nr_extents > 0) {
+ xen_ulong_t nr_tmp = nr_extents;
@@ -30724,6 +31245,41 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/xcom_privcmd.c linux-2.6.18-xen-3.2.0/ar
+}
+
+static int
++xencomm_privcmd_hvm_op_track_dirty_vram(privcmd_hypercall_t *hypercall)
++{
++#if 1
++ /*
++ * At this moment HVMOP_track_dirty_vram isn't implemented
++ * on xen/ia64 so that it just returns -ENOSYS.
++ * Don't issue hypercall to get -ENOSYS.
++ * When the hypercall is implemented, enable the following codes.
++ */
++ return -ENOSYS;
++#else
++ int cmd = hypercall->arg[0];
++ struct xen_hvm_track_dirty_vram *user_op = (void*)hypercall->arg[1];
++ struct xen_hvm_track_dirty_vram kern_op;
++ struct xencomm_handle *desc;
++ struct xencomm_handle *bitmap_desc;
++ int ret;
++
++ BUG_ON(cmd != HVMOP_track_dirty_vram);
++ if (copy_from_user(&kern_op, user_op, sizeof(kern_op)))
++ return -EFAULT;
++ desc = xencomm_map_no_alloc(&kern_op, sizeof(kern_op));
++ bitmap_desc = xencomm_map(xen_guest_handle(kern_op.dirty_bitmap),
++ kern_op.nr * sizeof(uint8_t));
++ if (bitmap_desc == NULL)
++ return -ENOMEM;
++ set_xen_guest_handle(kern_op.dirty_bitmap, (void*)bitmap_desc);
++ ret = xencomm_arch_hypercall_hvm_op(cmd, desc);
++ xencomm_free(bitmap_desc);
++
++ return ret;
++#endif
++}
++
++static int
+xencomm_privcmd_hvm_op(privcmd_hypercall_t *hypercall)
+{
+ int cmd = hypercall->arg[0];
@@ -30745,6 +31301,12 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/xcom_privcmd.c linux-2.6.18-xen-3.2.0/ar
+ case HVMOP_set_pci_link_route:
+ argsize = sizeof(xen_hvm_set_pci_link_route_t);
+ break;
++ case HVMOP_set_mem_type:
++ argsize = sizeof(xen_hvm_set_mem_type_t);
++ break;
++
++ case HVMOP_track_dirty_vram:
++ return xencomm_privcmd_hvm_op_track_dirty_vram(hypercall);
+
+ default:
+ printk("%s: unknown HVMOP %d\n", __func__, cmd);
@@ -30853,6 +31415,36 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/xcom_privcmd.c linux-2.6.18-xen-3.2.0/ar
+ return ret;
+}
+
++static int
++xencomm_privcmd_ia64_physdev_op(privcmd_hypercall_t *hypercall)
++{
++ int cmd = hypercall->arg[0];
++ struct xencomm_handle *desc;
++ unsigned int argsize;
++ int ret;
++
++ switch (cmd) {
++ case PHYSDEVOP_map_pirq:
++ argsize = sizeof(physdev_map_pirq_t);
++ break;
++ case PHYSDEVOP_unmap_pirq:
++ argsize = sizeof(physdev_unmap_pirq_t);
++ break;
++ default:
++ printk("%s: unknown PHYSDEVOP %d\n", __func__, cmd);
++ return -EINVAL;
++ }
++
++ desc = xencomm_map((void *)hypercall->arg[1], argsize);
++ if ((void *)hypercall->arg[1] != NULL && argsize > 0 && desc == NULL)
++ return -ENOMEM;
++
++ ret = xencomm_arch_hypercall_physdev_op(cmd, desc);
++
++ xencomm_free(desc);
++ return ret;
++}
++
+int
+privcmd_hypercall(privcmd_hypercall_t *hypercall)
+{
@@ -30879,16 +31471,131 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/xcom_privcmd.c linux-2.6.18-xen-3.2.0/ar
+ return xencomm_privcmd_ia64_dom0vp_op(hypercall);
+ case __HYPERVISOR_ia64_debug_op:
+ return xencomm_privcmd_ia64_debug_op(hypercall);
++ case __HYPERVISOR_physdev_op:
++ return xencomm_privcmd_ia64_physdev_op(hypercall);
+ default:
+ printk("%s: unknown hcall (%ld)\n", __func__, hypercall->op);
+ return -ENOSYS;
+ }
+}
+
-diff -rpuN linux-2.6.18.8/arch/ia64/xen/xen_dma.c linux-2.6.18-xen-3.2.0/arch/ia64/xen/xen_dma.c
---- linux-2.6.18.8/arch/ia64/xen/xen_dma.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/xen/xen_dma.c 2008-02-15 16:21:49.000000000 -0800
-@@ -0,0 +1,155 @@
+diff -rpuN linux-2.6.18.8/arch/ia64/xen/xencomm.c linux-2.6.18-xen-3.3.0/arch/ia64/xen/xencomm.c
+--- linux-2.6.18.8/arch/ia64/xen/xencomm.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/xen/xencomm.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,109 @@
++/*
++ * Copyright (C) 2006 Hollis Blanchard <hollisb@us.ibm.com>, IBM Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#include <linux/gfp.h>
++#include <linux/mm.h>
++#include <xen/interface/xen.h>
++#include <asm/page.h>
++
++#ifdef HAVE_XEN_PLATFORM_COMPAT_H
++#include <xen/platform-compat.h>
++#endif
++
++#include <asm/xen/xencomm.h>
++
++static unsigned long kernel_start_pa;
++
++void
++xencomm_initialize (void)
++{
++ kernel_start_pa = KERNEL_START - ia64_tpa(KERNEL_START);
++}
++
++/* Translate virtual address to physical address. */
++unsigned long
++xencomm_vtop(unsigned long vaddr)
++{
++#ifndef CONFIG_VMX_GUEST
++ struct page *page;
++ struct vm_area_struct *vma;
++#endif
++
++ if (vaddr == 0)
++ return 0;
++
++#ifdef __ia64__
++ if (REGION_NUMBER(vaddr) == 5) {
++ pgd_t *pgd;
++ pud_t *pud;
++ pmd_t *pmd;
++ pte_t *ptep;
++
++ /* On ia64, TASK_SIZE refers to current. It is not initialized
++ during boot.
++ Furthermore the kernel is relocatable and __pa() doesn't
++ work on addresses. */
++ if (vaddr >= KERNEL_START
++ && vaddr < (KERNEL_START + KERNEL_TR_PAGE_SIZE)) {
++ return vaddr - kernel_start_pa;
++ }
++
++ /* In kernel area -- virtually mapped. */
++ pgd = pgd_offset_k(vaddr);
++ if (pgd_none(*pgd) || pgd_bad(*pgd))
++ return ~0UL;
++
++ pud = pud_offset(pgd, vaddr);
++ if (pud_none(*pud) || pud_bad(*pud))
++ return ~0UL;
++
++ pmd = pmd_offset(pud, vaddr);
++ if (pmd_none(*pmd) || pmd_bad(*pmd))
++ return ~0UL;
++
++ ptep = pte_offset_kernel(pmd, vaddr);
++ if (!ptep)
++ return ~0UL;
++
++ return (pte_val(*ptep) & _PFN_MASK) | (vaddr & ~PAGE_MASK);
++ }
++#endif
++
++ if (vaddr > TASK_SIZE) {
++ /* kernel address */
++ return __pa(vaddr);
++ }
++
++
++#ifdef CONFIG_VMX_GUEST
++ /* No privcmd within vmx guest. */
++ return ~0UL;
++#else
++ /* XXX double-check (lack of) locking */
++ vma = find_extend_vma(current->mm, vaddr);
++ if (!vma)
++ return ~0UL;
++
++ /* We assume the page is modified. */
++ page = follow_page(vma, vaddr, FOLL_WRITE | FOLL_TOUCH);
++ if (!page)
++ return ~0UL;
++
++ return (page_to_pfn(page) << PAGE_SHIFT) | (vaddr & ~PAGE_MASK);
++#endif
++}
+diff -rpuN linux-2.6.18.8/arch/ia64/xen/xen_dma.c linux-2.6.18-xen-3.3.0/arch/ia64/xen/xen_dma.c
+--- linux-2.6.18.8/arch/ia64/xen/xen_dma.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/xen/xen_dma.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,190 @@
+/*
+ * Copyright (C) 2007 Hewlett-Packard Development Company, L.P.
+ * Alex Williamson <alex.williamson@hp.com>
@@ -30928,6 +31635,41 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/xen_dma.c linux-2.6.18-xen-3.2.0/arch/ia
+ } \
+} while (0)
+
++static int check_pages_physically_contiguous(unsigned long pfn,
++ unsigned int offset,
++ size_t length)
++{
++ unsigned long next_bus;
++ int i;
++ int nr_pages;
++
++ next_bus = pfn_to_mfn_for_dma(pfn);
++ nr_pages = (offset + length + PAGE_SIZE-1) >> PAGE_SHIFT;
++
++ for (i = 1; i < nr_pages; i++) {
++ if (pfn_to_mfn_for_dma(++pfn) != ++next_bus)
++ return 0;
++ }
++ return 1;
++}
++
++int range_straddles_page_boundary(paddr_t p, size_t size)
++{
++ extern unsigned long *contiguous_bitmap;
++ unsigned long pfn = p >> PAGE_SHIFT;
++ unsigned int offset = p & ~PAGE_MASK;
++
++ if (!is_running_on_xen())
++ return 0;
++
++ if (offset + size <= PAGE_SIZE)
++ return 0;
++ if (test_bit(pfn, contiguous_bitmap))
++ return 0;
++ if (check_pages_physically_contiguous(pfn, offset, size))
++ return 0;
++ return 1;
++}
+
+/*
+ * This should be broken out of swiotlb and put in a common place
@@ -31044,122 +31786,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/xen_dma.c linux-2.6.18-xen-3.2.0/arch/ia
+ gnttab_dma_unmap_page(dma_addr);
+}
+EXPORT_SYMBOL(xen_unmap_single);
-diff -rpuN linux-2.6.18.8/arch/ia64/xen/xencomm.c linux-2.6.18-xen-3.2.0/arch/ia64/xen/xencomm.c
---- linux-2.6.18.8/arch/ia64/xen/xencomm.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/xen/xencomm.c 2008-02-15 16:21:49.000000000 -0800
-@@ -0,0 +1,109 @@
-+/*
-+ * Copyright (C) 2006 Hollis Blanchard <hollisb@us.ibm.com>, IBM Corporation
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ */
-+
-+#include <linux/gfp.h>
-+#include <linux/mm.h>
-+#include <xen/interface/xen.h>
-+#include <asm/page.h>
-+
-+#ifdef HAVE_XEN_PLATFORM_COMPAT_H
-+#include <xen/platform-compat.h>
-+#endif
-+
-+#include <asm/xen/xencomm.h>
-+
-+static unsigned long kernel_start_pa;
-+
-+void
-+xencomm_initialize (void)
-+{
-+ kernel_start_pa = KERNEL_START - ia64_tpa(KERNEL_START);
-+}
-+
-+/* Translate virtual address to physical address. */
-+unsigned long
-+xencomm_vtop(unsigned long vaddr)
-+{
-+#ifndef CONFIG_VMX_GUEST
-+ struct page *page;
-+ struct vm_area_struct *vma;
-+#endif
-+
-+ if (vaddr == 0)
-+ return 0;
-+
-+#ifdef __ia64__
-+ if (REGION_NUMBER(vaddr) == 5) {
-+ pgd_t *pgd;
-+ pud_t *pud;
-+ pmd_t *pmd;
-+ pte_t *ptep;
-+
-+ /* On ia64, TASK_SIZE refers to current. It is not initialized
-+ during boot.
-+ Furthermore the kernel is relocatable and __pa() doesn't
-+ work on addresses. */
-+ if (vaddr >= KERNEL_START
-+ && vaddr < (KERNEL_START + KERNEL_TR_PAGE_SIZE)) {
-+ return vaddr - kernel_start_pa;
-+ }
-+
-+ /* In kernel area -- virtually mapped. */
-+ pgd = pgd_offset_k(vaddr);
-+ if (pgd_none(*pgd) || pgd_bad(*pgd))
-+ return ~0UL;
-+
-+ pud = pud_offset(pgd, vaddr);
-+ if (pud_none(*pud) || pud_bad(*pud))
-+ return ~0UL;
-+
-+ pmd = pmd_offset(pud, vaddr);
-+ if (pmd_none(*pmd) || pmd_bad(*pmd))
-+ return ~0UL;
-+
-+ ptep = pte_offset_kernel(pmd, vaddr);
-+ if (!ptep)
-+ return ~0UL;
-+
-+ return (pte_val(*ptep) & _PFN_MASK) | (vaddr & ~PAGE_MASK);
-+ }
-+#endif
-+
-+ if (vaddr > TASK_SIZE) {
-+ /* kernel address */
-+ return __pa(vaddr);
-+ }
-+
-+
-+#ifdef CONFIG_VMX_GUEST
-+ /* No privcmd within vmx guest. */
-+ return ~0UL;
-+#else
-+ /* XXX double-check (lack of) locking */
-+ vma = find_extend_vma(current->mm, vaddr);
-+ if (!vma)
-+ return ~0UL;
-+
-+ /* We assume the page is modified. */
-+ page = follow_page(vma, vaddr, FOLL_WRITE | FOLL_TOUCH);
-+ if (!page)
-+ return ~0UL;
-+
-+ return (page_to_pfn(page) << PAGE_SHIFT) | (vaddr & ~PAGE_MASK);
-+#endif
-+}
-diff -rpuN linux-2.6.18.8/arch/ia64/xen/xenentry.S linux-2.6.18-xen-3.2.0/arch/ia64/xen/xenentry.S
---- linux-2.6.18.8/arch/ia64/xen/xenentry.S 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/xen/xenentry.S 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/xen/xenentry.S linux-2.6.18-xen-3.3.0/arch/ia64/xen/xenentry.S
+--- linux-2.6.18.8/arch/ia64/xen/xenentry.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/xen/xenentry.S 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,931 @@
+/*
+ * ia64/xen/entry.S
@@ -32092,33 +32721,10 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/xenentry.S linux-2.6.18-xen-3.2.0/arch/i
+#else
+END(ia64_leave_kernel)
+#endif
-diff -rpuN linux-2.6.18.8/arch/ia64/xen/xenhpski.c linux-2.6.18-xen-3.2.0/arch/ia64/xen/xenhpski.c
---- linux-2.6.18.8/arch/ia64/xen/xenhpski.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/xen/xenhpski.c 2008-02-15 16:21:49.000000000 -0800
-@@ -0,0 +1,19 @@
-+#include <linux/kernel.h>
-+#include <asm/hypervisor.h>
-+
-+int
-+running_on_sim(void)
-+{
-+ int i;
-+ long cpuid[6];
-+
-+ for (i = 0; i < 5; ++i)
-+ cpuid[i] = xen_get_cpuid(i);
-+ if ((cpuid[0] & 0xff) != 'H') return 0;
-+ if ((cpuid[3] & 0xff) != 0x4) return 0;
-+ if (((cpuid[3] >> 8) & 0xff) != 0x0) return 0;
-+ if (((cpuid[3] >> 16) & 0xff) != 0x0) return 0;
-+ if (((cpuid[3] >> 24) & 0x7) != 0x7) return 0;
-+ return 1;
-+}
-+
-diff -rpuN linux-2.6.18.8/arch/ia64/xen/xenivt.S linux-2.6.18-xen-3.2.0/arch/ia64/xen/xenivt.S
---- linux-2.6.18.8/arch/ia64/xen/xenivt.S 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/xen/xenivt.S 2008-02-15 16:21:49.000000000 -0800
-@@ -0,0 +1,2177 @@
+diff -rpuN linux-2.6.18.8/arch/ia64/xen/xenivt.S linux-2.6.18-xen-3.3.0/arch/ia64/xen/xenivt.S
+--- linux-2.6.18.8/arch/ia64/xen/xenivt.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/xen/xenivt.S 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,2178 @@
+/*
+ * arch/ia64/xen/ivt.S
+ *
@@ -32817,16 +33423,17 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/xenivt.S linux-2.6.18-xen-3.2.0/arch/ia6
+ st4 [r3]=r14 // vpsr.ic = 1
+ adds r3=8,r2 // set up second base pointer
+ ;;
++ sum PSR_DEFAULT_BITS
+#else
+ mov out0=cr.ifa
+ mov out1=cr.isr
+ adds r3=8,r2 // set up second base pointer
+ ;;
+ ssm psr.ic | PSR_DEFAULT_BITS
++#endif
+ ;;
+ srlz.i // guarantee that interruption collectin is on
+ ;;
-+#endif
+#ifdef CONFIG_XEN
+
+#define MASK_TO_PEND_OFS (-1)
@@ -34296,9 +34903,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/xenivt.S linux-2.6.18-xen-3.2.0/arch/ia6
+
+
+#endif
-diff -rpuN linux-2.6.18.8/arch/ia64/xen/xenminstate.h linux-2.6.18-xen-3.2.0/arch/ia64/xen/xenminstate.h
---- linux-2.6.18.8/arch/ia64/xen/xenminstate.h 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/xen/xenminstate.h 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/xen/xenminstate.h linux-2.6.18-xen-3.3.0/arch/ia64/xen/xenminstate.h
+--- linux-2.6.18.8/arch/ia64/xen/xenminstate.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/xen/xenminstate.h 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,358 @@
+#include <asm/cache.h>
+
@@ -34658,9 +35265,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/xenminstate.h linux-2.6.18-xen-3.2.0/arc
+#else
+#define SAVE_MIN DO_SAVE_MIN( , mov r30=r0, )
+#endif
-diff -rpuN linux-2.6.18.8/arch/ia64/xen/xenpal.S linux-2.6.18-xen-3.2.0/arch/ia64/xen/xenpal.S
---- linux-2.6.18.8/arch/ia64/xen/xenpal.S 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/xen/xenpal.S 2008-02-15 16:21:49.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/ia64/xen/xenpal.S linux-2.6.18-xen-3.3.0/arch/ia64/xen/xenpal.S
+--- linux-2.6.18.8/arch/ia64/xen/xenpal.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/xen/xenpal.S 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,85 @@
+/*
+ * ia64/xen/xenpal.S
@@ -34747,10 +35354,10 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/xenpal.S linux-2.6.18-xen-3.2.0/arch/ia6
+ srlz.d // seralize restoration of psr.l
+ br.ret.sptk.many b0
+END(xen_pal_call_static)
-diff -rpuN linux-2.6.18.8/arch/ia64/xen/xensetup.S linux-2.6.18-xen-3.2.0/arch/ia64/xen/xensetup.S
---- linux-2.6.18.8/arch/ia64/xen/xensetup.S 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/ia64/xen/xensetup.S 2008-02-15 16:21:49.000000000 -0800
-@@ -0,0 +1,59 @@
+diff -rpuN linux-2.6.18.8/arch/ia64/xen/xensetup.S linux-2.6.18-xen-3.3.0/arch/ia64/xen/xensetup.S
+--- linux-2.6.18.8/arch/ia64/xen/xensetup.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/ia64/xen/xensetup.S 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,40 @@
+/*
+ * Support routines for Xen
+ *
@@ -34791,93 +35398,9 @@ diff -rpuN linux-2.6.18.8/arch/ia64/xen/xensetup.S linux-2.6.18-xen-3.2.0/arch/i
+ br.ret.sptk.many rp
+ ;;
+END(early_xen_setup)
-+
-+#include <xen/interface/xen.h>
-+
-+/* Stub for suspend.
-+ Just force the stacked registers to be written in memory. */
-+GLOBAL_ENTRY(xencomm_arch_hypercall_suspend)
-+ ;;
-+ alloc r20=ar.pfs,0,0,6,0
-+ mov r2=__HYPERVISOR_sched_op
-+ ;;
-+ /* We don't want to deal with RSE. */
-+ flushrs
-+ mov r33=r32
-+ mov r32=2 // SCHEDOP_shutdown
-+ ;;
-+ break 0x1000
-+ ;;
-+ br.ret.sptk.many b0
-+END(xencomm_arch_hypercall_suspend)
-diff -rpuN linux-2.6.18.8/arch/powerpc/Kconfig linux-2.6.18-xen-3.2.0/arch/powerpc/Kconfig
---- linux-2.6.18.8/arch/powerpc/Kconfig 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/Kconfig 2008-02-15 16:21:51.000000000 -0800
-@@ -439,6 +439,17 @@ config UDBG_RTAS_CONSOLE
- bool
- default n
-
-+config PPC_XEN
-+ bool "Enable Xen compatible kernel"
-+ depends on PPC_MULTIPLATFORM && PPC64 && PPC_MAPLE && PPC_PSERIES && SMP
-+ select XEN
-+ select XEN_PRIVILEGED_GUEST
-+ select XEN_UNPRIVILEGED_GUEST
-+ select XEN_XENCOMM
-+
-+ help
-+ This option will compile a kernel compatible with Xen hypervisor
-+
- config XICS
- depends on PPC_PSERIES
- bool
-@@ -1080,6 +1091,8 @@ source "arch/powerpc/Kconfig.debug"
-
- source "security/Kconfig"
-
-+source "drivers/xen/Kconfig"
-+
- config KEYS_COMPAT
- bool
- depends on COMPAT && KEYS
-diff -rpuN linux-2.6.18.8/arch/powerpc/Kconfig.debug linux-2.6.18-xen-3.2.0/arch/powerpc/Kconfig.debug
---- linux-2.6.18.8/arch/powerpc/Kconfig.debug 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/Kconfig.debug 2008-02-15 16:21:51.000000000 -0800
-@@ -160,6 +160,20 @@ config PPC_EARLY_DEBUG_ISERIES
- Select this to enable early debugging for legacy iSeries. You need
- to hit "Ctrl-x Ctrl-x" to see the messages on the console.
-
-+config PPC_EARLY_DEBUG_XEN_DOM0
-+ bool "Xen Dom0 Console"
-+ depends on PPC_XEN
-+ help
-+ Select this to enable early debugging for Xen Dom0. Setting
-+ this will result in a kernel that may not work as a DomU.
-+
-+config PPC_EARLY_DEBUG_XEN_DOMU
-+ bool "Xen DomU Console"
-+ depends on PPC_XEN && XEN_UNPRIVILEGED_GUEST
-+ help
-+ Select this to enable early debugging for Xen DomU. Setting
-+ this will result in a kernel that may not work as a Dom0.
-+
- endchoice
-
- endmenu
-diff -rpuN linux-2.6.18.8/arch/powerpc/Makefile linux-2.6.18-xen-3.2.0/arch/powerpc/Makefile
---- linux-2.6.18.8/arch/powerpc/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/Makefile 2008-02-15 16:21:51.000000000 -0800
-@@ -65,6 +65,7 @@ CPPFLAGS-$(CONFIG_PPC32) := -Iarch/$(ARC
- AFLAGS-$(CONFIG_PPC32) := -Iarch/$(ARCH)
- CFLAGS-$(CONFIG_PPC64) := -mminimal-toc -mtraceback=none -mcall-aixdesc
- CFLAGS-$(CONFIG_PPC32) := -Iarch/$(ARCH) -ffixed-r2 -mmultiple
-+CFLAGS-$(CONFIG_PPC_XEN) += -Iinclude/asm-$(ARCH)/xen
- CPPFLAGS += $(CPPFLAGS-y)
- AFLAGS += $(AFLAGS-y)
- CFLAGS += -msoft-float -pipe $(CFLAGS-y)
-diff -rpuN linux-2.6.18.8/arch/powerpc/boot/Makefile linux-2.6.18-xen-3.2.0/arch/powerpc/boot/Makefile
---- linux-2.6.18.8/arch/powerpc/boot/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/boot/Makefile 2008-02-15 16:21:51.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/powerpc/boot/Makefile linux-2.6.18-xen-3.3.0/arch/powerpc/boot/Makefile
+--- linux-2.6.18.8/arch/powerpc/boot/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/boot/Makefile 2008-08-21 11:36:07.000000000 +0200
@@ -36,8 +36,11 @@ zliblinuxheader := zlib.h zconf.h zutil.
$(addprefix $(obj)/,$(zlib) main.o): $(addprefix $(obj)/,$(zliblinuxheader)) $(addprefix $(obj)/,$(zlibheader))
#$(addprefix $(obj)/,main.o): $(addprefix $(obj)/,zlib.h)
@@ -34890,9 +35413,9 @@ diff -rpuN linux-2.6.18.8/arch/powerpc/boot/Makefile linux-2.6.18-xen-3.2.0/arch
src-boot := $(addprefix $(obj)/, $(src-boot))
obj-boot := $(addsuffix .o, $(basename $(src-boot)))
-diff -rpuN linux-2.6.18.8/arch/powerpc/boot/xen_guest.S linux-2.6.18-xen-3.2.0/arch/powerpc/boot/xen_guest.S
---- linux-2.6.18.8/arch/powerpc/boot/xen_guest.S 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/boot/xen_guest.S 2008-02-15 16:21:53.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/powerpc/boot/xen_guest.S linux-2.6.18-xen-3.3.0/arch/powerpc/boot/xen_guest.S
+--- linux-2.6.18.8/arch/powerpc/boot/xen_guest.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/boot/xen_guest.S 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,7 @@
+ .section __xen_guest
+ .ascii "GUEST_OS=linux"
@@ -34901,9 +35424,9 @@ diff -rpuN linux-2.6.18.8/arch/powerpc/boot/xen_guest.S linux-2.6.18-xen-3.2.0/a
+ .ascii ",VIRT_BASE=0x0"
+ .ascii ",LOADER=generic"
+ .byte 0
-diff -rpuN linux-2.6.18.8/arch/powerpc/configs/xen_maple_defconfig linux-2.6.18-xen-3.2.0/arch/powerpc/configs/xen_maple_defconfig
---- linux-2.6.18.8/arch/powerpc/configs/xen_maple_defconfig 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/configs/xen_maple_defconfig 2008-02-15 16:21:53.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/powerpc/configs/xen_maple_defconfig linux-2.6.18-xen-3.3.0/arch/powerpc/configs/xen_maple_defconfig
+--- linux-2.6.18.8/arch/powerpc/configs/xen_maple_defconfig 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/configs/xen_maple_defconfig 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,1342 @@
+#
+# Automatically generated make config: don't edit
@@ -36247,9 +36770,63 @@ diff -rpuN linux-2.6.18.8/arch/powerpc/configs/xen_maple_defconfig linux-2.6.18-
+#
+# Hardware crypto devices
+#
-diff -rpuN linux-2.6.18.8/arch/powerpc/kernel/cpu_setup_power4.S linux-2.6.18-xen-3.2.0/arch/powerpc/kernel/cpu_setup_power4.S
---- linux-2.6.18.8/arch/powerpc/kernel/cpu_setup_power4.S 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/kernel/cpu_setup_power4.S 2008-02-15 16:21:53.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/powerpc/Kconfig linux-2.6.18-xen-3.3.0/arch/powerpc/Kconfig
+--- linux-2.6.18.8/arch/powerpc/Kconfig 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/Kconfig 2008-08-21 11:36:07.000000000 +0200
+@@ -439,6 +439,17 @@ config UDBG_RTAS_CONSOLE
+ bool
+ default n
+
++config PPC_XEN
++ bool "Enable Xen compatible kernel"
++ depends on PPC_MULTIPLATFORM && PPC64 && PPC_MAPLE && PPC_PSERIES && SMP
++ select XEN
++ select XEN_PRIVILEGED_GUEST
++ select XEN_UNPRIVILEGED_GUEST
++ select XEN_XENCOMM
++
++ help
++ This option will compile a kernel compatible with Xen hypervisor
++
+ config XICS
+ depends on PPC_PSERIES
+ bool
+@@ -1080,6 +1091,8 @@ source "arch/powerpc/Kconfig.debug"
+
+ source "security/Kconfig"
+
++source "drivers/xen/Kconfig"
++
+ config KEYS_COMPAT
+ bool
+ depends on COMPAT && KEYS
+diff -rpuN linux-2.6.18.8/arch/powerpc/Kconfig.debug linux-2.6.18-xen-3.3.0/arch/powerpc/Kconfig.debug
+--- linux-2.6.18.8/arch/powerpc/Kconfig.debug 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/Kconfig.debug 2008-08-21 11:36:07.000000000 +0200
+@@ -160,6 +160,20 @@ config PPC_EARLY_DEBUG_ISERIES
+ Select this to enable early debugging for legacy iSeries. You need
+ to hit "Ctrl-x Ctrl-x" to see the messages on the console.
+
++config PPC_EARLY_DEBUG_XEN_DOM0
++ bool "Xen Dom0 Console"
++ depends on PPC_XEN
++ help
++ Select this to enable early debugging for Xen Dom0. Setting
++ this will result in a kernel that may not work as a DomU.
++
++config PPC_EARLY_DEBUG_XEN_DOMU
++ bool "Xen DomU Console"
++ depends on PPC_XEN && XEN_UNPRIVILEGED_GUEST
++ help
++ Select this to enable early debugging for Xen DomU. Setting
++ this will result in a kernel that may not work as a Dom0.
++
+ endchoice
+
+ endmenu
+diff -rpuN linux-2.6.18.8/arch/powerpc/kernel/cpu_setup_power4.S linux-2.6.18-xen-3.3.0/arch/powerpc/kernel/cpu_setup_power4.S
+--- linux-2.6.18.8/arch/powerpc/kernel/cpu_setup_power4.S 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/kernel/cpu_setup_power4.S 2008-08-21 11:36:07.000000000 +0200
@@ -73,6 +73,13 @@ _GLOBAL(__970_cpu_preinit)
blr
@@ -36264,9 +36841,9 @@ diff -rpuN linux-2.6.18.8/arch/powerpc/kernel/cpu_setup_power4.S linux-2.6.18-xe
mfspr r0,SPRN_HID0
li r11,5 /* clear DOZE and SLEEP */
rldimi r0,r11,52,8 /* set NAP and DPM */
-diff -rpuN linux-2.6.18.8/arch/powerpc/kernel/prom_init.c linux-2.6.18-xen-3.2.0/arch/powerpc/kernel/prom_init.c
---- linux-2.6.18.8/arch/powerpc/kernel/prom_init.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/kernel/prom_init.c 2008-02-15 16:21:53.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/powerpc/kernel/prom_init.c linux-2.6.18-xen-3.3.0/arch/powerpc/kernel/prom_init.c
+--- linux-2.6.18.8/arch/powerpc/kernel/prom_init.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/kernel/prom_init.c 2008-08-21 11:36:07.000000000 +0200
@@ -188,6 +188,7 @@ static unsigned long __initdata prom_tce
#define PLATFORM_LPAR 0x0001
#define PLATFORM_POWERMAC 0x0400
@@ -36322,9 +36899,9 @@ diff -rpuN linux-2.6.18.8/arch/powerpc/kernel/prom_init.c linux-2.6.18-xen-3.2.0
/*
* On non-powermacs, try to instantiate RTAS and puts all CPUs
-diff -rpuN linux-2.6.18.8/arch/powerpc/kernel/setup-common.c linux-2.6.18-xen-3.2.0/arch/powerpc/kernel/setup-common.c
---- linux-2.6.18.8/arch/powerpc/kernel/setup-common.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/kernel/setup-common.c 2008-02-15 16:21:53.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/powerpc/kernel/setup-common.c linux-2.6.18-xen-3.3.0/arch/powerpc/kernel/setup-common.c
+--- linux-2.6.18.8/arch/powerpc/kernel/setup-common.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/kernel/setup-common.c 2008-08-21 11:36:07.000000000 +0200
@@ -387,6 +387,12 @@ void __init smp_setup_cpu_maps(void)
}
}
@@ -36338,9 +36915,9 @@ diff -rpuN linux-2.6.18.8/arch/powerpc/kernel/setup-common.c linux-2.6.18-xen-3.
#ifdef CONFIG_PPC64
/*
* On pSeries LPAR, we need to know how many cpus
-diff -rpuN linux-2.6.18.8/arch/powerpc/kernel/udbg.c linux-2.6.18-xen-3.2.0/arch/powerpc/kernel/udbg.c
---- linux-2.6.18.8/arch/powerpc/kernel/udbg.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/kernel/udbg.c 2008-02-15 16:21:53.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/powerpc/kernel/udbg.c linux-2.6.18-xen-3.3.0/arch/powerpc/kernel/udbg.c
+--- linux-2.6.18.8/arch/powerpc/kernel/udbg.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/kernel/udbg.c 2008-08-21 11:36:07.000000000 +0200
@@ -45,6 +45,9 @@ void __init udbg_early_init(void)
#elif defined(CONFIG_PPC_EARLY_DEBUG_ISERIES)
/* For iSeries - hit Ctrl-x Ctrl-x to see the output */
@@ -36351,9 +36928,37 @@ diff -rpuN linux-2.6.18.8/arch/powerpc/kernel/udbg.c linux-2.6.18-xen-3.2.0/arch
#endif
}
-diff -rpuN linux-2.6.18.8/arch/powerpc/mm/slb_low.S linux-2.6.18-xen-3.2.0/arch/powerpc/mm/slb_low.S
---- linux-2.6.18.8/arch/powerpc/mm/slb_low.S 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/mm/slb_low.S 2008-02-15 16:21:53.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/powerpc/kernel/vdso.c linux-2.6.18-xen-3.3.0/arch/powerpc/kernel/vdso.c
+--- linux-2.6.18.8/arch/powerpc/kernel/vdso.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/kernel/vdso.c 2008-08-21 11:36:07.000000000 +0200
+@@ -282,6 +282,13 @@ int arch_setup_additional_pages(struct l
+ * pages though
+ */
+ vma->vm_flags = VM_READ|VM_EXEC|VM_MAYREAD|VM_MAYWRITE|VM_MAYEXEC;
++ /*
++ * Make sure the vDSO gets into every core dump.
++ * Dumping its contents makes post-mortem fully interpretable later
++ * without matching up the same kernel and hardware config to see
++ * what PC values meant.
++ */
++ vma->vm_flags |= VM_ALWAYSDUMP;
+ vma->vm_flags |= mm->def_flags;
+ vma->vm_page_prot = protection_map[vma->vm_flags & 0x7];
+ vma->vm_ops = &vdso_vmops;
+diff -rpuN linux-2.6.18.8/arch/powerpc/Makefile linux-2.6.18-xen-3.3.0/arch/powerpc/Makefile
+--- linux-2.6.18.8/arch/powerpc/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/Makefile 2008-08-21 11:36:07.000000000 +0200
+@@ -65,6 +65,7 @@ CPPFLAGS-$(CONFIG_PPC32) := -Iarch/$(ARC
+ AFLAGS-$(CONFIG_PPC32) := -Iarch/$(ARCH)
+ CFLAGS-$(CONFIG_PPC64) := -mminimal-toc -mtraceback=none -mcall-aixdesc
+ CFLAGS-$(CONFIG_PPC32) := -Iarch/$(ARCH) -ffixed-r2 -mmultiple
++CFLAGS-$(CONFIG_PPC_XEN) += -Iinclude/asm-$(ARCH)/xen
+ CPPFLAGS += $(CPPFLAGS-y)
+ AFLAGS += $(AFLAGS-y)
+ CFLAGS += -msoft-float -pipe $(CFLAGS-y)
+diff -rpuN linux-2.6.18.8/arch/powerpc/mm/slb_low.S linux-2.6.18-xen-3.3.0/arch/powerpc/mm/slb_low.S
+--- linux-2.6.18.8/arch/powerpc/mm/slb_low.S 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/mm/slb_low.S 2008-08-21 11:36:07.000000000 +0200
@@ -51,6 +51,23 @@ _GLOBAL(slb_allocate_realmode)
*/
bne cr7,1f
@@ -36378,9 +36983,9 @@ diff -rpuN linux-2.6.18.8/arch/powerpc/mm/slb_low.S linux-2.6.18-xen-3.2.0/arch/
/* Linear mapping encoding bits, the "li" instruction below will
* be patched by the kernel at boot
*/
-diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/Makefile linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/Makefile
---- linux-2.6.18.8/arch/powerpc/platforms/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/Makefile 2008-02-15 16:21:53.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/Makefile linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/Makefile
+--- linux-2.6.18.8/arch/powerpc/platforms/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/Makefile 2008-08-21 11:36:07.000000000 +0200
@@ -12,6 +12,8 @@ obj-$(CONFIG_PPC_85xx) += 85xx/
obj-$(CONFIG_PPC_86xx) += 86xx/
obj-$(CONFIG_PPC_PSERIES) += pseries/
@@ -36390,9 +36995,9 @@ diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/Makefile linux-2.6.18-xen-3.2.0
obj-$(CONFIG_PPC_MAPLE) += maple/
obj-$(CONFIG_PPC_CELL) += cell/
obj-$(CONFIG_EMBEDDED6xx) += embedded6xx/
-diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/pseries/iommu.c linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/pseries/iommu.c
---- linux-2.6.18.8/arch/powerpc/platforms/pseries/iommu.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/pseries/iommu.c 2008-02-15 16:21:53.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/pseries/iommu.c linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/pseries/iommu.c
+--- linux-2.6.18.8/arch/powerpc/platforms/pseries/iommu.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/pseries/iommu.c 2008-08-21 11:36:07.000000000 +0200
@@ -531,6 +531,17 @@ static void iommu_dev_setup_pSeriesLP(st
* already allocated.
*/
@@ -36411,33 +37016,9 @@ diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/pseries/iommu.c linux-2.6.18-xe
for (pdn = dn; pdn && PCI_DN(pdn) && !PCI_DN(pdn)->iommu_table;
pdn = pdn->parent) {
-diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/Makefile linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/Makefile
---- linux-2.6.18.8/arch/powerpc/platforms/xen/Makefile 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/Makefile 2008-02-15 16:21:53.000000000 -0800
-@@ -0,0 +1,20 @@
-+obj-y += gnttab.o
-+obj-y += hcall.o
-+obj-y += reboot.o
-+obj-y += setup.o
-+obj-y += smp.o
-+obj-y += time.o
-+obj-y += udbg_xen.o
-+obj-y += xen_guest.o
-+obj-y += xencomm.o
-+
-+# we need the latest __XEN_INTERFACE_VERSION__ (see xen-compat.h)
-+CFLAGS_hcall.o += -D__XEN_TOOLS__
-+
-+ifndef CONFIG_XEN_BALLOON
-+obj-y += balloon.o
-+endif
-+
-+ifndef CONFIG_XEN_UTIL
-+obj-y += util.o
-+endif
-diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/balloon.c linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/balloon.c
---- linux-2.6.18.8/arch/powerpc/platforms/xen/balloon.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/balloon.c 2008-02-15 16:21:53.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/balloon.c linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/balloon.c
+--- linux-2.6.18.8/arch/powerpc/platforms/xen/balloon.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/balloon.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,82 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
@@ -36521,9 +37102,9 @@ diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/balloon.c linux-2.6.18-xen-
+EXPORT_SYMBOL_GPL(alloc_empty_pages_and_pagevec);
+EXPORT_SYMBOL_GPL(free_empty_pages_and_pagevec);
+EXPORT_SYMBOL_GPL(balloon_release_driver_page);
-diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/gnttab.c linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/gnttab.c
---- linux-2.6.18.8/arch/powerpc/platforms/xen/gnttab.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/gnttab.c 2008-02-15 16:21:53.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/gnttab.c linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/gnttab.c
+--- linux-2.6.18.8/arch/powerpc/platforms/xen/gnttab.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/gnttab.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,468 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
@@ -36993,9 +37574,9 @@ diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/gnttab.c linux-2.6.18-xen-3
+
+ return shared;
+}
-diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/hcall.c linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/hcall.c
---- linux-2.6.18.8/arch/powerpc/platforms/xen/hcall.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/hcall.c 2008-02-15 16:21:53.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/hcall.c linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/hcall.c
+--- linux-2.6.18.8/arch/powerpc/platforms/xen/hcall.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/hcall.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,891 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
@@ -37888,9 +38469,33 @@ diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/hcall.c linux-2.6.18-xen-3.
+
+ return rc;
+}
-diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/reboot.c linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/reboot.c
---- linux-2.6.18.8/arch/powerpc/platforms/xen/reboot.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/reboot.c 2008-02-15 16:21:53.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/Makefile linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/Makefile
+--- linux-2.6.18.8/arch/powerpc/platforms/xen/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/Makefile 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,20 @@
++obj-y += gnttab.o
++obj-y += hcall.o
++obj-y += reboot.o
++obj-y += setup.o
++obj-y += smp.o
++obj-y += time.o
++obj-y += udbg_xen.o
++obj-y += xen_guest.o
++obj-y += xencomm.o
++
++# we need the latest __XEN_INTERFACE_VERSION__ (see xen-compat.h)
++CFLAGS_hcall.o += -D__XEN_TOOLS__
++
++ifndef CONFIG_XEN_BALLOON
++obj-y += balloon.o
++endif
++
++ifndef CONFIG_XEN_UTIL
++obj-y += util.o
++endif
+diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/reboot.c linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/reboot.c
+--- linux-2.6.18.8/arch/powerpc/platforms/xen/reboot.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/reboot.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,53 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
@@ -37945,9 +38550,9 @@ diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/reboot.c linux-2.6.18-xen-3
+ ppc_md.halt = domain_machine_power_off;
+ }
+}
-diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/setup.c linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/setup.c
---- linux-2.6.18.8/arch/powerpc/platforms/xen/setup.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/setup.c 2008-02-15 16:21:53.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/setup.c linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/setup.c
+--- linux-2.6.18.8/arch/powerpc/platforms/xen/setup.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/setup.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,336 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
@@ -38285,9 +38890,9 @@ diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/setup.c linux-2.6.18-xen-3.
+ .machine_crash_shutdown = xen_machine_crash_shutdown,
+#endif
+};
-diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/setup.h linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/setup.h
---- linux-2.6.18.8/arch/powerpc/platforms/xen/setup.h 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/setup.h 2008-02-15 16:21:53.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/setup.h linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/setup.h
+--- linux-2.6.18.8/arch/powerpc/platforms/xen/setup.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/setup.h 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,47 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
@@ -38336,9 +38941,9 @@ diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/setup.h linux-2.6.18-xen-3.
+
+extern void __init xen_setup_time(struct machdep_calls *host_md);
+extern void xen_setup_smp(void);
-diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/smp.c linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/smp.c
---- linux-2.6.18.8/arch/powerpc/platforms/xen/smp.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/smp.c 2008-02-15 16:21:53.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/smp.c linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/smp.c
+--- linux-2.6.18.8/arch/powerpc/platforms/xen/smp.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/smp.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,444 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
@@ -38784,9 +39389,9 @@ diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/smp.c linux-2.6.18-xen-3.2.
+ xen_boot_secondary_vcpus();
+ smp_release_cpus();
+}
-diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/time.c linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/time.c
---- linux-2.6.18.8/arch/powerpc/platforms/xen/time.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/time.c 2008-02-15 16:21:53.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/time.c linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/time.c
+--- linux-2.6.18.8/arch/powerpc/platforms/xen/time.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/time.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,114 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
@@ -38902,9 +39507,9 @@ diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/time.c linux-2.6.18-xen-3.2
+ ppc_md.get_rtc_time = xen_get_rtc_time;
+ host_md_get_rtc_time = host_md->get_rtc_time;
+}
-diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/udbg_xen.c linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/udbg_xen.c
---- linux-2.6.18.8/arch/powerpc/platforms/xen/udbg_xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/udbg_xen.c 2008-02-15 16:21:53.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/udbg_xen.c linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/udbg_xen.c
+--- linux-2.6.18.8/arch/powerpc/platforms/xen/udbg_xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/udbg_xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,164 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
@@ -39070,9 +39675,9 @@ diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/udbg_xen.c linux-2.6.18-xen
+ intf = (struct xencons_interface *)mfn_to_virt(__console_mfn);
+ }
+}
-diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/util.c linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/util.c
---- linux-2.6.18.8/arch/powerpc/platforms/xen/util.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/util.c 2008-02-15 16:21:53.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/util.c linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/util.c
+--- linux-2.6.18.8/arch/powerpc/platforms/xen/util.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/util.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,70 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
@@ -39144,40 +39749,9 @@ diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/util.c linux-2.6.18-xen-3.2
+ preempt_enable();
+}
+EXPORT_SYMBOL_GPL(unlock_vm_area);
-diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/xen_guest.S linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/xen_guest.S
---- linux-2.6.18.8/arch/powerpc/platforms/xen/xen_guest.S 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/xen_guest.S 2008-02-15 16:21:53.000000000 -0800
-@@ -0,0 +1,27 @@
-+/*
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ * Copyright (C) IBM Corp. 2006
-+ *
-+ * Authors: Jimi Xenidis <jimix@watson.ibm.com>
-+ */
-+
-+ .section __xen_guest
-+ .ascii "GUEST_OS=linux"
-+ .ascii ",GUEST_VER=xen-3.0"
-+ .ascii ",XEN_VER=xen-3.0"
-+ .ascii ",VIRT_BASE=0xC000000000000000"
-+ .ascii ",LOADER=generic"
-+ .byte 0
-diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/xencomm.c linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/xencomm.c
---- linux-2.6.18.8/arch/powerpc/platforms/xen/xencomm.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/platforms/xen/xencomm.c 2008-02-15 16:21:53.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/xencomm.c linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/xencomm.c
+--- linux-2.6.18.8/arch/powerpc/platforms/xen/xencomm.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/xencomm.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,54 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
@@ -39233,9 +39807,40 @@ diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/xencomm.c linux-2.6.18-xen-
+
+ return (page_to_pfn(page) << PAGE_SHIFT) | (vaddr & ~PAGE_MASK);
+}
-diff -rpuN linux-2.6.18.8/arch/powerpc/sysdev/mpic.c linux-2.6.18-xen-3.2.0/arch/powerpc/sysdev/mpic.c
---- linux-2.6.18.8/arch/powerpc/sysdev/mpic.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/sysdev/mpic.c 2008-02-15 16:21:53.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/powerpc/platforms/xen/xen_guest.S linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/xen_guest.S
+--- linux-2.6.18.8/arch/powerpc/platforms/xen/xen_guest.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/platforms/xen/xen_guest.S 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,27 @@
++/*
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ * Copyright (C) IBM Corp. 2006
++ *
++ * Authors: Jimi Xenidis <jimix@watson.ibm.com>
++ */
++
++ .section __xen_guest
++ .ascii "GUEST_OS=linux"
++ .ascii ",GUEST_VER=xen-3.0"
++ .ascii ",XEN_VER=xen-3.0"
++ .ascii ",VIRT_BASE=0xC000000000000000"
++ .ascii ",LOADER=generic"
++ .byte 0
+diff -rpuN linux-2.6.18.8/arch/powerpc/sysdev/mpic.c linux-2.6.18-xen-3.3.0/arch/powerpc/sysdev/mpic.c
+--- linux-2.6.18.8/arch/powerpc/sysdev/mpic.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/sysdev/mpic.c 2008-08-21 11:36:07.000000000 +0200
@@ -765,6 +765,9 @@ static int mpic_host_map(struct irq_host
else if (hw >= MPIC_VEC_IPI_0) {
WARN_ON(!(mpic->flags & MPIC_PRIMARY));
@@ -39264,9 +39869,9 @@ diff -rpuN linux-2.6.18.8/arch/powerpc/sysdev/mpic.c linux-2.6.18-xen-3.2.0/arch
/* Initialize interrupt sources */
if (mpic->irq_count == 0)
mpic->irq_count = mpic->num_sources;
-diff -rpuN linux-2.6.18.8/arch/powerpc/xmon/xmon.c linux-2.6.18-xen-3.2.0/arch/powerpc/xmon/xmon.c
---- linux-2.6.18.8/arch/powerpc/xmon/xmon.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/powerpc/xmon/xmon.c 2008-02-15 16:21:53.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/powerpc/xmon/xmon.c linux-2.6.18-xen-3.3.0/arch/powerpc/xmon/xmon.c
+--- linux-2.6.18.8/arch/powerpc/xmon/xmon.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/powerpc/xmon/xmon.c 2008-08-21 11:36:07.000000000 +0200
@@ -752,6 +752,9 @@ cmds(struct pt_regs *excp)
cmd = inchar();
}
@@ -39277,238 +39882,9 @@ diff -rpuN linux-2.6.18.8/arch/powerpc/xmon/xmon.c linux-2.6.18-xen-3.2.0/arch/p
case 'm':
cmd = inchar();
switch (cmd) {
-diff -rpuN linux-2.6.18.8/arch/x86_64/Kconfig linux-2.6.18-xen-3.2.0/arch/x86_64/Kconfig
---- linux-2.6.18.8/arch/x86_64/Kconfig 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/Kconfig 2008-02-15 16:21:55.000000000 -0800
-@@ -135,6 +135,23 @@ config GENERIC_CPU
-
- endchoice
-
-+config X86_64_XEN
-+ bool "Enable Xen compatible kernel"
-+ select XEN
-+ select SWIOTLB
-+ help
-+ This option will compile a kernel compatible with Xen hypervisor
-+
-+config X86_NO_TSS
-+ bool
-+ depends on X86_64_XEN
-+ default y
-+
-+config X86_NO_IDT
-+ bool
-+ depends on X86_64_XEN
-+ default y
-+
- #
- # Define implied options from the CPU selection here
- #
-@@ -155,6 +172,7 @@ config X86_INTERNODE_CACHE_BYTES
-
- config X86_TSC
- bool
-+ depends on !X86_64_XEN
- default y
-
- config X86_GOOD_APIC
-@@ -197,7 +215,7 @@ config X86_CPUID
-
- config X86_HT
- bool
-- depends on SMP && !MK8
-+ depends on SMP && !MK8 && !X86_64_XEN
- default y
-
- config MATH_EMULATION
-@@ -211,14 +229,22 @@ config EISA
-
- config X86_IO_APIC
- bool
-+ depends !XEN_UNPRIVILEGED_GUEST
-+ default y
-+
-+config X86_XEN_GENAPIC
-+ bool
-+ depends on X86_64_XEN
- default y
-
- config X86_LOCAL_APIC
- bool
-+ depends !XEN_UNPRIVILEGED_GUEST
- default y
-
- config MTRR
- bool "MTRR (Memory Type Range Register) support"
-+ depends on !XEN_UNPRIVILEGED_GUEST
- ---help---
- On Intel P6 family processors (Pentium Pro, Pentium II and later)
- the Memory Type Range Registers (MTRRs) may be used to control
-@@ -259,7 +285,7 @@ config SMP
-
- config SCHED_SMT
- bool "SMT (Hyperthreading) scheduler support"
-- depends on SMP
-+ depends on SMP && !X86_64_XEN
- default n
- help
- SMT scheduler support improves the CPU scheduler's decision making
-@@ -269,7 +295,7 @@ config SCHED_SMT
-
- config SCHED_MC
- bool "Multi-core scheduler support"
-- depends on SMP
-+ depends on SMP && !X86_64_XEN
- default y
- help
- Multi-core scheduler support improves the CPU scheduler's decision
-@@ -280,7 +306,7 @@ source "kernel/Kconfig.preempt"
-
- config NUMA
- bool "Non Uniform Memory Access (NUMA) Support"
-- depends on SMP
-+ depends on SMP && !X86_64_XEN
- help
- Enable NUMA (Non Uniform Memory Access) support. The kernel
- will try to allocate memory used by a CPU on the local memory
-@@ -341,7 +367,7 @@ config ARCH_DISCONTIGMEM_DEFAULT
-
- config ARCH_SPARSEMEM_ENABLE
- def_bool y
-- depends on (NUMA || EXPERIMENTAL)
-+ depends on (NUMA || EXPERIMENTAL) && !X86_64_XEN
-
- config ARCH_MEMORY_PROBE
- def_bool y
-@@ -365,6 +391,7 @@ config NR_CPUS
- int "Maximum number of CPUs (2-256)"
- range 2 255
- depends on SMP
-+ default "16" if X86_64_XEN
- default "8"
- help
- This allows you to specify the maximum number of CPUs which this
-@@ -387,6 +414,7 @@ config ARCH_ENABLE_MEMORY_HOTPLUG
-
- config HPET_TIMER
- bool
-+ depends on !X86_64_XEN
- default y
- help
- Use the IA-PC HPET (High Precision Event Timer) to manage
-@@ -407,7 +435,7 @@ config IOMMU
- default y
- select SWIOTLB
- select AGP
-- depends on PCI
-+ depends on PCI && !X86_64_XEN
- help
- Support for full DMA access of devices with 32bit memory access only
- on systems with more than 3GB. This is usually needed for USB,
-@@ -423,7 +451,7 @@ config CALGARY_IOMMU
- bool "IBM Calgary IOMMU support"
- default y
- select SWIOTLB
-- depends on PCI && EXPERIMENTAL
-+ depends on PCI && !X86_64_XEN && EXPERIMENTAL
- help
- Support for hardware IOMMUs in IBM's xSeries x366 and x460
- systems. Needed to run systems with more than 3GB of memory
-@@ -444,6 +472,7 @@ config SWIOTLB
-
- config X86_MCE
- bool "Machine check support" if EMBEDDED
-+ depends on !X86_64_XEN
- default y
- help
- Include a machine check error handler to report hardware errors.
-@@ -469,7 +498,7 @@ config X86_MCE_AMD
-
- config KEXEC
- bool "kexec system call (EXPERIMENTAL)"
-- depends on EXPERIMENTAL
-+ depends on EXPERIMENTAL && !XEN_UNPRIVILEGED_GUEST
- 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
-@@ -564,8 +593,9 @@ config GENERIC_PENDING_IRQ
- default y
-
- menu "Power management options"
-+ depends on !XEN_UNPRIVILEGED_GUEST
-
--source kernel/power/Kconfig
-+source "kernel/power/Kconfig"
-
- source "drivers/acpi/Kconfig"
-
-@@ -588,6 +618,21 @@ config PCI_MMCONFIG
- bool "Support mmconfig PCI config space access"
- depends on PCI && ACPI
-
-+config XEN_PCIDEV_FRONTEND
-+ bool "Xen PCI Frontend"
-+ depends on PCI && X86_64_XEN
-+ default y
-+ help
-+ The PCI device frontend driver allows the kernel to import arbitrary
-+ PCI devices from a PCI backend to support PCI driver domains.
-+
-+config XEN_PCIDEV_FE_DEBUG
-+ bool "Xen PCI Frontend Debugging"
-+ depends on XEN_PCIDEV_FRONTEND
-+ default n
-+ help
-+ Enables some debug statements within the PCI Frontend.
-+
- source "drivers/pci/pcie/Kconfig"
-
- source "drivers/pci/Kconfig"
-@@ -658,4 +703,6 @@ source "security/Kconfig"
-
- source "crypto/Kconfig"
-
-+source "drivers/xen/Kconfig"
-+
- source "lib/Kconfig"
-diff -rpuN linux-2.6.18.8/arch/x86_64/Makefile linux-2.6.18-xen-3.2.0/arch/x86_64/Makefile
---- linux-2.6.18.8/arch/x86_64/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/Makefile 2008-02-15 16:21:55.000000000 -0800
-@@ -71,9 +71,22 @@ drivers-$(CONFIG_OPROFILE) += arch/x86_
-
- boot := arch/x86_64/boot
-
--PHONY += bzImage bzlilo install archmrproper \
-+PHONY += bzImage bzlilo vmlinuz install archmrproper \
- fdimage fdimage144 fdimage288 isoimage archclean
-
-+ifdef CONFIG_XEN
-+CPPFLAGS := -D__XEN_INTERFACE_VERSION__=$(CONFIG_XEN_INTERFACE_VERSION) \
-+ -Iinclude$(if $(KBUILD_SRC),2)/asm/mach-xen $(CPPFLAGS)
-+LDFLAGS_vmlinux := -e startup_64
-+#Default target when executing "make"
-+all: vmlinuz
-+
-+BOOTIMAGE := $(boot)/vmlinuz
-+KBUILD_IMAGE := $(BOOTIMAGE)
-+
-+vmlinuz: vmlinux
-+ $(Q)$(MAKE) $(build)=$(boot) $(BOOTIMAGE)
-+else
- #Default target when executing "make"
- all: bzImage
-
-@@ -91,6 +104,7 @@ bzdisk: vmlinux
-
- fdimage fdimage144 fdimage288 isoimage: vmlinux
- $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) $@
-+endif
-
- install:
- $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) $@
-diff -rpuN linux-2.6.18.8/arch/x86_64/boot/Makefile linux-2.6.18-xen-3.2.0/arch/x86_64/boot/Makefile
---- linux-2.6.18.8/arch/x86_64/boot/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/boot/Makefile 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/boot/Makefile linux-2.6.18-xen-3.3.0/arch/x86_64/boot/Makefile
+--- linux-2.6.18.8/arch/x86_64/boot/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/boot/Makefile 2008-08-21 11:36:07.000000000 +0200
@@ -26,7 +26,7 @@ SVGA_MODE := -DSVGA_MODE=NORMAL_VGA
#RAMDISK := -DRAMDISK=512
@@ -39532,114 +39908,83 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/boot/Makefile linux-2.6.18-xen-3.2.0/arch/
+
install:
sh $(srctree)/$(src)/install.sh $(KERNELRELEASE) $(BOOTIMAGE) System.map "$(INSTALL_PATH)"
-diff -rpuN linux-2.6.18.8/arch/x86_64/ia32/Makefile linux-2.6.18-xen-3.2.0/arch/x86_64/ia32/Makefile
---- linux-2.6.18.8/arch/x86_64/ia32/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/ia32/Makefile 2008-02-15 16:21:55.000000000 -0800
-@@ -14,11 +14,14 @@ obj-$(CONFIG_IA32_AOUT) += ia32_aout.o
- audit-class-$(CONFIG_AUDIT) := audit.o
- obj-$(CONFIG_IA32_EMULATION) += $(audit-class-y)
-
-+syscall32-types-y := sysenter syscall
-+syscall32-types-$(subst 1,$(CONFIG_XEN),$(shell expr $(CONFIG_XEN_COMPAT)0 '<' 0x0302000)) += int80
-+
- $(obj)/syscall32_syscall.o: \
-- $(foreach F,sysenter syscall,$(obj)/vsyscall-$F.so)
-+ $(foreach F,$(syscall32-types-y),$(obj)/vsyscall-$F.so)
+diff -rpuN linux-2.6.18.8/arch/x86_64/ia32/ia32_binfmt.c linux-2.6.18-xen-3.3.0/arch/x86_64/ia32/ia32_binfmt.c
+--- linux-2.6.18.8/arch/x86_64/ia32/ia32_binfmt.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/ia32/ia32_binfmt.c 2008-08-21 11:36:07.000000000 +0200
+@@ -65,55 +65,6 @@ typedef unsigned int elf_greg_t;
+ #define ELF_NGREG (sizeof (struct user_regs_struct32) / sizeof(elf_greg_t))
+ typedef elf_greg_t elf_gregset_t[ELF_NGREG];
- # Teach kbuild about targets
--targets := $(foreach F,sysenter syscall,vsyscall-$F.o vsyscall-$F.so)
-+targets := $(foreach F,$(syscall32-types-y),vsyscall-$F.o vsyscall-$F.so)
-
- # The DSO images are built using a special linker script
- quiet_cmd_syscall = SYSCALL $@
-@@ -27,9 +30,10 @@ quiet_cmd_syscall = SYSCALL $@
- -Wl,-soname=linux-gate.so.1 -o $@ \
- -Wl,-T,$(filter-out FORCE,$^)
-
--$(obj)/vsyscall-sysenter.so $(obj)/vsyscall-syscall.so: \
-+$(foreach F,$(syscall32-types-y),$(obj)/vsyscall-$F.so): \
- $(obj)/vsyscall-%.so: $(src)/vsyscall.lds $(obj)/vsyscall-%.o FORCE
- $(call if_changed,syscall)
-
--AFLAGS_vsyscall-sysenter.o = -m32 -Wa,-32
--AFLAGS_vsyscall-syscall.o = -m32 -Wa,-32
-+AFLAGS_vsyscall-sysenter.o = -m32 -Wa,-32 -Iarch/i386/kernel
-+AFLAGS_vsyscall-syscall.o = -m32 -Wa,-32 -Iarch/i386/kernel
-+AFLAGS_vsyscall-int80.o = -m32 -Wa,-32 -Iarch/i386/kernel
-diff -rpuN linux-2.6.18.8/arch/x86_64/ia32/ia32_signal.c linux-2.6.18-xen-3.2.0/arch/x86_64/ia32/ia32_signal.c
---- linux-2.6.18.8/arch/x86_64/ia32/ia32_signal.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/ia32/ia32_signal.c 2008-02-15 16:21:55.000000000 -0800
-@@ -113,25 +113,19 @@ int copy_siginfo_from_user32(siginfo_t *
- }
-
- asmlinkage long
--sys32_sigsuspend(int history0, int history1, old_sigset_t mask,
-- struct pt_regs *regs)
-+sys32_sigsuspend(int history0, int history1, old_sigset_t mask)
- {
-- sigset_t saveset;
+-/*
+- * These macros parameterize elf_core_dump in fs/binfmt_elf.c to write out
+- * extra segments containing the vsyscall DSO contents. Dumping its
+- * contents makes post-mortem fully interpretable later without matching up
+- * the same kernel and hardware config to see what PC values meant.
+- * Dumping its extra ELF program headers includes all the other information
+- * a debugger needs to easily find how the vsyscall DSO was being used.
+- */
+-#define ELF_CORE_EXTRA_PHDRS (find_vma(current->mm, VSYSCALL32_BASE) ? \
+- (VSYSCALL32_EHDR->e_phnum) : 0)
+-#define ELF_CORE_WRITE_EXTRA_PHDRS \
+-do { \
+- if (find_vma(current->mm, VSYSCALL32_BASE)) { \
+- const struct elf32_phdr *const vsyscall_phdrs = \
+- (const struct elf32_phdr *) (VSYSCALL32_BASE \
+- + VSYSCALL32_EHDR->e_phoff);\
+- int i; \
+- Elf32_Off ofs = 0; \
+- for (i = 0; i < VSYSCALL32_EHDR->e_phnum; ++i) { \
+- struct elf32_phdr phdr = vsyscall_phdrs[i]; \
+- if (phdr.p_type == PT_LOAD) { \
+- BUG_ON(ofs != 0); \
+- ofs = phdr.p_offset = offset; \
+- phdr.p_memsz = PAGE_ALIGN(phdr.p_memsz); \
+- phdr.p_filesz = phdr.p_memsz; \
+- offset += phdr.p_filesz; \
+- } \
+- else \
+- phdr.p_offset += ofs; \
+- phdr.p_paddr = 0; /* match other core phdrs */ \
+- DUMP_WRITE(&phdr, sizeof(phdr)); \
+- } \
+- } \
+-} while (0)
+-#define ELF_CORE_WRITE_EXTRA_DATA \
+-do { \
+- if (find_vma(current->mm, VSYSCALL32_BASE)) { \
+- const struct elf32_phdr *const vsyscall_phdrs = \
+- (const struct elf32_phdr *) (VSYSCALL32_BASE \
+- + VSYSCALL32_EHDR->e_phoff); \
+- int i; \
+- for (i = 0; i < VSYSCALL32_EHDR->e_phnum; ++i) { \
+- if (vsyscall_phdrs[i].p_type == PT_LOAD) \
+- DUMP_WRITE((void *) (u64) vsyscall_phdrs[i].p_vaddr,\
+- PAGE_ALIGN(vsyscall_phdrs[i].p_memsz)); \
+- } \
+- } \
+-} while (0)
-
- mask &= _BLOCKABLE;
- spin_lock_irq(&current->sighand->siglock);
-- saveset = current->blocked;
-+ current->saved_sigmask = current->blocked;
- siginitset(&current->blocked, mask);
- recalc_sigpending();
- spin_unlock_irq(&current->sighand->siglock);
-
-- regs->rax = -EINTR;
-- while (1) {
-- current->state = TASK_INTERRUPTIBLE;
-- schedule();
-- if (do_signal(regs, &saveset))
-- return -EINTR;
-- }
-+ current->state = TASK_INTERRUPTIBLE;
-+ schedule();
-+ set_thread_flag(TIF_RESTORE_SIGMASK);
-+ return -ERESTARTNOHAND;
- }
-
- asmlinkage long
-@@ -508,11 +502,11 @@ int ia32_setup_frame(int sig, struct k_s
- current->comm, current->pid, frame, regs->rip, frame->pretcode);
- #endif
-
-- return 1;
-+ return 0;
-
- give_sigsegv:
- force_sigsegv(sig, current);
-- return 0;
-+ return -EFAULT;
- }
-
- int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
-@@ -595,7 +589,7 @@ int ia32_setup_rt_frame(int sig, struct
- regs->ss = __USER32_DS;
-
- set_fs(USER_DS);
-- regs->eflags &= ~TF_MASK;
-+ regs->eflags &= ~TF_MASK;
- if (test_thread_flag(TIF_SINGLESTEP))
- ptrace_notify(SIGTRAP);
-
-@@ -604,9 +598,9 @@ int ia32_setup_rt_frame(int sig, struct
- current->comm, current->pid, frame, regs->rip, frame->pretcode);
- #endif
-
-- return 1;
-+ return 0;
-
- give_sigsegv:
- force_sigsegv(sig, current);
-- return 0;
-+ return -EFAULT;
- }
-diff -rpuN linux-2.6.18.8/arch/x86_64/ia32/ia32entry-xen.S linux-2.6.18-xen-3.2.0/arch/x86_64/ia32/ia32entry-xen.S
---- linux-2.6.18.8/arch/x86_64/ia32/ia32entry-xen.S 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/ia32/ia32entry-xen.S 2008-02-15 16:21:55.000000000 -0800
-@@ -0,0 +1,668 @@
+ struct elf_siginfo
+ {
+ int si_signo; /* signal number */
+diff -rpuN linux-2.6.18.8/arch/x86_64/ia32/ia32entry.S linux-2.6.18-xen-3.3.0/arch/x86_64/ia32/ia32entry.S
+--- linux-2.6.18.8/arch/x86_64/ia32/ia32entry.S 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/ia32/ia32entry.S 2008-08-21 11:36:07.000000000 +0200
+@@ -703,8 +703,8 @@ ia32_sys_call_table:
+ .quad sys_readlinkat /* 305 */
+ .quad sys_fchmodat
+ .quad sys_faccessat
+- .quad quiet_ni_syscall /* pselect6 for now */
+- .quad quiet_ni_syscall /* ppoll for now */
++ .quad compat_sys_pselect6
++ .quad compat_sys_ppoll
+ .quad sys_unshare /* 310 */
+ .quad compat_sys_set_robust_list
+ .quad compat_sys_get_robust_list
+diff -rpuN linux-2.6.18.8/arch/x86_64/ia32/ia32entry-xen.S linux-2.6.18-xen-3.3.0/arch/x86_64/ia32/ia32entry-xen.S
+--- linux-2.6.18.8/arch/x86_64/ia32/ia32entry-xen.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/ia32/ia32entry-xen.S 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,666 @@
+/*
+ * Compatibility mode system call entry point for x86-64.
+ *
@@ -39692,8 +40037,6 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/ia32/ia32entry-xen.S linux-2.6.18-xen-3.2.
+ movl \offset+72(%rsp),%eax
+ .endm
+
-+#include "../kernel/xen_entry.S"
-+
+ .macro CFI_STARTPROC32 simple
+ CFI_STARTPROC \simple
+ CFI_UNDEFINED r8
@@ -40308,23 +40651,162 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/ia32/ia32entry-xen.S linux-2.6.18-xen-3.2.
+ .quad compat_sys_vmsplice
+ .quad compat_sys_move_pages
+ia32_syscall_end:
-diff -rpuN linux-2.6.18.8/arch/x86_64/ia32/ia32entry.S linux-2.6.18-xen-3.2.0/arch/x86_64/ia32/ia32entry.S
---- linux-2.6.18.8/arch/x86_64/ia32/ia32entry.S 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/ia32/ia32entry.S 2008-02-15 16:21:55.000000000 -0800
-@@ -703,8 +703,8 @@ ia32_sys_call_table:
- .quad sys_readlinkat /* 305 */
- .quad sys_fchmodat
- .quad sys_faccessat
-- .quad quiet_ni_syscall /* pselect6 for now */
-- .quad quiet_ni_syscall /* ppoll for now */
-+ .quad compat_sys_pselect6
-+ .quad compat_sys_ppoll
- .quad sys_unshare /* 310 */
- .quad compat_sys_set_robust_list
- .quad compat_sys_get_robust_list
-diff -rpuN linux-2.6.18.8/arch/x86_64/ia32/syscall32-xen.c linux-2.6.18-xen-3.2.0/arch/x86_64/ia32/syscall32-xen.c
---- linux-2.6.18.8/arch/x86_64/ia32/syscall32-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/ia32/syscall32-xen.c 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/ia32/ia32_signal.c linux-2.6.18-xen-3.3.0/arch/x86_64/ia32/ia32_signal.c
+--- linux-2.6.18.8/arch/x86_64/ia32/ia32_signal.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/ia32/ia32_signal.c 2008-08-21 11:36:07.000000000 +0200
+@@ -113,25 +113,19 @@ int copy_siginfo_from_user32(siginfo_t *
+ }
+
+ asmlinkage long
+-sys32_sigsuspend(int history0, int history1, old_sigset_t mask,
+- struct pt_regs *regs)
++sys32_sigsuspend(int history0, int history1, old_sigset_t mask)
+ {
+- sigset_t saveset;
+-
+ mask &= _BLOCKABLE;
+ spin_lock_irq(&current->sighand->siglock);
+- saveset = current->blocked;
++ current->saved_sigmask = current->blocked;
+ siginitset(&current->blocked, mask);
+ recalc_sigpending();
+ spin_unlock_irq(&current->sighand->siglock);
+
+- regs->rax = -EINTR;
+- while (1) {
+- current->state = TASK_INTERRUPTIBLE;
+- schedule();
+- if (do_signal(regs, &saveset))
+- return -EINTR;
+- }
++ current->state = TASK_INTERRUPTIBLE;
++ schedule();
++ set_thread_flag(TIF_RESTORE_SIGMASK);
++ return -ERESTARTNOHAND;
+ }
+
+ asmlinkage long
+@@ -508,11 +502,11 @@ int ia32_setup_frame(int sig, struct k_s
+ current->comm, current->pid, frame, regs->rip, frame->pretcode);
+ #endif
+
+- return 1;
++ return 0;
+
+ give_sigsegv:
+ force_sigsegv(sig, current);
+- return 0;
++ return -EFAULT;
+ }
+
+ int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
+@@ -595,7 +589,7 @@ int ia32_setup_rt_frame(int sig, struct
+ regs->ss = __USER32_DS;
+
+ set_fs(USER_DS);
+- regs->eflags &= ~TF_MASK;
++ regs->eflags &= ~TF_MASK;
+ if (test_thread_flag(TIF_SINGLESTEP))
+ ptrace_notify(SIGTRAP);
+
+@@ -604,9 +598,9 @@ int ia32_setup_rt_frame(int sig, struct
+ current->comm, current->pid, frame, regs->rip, frame->pretcode);
+ #endif
+
+- return 1;
++ return 0;
+
+ give_sigsegv:
+ force_sigsegv(sig, current);
+- return 0;
++ return -EFAULT;
+ }
+diff -rpuN linux-2.6.18.8/arch/x86_64/ia32/Makefile linux-2.6.18-xen-3.3.0/arch/x86_64/ia32/Makefile
+--- linux-2.6.18.8/arch/x86_64/ia32/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/ia32/Makefile 2008-08-21 11:36:07.000000000 +0200
+@@ -14,11 +14,14 @@ obj-$(CONFIG_IA32_AOUT) += ia32_aout.o
+ audit-class-$(CONFIG_AUDIT) := audit.o
+ obj-$(CONFIG_IA32_EMULATION) += $(audit-class-y)
+
++syscall32-types-y := sysenter syscall
++syscall32-types-$(subst 1,$(CONFIG_XEN),$(shell expr $(CONFIG_XEN_COMPAT)0 '<' 0x0302000)) += int80
++
+ $(obj)/syscall32_syscall.o: \
+- $(foreach F,sysenter syscall,$(obj)/vsyscall-$F.so)
++ $(foreach F,$(syscall32-types-y),$(obj)/vsyscall-$F.so)
+
+ # Teach kbuild about targets
+-targets := $(foreach F,sysenter syscall,vsyscall-$F.o vsyscall-$F.so)
++targets := $(foreach F,$(syscall32-types-y),vsyscall-$F.o vsyscall-$F.so)
+
+ # The DSO images are built using a special linker script
+ quiet_cmd_syscall = SYSCALL $@
+@@ -27,9 +30,10 @@ quiet_cmd_syscall = SYSCALL $@
+ -Wl,-soname=linux-gate.so.1 -o $@ \
+ -Wl,-T,$(filter-out FORCE,$^)
+
+-$(obj)/vsyscall-sysenter.so $(obj)/vsyscall-syscall.so: \
++$(foreach F,$(syscall32-types-y),$(obj)/vsyscall-$F.so): \
+ $(obj)/vsyscall-%.so: $(src)/vsyscall.lds $(obj)/vsyscall-%.o FORCE
+ $(call if_changed,syscall)
+
+-AFLAGS_vsyscall-sysenter.o = -m32 -Wa,-32
+-AFLAGS_vsyscall-syscall.o = -m32 -Wa,-32
++AFLAGS_vsyscall-sysenter.o = -m32 -Wa,-32 -Iarch/i386/kernel
++AFLAGS_vsyscall-syscall.o = -m32 -Wa,-32 -Iarch/i386/kernel
++AFLAGS_vsyscall-int80.o = -m32 -Wa,-32 -Iarch/i386/kernel
+diff -rpuN linux-2.6.18.8/arch/x86_64/ia32/syscall32.c linux-2.6.18-xen-3.3.0/arch/x86_64/ia32/syscall32.c
+--- linux-2.6.18.8/arch/x86_64/ia32/syscall32.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/ia32/syscall32.c 2008-08-21 11:36:07.000000000 +0200
+@@ -59,6 +59,13 @@ int syscall32_setup_pages(struct linux_b
+ vma->vm_end = VSYSCALL32_END;
+ /* MAYWRITE to allow gdb to COW and set breakpoints */
+ vma->vm_flags = VM_READ|VM_EXEC|VM_MAYREAD|VM_MAYEXEC|VM_MAYWRITE;
++ /*
++ * Make sure the vDSO gets into every core dump.
++ * Dumping its contents makes post-mortem fully interpretable later
++ * without matching up the same kernel and hardware config to see
++ * what PC values meant.
++ */
++ vma->vm_flags |= VM_ALWAYSDUMP;
+ vma->vm_flags |= mm->def_flags;
+ vma->vm_page_prot = protection_map[vma->vm_flags & 7];
+ vma->vm_ops = &syscall32_vm_ops;
+diff -rpuN linux-2.6.18.8/arch/x86_64/ia32/syscall32_syscall-xen.S linux-2.6.18-xen-3.3.0/arch/x86_64/ia32/syscall32_syscall-xen.S
+--- linux-2.6.18.8/arch/x86_64/ia32/syscall32_syscall-xen.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/ia32/syscall32_syscall-xen.S 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,28 @@
++/* 32bit VDSOs mapped into user space. */
++
++ .section ".init.data","aw"
++
++#if CONFIG_XEN_COMPAT < 0x030200
++
++ .globl syscall32_int80
++ .globl syscall32_int80_end
++
++syscall32_int80:
++ .incbin "arch/x86_64/ia32/vsyscall-int80.so"
++syscall32_int80_end:
++
++#endif
++
++ .globl syscall32_syscall
++ .globl syscall32_syscall_end
++
++syscall32_syscall:
++ .incbin "arch/x86_64/ia32/vsyscall-syscall.so"
++syscall32_syscall_end:
++
++ .globl syscall32_sysenter
++ .globl syscall32_sysenter_end
++
++syscall32_sysenter:
++ .incbin "arch/x86_64/ia32/vsyscall-sysenter.so"
++syscall32_sysenter_end:
+diff -rpuN linux-2.6.18.8/arch/x86_64/ia32/syscall32-xen.c linux-2.6.18-xen-3.3.0/arch/x86_64/ia32/syscall32-xen.c
+--- linux-2.6.18.8/arch/x86_64/ia32/syscall32-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/ia32/syscall32-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,137 @@
+/* Copyright 2002,2003 Andi Kleen, SuSE Labs */
+
@@ -40463,41 +40945,9 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/ia32/syscall32-xen.c linux-2.6.18-xen-3.2.
+ if (use_sysenter < 0)
+ use_sysenter = (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL);
+}
-diff -rpuN linux-2.6.18.8/arch/x86_64/ia32/syscall32_syscall-xen.S linux-2.6.18-xen-3.2.0/arch/x86_64/ia32/syscall32_syscall-xen.S
---- linux-2.6.18.8/arch/x86_64/ia32/syscall32_syscall-xen.S 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/ia32/syscall32_syscall-xen.S 2008-02-15 16:21:55.000000000 -0800
-@@ -0,0 +1,28 @@
-+/* 32bit VDSOs mapped into user space. */
-+
-+ .section ".init.data","aw"
-+
-+#if CONFIG_XEN_COMPAT < 0x030200
-+
-+ .globl syscall32_int80
-+ .globl syscall32_int80_end
-+
-+syscall32_int80:
-+ .incbin "arch/x86_64/ia32/vsyscall-int80.so"
-+syscall32_int80_end:
-+
-+#endif
-+
-+ .globl syscall32_syscall
-+ .globl syscall32_syscall_end
-+
-+syscall32_syscall:
-+ .incbin "arch/x86_64/ia32/vsyscall-syscall.so"
-+syscall32_syscall_end:
-+
-+ .globl syscall32_sysenter
-+ .globl syscall32_sysenter_end
-+
-+syscall32_sysenter:
-+ .incbin "arch/x86_64/ia32/vsyscall-sysenter.so"
-+syscall32_sysenter_end:
-diff -rpuN linux-2.6.18.8/arch/x86_64/ia32/vsyscall-int80.S linux-2.6.18-xen-3.2.0/arch/x86_64/ia32/vsyscall-int80.S
---- linux-2.6.18.8/arch/x86_64/ia32/vsyscall-int80.S 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/ia32/vsyscall-int80.S 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/ia32/vsyscall-int80.S linux-2.6.18-xen-3.3.0/arch/x86_64/ia32/vsyscall-int80.S
+--- linux-2.6.18.8/arch/x86_64/ia32/vsyscall-int80.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/ia32/vsyscall-int80.S 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,58 @@
+/*
+ * Code for the vsyscall page. This version uses the old int $0x80 method.
@@ -40557,9 +41007,9 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/ia32/vsyscall-int80.S linux-2.6.18-xen-3.2
+ */
+#define SYSCALL_ENTER_KERNEL int $0x80
+#include "vsyscall-sigreturn.S"
-diff -rpuN linux-2.6.18.8/arch/x86_64/ia32/vsyscall-sigreturn.S linux-2.6.18-xen-3.2.0/arch/x86_64/ia32/vsyscall-sigreturn.S
---- linux-2.6.18.8/arch/x86_64/ia32/vsyscall-sigreturn.S 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/ia32/vsyscall-sigreturn.S 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/ia32/vsyscall-sigreturn.S linux-2.6.18-xen-3.3.0/arch/x86_64/ia32/vsyscall-sigreturn.S
+--- linux-2.6.18.8/arch/x86_64/ia32/vsyscall-sigreturn.S 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/ia32/vsyscall-sigreturn.S 2008-08-21 11:36:07.000000000 +0200
@@ -139,5 +139,5 @@ __kernel_rt_sigreturn:
.align 4
.LENDFDE3:
@@ -40567,48 +41017,219 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/ia32/vsyscall-sigreturn.S linux-2.6.18-xen
-#include "../../i386/kernel/vsyscall-note.S"
+#include <vsyscall-note.S>
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/Makefile linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/Makefile
---- linux-2.6.18.8/arch/x86_64/kernel/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/Makefile 2008-02-15 16:21:55.000000000 -0800
-@@ -21,11 +21,13 @@ obj-$(CONFIG_MICROCODE) += microcode.o
- obj-$(CONFIG_X86_CPUID) += cpuid.o
- obj-$(CONFIG_SMP) += smp.o smpboot.o trampoline.o
- obj-$(CONFIG_X86_LOCAL_APIC) += apic.o nmi.o
-+obj-$(CONFIG_X86_XEN_GENAPIC) += genapic.o genapic_xen.o
- obj-$(CONFIG_X86_IO_APIC) += io_apic.o mpparse.o \
- genapic.o genapic_cluster.o genapic_flat.o
- obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o crash.o
- obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
--obj-$(CONFIG_PM) += suspend.o
-+obj-$(CONFIG_SOFTWARE_SUSPEND) += suspend.o
-+obj-$(CONFIG_ACPI_SLEEP) += suspend.o
- obj-$(CONFIG_SOFTWARE_SUSPEND) += suspend_asm.o
- obj-$(CONFIG_CPU_FREQ) += cpufreq/
- obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
-@@ -55,3 +57,8 @@ i8237-y += ../../i386/kernel/i8237.o
- msr-$(subst m,y,$(CONFIG_X86_MSR)) += ../../i386/kernel/msr.o
- alternative-y += ../../i386/kernel/alternative.o
+diff -rpuN linux-2.6.18.8/arch/x86_64/Kconfig linux-2.6.18-xen-3.3.0/arch/x86_64/Kconfig
+--- linux-2.6.18.8/arch/x86_64/Kconfig 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/Kconfig 2008-08-21 11:36:07.000000000 +0200
+@@ -135,6 +135,23 @@ config GENERIC_CPU
-+time-$(CONFIG_XEN) += ../../i386/kernel/time.o
-+pci-dma-$(CONFIG_XEN) += ../../i386/kernel/pci-dma.o
+ endchoice
+
++config X86_64_XEN
++ bool "Enable Xen compatible kernel"
++ select XEN
++ select SWIOTLB
++ help
++ This option will compile a kernel compatible with Xen hypervisor
+
-+disabled-obj-$(CONFIG_XEN) := i8259.o reboot.o smpboot.o trampoline.o
-+%/head.o %/head.s: $(if $(CONFIG_XEN),EXTRA_AFLAGS,dummy) :=
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/acpi/Makefile linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/acpi/Makefile
---- linux-2.6.18.8/arch/x86_64/kernel/acpi/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/acpi/Makefile 2008-02-15 16:21:55.000000000 -0800
-@@ -5,5 +5,7 @@ obj-$(CONFIG_ACPI_SLEEP) += sleep.o wake
++config X86_NO_TSS
++ bool
++ depends on X86_64_XEN
++ default y
++
++config X86_NO_IDT
++ bool
++ depends on X86_64_XEN
++ default y
++
+ #
+ # Define implied options from the CPU selection here
+ #
+@@ -155,6 +172,7 @@ config X86_INTERNODE_CACHE_BYTES
+
+ config X86_TSC
+ bool
++ depends on !X86_64_XEN
+ default y
+
+ config X86_GOOD_APIC
+@@ -197,7 +215,7 @@ config X86_CPUID
+
+ config X86_HT
+ bool
+- depends on SMP && !MK8
++ depends on SMP && !MK8 && !X86_64_XEN
+ default y
+
+ config MATH_EMULATION
+@@ -211,14 +229,22 @@ config EISA
+
+ config X86_IO_APIC
+ bool
++ depends !XEN_UNPRIVILEGED_GUEST
++ default y
++
++config X86_XEN_GENAPIC
++ bool
++ depends on X86_64_XEN
+ default y
+
+ config X86_LOCAL_APIC
+ bool
++ depends !XEN_UNPRIVILEGED_GUEST
+ default y
+
+ config MTRR
+ bool "MTRR (Memory Type Range Register) support"
++ depends on !XEN_UNPRIVILEGED_GUEST
+ ---help---
+ On Intel P6 family processors (Pentium Pro, Pentium II and later)
+ the Memory Type Range Registers (MTRRs) may be used to control
+@@ -259,7 +285,7 @@ config SMP
+
+ config SCHED_SMT
+ bool "SMT (Hyperthreading) scheduler support"
+- depends on SMP
++ depends on SMP && !X86_64_XEN
+ default n
+ help
+ SMT scheduler support improves the CPU scheduler's decision making
+@@ -269,7 +295,7 @@ config SCHED_SMT
+
+ config SCHED_MC
+ bool "Multi-core scheduler support"
+- depends on SMP
++ depends on SMP && !X86_64_XEN
+ default y
+ help
+ Multi-core scheduler support improves the CPU scheduler's decision
+@@ -280,7 +306,7 @@ source "kernel/Kconfig.preempt"
+
+ config NUMA
+ bool "Non Uniform Memory Access (NUMA) Support"
+- depends on SMP
++ depends on SMP && !X86_64_XEN
+ help
+ Enable NUMA (Non Uniform Memory Access) support. The kernel
+ will try to allocate memory used by a CPU on the local memory
+@@ -341,7 +367,7 @@ config ARCH_DISCONTIGMEM_DEFAULT
+
+ config ARCH_SPARSEMEM_ENABLE
+ def_bool y
+- depends on (NUMA || EXPERIMENTAL)
++ depends on (NUMA || EXPERIMENTAL) && !X86_64_XEN
+
+ config ARCH_MEMORY_PROBE
+ def_bool y
+@@ -365,6 +391,7 @@ config NR_CPUS
+ int "Maximum number of CPUs (2-256)"
+ range 2 255
+ depends on SMP
++ default "16" if X86_64_XEN
+ default "8"
+ help
+ This allows you to specify the maximum number of CPUs which this
+@@ -387,6 +414,7 @@ config ARCH_ENABLE_MEMORY_HOTPLUG
+
+ config HPET_TIMER
+ bool
++ depends on !X86_64_XEN
+ default y
+ help
+ Use the IA-PC HPET (High Precision Event Timer) to manage
+@@ -407,7 +435,7 @@ config IOMMU
+ default y
+ select SWIOTLB
+ select AGP
+- depends on PCI
++ depends on PCI && !X86_64_XEN
+ help
+ Support for full DMA access of devices with 32bit memory access only
+ on systems with more than 3GB. This is usually needed for USB,
+@@ -423,7 +451,7 @@ config CALGARY_IOMMU
+ bool "IBM Calgary IOMMU support"
+ default y
+ select SWIOTLB
+- depends on PCI && EXPERIMENTAL
++ depends on PCI && !X86_64_XEN && EXPERIMENTAL
+ help
+ Support for hardware IOMMUs in IBM's xSeries x366 and x460
+ systems. Needed to run systems with more than 3GB of memory
+@@ -444,6 +472,7 @@ config SWIOTLB
+
+ config X86_MCE
+ bool "Machine check support" if EMBEDDED
++ depends on !X86_64_XEN
+ default y
+ help
+ Include a machine check error handler to report hardware errors.
+@@ -469,7 +498,7 @@ config X86_MCE_AMD
+
+ config KEXEC
+ bool "kexec system call (EXPERIMENTAL)"
+- depends on EXPERIMENTAL
++ depends on EXPERIMENTAL && !XEN_UNPRIVILEGED_GUEST
+ 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
+@@ -564,8 +593,9 @@ config GENERIC_PENDING_IRQ
+ default y
+
+ menu "Power management options"
++ depends on !XEN_UNPRIVILEGED_GUEST
+
+-source kernel/power/Kconfig
++source "kernel/power/Kconfig"
+
+ source "drivers/acpi/Kconfig"
+
+@@ -588,6 +618,22 @@ config PCI_MMCONFIG
+ bool "Support mmconfig PCI config space access"
+ depends on PCI && ACPI
+
++config XEN_PCIDEV_FRONTEND
++ bool "Xen PCI Frontend"
++ depends on PCI && X86_64_XEN
++ select HOTPLUG
++ default y
++ help
++ The PCI device frontend driver allows the kernel to import arbitrary
++ PCI devices from a PCI backend to support PCI driver domains.
++
++config XEN_PCIDEV_FE_DEBUG
++ bool "Xen PCI Frontend Debugging"
++ depends on XEN_PCIDEV_FRONTEND
++ default n
++ help
++ Enables some debug statements within the PCI Frontend.
++
+ source "drivers/pci/pcie/Kconfig"
+
+ source "drivers/pci/Kconfig"
+@@ -658,4 +704,6 @@ source "security/Kconfig"
+
+ source "crypto/Kconfig"
+
++source "drivers/xen/Kconfig"
++
+ source "lib/Kconfig"
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/acpi/Makefile linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/acpi/Makefile
+--- linux-2.6.18.8/arch/x86_64/kernel/acpi/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/acpi/Makefile 2008-08-21 11:36:07.000000000 +0200
+@@ -5,5 +5,10 @@ obj-$(CONFIG_ACPI_SLEEP) += sleep.o wake
ifneq ($(CONFIG_ACPI_PROCESSOR),)
obj-y += processor.o
processor-y := ../../../i386/kernel/acpi/processor.o ../../../i386/kernel/acpi/cstate.o
+processor-$(CONFIG_XEN) := ../../../i386/kernel/acpi/processor.o
++ifneq ($(CONFIG_PROCESSOR_EXTERNAL_CONTROL),)
++processor-$(CONFIG_XEN) += ../../../i386/kernel/acpi/processor_extcntl_xen.o
++endif
endif
+disabled-obj-$(CONFIG_XEN) := wakeup.o
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/acpi/sleep-xen.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/acpi/sleep-xen.c
---- linux-2.6.18.8/arch/x86_64/kernel/acpi/sleep-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/acpi/sleep-xen.c 2008-02-15 16:21:55.000000000 -0800
-@@ -0,0 +1,167 @@
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/acpi/sleep-xen.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/acpi/sleep-xen.c
+--- linux-2.6.18.8/arch/x86_64/kernel/acpi/sleep-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/acpi/sleep-xen.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,146 @@
+/*
+ * acpi.c - Architecture-Specific Low-Level ACPI Support
+ *
@@ -40748,27 +41369,6 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/acpi/sleep-xen.c linux-2.6.18-xen-3
+}
+
+__setup("acpi_sleep=", acpi_sleep_setup);
-+
-+#else /* CONFIG_ACPI_PV_SLEEP */
-+#include <asm/hypervisor.h>
-+#include <xen/interface/platform.h>
-+int acpi_notify_hypervisor_state(u8 sleep_state,
-+ u32 pm1a_cnt, u32 pm1b_cnt)
-+{
-+ struct xen_platform_op op = {
-+ .cmd = XENPF_enter_acpi_sleep,
-+ .interface_version = XENPF_INTERFACE_VERSION,
-+ .u = {
-+ .enter_acpi_sleep = {
-+ .pm1a_cnt_val = (u16)pm1a_cnt,
-+ .pm1b_cnt_val = (u16)pm1b_cnt,
-+ .sleep_state = sleep_state,
-+ },
-+ },
-+ };
-+
-+ return HYPERVISOR_platform_op(&op);
-+}
+#endif /* CONFIG_ACPI_PV_SLEEP */
+
+#endif /*CONFIG_ACPI_SLEEP */
@@ -40776,9 +41376,9 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/acpi/sleep-xen.c linux-2.6.18-xen-3
+void acpi_pci_link_exit(void)
+{
+}
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/apic-xen.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/apic-xen.c
---- linux-2.6.18.8/arch/x86_64/kernel/apic-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/apic-xen.c 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/apic-xen.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/apic-xen.c
+--- linux-2.6.18.8/arch/x86_64/kernel/apic-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/apic-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,197 @@
+/*
+ * Local APIC handling, local APIC timers
@@ -40977,9 +41577,9 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/apic-xen.c linux-2.6.18-xen-3.2.0/a
+
+ return 1;
+}
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/asm-offsets.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/asm-offsets.c
---- linux-2.6.18.8/arch/x86_64/kernel/asm-offsets.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/asm-offsets.c 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/asm-offsets.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/asm-offsets.c
+--- linux-2.6.18.8/arch/x86_64/kernel/asm-offsets.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/asm-offsets.c 2008-08-21 11:36:07.000000000 +0200
@@ -67,8 +67,10 @@ int main(void)
DEFINE(pbe_address, offsetof(struct pbe, address));
DEFINE(pbe_orig_address, offsetof(struct pbe, orig_address));
@@ -40991,9 +41591,9 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/asm-offsets.c linux-2.6.18-xen-3.2.
BLANK();
DEFINE(crypto_tfm_ctx_offset, offsetof(struct crypto_tfm, __crt_ctx));
return 0;
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/crash.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/crash.c
---- linux-2.6.18.8/arch/x86_64/kernel/crash.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/crash.c 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/crash.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/crash.c
+--- linux-2.6.18.8/arch/x86_64/kernel/crash.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/crash.c 2008-08-21 11:36:07.000000000 +0200
@@ -92,6 +92,7 @@ static void crash_save_self(struct pt_re
crash_save_this_cpu(regs, cpu);
}
@@ -41027,10 +41627,30 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/crash.c linux-2.6.18-xen-3.2.0/arch
+#endif /* CONFIG_XEN */
crash_save_self(regs);
}
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/e820-xen.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/e820-xen.c
---- linux-2.6.18.8/arch/x86_64/kernel/e820-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/e820-xen.c 2008-02-15 16:21:55.000000000 -0800
-@@ -0,0 +1,783 @@
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/e820.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/e820.c
+--- linux-2.6.18.8/arch/x86_64/kernel/e820.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/e820.c 2008-08-21 11:36:07.000000000 +0200
+@@ -93,7 +93,7 @@ static inline int bad_addr(unsigned long
+ * This function checks if any part of the range <start,end> is mapped
+ * with type.
+ */
+-int __meminit
++int
+ e820_any_mapped(unsigned long start, unsigned long end, unsigned type)
+ {
+ int i;
+@@ -107,6 +107,7 @@ e820_any_mapped(unsigned long start, uns
+ }
+ return 0;
+ }
++EXPORT_SYMBOL_GPL(e820_any_mapped);
+
+ /*
+ * This function checks if the entire range <start,end> is mapped with type.
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/e820-xen.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/e820-xen.c
+--- linux-2.6.18.8/arch/x86_64/kernel/e820-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/e820-xen.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,798 @@
+/*
+ * Handle the memory map.
+ * The functions here do the job until bootmem takes over.
@@ -41078,6 +41698,10 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/e820-xen.c linux-2.6.18-xen-3.2.0/a
+
+extern struct resource code_resource, data_resource;
+
++#ifdef CONFIG_XEN
++extern struct e820map machine_e820;
++#endif
++
+/* 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)
+{
@@ -41142,8 +41766,6 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/e820-xen.c linux-2.6.18-xen-3.2.0/a
+ for (i = 0; i < e820.nr_map; i++) {
+ struct e820entry *ei = &e820.map[i];
+#else
-+ extern struct e820map machine_e820;
-+
+ if (!is_initial_xendomain())
+ return 0;
+ for (i = 0; i < machine_e820.nr_map; i++) {
@@ -41174,8 +41796,6 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/e820-xen.c linux-2.6.18-xen-3.2.0/a
+ for (i = 0; i < e820.nr_map; i++) {
+ struct e820entry *ei = &e820.map[i];
+#else
-+ extern struct e820map machine_e820;
-+
+ if (!is_initial_xendomain())
+ return 0;
+ for (i = 0; i < machine_e820.nr_map; i++) {
@@ -41637,6 +42257,21 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/e820-xen.c linux-2.6.18-xen-3.2.0/a
+
+ add_memory_region(start, size, type);
+ } while (biosmap++,--nr_map);
++
++#ifdef CONFIG_XEN
++ if (is_initial_xendomain()) {
++ struct xen_memory_map memmap;
++
++ memmap.nr_entries = E820MAX;
++ set_xen_guest_handle(memmap.buffer, machine_e820.map);
++
++ if (HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap))
++ BUG();
++ machine_e820.nr_map = memmap.nr_entries;
++ } else
++ machine_e820 = e820;
++#endif
++
+ return 0;
+}
+
@@ -41814,29 +42449,9 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/e820-xen.c linux-2.6.18-xen-3.2.0/a
+ printk(KERN_INFO "Allocating PCI resources starting at %lx (gap: %lx:%lx)\n",
+ pci_mem_start, gapstart, gapsize);
+}
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/e820.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/e820.c
---- linux-2.6.18.8/arch/x86_64/kernel/e820.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/e820.c 2008-02-15 16:21:55.000000000 -0800
-@@ -93,7 +93,7 @@ static inline int bad_addr(unsigned long
- * This function checks if any part of the range <start,end> is mapped
- * with type.
- */
--int __meminit
-+int
- e820_any_mapped(unsigned long start, unsigned long end, unsigned type)
- {
- int i;
-@@ -107,6 +107,7 @@ e820_any_mapped(unsigned long start, uns
- }
- return 0;
- }
-+EXPORT_SYMBOL_GPL(e820_any_mapped);
-
- /*
- * This function checks if the entire range <start,end> is mapped with type.
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/early_printk-xen.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/early_printk-xen.c
---- linux-2.6.18.8/arch/x86_64/kernel/early_printk-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/early_printk-xen.c 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/early_printk-xen.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/early_printk-xen.c
+--- linux-2.6.18.8/arch/x86_64/kernel/early_printk-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/early_printk-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,302 @@
+#include <linux/console.h>
+#include <linux/kernel.h>
@@ -42140,9 +42755,9 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/early_printk-xen.c linux-2.6.18-xen
+}
+
+__setup("earlyprintk=", setup_early_printk);
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/entry-xen.S linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/entry-xen.S
---- linux-2.6.18.8/arch/x86_64/kernel/entry-xen.S 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/entry-xen.S 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/entry-xen.S linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/entry-xen.S
+--- linux-2.6.18.8/arch/x86_64/kernel/entry-xen.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/entry-xen.S 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,1322 @@
+/*
+ * linux/arch/x86_64/entry.S
@@ -42330,7 +42945,7 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/entry-xen.S linux-2.6.18-xen-3.2.0/
+ CFI_ADJUST_CFA_OFFSET -4
+ call schedule_tail
+ GET_THREAD_INFO(%rcx)
-+ testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%rcx)
++ testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT),threadinfo_flags(%rcx)
+ jnz rff_trace
+rff_action:
+ RESTORE_REST
@@ -42480,10 +43095,10 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/entry-xen.S linux-2.6.18-xen-3.2.0/
+ LOAD_ARGS ARGOFFSET /* reload args from stack in case ptrace changed it */
+ RESTORE_REST
+ cmpq $__NR_syscall_max,%rax
-+ ja 1f
++ ja int_ret_from_sys_call
+ movq %r10,%rcx /* fixup for C */
+ call *sys_call_table(,%rax,8)
-+1: movq %rax,RAX-ARGOFFSET(%rsp)
++ movq %rax,RAX-ARGOFFSET(%rsp)
+ /* Use IRET because user could have changed frame */
+ jmp int_ret_from_sys_call
+ CFI_ENDPROC
@@ -43466,9 +44081,174 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/entry-xen.S linux-2.6.18-xen-3.2.0/
+ CFI_ENDPROC
+ENDPROC(arch_unwind_init_running)
+#endif
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/genapic-xen.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/genapic-xen.c
---- linux-2.6.18.8/arch/x86_64/kernel/genapic-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/genapic-xen.c 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/genapic_xen.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/genapic_xen.c
+--- linux-2.6.18.8/arch/x86_64/kernel/genapic_xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/genapic_xen.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,161 @@
++/*
++ * Copyright 2004 James Cleverdon, IBM.
++ * Subject to the GNU Public License, v.2
++ *
++ * Xen APIC subarch code. Maximum 8 CPUs, logical delivery.
++ *
++ * Hacked for x86-64 by James Cleverdon from i386 architecture code by
++ * Martin Bligh, Andi Kleen, James Bottomley, John Stultz, and
++ * James Cleverdon.
++ *
++ * Hacked to pieces for Xen by Chris Wright.
++ */
++#include <linux/threads.h>
++#include <linux/cpumask.h>
++#include <linux/string.h>
++#include <linux/kernel.h>
++#include <linux/ctype.h>
++#include <linux/init.h>
++#ifdef CONFIG_XEN_PRIVILEGED_GUEST
++#include <asm/smp.h>
++#include <asm/ipi.h>
++#else
++#include <asm/apic.h>
++#include <asm/apicdef.h>
++#include <asm/genapic.h>
++#endif
++#include <xen/evtchn.h>
++
++DECLARE_PER_CPU(int, ipi_to_irq[NR_IPIS]);
++
++static inline void __send_IPI_one(unsigned int cpu, int vector)
++{
++ int irq = per_cpu(ipi_to_irq, cpu)[vector];
++ BUG_ON(irq < 0);
++ notify_remote_via_irq(irq);
++}
++
++void xen_send_IPI_shortcut(unsigned int shortcut, int vector, unsigned int dest)
++{
++ int cpu;
++
++ switch (shortcut) {
++ case APIC_DEST_SELF:
++ __send_IPI_one(smp_processor_id(), vector);
++ break;
++ case APIC_DEST_ALLBUT:
++ for (cpu = 0; cpu < NR_CPUS; ++cpu) {
++ if (cpu == smp_processor_id())
++ continue;
++ if (cpu_isset(cpu, cpu_online_map)) {
++ __send_IPI_one(cpu, vector);
++ }
++ }
++ break;
++ case APIC_DEST_ALLINC:
++ for (cpu = 0; cpu < NR_CPUS; ++cpu) {
++ if (cpu_isset(cpu, cpu_online_map)) {
++ __send_IPI_one(cpu, vector);
++ }
++ }
++ break;
++ default:
++ printk("XXXXXX __send_IPI_shortcut %08x vector %d\n", shortcut,
++ vector);
++ break;
++ }
++}
++
++static cpumask_t xen_target_cpus(void)
++{
++ return cpu_online_map;
++}
++
++/*
++ * Set up the logical destination ID.
++ * Do nothing, not called now.
++ */
++static void xen_init_apic_ldr(void)
++{
++ Dprintk("%s\n", __FUNCTION__);
++ return;
++}
++
++static void xen_send_IPI_allbutself(int vector)
++{
++ /*
++ * if there are no other CPUs in the system then
++ * we get an APIC send error if we try to broadcast.
++ * thus we have to avoid sending IPIs in this case.
++ */
++ Dprintk("%s\n", __FUNCTION__);
++ if (num_online_cpus() > 1)
++ xen_send_IPI_shortcut(APIC_DEST_ALLBUT, vector, APIC_DEST_LOGICAL);
++}
++
++static void xen_send_IPI_all(int vector)
++{
++ Dprintk("%s\n", __FUNCTION__);
++ xen_send_IPI_shortcut(APIC_DEST_ALLINC, vector, APIC_DEST_LOGICAL);
++}
++
++static void xen_send_IPI_mask(cpumask_t cpumask, int vector)
++{
++ unsigned long mask = cpus_addr(cpumask)[0];
++ unsigned int cpu;
++ unsigned long flags;
++
++ Dprintk("%s\n", __FUNCTION__);
++ local_irq_save(flags);
++ WARN_ON(mask & ~cpus_addr(cpu_online_map)[0]);
++
++ for (cpu = 0; cpu < NR_CPUS; ++cpu) {
++ if (cpu_isset(cpu, cpumask)) {
++ __send_IPI_one(cpu, vector);
++ }
++ }
++ local_irq_restore(flags);
++}
++
++#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)
++{
++ Dprintk("%s\n", __FUNCTION__);
++ return cpus_addr(cpumask)[0] & APIC_ALL_CPUS;
++}
++
++static unsigned int phys_pkg_id(int index_msb)
++{
++ u32 ebx;
++
++ Dprintk("%s\n", __FUNCTION__);
++ ebx = cpuid_ebx(1);
++ return ((ebx >> 24) & 0xFF) >> index_msb;
++}
++
++struct genapic apic_xen = {
++ .name = "xen",
++#ifdef CONFIG_XEN_PRIVILEGED_GUEST
++ .int_delivery_mode = dest_LowestPrio,
++#endif
++ .int_dest_mode = (APIC_DEST_LOGICAL != 0),
++ .int_delivery_dest = APIC_DEST_LOGICAL | APIC_DM_LOWEST,
++ .target_cpus = xen_target_cpus,
++#ifdef CONFIG_XEN_PRIVILEGED_GUEST
++ .apic_id_registered = xen_apic_id_registered,
++#endif
++ .init_apic_ldr = xen_init_apic_ldr,
++ .send_IPI_all = xen_send_IPI_all,
++ .send_IPI_allbutself = xen_send_IPI_allbutself,
++ .send_IPI_mask = xen_send_IPI_mask,
++ .cpu_mask_to_apicid = xen_cpu_mask_to_apicid,
++ .phys_pkg_id = phys_pkg_id,
++};
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/genapic-xen.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/genapic-xen.c
+--- linux-2.6.18.8/arch/x86_64/kernel/genapic-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/genapic-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2004 James Cleverdon, IBM.
@@ -43613,174 +44393,175 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/genapic-xen.c linux-2.6.18-xen-3.2.
+ xen_send_IPI_shortcut(APIC_DEST_SELF, vector, APIC_DEST_PHYSICAL);
+#endif
+}
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/genapic_xen.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/genapic_xen.c
---- linux-2.6.18.8/arch/x86_64/kernel/genapic_xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/genapic_xen.c 2008-02-15 16:21:55.000000000 -0800
-@@ -0,0 +1,161 @@
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/head64-xen.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/head64-xen.c
+--- linux-2.6.18.8/arch/x86_64/kernel/head64-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/head64-xen.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,162 @@
+/*
-+ * Copyright 2004 James Cleverdon, IBM.
-+ * Subject to the GNU Public License, v.2
-+ *
-+ * Xen APIC subarch code. Maximum 8 CPUs, logical delivery.
++ * linux/arch/x86_64/kernel/head64.c -- prepare to run common code
+ *
-+ * Hacked for x86-64 by James Cleverdon from i386 architecture code by
-+ * Martin Bligh, Andi Kleen, James Bottomley, John Stultz, and
-+ * James Cleverdon.
++ * Copyright (C) 2000 Andrea Arcangeli <andrea@suse.de> SuSE
+ *
-+ * Hacked to pieces for Xen by Chris Wright.
++ * Jun Nakajima <jun.nakajima@intel.com>
++ * Modified for Xen.
+ */
-+#include <linux/threads.h>
-+#include <linux/cpumask.h>
-+#include <linux/string.h>
-+#include <linux/kernel.h>
-+#include <linux/ctype.h>
++
+#include <linux/init.h>
-+#ifdef CONFIG_XEN_PRIVILEGED_GUEST
++#include <linux/linkage.h>
++#include <linux/types.h>
++#include <linux/kernel.h>
++#include <linux/string.h>
++#include <linux/percpu.h>
++#include <linux/module.h>
++
++#include <asm/processor.h>
++#include <asm/proto.h>
+#include <asm/smp.h>
-+#include <asm/ipi.h>
-+#else
-+#include <asm/apic.h>
-+#include <asm/apicdef.h>
-+#include <asm/genapic.h>
-+#endif
-+#include <xen/evtchn.h>
++#include <asm/bootsetup.h>
++#include <asm/setup.h>
++#include <asm/desc.h>
++#include <asm/pgtable.h>
++#include <asm/sections.h>
+
-+DECLARE_PER_CPU(int, ipi_to_irq[NR_IPIS]);
++unsigned long start_pfn;
+
-+static inline void __send_IPI_one(unsigned int cpu, int vector)
++/* Don't add a printk in there. printk relies on the PDA which is not initialized
++ yet. */
++#if 0
++static void __init clear_bss(void)
+{
-+ int irq = per_cpu(ipi_to_irq, cpu)[vector];
-+ BUG_ON(irq < 0);
-+ notify_remote_via_irq(irq);
++ memset(__bss_start, 0,
++ (unsigned long) __bss_stop - (unsigned long) __bss_start);
+}
++#endif
+
-+void xen_send_IPI_shortcut(unsigned int shortcut, int vector, unsigned int dest)
++#define NEW_CL_POINTER 0x228 /* Relative to real mode data */
++#define OLD_CL_MAGIC_ADDR 0x90020
++#define OLD_CL_MAGIC 0xA33F
++#define OLD_CL_BASE_ADDR 0x90000
++#define OLD_CL_OFFSET 0x90022
++
++extern char saved_command_line[];
++
++static void __init copy_bootdata(char *real_mode_data)
+{
-+ int cpu;
++#ifndef CONFIG_XEN
++ int new_data;
++ char * command_line;
+
-+ switch (shortcut) {
-+ case APIC_DEST_SELF:
-+ __send_IPI_one(smp_processor_id(), vector);
-+ break;
-+ case APIC_DEST_ALLBUT:
-+ for (cpu = 0; cpu < NR_CPUS; ++cpu) {
-+ if (cpu == smp_processor_id())
-+ continue;
-+ if (cpu_isset(cpu, cpu_online_map)) {
-+ __send_IPI_one(cpu, vector);
-+ }
-+ }
-+ break;
-+ case APIC_DEST_ALLINC:
-+ for (cpu = 0; cpu < NR_CPUS; ++cpu) {
-+ if (cpu_isset(cpu, cpu_online_map)) {
-+ __send_IPI_one(cpu, vector);
-+ }
++ memcpy(x86_boot_params, real_mode_data, BOOT_PARAM_SIZE);
++ new_data = *(int *) (x86_boot_params + NEW_CL_POINTER);
++ if (!new_data) {
++ if (OLD_CL_MAGIC != * (u16 *) OLD_CL_MAGIC_ADDR) {
++ printk("so old bootloader that it does not support commandline?!\n");
++ return;
+ }
-+ break;
-+ default:
-+ printk("XXXXXX __send_IPI_shortcut %08x vector %d\n", shortcut,
-+ vector);
-+ break;
++ new_data = OLD_CL_BASE_ADDR + * (u16 *) OLD_CL_OFFSET;
++ printk("old bootloader convention, maybe loadlin?\n");
+ }
++ command_line = (char *) ((u64)(new_data));
++ memcpy(saved_command_line, command_line, COMMAND_LINE_SIZE);
++#else
++ int max_cmdline;
++
++ if ((max_cmdline = MAX_GUEST_CMDLINE) > COMMAND_LINE_SIZE)
++ max_cmdline = COMMAND_LINE_SIZE;
++ memcpy(saved_command_line, xen_start_info->cmd_line, max_cmdline);
++ saved_command_line[max_cmdline-1] = '\0';
++#endif
++ printk("Bootdata ok (command line is %s)\n", saved_command_line);
+}
+
-+static cpumask_t xen_target_cpus(void)
++static void __init setup_boot_cpu_data(void)
+{
-+ return cpu_online_map;
-+}
++ unsigned int dummy, eax;
+
-+/*
-+ * Set up the logical destination ID.
-+ * Do nothing, not called now.
-+ */
-+static void xen_init_apic_ldr(void)
-+{
-+ Dprintk("%s\n", __FUNCTION__);
-+ return;
-+}
++ /* get vendor info */
++ cpuid(0, (unsigned int *)&boot_cpu_data.cpuid_level,
++ (unsigned int *)&boot_cpu_data.x86_vendor_id[0],
++ (unsigned int *)&boot_cpu_data.x86_vendor_id[8],
++ (unsigned int *)&boot_cpu_data.x86_vendor_id[4]);
+
-+static void xen_send_IPI_allbutself(int vector)
-+{
-+ /*
-+ * if there are no other CPUs in the system then
-+ * we get an APIC send error if we try to broadcast.
-+ * thus we have to avoid sending IPIs in this case.
-+ */
-+ Dprintk("%s\n", __FUNCTION__);
-+ if (num_online_cpus() > 1)
-+ xen_send_IPI_shortcut(APIC_DEST_ALLBUT, vector, APIC_DEST_LOGICAL);
++ /* get cpu type */
++ cpuid(1, &eax, &dummy, &dummy,
++ (unsigned int *) &boot_cpu_data.x86_capability);
++ boot_cpu_data.x86 = (eax >> 8) & 0xf;
++ boot_cpu_data.x86_model = (eax >> 4) & 0xf;
++ boot_cpu_data.x86_mask = eax & 0xf;
+}
+
-+static void xen_send_IPI_all(int vector)
-+{
-+ Dprintk("%s\n", __FUNCTION__);
-+ xen_send_IPI_shortcut(APIC_DEST_ALLINC, vector, APIC_DEST_LOGICAL);
-+}
++#include <xen/interface/memory.h>
++unsigned long *machine_to_phys_mapping;
++EXPORT_SYMBOL(machine_to_phys_mapping);
++unsigned int machine_to_phys_order;
++EXPORT_SYMBOL(machine_to_phys_order);
+
-+static void xen_send_IPI_mask(cpumask_t cpumask, int vector)
++void __init x86_64_start_kernel(char * real_mode_data)
+{
-+ unsigned long mask = cpus_addr(cpumask)[0];
-+ unsigned int cpu;
-+ unsigned long flags;
++ struct xen_machphys_mapping mapping;
++ unsigned long machine_to_phys_nr_ents;
++ char *s;
++ int i;
+
-+ Dprintk("%s\n", __FUNCTION__);
-+ local_irq_save(flags);
-+ WARN_ON(mask & ~cpus_addr(cpu_online_map)[0]);
++ setup_xen_features();
+
-+ for (cpu = 0; cpu < NR_CPUS; ++cpu) {
-+ if (cpu_isset(cpu, cpumask)) {
-+ __send_IPI_one(cpu, vector);
-+ }
++ xen_start_info = (struct start_info *)real_mode_data;
++ if (!xen_feature(XENFEAT_auto_translated_physmap))
++ phys_to_machine_mapping =
++ (unsigned long *)xen_start_info->mfn_list;
++ start_pfn = (__pa(xen_start_info->pt_base) >> PAGE_SHIFT) +
++ xen_start_info->nr_pt_frames;
++
++ machine_to_phys_mapping = (unsigned long *)MACH2PHYS_VIRT_START;
++ machine_to_phys_nr_ents = MACH2PHYS_NR_ENTRIES;
++ if (HYPERVISOR_memory_op(XENMEM_machphys_mapping, &mapping) == 0) {
++ machine_to_phys_mapping = (unsigned long *)mapping.v_start;
++ machine_to_phys_nr_ents = mapping.max_mfn + 1;
+ }
-+ local_irq_restore(flags);
-+}
++ while ((1UL << machine_to_phys_order) < machine_to_phys_nr_ents )
++ machine_to_phys_order++;
+
-+#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);
-+}
++#if 0
++ for (i = 0; i < 256; i++)
++ set_intr_gate(i, early_idt_handler);
++ asm volatile("lidt %0" :: "m" (idt_descr));
+#endif
+
-+static unsigned int xen_cpu_mask_to_apicid(cpumask_t cpumask)
-+{
-+ Dprintk("%s\n", __FUNCTION__);
-+ return cpus_addr(cpumask)[0] & APIC_ALL_CPUS;
-+}
-+
-+static unsigned int phys_pkg_id(int index_msb)
-+{
-+ u32 ebx;
++ /*
++ * This must be called really, really early:
++ */
++ lockdep_init();
+
-+ Dprintk("%s\n", __FUNCTION__);
-+ ebx = cpuid_ebx(1);
-+ return ((ebx >> 24) & 0xFF) >> index_msb;
-+}
++ for (i = 0; i < NR_CPUS; i++)
++ cpu_pda(i) = &boot_cpu_pda[i];
+
-+struct genapic apic_xen = {
-+ .name = "xen",
-+#ifdef CONFIG_XEN_PRIVILEGED_GUEST
-+ .int_delivery_mode = dest_LowestPrio,
++ pda_init(0);
++ copy_bootdata(real_mode_data);
++#ifdef CONFIG_SMP
++ cpu_set(0, cpu_online_map);
+#endif
-+ .int_dest_mode = (APIC_DEST_LOGICAL != 0),
-+ .int_delivery_dest = APIC_DEST_LOGICAL | APIC_DM_LOWEST,
-+ .target_cpus = xen_target_cpus,
-+#ifdef CONFIG_XEN_PRIVILEGED_GUEST
-+ .apic_id_registered = xen_apic_id_registered,
++ s = strstr(saved_command_line, "earlyprintk=");
++ if (s != NULL)
++ setup_early_printk(strchr(s, '=') + 1);
++#ifdef CONFIG_NUMA
++ s = strstr(saved_command_line, "numa=");
++ if (s != NULL)
++ numa_setup(s+5);
+#endif
-+ .init_apic_ldr = xen_init_apic_ldr,
-+ .send_IPI_all = xen_send_IPI_all,
-+ .send_IPI_allbutself = xen_send_IPI_allbutself,
-+ .send_IPI_mask = xen_send_IPI_mask,
-+ .cpu_mask_to_apicid = xen_cpu_mask_to_apicid,
-+ .phys_pkg_id = phys_pkg_id,
-+};
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/head-xen.S linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/head-xen.S
---- linux-2.6.18.8/arch/x86_64/kernel/head-xen.S 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/head-xen.S 2008-02-15 16:21:55.000000000 -0800
++#ifdef CONFIG_X86_IO_APIC
++ if (strstr(saved_command_line, "disableapic"))
++ disable_apic = 1;
++#endif
++ /* You need early console to see that */
++ if (__pa_symbol(&_end) >= KERNEL_TEXT_SIZE)
++ panic("Kernel too big for kernel mapping\n");
++
++ setup_boot_cpu_data();
++ start_kernel();
++}
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/head-xen.S linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/head-xen.S
+--- linux-2.6.18.8/arch/x86_64/kernel/head-xen.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/head-xen.S 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,214 @@
+/*
+ * linux/arch/x86_64/kernel/head.S -- start in 32bit and switch to 64bit
@@ -43996,175 +44777,9 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/head-xen.S linux-2.6.18-xen-3.2.0/a
+ 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")
+ ELFNOTE(Xen, XEN_ELFNOTE_SUSPEND_CANCEL, .long, 1)
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/head64-xen.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/head64-xen.c
---- linux-2.6.18.8/arch/x86_64/kernel/head64-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/head64-xen.c 2008-02-15 16:21:55.000000000 -0800
-@@ -0,0 +1,162 @@
-+/*
-+ * linux/arch/x86_64/kernel/head64.c -- prepare to run common code
-+ *
-+ * Copyright (C) 2000 Andrea Arcangeli <andrea@suse.de> SuSE
-+ *
-+ * Jun Nakajima <jun.nakajima@intel.com>
-+ * Modified for Xen.
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/linkage.h>
-+#include <linux/types.h>
-+#include <linux/kernel.h>
-+#include <linux/string.h>
-+#include <linux/percpu.h>
-+#include <linux/module.h>
-+
-+#include <asm/processor.h>
-+#include <asm/proto.h>
-+#include <asm/smp.h>
-+#include <asm/bootsetup.h>
-+#include <asm/setup.h>
-+#include <asm/desc.h>
-+#include <asm/pgtable.h>
-+#include <asm/sections.h>
-+
-+unsigned long start_pfn;
-+
-+/* Don't add a printk in there. printk relies on the PDA which is not initialized
-+ yet. */
-+#if 0
-+static void __init clear_bss(void)
-+{
-+ memset(__bss_start, 0,
-+ (unsigned long) __bss_stop - (unsigned long) __bss_start);
-+}
-+#endif
-+
-+#define NEW_CL_POINTER 0x228 /* Relative to real mode data */
-+#define OLD_CL_MAGIC_ADDR 0x90020
-+#define OLD_CL_MAGIC 0xA33F
-+#define OLD_CL_BASE_ADDR 0x90000
-+#define OLD_CL_OFFSET 0x90022
-+
-+extern char saved_command_line[];
-+
-+static void __init copy_bootdata(char *real_mode_data)
-+{
-+#ifndef CONFIG_XEN
-+ int new_data;
-+ char * command_line;
-+
-+ memcpy(x86_boot_params, real_mode_data, BOOT_PARAM_SIZE);
-+ new_data = *(int *) (x86_boot_params + NEW_CL_POINTER);
-+ if (!new_data) {
-+ if (OLD_CL_MAGIC != * (u16 *) OLD_CL_MAGIC_ADDR) {
-+ printk("so old bootloader that it does not support commandline?!\n");
-+ return;
-+ }
-+ new_data = OLD_CL_BASE_ADDR + * (u16 *) OLD_CL_OFFSET;
-+ printk("old bootloader convention, maybe loadlin?\n");
-+ }
-+ command_line = (char *) ((u64)(new_data));
-+ memcpy(saved_command_line, command_line, COMMAND_LINE_SIZE);
-+#else
-+ int max_cmdline;
-+
-+ if ((max_cmdline = MAX_GUEST_CMDLINE) > COMMAND_LINE_SIZE)
-+ max_cmdline = COMMAND_LINE_SIZE;
-+ memcpy(saved_command_line, xen_start_info->cmd_line, max_cmdline);
-+ saved_command_line[max_cmdline-1] = '\0';
-+#endif
-+ printk("Bootdata ok (command line is %s)\n", saved_command_line);
-+}
-+
-+static void __init setup_boot_cpu_data(void)
-+{
-+ unsigned int dummy, eax;
-+
-+ /* get vendor info */
-+ cpuid(0, (unsigned int *)&boot_cpu_data.cpuid_level,
-+ (unsigned int *)&boot_cpu_data.x86_vendor_id[0],
-+ (unsigned int *)&boot_cpu_data.x86_vendor_id[8],
-+ (unsigned int *)&boot_cpu_data.x86_vendor_id[4]);
-+
-+ /* get cpu type */
-+ cpuid(1, &eax, &dummy, &dummy,
-+ (unsigned int *) &boot_cpu_data.x86_capability);
-+ boot_cpu_data.x86 = (eax >> 8) & 0xf;
-+ boot_cpu_data.x86_model = (eax >> 4) & 0xf;
-+ boot_cpu_data.x86_mask = eax & 0xf;
-+}
-+
-+#include <xen/interface/memory.h>
-+unsigned long *machine_to_phys_mapping;
-+EXPORT_SYMBOL(machine_to_phys_mapping);
-+unsigned int machine_to_phys_order;
-+EXPORT_SYMBOL(machine_to_phys_order);
-+
-+void __init x86_64_start_kernel(char * real_mode_data)
-+{
-+ struct xen_machphys_mapping mapping;
-+ unsigned long machine_to_phys_nr_ents;
-+ char *s;
-+ int i;
-+
-+ setup_xen_features();
-+
-+ xen_start_info = (struct start_info *)real_mode_data;
-+ if (!xen_feature(XENFEAT_auto_translated_physmap))
-+ phys_to_machine_mapping =
-+ (unsigned long *)xen_start_info->mfn_list;
-+ start_pfn = (__pa(xen_start_info->pt_base) >> PAGE_SHIFT) +
-+ xen_start_info->nr_pt_frames;
-+
-+ machine_to_phys_mapping = (unsigned long *)MACH2PHYS_VIRT_START;
-+ machine_to_phys_nr_ents = MACH2PHYS_NR_ENTRIES;
-+ if (HYPERVISOR_memory_op(XENMEM_machphys_mapping, &mapping) == 0) {
-+ machine_to_phys_mapping = (unsigned long *)mapping.v_start;
-+ machine_to_phys_nr_ents = mapping.max_mfn + 1;
-+ }
-+ while ((1UL << machine_to_phys_order) < machine_to_phys_nr_ents )
-+ machine_to_phys_order++;
-+
-+#if 0
-+ for (i = 0; i < 256; i++)
-+ set_intr_gate(i, early_idt_handler);
-+ asm volatile("lidt %0" :: "m" (idt_descr));
-+#endif
-+
-+ /*
-+ * This must be called really, really early:
-+ */
-+ lockdep_init();
-+
-+ for (i = 0; i < NR_CPUS; i++)
-+ cpu_pda(i) = &boot_cpu_pda[i];
-+
-+ pda_init(0);
-+ copy_bootdata(real_mode_data);
-+#ifdef CONFIG_SMP
-+ cpu_set(0, cpu_online_map);
-+#endif
-+ s = strstr(saved_command_line, "earlyprintk=");
-+ if (s != NULL)
-+ setup_early_printk(strchr(s, '=') + 1);
-+#ifdef CONFIG_NUMA
-+ s = strstr(saved_command_line, "numa=");
-+ if (s != NULL)
-+ numa_setup(s+5);
-+#endif
-+#ifdef CONFIG_X86_IO_APIC
-+ if (strstr(saved_command_line, "disableapic"))
-+ disable_apic = 1;
-+#endif
-+ /* You need early console to see that */
-+ if (__pa_symbol(&_end) >= KERNEL_TEXT_SIZE)
-+ panic("Kernel too big for kernel mapping\n");
-+
-+ setup_boot_cpu_data();
-+ start_kernel();
-+}
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/init_task.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/init_task.c
---- linux-2.6.18.8/arch/x86_64/kernel/init_task.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/init_task.c 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/init_task.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/init_task.c
+--- linux-2.6.18.8/arch/x86_64/kernel/init_task.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/init_task.c 2008-08-21 11:36:07.000000000 +0200
@@ -37,6 +37,8 @@ union thread_union init_thread_union
struct task_struct init_task = INIT_TASK(init_task);
@@ -44181,9 +44796,9 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/init_task.c linux-2.6.18-xen-3.2.0/
+#endif
#define ALIGN_TO_4K __attribute__((section(".data.init_task")))
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/io_apic-xen.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/io_apic-xen.c
---- linux-2.6.18.8/arch/x86_64/kernel/io_apic-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/io_apic-xen.c 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/io_apic-xen.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/io_apic-xen.c
+--- linux-2.6.18.8/arch/x86_64/kernel/io_apic-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/io_apic-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,2262 @@
+/*
+ * Intel IO-APIC support for multi-Pentium hosts.
@@ -46447,9 +47062,9 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/io_apic-xen.c linux-2.6.18-xen-3.2.
+}
+#endif
+#endif /* !CONFIG_XEN */
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/ioport-xen.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/ioport-xen.c
---- linux-2.6.18.8/arch/x86_64/kernel/ioport-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/ioport-xen.c 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/ioport-xen.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/ioport-xen.c
+--- linux-2.6.18.8/arch/x86_64/kernel/ioport-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/ioport-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,100 @@
+/*
+ * linux/arch/x86_64/kernel/ioport.c
@@ -46551,9 +47166,9 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/ioport-xen.c linux-2.6.18-xen-3.2.0
+
+ return 0;
+}
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/irq-xen.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/irq-xen.c
---- linux-2.6.18.8/arch/x86_64/kernel/irq-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/irq-xen.c 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/irq-xen.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/irq-xen.c
+--- linux-2.6.18.8/arch/x86_64/kernel/irq-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/irq-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,197 @@
+/*
+ * linux/arch/x86_64/kernel/irq.c
@@ -46705,7 +47320,7 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/irq-xen.c linux-2.6.18-xen-3.2.0/ar
+
+ cpus_and(mask, irq_desc[irq].affinity, map);
+ if (any_online_cpu(mask) == NR_CPUS) {
-+ printk("Breaking affinity for irq %i\n", irq);
++ /*printk("Breaking affinity for irq %i\n", irq);*/
+ mask = map;
+ }
+ if (irq_desc[irq].chip->set_affinity)
@@ -46752,9 +47367,9 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/irq-xen.c linux-2.6.18-xen-3.2.0/ar
+ printk("unexpected IRQ trap at vector %02x\n", irq);
+}
+#endif
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/ldt-xen.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/ldt-xen.c
---- linux-2.6.18.8/arch/x86_64/kernel/ldt-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/ldt-xen.c 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/ldt-xen.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/ldt-xen.c
+--- linux-2.6.18.8/arch/x86_64/kernel/ldt-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/ldt-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,282 @@
+/*
+ * linux/arch/x86_64/kernel/ldt.c
@@ -47038,10 +47653,10 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/ldt-xen.c linux-2.6.18-xen-3.2.0/ar
+ }
+ return ret;
+}
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/machine_kexec.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/machine_kexec.c
---- linux-2.6.18.8/arch/x86_64/kernel/machine_kexec.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/machine_kexec.c 2008-02-15 16:21:55.000000000 -0800
-@@ -15,6 +15,113 @@
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/machine_kexec.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/machine_kexec.c
+--- linux-2.6.18.8/arch/x86_64/kernel/machine_kexec.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/machine_kexec.c 2008-08-21 11:36:07.000000000 +0200
+@@ -15,6 +15,128 @@
#include <asm/mmu_context.h>
#include <asm/io.h>
@@ -47134,6 +47749,21 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/machine_kexec.c linux-2.6.18-xen-3.
+ xki->page_list[PA_PTE_1] = __ma(kexec_pte1);
+}
+
++int __init machine_kexec_setup_resources(struct resource *hypervisor,
++ struct resource *phys_cpus,
++ int nr_phys_cpus)
++{
++ int k;
++
++ /* The per-cpu crash note resources belong to the hypervisor resource */
++ for (k = 0; k < nr_phys_cpus; k++)
++ request_resource(hypervisor, phys_cpus + k);
++
++ return 0;
++}
++
++void machine_kexec_register_resources(struct resource *res) { ; }
++
+#else /* CONFIG_XEN */
+
+#define x__pmd(x) __pmd(x)
@@ -47155,7 +47785,7 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/machine_kexec.c linux-2.6.18-xen-3.
static void init_level2_page(pmd_t *level2p, unsigned long addr)
{
unsigned long end_addr;
-@@ -22,7 +129,7 @@ static void init_level2_page(pmd_t *leve
+@@ -22,7 +144,7 @@ static void init_level2_page(pmd_t *leve
addr &= PAGE_MASK;
end_addr = addr + PUD_SIZE;
while (addr < end_addr) {
@@ -47164,7 +47794,7 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/machine_kexec.c linux-2.6.18-xen-3.
addr += PMD_SIZE;
}
}
-@@ -47,12 +154,12 @@ static int init_level3_page(struct kimag
+@@ -47,12 +169,12 @@ static int init_level3_page(struct kimag
}
level2p = (pmd_t *)page_address(page);
init_level2_page(level2p, addr);
@@ -47179,7 +47809,7 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/machine_kexec.c linux-2.6.18-xen-3.
addr += PUD_SIZE;
}
out:
-@@ -83,12 +190,12 @@ static int init_level4_page(struct kimag
+@@ -83,12 +205,12 @@ static int init_level4_page(struct kimag
if (result) {
goto out;
}
@@ -47194,7 +47824,7 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/machine_kexec.c linux-2.6.18-xen-3.
addr += PGDIR_SIZE;
}
out:
-@@ -99,77 +206,29 @@ out:
+@@ -99,77 +221,29 @@ out:
static int init_pgtable(struct kimage *image, unsigned long start_pgtable)
{
pgd_t *level4p;
@@ -47205,21 +47835,21 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/machine_kexec.c linux-2.6.18-xen-3.
-static void set_idt(void *newidt, u16 limit)
-{
- struct desc_ptr curidt;
-+ unsigned long x_end_pfn = end_pfn;
-
+-
- /* x86-64 supports unaliged loads & stores */
- curidt.size = limit;
- curidt.address = (unsigned long)newidt;
-+#ifdef CONFIG_XEN
-+ x_end_pfn = HYPERVISOR_memory_op(XENMEM_maximum_ram_page, NULL);
-+#endif
++ unsigned long x_end_pfn = end_pfn;
- __asm__ __volatile__ (
- "lidtq %0\n"
- : : "m" (curidt)
- );
-};
--
++#ifdef CONFIG_XEN
++ x_end_pfn = HYPERVISOR_memory_op(XENMEM_maximum_ram_page, NULL);
++#endif
+
-
-static void set_gdt(void *newgdt, u16 limit)
-{
@@ -47279,7 +47909,7 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/machine_kexec.c linux-2.6.18-xen-3.
return 0;
}
-@@ -178,51 +237,43 @@ void machine_kexec_cleanup(struct kimage
+@@ -178,51 +252,43 @@ void machine_kexec_cleanup(struct kimage
return;
}
@@ -47359,9 +47989,36 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/machine_kexec.c linux-2.6.18-xen-3.
+ image->start);
}
+#endif
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/mpparse-xen.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/mpparse-xen.c
---- linux-2.6.18.8/arch/x86_64/kernel/mpparse-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/mpparse-xen.c 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/Makefile linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/Makefile
+--- linux-2.6.18.8/arch/x86_64/kernel/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/Makefile 2008-08-21 11:36:07.000000000 +0200
+@@ -21,11 +21,13 @@ obj-$(CONFIG_MICROCODE) += microcode.o
+ obj-$(CONFIG_X86_CPUID) += cpuid.o
+ obj-$(CONFIG_SMP) += smp.o smpboot.o trampoline.o
+ obj-$(CONFIG_X86_LOCAL_APIC) += apic.o nmi.o
++obj-$(CONFIG_X86_XEN_GENAPIC) += genapic.o genapic_xen.o
+ obj-$(CONFIG_X86_IO_APIC) += io_apic.o mpparse.o \
+ genapic.o genapic_cluster.o genapic_flat.o
+ obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o crash.o
+ obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
+-obj-$(CONFIG_PM) += suspend.o
++obj-$(CONFIG_SOFTWARE_SUSPEND) += suspend.o
++obj-$(CONFIG_ACPI_SLEEP) += suspend.o
+ obj-$(CONFIG_SOFTWARE_SUSPEND) += suspend_asm.o
+ obj-$(CONFIG_CPU_FREQ) += cpufreq/
+ obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
+@@ -55,3 +57,8 @@ i8237-y += ../../i386/kernel/i8237.o
+ msr-$(subst m,y,$(CONFIG_X86_MSR)) += ../../i386/kernel/msr.o
+ alternative-y += ../../i386/kernel/alternative.o
+
++time-$(CONFIG_XEN) += ../../i386/kernel/time.o
++pci-dma-$(CONFIG_XEN) += ../../i386/kernel/pci-dma.o
++
++disabled-obj-$(CONFIG_XEN) := i8259.o reboot.o smpboot.o trampoline.o
++%/head.o %/head.s: $(if $(CONFIG_XEN),EXTRA_AFLAGS,dummy) :=
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/mpparse-xen.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/mpparse-xen.c
+--- linux-2.6.18.8/arch/x86_64/kernel/mpparse-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/mpparse-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,1011 @@
+/*
+ * Intel Multiprocessor Specification 1.1 and 1.4
@@ -48374,9 +49031,9 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/mpparse-xen.c linux-2.6.18-xen-3.2.
+
+#endif /*CONFIG_X86_IO_APIC*/
+#endif /*CONFIG_ACPI*/
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/pci-swiotlb-xen.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/pci-swiotlb-xen.c
---- linux-2.6.18.8/arch/x86_64/kernel/pci-swiotlb-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/pci-swiotlb-xen.c 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/pci-swiotlb-xen.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/pci-swiotlb-xen.c
+--- linux-2.6.18.8/arch/x86_64/kernel/pci-swiotlb-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/pci-swiotlb-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,55 @@
+/* Glue code to lib/swiotlb.c */
+
@@ -48433,10 +49090,10 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/pci-swiotlb-xen.c linux-2.6.18-xen-
+ }
+#endif
+}
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/process-xen.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/process-xen.c
---- linux-2.6.18.8/arch/x86_64/kernel/process-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/process-xen.c 2008-02-15 16:21:55.000000000 -0800
-@@ -0,0 +1,833 @@
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/process-xen.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/process-xen.c
+--- linux-2.6.18.8/arch/x86_64/kernel/process-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/process-xen.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,848 @@
+/*
+ * linux/arch/x86-64/kernel/process.c
+ *
@@ -48930,8 +49587,14 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/process-xen.c linux-2.6.18-xen-3.2.
+#ifndef CONFIG_X86_NO_TSS
+ struct tss_struct *tss = &per_cpu(init_tss, cpu);
+#endif
++#if CONFIG_XEN_COMPAT > 0x030002
+ struct physdev_set_iopl iopl_op;
+ struct physdev_set_iobitmap iobmp_op;
++#else
++ struct physdev_op _pdo[2], *pdo = _pdo;
++#define iopl_op pdo->u.set_iopl
++#define iobmp_op pdo->u.set_iobitmap
++#endif
+ multicall_entry_t _mcl[8], *mcl = _mcl;
+
+ /*
@@ -48974,9 +49637,15 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/process-xen.c linux-2.6.18-xen-3.2.
+
+ if (unlikely(prev->iopl != next->iopl)) {
+ iopl_op.iopl = (next->iopl == 0) ? 1 : next->iopl;
++#if CONFIG_XEN_COMPAT > 0x030002
+ mcl->op = __HYPERVISOR_physdev_op;
+ mcl->args[0] = PHYSDEVOP_set_iopl;
+ mcl->args[1] = (unsigned long)&iopl_op;
++#else
++ mcl->op = __HYPERVISOR_physdev_op_compat;
++ pdo->cmd = PHYSDEVOP_set_iopl;
++ mcl->args[0] = (unsigned long)pdo++;
++#endif
+ mcl++;
+ }
+
@@ -48984,12 +49653,21 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/process-xen.c linux-2.6.18-xen-3.2.
+ set_xen_guest_handle(iobmp_op.bitmap,
+ (char *)next->io_bitmap_ptr);
+ iobmp_op.nr_ports = next->io_bitmap_ptr ? IO_BITMAP_BITS : 0;
++#if CONFIG_XEN_COMPAT > 0x030002
+ mcl->op = __HYPERVISOR_physdev_op;
+ mcl->args[0] = PHYSDEVOP_set_iobitmap;
+ mcl->args[1] = (unsigned long)&iobmp_op;
++#else
++ mcl->op = __HYPERVISOR_physdev_op_compat;
++ pdo->cmd = PHYSDEVOP_set_iobitmap;
++ mcl->args[0] = (unsigned long)pdo++;
++#endif
+ mcl++;
+ }
+
++#if CONFIG_XEN_COMPAT <= 0x030002
++ BUG_ON(pdo > _pdo + ARRAY_SIZE(_pdo));
++#endif
+ BUG_ON(mcl > _mcl + ARRAY_SIZE(_mcl));
+ if (unlikely(HYPERVISOR_multicall_check(_mcl, mcl - _mcl, NULL)))
+ BUG();
@@ -49264,15 +49942,9 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/process-xen.c linux-2.6.18-xen-3.2.
+ sp -= get_random_int() % 8192;
+ return sp & ~0xf;
+}
-+
-+#ifndef CONFIG_SMP
-+void _restore_vcpu(void)
-+{
-+}
-+#endif
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/relocate_kernel.S linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/relocate_kernel.S
---- linux-2.6.18.8/arch/x86_64/kernel/relocate_kernel.S 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/relocate_kernel.S 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/relocate_kernel.S linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/relocate_kernel.S
+--- linux-2.6.18.8/arch/x86_64/kernel/relocate_kernel.S 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/relocate_kernel.S 2008-08-21 11:36:07.000000000 +0200
@@ -7,31 +7,195 @@
*/
@@ -49509,10 +50181,395 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/relocate_kernel.S linux-2.6.18-xen-
+idt_80:
+ .word 0 /* limit */
+ .quad 0 /* base */
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/setup-xen.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/setup-xen.c
---- linux-2.6.18.8/arch/x86_64/kernel/setup-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/setup-xen.c 2008-02-15 16:21:55.000000000 -0800
-@@ -0,0 +1,1662 @@
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/setup64-xen.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/setup64-xen.c
+--- linux-2.6.18.8/arch/x86_64/kernel/setup64-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/setup64-xen.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,367 @@
++/*
++ * X86-64 specific CPU setup.
++ * Copyright (C) 1995 Linus Torvalds
++ * Copyright 2001, 2002, 2003 SuSE Labs / Andi Kleen.
++ * See setup.c for older changelog.
++ *
++ * Jun Nakajima <jun.nakajima@intel.com>
++ * Modified for Xen
++ *
++ */
++#include <linux/init.h>
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/string.h>
++#include <linux/bootmem.h>
++#include <linux/bitops.h>
++#include <linux/module.h>
++#include <asm/bootsetup.h>
++#include <asm/pda.h>
++#include <asm/pgtable.h>
++#include <asm/processor.h>
++#include <asm/desc.h>
++#include <asm/atomic.h>
++#include <asm/mmu_context.h>
++#include <asm/smp.h>
++#include <asm/i387.h>
++#include <asm/percpu.h>
++#include <asm/proto.h>
++#include <asm/sections.h>
++#ifdef CONFIG_XEN
++#include <asm/hypervisor.h>
++#endif
++
++char x86_boot_params[BOOT_PARAM_SIZE] __initdata = {0,};
++
++cpumask_t cpu_initialized __cpuinitdata = CPU_MASK_NONE;
++
++struct x8664_pda *_cpu_pda[NR_CPUS] __read_mostly;
++EXPORT_SYMBOL(_cpu_pda);
++struct x8664_pda boot_cpu_pda[NR_CPUS] __cacheline_aligned;
++
++#ifndef CONFIG_X86_NO_IDT
++struct desc_ptr idt_descr = { 256 * 16 - 1, (unsigned long) idt_table };
++#endif
++
++char boot_cpu_stack[IRQSTACKSIZE] __attribute__((section(".bss.page_aligned")));
++
++unsigned long __supported_pte_mask __read_mostly = ~0UL;
++EXPORT_SYMBOL(__supported_pte_mask);
++static int do_not_nx __cpuinitdata = 0;
++
++/* noexec=on|off
++Control non executable mappings for 64bit processes.
++
++on Enable(default)
++off Disable
++*/
++int __init nonx_setup(char *str)
++{
++ if (!strncmp(str, "on", 2)) {
++ __supported_pte_mask |= _PAGE_NX;
++ do_not_nx = 0;
++ } else if (!strncmp(str, "off", 3)) {
++ do_not_nx = 1;
++ __supported_pte_mask &= ~_PAGE_NX;
++ }
++ return 1;
++}
++__setup("noexec=", nonx_setup); /* parsed early actually */
++
++int force_personality32 = 0;
++
++/* noexec32=on|off
++Control non executable heap for 32bit processes.
++To control the stack too use noexec=off
++
++on PROT_READ does not imply PROT_EXEC for 32bit processes
++off PROT_READ implies PROT_EXEC (default)
++*/
++static int __init nonx32_setup(char *str)
++{
++ if (!strcmp(str, "on"))
++ force_personality32 &= ~READ_IMPLIES_EXEC;
++ else if (!strcmp(str, "off"))
++ force_personality32 |= READ_IMPLIES_EXEC;
++ return 1;
++}
++__setup("noexec32=", nonx32_setup);
++
++/*
++ * Great future plan:
++ * Declare PDA itself and support (irqstack,tss,pgd) as per cpu data.
++ * Always point %gs to its beginning
++ */
++void __init setup_per_cpu_areas(void)
++{
++ int i;
++ unsigned long size;
++
++#ifdef CONFIG_HOTPLUG_CPU
++ prefill_possible_map();
++#endif
++
++ /* Copy section for each CPU (we discard the original) */
++ size = ALIGN(__per_cpu_end - __per_cpu_start, SMP_CACHE_BYTES);
++#ifdef CONFIG_MODULES
++ if (size < PERCPU_ENOUGH_ROOM)
++ size = PERCPU_ENOUGH_ROOM;
++#endif
++
++ for_each_cpu_mask (i, cpu_possible_map) {
++ char *ptr;
++
++ if (!NODE_DATA(cpu_to_node(i))) {
++ printk("cpu with no node %d, num_online_nodes %d\n",
++ i, num_online_nodes());
++ ptr = alloc_bootmem(size);
++ } else {
++ ptr = alloc_bootmem_node(NODE_DATA(cpu_to_node(i)), size);
++ }
++ if (!ptr)
++ panic("Cannot allocate cpu data for CPU %d\n", i);
++ cpu_pda(i)->data_offset = ptr - __per_cpu_start;
++ memcpy(ptr, __per_cpu_start, __per_cpu_end - __per_cpu_start);
++ }
++}
++
++#ifdef CONFIG_XEN
++static void switch_pt(void)
++{
++ xen_pt_switch(__pa_symbol(init_level4_pgt));
++ xen_new_user_pt(__pa_symbol(__user_pgd(init_level4_pgt)));
++}
++
++static void __cpuinit cpu_gdt_init(const struct desc_ptr *gdt_descr)
++{
++ unsigned long frames[16];
++ unsigned long va;
++ int f;
++
++ for (va = gdt_descr->address, f = 0;
++ va < gdt_descr->address + gdt_descr->size;
++ va += PAGE_SIZE, f++) {
++ frames[f] = virt_to_mfn(va);
++ make_page_readonly(
++ (void *)va, XENFEAT_writable_descriptor_tables);
++ }
++ if (HYPERVISOR_set_gdt(frames, (gdt_descr->size + 1) /
++ sizeof (struct desc_struct)))
++ BUG();
++}
++#else
++static void switch_pt(void)
++{
++ asm volatile("movq %0,%%cr3" :: "r" (__pa_symbol(&init_level4_pgt)));
++}
++
++static void __cpuinit cpu_gdt_init(const struct desc_ptr *gdt_descr)
++{
++ asm volatile("lgdt %0" :: "m" (*gdt_descr));
++ asm volatile("lidt %0" :: "m" (idt_descr));
++}
++#endif
++
++void pda_init(int cpu)
++{
++ struct x8664_pda *pda = cpu_pda(cpu);
++
++ /* Setup up data that may be needed in __get_free_pages early */
++ asm volatile("movl %0,%%fs ; movl %0,%%gs" :: "r" (0));
++#ifndef CONFIG_XEN
++ wrmsrl(MSR_GS_BASE, pda);
++#else
++ if (HYPERVISOR_set_segment_base(SEGBASE_GS_KERNEL,
++ (unsigned long)pda))
++ BUG();
++#endif
++ pda->cpunumber = cpu;
++ pda->irqcount = -1;
++ pda->kernelstack =
++ (unsigned long)stack_thread_info() - PDA_STACKOFFSET + THREAD_SIZE;
++ pda->active_mm = &init_mm;
++ pda->mmu_state = 0;
++
++ if (cpu == 0) {
++#ifdef CONFIG_XEN
++ xen_init_pt();
++#endif
++ /* others are initialized in smpboot.c */
++ pda->pcurrent = &init_task;
++ pda->irqstackptr = boot_cpu_stack;
++ } else {
++ pda->irqstackptr = (char *)
++ __get_free_pages(GFP_ATOMIC, IRQSTACK_ORDER);
++ if (!pda->irqstackptr)
++ panic("cannot allocate irqstack for cpu %d", cpu);
++ }
++
++ switch_pt();
++
++ pda->irqstackptr += IRQSTACKSIZE-64;
++}
++
++#ifndef CONFIG_X86_NO_TSS
++char boot_exception_stacks[(N_EXCEPTION_STACKS - 1) * EXCEPTION_STKSZ + DEBUG_STKSZ]
++__attribute__((section(".bss.page_aligned")));
++#endif
++
++/* May not be marked __init: used by software suspend */
++void syscall_init(void)
++{
++#ifndef CONFIG_XEN
++ /*
++ * LSTAR and STAR live in a bit strange symbiosis.
++ * They both write to the same internal register. STAR allows to set CS/DS
++ * but only a 32bit target. LSTAR sets the 64bit rip.
++ */
++ wrmsrl(MSR_STAR, ((u64)__USER32_CS)<<48 | ((u64)__KERNEL_CS)<<32);
++ wrmsrl(MSR_LSTAR, system_call);
++
++ /* Flags to clear on syscall */
++ wrmsrl(MSR_SYSCALL_MASK, EF_TF|EF_DF|EF_IE|0x3000);
++#endif
++#ifdef CONFIG_IA32_EMULATION
++ syscall32_cpu_init ();
++#endif
++}
++
++void __cpuinit check_efer(void)
++{
++ unsigned long efer;
++
++ rdmsrl(MSR_EFER, efer);
++ if (!(efer & EFER_NX) || do_not_nx) {
++ __supported_pte_mask &= ~_PAGE_NX;
++ }
++}
++
++unsigned long kernel_eflags;
++
++/*
++ * cpu_init() initializes state that is per-CPU. Some data is already
++ * initialized (naturally) in the bootstrap process, such as the GDT
++ * and IDT. We reload them nevertheless, this function acts as a
++ * 'CPU state barrier', nothing should get across.
++ * A lot of state is already set up in PDA init.
++ */
++void __cpuinit cpu_init (void)
++{
++ int cpu = stack_smp_processor_id();
++#ifndef CONFIG_X86_NO_TSS
++ struct tss_struct *t = &per_cpu(init_tss, cpu);
++ struct orig_ist *orig_ist = &per_cpu(orig_ist, cpu);
++ unsigned long v;
++ char *estacks = NULL;
++ unsigned i;
++#endif
++ struct task_struct *me;
++
++ /* CPU 0 is initialised in head64.c */
++ if (cpu != 0) {
++ pda_init(cpu);
++ zap_low_mappings(cpu);
++ }
++#ifndef CONFIG_X86_NO_TSS
++ else
++ estacks = boot_exception_stacks;
++#endif
++
++ me = current;
++
++ if (cpu_test_and_set(cpu, cpu_initialized))
++ panic("CPU#%d already initialized!\n", cpu);
++
++ printk("Initializing CPU#%d\n", cpu);
++
++ clear_in_cr4(X86_CR4_VME|X86_CR4_PVI|X86_CR4_TSD|X86_CR4_DE);
++
++ /*
++ * Initialize the per-CPU GDT with the boot GDT,
++ * and set up the GDT descriptor:
++ */
++#ifndef CONFIG_XEN
++ if (cpu)
++ memcpy(cpu_gdt(cpu), cpu_gdt_table, GDT_SIZE);
++#endif
++
++ cpu_gdt_descr[cpu].size = GDT_SIZE;
++ cpu_gdt_init(&cpu_gdt_descr[cpu]);
++
++ memset(me->thread.tls_array, 0, GDT_ENTRY_TLS_ENTRIES * 8);
++ syscall_init();
++
++ wrmsrl(MSR_FS_BASE, 0);
++ wrmsrl(MSR_KERNEL_GS_BASE, 0);
++ barrier();
++
++ check_efer();
++
++#ifndef CONFIG_X86_NO_TSS
++ /*
++ * set up and load the per-CPU TSS
++ */
++ for (v = 0; v < N_EXCEPTION_STACKS; v++) {
++ if (cpu) {
++ static const unsigned int order[N_EXCEPTION_STACKS] = {
++ [0 ... N_EXCEPTION_STACKS - 1] = EXCEPTION_STACK_ORDER,
++ [DEBUG_STACK - 1] = DEBUG_STACK_ORDER
++ };
++
++ estacks = (char *)__get_free_pages(GFP_ATOMIC, order[v]);
++ if (!estacks)
++ panic("Cannot allocate exception stack %ld %d\n",
++ v, cpu);
++ }
++ switch (v + 1) {
++#if DEBUG_STKSZ > EXCEPTION_STKSZ
++ case DEBUG_STACK:
++ cpu_pda(cpu)->debugstack = (unsigned long)estacks;
++ estacks += DEBUG_STKSZ;
++ break;
++#endif
++ default:
++ estacks += EXCEPTION_STKSZ;
++ break;
++ }
++ orig_ist->ist[v] = t->ist[v] = (unsigned long)estacks;
++ }
++
++ t->io_bitmap_base = offsetof(struct tss_struct, io_bitmap);
++ /*
++ * <= is required because the CPU will access up to
++ * 8 bits beyond the end of the IO permission bitmap.
++ */
++ for (i = 0; i <= IO_BITMAP_LONGS; i++)
++ t->io_bitmap[i] = ~0UL;
++#endif
++
++ atomic_inc(&init_mm.mm_count);
++ me->active_mm = &init_mm;
++ if (me->mm)
++ BUG();
++ enter_lazy_tlb(&init_mm, me);
++
++#ifndef CONFIG_X86_NO_TSS
++ set_tss_desc(cpu, t);
++#endif
++#ifndef CONFIG_XEN
++ load_TR_desc();
++#endif
++ load_LDT(&init_mm.context);
++
++ /*
++ * Clear all 6 debug registers:
++ */
++
++ set_debugreg(0UL, 0);
++ set_debugreg(0UL, 1);
++ set_debugreg(0UL, 2);
++ set_debugreg(0UL, 3);
++ set_debugreg(0UL, 6);
++ set_debugreg(0UL, 7);
++
++ fpu_init();
++
++ raw_local_save_flags(kernel_eflags);
++}
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/setup.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/setup.c
+--- linux-2.6.18.8/arch/x86_64/kernel/setup.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/setup.c 2008-08-21 11:36:07.000000000 +0200
+@@ -122,7 +122,9 @@ struct resource standard_io_resources[]
+ .flags = IORESOURCE_BUSY | IORESOURCE_IO },
+ { .name = "timer1", .start = 0x50, .end = 0x53,
+ .flags = IORESOURCE_BUSY | IORESOURCE_IO },
+- { .name = "keyboard", .start = 0x60, .end = 0x6f,
++ { .name = "keyboard", .start = 0x60, .end = 0x60,
++ .flags = IORESOURCE_BUSY | IORESOURCE_IO },
++ { .name = "keyboard", .start = 0x64, .end = 0x64,
+ .flags = IORESOURCE_BUSY | IORESOURCE_IO },
+ { .name = "dma page reg", .start = 0x80, .end = 0x8f,
+ .flags = IORESOURCE_BUSY | IORESOURCE_IO },
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/setup-xen.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/setup-xen.c
+--- linux-2.6.18.8/arch/x86_64/kernel/setup-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/setup-xen.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,1654 @@
+/*
+ * linux/arch/x86-64/kernel/setup.c
+ *
@@ -49684,7 +50741,9 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/setup-xen.c linux-2.6.18-xen-3.2.0/
+ .flags = IORESOURCE_BUSY | IORESOURCE_IO },
+ { .name = "timer1", .start = 0x50, .end = 0x53,
+ .flags = IORESOURCE_BUSY | IORESOURCE_IO },
-+ { .name = "keyboard", .start = 0x60, .end = 0x6f,
++ { .name = "keyboard", .start = 0x60, .end = 0x60,
++ .flags = IORESOURCE_BUSY | IORESOURCE_IO },
++ { .name = "keyboard", .start = 0x64, .end = 0x64,
+ .flags = IORESOURCE_BUSY | IORESOURCE_IO },
+ { .name = "dma page reg", .start = 0x80, .end = 0x8f,
+ .flags = IORESOURCE_BUSY | IORESOURCE_IO },
@@ -50418,18 +51477,8 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/setup-xen.c linux-2.6.18-xen-3.2.0/
+ */
+ probe_roms();
+#ifdef CONFIG_XEN
-+ if (is_initial_xendomain()) {
-+ struct xen_memory_map memmap;
-+
-+ memmap.nr_entries = E820MAX;
-+ set_xen_guest_handle(memmap.buffer, machine_e820.map);
-+
-+ if (HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap))
-+ BUG();
-+ machine_e820.nr_map = memmap.nr_entries;
-+
++ if (is_initial_xendomain())
+ e820_reserve_resources(machine_e820.map, machine_e820.nr_map);
-+ }
+#else
+ e820_reserve_resources(e820.map, e820.nr_map);
+#endif
@@ -51175,380 +52224,9 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/setup-xen.c linux-2.6.18-xen-3.2.0/
+}
+device_initcall(add_pcspkr);
+#endif
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/setup64-xen.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/setup64-xen.c
---- linux-2.6.18.8/arch/x86_64/kernel/setup64-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/setup64-xen.c 2008-02-15 16:21:55.000000000 -0800
-@@ -0,0 +1,367 @@
-+/*
-+ * X86-64 specific CPU setup.
-+ * Copyright (C) 1995 Linus Torvalds
-+ * Copyright 2001, 2002, 2003 SuSE Labs / Andi Kleen.
-+ * See setup.c for older changelog.
-+ *
-+ * Jun Nakajima <jun.nakajima@intel.com>
-+ * Modified for Xen
-+ *
-+ */
-+#include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/sched.h>
-+#include <linux/string.h>
-+#include <linux/bootmem.h>
-+#include <linux/bitops.h>
-+#include <linux/module.h>
-+#include <asm/bootsetup.h>
-+#include <asm/pda.h>
-+#include <asm/pgtable.h>
-+#include <asm/processor.h>
-+#include <asm/desc.h>
-+#include <asm/atomic.h>
-+#include <asm/mmu_context.h>
-+#include <asm/smp.h>
-+#include <asm/i387.h>
-+#include <asm/percpu.h>
-+#include <asm/proto.h>
-+#include <asm/sections.h>
-+#ifdef CONFIG_XEN
-+#include <asm/hypervisor.h>
-+#endif
-+
-+char x86_boot_params[BOOT_PARAM_SIZE] __initdata = {0,};
-+
-+cpumask_t cpu_initialized __cpuinitdata = CPU_MASK_NONE;
-+
-+struct x8664_pda *_cpu_pda[NR_CPUS] __read_mostly;
-+EXPORT_SYMBOL(_cpu_pda);
-+struct x8664_pda boot_cpu_pda[NR_CPUS] __cacheline_aligned;
-+
-+#ifndef CONFIG_X86_NO_IDT
-+struct desc_ptr idt_descr = { 256 * 16 - 1, (unsigned long) idt_table };
-+#endif
-+
-+char boot_cpu_stack[IRQSTACKSIZE] __attribute__((section(".bss.page_aligned")));
-+
-+unsigned long __supported_pte_mask __read_mostly = ~0UL;
-+EXPORT_SYMBOL(__supported_pte_mask);
-+static int do_not_nx __cpuinitdata = 0;
-+
-+/* noexec=on|off
-+Control non executable mappings for 64bit processes.
-+
-+on Enable(default)
-+off Disable
-+*/
-+int __init nonx_setup(char *str)
-+{
-+ if (!strncmp(str, "on", 2)) {
-+ __supported_pte_mask |= _PAGE_NX;
-+ do_not_nx = 0;
-+ } else if (!strncmp(str, "off", 3)) {
-+ do_not_nx = 1;
-+ __supported_pte_mask &= ~_PAGE_NX;
-+ }
-+ return 1;
-+}
-+__setup("noexec=", nonx_setup); /* parsed early actually */
-+
-+int force_personality32 = 0;
-+
-+/* noexec32=on|off
-+Control non executable heap for 32bit processes.
-+To control the stack too use noexec=off
-+
-+on PROT_READ does not imply PROT_EXEC for 32bit processes
-+off PROT_READ implies PROT_EXEC (default)
-+*/
-+static int __init nonx32_setup(char *str)
-+{
-+ if (!strcmp(str, "on"))
-+ force_personality32 &= ~READ_IMPLIES_EXEC;
-+ else if (!strcmp(str, "off"))
-+ force_personality32 |= READ_IMPLIES_EXEC;
-+ return 1;
-+}
-+__setup("noexec32=", nonx32_setup);
-+
-+/*
-+ * Great future plan:
-+ * Declare PDA itself and support (irqstack,tss,pgd) as per cpu data.
-+ * Always point %gs to its beginning
-+ */
-+void __init setup_per_cpu_areas(void)
-+{
-+ int i;
-+ unsigned long size;
-+
-+#ifdef CONFIG_HOTPLUG_CPU
-+ prefill_possible_map();
-+#endif
-+
-+ /* Copy section for each CPU (we discard the original) */
-+ size = ALIGN(__per_cpu_end - __per_cpu_start, SMP_CACHE_BYTES);
-+#ifdef CONFIG_MODULES
-+ if (size < PERCPU_ENOUGH_ROOM)
-+ size = PERCPU_ENOUGH_ROOM;
-+#endif
-+
-+ for_each_cpu_mask (i, cpu_possible_map) {
-+ char *ptr;
-+
-+ if (!NODE_DATA(cpu_to_node(i))) {
-+ printk("cpu with no node %d, num_online_nodes %d\n",
-+ i, num_online_nodes());
-+ ptr = alloc_bootmem(size);
-+ } else {
-+ ptr = alloc_bootmem_node(NODE_DATA(cpu_to_node(i)), size);
-+ }
-+ if (!ptr)
-+ panic("Cannot allocate cpu data for CPU %d\n", i);
-+ cpu_pda(i)->data_offset = ptr - __per_cpu_start;
-+ memcpy(ptr, __per_cpu_start, __per_cpu_end - __per_cpu_start);
-+ }
-+}
-+
-+#ifdef CONFIG_XEN
-+static void switch_pt(void)
-+{
-+ xen_pt_switch(__pa_symbol(init_level4_pgt));
-+ xen_new_user_pt(__pa_symbol(__user_pgd(init_level4_pgt)));
-+}
-+
-+static void __cpuinit cpu_gdt_init(const struct desc_ptr *gdt_descr)
-+{
-+ unsigned long frames[16];
-+ unsigned long va;
-+ int f;
-+
-+ for (va = gdt_descr->address, f = 0;
-+ va < gdt_descr->address + gdt_descr->size;
-+ va += PAGE_SIZE, f++) {
-+ frames[f] = virt_to_mfn(va);
-+ make_page_readonly(
-+ (void *)va, XENFEAT_writable_descriptor_tables);
-+ }
-+ if (HYPERVISOR_set_gdt(frames, (gdt_descr->size + 1) /
-+ sizeof (struct desc_struct)))
-+ BUG();
-+}
-+#else
-+static void switch_pt(void)
-+{
-+ asm volatile("movq %0,%%cr3" :: "r" (__pa_symbol(&init_level4_pgt)));
-+}
-+
-+static void __cpuinit cpu_gdt_init(const struct desc_ptr *gdt_descr)
-+{
-+ asm volatile("lgdt %0" :: "m" (*gdt_descr));
-+ asm volatile("lidt %0" :: "m" (idt_descr));
-+}
-+#endif
-+
-+void pda_init(int cpu)
-+{
-+ struct x8664_pda *pda = cpu_pda(cpu);
-+
-+ /* Setup up data that may be needed in __get_free_pages early */
-+ asm volatile("movl %0,%%fs ; movl %0,%%gs" :: "r" (0));
-+#ifndef CONFIG_XEN
-+ wrmsrl(MSR_GS_BASE, pda);
-+#else
-+ if (HYPERVISOR_set_segment_base(SEGBASE_GS_KERNEL,
-+ (unsigned long)pda))
-+ BUG();
-+#endif
-+ pda->cpunumber = cpu;
-+ pda->irqcount = -1;
-+ pda->kernelstack =
-+ (unsigned long)stack_thread_info() - PDA_STACKOFFSET + THREAD_SIZE;
-+ pda->active_mm = &init_mm;
-+ pda->mmu_state = 0;
-+
-+ if (cpu == 0) {
-+#ifdef CONFIG_XEN
-+ xen_init_pt();
-+#endif
-+ /* others are initialized in smpboot.c */
-+ pda->pcurrent = &init_task;
-+ pda->irqstackptr = boot_cpu_stack;
-+ } else {
-+ pda->irqstackptr = (char *)
-+ __get_free_pages(GFP_ATOMIC, IRQSTACK_ORDER);
-+ if (!pda->irqstackptr)
-+ panic("cannot allocate irqstack for cpu %d", cpu);
-+ }
-+
-+ switch_pt();
-+
-+ pda->irqstackptr += IRQSTACKSIZE-64;
-+}
-+
-+#ifndef CONFIG_X86_NO_TSS
-+char boot_exception_stacks[(N_EXCEPTION_STACKS - 1) * EXCEPTION_STKSZ + DEBUG_STKSZ]
-+__attribute__((section(".bss.page_aligned")));
-+#endif
-+
-+/* May not be marked __init: used by software suspend */
-+void syscall_init(void)
-+{
-+#ifndef CONFIG_XEN
-+ /*
-+ * LSTAR and STAR live in a bit strange symbiosis.
-+ * They both write to the same internal register. STAR allows to set CS/DS
-+ * but only a 32bit target. LSTAR sets the 64bit rip.
-+ */
-+ wrmsrl(MSR_STAR, ((u64)__USER32_CS)<<48 | ((u64)__KERNEL_CS)<<32);
-+ wrmsrl(MSR_LSTAR, system_call);
-+
-+ /* Flags to clear on syscall */
-+ wrmsrl(MSR_SYSCALL_MASK, EF_TF|EF_DF|EF_IE|0x3000);
-+#endif
-+#ifdef CONFIG_IA32_EMULATION
-+ syscall32_cpu_init ();
-+#endif
-+}
-+
-+void __cpuinit check_efer(void)
-+{
-+ unsigned long efer;
-+
-+ rdmsrl(MSR_EFER, efer);
-+ if (!(efer & EFER_NX) || do_not_nx) {
-+ __supported_pte_mask &= ~_PAGE_NX;
-+ }
-+}
-+
-+unsigned long kernel_eflags;
-+
-+/*
-+ * cpu_init() initializes state that is per-CPU. Some data is already
-+ * initialized (naturally) in the bootstrap process, such as the GDT
-+ * and IDT. We reload them nevertheless, this function acts as a
-+ * 'CPU state barrier', nothing should get across.
-+ * A lot of state is already set up in PDA init.
-+ */
-+void __cpuinit cpu_init (void)
-+{
-+ int cpu = stack_smp_processor_id();
-+#ifndef CONFIG_X86_NO_TSS
-+ struct tss_struct *t = &per_cpu(init_tss, cpu);
-+ struct orig_ist *orig_ist = &per_cpu(orig_ist, cpu);
-+ unsigned long v;
-+ char *estacks = NULL;
-+ unsigned i;
-+#endif
-+ struct task_struct *me;
-+
-+ /* CPU 0 is initialised in head64.c */
-+ if (cpu != 0) {
-+ pda_init(cpu);
-+ zap_low_mappings(cpu);
-+ }
-+#ifndef CONFIG_X86_NO_TSS
-+ else
-+ estacks = boot_exception_stacks;
-+#endif
-+
-+ me = current;
-+
-+ if (cpu_test_and_set(cpu, cpu_initialized))
-+ panic("CPU#%d already initialized!\n", cpu);
-+
-+ printk("Initializing CPU#%d\n", cpu);
-+
-+ clear_in_cr4(X86_CR4_VME|X86_CR4_PVI|X86_CR4_TSD|X86_CR4_DE);
-+
-+ /*
-+ * Initialize the per-CPU GDT with the boot GDT,
-+ * and set up the GDT descriptor:
-+ */
-+#ifndef CONFIG_XEN
-+ if (cpu)
-+ memcpy(cpu_gdt(cpu), cpu_gdt_table, GDT_SIZE);
-+#endif
-+
-+ cpu_gdt_descr[cpu].size = GDT_SIZE;
-+ cpu_gdt_init(&cpu_gdt_descr[cpu]);
-+
-+ memset(me->thread.tls_array, 0, GDT_ENTRY_TLS_ENTRIES * 8);
-+ syscall_init();
-+
-+ wrmsrl(MSR_FS_BASE, 0);
-+ wrmsrl(MSR_KERNEL_GS_BASE, 0);
-+ barrier();
-+
-+ check_efer();
-+
-+#ifndef CONFIG_X86_NO_TSS
-+ /*
-+ * set up and load the per-CPU TSS
-+ */
-+ for (v = 0; v < N_EXCEPTION_STACKS; v++) {
-+ if (cpu) {
-+ static const unsigned int order[N_EXCEPTION_STACKS] = {
-+ [0 ... N_EXCEPTION_STACKS - 1] = EXCEPTION_STACK_ORDER,
-+ [DEBUG_STACK - 1] = DEBUG_STACK_ORDER
-+ };
-+
-+ estacks = (char *)__get_free_pages(GFP_ATOMIC, order[v]);
-+ if (!estacks)
-+ panic("Cannot allocate exception stack %ld %d\n",
-+ v, cpu);
-+ }
-+ switch (v + 1) {
-+#if DEBUG_STKSZ > EXCEPTION_STKSZ
-+ case DEBUG_STACK:
-+ cpu_pda(cpu)->debugstack = (unsigned long)estacks;
-+ estacks += DEBUG_STKSZ;
-+ break;
-+#endif
-+ default:
-+ estacks += EXCEPTION_STKSZ;
-+ break;
-+ }
-+ orig_ist->ist[v] = t->ist[v] = (unsigned long)estacks;
-+ }
-+
-+ t->io_bitmap_base = offsetof(struct tss_struct, io_bitmap);
-+ /*
-+ * <= is required because the CPU will access up to
-+ * 8 bits beyond the end of the IO permission bitmap.
-+ */
-+ for (i = 0; i <= IO_BITMAP_LONGS; i++)
-+ t->io_bitmap[i] = ~0UL;
-+#endif
-+
-+ atomic_inc(&init_mm.mm_count);
-+ me->active_mm = &init_mm;
-+ if (me->mm)
-+ BUG();
-+ enter_lazy_tlb(&init_mm, me);
-+
-+#ifndef CONFIG_X86_NO_TSS
-+ set_tss_desc(cpu, t);
-+#endif
-+#ifndef CONFIG_XEN
-+ load_TR_desc();
-+#endif
-+ load_LDT(&init_mm.context);
-+
-+ /*
-+ * Clear all 6 debug registers:
-+ */
-+
-+ set_debugreg(0UL, 0);
-+ set_debugreg(0UL, 1);
-+ set_debugreg(0UL, 2);
-+ set_debugreg(0UL, 3);
-+ set_debugreg(0UL, 6);
-+ set_debugreg(0UL, 7);
-+
-+ fpu_init();
-+
-+ raw_local_save_flags(kernel_eflags);
-+}
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/signal.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/signal.c
---- linux-2.6.18.8/arch/x86_64/kernel/signal.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/signal.c 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/signal.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/signal.c
+--- linux-2.6.18.8/arch/x86_64/kernel/signal.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/signal.c 2008-08-21 11:36:07.000000000 +0200
@@ -38,37 +38,6 @@ int ia32_setup_frame(int sig, struct k_s
sigset_t *set, struct pt_regs * regs);
@@ -51704,10 +52382,10 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/signal.c linux-2.6.18-xen-3.2.0/arc
}
void signal_fault(struct pt_regs *regs, void __user *frame, char *where)
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/smp-xen.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/smp-xen.c
---- linux-2.6.18.8/arch/x86_64/kernel/smp-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/smp-xen.c 2008-02-15 16:21:55.000000000 -0800
-@@ -0,0 +1,577 @@
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/smp-xen.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/smp-xen.c
+--- linux-2.6.18.8/arch/x86_64/kernel/smp-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/smp-xen.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,575 @@
+/*
+ * Intel SMP support routines.
+ *
@@ -51780,7 +52458,6 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/smp-xen.c linux-2.6.18-xen-3.2.0/ar
+ to a full cache line because other CPUs can access it and we don't
+ want false sharing in the per cpu data segment. */
+static DEFINE_PER_CPU(union smp_flush_state, flush_state);
-+#endif
+
+/*
+ * We cannot call mmdrop() because we are in interrupt context,
@@ -51794,7 +52471,6 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/smp-xen.c linux-2.6.18-xen-3.2.0/ar
+ load_cr3(swapper_pg_dir);
+}
+
-+#ifndef CONFIG_XEN
+/*
+ *
+ * The flush IPI assumes that a thread switch happens in this order:
@@ -52285,9 +52961,9 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/smp-xen.c linux-2.6.18-xen-3.2.0/ar
+ return 0; /* Should not happen */
+#endif
+}
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/suspend.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/suspend.c
---- linux-2.6.18.8/arch/x86_64/kernel/suspend.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/suspend.c 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/suspend.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/suspend.c
+--- linux-2.6.18.8/arch/x86_64/kernel/suspend.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/suspend.c 2008-08-21 11:36:07.000000000 +0200
@@ -114,12 +114,14 @@ void restore_processor_state(void)
void fix_processor_context(void)
@@ -52303,9 +52979,9 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/suspend.c linux-2.6.18-xen-3.2.0/ar
syscall_init(); /* This sets MSR_*STAR and related */
load_TR_desc(); /* This does ltr */
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/traps-xen.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/traps-xen.c
---- linux-2.6.18.8/arch/x86_64/kernel/traps-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/traps-xen.c 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/traps-xen.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/traps-xen.c
+--- linux-2.6.18.8/arch/x86_64/kernel/traps-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/traps-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,1173 @@
+/*
+ * linux/arch/x86-64/traps.c
@@ -53397,7 +54073,7 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/traps-xen.c linux-2.6.18-xen-3.2.0/
+ * NB. All these are "interrupt gates" (i.e. events_mask is set) because we
+ * specify <dpl>|4 in the second field.
+ */
-+static trap_info_t trap_table[] = {
++static trap_info_t __cpuinitdata trap_table[] = {
+ { 0, 0|4, __KERNEL_CS, (unsigned long)divide_error },
+ { 1, 0|4, __KERNEL_CS, (unsigned long)debug },
+ { 3, 3|4, __KERNEL_CS, (unsigned long)int3 },
@@ -53438,7 +54114,7 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/traps-xen.c linux-2.6.18-xen-3.2.0/
+ cpu_init();
+}
+
-+void smp_trap_init(trap_info_t *trap_ctxt)
++void __cpuinit smp_trap_init(trap_info_t *trap_ctxt)
+{
+ const trap_info_t *t = trap_table;
+
@@ -53480,9 +54156,9 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/traps-xen.c linux-2.6.18-xen-3.2.0/
+}
+__setup("call_trace=", call_trace_setup);
+#endif
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/vmlinux.lds.S linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/vmlinux.lds.S
---- linux-2.6.18.8/arch/x86_64/kernel/vmlinux.lds.S 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/vmlinux.lds.S 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/vmlinux.lds.S linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/vmlinux.lds.S
+--- linux-2.6.18.8/arch/x86_64/kernel/vmlinux.lds.S 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/vmlinux.lds.S 2008-08-21 11:36:07.000000000 +0200
@@ -13,6 +13,13 @@ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86
OUTPUT_ARCH(i386:x86-64)
ENTRY(phys_startup_64)
@@ -53565,9 +54241,9 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/vmlinux.lds.S linux-2.6.18-xen-3.2.
+
+ NOTES
}
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/vsyscall-xen.c linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/vsyscall-xen.c
---- linux-2.6.18.8/arch/x86_64/kernel/vsyscall-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/vsyscall-xen.c 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/vsyscall-xen.c linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/vsyscall-xen.c
+--- linux-2.6.18.8/arch/x86_64/kernel/vsyscall-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/vsyscall-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,227 @@
+/*
+ * linux/arch/x86_64/kernel/vsyscall.c
@@ -53796,10 +54472,10 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/vsyscall-xen.c linux-2.6.18-xen-3.2
+}
+
+__initcall(vsyscall_init);
-diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/xen_entry.S linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/xen_entry.S
---- linux-2.6.18.8/arch/x86_64/kernel/xen_entry.S 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/kernel/xen_entry.S 2008-02-15 16:21:55.000000000 -0800
-@@ -0,0 +1,40 @@
+diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/xen_entry.S linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/xen_entry.S
+--- linux-2.6.18.8/arch/x86_64/kernel/xen_entry.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/kernel/xen_entry.S 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,36 @@
+/*
+ * Copied from arch/xen/i386/kernel/entry.S
+ */
@@ -53836,38 +54512,57 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/kernel/xen_entry.S linux-2.6.18-xen-3.2.0/
+ XEN_LOCKED_UNBLOCK_EVENTS(reg) ; \
+ XEN_PUT_VCPU_INFO(reg)
+#define XEN_TEST_PENDING(reg) testb $0xFF,evtchn_upcall_pending(reg)
-+
-+VGCF_IN_SYSCALL = (1<<8)
-+
-+
-diff -rpuN linux-2.6.18.8/arch/x86_64/lib/Makefile linux-2.6.18-xen-3.2.0/arch/x86_64/lib/Makefile
---- linux-2.6.18.8/arch/x86_64/lib/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/lib/Makefile 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/lib/Makefile linux-2.6.18-xen-3.3.0/arch/x86_64/lib/Makefile
+--- linux-2.6.18.8/arch/x86_64/lib/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/lib/Makefile 2008-08-21 11:36:07.000000000 +0200
@@ -10,3 +10,4 @@ lib-y := csum-partial.o csum-copy.o csum
usercopy.o getuser.o putuser.o \
thunk.o clear_page.o copy_page.o bitstr.o bitops.o
lib-y += memcpy.o memmove.o memset.o copy_user.o
+lib-$(CONFIG_XEN_SCRUB_PAGES) += scrub.o
-diff -rpuN linux-2.6.18.8/arch/x86_64/lib/scrub.c linux-2.6.18-xen-3.2.0/arch/x86_64/lib/scrub.c
---- linux-2.6.18.8/arch/x86_64/lib/scrub.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/lib/scrub.c 2008-02-15 16:21:55.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/lib/scrub.c linux-2.6.18-xen-3.3.0/arch/x86_64/lib/scrub.c
+--- linux-2.6.18.8/arch/x86_64/lib/scrub.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/lib/scrub.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1 @@
+#include "../../i386/lib/scrub.c"
-diff -rpuN linux-2.6.18.8/arch/x86_64/mm/Makefile linux-2.6.18-xen-3.2.0/arch/x86_64/mm/Makefile
---- linux-2.6.18.8/arch/x86_64/mm/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/mm/Makefile 2008-02-15 16:21:56.000000000 -0800
-@@ -7,5 +7,8 @@ obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpag
- obj-$(CONFIG_NUMA) += numa.o
- obj-$(CONFIG_K8_NUMA) += k8topology.o
- obj-$(CONFIG_ACPI_NUMA) += srat.o
-+obj-$(CONFIG_XEN) += hypervisor.o
+diff -rpuN linux-2.6.18.8/arch/x86_64/Makefile linux-2.6.18-xen-3.3.0/arch/x86_64/Makefile
+--- linux-2.6.18.8/arch/x86_64/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/Makefile 2008-08-21 11:36:07.000000000 +0200
+@@ -71,9 +71,22 @@ drivers-$(CONFIG_OPROFILE) += arch/x86_
- hugetlbpage-y = ../../i386/mm/hugetlbpage.o
-+ioremap-$(CONFIG_XEN) := ../../i386/mm/ioremap.o
-+hypervisor-y := ../../i386/mm/hypervisor.o
-diff -rpuN linux-2.6.18.8/arch/x86_64/mm/fault-xen.c linux-2.6.18-xen-3.2.0/arch/x86_64/mm/fault-xen.c
---- linux-2.6.18.8/arch/x86_64/mm/fault-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/mm/fault-xen.c 2008-02-15 16:21:56.000000000 -0800
+ boot := arch/x86_64/boot
+
+-PHONY += bzImage bzlilo install archmrproper \
++PHONY += bzImage bzlilo vmlinuz install archmrproper \
+ fdimage fdimage144 fdimage288 isoimage archclean
+
++ifdef CONFIG_XEN
++CPPFLAGS := -D__XEN_INTERFACE_VERSION__=$(CONFIG_XEN_INTERFACE_VERSION) \
++ -Iinclude$(if $(KBUILD_SRC),2)/asm/mach-xen $(CPPFLAGS)
++LDFLAGS_vmlinux := -e startup_64
++#Default target when executing "make"
++all: vmlinuz
++
++BOOTIMAGE := $(boot)/vmlinuz
++KBUILD_IMAGE := $(BOOTIMAGE)
++
++vmlinuz: vmlinux
++ $(Q)$(MAKE) $(build)=$(boot) $(BOOTIMAGE)
++else
+ #Default target when executing "make"
+ all: bzImage
+
+@@ -91,6 +104,7 @@ bzdisk: vmlinux
+
+ fdimage fdimage144 fdimage288 isoimage: vmlinux
+ $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) $@
++endif
+
+ install:
+ $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) $@
+diff -rpuN linux-2.6.18.8/arch/x86_64/mm/fault-xen.c linux-2.6.18-xen-3.3.0/arch/x86_64/mm/fault-xen.c
+--- linux-2.6.18.8/arch/x86_64/mm/fault-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/mm/fault-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,724 @@
+/*
+ * linux/arch/x86-64/mm/fault.c
@@ -54593,10 +55288,10 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/mm/fault-xen.c linux-2.6.18-xen-3.2.0/arch
+ return 1;
+}
+__setup("pagefaulttrace", enable_pagefaulttrace);
-diff -rpuN linux-2.6.18.8/arch/x86_64/mm/init-xen.c linux-2.6.18-xen-3.2.0/arch/x86_64/mm/init-xen.c
---- linux-2.6.18.8/arch/x86_64/mm/init-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/mm/init-xen.c 2008-02-15 16:21:56.000000000 -0800
-@@ -0,0 +1,1207 @@
+diff -rpuN linux-2.6.18.8/arch/x86_64/mm/init-xen.c linux-2.6.18-xen-3.3.0/arch/x86_64/mm/init-xen.c
+--- linux-2.6.18.8/arch/x86_64/mm/init-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/mm/init-xen.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,1213 @@
+/*
+ * linux/arch/x86_64/mm/init.c
+ *
@@ -54658,6 +55353,8 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/mm/init-xen.c linux-2.6.18-xen-3.2.0/arch/
+EXPORT_SYMBOL(__kernel_page_user);
+#endif
+
++int after_bootmem;
++
+extern unsigned long *contiguous_bitmap;
+
+static unsigned long dma_reserve __initdata;
@@ -54682,6 +55379,8 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/mm/init-xen.c linux-2.6.18-xen-3.2.0/arch/
+ pte_t pte, *ptep;
+ unsigned long *page = (unsigned long *) init_level4_pgt;
+
++ BUG_ON(after_bootmem);
++
+ if (xen_feature(feature))
+ return;
+
@@ -54806,7 +55505,6 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/mm/init-xen.c linux-2.6.18-xen-3.2.0/arch/
+ printk(KERN_INFO "%lu pages swap cached\n",cached);
+}
+
-+int after_bootmem;
+
+static __init void *spp_getpage(void)
+{
@@ -54921,6 +55619,14 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/mm/init-xen.c linux-2.6.18-xen-3.2.0/arch/
+ new_pte = pfn_pte_ma(phys >> PAGE_SHIFT, prot);
+
+ pte = pte_offset_kernel(pmd, vaddr);
++ if (!pte_none(*pte) &&
++#ifdef CONFIG_ACPI
++ /* __acpi_map_table() fails to properly call clear_fixmap() */
++ (vaddr < __fix_to_virt(FIX_ACPI_END) ||
++ vaddr > __fix_to_virt(FIX_ACPI_BEGIN)) &&
++#endif
++ __pte_val(*pte) != (__pte_val(new_pte) & __supported_pte_mask))
++ pte_ERROR(*pte);
+ set_pte(pte, new_pte);
+
+ /*
@@ -54972,11 +55678,6 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/mm/init-xen.c linux-2.6.18-xen-3.2.0/arch/
+
+#define PTE_SIZE PAGE_SIZE
+
-+static inline void __set_pte(pte_t *dst, pte_t val)
-+{
-+ *dst = val;
-+}
-+
+static inline int make_readonly(unsigned long paddr)
+{
+ extern char __vsyscall_0;
@@ -55045,28 +55746,28 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/mm/init-xen.c linux-2.6.18-xen-3.2.0/arch/
+ unsigned long pte_phys;
+ pte_t *pte, *pte_save;
+
-+ if (address >= end) {
-+ if (!after_bootmem)
-+ for (; i < PTRS_PER_PMD; i++, pmd++)
-+ set_pmd(pmd, __pmd(0));
++ if (address >= end)
+ break;
-+ }
+ pte = alloc_static_page(&pte_phys);
+ pte_save = pte;
+ for (k = 0; k < PTRS_PER_PTE; pte++, k++, address += PTE_SIZE) {
+ unsigned long pteval = address | _PAGE_NX | _KERNPG_TABLE;
+
-+ if ((address >= end) ||
-+ ((address >> PAGE_SHIFT) >=
-+ xen_start_info->nr_pages))
++ if (address >= (after_bootmem
++ ? end
++ : xen_start_info->nr_pages << PAGE_SHIFT))
+ pteval = 0;
+ else if (make_readonly(address))
+ pteval &= ~_PAGE_RW;
-+ __set_pte(pte, __pte(pteval & __supported_pte_mask));
++ set_pte(pte, __pte(pteval & __supported_pte_mask));
++ }
++ if (!after_bootmem) {
++ early_make_page_readonly(pte_save, XENFEAT_writable_page_tables);
++ *pmd = __pmd(pte_phys | _KERNPG_TABLE);
++ } else {
++ make_page_readonly(pte_save, XENFEAT_writable_page_tables);
++ set_pmd(pmd, __pmd(pte_phys | _KERNPG_TABLE));
+ }
-+ pte = pte_save;
-+ early_make_page_readonly(pte, XENFEAT_writable_page_tables);
-+ set_pmd(pmd, __pmd(pte_phys | _KERNPG_TABLE));
+ }
+}
+
@@ -55103,11 +55804,13 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/mm/init-xen.c linux-2.6.18-xen-3.2.0/arch/
+ break;
+
+ pmd = alloc_static_page(&pmd_phys);
-+ early_make_page_readonly(pmd, XENFEAT_writable_page_tables);
++
+ spin_lock(&init_mm.page_table_lock);
-+ set_pud(pud, __pud(pmd_phys | _KERNPG_TABLE));
++ *pud = __pud(pmd_phys | _KERNPG_TABLE);
+ phys_pmd_init(pmd, paddr, end);
+ spin_unlock(&init_mm.page_table_lock);
++
++ early_make_page_readonly(pmd, XENFEAT_writable_page_tables);
+ }
+ __flush_tlb();
+}
@@ -55338,20 +56041,18 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/mm/init-xen.c linux-2.6.18-xen-3.2.0/arch/
+ pgd_t *pgd = pgd_offset_k(start);
+ pud_t *pud;
+
-+ if (after_bootmem) {
++ if (after_bootmem)
+ pud = pud_offset(pgd, start & PGDIR_MASK);
-+ make_page_readonly(pud, XENFEAT_writable_page_tables);
-+ pud_phys = __pa(pud);
-+ } else {
++ else
+ pud = alloc_static_page(&pud_phys);
-+ early_make_page_readonly(pud, XENFEAT_writable_page_tables);
-+ }
+ next = start + PGDIR_SIZE;
+ if (next > end)
+ next = end;
+ phys_pud_init(pud, __pa(start), __pa(next));
-+ if (!after_bootmem)
++ if (!after_bootmem) {
++ early_make_page_readonly(pud, XENFEAT_writable_page_tables);
+ set_pgd(pgd_offset_k(start), mk_kernel_pgd(pud_phys));
++ }
+ }
+
+ if (!after_bootmem) {
@@ -55804,9 +56505,21 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/mm/init-xen.c linux-2.6.18-xen-3.2.0/arch/
+{
+ return (addr >= VSYSCALL_START) && (addr < VSYSCALL_END);
+}
-diff -rpuN linux-2.6.18.8/arch/x86_64/mm/pageattr-xen.c linux-2.6.18-xen-3.2.0/arch/x86_64/mm/pageattr-xen.c
---- linux-2.6.18.8/arch/x86_64/mm/pageattr-xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/mm/pageattr-xen.c 2008-02-15 16:21:56.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/mm/Makefile linux-2.6.18-xen-3.3.0/arch/x86_64/mm/Makefile
+--- linux-2.6.18.8/arch/x86_64/mm/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/mm/Makefile 2008-08-21 11:36:07.000000000 +0200
+@@ -7,5 +7,8 @@ obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpag
+ obj-$(CONFIG_NUMA) += numa.o
+ obj-$(CONFIG_K8_NUMA) += k8topology.o
+ obj-$(CONFIG_ACPI_NUMA) += srat.o
++obj-$(CONFIG_XEN) += hypervisor.o
+
+ hugetlbpage-y = ../../i386/mm/hugetlbpage.o
++ioremap-$(CONFIG_XEN) := ../../i386/mm/ioremap.o
++hypervisor-y := ../../i386/mm/hypervisor.o
+diff -rpuN linux-2.6.18.8/arch/x86_64/mm/pageattr-xen.c linux-2.6.18-xen-3.3.0/arch/x86_64/mm/pageattr-xen.c
+--- linux-2.6.18.8/arch/x86_64/mm/pageattr-xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/mm/pageattr-xen.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,502 @@
+/*
+ * Copyright 2002 Andi Kleen, SuSE Labs.
@@ -56086,7 +56799,7 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/mm/pageattr-xen.c linux-2.6.18-xen-3.2.0/a
+}
+#endif /* CONFIG_XEN */
+
-+static inline pte_t *lookup_address(unsigned long address)
++pte_t *lookup_address(unsigned long address)
+{
+ pgd_t *pgd = pgd_offset_k(address);
+ pud_t *pud;
@@ -56310,9 +57023,9 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/mm/pageattr-xen.c linux-2.6.18-xen-3.2.0/a
+
+EXPORT_SYMBOL(change_page_attr);
+EXPORT_SYMBOL(global_flush_tlb);
-diff -rpuN linux-2.6.18.8/arch/x86_64/oprofile/Makefile linux-2.6.18-xen-3.2.0/arch/x86_64/oprofile/Makefile
---- linux-2.6.18.8/arch/x86_64/oprofile/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/oprofile/Makefile 2008-02-15 16:21:56.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/oprofile/Makefile linux-2.6.18-xen-3.3.0/arch/x86_64/oprofile/Makefile
+--- linux-2.6.18.8/arch/x86_64/oprofile/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/oprofile/Makefile 2008-08-21 11:36:07.000000000 +0200
@@ -11,9 +11,15 @@ DRIVER_OBJS = $(addprefix ../../../drive
oprofilefs.o oprofile_stats.o \
timer_int.o )
@@ -56331,9 +57044,9 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/oprofile/Makefile linux-2.6.18-xen-3.2.0/a
+endif
+oprofile-y = $(DRIVER_OBJS) $(XENOPROF_COMMON_OBJS) \
+ $(addprefix ../../i386/oprofile/, $(OPROFILE-y))
-diff -rpuN linux-2.6.18.8/arch/x86_64/pci/Makefile linux-2.6.18-xen-3.2.0/arch/x86_64/pci/Makefile
---- linux-2.6.18.8/arch/x86_64/pci/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/arch/x86_64/pci/Makefile 2008-02-15 16:21:56.000000000 -0800
+diff -rpuN linux-2.6.18.8/arch/x86_64/pci/Makefile linux-2.6.18-xen-3.3.0/arch/x86_64/pci/Makefile
+--- linux-2.6.18.8/arch/x86_64/pci/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/arch/x86_64/pci/Makefile 2008-08-21 11:36:07.000000000 +0200
@@ -15,8 +15,13 @@ obj-$(CONFIG_PCI_MMCONFIG) += mmconfig.o
obj-$(CONFIG_NUMA) += k8-bus.o
@@ -56348,9 +57061,9 @@ diff -rpuN linux-2.6.18.8/arch/x86_64/pci/Makefile linux-2.6.18-xen-3.2.0/arch/x
legacy-y += ../../i386/pci/legacy.o
irq-y += ../../i386/pci/irq.o
common-y += ../../i386/pci/common.o
-diff -rpuN linux-2.6.18.8/block/elevator.c linux-2.6.18-xen-3.2.0/block/elevator.c
---- linux-2.6.18.8/block/elevator.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/block/elevator.c 2008-02-15 16:21:56.000000000 -0800
+diff -rpuN linux-2.6.18.8/block/elevator.c linux-2.6.18-xen-3.3.0/block/elevator.c
+--- linux-2.6.18.8/block/elevator.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/block/elevator.c 2008-08-21 11:36:07.000000000 +0200
@@ -493,6 +493,16 @@ struct request *elv_next_request(request
int ret;
@@ -56368,9 +57081,9 @@ diff -rpuN linux-2.6.18.8/block/elevator.c linux-2.6.18-xen-3.2.0/block/elevator
if (!(rq->flags & REQ_STARTED)) {
elevator_t *e = q->elevator;
-diff -rpuN linux-2.6.18.8/block/ll_rw_blk.c linux-2.6.18-xen-3.2.0/block/ll_rw_blk.c
---- linux-2.6.18.8/block/ll_rw_blk.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/block/ll_rw_blk.c 2008-02-15 16:21:56.000000000 -0800
+diff -rpuN linux-2.6.18.8/block/ll_rw_blk.c linux-2.6.18-xen-3.3.0/block/ll_rw_blk.c
+--- linux-2.6.18.8/block/ll_rw_blk.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/block/ll_rw_blk.c 2008-08-21 11:36:07.000000000 +0200
@@ -483,9 +483,12 @@ static inline struct request *start_orde
* Queue ordered sequence. As we stack them at the head, we
* need to queue in reverse order. Note that we rely on that
@@ -56466,9 +57179,9 @@ diff -rpuN linux-2.6.18.8/block/ll_rw_blk.c linux-2.6.18-xen-3.2.0/block/ll_rw_b
if (nr_bytes >= bio->bi_size) {
req->bio = bio->bi_next;
nbytes = bio->bi_size;
-diff -rpuN linux-2.6.18.8/buildconfigs/conf.linux-native/00_xen_to_native linux-2.6.18-xen-3.2.0/buildconfigs/conf.linux-native/00_xen_to_native
---- linux-2.6.18.8/buildconfigs/conf.linux-native/00_xen_to_native 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/buildconfigs/conf.linux-native/00_xen_to_native 2008-02-15 16:21:56.000000000 -0800
+diff -rpuN linux-2.6.18.8/buildconfigs/conf.linux-native/00_xen_to_native linux-2.6.18-xen-3.3.0/buildconfigs/conf.linux-native/00_xen_to_native
+--- linux-2.6.18.8/buildconfigs/conf.linux-native/00_xen_to_native 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/buildconfigs/conf.linux-native/00_xen_to_native 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,86 @@
+# Linux kernel version: 2.6.16.13-native
+# Mon May 15 10:59:54 2006
@@ -56556,9 +57269,9 @@ diff -rpuN linux-2.6.18.8/buildconfigs/conf.linux-native/00_xen_to_native linux-
+CONFIG_X86_HT=y
+# CONFIG_X86_NO_TSS is not set
+# CONFIG_X86_NO_IDT is not set
-diff -rpuN linux-2.6.18.8/buildconfigs/create_config.sh linux-2.6.18-xen-3.2.0/buildconfigs/create_config.sh
---- linux-2.6.18.8/buildconfigs/create_config.sh 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/buildconfigs/create_config.sh 2008-02-15 16:21:56.000000000 -0800
+diff -rpuN linux-2.6.18.8/buildconfigs/create_config.sh linux-2.6.18-xen-3.3.0/buildconfigs/create_config.sh
+--- linux-2.6.18.8/buildconfigs/create_config.sh 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/buildconfigs/create_config.sh 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,54 @@
+#!/bin/sh
+set -e
@@ -56614,14 +57327,14 @@ diff -rpuN linux-2.6.18.8/buildconfigs/create_config.sh linux-2.6.18-xen-3.2.0/b
+ done
+ fi
+done
-diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_ia64 linux-2.6.18-xen-3.2.0/buildconfigs/linux-defconfig_xen0_ia64
---- linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_ia64 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/buildconfigs/linux-defconfig_xen0_ia64 2008-02-15 16:21:56.000000000 -0800
-@@ -0,0 +1,1697 @@
+diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_ia64 linux-2.6.18-xen-3.3.0/buildconfigs/linux-defconfig_xen0_ia64
+--- linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_ia64 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/buildconfigs/linux-defconfig_xen0_ia64 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,1703 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.18.8
-+# Mon Dec 17 13:38:33 2007
++# Tue Feb 19 11:20:09 2008
+#
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
@@ -57271,6 +57984,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_ia64 linux-2.6.18-xe
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+# CONFIG_MYRI10GE is not set
++# CONFIG_SFC is not set
+
+#
+# Token Ring devices
@@ -58290,6 +59004,8 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_ia64 linux-2.6.18-xe
+CONFIG_XEN_BLKDEV_TAP=y
+CONFIG_XEN_NETDEV_BACKEND=y
+# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
++# CONFIG_XEN_NETDEV_ACCEL_SFC_UTIL is not set
++# CONFIG_XEN_NETDEV_ACCEL_SFC_BACKEND is not set
+# CONFIG_XEN_NETDEV_LOOPBACK is not set
+CONFIG_XEN_PCIDEV_BACKEND=y
+# CONFIG_XEN_PCIDEV_BACKEND_VPCI is not set
@@ -58298,9 +59014,12 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_ia64 linux-2.6.18-xe
+CONFIG_XEN_PCIDEV_BACKEND_CONTROLLER=y
+# CONFIG_XEN_PCIDEV_BE_DEBUG is not set
+CONFIG_XEN_TPMDEV_BACKEND=m
++CONFIG_XEN_SCSI_BACKEND=m
+CONFIG_XEN_BLKDEV_FRONTEND=y
+CONFIG_XEN_NETDEV_FRONTEND=y
++CONFIG_XEN_SCSI_FRONTEND=m
+CONFIG_XEN_GRANT_DEV=y
++# CONFIG_XEN_NETDEV_ACCEL_SFC_FRONTEND is not set
+CONFIG_XEN_FRAMEBUFFER=y
+CONFIG_XEN_KEYBOARD=y
+# CONFIG_XEN_SCRUB_PAGES is not set
@@ -58315,10 +59034,10 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_ia64 linux-2.6.18-xe
+CONFIG_NO_IDLE_HZ=y
+CONFIG_XEN_BALLOON=y
+CONFIG_XEN_XENCOMM=y
-diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_32 linux-2.6.18-xen-3.2.0/buildconfigs/linux-defconfig_xen0_x86_32
---- linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_32 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/buildconfigs/linux-defconfig_xen0_x86_32 2008-02-15 16:21:56.000000000 -0800
-@@ -0,0 +1,1451 @@
+diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_32 linux-2.6.18-xen-3.3.0/buildconfigs/linux-defconfig_xen0_x86_32
+--- linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_32 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/buildconfigs/linux-defconfig_xen0_x86_32 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,1458 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.18.8
@@ -58569,6 +59288,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_32 linux-2.6.18-
+CONFIG_XEN_PCIDEV_FRONTEND=y
+# CONFIG_XEN_PCIDEV_FE_DEBUG is not set
+# CONFIG_PCIEPORTBUS is not set
++# CONFIG_PCI_MSI is not set
+# CONFIG_PCI_DEBUG is not set
+CONFIG_ISA_DMA_API=y
+# CONFIG_SCx200 is not set
@@ -59073,6 +59793,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_32 linux-2.6.18-
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+# CONFIG_MYRI10GE is not set
++# CONFIG_SFC is not set
+
+#
+# Token Ring devices
@@ -59713,7 +60434,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_32 linux-2.6.18-
+#
+# CONFIG_CRYPTO_DEV_PADLOCK is not set
+CONFIG_XEN=y
-+CONFIG_XEN_INTERFACE_VERSION=0x00030206
++CONFIG_XEN_INTERFACE_VERSION=0x00030207
+
+#
+# XEN
@@ -59727,6 +60448,8 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_32 linux-2.6.18-
+CONFIG_XEN_BLKDEV_TAP=y
+CONFIG_XEN_NETDEV_BACKEND=y
+# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
++# CONFIG_XEN_NETDEV_ACCEL_SFC_UTIL is not set
++# CONFIG_XEN_NETDEV_ACCEL_SFC_BACKEND is not set
+# CONFIG_XEN_NETDEV_LOOPBACK is not set
+CONFIG_XEN_PCIDEV_BACKEND=y
+# CONFIG_XEN_PCIDEV_BACKEND_VPCI is not set
@@ -59735,8 +60458,12 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_32 linux-2.6.18-
+# CONFIG_XEN_PCIDEV_BACKEND_CONTROLLER is not set
+# CONFIG_XEN_PCIDEV_BE_DEBUG is not set
+CONFIG_XEN_TPMDEV_BACKEND=m
++CONFIG_XEN_SCSI_BACKEND=m
+CONFIG_XEN_BLKDEV_FRONTEND=y
+CONFIG_XEN_NETDEV_FRONTEND=y
++CONFIG_XEN_SCSI_FRONTEND=m
++CONFIG_XEN_GRANT_DEV=y
++# CONFIG_XEN_NETDEV_ACCEL_SFC_FRONTEND is not set
+CONFIG_XEN_SCRUB_PAGES=y
+CONFIG_XEN_DISABLE_SERIAL=y
+CONFIG_XEN_SYSFS=y
@@ -59750,7 +60477,6 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_32 linux-2.6.18-
+CONFIG_XEN_SMPBOOT=y
+CONFIG_XEN_BALLOON=y
+CONFIG_XEN_DEVMEM=y
-+CONFIG_XEN_GRANT_DEV=y
+
+#
+# Library routines
@@ -59770,14 +60496,14 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_32 linux-2.6.18-
+CONFIG_X86_NO_TSS=y
+CONFIG_X86_NO_IDT=y
+CONFIG_KTIME_SCALAR=y
-diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-xen-3.2.0/buildconfigs/linux-defconfig_xen0_x86_64
---- linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/buildconfigs/linux-defconfig_xen0_x86_64 2008-02-15 16:21:56.000000000 -0800
-@@ -0,0 +1,1389 @@
+diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-xen-3.3.0/buildconfigs/linux-defconfig_xen0_x86_64
+--- linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/buildconfigs/linux-defconfig_xen0_x86_64 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,1390 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.18.8
-+# Tue Oct 16 09:32:39 2007
++# Mon Feb 18 10:41:04 2008
+#
+CONFIG_X86_64=y
+CONFIG_64BIT=y
@@ -59802,7 +60528,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
++CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
@@ -59817,6 +60543,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
++# CONFIG_CPUSETS is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -59850,6 +60577,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
++CONFIG_STOP_MACHINE=y
+
+#
+# Block layer
@@ -59887,16 +60615,17 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+CONFIG_X86_INTERNODE_CACHE_BYTES=128
+CONFIG_X86_GOOD_APIC=y
+CONFIG_MICROCODE=y
-+# CONFIG_X86_MSR is not set
-+# CONFIG_X86_CPUID is not set
++CONFIG_X86_MSR=y
++CONFIG_X86_CPUID=y
+CONFIG_X86_IO_APIC=y
+CONFIG_X86_XEN_GENAPIC=y
+CONFIG_X86_LOCAL_APIC=y
+CONFIG_MTRR=y
-+# CONFIG_SMP is not set
++CONFIG_SMP=y
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
++CONFIG_PREEMPT_BKL=y
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
@@ -59907,6 +60636,8 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+CONFIG_RESOURCES_64BIT=y
++CONFIG_NR_CPUS=8
++CONFIG_HOTPLUG_CPU=y
+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+CONFIG_SWIOTLB=y
+CONFIG_KEXEC=y
@@ -59918,10 +60649,10 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=100
+# CONFIG_REORDER is not set
-+CONFIG_K8_NB=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_ISA_DMA_API=y
++CONFIG_GENERIC_PENDING_IRQ=y
+
+#
+# Power management options
@@ -59930,6 +60661,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+# CONFIG_SOFTWARE_SUSPEND is not set
++CONFIG_SUSPEND_SMP=y
+
+#
+# ACPI (Advanced Configuration and Power Interface) Support
@@ -59942,20 +60674,22 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+CONFIG_ACPI_BATTERY=m
+CONFIG_ACPI_BUTTON=m
+CONFIG_ACPI_VIDEO=m
-+# CONFIG_ACPI_HOTKEY is not set
++CONFIG_ACPI_HOTKEY=m
+CONFIG_ACPI_FAN=m
+CONFIG_ACPI_DOCK=m
+CONFIG_ACPI_PROCESSOR=m
++CONFIG_ACPI_HOTPLUG_CPU=y
+CONFIG_ACPI_THERMAL=m
+CONFIG_ACPI_ASUS=m
+CONFIG_ACPI_IBM=m
+CONFIG_ACPI_TOSHIBA=m
++# CONFIG_ACPI_CUSTOM_DSDT is not set
+CONFIG_ACPI_BLACKLIST_YEAR=0
+# CONFIG_ACPI_DEBUG is not set
+CONFIG_ACPI_EC=y
+CONFIG_ACPI_POWER=y
+CONFIG_ACPI_SYSTEM=y
-+# CONFIG_ACPI_CONTAINER is not set
++CONFIG_ACPI_CONTAINER=m
+CONFIG_ACPI_PV_SLEEP=y
+
+#
@@ -59968,10 +60702,11 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+#
+CONFIG_PCI=y
+CONFIG_PCI_DIRECT=y
-+# CONFIG_PCI_MMCONFIG is not set
++CONFIG_PCI_MMCONFIG=y
+CONFIG_XEN_PCIDEV_FRONTEND=y
+# CONFIG_XEN_PCIDEV_FE_DEBUG is not set
+# CONFIG_PCIEPORTBUS is not set
++# CONFIG_PCI_MSI is not set
+# CONFIG_PCI_DEBUG is not set
+
+#
@@ -59988,9 +60723,9 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+# Executable file formats / Emulations
+#
+CONFIG_BINFMT_ELF=y
-+CONFIG_BINFMT_MISC=y
++# CONFIG_BINFMT_MISC is not set
+CONFIG_IA32_EMULATION=y
-+# CONFIG_IA32_AOUT is not set
++CONFIG_IA32_AOUT=y
+CONFIG_COMPAT=y
+CONFIG_SYSVIPC_COMPAT=y
+
@@ -60006,6 +60741,8 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
++CONFIG_XFRM=y
++# CONFIG_XFRM_USER is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
@@ -60024,8 +60761,8 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
++CONFIG_INET_XFRM_MODE_TRANSPORT=y
++CONFIG_INET_XFRM_MODE_TUNNEL=y
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
@@ -60119,8 +60856,8 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+#
+# Generic Driver Options
+#
-+CONFIG_STANDALONE=y
-+# CONFIG_PREVENT_FIRMWARE_BUILD is not set
++# CONFIG_STANDALONE is not set
++CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
+# CONFIG_DEBUG_DRIVER is not set
+CONFIG_SYS_HYPERVISOR=y
@@ -60168,7 +60905,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=16384
++CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
@@ -60267,7 +61004,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+#
+CONFIG_SCSI_SPI_ATTRS=y
+# CONFIG_SCSI_FC_ATTRS is not set
-+CONFIG_SCSI_ISCSI_ATTRS=y
++# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
@@ -60281,7 +61018,6 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+CONFIG_SCSI_AIC7XXX=y
+CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
+CONFIG_AIC7XXX_RESET_DELAY_MS=15000
-+# CONFIG_AIC7XXX_BUILD_FIRMWARE is not set
+CONFIG_AIC7XXX_DEBUG_ENABLE=y
+CONFIG_AIC7XXX_DEBUG_MASK=0
+CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
@@ -60289,7 +61025,6 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+CONFIG_SCSI_AIC79XX=y
+CONFIG_AIC79XX_CMDS_PER_DEVICE=32
+CONFIG_AIC79XX_RESET_DELAY_MS=15000
-+# CONFIG_AIC79XX_BUILD_FIRMWARE is not set
+# CONFIG_AIC79XX_ENABLE_RD_STRM is not set
+CONFIG_AIC79XX_DEBUG_ENABLE=y
+CONFIG_AIC79XX_DEBUG_MASK=0
@@ -60316,8 +61051,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+# CONFIG_SCSI_SATA_VIA is not set
+# CONFIG_SCSI_SATA_VITESSE is not set
+CONFIG_SCSI_SATA_INTEL_COMBINED=y
-+CONFIG_SCSI_BUSLOGIC=y
-+# CONFIG_SCSI_OMIT_FLASHPOINT is not set
++# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
@@ -60339,21 +61073,19 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+#
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=y
-+CONFIG_MD_LINEAR=y
++# CONFIG_MD_LINEAR is not set
+CONFIG_MD_RAID0=y
+CONFIG_MD_RAID1=y
+# CONFIG_MD_RAID10 is not set
-+CONFIG_MD_RAID456=y
-+# CONFIG_MD_RAID5_RESHAPE is not set
-+CONFIG_MD_MULTIPATH=y
++# CONFIG_MD_RAID456 is not set
++# CONFIG_MD_MULTIPATH is not set
+# CONFIG_MD_FAULTY is not set
+CONFIG_BLK_DEV_DM=y
-+CONFIG_DM_CRYPT=y
++# CONFIG_DM_CRYPT is not set
+CONFIG_DM_SNAPSHOT=y
+CONFIG_DM_MIRROR=y
+# CONFIG_DM_ZERO is not set
-+CONFIG_DM_MULTIPATH=y
-+CONFIG_DM_MULTIPATH_EMC=y
++# CONFIG_DM_MULTIPATH is not set
+
+#
+# Fusion MPT device support
@@ -60474,6 +61206,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+# CONFIG_MYRI10GE is not set
++# CONFIG_SFC is not set
+
+#
+# Token Ring devices
@@ -60561,7 +61294,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
-+# CONFIG_VT_HW_CONSOLE_BINDING is not set
++CONFIG_VT_HW_CONSOLE_BINDING=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
@@ -60587,7 +61320,8 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
-+CONFIG_RTC=y
++# CONFIG_RTC is not set
++# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
@@ -60595,16 +61329,18 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+#
+# Ftape, the floppy tape device driver
+#
-+# CONFIG_FTAPE is not set
+CONFIG_AGP=m
-+CONFIG_AGP_AMD64=m
-+# CONFIG_AGP_INTEL is not set
++# CONFIG_AGP_AMD64 is not set
++CONFIG_AGP_INTEL=m
+CONFIG_AGP_SIS=m
+CONFIG_AGP_VIA=m
+CONFIG_DRM=m
+CONFIG_DRM_TDFX=m
+CONFIG_DRM_R128=m
+CONFIG_DRM_RADEON=m
++CONFIG_DRM_I810=m
++CONFIG_DRM_I830=m
++CONFIG_DRM_I915=m
+CONFIG_DRM_MGA=m
+CONFIG_DRM_SIS=m
+# CONFIG_DRM_VIA is not set
@@ -60803,8 +61539,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+#
+# LED devices
+#
-+CONFIG_NEW_LEDS=y
-+CONFIG_LEDS_CLASS=m
++# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
@@ -60813,25 +61548,11 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+#
+# LED Triggers
+#
-+CONFIG_LEDS_TRIGGERS=y
-+CONFIG_LEDS_TRIGGER_TIMER=y
-+CONFIG_LEDS_TRIGGER_IDE_DISK=y
-+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+
+#
+# InfiniBand support
+#
-+CONFIG_INFINIBAND=y
-+# CONFIG_INFINIBAND_USER_MAD is not set
-+# CONFIG_INFINIBAND_USER_ACCESS is not set
-+CONFIG_INFINIBAND_ADDR_TRANS=y
-+CONFIG_INFINIBAND_MTHCA=y
-+CONFIG_INFINIBAND_MTHCA_DEBUG=y
-+CONFIG_INFINIBAND_IPOIB=y
-+CONFIG_INFINIBAND_IPOIB_DEBUG=y
-+CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y
-+CONFIG_INFINIBAND_SRP=y
-+CONFIG_INFINIBAND_ISER=y
++# CONFIG_INFINIBAND is not set
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
@@ -60855,11 +61576,11 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+#
+# RTC drivers
+#
-+CONFIG_RTC_DRV_DS1553=m
-+CONFIG_RTC_DRV_DS1742=m
++# CONFIG_RTC_DRV_DS1553 is not set
++# CONFIG_RTC_DRV_DS1742 is not set
+CONFIG_RTC_DRV_M48T86=m
+CONFIG_RTC_DRV_TEST=m
-+CONFIG_RTC_DRV_V3020=m
++# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# DMA Engine support
@@ -60924,9 +61645,9 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+#
+# DOS/FAT/NT Filesystems
+#
-+CONFIG_FAT_FS=y
-+CONFIG_MSDOS_FS=y
-+CONFIG_VFAT_FS=y
++CONFIG_FAT_FS=m
++CONFIG_MSDOS_FS=m
++CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
@@ -61051,7 +61772,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_UNUSED_SYMBOLS=y
+CONFIG_DEBUG_KERNEL=y
-+CONFIG_LOG_BUF_SHIFT=15
++CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
@@ -61065,7 +61786,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_INFO is not set
++CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_FRAME_POINTER=y
@@ -61116,7 +61837,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+# Hardware crypto devices
+#
+CONFIG_XEN=y
-+CONFIG_XEN_INTERFACE_VERSION=0x00030206
++CONFIG_XEN_INTERFACE_VERSION=0x00030207
+
+#
+# XEN
@@ -61130,6 +61851,8 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+CONFIG_XEN_BLKDEV_TAP=y
+CONFIG_XEN_NETDEV_BACKEND=y
+# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
++# CONFIG_XEN_NETDEV_ACCEL_SFC_UTIL is not set
++# CONFIG_XEN_NETDEV_ACCEL_SFC_BACKEND is not set
+# CONFIG_XEN_NETDEV_LOOPBACK is not set
+CONFIG_XEN_PCIDEV_BACKEND=y
+# CONFIG_XEN_PCIDEV_BACKEND_VPCI is not set
@@ -61137,9 +61860,13 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+# CONFIG_XEN_PCIDEV_BACKEND_SLOT is not set
+# CONFIG_XEN_PCIDEV_BACKEND_CONTROLLER is not set
+# CONFIG_XEN_PCIDEV_BE_DEBUG is not set
-+CONFIG_XEN_TPMDEV_BACKEND=m
++# CONFIG_XEN_TPMDEV_BACKEND is not set
++# CONFIG_XEN_SCSI_BACKEND is not set
+CONFIG_XEN_BLKDEV_FRONTEND=y
+CONFIG_XEN_NETDEV_FRONTEND=y
++CONFIG_XEN_SCSI_FRONTEND=m
++CONFIG_XEN_GRANT_DEV=y
++# CONFIG_XEN_NETDEV_ACCEL_SFC_FRONTEND is not set
+CONFIG_XEN_SCRUB_PAGES=y
+CONFIG_XEN_DISABLE_SERIAL=y
+CONFIG_XEN_SYSFS=y
@@ -61150,9 +61877,9 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+CONFIG_XEN_COMPAT=0x030002
+CONFIG_HAVE_IRQ_IGNORE_UNHANDLED=y
+CONFIG_NO_IDLE_HZ=y
++CONFIG_XEN_SMPBOOT=y
+CONFIG_XEN_BALLOON=y
+CONFIG_XEN_DEVMEM=y
-+CONFIG_XEN_GRANT_DEV=y
+
+#
+# Library routines
@@ -61160,17 +61887,17 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen0_x86_64 linux-2.6.18-
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
-+CONFIG_LIBCRC32C=m
++CONFIG_LIBCRC32C=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_PLIST=y
-diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xen-3.2.0/buildconfigs/linux-defconfig_xenU_ia64
---- linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/buildconfigs/linux-defconfig_xenU_ia64 2008-02-15 16:21:56.000000000 -0800
-@@ -0,0 +1,1507 @@
+diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen-3.3.0/buildconfigs/linux-defconfig_xen_ia64
+--- linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/buildconfigs/linux-defconfig_xen_ia64 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,1703 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.18.8
-+# Mon Dec 17 13:38:36 2007
++# Tue Feb 19 11:20:00 2008
+#
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
@@ -61188,12 +61915,13 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
-+# CONFIG_POSIX_MQUEUE is not set
++CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
++CONFIG_IKCONFIG=y
++CONFIG_IKCONFIG_PROC=y
+# CONFIG_CPUSETS is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
@@ -61201,8 +61929,8 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+# CONFIG_EMBEDDED is not set
+CONFIG_SYSCTL=y
+CONFIG_KALLSYMS=y
-+# CONFIG_KALLSYMS_ALL is not set
-+# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_KALLSYMS_ALL=y
++CONFIG_KALLSYMS_EXTRA_PASS=y
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
@@ -61222,10 +61950,11 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+# Loadable module support
+#
+CONFIG_MODULES=y
-+# CONFIG_MODULE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+# CONFIG_KMOD is not set
++CONFIG_MODULE_UNLOAD=y
++# CONFIG_MODULE_FORCE_UNLOAD is not set
++CONFIG_MODVERSIONS=y
++CONFIG_MODULE_SRCVERSION_ALL=y
++CONFIG_KMOD=y
+CONFIG_STOP_MACHINE=y
+
+#
@@ -61266,13 +61995,13 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+CONFIG_DMA_IS_DMA32=y
+CONFIG_AUDIT_ARCH=y
-+# CONFIG_IA64_GENERIC is not set
++CONFIG_IA64_GENERIC=y
+# CONFIG_IA64_DIG is not set
+# CONFIG_IA64_HP_ZX1 is not set
+# CONFIG_IA64_HP_ZX1_SWIOTLB is not set
+# CONFIG_IA64_SGI_SN2 is not set
+# CONFIG_IA64_HP_SIM is not set
-+CONFIG_IA64_XEN=y
++# CONFIG_IA64_XEN is not set
+# CONFIG_ITANIUM is not set
+CONFIG_MCKINLEY=y
+# CONFIG_IA64_PAGE_SIZE_4KB is not set
@@ -61286,8 +62015,9 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=100
+CONFIG_IA64_L1_CACHE_SHIFT=7
-+# CONFIG_IA64_CYCLONE is not set
++CONFIG_IA64_CYCLONE=y
+CONFIG_IOSAPIC=y
++# CONFIG_IA64_SGI_SN_XP is not set
+CONFIG_FORCE_MAX_ZONEORDER=11
+CONFIG_SMP=y
+CONFIG_NR_CPUS=16
@@ -61297,26 +62027,38 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+# CONFIG_PERMIT_BSP_REMOVE is not set
+# CONFIG_PREEMPT is not set
+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_FLATMEM_MANUAL is not set
++CONFIG_DISCONTIGMEM_MANUAL=y
+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
++CONFIG_DISCONTIGMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
++CONFIG_NEED_MULTIPLE_NODES=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
++# CONFIG_MIGRATION is not set
+CONFIG_RESOURCES_64BIT=y
+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
++CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y
++CONFIG_NUMA=y
++CONFIG_NODES_SHIFT=10
+CONFIG_VIRTUAL_MEM_MAP=y
+CONFIG_HOLES_IN_ZONE=y
++CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
++CONFIG_HAVE_ARCH_NODEDATA_EXTENSION=y
+# CONFIG_IA32_SUPPORT is not set
-+CONFIG_IA64_MCA_RECOVERY=y
++# CONFIG_IA64_MCA_RECOVERY is not set
+CONFIG_PERFMON=y
+CONFIG_IA64_PALINFO=y
-+# CONFIG_KEXEC is not set
-+# CONFIG_CRASH_DUMP is not set
++CONFIG_SGI_SN=y
++
++#
++# SN Devices
++#
++# CONFIG_SGI_IOC3 is not set
++CONFIG_KEXEC=y
+
+#
+# Firmware Drivers
@@ -61343,6 +62085,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+CONFIG_ACPI_PROCESSOR=y
+CONFIG_ACPI_HOTPLUG_CPU=y
+CONFIG_ACPI_THERMAL=y
++CONFIG_ACPI_NUMA=y
+CONFIG_ACPI_BLACKLIST_YEAR=0
+# CONFIG_ACPI_DEBUG is not set
+CONFIG_ACPI_EC=y
@@ -61374,6 +62117,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+# CONFIG_HOTPLUG_PCI_ACPI_IBM is not set
+# CONFIG_HOTPLUG_PCI_CPCI is not set
+# CONFIG_HOTPLUG_PCI_SHPC is not set
++# CONFIG_HOTPLUG_PCI_SGI is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
@@ -61406,8 +62150,8 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+# CONFIG_SYN_COOKIES is not set
++CONFIG_ARPD=y
++CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
@@ -61430,6 +62174,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
++CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
@@ -61445,6 +62190,11 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+# CONFIG_IP_NF_QUEUE is not set
+
+#
++# Bridge: Netfilter Configuration
++#
++# CONFIG_BRIDGE_NF_EBTABLES is not set
++
++#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
@@ -61459,9 +62209,10 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
++CONFIG_BRIDGE=y
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
++CONFIG_LLC=y
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
@@ -61493,7 +62244,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_FW_LOADER is not set
++CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+CONFIG_SYS_HYPERVISOR=y
+
@@ -61521,13 +62272,14 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+# Block devices
+#
+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
++CONFIG_BLK_CPQ_CISS_DA=y
++# CONFIG_CISS_SCSI_TAPE is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
++CONFIG_BLK_DEV_CRYPTOLOOP=y
++CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
@@ -61541,7 +62293,61 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+#
+# ATA/ATAPI/MFM/RLL support
+#
-+# CONFIG_IDE is not set
++CONFIG_IDE=y
++CONFIG_IDE_MAX_HWIFS=4
++CONFIG_BLK_DEV_IDE=y
++
++#
++# Please see Documentation/ide.txt for help/info on IDE drives
++#
++# CONFIG_BLK_DEV_IDE_SATA is not set
++CONFIG_BLK_DEV_IDEDISK=y
++# CONFIG_IDEDISK_MULTI_MODE is not set
++CONFIG_BLK_DEV_IDECD=y
++# CONFIG_BLK_DEV_IDETAPE is not set
++CONFIG_BLK_DEV_IDEFLOPPY=y
++CONFIG_BLK_DEV_IDESCSI=y
++# CONFIG_IDE_TASK_IOCTL is not set
++
++#
++# IDE chipset support/bugfixes
++#
++# CONFIG_IDE_GENERIC is not set
++CONFIG_BLK_DEV_IDEPCI=y
++# CONFIG_IDEPCI_SHARE_IRQ is not set
++# CONFIG_BLK_DEV_OFFBOARD is not set
++CONFIG_BLK_DEV_GENERIC=y
++# CONFIG_BLK_DEV_OPTI621 is not set
++CONFIG_BLK_DEV_IDEDMA_PCI=y
++# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
++CONFIG_IDEDMA_PCI_AUTO=y
++# CONFIG_IDEDMA_ONLYDISK is not set
++# CONFIG_BLK_DEV_AEC62XX is not set
++# CONFIG_BLK_DEV_ALI15X3 is not set
++# CONFIG_BLK_DEV_AMD74XX is not set
++CONFIG_BLK_DEV_CMD64X=y
++# CONFIG_BLK_DEV_TRIFLEX is not set
++# CONFIG_BLK_DEV_CY82C693 is not set
++# CONFIG_BLK_DEV_CS5520 is not set
++# CONFIG_BLK_DEV_CS5530 is not set
++# CONFIG_BLK_DEV_HPT34X is not set
++# CONFIG_BLK_DEV_HPT366 is not set
++# CONFIG_BLK_DEV_SC1200 is not set
++CONFIG_BLK_DEV_PIIX=y
++# CONFIG_BLK_DEV_IT821X is not set
++# CONFIG_BLK_DEV_NS87415 is not set
++# CONFIG_BLK_DEV_PDC202XX_OLD is not set
++# CONFIG_BLK_DEV_PDC202XX_NEW is not set
++# CONFIG_BLK_DEV_SVWKS is not set
++# CONFIG_BLK_DEV_SIIMAGE is not set
++# CONFIG_BLK_DEV_SLC90E66 is not set
++# CONFIG_BLK_DEV_TRM290 is not set
++# CONFIG_BLK_DEV_VIA82CXXX is not set
++# CONFIG_IDE_ARM is not set
++CONFIG_BLK_DEV_IDEDMA=y
++# CONFIG_IDEDMA_IVB is not set
++CONFIG_IDEDMA_AUTO=y
++# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
@@ -61572,7 +62378,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+# SCSI Transport Attributes
+#
+CONFIG_SCSI_SPI_ATTRS=y
-+# CONFIG_SCSI_FC_ATTRS is not set
++CONFIG_SCSI_FC_ATTRS=y
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+CONFIG_SCSI_SAS_ATTRS=y
+
@@ -61613,7 +62419,15 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+#
+# Multi-device support (RAID and LVM)
+#
-+# CONFIG_MD is not set
++CONFIG_MD=y
++# CONFIG_BLK_DEV_MD is not set
++CONFIG_BLK_DEV_DM=y
++CONFIG_DM_CRYPT=m
++CONFIG_DM_SNAPSHOT=y
++CONFIG_DM_MIRROR=m
++CONFIG_DM_ZERO=m
++CONFIG_DM_MULTIPATH=m
++CONFIG_DM_MULTIPATH_EMC=m
+
+#
+# Fusion MPT device support
@@ -61642,12 +62456,20 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
++CONFIG_TUN=y
+
+#
+# ARCnet devices
+#
-+# CONFIG_ARCNET is not set
++CONFIG_ARCNET=y
++# CONFIG_ARCNET_1201 is not set
++# CONFIG_ARCNET_1051 is not set
++# CONFIG_ARCNET_RAW is not set
++# CONFIG_ARCNET_CAP is not set
++# CONFIG_ARCNET_COM90xx is not set
++# CONFIG_ARCNET_COM90xxIO is not set
++# CONFIG_ARCNET_RIM_I is not set
++# CONFIG_ARCNET_COM20020 is not set
+
+#
+# PHY device support
@@ -61686,7 +62508,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+# CONFIG_B44 is not set
+# CONFIG_FORCEDETH is not set
+# CONFIG_DGRS is not set
-+# CONFIG_EEPRO100 is not set
++CONFIG_EEPRO100=y
+CONFIG_E100=y
+# CONFIG_FEALNX is not set
+# CONFIG_NATSEMI is not set
@@ -61725,6 +62547,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+# CONFIG_MYRI10GE is not set
++# CONFIG_SFC is not set
+
+#
+# Token Ring devices
@@ -61746,14 +62569,26 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+# CONFIG_SLIP is not set
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
++CONFIG_NETCONSOLE=y
++CONFIG_NETPOLL=y
++# CONFIG_NETPOLL_RX is not set
++# CONFIG_NETPOLL_TRAP is not set
++CONFIG_NET_POLL_CONTROLLER=y
+
+#
+# ISDN subsystem
+#
-+# CONFIG_ISDN is not set
++CONFIG_ISDN=m
++
++#
++# Old ISDN4Linux
++#
++# CONFIG_ISDN_I4L is not set
++
++#
++# CAPI subsystem
++#
++# CONFIG_ISDN_CAPI is not set
+
+#
+# Telephony Support
@@ -61780,8 +62615,16 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+#
+# Input Device Drivers
+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
++CONFIG_INPUT_KEYBOARD=y
++CONFIG_KEYBOARD_ATKBD=y
++# CONFIG_KEYBOARD_SUNKBD is not set
++# CONFIG_KEYBOARD_LKKBD is not set
++# CONFIG_KEYBOARD_XTKBD is not set
++# CONFIG_KEYBOARD_NEWTON is not set
++CONFIG_INPUT_MOUSE=y
++CONFIG_MOUSE_PS2=y
++# CONFIG_MOUSE_SERIAL is not set
++# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
@@ -61790,11 +62633,16 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
-+# CONFIG_SERIO_I8042 is not set
++CONFIG_SERIO_I8042=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_PCIPS2 is not set
++CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
-+# CONFIG_GAMEPORT is not set
++CONFIG_GAMEPORT=y
++# CONFIG_GAMEPORT_NS558 is not set
++# CONFIG_GAMEPORT_L4 is not set
++# CONFIG_GAMEPORT_EMU10K1 is not set
++# CONFIG_GAMEPORT_FM801 is not set
+
+#
+# Character devices
@@ -61803,26 +62651,32 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
++CONFIG_SERIAL_NONSTANDARD=y
++# CONFIG_COMPUTONE is not set
++# CONFIG_ROCKETPORT is not set
++# CONFIG_CYCLADES is not set
++# CONFIG_DIGIEPCA is not set
++# CONFIG_MOXA_INTELLIO is not set
++# CONFIG_MOXA_SMARTIO is not set
++# CONFIG_ISI is not set
++# CONFIG_SYNCLINKMP is not set
++# CONFIG_SYNCLINK_GT is not set
++# CONFIG_N_HDLC is not set
++# CONFIG_SPECIALIX is not set
++# CONFIG_SX is not set
++# CONFIG_RIO is not set
++# CONFIG_STALDRV is not set
++# CONFIG_SGI_SNSC is not set
++# CONFIG_SGI_TIOCX is not set
+
+#
+# Serial drivers
+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_PCI=y
-+CONFIG_SERIAL_8250_NR_UARTS=8
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+CONFIG_SERIAL_8250_EXTENDED=y
-+CONFIG_SERIAL_8250_SHARE_IRQ=y
-+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-+# CONFIG_SERIAL_8250_RSA is not set
+
+#
+# Non-8250 serial port support
+#
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
++# CONFIG_SERIAL_SGI_L1_CONSOLE is not set
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
@@ -61849,10 +62703,13 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+CONFIG_AGP=y
+# CONFIG_AGP_SIS is not set
+# CONFIG_AGP_VIA is not set
++CONFIG_AGP_I460=y
++# CONFIG_AGP_HP_ZX1 is not set
++# CONFIG_AGP_SGI_TIOCA is not set
+CONFIG_DRM=y
+# CONFIG_DRM_TDFX is not set
+# CONFIG_DRM_R128 is not set
-+CONFIG_DRM_RADEON=y
++# CONFIG_DRM_RADEON is not set
+# CONFIG_DRM_MGA is not set
+# CONFIG_DRM_SIS is not set
+# CONFIG_DRM_VIA is not set
@@ -61860,6 +62717,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_HPET is not set
+# CONFIG_HANGCHECK_TIMER is not set
++# CONFIG_MMTIMER is not set
+
+#
+# TPM devices
@@ -62128,7 +62986,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+CONFIG_SND_HWDEP=y
+CONFIG_SND_RAWMIDI=y
+CONFIG_SND_SEQUENCER=y
-+# CONFIG_SND_SEQ_DUMMY is not set
++CONFIG_SND_SEQ_DUMMY=y
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
@@ -62147,11 +63005,11 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+CONFIG_SND_OPL3_LIB=y
+CONFIG_SND_AC97_CODEC=y
+CONFIG_SND_AC97_BUS=y
-+# CONFIG_SND_DUMMY is not set
-+# CONFIG_SND_VIRMIDI is not set
++CONFIG_SND_DUMMY=y
++CONFIG_SND_VIRMIDI=y
+# CONFIG_SND_MTPAV is not set
-+# CONFIG_SND_SERIAL_U16550 is not set
-+# CONFIG_SND_MPU401 is not set
++CONFIG_SND_SERIAL_U16550=y
++CONFIG_SND_MPU401=y
+
+#
+# PCI devices
@@ -62159,7 +63017,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+# CONFIG_SND_AD1889 is not set
+# CONFIG_SND_ALS300 is not set
+# CONFIG_SND_ALI5451 is not set
-+# CONFIG_SND_ATIIXP is not set
++CONFIG_SND_ATIIXP=y
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
@@ -62170,6 +63028,18 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_CS46XX is not set
++# CONFIG_SND_DARLA20 is not set
++# CONFIG_SND_GINA20 is not set
++# CONFIG_SND_LAYLA20 is not set
++# CONFIG_SND_DARLA24 is not set
++# CONFIG_SND_GINA24 is not set
++# CONFIG_SND_LAYLA24 is not set
++# CONFIG_SND_MONA is not set
++# CONFIG_SND_MIA is not set
++# CONFIG_SND_ECHO3G is not set
++# CONFIG_SND_INDIGO is not set
++# CONFIG_SND_INDIGOIO is not set
++# CONFIG_SND_INDIGODJ is not set
+# CONFIG_SND_EMU10K1 is not set
+# CONFIG_SND_EMU10K1X is not set
+# CONFIG_SND_ENS1370 is not set
@@ -62190,6 +63060,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_PCXHR is not set
++# CONFIG_SND_RIPTIDE is not set
+# CONFIG_SND_RME32 is not set
+# CONFIG_SND_RME96 is not set
+# CONFIG_SND_RME9652 is not set
@@ -62208,7 +63079,16 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+#
+# Open Sound System
+#
-+# CONFIG_SOUND_PRIME is not set
++CONFIG_SOUND_PRIME=y
++# CONFIG_OSS_OBSOLETE_DRIVER is not set
++# CONFIG_SOUND_BT878 is not set
++# CONFIG_SOUND_ES1371 is not set
++# CONFIG_SOUND_ICH is not set
++# CONFIG_SOUND_TRIDENT is not set
++# CONFIG_SOUND_MSNDCLAS is not set
++# CONFIG_SOUND_MSNDPIN is not set
++# CONFIG_SOUND_VIA82CXXX is not set
++# CONFIG_SOUND_TVMIXER is not set
+
+#
+# USB support
@@ -62222,7 +63102,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+#
+# Miscellaneous USB options
+#
-+# CONFIG_USB_DEVICEFS is not set
++CONFIG_USB_DEVICEFS=y
+CONFIG_USB_BANDWIDTH=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
@@ -62259,6 +63139,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
@@ -62331,6 +63212,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
++# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
@@ -62391,20 +63273,29 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
-+# CONFIG_EXT2_FS_POSIX_ACL is not set
-+# CONFIG_EXT2_FS_SECURITY is not set
++CONFIG_EXT2_FS_POSIX_ACL=y
++CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
++CONFIG_EXT3_FS_POSIX_ACL=y
++CONFIG_EXT3_FS_SECURITY=y
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
++CONFIG_REISERFS_FS=y
++# CONFIG_REISERFS_CHECK is not set
++# CONFIG_REISERFS_PROC_INFO is not set
++CONFIG_REISERFS_FS_XATTR=y
++CONFIG_REISERFS_FS_POSIX_ACL=y
++CONFIG_REISERFS_FS_SECURITY=y
+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
++CONFIG_FS_POSIX_ACL=y
++CONFIG_XFS_FS=y
++# CONFIG_XFS_QUOTA is not set
++# CONFIG_XFS_SECURITY is not set
++# CONFIG_XFS_POSIX_ACL is not set
++# CONFIG_XFS_RT is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
@@ -62413,7 +63304,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=y
-+# CONFIG_AUTOFS4_FS is not set
++CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
@@ -62440,6 +63331,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
++CONFIG_PROC_IOMEM_MACHINE=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
@@ -62470,12 +63362,12 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
-+# CONFIG_NFS_DIRECTIO is not set
++CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=y
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
-+# CONFIG_NFSD_V4 is not set
-+# CONFIG_NFSD_TCP is not set
++CONFIG_NFSD_V4=y
++CONFIG_NFSD_TCP=y
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
@@ -62485,8 +63377,15 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
++CONFIG_SMB_FS=y
++CONFIG_SMB_NLS_DEFAULT=y
++CONFIG_SMB_NLS_REMOTE="cp437"
++CONFIG_CIFS=y
++# CONFIG_CIFS_STATS is not set
++# CONFIG_CIFS_WEAK_PW_HASH is not set
++# CONFIG_CIFS_XATTR is not set
++# CONFIG_CIFS_DEBUG2 is not set
++# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
@@ -62507,7 +63406,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
-+# CONFIG_SGI_PARTITION is not set
++CONFIG_SGI_PARTITION=y
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
@@ -62571,6 +63470,13 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+CONFIG_IRQ_PER_CPU=y
+
+#
++# HP Simulator drivers
++#
++# CONFIG_HP_SIMETH is not set
++# CONFIG_HP_SIMSERIAL is not set
++# CONFIG_HP_SIMSCSI is not set
++
++#
+# Instrumentation Support
+#
+# CONFIG_PROFILING is not set
@@ -62583,7 +63489,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_UNUSED_SYMBOLS=y
+CONFIG_DEBUG_KERNEL=y
-+CONFIG_LOG_BUF_SHIFT=17
++CONFIG_LOG_BUF_SHIFT=20
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
@@ -62652,18 +63558,35 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+#
+# XEN
+#
-+# CONFIG_XEN_PRIVILEGED_GUEST is not set
-+CONFIG_XEN_UNPRIVILEGED_GUEST=y
++CONFIG_XEN_PRIVILEGED_GUEST=y
++# CONFIG_XEN_UNPRIVILEGED_GUEST is not set
+CONFIG_XEN_PRIVCMD=y
+CONFIG_XEN_XENBUS_DEV=y
-+# CONFIG_XEN_BACKEND is not set
++CONFIG_XEN_BACKEND=y
++CONFIG_XEN_BLKDEV_BACKEND=y
++CONFIG_XEN_BLKDEV_TAP=y
++CONFIG_XEN_NETDEV_BACKEND=y
++# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
++# CONFIG_XEN_NETDEV_ACCEL_SFC_UTIL is not set
++# CONFIG_XEN_NETDEV_ACCEL_SFC_BACKEND is not set
++# CONFIG_XEN_NETDEV_LOOPBACK is not set
++CONFIG_XEN_PCIDEV_BACKEND=y
++# CONFIG_XEN_PCIDEV_BACKEND_VPCI is not set
++# CONFIG_XEN_PCIDEV_BACKEND_PASS is not set
++# CONFIG_XEN_PCIDEV_BACKEND_SLOT is not set
++CONFIG_XEN_PCIDEV_BACKEND_CONTROLLER=y
++# CONFIG_XEN_PCIDEV_BE_DEBUG is not set
++CONFIG_XEN_TPMDEV_BACKEND=m
++CONFIG_XEN_SCSI_BACKEND=m
+CONFIG_XEN_BLKDEV_FRONTEND=y
+CONFIG_XEN_NETDEV_FRONTEND=y
-+# CONFIG_XEN_GRANT_DEV is not set
++CONFIG_XEN_SCSI_FRONTEND=m
++CONFIG_XEN_GRANT_DEV=y
++# CONFIG_XEN_NETDEV_ACCEL_SFC_FRONTEND is not set
+CONFIG_XEN_FRAMEBUFFER=y
+CONFIG_XEN_KEYBOARD=y
+# CONFIG_XEN_SCRUB_PAGES is not set
-+# CONFIG_XEN_DISABLE_SERIAL is not set
++CONFIG_XEN_DISABLE_SERIAL=y
+CONFIG_XEN_SYSFS=y
+CONFIG_XEN_COMPAT_030002_AND_LATER=y
+# CONFIG_XEN_COMPAT_030004_AND_LATER is not set
@@ -62674,26 +63597,15 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xe
+CONFIG_NO_IDLE_HZ=y
+CONFIG_XEN_BALLOON=y
+CONFIG_XEN_XENCOMM=y
-diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-xen-3.2.0/buildconfigs/linux-defconfig_xenU_x86_32
---- linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/buildconfigs/linux-defconfig_xenU_x86_32 2008-02-15 16:21:56.000000000 -0800
-@@ -0,0 +1,950 @@
+diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 linux-2.6.18-xen-3.3.0/buildconfigs/linux-defconfig_xenU_ia64
+--- linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_ia64 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/buildconfigs/linux-defconfig_xenU_ia64 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,1511 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.18.8
-+# Tue Oct 16 09:31:29 2007
++# Tue Feb 19 11:20:14 2008
+#
-+CONFIG_X86_32=y
-+CONFIG_LOCKDEP_SUPPORT=y
-+CONFIG_STACKTRACE_SUPPORT=y
-+CONFIG_SEMAPHORE_SLEEPERS=y
-+CONFIG_X86=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_ISA_DMA=y
-+CONFIG_GENERIC_IOMAP=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_DMI=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
@@ -62707,20 +63619,20 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+# General setup
+#
+CONFIG_LOCALVERSION=""
-+# CONFIG_LOCALVERSION_AUTO is not set
++CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
++CONFIG_BSD_PROCESS_ACCT=y
++# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_CPUSETS is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
++CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+# CONFIG_EMBEDDED is not set
-+CONFIG_UID16=y
+CONFIG_SYSCTL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
@@ -62744,19 +63656,16 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+# Loadable module support
+#
+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
++# CONFIG_MODULE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+CONFIG_KMOD=y
++# CONFIG_KMOD is not set
+CONFIG_STOP_MACHINE=y
+
+#
+# Block layer
+#
-+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
-+CONFIG_LSF=y
+
+#
+# IO Schedulers
@@ -62774,77 +63683,53 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+#
+# Processor type and features
+#
-+CONFIG_SMP=y
-+# CONFIG_X86_PC is not set
-+CONFIG_X86_XEN=y
-+# CONFIG_X86_ELAN is not set
-+# CONFIG_X86_VOYAGER is not set
-+# CONFIG_X86_NUMAQ is not set
-+# CONFIG_X86_SUMMIT is not set
-+# CONFIG_X86_BIGSMP is not set
-+# CONFIG_X86_VISWS is not set
-+# CONFIG_X86_GENERICARCH is not set
-+# CONFIG_X86_ES7000 is not set
-+# CONFIG_M386 is not set
-+# CONFIG_M486 is not set
-+# CONFIG_M586 is not set
-+# CONFIG_M586TSC is not set
-+# CONFIG_M586MMX is not set
-+CONFIG_M686=y
-+# CONFIG_MPENTIUMII is not set
-+# CONFIG_MPENTIUMIII is not set
-+# CONFIG_MPENTIUMM is not set
-+# CONFIG_MPENTIUM4 is not set
-+# CONFIG_MK6 is not set
-+# CONFIG_MK7 is not set
-+# CONFIG_MK8 is not set
-+# CONFIG_MCRUSOE is not set
-+# CONFIG_MEFFICEON is not set
-+# CONFIG_MWINCHIPC6 is not set
-+# CONFIG_MWINCHIP2 is not set
-+# CONFIG_MWINCHIP3D is not set
-+# CONFIG_MGEODEGX1 is not set
-+# CONFIG_MGEODE_LX is not set
-+# CONFIG_MCYRIXIII is not set
-+# CONFIG_MVIAC3_2 is not set
-+# CONFIG_X86_GENERIC is not set
-+CONFIG_X86_CMPXCHG=y
-+CONFIG_X86_XADD=y
-+CONFIG_X86_L1_CACHE_SHIFT=5
++CONFIG_IA64=y
++CONFIG_64BIT=y
++CONFIG_MMU=y
++CONFIG_SWIOTLB=y
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
++CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_X86_PPRO_FENCE=y
-+CONFIG_X86_WP_WORKS_OK=y
-+CONFIG_X86_INVLPG=y
-+CONFIG_X86_BSWAP=y
-+CONFIG_X86_POPAD_OK=y
-+CONFIG_X86_CMPXCHG64=y
-+CONFIG_X86_GOOD_APIC=y
-+CONFIG_X86_USE_PPRO_CHECKSUM=y
-+CONFIG_NR_CPUS=8
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
++CONFIG_TIME_INTERPOLATION=y
++CONFIG_DMI=y
++CONFIG_EFI=y
++CONFIG_GENERIC_IOMAP=y
++CONFIG_XEN=y
++CONFIG_XEN_IA64_EXPOSE_P2M=y
++CONFIG_XEN_IA64_EXPOSE_P2M_USE_DTR=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
++CONFIG_DMA_IS_DMA32=y
++CONFIG_AUDIT_ARCH=y
++# CONFIG_IA64_GENERIC is not set
++# CONFIG_IA64_DIG is not set
++# CONFIG_IA64_HP_ZX1 is not set
++# CONFIG_IA64_HP_ZX1_SWIOTLB is not set
++# CONFIG_IA64_SGI_SN2 is not set
++# CONFIG_IA64_HP_SIM is not set
++CONFIG_IA64_XEN=y
++# CONFIG_ITANIUM is not set
++CONFIG_MCKINLEY=y
++# CONFIG_IA64_PAGE_SIZE_4KB is not set
++# CONFIG_IA64_PAGE_SIZE_8KB is not set
++CONFIG_IA64_PAGE_SIZE_16KB=y
++# CONFIG_IA64_PAGE_SIZE_64KB is not set
++CONFIG_PGTABLE_3=y
++# CONFIG_PGTABLE_4 is not set
++CONFIG_HZ_100=y
++# CONFIG_HZ_250 is not set
++# CONFIG_HZ_1000 is not set
++CONFIG_HZ=100
++CONFIG_IA64_L1_CACHE_SHIFT=7
++# CONFIG_IA64_CYCLONE is not set
++CONFIG_IOSAPIC=y
++CONFIG_FORCE_MAX_ZONEORDER=11
++CONFIG_SMP=y
++CONFIG_NR_CPUS=16
++CONFIG_HOTPLUG_CPU=y
++CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
++# CONFIG_SCHED_SMT is not set
++# CONFIG_PERMIT_BSP_REMOVE is not set
+# CONFIG_PREEMPT is not set
-+CONFIG_PREEMPT_BKL=y
-+CONFIG_VM86=y
-+# CONFIG_TOSHIBA is not set
-+# CONFIG_I8K is not set
-+# CONFIG_X86_REBOOTFIXUPS is not set
-+# CONFIG_X86_MSR is not set
-+CONFIG_X86_CPUID=y
-+CONFIG_SWIOTLB=y
-+
-+#
-+# Firmware Drivers
-+#
-+# CONFIG_EDD is not set
-+# CONFIG_DELL_RBU is not set
-+# CONFIG_DCDBAS is not set
-+# CONFIG_NOHIGHMEM is not set
-+CONFIG_HIGHMEM4G=y
-+# CONFIG_HIGHMEM64G is not set
-+CONFIG_PAGE_OFFSET=0xC0000000
-+CONFIG_HIGHMEM=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
@@ -62854,40 +63739,80 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+CONFIG_RESOURCES_64BIT=y
-+# CONFIG_HIGHPTE is not set
-+# CONFIG_REGPARM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_HZ_100=y
-+# CONFIG_HZ_250 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=100
++CONFIG_ARCH_SELECT_MEMORY_MODEL=y
++CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
++CONFIG_ARCH_FLATMEM_ENABLE=y
++CONFIG_ARCH_SPARSEMEM_ENABLE=y
++CONFIG_VIRTUAL_MEM_MAP=y
++CONFIG_HOLES_IN_ZONE=y
++# CONFIG_IA32_SUPPORT is not set
++CONFIG_IA64_MCA_RECOVERY=y
++CONFIG_PERFMON=y
++CONFIG_IA64_PALINFO=y
++# CONFIG_KEXEC is not set
+# CONFIG_CRASH_DUMP is not set
-+CONFIG_PHYSICAL_START=0x100000
-+CONFIG_HOTPLUG_CPU=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+
+#
-+# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
++# Firmware Drivers
+#
-+# CONFIG_PCI is not set
-+CONFIG_ISA_DMA_API=y
-+# CONFIG_SCx200 is not set
++CONFIG_EFI_VARS=y
++CONFIG_EFI_PCDP=y
++CONFIG_BINFMT_ELF=y
++CONFIG_BINFMT_MISC=y
+
+#
-+# PCCARD (PCMCIA/CardBus) support
++# Power management and ACPI
+#
-+# CONFIG_PCCARD is not set
++CONFIG_PM=y
++CONFIG_PM_LEGACY=y
++# CONFIG_PM_DEBUG is not set
++
++#
++# ACPI (Advanced Configuration and Power Interface) Support
++#
++CONFIG_ACPI=y
++CONFIG_ACPI_BUTTON=y
++CONFIG_ACPI_FAN=y
++# CONFIG_ACPI_DOCK is not set
++CONFIG_ACPI_PROCESSOR=y
++CONFIG_ACPI_HOTPLUG_CPU=y
++CONFIG_ACPI_THERMAL=y
++CONFIG_ACPI_BLACKLIST_YEAR=0
++# CONFIG_ACPI_DEBUG is not set
++CONFIG_ACPI_EC=y
++CONFIG_ACPI_POWER=y
++CONFIG_ACPI_SYSTEM=y
++CONFIG_ACPI_CONTAINER=y
++
++#
++# CPU Frequency scaling
++#
++# CONFIG_CPU_FREQ is not set
++
++#
++# Bus options (PCI, PCMCIA)
++#
++CONFIG_PCI=y
++CONFIG_PCI_DOMAINS=y
++CONFIG_XEN_PCIDEV_FRONTEND=y
++# CONFIG_XEN_PCIDEV_FE_DEBUG is not set
++# CONFIG_PCIEPORTBUS is not set
++# CONFIG_PCI_DEBUG is not set
+
+#
+# PCI Hotplug Support
+#
++CONFIG_HOTPLUG_PCI=y
++# CONFIG_HOTPLUG_PCI_FAKE is not set
++CONFIG_HOTPLUG_PCI_ACPI=y
++# CONFIG_HOTPLUG_PCI_ACPI_IBM is not set
++# CONFIG_HOTPLUG_PCI_CPCI is not set
++# CONFIG_HOTPLUG_PCI_SHPC is not set
+
+#
-+# Executable file formats
++# PCCARD (PCMCIA/CardBus) support
+#
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_AOUT is not set
-+# CONFIG_BINFMT_MISC is not set
++# CONFIG_PCCARD is not set
+
+#
+# Networking
@@ -62905,15 +63830,16 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+# CONFIG_XFRM_USER is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
-+# CONFIG_IP_MULTICAST is not set
++CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
-+# CONFIG_IP_PNP_DHCP is not set
++CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
++# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
@@ -62923,14 +63849,34 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+# CONFIG_INET_DIAG is not set
++CONFIG_INET_DIAG=y
++CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
++
++#
++# IP: Virtual Server Configuration
++#
++# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
++CONFIG_NETFILTER=y
++# CONFIG_NETFILTER_DEBUG is not set
++
++#
++# Core Netfilter Configuration
++#
++# CONFIG_NETFILTER_NETLINK is not set
++# CONFIG_NF_CONNTRACK is not set
++# CONFIG_NETFILTER_XTABLES is not set
++
++#
++# IP: Netfilter Configuration
++#
++# CONFIG_IP_NF_CONNTRACK is not set
++# CONFIG_IP_NF_QUEUE is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
@@ -63003,15 +63949,21 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+#
+# Plug and Play support
+#
++# CONFIG_PNP is not set
+
+#
+# Block devices
+#
-+# CONFIG_BLK_DEV_FD is not set
++# CONFIG_BLK_CPQ_DA is not set
++# CONFIG_BLK_CPQ_CISS_DA is not set
++# CONFIG_BLK_DEV_DAC960 is not set
++# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=m
++CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+CONFIG_BLK_DEV_NBD=m
++# CONFIG_BLK_DEV_NBD is not set
++# CONFIG_BLK_DEV_SX8 is not set
++# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
@@ -63029,39 +63981,67 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
-+CONFIG_SCSI=m
++CONFIG_SCSI=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
-+CONFIG_BLK_DEV_SD=m
-+# CONFIG_CHR_DEV_ST is not set
-+# CONFIG_CHR_DEV_OSST is not set
-+# CONFIG_BLK_DEV_SR is not set
-+# CONFIG_CHR_DEV_SG is not set
++CONFIG_BLK_DEV_SD=y
++CONFIG_CHR_DEV_ST=y
++CONFIG_CHR_DEV_OSST=y
++CONFIG_BLK_DEV_SR=y
++CONFIG_BLK_DEV_SR_VENDOR=y
++CONFIG_CHR_DEV_SG=y
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
-+# CONFIG_SCSI_MULTI_LUN is not set
-+# CONFIG_SCSI_CONSTANTS is not set
-+# CONFIG_SCSI_LOGGING is not set
++CONFIG_SCSI_MULTI_LUN=y
++CONFIG_SCSI_CONSTANTS=y
++CONFIG_SCSI_LOGGING=y
+
+#
+# SCSI Transport Attributes
+#
-+# CONFIG_SCSI_SPI_ATTRS is not set
++CONFIG_SCSI_SPI_ATTRS=y
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
-+# CONFIG_SCSI_SAS_ATTRS is not set
++CONFIG_SCSI_SAS_ATTRS=y
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
++# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
++# CONFIG_SCSI_3W_9XXX is not set
++# CONFIG_SCSI_ACARD is not set
++# CONFIG_SCSI_AACRAID is not set
++# CONFIG_SCSI_AIC7XXX is not set
++# CONFIG_SCSI_AIC7XXX_OLD is not set
++# CONFIG_SCSI_AIC79XX is not set
++# CONFIG_MEGARAID_NEWGEN is not set
++# CONFIG_MEGARAID_LEGACY is not set
++# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_SATA is not set
++# CONFIG_SCSI_HPTIOP is not set
++# CONFIG_SCSI_DMX3191D is not set
++# CONFIG_SCSI_FUTURE_DOMAIN is not set
++# CONFIG_SCSI_IPS is not set
++# CONFIG_SCSI_INITIO is not set
++# CONFIG_SCSI_INIA100 is not set
++CONFIG_SCSI_SYM53C8XX_2=y
++CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
++CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
++CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
++CONFIG_SCSI_SYM53C8XX_MMIO=y
++# CONFIG_SCSI_IPR is not set
++CONFIG_SCSI_QLOGIC_1280=y
++# CONFIG_SCSI_QLA_FC is not set
++# CONFIG_SCSI_LPFC is not set
++# CONFIG_SCSI_DC395x is not set
++# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
@@ -63072,45 +64052,119 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+#
+# Fusion MPT device support
+#
-+# CONFIG_FUSION is not set
++CONFIG_FUSION=y
++CONFIG_FUSION_SPI=y
++# CONFIG_FUSION_FC is not set
++CONFIG_FUSION_SAS=y
++CONFIG_FUSION_MAX_SGE=128
++# CONFIG_FUSION_CTL is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
++# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
++# CONFIG_I2O is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
-+# CONFIG_DUMMY is not set
++CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
++# ARCnet devices
++#
++# CONFIG_ARCNET is not set
++
++#
+# PHY device support
+#
++# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
-+# CONFIG_NET_ETHERNET is not set
++CONFIG_NET_ETHERNET=y
++CONFIG_MII=y
++# CONFIG_HAPPYMEAL is not set
++# CONFIG_SUNGEM is not set
++# CONFIG_CASSINI is not set
++# CONFIG_NET_VENDOR_3COM is not set
++
++#
++# Tulip family network device support
++#
++CONFIG_NET_TULIP=y
++# CONFIG_DE2104X is not set
++CONFIG_TULIP=y
++CONFIG_TULIP_MWI=y
++CONFIG_TULIP_MMIO=y
++CONFIG_TULIP_NAPI=y
++CONFIG_TULIP_NAPI_HW_MITIGATION=y
++# CONFIG_DE4X5 is not set
++# CONFIG_WINBOND_840 is not set
++# CONFIG_DM9102 is not set
++# CONFIG_ULI526X is not set
++# CONFIG_HP100 is not set
++CONFIG_NET_PCI=y
++# CONFIG_PCNET32 is not set
++# CONFIG_AMD8111_ETH is not set
++# CONFIG_ADAPTEC_STARFIRE is not set
++# CONFIG_B44 is not set
++# CONFIG_FORCEDETH is not set
++# CONFIG_DGRS is not set
++# CONFIG_EEPRO100 is not set
++CONFIG_E100=y
++# CONFIG_FEALNX is not set
++# CONFIG_NATSEMI is not set
++# CONFIG_NE2K_PCI is not set
++# CONFIG_8139CP is not set
++# CONFIG_8139TOO is not set
++# CONFIG_SIS900 is not set
++# CONFIG_EPIC100 is not set
++# CONFIG_SUNDANCE is not set
++# CONFIG_VIA_RHINE is not set
+
+#
+# Ethernet (1000 Mbit)
+#
++# CONFIG_ACENIC is not set
++# CONFIG_DL2K is not set
++CONFIG_E1000=y
++# CONFIG_E1000_NAPI is not set
++# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
++# CONFIG_NS83820 is not set
++# CONFIG_HAMACHI is not set
++# CONFIG_YELLOWFIN is not set
++# CONFIG_R8169 is not set
++# CONFIG_SIS190 is not set
++# CONFIG_SKGE is not set
++# CONFIG_SKY2 is not set
++# CONFIG_SK98LIN is not set
++# CONFIG_VIA_VELOCITY is not set
++CONFIG_TIGON3=y
++# CONFIG_BNX2 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
++# CONFIG_CHELSIO_T1 is not set
++# CONFIG_IXGB is not set
++# CONFIG_S2IO is not set
++# CONFIG_MYRI10GE is not set
++# CONFIG_SFC is not set
+
+#
+# Token Ring devices
+#
++# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
@@ -63121,8 +64175,11 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+# Wan interfaces
+#
+# CONFIG_WAN is not set
++# CONFIG_FDDI is not set
++# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
++# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
@@ -63147,23 +64204,18 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
-+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
++CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-+# CONFIG_INPUT_JOYDEV is not set
++CONFIG_INPUT_JOYDEV=y
+# CONFIG_INPUT_TSDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
++CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
-+CONFIG_INPUT_KEYBOARD=y
-+# CONFIG_KEYBOARD_ATKBD is not set
-+# CONFIG_KEYBOARD_SUNKBD is not set
-+# CONFIG_KEYBOARD_LKKBD is not set
-+# CONFIG_KEYBOARD_XTKBD is not set
-+# CONFIG_KEYBOARD_NEWTON is not set
++# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
@@ -63173,9 +64225,9 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
-+CONFIG_SERIO_I8042=y
-+CONFIG_SERIO_SERPORT=y
-+# CONFIG_SERIO_CT82C710 is not set
++# CONFIG_SERIO_I8042 is not set
++# CONFIG_SERIO_SERPORT is not set
++# CONFIG_SERIO_PCIPS2 is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
@@ -63191,10 +64243,22 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+#
+# Serial drivers
+#
++CONFIG_SERIAL_8250=y
++CONFIG_SERIAL_8250_CONSOLE=y
++CONFIG_SERIAL_8250_PCI=y
++CONFIG_SERIAL_8250_NR_UARTS=8
++CONFIG_SERIAL_8250_RUNTIME_UARTS=4
++CONFIG_SERIAL_8250_EXTENDED=y
++CONFIG_SERIAL_8250_SHARE_IRQ=y
++# CONFIG_SERIAL_8250_DETECT_IRQ is not set
++# CONFIG_SERIAL_8250_RSA is not set
+
+#
+# Non-8250 serial port support
+#
++CONFIG_SERIAL_CORE=y
++CONFIG_SERIAL_CORE_CONSOLE=y
++# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
@@ -63208,22 +64272,28 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
-+CONFIG_HW_RANDOM=y
-+CONFIG_HW_RANDOM_VIA=y
-+# CONFIG_NVRAM is not set
-+# CONFIG_RTC is not set
-+# CONFIG_GEN_RTC is not set
++# CONFIG_HW_RANDOM is not set
++CONFIG_EFI_RTC=y
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
++# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
-+# CONFIG_MWAVE is not set
-+# CONFIG_PC8736x_GPIO is not set
-+# CONFIG_NSC_GPIO is not set
-+# CONFIG_CS5535_GPIO is not set
++CONFIG_AGP=y
++# CONFIG_AGP_SIS is not set
++# CONFIG_AGP_VIA is not set
++CONFIG_DRM=y
++# CONFIG_DRM_TDFX is not set
++# CONFIG_DRM_R128 is not set
++CONFIG_DRM_RADEON=y
++# CONFIG_DRM_MGA is not set
++# CONFIG_DRM_SIS is not set
++# CONFIG_DRM_VIA is not set
++# CONFIG_DRM_SAVAGE is not set
+# CONFIG_RAW_DRIVER is not set
++# CONFIG_HPET is not set
+# CONFIG_HANGCHECK_TIMER is not set
+
+#
@@ -63235,7 +64305,55 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+#
+# I2C support
+#
-+# CONFIG_I2C is not set
++CONFIG_I2C=y
++CONFIG_I2C_CHARDEV=y
++
++#
++# I2C Algorithms
++#
++CONFIG_I2C_ALGOBIT=y
++CONFIG_I2C_ALGOPCF=y
++# CONFIG_I2C_ALGOPCA is not set
++
++#
++# I2C Hardware Bus support
++#
++# CONFIG_I2C_ALI1535 is not set
++# CONFIG_I2C_ALI1563 is not set
++# CONFIG_I2C_ALI15X3 is not set
++# CONFIG_I2C_AMD756 is not set
++# CONFIG_I2C_AMD8111 is not set
++# CONFIG_I2C_I801 is not set
++# CONFIG_I2C_I810 is not set
++# CONFIG_I2C_PIIX4 is not set
++# CONFIG_I2C_NFORCE2 is not set
++# CONFIG_I2C_OCORES is not set
++# CONFIG_I2C_PARPORT_LIGHT is not set
++# CONFIG_I2C_PROSAVAGE is not set
++# CONFIG_I2C_SAVAGE4 is not set
++# CONFIG_I2C_SIS5595 is not set
++# CONFIG_I2C_SIS630 is not set
++# CONFIG_I2C_SIS96X is not set
++# CONFIG_I2C_STUB is not set
++# CONFIG_I2C_VIA is not set
++# CONFIG_I2C_VIAPRO is not set
++# CONFIG_I2C_VOODOO3 is not set
++# CONFIG_I2C_PCA_ISA is not set
++
++#
++# Miscellaneous I2C Chip support
++#
++# CONFIG_SENSORS_DS1337 is not set
++# CONFIG_SENSORS_DS1374 is not set
++# CONFIG_SENSORS_EEPROM is not set
++# CONFIG_SENSORS_PCF8574 is not set
++# CONFIG_SENSORS_PCA9539 is not set
++# CONFIG_SENSORS_PCF8591 is not set
++# CONFIG_SENSORS_MAX6875 is not set
++# CONFIG_I2C_DEBUG_CORE is not set
++# CONFIG_I2C_DEBUG_ALGO is not set
++# CONFIG_I2C_DEBUG_BUS is not set
++# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
@@ -63250,8 +64368,48 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+#
+# Hardware Monitoring support
+#
-+# CONFIG_HWMON is not set
++CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
++# CONFIG_SENSORS_ABITUGURU is not set
++# CONFIG_SENSORS_ADM1021 is not set
++# CONFIG_SENSORS_ADM1025 is not set
++# CONFIG_SENSORS_ADM1026 is not set
++# CONFIG_SENSORS_ADM1031 is not set
++# CONFIG_SENSORS_ADM9240 is not set
++# CONFIG_SENSORS_ASB100 is not set
++# CONFIG_SENSORS_ATXP1 is not set
++# CONFIG_SENSORS_DS1621 is not set
++# CONFIG_SENSORS_F71805F is not set
++# CONFIG_SENSORS_FSCHER is not set
++# CONFIG_SENSORS_FSCPOS is not set
++# CONFIG_SENSORS_GL518SM is not set
++# CONFIG_SENSORS_GL520SM is not set
++# CONFIG_SENSORS_IT87 is not set
++# CONFIG_SENSORS_LM63 is not set
++# CONFIG_SENSORS_LM75 is not set
++# CONFIG_SENSORS_LM77 is not set
++# CONFIG_SENSORS_LM78 is not set
++# CONFIG_SENSORS_LM80 is not set
++# CONFIG_SENSORS_LM83 is not set
++# CONFIG_SENSORS_LM85 is not set
++# CONFIG_SENSORS_LM87 is not set
++# CONFIG_SENSORS_LM90 is not set
++# CONFIG_SENSORS_LM92 is not set
++# CONFIG_SENSORS_MAX1619 is not set
++# CONFIG_SENSORS_PC87360 is not set
++# CONFIG_SENSORS_SIS5595 is not set
++# CONFIG_SENSORS_SMSC47M1 is not set
++# CONFIG_SENSORS_SMSC47M192 is not set
++# CONFIG_SENSORS_SMSC47B397 is not set
++# CONFIG_SENSORS_VIA686A is not set
++# CONFIG_SENSORS_VT8231 is not set
++# CONFIG_SENSORS_W83781D is not set
++# CONFIG_SENSORS_W83791D is not set
++# CONFIG_SENSORS_W83792D is not set
++# CONFIG_SENSORS_W83L785TS is not set
++# CONFIG_SENSORS_W83627HF is not set
++# CONFIG_SENSORS_W83627EHF is not set
++# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
@@ -63260,18 +64418,115 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+#
+# Multimedia devices
+#
-+# CONFIG_VIDEO_DEV is not set
++CONFIG_VIDEO_DEV=y
++CONFIG_VIDEO_V4L1=y
++CONFIG_VIDEO_V4L1_COMPAT=y
++CONFIG_VIDEO_V4L2=y
++
++#
++# Video Capture Adapters
++#
++
++#
++# Video Capture Adapters
++#
++# CONFIG_VIDEO_ADV_DEBUG is not set
++# CONFIG_VIDEO_VIVI is not set
++# CONFIG_VIDEO_BT848 is not set
++# CONFIG_VIDEO_CPIA is not set
++# CONFIG_VIDEO_CPIA2 is not set
++# CONFIG_VIDEO_SAA5246A is not set
++# CONFIG_VIDEO_SAA5249 is not set
++# CONFIG_TUNER_3036 is not set
++# CONFIG_VIDEO_STRADIS is not set
++# CONFIG_VIDEO_ZORAN is not set
++# CONFIG_VIDEO_SAA7134 is not set
++# CONFIG_VIDEO_MXB is not set
++# CONFIG_VIDEO_DPC is not set
++# CONFIG_VIDEO_HEXIUM_ORION is not set
++# CONFIG_VIDEO_HEXIUM_GEMINI is not set
++# CONFIG_VIDEO_CX88 is not set
++
++#
++# Encoders and Decoders
++#
++# CONFIG_VIDEO_MSP3400 is not set
++# CONFIG_VIDEO_CS53L32A is not set
++# CONFIG_VIDEO_TLV320AIC23B is not set
++# CONFIG_VIDEO_WM8775 is not set
++# CONFIG_VIDEO_WM8739 is not set
++# CONFIG_VIDEO_CX2341X is not set
++# CONFIG_VIDEO_CX25840 is not set
++# CONFIG_VIDEO_SAA711X is not set
++# CONFIG_VIDEO_SAA7127 is not set
++# CONFIG_VIDEO_UPD64031A is not set
++# CONFIG_VIDEO_UPD64083 is not set
++
++#
++# V4L USB devices
++#
++# CONFIG_VIDEO_PVRUSB2 is not set
++# CONFIG_VIDEO_EM28XX is not set
++# CONFIG_USB_VICAM is not set
++# CONFIG_USB_IBMCAM is not set
++# CONFIG_USB_KONICAWC is not set
++# CONFIG_USB_QUICKCAM_MESSENGER is not set
++# CONFIG_USB_ET61X251 is not set
++# CONFIG_VIDEO_OVCAMCHIP is not set
++# CONFIG_USB_W9968CF is not set
++# CONFIG_USB_OV511 is not set
++# CONFIG_USB_SE401 is not set
++# CONFIG_USB_SN9C102 is not set
++# CONFIG_USB_STV680 is not set
++# CONFIG_USB_ZC0301 is not set
++# CONFIG_USB_PWC is not set
++
++#
++# Radio Adapters
++#
++# CONFIG_RADIO_GEMTEK_PCI is not set
++# CONFIG_RADIO_MAXIRADIO is not set
++# CONFIG_RADIO_MAESTRO is not set
++# CONFIG_USB_DSBR is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
++# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_FIRMWARE_EDID=y
-+# CONFIG_FB is not set
++CONFIG_FB=y
++CONFIG_FB_CFB_FILLRECT=y
++CONFIG_FB_CFB_COPYAREA=y
++CONFIG_FB_CFB_IMAGEBLIT=y
++# CONFIG_FB_MACMODES is not set
++# CONFIG_FB_BACKLIGHT is not set
++CONFIG_FB_MODE_HELPERS=y
++# CONFIG_FB_TILEBLITTING is not set
++# CONFIG_FB_CIRRUS is not set
++# CONFIG_FB_PM2 is not set
++# CONFIG_FB_CYBER2000 is not set
++# CONFIG_FB_ASILIANT is not set
++# CONFIG_FB_IMSTT is not set
++# CONFIG_FB_S1D13XXX is not set
++# CONFIG_FB_NVIDIA is not set
++# CONFIG_FB_RIVA is not set
++# CONFIG_FB_MATROX is not set
++# CONFIG_FB_RADEON is not set
++# CONFIG_FB_ATY128 is not set
++# CONFIG_FB_ATY is not set
++# CONFIG_FB_SAVAGE is not set
++# CONFIG_FB_SIS is not set
++# CONFIG_FB_NEOMAGIC is not set
++# CONFIG_FB_KYRO is not set
++# CONFIG_FB_3DFX is not set
++# CONFIG_FB_VOODOO1 is not set
++# CONFIG_FB_TRIDENT is not set
++# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
@@ -63279,25 +64534,244 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+CONFIG_DUMMY_CONSOLE=y
++CONFIG_FRAMEBUFFER_CONSOLE=y
++# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
++# CONFIG_FONTS is not set
++CONFIG_FONT_8x8=y
++CONFIG_FONT_8x16=y
++
++#
++# Logo configuration
++#
++CONFIG_LOGO=y
++# CONFIG_LOGO_LINUX_MONO is not set
++# CONFIG_LOGO_LINUX_VGA16 is not set
++CONFIG_LOGO_LINUX_CLUT224=y
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Sound
+#
-+# CONFIG_SOUND is not set
++CONFIG_SOUND=y
++
++#
++# Advanced Linux Sound Architecture
++#
++CONFIG_SND=y
++CONFIG_SND_TIMER=y
++CONFIG_SND_PCM=y
++CONFIG_SND_HWDEP=y
++CONFIG_SND_RAWMIDI=y
++CONFIG_SND_SEQUENCER=y
++# CONFIG_SND_SEQ_DUMMY is not set
++CONFIG_SND_OSSEMUL=y
++CONFIG_SND_MIXER_OSS=y
++CONFIG_SND_PCM_OSS=y
++CONFIG_SND_PCM_OSS_PLUGINS=y
++CONFIG_SND_SEQUENCER_OSS=y
++# CONFIG_SND_DYNAMIC_MINORS is not set
++CONFIG_SND_SUPPORT_OLD_API=y
++CONFIG_SND_VERBOSE_PROCFS=y
++# CONFIG_SND_VERBOSE_PRINTK is not set
++# CONFIG_SND_DEBUG is not set
++
++#
++# Generic devices
++#
++CONFIG_SND_MPU401_UART=y
++CONFIG_SND_OPL3_LIB=y
++CONFIG_SND_AC97_CODEC=y
++CONFIG_SND_AC97_BUS=y
++# CONFIG_SND_DUMMY is not set
++# CONFIG_SND_VIRMIDI is not set
++# CONFIG_SND_MTPAV is not set
++# CONFIG_SND_SERIAL_U16550 is not set
++# CONFIG_SND_MPU401 is not set
++
++#
++# PCI devices
++#
++# CONFIG_SND_AD1889 is not set
++# CONFIG_SND_ALS300 is not set
++# CONFIG_SND_ALI5451 is not set
++# CONFIG_SND_ATIIXP is not set
++# CONFIG_SND_ATIIXP_MODEM is not set
++# CONFIG_SND_AU8810 is not set
++# CONFIG_SND_AU8820 is not set
++# CONFIG_SND_AU8830 is not set
++# CONFIG_SND_AZT3328 is not set
++# CONFIG_SND_BT87X is not set
++# CONFIG_SND_CA0106 is not set
++# CONFIG_SND_CMIPCI is not set
++# CONFIG_SND_CS4281 is not set
++# CONFIG_SND_CS46XX is not set
++# CONFIG_SND_EMU10K1 is not set
++# CONFIG_SND_EMU10K1X is not set
++# CONFIG_SND_ENS1370 is not set
++# CONFIG_SND_ENS1371 is not set
++# CONFIG_SND_ES1938 is not set
++# CONFIG_SND_ES1968 is not set
++CONFIG_SND_FM801=y
++# CONFIG_SND_FM801_TEA575X_BOOL is not set
++# CONFIG_SND_HDA_INTEL is not set
++# CONFIG_SND_HDSP is not set
++# CONFIG_SND_HDSPM is not set
++# CONFIG_SND_ICE1712 is not set
++# CONFIG_SND_ICE1724 is not set
++# CONFIG_SND_INTEL8X0 is not set
++# CONFIG_SND_INTEL8X0M is not set
++# CONFIG_SND_KORG1212 is not set
++# CONFIG_SND_MAESTRO3 is not set
++# CONFIG_SND_MIXART is not set
++# CONFIG_SND_NM256 is not set
++# CONFIG_SND_PCXHR is not set
++# CONFIG_SND_RME32 is not set
++# CONFIG_SND_RME96 is not set
++# CONFIG_SND_RME9652 is not set
++# CONFIG_SND_SONICVIBES is not set
++# CONFIG_SND_TRIDENT is not set
++# CONFIG_SND_VIA82XX is not set
++# CONFIG_SND_VIA82XX_MODEM is not set
++# CONFIG_SND_VX222 is not set
++# CONFIG_SND_YMFPCI is not set
++
++#
++# USB devices
++#
++# CONFIG_SND_USB_AUDIO is not set
++
++#
++# Open Sound System
++#
++# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
-+# CONFIG_USB_ARCH_HAS_HCD is not set
-+# CONFIG_USB_ARCH_HAS_OHCI is not set
-+# CONFIG_USB_ARCH_HAS_EHCI is not set
++CONFIG_USB_ARCH_HAS_HCD=y
++CONFIG_USB_ARCH_HAS_OHCI=y
++CONFIG_USB_ARCH_HAS_EHCI=y
++CONFIG_USB=y
++# CONFIG_USB_DEBUG is not set
++
++#
++# Miscellaneous USB options
++#
++# CONFIG_USB_DEVICEFS is not set
++CONFIG_USB_BANDWIDTH=y
++# CONFIG_USB_DYNAMIC_MINORS is not set
++# CONFIG_USB_SUSPEND is not set
++# CONFIG_USB_OTG is not set
++
++#
++# USB Host Controller Drivers
++#
++CONFIG_USB_EHCI_HCD=y
++# CONFIG_USB_EHCI_SPLIT_ISO is not set
++# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
++# CONFIG_USB_EHCI_TT_NEWSCHED is not set
++# CONFIG_USB_ISP116X_HCD is not set
++CONFIG_USB_OHCI_HCD=y
++# CONFIG_USB_OHCI_BIG_ENDIAN is not set
++CONFIG_USB_OHCI_LITTLE_ENDIAN=y
++CONFIG_USB_UHCI_HCD=y
++# CONFIG_USB_SL811_HCD is not set
++
++#
++# USB Device Class drivers
++#
++# CONFIG_USB_ACM is not set
++# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
++# may also be needed; see USB_STORAGE Help for more information
++#
++CONFIG_USB_STORAGE=y
++# CONFIG_USB_STORAGE_DEBUG is not set
++# CONFIG_USB_STORAGE_DATAFAB is not set
++# CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_DPCM is not set
++# CONFIG_USB_STORAGE_USBAT is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_SDDR55 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++# CONFIG_USB_STORAGE_ALAUDA is not set
++# CONFIG_USB_LIBUSUAL is not set
++
++#
++# USB Input Devices
++#
++CONFIG_USB_HID=y
++CONFIG_USB_HIDINPUT=y
++# CONFIG_USB_HIDINPUT_POWERBOOK is not set
++# CONFIG_HID_FF is not set
++CONFIG_USB_HIDDEV=y
++# CONFIG_USB_AIPTEK is not set
++# CONFIG_USB_WACOM is not set
++# CONFIG_USB_ACECAD is not set
++# CONFIG_USB_KBTAB is not set
++# CONFIG_USB_POWERMATE is not set
++# CONFIG_USB_TOUCHSCREEN is not set
++# CONFIG_USB_YEALINK is not set
++# CONFIG_USB_XPAD is not set
++# CONFIG_USB_ATI_REMOTE is not set
++# CONFIG_USB_ATI_REMOTE2 is not set
++# CONFIG_USB_KEYSPAN_REMOTE is not set
++# CONFIG_USB_APPLETOUCH is not set
++
++#
++# USB Imaging devices
++#
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_MICROTEK is not set
++
++#
++# USB Network Adapters
++#
++# CONFIG_USB_CATC is not set
++# CONFIG_USB_KAWETH is not set
++# CONFIG_USB_PEGASUS is not set
++# CONFIG_USB_RTL8150 is not set
++# CONFIG_USB_USBNET is not set
++CONFIG_USB_MON=y
++
++#
++# USB port drivers
++#
++
++#
++# USB Serial Converter support
++#
++# CONFIG_USB_SERIAL is not set
++
++#
++# USB Miscellaneous drivers
++#
++# CONFIG_USB_EMI62 is not set
++# CONFIG_USB_EMI26 is not set
++# CONFIG_USB_AUERSWALD is not set
++# CONFIG_USB_RIO500 is not set
++# CONFIG_USB_LEGOTOWER is not set
++# CONFIG_USB_LCD is not set
++# CONFIG_USB_LED is not set
++# CONFIG_USB_CYPRESS_CY7C63 is not set
++# CONFIG_USB_CYTHERM is not set
++# CONFIG_USB_PHIDGETKIT is not set
++# CONFIG_USB_PHIDGETSERVO is not set
++# CONFIG_USB_IDMOUSE is not set
++# CONFIG_USB_APPLEDISPLAY is not set
++# CONFIG_USB_SISUSBVGA is not set
++# CONFIG_USB_LD is not set
++
++#
++# USB DSL modem support
++#
++
++#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
@@ -63323,11 +64797,11 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+#
+# InfiniBand support
+#
++# CONFIG_INFINIBAND is not set
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
-+# CONFIG_EDAC is not set
+
+#
+# Real Time Clock
@@ -63351,7 +64825,9 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+# File systems
+#
+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
++CONFIG_EXT2_FS_XATTR=y
++# CONFIG_EXT2_FS_POSIX_ACL is not set
++# CONFIG_EXT2_FS_SECURITY is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
@@ -63360,10 +64836,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
-+CONFIG_REISERFS_FS=y
-+# CONFIG_REISERFS_CHECK is not set
-+# CONFIG_REISERFS_PROC_INFO is not set
-+# CONFIG_REISERFS_FS_XATTR is not set
++# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
@@ -63375,7 +64848,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=y
-+CONFIG_AUTOFS4_FS=y
++# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
@@ -63383,16 +64856,16 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+#
+CONFIG_ISO9660_FS=y
+CONFIG_JOLIET=y
-+CONFIG_ZISOFS=y
-+CONFIG_ZISOFS_FS=y
-+# CONFIG_UDF_FS is not set
++# CONFIG_ZISOFS is not set
++CONFIG_UDF_FS=y
++CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
-+CONFIG_FAT_FS=m
-+CONFIG_MSDOS_FS=m
-+CONFIG_VFAT_FS=m
++CONFIG_FAT_FS=y
++CONFIG_MSDOS_FS=y
++CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
@@ -63418,7 +64891,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
-+CONFIG_CRAMFS=y
++# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
@@ -63431,15 +64904,21 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
-+# CONFIG_NFS_V4 is not set
++CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
++CONFIG_NFSD=y
++CONFIG_NFSD_V3=y
++# CONFIG_NFSD_V3_ACL is not set
++# CONFIG_NFSD_V4 is not set
++# CONFIG_NFSD_TCP is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
++CONFIG_EXPORTFS=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
++CONFIG_SUNRPC_GSS=y
++CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
@@ -63451,8 +64930,23 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+#
+# Partition Types
+#
-+# CONFIG_PARTITION_ADVANCED is not set
++CONFIG_PARTITION_ADVANCED=y
++# CONFIG_ACORN_PARTITION is not set
++# CONFIG_OSF_PARTITION is not set
++# CONFIG_AMIGA_PARTITION is not set
++# CONFIG_ATARI_PARTITION is not set
++# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
++# CONFIG_BSD_DISKLABEL is not set
++# CONFIG_MINIX_SUBPARTITION is not set
++# CONFIG_SOLARIS_X86_PARTITION is not set
++# CONFIG_UNIXWARE_DISKLABEL is not set
++# CONFIG_LDM_PARTITION is not set
++# CONFIG_SGI_PARTITION is not set
++# CONFIG_ULTRIX_PARTITION is not set
++# CONFIG_SUN_PARTITION is not set
++# CONFIG_KARMA_PARTITION is not set
++CONFIG_EFI_PARTITION=y
+
+#
+# Native Language Support
@@ -63460,43 +64954,56 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
-+# CONFIG_NLS_CODEPAGE_737 is not set
-+# CONFIG_NLS_CODEPAGE_775 is not set
-+# CONFIG_NLS_CODEPAGE_850 is not set
-+# CONFIG_NLS_CODEPAGE_852 is not set
-+# CONFIG_NLS_CODEPAGE_855 is not set
-+# CONFIG_NLS_CODEPAGE_857 is not set
-+# CONFIG_NLS_CODEPAGE_860 is not set
-+# CONFIG_NLS_CODEPAGE_861 is not set
-+# CONFIG_NLS_CODEPAGE_862 is not set
-+# CONFIG_NLS_CODEPAGE_863 is not set
-+# CONFIG_NLS_CODEPAGE_864 is not set
-+# CONFIG_NLS_CODEPAGE_865 is not set
-+# CONFIG_NLS_CODEPAGE_866 is not set
-+# CONFIG_NLS_CODEPAGE_869 is not set
-+# CONFIG_NLS_CODEPAGE_936 is not set
-+# CONFIG_NLS_CODEPAGE_950 is not set
-+# CONFIG_NLS_CODEPAGE_932 is not set
-+# CONFIG_NLS_CODEPAGE_949 is not set
-+# CONFIG_NLS_CODEPAGE_874 is not set
-+# CONFIG_NLS_ISO8859_8 is not set
++CONFIG_NLS_CODEPAGE_737=y
++CONFIG_NLS_CODEPAGE_775=y
++CONFIG_NLS_CODEPAGE_850=y
++CONFIG_NLS_CODEPAGE_852=y
++CONFIG_NLS_CODEPAGE_855=y
++CONFIG_NLS_CODEPAGE_857=y
++CONFIG_NLS_CODEPAGE_860=y
++CONFIG_NLS_CODEPAGE_861=y
++CONFIG_NLS_CODEPAGE_862=y
++CONFIG_NLS_CODEPAGE_863=y
++CONFIG_NLS_CODEPAGE_864=y
++CONFIG_NLS_CODEPAGE_865=y
++CONFIG_NLS_CODEPAGE_866=y
++CONFIG_NLS_CODEPAGE_869=y
++CONFIG_NLS_CODEPAGE_936=y
++CONFIG_NLS_CODEPAGE_950=y
++CONFIG_NLS_CODEPAGE_932=y
++CONFIG_NLS_CODEPAGE_949=y
++CONFIG_NLS_CODEPAGE_874=y
++CONFIG_NLS_ISO8859_8=y
+# CONFIG_NLS_CODEPAGE_1250 is not set
-+# CONFIG_NLS_CODEPAGE_1251 is not set
++CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
-+# CONFIG_NLS_ISO8859_2 is not set
-+# CONFIG_NLS_ISO8859_3 is not set
-+# CONFIG_NLS_ISO8859_4 is not set
-+# CONFIG_NLS_ISO8859_5 is not set
-+# CONFIG_NLS_ISO8859_6 is not set
-+# CONFIG_NLS_ISO8859_7 is not set
-+# CONFIG_NLS_ISO8859_9 is not set
-+# CONFIG_NLS_ISO8859_13 is not set
-+# CONFIG_NLS_ISO8859_14 is not set
-+# CONFIG_NLS_ISO8859_15 is not set
-+# CONFIG_NLS_KOI8_R is not set
-+# CONFIG_NLS_KOI8_U is not set
-+# CONFIG_NLS_UTF8 is not set
++CONFIG_NLS_ISO8859_2=y
++CONFIG_NLS_ISO8859_3=y
++CONFIG_NLS_ISO8859_4=y
++CONFIG_NLS_ISO8859_5=y
++CONFIG_NLS_ISO8859_6=y
++CONFIG_NLS_ISO8859_7=y
++CONFIG_NLS_ISO8859_9=y
++CONFIG_NLS_ISO8859_13=y
++CONFIG_NLS_ISO8859_14=y
++CONFIG_NLS_ISO8859_15=y
++CONFIG_NLS_KOI8_R=y
++CONFIG_NLS_KOI8_U=y
++CONFIG_NLS_UTF8=y
++
++#
++# Library routines
++#
++# CONFIG_CRC_CCITT is not set
++# CONFIG_CRC16 is not set
++CONFIG_CRC32=y
++# CONFIG_LIBCRC32C is not set
++CONFIG_PLIST=y
++CONFIG_GENERIC_HARDIRQS=y
++CONFIG_GENERIC_IRQ_PROBE=y
++CONFIG_GENERIC_PENDING_IRQ=y
++CONFIG_IRQ_PER_CPU=y
+
+#
+# Instrumentation Support
@@ -63507,40 +65014,33 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+#
+# Kernel hacking
+#
-+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_UNUSED_SYMBOLS=y
+CONFIG_DEBUG_KERNEL=y
-+CONFIG_LOG_BUF_SHIFT=14
++CONFIG_LOG_BUF_SHIFT=17
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
-+# CONFIG_DEBUG_MUTEXES is not set
++CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_RWSEMS is not set
-+# CONFIG_DEBUG_LOCK_ALLOC is not set
-+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_HIGHMEM is not set
-+CONFIG_DEBUG_BUGVERBOSE=y
-+CONFIG_DEBUG_INFO=y
++# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
-+CONFIG_FRAME_POINTER=y
-+# CONFIG_UNWIND_INFO is not set
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
-+CONFIG_EARLY_PRINTK=y
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+# CONFIG_DEBUG_RODATA is not set
-+# CONFIG_4KSTACKS is not set
++CONFIG_IA64_GRANULE_16MB=y
++# CONFIG_IA64_GRANULE_64MB is not set
++CONFIG_IA64_PRINT_HAZARDS=y
++# CONFIG_DISABLE_VHPT is not set
++# CONFIG_IA64_DEBUG_CMPXCHG is not set
++# CONFIG_IA64_DEBUG_IRQ is not set
+
+#
+# Security options
@@ -63555,18 +65055,17 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=m
++CONFIG_CRYPTO_MD5=y
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_DES is not set
++CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_AES_586 is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
@@ -63575,15 +65074,15 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+CONFIG_CRYPTO_CRC32C=m
++# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
-+# CONFIG_CRYPTO_DEV_PADLOCK is not set
-+CONFIG_XEN=y
-+CONFIG_XEN_INTERFACE_VERSION=0x00030206
++# CONFIG_XEN_SMPBOOT is not set
++# CONFIG_XEN_DEVMEM is not set
++CONFIG_XEN_INTERFACE_VERSION=0x00030207
+
+#
+# XEN
@@ -63593,10 +65092,16 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+CONFIG_XEN_PRIVCMD=y
+CONFIG_XEN_XENBUS_DEV=y
+# CONFIG_XEN_BACKEND is not set
++# CONFIG_XEN_NETDEV_ACCEL_SFC_UTIL is not set
+CONFIG_XEN_BLKDEV_FRONTEND=y
+CONFIG_XEN_NETDEV_FRONTEND=y
-+CONFIG_XEN_SCRUB_PAGES=y
-+CONFIG_XEN_DISABLE_SERIAL=y
++CONFIG_XEN_SCSI_FRONTEND=m
++# CONFIG_XEN_GRANT_DEV is not set
++# CONFIG_XEN_NETDEV_ACCEL_SFC_FRONTEND is not set
++CONFIG_XEN_FRAMEBUFFER=y
++CONFIG_XEN_KEYBOARD=y
++# CONFIG_XEN_SCRUB_PAGES is not set
++# CONFIG_XEN_DISABLE_SERIAL is not set
+CONFIG_XEN_SYSFS=y
+CONFIG_XEN_COMPAT_030002_AND_LATER=y
+# CONFIG_XEN_COMPAT_030004_AND_LATER is not set
@@ -63605,55 +65110,28 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-
+CONFIG_XEN_COMPAT=0x030002
+CONFIG_HAVE_IRQ_IGNORE_UNHANDLED=y
+CONFIG_NO_IDLE_HZ=y
-+CONFIG_XEN_SMPBOOT=y
+CONFIG_XEN_BALLOON=y
-+CONFIG_XEN_DEVMEM=y
-+# CONFIG_XEN_GRANT_DEV is not set
-+
-+#
-+# Library routines
-+#
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC32 is not set
-+CONFIG_LIBCRC32C=m
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_PLIST=y
-+CONFIG_GENERIC_HARDIRQS=y
-+CONFIG_GENERIC_IRQ_PROBE=y
-+CONFIG_GENERIC_PENDING_IRQ=y
-+CONFIG_X86_SMP=y
-+CONFIG_X86_BIOS_REBOOT=y
-+CONFIG_X86_TRAMPOLINE=y
-+CONFIG_X86_NO_TSS=y
-+CONFIG_X86_NO_IDT=y
-+CONFIG_KTIME_SCALAR=y
-diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-xen-3.2.0/buildconfigs/linux-defconfig_xenU_x86_64
---- linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/buildconfigs/linux-defconfig_xenU_x86_64 2008-02-15 16:21:56.000000000 -0800
-@@ -0,0 +1,1241 @@
++CONFIG_XEN_XENCOMM=y
+diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 linux-2.6.18-xen-3.3.0/buildconfigs/linux-defconfig_xenU_x86_32
+--- linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_32 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/buildconfigs/linux-defconfig_xenU_x86_32 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,953 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.18.8
-+# Tue Oct 16 09:32:52 2007
++# Tue Oct 16 09:31:29 2007
+#
-+CONFIG_X86_64=y
-+CONFIG_64BIT=y
-+CONFIG_X86=y
++CONFIG_X86_32=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_SEMAPHORE_SLEEPERS=y
++CONFIG_X86=y
+CONFIG_MMU=y
-+CONFIG_RWSEM_GENERIC_SPINLOCK=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_X86_CMPXCHG=y
-+CONFIG_EARLY_PRINTK=y
+CONFIG_GENERIC_ISA_DMA=y
+CONFIG_GENERIC_IOMAP=y
++CONFIG_GENERIC_HWEIGHT=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_DMI=y
-+CONFIG_AUDIT_ARCH=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
@@ -63670,12 +65148,10 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
-+CONFIG_POSIX_MQUEUE=y
-+CONFIG_BSD_PROCESS_ACCT=y
-+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
++# CONFIG_POSIX_MQUEUE is not set
++# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
-+CONFIG_AUDIT=y
-+CONFIG_AUDITSYSCALL=y
++# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_CPUSETS is not set
+# CONFIG_RELAY is not set
@@ -63686,7 +65162,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+CONFIG_SYSCTL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
-+CONFIG_KALLSYMS_EXTRA_PASS=y
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
@@ -63708,7 +65184,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+CONFIG_MODVERSIONS=y
++# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_STOP_MACHINE=y
@@ -63716,7 +65192,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+#
+# Block layer
+#
-+CONFIG_LBD=y
++# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+CONFIG_LSF=y
+
@@ -63736,28 +65212,77 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+#
+# Processor type and features
+#
-+CONFIG_X86_PC=y
-+# CONFIG_X86_VSMP is not set
++CONFIG_SMP=y
++# CONFIG_X86_PC is not set
++CONFIG_X86_XEN=y
++# CONFIG_X86_ELAN is not set
++# CONFIG_X86_VOYAGER is not set
++# CONFIG_X86_NUMAQ is not set
++# CONFIG_X86_SUMMIT is not set
++# CONFIG_X86_BIGSMP is not set
++# CONFIG_X86_VISWS is not set
++# CONFIG_X86_GENERICARCH is not set
++# CONFIG_X86_ES7000 is not set
++# CONFIG_M386 is not set
++# CONFIG_M486 is not set
++# CONFIG_M586 is not set
++# CONFIG_M586TSC is not set
++# CONFIG_M586MMX is not set
++CONFIG_M686=y
++# CONFIG_MPENTIUMII is not set
++# CONFIG_MPENTIUMIII is not set
++# CONFIG_MPENTIUMM is not set
++# CONFIG_MPENTIUM4 is not set
++# CONFIG_MK6 is not set
++# CONFIG_MK7 is not set
+# CONFIG_MK8 is not set
-+CONFIG_MPSC=y
-+# CONFIG_GENERIC_CPU is not set
-+CONFIG_X86_64_XEN=y
-+CONFIG_X86_NO_TSS=y
-+CONFIG_X86_NO_IDT=y
-+CONFIG_X86_L1_CACHE_BYTES=128
-+CONFIG_X86_L1_CACHE_SHIFT=7
-+CONFIG_X86_INTERNODE_CACHE_BYTES=128
++# CONFIG_MCRUSOE is not set
++# CONFIG_MEFFICEON is not set
++# CONFIG_MWINCHIPC6 is not set
++# CONFIG_MWINCHIP2 is not set
++# CONFIG_MWINCHIP3D is not set
++# CONFIG_MGEODEGX1 is not set
++# CONFIG_MGEODE_LX is not set
++# CONFIG_MCYRIXIII is not set
++# CONFIG_MVIAC3_2 is not set
++# CONFIG_X86_GENERIC is not set
++CONFIG_X86_CMPXCHG=y
++CONFIG_X86_XADD=y
++CONFIG_X86_L1_CACHE_SHIFT=5
++CONFIG_RWSEM_XCHGADD_ALGORITHM=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_X86_PPRO_FENCE=y
++CONFIG_X86_WP_WORKS_OK=y
++CONFIG_X86_INVLPG=y
++CONFIG_X86_BSWAP=y
++CONFIG_X86_POPAD_OK=y
++CONFIG_X86_CMPXCHG64=y
+CONFIG_X86_GOOD_APIC=y
-+# CONFIG_MICROCODE is not set
-+# CONFIG_X86_MSR is not set
-+CONFIG_X86_CPUID=y
-+CONFIG_X86_XEN_GENAPIC=y
-+CONFIG_SMP=y
++CONFIG_X86_USE_PPRO_CHECKSUM=y
++CONFIG_NR_CPUS=8
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_PREEMPT_BKL=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
++CONFIG_VM86=y
++# CONFIG_TOSHIBA is not set
++# CONFIG_I8K is not set
++# CONFIG_X86_REBOOTFIXUPS is not set
++# CONFIG_X86_MSR is not set
++CONFIG_X86_CPUID=y
++CONFIG_SWIOTLB=y
++
++#
++# Firmware Drivers
++#
++# CONFIG_EDD is not set
++# CONFIG_DELL_RBU is not set
++# CONFIG_DCDBAS is not set
++# CONFIG_NOHIGHMEM is not set
++CONFIG_HIGHMEM4G=y
++# CONFIG_HIGHMEM64G is not set
++CONFIG_PAGE_OFFSET=0xC0000000
++CONFIG_HIGHMEM=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
@@ -63767,27 +65292,24 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+CONFIG_RESOURCES_64BIT=y
-+CONFIG_NR_CPUS=16
-+# CONFIG_HOTPLUG_CPU is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_SWIOTLB=y
-+# CONFIG_CRASH_DUMP is not set
-+CONFIG_PHYSICAL_START=0x200000
++# CONFIG_HIGHPTE is not set
++# CONFIG_REGPARM is not set
+CONFIG_SECCOMP=y
+CONFIG_HZ_100=y
+# CONFIG_HZ_250 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=100
-+# CONFIG_REORDER is not set
-+CONFIG_GENERIC_HARDIRQS=y
-+CONFIG_GENERIC_IRQ_PROBE=y
-+CONFIG_ISA_DMA_API=y
-+CONFIG_GENERIC_PENDING_IRQ=y
++# CONFIG_CRASH_DUMP is not set
++CONFIG_PHYSICAL_START=0x100000
++CONFIG_HOTPLUG_CPU=y
++CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+
+#
-+# Bus options (PCI etc.)
++# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
+#
+# CONFIG_PCI is not set
++CONFIG_ISA_DMA_API=y
++# CONFIG_SCx200 is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
@@ -63799,14 +65321,11 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+#
+
+#
-+# Executable file formats / Emulations
++# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
-+CONFIG_BINFMT_MISC=y
-+CONFIG_IA32_EMULATION=y
-+# CONFIG_IA32_AOUT is not set
-+CONFIG_COMPAT=y
-+CONFIG_SYSVIPC_COMPAT=y
++# CONFIG_BINFMT_AOUT is not set
++# CONFIG_BINFMT_MISC is not set
+
+#
+# Networking
@@ -63818,146 +65337,38 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
-+CONFIG_PACKET_MMAP=y
++# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
-+CONFIG_XFRM_USER=y
-+CONFIG_NET_KEY=m
++# CONFIG_XFRM_USER is not set
++# CONFIG_NET_KEY is not set
+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+CONFIG_IP_ADVANCED_ROUTER=y
-+CONFIG_ASK_IP_FIB_HASH=y
-+# CONFIG_IP_FIB_TRIE is not set
++# CONFIG_IP_MULTICAST is not set
++# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_MULTIPLE_TABLES=y
-+CONFIG_IP_ROUTE_FWMARK=y
-+CONFIG_IP_ROUTE_MULTIPATH=y
-+# CONFIG_IP_ROUTE_MULTIPATH_CACHED is not set
-+CONFIG_IP_ROUTE_VERBOSE=y
+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+CONFIG_IP_PNP_RARP=y
-+CONFIG_NET_IPIP=m
-+CONFIG_NET_IPGRE=m
-+CONFIG_NET_IPGRE_BROADCAST=y
-+CONFIG_IP_MROUTE=y
-+CONFIG_IP_PIMSM_V1=y
-+CONFIG_IP_PIMSM_V2=y
++# CONFIG_IP_PNP_DHCP is not set
++# CONFIG_IP_PNP_BOOTP is not set
++# CONFIG_IP_PNP_RARP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+CONFIG_INET_AH=m
-+CONFIG_INET_ESP=m
-+CONFIG_INET_IPCOMP=m
-+CONFIG_INET_XFRM_TUNNEL=m
-+CONFIG_INET_TUNNEL=m
++# CONFIG_SYN_COOKIES is not set
++# CONFIG_INET_AH is not set
++# CONFIG_INET_ESP is not set
++# CONFIG_INET_IPCOMP is not set
++# CONFIG_INET_XFRM_TUNNEL is not set
++# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
-+
-+#
-+# IP: Virtual Server Configuration
-+#
-+CONFIG_IP_VS=m
-+# CONFIG_IP_VS_DEBUG is not set
-+CONFIG_IP_VS_TAB_BITS=12
-+
-+#
-+# IPVS transport protocol load balancing support
-+#
-+CONFIG_IP_VS_PROTO_TCP=y
-+CONFIG_IP_VS_PROTO_UDP=y
-+CONFIG_IP_VS_PROTO_ESP=y
-+CONFIG_IP_VS_PROTO_AH=y
-+
-+#
-+# IPVS scheduler
-+#
-+CONFIG_IP_VS_RR=m
-+CONFIG_IP_VS_WRR=m
-+CONFIG_IP_VS_LC=m
-+CONFIG_IP_VS_WLC=m
-+CONFIG_IP_VS_LBLC=m
-+CONFIG_IP_VS_LBLCR=m
-+CONFIG_IP_VS_DH=m
-+CONFIG_IP_VS_SH=m
-+CONFIG_IP_VS_SED=m
-+CONFIG_IP_VS_NQ=m
-+
-+#
-+# IPVS application helper
-+#
-+CONFIG_IP_VS_FTP=m
-+CONFIG_IPV6=m
-+CONFIG_IPV6_PRIVACY=y
-+# CONFIG_IPV6_ROUTER_PREF is not set
-+CONFIG_INET6_AH=m
-+CONFIG_INET6_ESP=m
-+CONFIG_INET6_IPCOMP=m
-+CONFIG_INET6_XFRM_TUNNEL=m
-+CONFIG_INET6_TUNNEL=m
-+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-+CONFIG_INET6_XFRM_MODE_TUNNEL=m
-+CONFIG_IPV6_TUNNEL=m
++# CONFIG_IPV6 is not set
++# CONFIG_INET6_XFRM_TUNNEL is not set
++# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
-+CONFIG_NETFILTER=y
-+# CONFIG_NETFILTER_DEBUG is not set
-+CONFIG_BRIDGE_NETFILTER=y
-+
-+#
-+# Core Netfilter Configuration
-+#
-+# CONFIG_NETFILTER_NETLINK is not set
-+# CONFIG_NETFILTER_XTABLES is not set
-+
-+#
-+# IP: Netfilter Configuration
-+#
-+CONFIG_IP_NF_CONNTRACK=m
-+CONFIG_IP_NF_CT_ACCT=y
-+# CONFIG_IP_NF_CONNTRACK_MARK is not set
-+# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-+CONFIG_IP_NF_CT_PROTO_SCTP=m
-+CONFIG_IP_NF_FTP=m
-+CONFIG_IP_NF_IRC=m
-+# CONFIG_IP_NF_NETBIOS_NS is not set
-+CONFIG_IP_NF_TFTP=m
-+CONFIG_IP_NF_AMANDA=m
-+# CONFIG_IP_NF_PPTP is not set
-+# CONFIG_IP_NF_H323 is not set
-+# CONFIG_IP_NF_SIP is not set
-+CONFIG_IP_NF_QUEUE=m
-+
-+#
-+# IPv6: Netfilter Configuration (EXPERIMENTAL)
-+#
-+# CONFIG_IP6_NF_QUEUE is not set
-+
-+#
-+# Bridge: Netfilter Configuration
-+#
-+CONFIG_BRIDGE_NF_EBTABLES=m
-+CONFIG_BRIDGE_EBT_BROUTE=m
-+CONFIG_BRIDGE_EBT_T_FILTER=m
-+CONFIG_BRIDGE_EBT_T_NAT=m
-+CONFIG_BRIDGE_EBT_802_3=m
-+CONFIG_BRIDGE_EBT_AMONG=m
-+CONFIG_BRIDGE_EBT_ARP=m
-+CONFIG_BRIDGE_EBT_IP=m
-+CONFIG_BRIDGE_EBT_LIMIT=m
-+CONFIG_BRIDGE_EBT_MARK=m
-+CONFIG_BRIDGE_EBT_PKTTYPE=m
-+CONFIG_BRIDGE_EBT_STP=m
-+CONFIG_BRIDGE_EBT_VLAN=m
-+CONFIG_BRIDGE_EBT_ARPREPLY=m
-+CONFIG_BRIDGE_EBT_DNAT=m
-+CONFIG_BRIDGE_EBT_MARK_T=m
-+CONFIG_BRIDGE_EBT_REDIRECT=m
-+CONFIG_BRIDGE_EBT_SNAT=m
-+CONFIG_BRIDGE_EBT_LOG=m
-+# CONFIG_BRIDGE_EBT_ULOG is not set
++# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
@@ -63967,167 +65378,37 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
-+CONFIG_IP_SCTP=m
-+# CONFIG_SCTP_DBG_MSG is not set
-+# CONFIG_SCTP_DBG_OBJCNT is not set
-+# CONFIG_SCTP_HMAC_NONE is not set
-+# CONFIG_SCTP_HMAC_SHA1 is not set
-+CONFIG_SCTP_HMAC_MD5=y
++# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
-+CONFIG_ATM=m
-+CONFIG_ATM_CLIP=m
-+# CONFIG_ATM_CLIP_NO_ICMP is not set
-+CONFIG_ATM_LANE=m
-+# CONFIG_ATM_MPOA is not set
-+CONFIG_ATM_BR2684=m
-+# CONFIG_ATM_BR2684_IPFILTER is not set
-+CONFIG_BRIDGE=m
-+CONFIG_VLAN_8021Q=m
++# CONFIG_ATM is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
-+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
-+CONFIG_IPX=m
-+# CONFIG_IPX_INTERN is not set
-+CONFIG_ATALK=m
-+CONFIG_DEV_APPLETALK=m
-+CONFIG_IPDDP=m
-+CONFIG_IPDDP_ENCAP=y
-+CONFIG_IPDDP_DECAP=y
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
-+CONFIG_WAN_ROUTER=m
++# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
-+CONFIG_NET_SCHED=y
-+CONFIG_NET_SCH_CLK_JIFFIES=y
-+# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
-+# CONFIG_NET_SCH_CLK_CPU is not set
-+
-+#
-+# Queueing/Scheduling
-+#
-+CONFIG_NET_SCH_CBQ=m
-+CONFIG_NET_SCH_HTB=m
-+CONFIG_NET_SCH_HFSC=m
-+CONFIG_NET_SCH_ATM=m
-+CONFIG_NET_SCH_PRIO=m
-+CONFIG_NET_SCH_RED=m
-+CONFIG_NET_SCH_SFQ=m
-+CONFIG_NET_SCH_TEQL=m
-+CONFIG_NET_SCH_TBF=m
-+CONFIG_NET_SCH_GRED=m
-+CONFIG_NET_SCH_DSMARK=m
-+CONFIG_NET_SCH_NETEM=m
-+CONFIG_NET_SCH_INGRESS=m
-+
-+#
-+# Classification
-+#
-+CONFIG_NET_CLS=y
-+# CONFIG_NET_CLS_BASIC is not set
-+CONFIG_NET_CLS_TCINDEX=m
-+CONFIG_NET_CLS_ROUTE4=m
-+CONFIG_NET_CLS_ROUTE=y
-+CONFIG_NET_CLS_FW=m
-+CONFIG_NET_CLS_U32=m
-+CONFIG_CLS_U32_PERF=y
-+# CONFIG_CLS_U32_MARK is not set
-+CONFIG_NET_CLS_RSVP=m
-+CONFIG_NET_CLS_RSVP6=m
-+# CONFIG_NET_EMATCH is not set
-+# CONFIG_NET_CLS_ACT is not set
-+CONFIG_NET_CLS_POLICE=y
-+CONFIG_NET_CLS_IND=y
-+CONFIG_NET_ESTIMATOR=y
++# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
-+CONFIG_IRDA=m
-+
-+#
-+# IrDA protocols
-+#
-+CONFIG_IRLAN=m
-+CONFIG_IRNET=m
-+CONFIG_IRCOMM=m
-+# CONFIG_IRDA_ULTRA is not set
-+
-+#
-+# IrDA options
-+#
-+CONFIG_IRDA_CACHE_LAST_LSAP=y
-+CONFIG_IRDA_FAST_RR=y
-+# CONFIG_IRDA_DEBUG is not set
-+
-+#
-+# Infrared-port device drivers
-+#
-+
-+#
-+# SIR device drivers
-+#
-+CONFIG_IRTTY_SIR=m
-+
-+#
-+# Dongle support
-+#
-+CONFIG_DONGLE=y
-+CONFIG_ESI_DONGLE=m
-+CONFIG_ACTISYS_DONGLE=m
-+CONFIG_TEKRAM_DONGLE=m
-+# CONFIG_TOIM3232_DONGLE is not set
-+CONFIG_LITELINK_DONGLE=m
-+CONFIG_MA600_DONGLE=m
-+CONFIG_GIRBIL_DONGLE=m
-+CONFIG_MCP2120_DONGLE=m
-+CONFIG_OLD_BELKIN_DONGLE=m
-+CONFIG_ACT200L_DONGLE=m
-+
-+#
-+# Old SIR device drivers
-+#
-+
-+#
-+# Old Serial dongle support
-+#
-+
-+#
-+# FIR device drivers
-+#
-+# CONFIG_NSC_FIR is not set
-+# CONFIG_WINBOND_FIR is not set
-+# CONFIG_SMC_IRCC_FIR is not set
-+# CONFIG_ALI_FIR is not set
-+# CONFIG_VIA_FIR is not set
-+CONFIG_BT=m
-+CONFIG_BT_L2CAP=m
-+CONFIG_BT_SCO=m
-+CONFIG_BT_RFCOMM=m
-+CONFIG_BT_RFCOMM_TTY=y
-+CONFIG_BT_BNEP=m
-+CONFIG_BT_BNEP_MC_FILTER=y
-+CONFIG_BT_BNEP_PROTO_FILTER=y
-+CONFIG_BT_HIDP=m
-+
-+#
-+# Bluetooth device drivers
-+#
-+CONFIG_BT_HCIUART=m
-+CONFIG_BT_HCIUART_H4=y
-+CONFIG_BT_HCIUART_BCSP=y
-+CONFIG_BT_HCIVHCI=m
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
-+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
@@ -64138,7 +65419,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+CONFIG_FW_LOADER=y
++# CONFIG_FW_LOADER is not set
+# CONFIG_DEBUG_DRIVER is not set
+CONFIG_SYS_HYPERVISOR=y
+
@@ -64164,14 +65445,14 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+#
+# Block devices
+#
-+CONFIG_BLK_DEV_FD=m
++# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
-+CONFIG_BLK_DEV_CRYPTOLOOP=m
++# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+CONFIG_BLK_DEV_NBD=m
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=16384
++CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
@@ -64193,25 +65474,24 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
-+CONFIG_CHR_DEV_ST=m
-+CONFIG_CHR_DEV_OSST=m
-+CONFIG_BLK_DEV_SR=m
-+CONFIG_BLK_DEV_SR_VENDOR=y
-+CONFIG_CHR_DEV_SG=m
++# CONFIG_CHR_DEV_ST is not set
++# CONFIG_CHR_DEV_OSST is not set
++# CONFIG_BLK_DEV_SR is not set
++# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
-+CONFIG_SCSI_CONSTANTS=y
-+CONFIG_SCSI_LOGGING=y
++# CONFIG_SCSI_CONSTANTS is not set
++# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
-+CONFIG_SCSI_SPI_ATTRS=m
-+CONFIG_SCSI_FC_ATTRS=m
++# CONFIG_SCSI_SPI_ATTRS is not set
++# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
@@ -64219,27 +65499,13 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
-+CONFIG_SCSI_SATA=m
++# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
-+CONFIG_MD=y
-+CONFIG_BLK_DEV_MD=y
-+CONFIG_MD_LINEAR=m
-+CONFIG_MD_RAID0=m
-+CONFIG_MD_RAID1=m
-+CONFIG_MD_RAID10=m
-+# CONFIG_MD_RAID456 is not set
-+CONFIG_MD_MULTIPATH=m
-+# CONFIG_MD_FAULTY is not set
-+CONFIG_BLK_DEV_DM=m
-+CONFIG_DM_CRYPT=m
-+CONFIG_DM_SNAPSHOT=m
-+CONFIG_DM_MIRROR=m
-+CONFIG_DM_ZERO=m
-+# CONFIG_DM_MULTIPATH is not set
++# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
@@ -64258,21 +65524,19 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+# Network device support
+#
+CONFIG_NETDEVICES=y
-+CONFIG_DUMMY=m
-+CONFIG_BONDING=m
-+CONFIG_EQUALIZER=m
-+CONFIG_TUN=m
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
-+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=m
++# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
@@ -64289,42 +65553,18 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+#
+# Wireless LAN (non-hamradio)
+#
-+CONFIG_NET_RADIO=y
-+# CONFIG_NET_WIRELESS_RTNETLINK is not set
-+
-+#
-+# Obsolete Wireless cards support (pre-802.11)
-+#
-+# CONFIG_STRIP is not set
-+# CONFIG_HOSTAP is not set
++# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
-+
-+#
-+# ATM drivers
-+#
-+# CONFIG_ATM_DUMMY is not set
-+CONFIG_ATM_TCP=m
-+CONFIG_PPP=m
-+CONFIG_PPP_MULTILINK=y
-+CONFIG_PPP_FILTER=y
-+CONFIG_PPP_ASYNC=m
-+CONFIG_PPP_SYNC_TTY=m
-+CONFIG_PPP_DEFLATE=m
-+# CONFIG_PPP_BSDCOMP is not set
-+# CONFIG_PPP_MPPE is not set
-+CONFIG_PPPOE=m
-+CONFIG_PPPOATM=m
++# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
-+CONFIG_NETCONSOLE=m
-+CONFIG_NETPOLL=y
-+# CONFIG_NETPOLL_RX is not set
-+CONFIG_NETPOLL_TRAP=y
-+CONFIG_NET_POLL_CONTROLLER=y
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
@@ -64357,7 +65597,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
-+CONFIG_KEYBOARD_ATKBD=y
++# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
@@ -64374,7 +65614,6 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_CT82C710 is not set
-+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
@@ -64408,6 +65647,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=y
++CONFIG_HW_RANDOM_VIA=y
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_GEN_RTC is not set
@@ -64419,6 +65659,8 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+#
+# CONFIG_MWAVE is not set
+# CONFIG_PC8736x_GPIO is not set
++# CONFIG_NSC_GPIO is not set
++# CONFIG_CS5535_GPIO is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_HANGCHECK_TIMER is not set
+
@@ -64544,19 +65786,10 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+#
+
+#
-+# Firmware Drivers
-+#
-+# CONFIG_EDD is not set
-+# CONFIG_DELL_RBU is not set
-+# CONFIG_DCDBAS is not set
-+
-+#
+# File systems
+#
+CONFIG_EXT2_FS=y
-+CONFIG_EXT2_FS_XATTR=y
-+CONFIG_EXT2_FS_POSIX_ACL=y
-+CONFIG_EXT2_FS_SECURITY=y
++# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
@@ -64567,33 +65800,20 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=y
+# CONFIG_REISERFS_CHECK is not set
-+CONFIG_REISERFS_PROC_INFO=y
-+CONFIG_REISERFS_FS_XATTR=y
-+CONFIG_REISERFS_FS_POSIX_ACL=y
-+CONFIG_REISERFS_FS_SECURITY=y
-+CONFIG_JFS_FS=m
-+CONFIG_JFS_POSIX_ACL=y
-+# CONFIG_JFS_SECURITY is not set
-+# CONFIG_JFS_DEBUG is not set
-+# CONFIG_JFS_STATISTICS is not set
-+CONFIG_FS_POSIX_ACL=y
-+CONFIG_XFS_FS=m
-+# CONFIG_XFS_QUOTA is not set
-+CONFIG_XFS_SECURITY=y
-+CONFIG_XFS_POSIX_ACL=y
-+# CONFIG_XFS_RT is not set
++# CONFIG_REISERFS_PROC_INFO is not set
++# CONFIG_REISERFS_FS_XATTR is not set
++# CONFIG_JFS_FS is not set
++# CONFIG_FS_POSIX_ACL is not set
++# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
-+CONFIG_MINIX_FS=m
-+CONFIG_ROMFS_FS=m
++# CONFIG_MINIX_FS is not set
++# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
-+CONFIG_QUOTA=y
-+# CONFIG_QFMT_V1 is not set
-+CONFIG_QFMT_V2=y
-+CONFIG_QUOTACTL=y
++# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
-+CONFIG_AUTOFS_FS=m
-+CONFIG_AUTOFS4_FS=m
++CONFIG_AUTOFS_FS=y
++CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
@@ -64603,8 +65823,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_ZISOFS_FS=y
-+CONFIG_UDF_FS=m
-+CONFIG_UDF_NLS=y
++# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
@@ -64613,7 +65832,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
-+CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
@@ -64631,61 +65850,38 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
-+CONFIG_AFFS_FS=m
-+CONFIG_HFS_FS=m
-+CONFIG_HFSPLUS_FS=m
-+CONFIG_BEFS_FS=m
-+# CONFIG_BEFS_DEBUG is not set
-+CONFIG_BFS_FS=m
-+CONFIG_EFS_FS=m
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
+CONFIG_CRAMFS=y
-+CONFIG_VXFS_FS=m
++# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
-+CONFIG_QNX4FS_FS=m
-+CONFIG_SYSV_FS=m
-+CONFIG_UFS_FS=m
-+# CONFIG_UFS_FS_WRITE is not set
-+# CONFIG_UFS_DEBUG is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
-+CONFIG_NFS_FS=m
++CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
-+CONFIG_NFS_V4=y
-+CONFIG_NFS_DIRECTIO=y
-+CONFIG_NFSD=m
-+CONFIG_NFSD_V3=y
-+# CONFIG_NFSD_V3_ACL is not set
-+CONFIG_NFSD_V4=y
-+CONFIG_NFSD_TCP=y
-+CONFIG_LOCKD=m
++# CONFIG_NFS_V4 is not set
++# CONFIG_NFS_DIRECTIO is not set
++# CONFIG_NFSD is not set
++CONFIG_ROOT_NFS=y
++CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
-+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=m
-+CONFIG_SUNRPC_GSS=m
-+CONFIG_RPCSEC_GSS_KRB5=m
-+CONFIG_RPCSEC_GSS_SPKM3=m
-+CONFIG_SMB_FS=m
-+# CONFIG_SMB_NLS_DEFAULT is not set
-+CONFIG_CIFS=m
-+# CONFIG_CIFS_STATS is not set
-+# CONFIG_CIFS_WEAK_PW_HASH is not set
-+CONFIG_CIFS_XATTR=y
-+CONFIG_CIFS_POSIX=y
-+# CONFIG_CIFS_DEBUG2 is not set
-+# CONFIG_CIFS_EXPERIMENTAL is not set
-+CONFIG_NCP_FS=m
-+CONFIG_NCPFS_PACKET_SIGNING=y
-+CONFIG_NCPFS_IOCTL_LOCKING=y
-+CONFIG_NCPFS_STRONG=y
-+CONFIG_NCPFS_NFS_NS=y
-+CONFIG_NCPFS_OS2_NS=y
-+CONFIG_NCPFS_SMALLDOS=y
-+CONFIG_NCPFS_NLS=y
-+CONFIG_NCPFS_EXTRAS=y
++CONFIG_SUNRPC=y
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
++# CONFIG_SMB_FS is not set
++# CONFIG_CIFS is not set
++# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
@@ -64693,67 +65889,52 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+#
+# Partition Types
+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+CONFIG_OSF_PARTITION=y
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+CONFIG_MAC_PARTITION=y
++# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
-+CONFIG_BSD_DISKLABEL=y
-+CONFIG_MINIX_SUBPARTITION=y
-+CONFIG_SOLARIS_X86_PARTITION=y
-+CONFIG_UNIXWARE_DISKLABEL=y
-+# CONFIG_LDM_PARTITION is not set
-+CONFIG_SGI_PARTITION=y
-+# CONFIG_ULTRIX_PARTITION is not set
-+CONFIG_SUN_PARTITION=y
-+# CONFIG_KARMA_PARTITION is not set
-+CONFIG_EFI_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
-+CONFIG_NLS_DEFAULT="utf8"
++CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
-+CONFIG_NLS_CODEPAGE_737=m
-+CONFIG_NLS_CODEPAGE_775=m
-+CONFIG_NLS_CODEPAGE_850=m
-+CONFIG_NLS_CODEPAGE_852=m
-+CONFIG_NLS_CODEPAGE_855=m
-+CONFIG_NLS_CODEPAGE_857=m
-+CONFIG_NLS_CODEPAGE_860=m
-+CONFIG_NLS_CODEPAGE_861=m
-+CONFIG_NLS_CODEPAGE_862=m
-+CONFIG_NLS_CODEPAGE_863=m
-+CONFIG_NLS_CODEPAGE_864=m
-+CONFIG_NLS_CODEPAGE_865=m
-+CONFIG_NLS_CODEPAGE_866=m
-+CONFIG_NLS_CODEPAGE_869=m
-+CONFIG_NLS_CODEPAGE_936=m
-+CONFIG_NLS_CODEPAGE_950=m
-+CONFIG_NLS_CODEPAGE_932=m
-+CONFIG_NLS_CODEPAGE_949=m
-+CONFIG_NLS_CODEPAGE_874=m
-+CONFIG_NLS_ISO8859_8=m
-+CONFIG_NLS_CODEPAGE_1250=m
-+CONFIG_NLS_CODEPAGE_1251=m
-+CONFIG_NLS_ASCII=y
-+CONFIG_NLS_ISO8859_1=m
-+CONFIG_NLS_ISO8859_2=m
-+CONFIG_NLS_ISO8859_3=m
-+CONFIG_NLS_ISO8859_4=m
-+CONFIG_NLS_ISO8859_5=m
-+CONFIG_NLS_ISO8859_6=m
-+CONFIG_NLS_ISO8859_7=m
-+CONFIG_NLS_ISO8859_9=m
-+CONFIG_NLS_ISO8859_13=m
-+CONFIG_NLS_ISO8859_14=m
-+CONFIG_NLS_ISO8859_15=m
-+CONFIG_NLS_KOI8_R=m
-+CONFIG_NLS_KOI8_U=m
-+CONFIG_NLS_UTF8=m
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++# CONFIG_NLS_CODEPAGE_850 is not set
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1250 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ASCII is not set
++CONFIG_NLS_ISO8859_1=y
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++# CONFIG_NLS_UTF8 is not set
+
+#
+# Instrumentation Support
@@ -64769,7 +65950,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_UNUSED_SYMBOLS=y
+CONFIG_DEBUG_KERNEL=y
-+CONFIG_LOG_BUF_SHIFT=15
++CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
@@ -64783,6 +65964,8 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
++# CONFIG_DEBUG_HIGHMEM is not set
++CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
@@ -64790,9 +65973,12 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+# CONFIG_UNWIND_INFO is not set
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_DEBUG_RODATA is not set
++CONFIG_EARLY_PRINTK=y
+# CONFIG_DEBUG_STACKOVERFLOW is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
++# CONFIG_DEBUG_PAGEALLOC is not set
++# CONFIG_DEBUG_RODATA is not set
++# CONFIG_4KSTACKS is not set
+
+#
+# Security options
@@ -64804,37 +65990,38 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_HMAC=y
-+CONFIG_CRYPTO_NULL=m
-+CONFIG_CRYPTO_MD4=m
-+CONFIG_CRYPTO_MD5=y
-+CONFIG_CRYPTO_SHA1=y
-+CONFIG_CRYPTO_SHA256=m
-+CONFIG_CRYPTO_SHA512=m
-+CONFIG_CRYPTO_WP512=m
++# CONFIG_CRYPTO_HMAC is not set
++# CONFIG_CRYPTO_NULL is not set
++# CONFIG_CRYPTO_MD4 is not set
++CONFIG_CRYPTO_MD5=m
++# CONFIG_CRYPTO_SHA1 is not set
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
-+CONFIG_CRYPTO_DES=m
-+CONFIG_CRYPTO_BLOWFISH=m
-+CONFIG_CRYPTO_TWOFISH=m
-+CONFIG_CRYPTO_SERPENT=m
++# CONFIG_CRYPTO_DES is not set
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_AES_X86_64 is not set
-+CONFIG_CRYPTO_CAST5=m
-+CONFIG_CRYPTO_CAST6=m
-+CONFIG_CRYPTO_TEA=m
-+CONFIG_CRYPTO_ARC4=m
-+CONFIG_CRYPTO_KHAZAD=m
++# CONFIG_CRYPTO_AES_586 is not set
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_TEA is not set
++# CONFIG_CRYPTO_ARC4 is not set
++# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
-+CONFIG_CRYPTO_DEFLATE=m
-+CONFIG_CRYPTO_MICHAEL_MIC=m
++# CONFIG_CRYPTO_DEFLATE is not set
++# CONFIG_CRYPTO_MICHAEL_MIC is not set
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
++# CONFIG_CRYPTO_DEV_PADLOCK is not set
+CONFIG_XEN=y
-+CONFIG_XEN_INTERFACE_VERSION=0x00030206
++CONFIG_XEN_INTERFACE_VERSION=0x00030207
+
+#
+# XEN
@@ -64844,8 +66031,12 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+CONFIG_XEN_PRIVCMD=y
+CONFIG_XEN_XENBUS_DEV=y
+# CONFIG_XEN_BACKEND is not set
++# CONFIG_XEN_NETDEV_ACCEL_SFC_UTIL is not set
+CONFIG_XEN_BLKDEV_FRONTEND=y
+CONFIG_XEN_NETDEV_FRONTEND=y
++CONFIG_XEN_SCSI_FRONTEND=m
++# CONFIG_XEN_GRANT_DEV is not set
++# CONFIG_XEN_NETDEV_ACCEL_SFC_FRONTEND is not set
+CONFIG_XEN_SCRUB_PAGES=y
+CONFIG_XEN_DISABLE_SERIAL=y
+CONFIG_XEN_SYSFS=y
@@ -64859,29 +66050,51 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-
+CONFIG_XEN_SMPBOOT=y
+CONFIG_XEN_BALLOON=y
+CONFIG_XEN_DEVMEM=y
-+# CONFIG_XEN_GRANT_DEV is not set
+
+#
+# Library routines
+#
-+CONFIG_CRC_CCITT=m
++# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
-+CONFIG_CRC32=y
++# CONFIG_CRC32 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
-+CONFIG_ZLIB_DEFLATE=m
-+CONFIG_TEXTSEARCH=y
-+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_PLIST=y
-diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen-3.2.0/buildconfigs/linux-defconfig_xen_ia64
---- linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/buildconfigs/linux-defconfig_xen_ia64 2008-02-15 16:21:56.000000000 -0800
-@@ -0,0 +1,1697 @@
++CONFIG_GENERIC_HARDIRQS=y
++CONFIG_GENERIC_IRQ_PROBE=y
++CONFIG_GENERIC_PENDING_IRQ=y
++CONFIG_X86_SMP=y
++CONFIG_X86_BIOS_REBOOT=y
++CONFIG_X86_TRAMPOLINE=y
++CONFIG_X86_NO_TSS=y
++CONFIG_X86_NO_IDT=y
++CONFIG_KTIME_SCALAR=y
+diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 linux-2.6.18-xen-3.3.0/buildconfigs/linux-defconfig_xenU_x86_64
+--- linux-2.6.18.8/buildconfigs/linux-defconfig_xenU_x86_64 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/buildconfigs/linux-defconfig_xenU_x86_64 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,906 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.18.8
-+# Mon Dec 17 13:38:29 2007
++# Mon Feb 18 10:42:42 2008
+#
++CONFIG_X86_64=y
++CONFIG_64BIT=y
++CONFIG_X86=y
++CONFIG_LOCKDEP_SUPPORT=y
++CONFIG_STACKTRACE_SUPPORT=y
++CONFIG_SEMAPHORE_SLEEPERS=y
++CONFIG_MMU=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_X86_CMPXCHG=y
++CONFIG_EARLY_PRINTK=y
++CONFIG_GENERIC_ISA_DMA=y
++CONFIG_GENERIC_IOMAP=y
++CONFIG_ARCH_MAY_HAVE_PC_FDC=y
++CONFIG_DMI=y
++CONFIG_AUDIT_ARCH=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
@@ -64895,25 +66108,24 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+# General setup
+#
+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
++# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
-+CONFIG_POSIX_MQUEUE=y
-+CONFIG_BSD_PROCESS_ACCT=y
-+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
++# CONFIG_POSIX_MQUEUE is not set
++# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
-+CONFIG_IKCONFIG=y
-+CONFIG_IKCONFIG_PROC=y
++# CONFIG_IKCONFIG is not set
+# CONFIG_CPUSETS is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
-+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+# CONFIG_EMBEDDED is not set
++CONFIG_UID16=y
+CONFIG_SYSCTL=y
+CONFIG_KALLSYMS=y
-+CONFIG_KALLSYMS_ALL=y
-+CONFIG_KALLSYMS_EXTRA_PASS=y
++# CONFIG_KALLSYMS_ALL is not set
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
@@ -64935,15 +66147,17 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+CONFIG_MODVERSIONS=y
-+CONFIG_MODULE_SRCVERSION_ALL=y
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_STOP_MACHINE=y
+
+#
+# Block layer
+#
++# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
++CONFIG_LSF=y
+
+#
+# IO Schedulers
@@ -64961,151 +66175,77 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+#
+# Processor type and features
+#
-+CONFIG_IA64=y
-+CONFIG_64BIT=y
-+CONFIG_MMU=y
-+CONFIG_SWIOTLB=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_TIME_INTERPOLATION=y
-+CONFIG_DMI=y
-+CONFIG_EFI=y
-+CONFIG_GENERIC_IOMAP=y
-+CONFIG_XEN=y
-+CONFIG_XEN_IA64_EXPOSE_P2M=y
-+CONFIG_XEN_IA64_EXPOSE_P2M_USE_DTR=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_DMA_IS_DMA32=y
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_IA64_GENERIC=y
-+# CONFIG_IA64_DIG is not set
-+# CONFIG_IA64_HP_ZX1 is not set
-+# CONFIG_IA64_HP_ZX1_SWIOTLB is not set
-+# CONFIG_IA64_SGI_SN2 is not set
-+# CONFIG_IA64_HP_SIM is not set
-+# CONFIG_IA64_XEN is not set
-+# CONFIG_ITANIUM is not set
-+CONFIG_MCKINLEY=y
-+# CONFIG_IA64_PAGE_SIZE_4KB is not set
-+# CONFIG_IA64_PAGE_SIZE_8KB is not set
-+CONFIG_IA64_PAGE_SIZE_16KB=y
-+# CONFIG_IA64_PAGE_SIZE_64KB is not set
-+CONFIG_PGTABLE_3=y
-+# CONFIG_PGTABLE_4 is not set
-+CONFIG_HZ_100=y
-+# CONFIG_HZ_250 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=100
-+CONFIG_IA64_L1_CACHE_SHIFT=7
-+CONFIG_IA64_CYCLONE=y
-+CONFIG_IOSAPIC=y
-+# CONFIG_IA64_SGI_SN_XP is not set
-+CONFIG_FORCE_MAX_ZONEORDER=11
++CONFIG_X86_PC=y
++# CONFIG_X86_VSMP is not set
++# CONFIG_MK8 is not set
++# CONFIG_MPSC is not set
++CONFIG_GENERIC_CPU=y
++CONFIG_X86_64_XEN=y
++CONFIG_X86_NO_TSS=y
++CONFIG_X86_NO_IDT=y
++CONFIG_X86_L1_CACHE_BYTES=128
++CONFIG_X86_L1_CACHE_SHIFT=7
++CONFIG_X86_INTERNODE_CACHE_BYTES=128
++CONFIG_X86_GOOD_APIC=y
++# CONFIG_MICROCODE is not set
++# CONFIG_X86_MSR is not set
++CONFIG_X86_CPUID=y
++CONFIG_X86_XEN_GENAPIC=y
+CONFIG_SMP=y
-+CONFIG_NR_CPUS=16
-+CONFIG_HOTPLUG_CPU=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+# CONFIG_SCHED_SMT is not set
-+# CONFIG_PERMIT_BSP_REMOVE is not set
++CONFIG_PREEMPT_NONE=y
++# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
++CONFIG_PREEMPT_BKL=y
++CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_SELECT_MEMORY_MODEL=y
-+# CONFIG_FLATMEM_MANUAL is not set
-+CONFIG_DISCONTIGMEM_MANUAL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_DISCONTIGMEM=y
++CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
-+CONFIG_NEED_MULTIPLE_NODES=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_MIGRATION is not set
+CONFIG_RESOURCES_64BIT=y
-+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
-+CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_SPARSEMEM_ENABLE=y
-+CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y
-+CONFIG_NUMA=y
-+CONFIG_NODES_SHIFT=10
-+CONFIG_VIRTUAL_MEM_MAP=y
-+CONFIG_HOLES_IN_ZONE=y
-+CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
-+CONFIG_HAVE_ARCH_NODEDATA_EXTENSION=y
-+# CONFIG_IA32_SUPPORT is not set
-+# CONFIG_IA64_MCA_RECOVERY is not set
-+CONFIG_PERFMON=y
-+CONFIG_IA64_PALINFO=y
-+CONFIG_SGI_SN=y
-+
-+#
-+# SN Devices
-+#
-+# CONFIG_SGI_IOC3 is not set
-+CONFIG_KEXEC=y
-+
-+#
-+# Firmware Drivers
-+#
-+CONFIG_EFI_VARS=y
-+CONFIG_EFI_PCDP=y
-+CONFIG_BINFMT_ELF=y
-+CONFIG_BINFMT_MISC=y
-+
-+#
-+# Power management and ACPI
-+#
-+CONFIG_PM=y
-+CONFIG_PM_LEGACY=y
-+# CONFIG_PM_DEBUG is not set
-+
-+#
-+# ACPI (Advanced Configuration and Power Interface) Support
-+#
-+CONFIG_ACPI=y
-+CONFIG_ACPI_BUTTON=y
-+CONFIG_ACPI_FAN=y
-+# CONFIG_ACPI_DOCK is not set
-+CONFIG_ACPI_PROCESSOR=y
-+CONFIG_ACPI_HOTPLUG_CPU=y
-+CONFIG_ACPI_THERMAL=y
-+CONFIG_ACPI_NUMA=y
-+CONFIG_ACPI_BLACKLIST_YEAR=0
-+# CONFIG_ACPI_DEBUG is not set
-+CONFIG_ACPI_EC=y
-+CONFIG_ACPI_POWER=y
-+CONFIG_ACPI_SYSTEM=y
-+CONFIG_ACPI_CONTAINER=y
++CONFIG_NR_CPUS=8
++CONFIG_HOTPLUG_CPU=y
++CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
++CONFIG_SWIOTLB=y
++# CONFIG_CRASH_DUMP is not set
++CONFIG_PHYSICAL_START=0x200000
++CONFIG_SECCOMP=y
++CONFIG_HZ_100=y
++# CONFIG_HZ_250 is not set
++# CONFIG_HZ_1000 is not set
++CONFIG_HZ=100
++# CONFIG_REORDER is not set
++CONFIG_GENERIC_HARDIRQS=y
++CONFIG_GENERIC_IRQ_PROBE=y
++CONFIG_ISA_DMA_API=y
++CONFIG_GENERIC_PENDING_IRQ=y
+
+#
-+# CPU Frequency scaling
++# Bus options (PCI etc.)
+#
-+# CONFIG_CPU_FREQ is not set
++# CONFIG_PCI is not set
+
+#
-+# Bus options (PCI, PCMCIA)
++# PCCARD (PCMCIA/CardBus) support
+#
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_XEN_PCIDEV_FRONTEND=y
-+# CONFIG_XEN_PCIDEV_FE_DEBUG is not set
-+# CONFIG_PCIEPORTBUS is not set
-+# CONFIG_PCI_DEBUG is not set
++# CONFIG_PCCARD is not set
+
+#
+# PCI Hotplug Support
+#
-+CONFIG_HOTPLUG_PCI=y
-+# CONFIG_HOTPLUG_PCI_FAKE is not set
-+CONFIG_HOTPLUG_PCI_ACPI=y
-+# CONFIG_HOTPLUG_PCI_ACPI_IBM is not set
-+# CONFIG_HOTPLUG_PCI_CPCI is not set
-+# CONFIG_HOTPLUG_PCI_SHPC is not set
-+# CONFIG_HOTPLUG_PCI_SGI is not set
+
+#
-+# PCCARD (PCMCIA/CardBus) support
++# Executable file formats / Emulations
+#
-+# CONFIG_PCCARD is not set
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_MISC is not set
++CONFIG_IA32_EMULATION=y
++CONFIG_IA32_AOUT=y
++CONFIG_COMPAT=y
++CONFIG_SYSVIPC_COMPAT=y
+
+#
+# Networking
@@ -65123,18 +66263,17 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+# CONFIG_XFRM_USER is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
++# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
++# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
-+# CONFIG_IP_MROUTE is not set
-+CONFIG_ARPD=y
-+CONFIG_SYN_COOKIES=y
++# CONFIG_ARPD is not set
++# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
@@ -65142,40 +66281,14 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
++# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
-+
-+#
-+# IP: Virtual Server Configuration
-+#
-+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
-+CONFIG_NETFILTER=y
-+# CONFIG_NETFILTER_DEBUG is not set
-+CONFIG_BRIDGE_NETFILTER=y
-+
-+#
-+# Core Netfilter Configuration
-+#
-+# CONFIG_NETFILTER_NETLINK is not set
-+# CONFIG_NF_CONNTRACK is not set
-+# CONFIG_NETFILTER_XTABLES is not set
-+
-+#
-+# IP: Netfilter Configuration
-+#
-+# CONFIG_IP_NF_CONNTRACK is not set
-+# CONFIG_IP_NF_QUEUE is not set
-+
-+#
-+# Bridge: Netfilter Configuration
-+#
-+# CONFIG_BRIDGE_NF_EBTABLES is not set
++# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
@@ -65192,10 +66305,9 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
-+CONFIG_BRIDGE=y
++# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
-+CONFIG_LLC=y
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
@@ -65227,7 +66339,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+CONFIG_FW_LOADER=y
++# CONFIG_FW_LOADER is not set
+# CONFIG_DEBUG_DRIVER is not set
+CONFIG_SYS_HYPERVISOR=y
+
@@ -65249,22 +66361,15 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+#
+# Plug and Play support
+#
-+# CONFIG_PNP is not set
+
+#
+# Block devices
+#
-+# CONFIG_BLK_CPQ_DA is not set
-+CONFIG_BLK_CPQ_CISS_DA=y
-+# CONFIG_CISS_SCSI_TAPE is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
++# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+CONFIG_BLK_DEV_CRYPTOLOOP=y
++CONFIG_BLK_DEV_LOOP=m
++# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+CONFIG_BLK_DEV_NBD=m
-+# CONFIG_BLK_DEV_SX8 is not set
-+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
@@ -65276,265 +66381,94 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+#
+# ATA/ATAPI/MFM/RLL support
+#
-+CONFIG_IDE=y
-+CONFIG_IDE_MAX_HWIFS=4
-+CONFIG_BLK_DEV_IDE=y
-+
-+#
-+# Please see Documentation/ide.txt for help/info on IDE drives
-+#
-+# CONFIG_BLK_DEV_IDE_SATA is not set
-+CONFIG_BLK_DEV_IDEDISK=y
-+# CONFIG_IDEDISK_MULTI_MODE is not set
-+CONFIG_BLK_DEV_IDECD=y
-+# CONFIG_BLK_DEV_IDETAPE is not set
-+CONFIG_BLK_DEV_IDEFLOPPY=y
-+CONFIG_BLK_DEV_IDESCSI=y
-+# CONFIG_IDE_TASK_IOCTL is not set
-+
-+#
-+# IDE chipset support/bugfixes
-+#
-+# CONFIG_IDE_GENERIC is not set
-+CONFIG_BLK_DEV_IDEPCI=y
-+# CONFIG_IDEPCI_SHARE_IRQ is not set
-+# CONFIG_BLK_DEV_OFFBOARD is not set
-+CONFIG_BLK_DEV_GENERIC=y
-+# CONFIG_BLK_DEV_OPTI621 is not set
-+CONFIG_BLK_DEV_IDEDMA_PCI=y
-+# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-+CONFIG_IDEDMA_PCI_AUTO=y
-+# CONFIG_IDEDMA_ONLYDISK is not set
-+# CONFIG_BLK_DEV_AEC62XX is not set
-+# CONFIG_BLK_DEV_ALI15X3 is not set
-+# CONFIG_BLK_DEV_AMD74XX is not set
-+CONFIG_BLK_DEV_CMD64X=y
-+# CONFIG_BLK_DEV_TRIFLEX is not set
-+# CONFIG_BLK_DEV_CY82C693 is not set
-+# CONFIG_BLK_DEV_CS5520 is not set
-+# CONFIG_BLK_DEV_CS5530 is not set
-+# CONFIG_BLK_DEV_HPT34X is not set
-+# CONFIG_BLK_DEV_HPT366 is not set
-+# CONFIG_BLK_DEV_SC1200 is not set
-+CONFIG_BLK_DEV_PIIX=y
-+# CONFIG_BLK_DEV_IT821X is not set
-+# CONFIG_BLK_DEV_NS87415 is not set
-+# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-+# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-+# CONFIG_BLK_DEV_SVWKS is not set
-+# CONFIG_BLK_DEV_SIIMAGE is not set
-+# CONFIG_BLK_DEV_SLC90E66 is not set
-+# CONFIG_BLK_DEV_TRM290 is not set
-+# CONFIG_BLK_DEV_VIA82CXXX is not set
-+# CONFIG_IDE_ARM is not set
-+CONFIG_BLK_DEV_IDEDMA=y
-+# CONFIG_IDEDMA_IVB is not set
-+CONFIG_IDEDMA_AUTO=y
-+# CONFIG_BLK_DEV_HD is not set
++# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
-+CONFIG_SCSI=y
++CONFIG_SCSI=m
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
-+CONFIG_BLK_DEV_SD=y
-+CONFIG_CHR_DEV_ST=y
-+CONFIG_CHR_DEV_OSST=y
-+CONFIG_BLK_DEV_SR=y
-+CONFIG_BLK_DEV_SR_VENDOR=y
-+CONFIG_CHR_DEV_SG=y
++CONFIG_BLK_DEV_SD=m
++# CONFIG_CHR_DEV_ST is not set
++# CONFIG_CHR_DEV_OSST is not set
++# CONFIG_BLK_DEV_SR is not set
++# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
-+CONFIG_SCSI_MULTI_LUN=y
-+CONFIG_SCSI_CONSTANTS=y
-+CONFIG_SCSI_LOGGING=y
++# CONFIG_SCSI_MULTI_LUN is not set
++# CONFIG_SCSI_CONSTANTS is not set
++# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
-+CONFIG_SCSI_SPI_ATTRS=y
-+CONFIG_SCSI_FC_ATTRS=y
++# CONFIG_SCSI_SPI_ATTRS is not set
++# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
-+CONFIG_SCSI_SAS_ATTRS=y
++# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
-+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-+# CONFIG_SCSI_3W_9XXX is not set
-+# CONFIG_SCSI_ACARD is not set
-+# CONFIG_SCSI_AACRAID is not set
-+# CONFIG_SCSI_AIC7XXX is not set
-+# CONFIG_SCSI_AIC7XXX_OLD is not set
-+# CONFIG_SCSI_AIC79XX is not set
-+# CONFIG_MEGARAID_NEWGEN is not set
-+# CONFIG_MEGARAID_LEGACY is not set
-+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_SATA is not set
-+# CONFIG_SCSI_HPTIOP is not set
-+# CONFIG_SCSI_DMX3191D is not set
-+# CONFIG_SCSI_FUTURE_DOMAIN is not set
-+# CONFIG_SCSI_IPS is not set
-+# CONFIG_SCSI_INITIO is not set
-+# CONFIG_SCSI_INIA100 is not set
-+CONFIG_SCSI_SYM53C8XX_2=y
-+CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
-+CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
-+CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
-+CONFIG_SCSI_SYM53C8XX_MMIO=y
-+# CONFIG_SCSI_IPR is not set
-+CONFIG_SCSI_QLOGIC_1280=y
-+# CONFIG_SCSI_QLA_FC is not set
-+# CONFIG_SCSI_LPFC is not set
-+# CONFIG_SCSI_DC395x is not set
-+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
-+CONFIG_MD=y
-+# CONFIG_BLK_DEV_MD is not set
-+CONFIG_BLK_DEV_DM=y
-+CONFIG_DM_CRYPT=m
-+CONFIG_DM_SNAPSHOT=y
-+CONFIG_DM_MIRROR=m
-+CONFIG_DM_ZERO=m
-+CONFIG_DM_MULTIPATH=m
-+CONFIG_DM_MULTIPATH_EMC=m
++# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
-+CONFIG_FUSION=y
-+CONFIG_FUSION_SPI=y
-+# CONFIG_FUSION_FC is not set
-+CONFIG_FUSION_SAS=y
-+CONFIG_FUSION_MAX_SGE=128
-+# CONFIG_FUSION_CTL is not set
++# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
-+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
-+# CONFIG_I2O is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
-+CONFIG_DUMMY=y
++# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
-+CONFIG_TUN=y
-+
-+#
-+# ARCnet devices
-+#
-+CONFIG_ARCNET=y
-+# CONFIG_ARCNET_1201 is not set
-+# CONFIG_ARCNET_1051 is not set
-+# CONFIG_ARCNET_RAW is not set
-+# CONFIG_ARCNET_CAP is not set
-+# CONFIG_ARCNET_COM90xx is not set
-+# CONFIG_ARCNET_COM90xxIO is not set
-+# CONFIG_ARCNET_RIM_I is not set
-+# CONFIG_ARCNET_COM20020 is not set
++# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
-+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+
-+#
-+# Tulip family network device support
-+#
-+CONFIG_NET_TULIP=y
-+# CONFIG_DE2104X is not set
-+CONFIG_TULIP=y
-+CONFIG_TULIP_MWI=y
-+CONFIG_TULIP_MMIO=y
-+CONFIG_TULIP_NAPI=y
-+CONFIG_TULIP_NAPI_HW_MITIGATION=y
-+# CONFIG_DE4X5 is not set
-+# CONFIG_WINBOND_840 is not set
-+# CONFIG_DM9102 is not set
-+# CONFIG_ULI526X is not set
-+# CONFIG_HP100 is not set
-+CONFIG_NET_PCI=y
-+# CONFIG_PCNET32 is not set
-+# CONFIG_AMD8111_ETH is not set
-+# CONFIG_ADAPTEC_STARFIRE is not set
-+# CONFIG_B44 is not set
-+# CONFIG_FORCEDETH is not set
-+# CONFIG_DGRS is not set
-+CONFIG_EEPRO100=y
-+CONFIG_E100=y
-+# CONFIG_FEALNX is not set
-+# CONFIG_NATSEMI is not set
-+# CONFIG_NE2K_PCI is not set
-+# CONFIG_8139CP is not set
-+# CONFIG_8139TOO is not set
-+# CONFIG_SIS900 is not set
-+# CONFIG_EPIC100 is not set
-+# CONFIG_SUNDANCE is not set
-+# CONFIG_VIA_RHINE is not set
++# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+CONFIG_E1000=y
-+# CONFIG_E1000_NAPI is not set
-+# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+CONFIG_TIGON3=y
-+# CONFIG_BNX2 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
+
+#
+# Token Ring devices
+#
-+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
@@ -65545,32 +66479,17 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+# Wan interfaces
+#
+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
-+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
-+CONFIG_NETCONSOLE=y
-+CONFIG_NETPOLL=y
-+# CONFIG_NETPOLL_RX is not set
-+# CONFIG_NETPOLL_TRAP is not set
-+CONFIG_NET_POLL_CONTROLLER=y
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
-+CONFIG_ISDN=m
-+
-+#
-+# Old ISDN4Linux
-+#
-+# CONFIG_ISDN_I4L is not set
-+
-+#
-+# CAPI subsystem
-+#
-+# CONFIG_ISDN_CAPI is not set
++# CONFIG_ISDN is not set
+
+#
+# Telephony Support
@@ -65586,12 +66505,12 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
-+CONFIG_INPUT_MOUSEDEV_PSAUX=y
++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-+CONFIG_INPUT_JOYDEV=y
++# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
-+CONFIG_INPUT_EVDEV=y
++# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
@@ -65603,10 +66522,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
-+CONFIG_INPUT_MOUSE=y
-+CONFIG_MOUSE_PS2=y
-+# CONFIG_MOUSE_SERIAL is not set
-+# CONFIG_MOUSE_VSXXXAA is not set
++# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
@@ -65616,15 +66532,11 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
-+# CONFIG_SERIO_SERPORT is not set
-+# CONFIG_SERIO_PCIPS2 is not set
++CONFIG_SERIO_SERPORT=y
++# CONFIG_SERIO_CT82C710 is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
-+CONFIG_GAMEPORT=y
-+# CONFIG_GAMEPORT_NS558 is not set
-+# CONFIG_GAMEPORT_L4 is not set
-+# CONFIG_GAMEPORT_EMU10K1 is not set
-+# CONFIG_GAMEPORT_FM801 is not set
++# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
@@ -65633,23 +66545,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
-+CONFIG_SERIAL_NONSTANDARD=y
-+# CONFIG_COMPUTONE is not set
-+# CONFIG_ROCKETPORT is not set
-+# CONFIG_CYCLADES is not set
-+# CONFIG_DIGIEPCA is not set
-+# CONFIG_MOXA_INTELLIO is not set
-+# CONFIG_MOXA_SMARTIO is not set
-+# CONFIG_ISI is not set
-+# CONFIG_SYNCLINKMP is not set
-+# CONFIG_SYNCLINK_GT is not set
-+# CONFIG_N_HDLC is not set
-+# CONFIG_SPECIALIX is not set
-+# CONFIG_SX is not set
-+# CONFIG_RIO is not set
-+# CONFIG_STALDRV is not set
-+# CONFIG_SGI_SNSC is not set
-+# CONFIG_SGI_TIOCX is not set
++# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
@@ -65658,8 +66554,6 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+#
+# Non-8250 serial port support
+#
-+# CONFIG_SERIAL_SGI_L1_CONSOLE is not set
-+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
@@ -65673,33 +66567,20 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
-+# CONFIG_HW_RANDOM is not set
-+CONFIG_EFI_RTC=y
++CONFIG_HW_RANDOM=y
++# CONFIG_NVRAM is not set
++# CONFIG_RTC is not set
++# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
-+CONFIG_AGP=y
-+# CONFIG_AGP_SIS is not set
-+# CONFIG_AGP_VIA is not set
-+CONFIG_AGP_I460=y
-+# CONFIG_AGP_HP_ZX1 is not set
-+# CONFIG_AGP_SGI_TIOCA is not set
-+CONFIG_DRM=y
-+# CONFIG_DRM_TDFX is not set
-+# CONFIG_DRM_R128 is not set
-+# CONFIG_DRM_RADEON is not set
-+# CONFIG_DRM_MGA is not set
-+# CONFIG_DRM_SIS is not set
-+# CONFIG_DRM_VIA is not set
-+# CONFIG_DRM_SAVAGE is not set
++# CONFIG_MWAVE is not set
++# CONFIG_PC8736x_GPIO is not set
+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_HPET is not set
+# CONFIG_HANGCHECK_TIMER is not set
-+# CONFIG_MMTIMER is not set
+
+#
+# TPM devices
@@ -65710,55 +66591,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+#
+# I2C support
+#
-+CONFIG_I2C=y
-+CONFIG_I2C_CHARDEV=y
-+
-+#
-+# I2C Algorithms
-+#
-+CONFIG_I2C_ALGOBIT=y
-+CONFIG_I2C_ALGOPCF=y
-+# CONFIG_I2C_ALGOPCA is not set
-+
-+#
-+# I2C Hardware Bus support
-+#
-+# CONFIG_I2C_ALI1535 is not set
-+# CONFIG_I2C_ALI1563 is not set
-+# CONFIG_I2C_ALI15X3 is not set
-+# CONFIG_I2C_AMD756 is not set
-+# CONFIG_I2C_AMD8111 is not set
-+# CONFIG_I2C_I801 is not set
-+# CONFIG_I2C_I810 is not set
-+# CONFIG_I2C_PIIX4 is not set
-+# CONFIG_I2C_NFORCE2 is not set
-+# CONFIG_I2C_OCORES is not set
-+# CONFIG_I2C_PARPORT_LIGHT is not set
-+# CONFIG_I2C_PROSAVAGE is not set
-+# CONFIG_I2C_SAVAGE4 is not set
-+# CONFIG_I2C_SIS5595 is not set
-+# CONFIG_I2C_SIS630 is not set
-+# CONFIG_I2C_SIS96X is not set
-+# CONFIG_I2C_STUB is not set
-+# CONFIG_I2C_VIA is not set
-+# CONFIG_I2C_VIAPRO is not set
-+# CONFIG_I2C_VOODOO3 is not set
-+# CONFIG_I2C_PCA_ISA is not set
-+
-+#
-+# Miscellaneous I2C Chip support
-+#
-+# CONFIG_SENSORS_DS1337 is not set
-+# CONFIG_SENSORS_DS1374 is not set
-+# CONFIG_SENSORS_EEPROM is not set
-+# CONFIG_SENSORS_PCF8574 is not set
-+# CONFIG_SENSORS_PCA9539 is not set
-+# CONFIG_SENSORS_PCF8591 is not set
-+# CONFIG_SENSORS_MAX6875 is not set
-+# CONFIG_I2C_DEBUG_CORE is not set
-+# CONFIG_I2C_DEBUG_ALGO is not set
-+# CONFIG_I2C_DEBUG_BUS is not set
-+# CONFIG_I2C_DEBUG_CHIP is not set
++# CONFIG_I2C is not set
+
+#
+# SPI support
@@ -65773,48 +66606,8 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+#
+# Hardware Monitoring support
+#
-+CONFIG_HWMON=y
++# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_ABITUGURU is not set
-+# CONFIG_SENSORS_ADM1021 is not set
-+# CONFIG_SENSORS_ADM1025 is not set
-+# CONFIG_SENSORS_ADM1026 is not set
-+# CONFIG_SENSORS_ADM1031 is not set
-+# CONFIG_SENSORS_ADM9240 is not set
-+# CONFIG_SENSORS_ASB100 is not set
-+# CONFIG_SENSORS_ATXP1 is not set
-+# CONFIG_SENSORS_DS1621 is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_FSCHER is not set
-+# CONFIG_SENSORS_FSCPOS is not set
-+# CONFIG_SENSORS_GL518SM is not set
-+# CONFIG_SENSORS_GL520SM is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_LM63 is not set
-+# CONFIG_SENSORS_LM75 is not set
-+# CONFIG_SENSORS_LM77 is not set
-+# CONFIG_SENSORS_LM78 is not set
-+# CONFIG_SENSORS_LM80 is not set
-+# CONFIG_SENSORS_LM83 is not set
-+# CONFIG_SENSORS_LM85 is not set
-+# CONFIG_SENSORS_LM87 is not set
-+# CONFIG_SENSORS_LM90 is not set
-+# CONFIG_SENSORS_LM92 is not set
-+# CONFIG_SENSORS_MAX1619 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_SIS5595 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47M192 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_VIA686A is not set
-+# CONFIG_SENSORS_VT8231 is not set
-+# CONFIG_SENSORS_W83781D is not set
-+# CONFIG_SENSORS_W83791D is not set
-+# CONFIG_SENSORS_W83792D is not set
-+# CONFIG_SENSORS_W83L785TS is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
@@ -65823,115 +66616,18 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+#
+# Multimedia devices
+#
-+CONFIG_VIDEO_DEV=y
-+CONFIG_VIDEO_V4L1=y
-+CONFIG_VIDEO_V4L1_COMPAT=y
-+CONFIG_VIDEO_V4L2=y
-+
-+#
-+# Video Capture Adapters
-+#
-+
-+#
-+# Video Capture Adapters
-+#
-+# CONFIG_VIDEO_ADV_DEBUG is not set
-+# CONFIG_VIDEO_VIVI is not set
-+# CONFIG_VIDEO_BT848 is not set
-+# CONFIG_VIDEO_CPIA is not set
-+# CONFIG_VIDEO_CPIA2 is not set
-+# CONFIG_VIDEO_SAA5246A is not set
-+# CONFIG_VIDEO_SAA5249 is not set
-+# CONFIG_TUNER_3036 is not set
-+# CONFIG_VIDEO_STRADIS is not set
-+# CONFIG_VIDEO_ZORAN is not set
-+# CONFIG_VIDEO_SAA7134 is not set
-+# CONFIG_VIDEO_MXB is not set
-+# CONFIG_VIDEO_DPC is not set
-+# CONFIG_VIDEO_HEXIUM_ORION is not set
-+# CONFIG_VIDEO_HEXIUM_GEMINI is not set
-+# CONFIG_VIDEO_CX88 is not set
-+
-+#
-+# Encoders and Decoders
-+#
-+# CONFIG_VIDEO_MSP3400 is not set
-+# CONFIG_VIDEO_CS53L32A is not set
-+# CONFIG_VIDEO_TLV320AIC23B is not set
-+# CONFIG_VIDEO_WM8775 is not set
-+# CONFIG_VIDEO_WM8739 is not set
-+# CONFIG_VIDEO_CX2341X is not set
-+# CONFIG_VIDEO_CX25840 is not set
-+# CONFIG_VIDEO_SAA711X is not set
-+# CONFIG_VIDEO_SAA7127 is not set
-+# CONFIG_VIDEO_UPD64031A is not set
-+# CONFIG_VIDEO_UPD64083 is not set
-+
-+#
-+# V4L USB devices
-+#
-+# CONFIG_VIDEO_PVRUSB2 is not set
-+# CONFIG_VIDEO_EM28XX is not set
-+# CONFIG_USB_VICAM is not set
-+# CONFIG_USB_IBMCAM is not set
-+# CONFIG_USB_KONICAWC is not set
-+# CONFIG_USB_QUICKCAM_MESSENGER is not set
-+# CONFIG_USB_ET61X251 is not set
-+# CONFIG_VIDEO_OVCAMCHIP is not set
-+# CONFIG_USB_W9968CF is not set
-+# CONFIG_USB_OV511 is not set
-+# CONFIG_USB_SE401 is not set
-+# CONFIG_USB_SN9C102 is not set
-+# CONFIG_USB_STV680 is not set
-+# CONFIG_USB_ZC0301 is not set
-+# CONFIG_USB_PWC is not set
-+
-+#
-+# Radio Adapters
-+#
-+# CONFIG_RADIO_GEMTEK_PCI is not set
-+# CONFIG_RADIO_MAXIRADIO is not set
-+# CONFIG_RADIO_MAESTRO is not set
-+# CONFIG_USB_DSBR is not set
++# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
-+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_FIRMWARE_EDID=y
-+CONFIG_FB=y
-+CONFIG_FB_CFB_FILLRECT=y
-+CONFIG_FB_CFB_COPYAREA=y
-+CONFIG_FB_CFB_IMAGEBLIT=y
-+# CONFIG_FB_MACMODES is not set
-+# CONFIG_FB_BACKLIGHT is not set
-+CONFIG_FB_MODE_HELPERS=y
-+# CONFIG_FB_TILEBLITTING is not set
-+# CONFIG_FB_CIRRUS is not set
-+# CONFIG_FB_PM2 is not set
-+# CONFIG_FB_CYBER2000 is not set
-+# CONFIG_FB_ASILIANT is not set
-+# CONFIG_FB_IMSTT is not set
-+# CONFIG_FB_S1D13XXX is not set
-+# CONFIG_FB_NVIDIA is not set
-+# CONFIG_FB_RIVA is not set
-+# CONFIG_FB_MATROX is not set
-+# CONFIG_FB_RADEON is not set
-+# CONFIG_FB_ATY128 is not set
-+# CONFIG_FB_ATY is not set
-+# CONFIG_FB_SAVAGE is not set
-+# CONFIG_FB_SIS is not set
-+# CONFIG_FB_NEOMAGIC is not set
-+# CONFIG_FB_KYRO is not set
-+# CONFIG_FB_3DFX is not set
-+# CONFIG_FB_VOODOO1 is not set
-+# CONFIG_FB_TRIDENT is not set
-+# CONFIG_FB_VIRTUAL is not set
++# CONFIG_FB is not set
+
+#
+# Console display driver support
@@ -65939,268 +66635,25 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+CONFIG_DUMMY_CONSOLE=y
-+CONFIG_FRAMEBUFFER_CONSOLE=y
-+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-+# CONFIG_FONTS is not set
-+CONFIG_FONT_8x8=y
-+CONFIG_FONT_8x16=y
-+
-+#
-+# Logo configuration
-+#
-+CONFIG_LOGO=y
-+# CONFIG_LOGO_LINUX_MONO is not set
-+# CONFIG_LOGO_LINUX_VGA16 is not set
-+CONFIG_LOGO_LINUX_CLUT224=y
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Sound
+#
-+CONFIG_SOUND=y
-+
-+#
-+# Advanced Linux Sound Architecture
-+#
-+CONFIG_SND=y
-+CONFIG_SND_TIMER=y
-+CONFIG_SND_PCM=y
-+CONFIG_SND_HWDEP=y
-+CONFIG_SND_RAWMIDI=y
-+CONFIG_SND_SEQUENCER=y
-+CONFIG_SND_SEQ_DUMMY=y
-+CONFIG_SND_OSSEMUL=y
-+CONFIG_SND_MIXER_OSS=y
-+CONFIG_SND_PCM_OSS=y
-+CONFIG_SND_PCM_OSS_PLUGINS=y
-+CONFIG_SND_SEQUENCER_OSS=y
-+# CONFIG_SND_DYNAMIC_MINORS is not set
-+CONFIG_SND_SUPPORT_OLD_API=y
-+CONFIG_SND_VERBOSE_PROCFS=y
-+# CONFIG_SND_VERBOSE_PRINTK is not set
-+# CONFIG_SND_DEBUG is not set
-+
-+#
-+# Generic devices
-+#
-+CONFIG_SND_MPU401_UART=y
-+CONFIG_SND_OPL3_LIB=y
-+CONFIG_SND_AC97_CODEC=y
-+CONFIG_SND_AC97_BUS=y
-+CONFIG_SND_DUMMY=y
-+CONFIG_SND_VIRMIDI=y
-+# CONFIG_SND_MTPAV is not set
-+CONFIG_SND_SERIAL_U16550=y
-+CONFIG_SND_MPU401=y
-+
-+#
-+# PCI devices
-+#
-+# CONFIG_SND_AD1889 is not set
-+# CONFIG_SND_ALS300 is not set
-+# CONFIG_SND_ALI5451 is not set
-+CONFIG_SND_ATIIXP=y
-+# CONFIG_SND_ATIIXP_MODEM is not set
-+# CONFIG_SND_AU8810 is not set
-+# CONFIG_SND_AU8820 is not set
-+# CONFIG_SND_AU8830 is not set
-+# CONFIG_SND_AZT3328 is not set
-+# CONFIG_SND_BT87X is not set
-+# CONFIG_SND_CA0106 is not set
-+# CONFIG_SND_CMIPCI is not set
-+# CONFIG_SND_CS4281 is not set
-+# CONFIG_SND_CS46XX is not set
-+# CONFIG_SND_DARLA20 is not set
-+# CONFIG_SND_GINA20 is not set
-+# CONFIG_SND_LAYLA20 is not set
-+# CONFIG_SND_DARLA24 is not set
-+# CONFIG_SND_GINA24 is not set
-+# CONFIG_SND_LAYLA24 is not set
-+# CONFIG_SND_MONA is not set
-+# CONFIG_SND_MIA is not set
-+# CONFIG_SND_ECHO3G is not set
-+# CONFIG_SND_INDIGO is not set
-+# CONFIG_SND_INDIGOIO is not set
-+# CONFIG_SND_INDIGODJ is not set
-+# CONFIG_SND_EMU10K1 is not set
-+# CONFIG_SND_EMU10K1X is not set
-+# CONFIG_SND_ENS1370 is not set
-+# CONFIG_SND_ENS1371 is not set
-+# CONFIG_SND_ES1938 is not set
-+# CONFIG_SND_ES1968 is not set
-+CONFIG_SND_FM801=y
-+# CONFIG_SND_FM801_TEA575X_BOOL is not set
-+# CONFIG_SND_HDA_INTEL is not set
-+# CONFIG_SND_HDSP is not set
-+# CONFIG_SND_HDSPM is not set
-+# CONFIG_SND_ICE1712 is not set
-+# CONFIG_SND_ICE1724 is not set
-+# CONFIG_SND_INTEL8X0 is not set
-+# CONFIG_SND_INTEL8X0M is not set
-+# CONFIG_SND_KORG1212 is not set
-+# CONFIG_SND_MAESTRO3 is not set
-+# CONFIG_SND_MIXART is not set
-+# CONFIG_SND_NM256 is not set
-+# CONFIG_SND_PCXHR is not set
-+# CONFIG_SND_RIPTIDE is not set
-+# CONFIG_SND_RME32 is not set
-+# CONFIG_SND_RME96 is not set
-+# CONFIG_SND_RME9652 is not set
-+# CONFIG_SND_SONICVIBES is not set
-+# CONFIG_SND_TRIDENT is not set
-+# CONFIG_SND_VIA82XX is not set
-+# CONFIG_SND_VIA82XX_MODEM is not set
-+# CONFIG_SND_VX222 is not set
-+# CONFIG_SND_YMFPCI is not set
-+
-+#
-+# USB devices
-+#
-+# CONFIG_SND_USB_AUDIO is not set
-+
-+#
-+# Open Sound System
-+#
-+CONFIG_SOUND_PRIME=y
-+# CONFIG_OSS_OBSOLETE_DRIVER is not set
-+# CONFIG_SOUND_BT878 is not set
-+# CONFIG_SOUND_ES1371 is not set
-+# CONFIG_SOUND_ICH is not set
-+# CONFIG_SOUND_TRIDENT is not set
-+# CONFIG_SOUND_MSNDCLAS is not set
-+# CONFIG_SOUND_MSNDPIN is not set
-+# CONFIG_SOUND_VIA82CXXX is not set
-+# CONFIG_SOUND_TVMIXER is not set
++# CONFIG_SOUND is not set
+
+#
+# USB support
+#
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+CONFIG_USB=y
-+# CONFIG_USB_DEBUG is not set
-+
-+#
-+# Miscellaneous USB options
-+#
-+CONFIG_USB_DEVICEFS=y
-+CONFIG_USB_BANDWIDTH=y
-+# CONFIG_USB_DYNAMIC_MINORS is not set
-+# CONFIG_USB_SUSPEND is not set
-+# CONFIG_USB_OTG is not set
-+
-+#
-+# USB Host Controller Drivers
-+#
-+CONFIG_USB_EHCI_HCD=y
-+# CONFIG_USB_EHCI_SPLIT_ISO is not set
-+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
-+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
-+# CONFIG_USB_ISP116X_HCD is not set
-+CONFIG_USB_OHCI_HCD=y
-+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-+CONFIG_USB_UHCI_HCD=y
-+# CONFIG_USB_SL811_HCD is not set
-+
-+#
-+# USB Device Class drivers
-+#
-+# CONFIG_USB_ACM is not set
-+# CONFIG_USB_PRINTER is not set
++# CONFIG_USB_ARCH_HAS_HCD is not set
++# CONFIG_USB_ARCH_HAS_OHCI is not set
++# CONFIG_USB_ARCH_HAS_EHCI is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
-+# may also be needed; see USB_STORAGE Help for more information
-+#
-+CONFIG_USB_STORAGE=y
-+# CONFIG_USB_STORAGE_DEBUG is not set
-+# CONFIG_USB_STORAGE_DATAFAB is not set
-+# CONFIG_USB_STORAGE_FREECOM is not set
-+# CONFIG_USB_STORAGE_ISD200 is not set
-+# CONFIG_USB_STORAGE_DPCM is not set
-+# CONFIG_USB_STORAGE_USBAT is not set
-+# CONFIG_USB_STORAGE_SDDR09 is not set
-+# CONFIG_USB_STORAGE_SDDR55 is not set
-+# CONFIG_USB_STORAGE_JUMPSHOT is not set
-+# CONFIG_USB_STORAGE_ALAUDA is not set
-+# CONFIG_USB_LIBUSUAL is not set
-+
-+#
-+# USB Input Devices
-+#
-+CONFIG_USB_HID=y
-+CONFIG_USB_HIDINPUT=y
-+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-+# CONFIG_HID_FF is not set
-+CONFIG_USB_HIDDEV=y
-+# CONFIG_USB_AIPTEK is not set
-+# CONFIG_USB_WACOM is not set
-+# CONFIG_USB_ACECAD is not set
-+# CONFIG_USB_KBTAB is not set
-+# CONFIG_USB_POWERMATE is not set
-+# CONFIG_USB_TOUCHSCREEN is not set
-+# CONFIG_USB_YEALINK is not set
-+# CONFIG_USB_XPAD is not set
-+# CONFIG_USB_ATI_REMOTE is not set
-+# CONFIG_USB_ATI_REMOTE2 is not set
-+# CONFIG_USB_KEYSPAN_REMOTE is not set
-+# CONFIG_USB_APPLETOUCH is not set
-+
-+#
-+# USB Imaging devices
-+#
-+# CONFIG_USB_MDC800 is not set
-+# CONFIG_USB_MICROTEK is not set
-+
-+#
-+# USB Network Adapters
-+#
-+# CONFIG_USB_CATC is not set
-+# CONFIG_USB_KAWETH is not set
-+# CONFIG_USB_PEGASUS is not set
-+# CONFIG_USB_RTL8150 is not set
-+# CONFIG_USB_USBNET is not set
-+CONFIG_USB_MON=y
-+
-+#
-+# USB port drivers
-+#
-+
-+#
-+# USB Serial Converter support
-+#
-+# CONFIG_USB_SERIAL is not set
-+
-+#
-+# USB Miscellaneous drivers
-+#
-+# CONFIG_USB_EMI62 is not set
-+# CONFIG_USB_EMI26 is not set
-+# CONFIG_USB_AUERSWALD is not set
-+# CONFIG_USB_RIO500 is not set
-+# CONFIG_USB_LEGOTOWER is not set
-+# CONFIG_USB_LCD is not set
-+# CONFIG_USB_LED is not set
-+# CONFIG_USB_CYPRESS_CY7C63 is not set
-+# CONFIG_USB_CYTHERM is not set
-+# CONFIG_USB_PHIDGETKIT is not set
-+# CONFIG_USB_PHIDGETSERVO is not set
-+# CONFIG_USB_IDMOUSE is not set
-+# CONFIG_USB_APPLEDISPLAY is not set
-+# CONFIG_USB_SISUSBVGA is not set
-+# CONFIG_USB_LD is not set
-+# CONFIG_USB_TEST is not set
-+
-+#
-+# USB DSL modem support
-+#
-+
-+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
@@ -66226,11 +66679,11 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+#
+# InfiniBand support
+#
-+# CONFIG_INFINIBAND is not set
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
++# CONFIG_EDAC is not set
+
+#
+# Real Time Clock
@@ -66251,33 +66704,32 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+#
+
+#
++# Firmware Drivers
++#
++# CONFIG_EDD is not set
++# CONFIG_DELL_RBU is not set
++# CONFIG_DCDBAS is not set
++
++#
+# File systems
+#
+CONFIG_EXT2_FS=y
-+CONFIG_EXT2_FS_XATTR=y
-+CONFIG_EXT2_FS_POSIX_ACL=y
-+CONFIG_EXT2_FS_SECURITY=y
++# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
-+CONFIG_EXT3_FS_POSIX_ACL=y
-+CONFIG_EXT3_FS_SECURITY=y
++# CONFIG_EXT3_FS_POSIX_ACL is not set
++# CONFIG_EXT3_FS_SECURITY is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=y
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
-+CONFIG_REISERFS_FS_XATTR=y
-+CONFIG_REISERFS_FS_POSIX_ACL=y
-+CONFIG_REISERFS_FS_SECURITY=y
++# CONFIG_REISERFS_FS_XATTR is not set
+# CONFIG_JFS_FS is not set
-+CONFIG_FS_POSIX_ACL=y
-+CONFIG_XFS_FS=y
-+# CONFIG_XFS_QUOTA is not set
-+# CONFIG_XFS_SECURITY is not set
-+# CONFIG_XFS_POSIX_ACL is not set
-+# CONFIG_XFS_RT is not set
++# CONFIG_FS_POSIX_ACL is not set
++# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
@@ -66294,16 +66746,16 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+#
+CONFIG_ISO9660_FS=y
+CONFIG_JOLIET=y
-+# CONFIG_ZISOFS is not set
-+CONFIG_UDF_FS=y
-+CONFIG_UDF_NLS=y
++CONFIG_ZISOFS=y
++CONFIG_ZISOFS_FS=y
++# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
-+CONFIG_FAT_FS=y
-+CONFIG_MSDOS_FS=y
-+CONFIG_VFAT_FS=y
++CONFIG_FAT_FS=m
++CONFIG_MSDOS_FS=m
++CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
@@ -66313,7 +66765,6 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_IOMEM_MACHINE=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
@@ -66330,7 +66781,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
-+# CONFIG_CRAMFS is not set
++CONFIG_CRAMFS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
@@ -66343,31 +66794,18 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
-+CONFIG_NFS_V4=y
-+CONFIG_NFS_DIRECTIO=y
-+CONFIG_NFSD=y
-+CONFIG_NFSD_V3=y
-+# CONFIG_NFSD_V3_ACL is not set
-+CONFIG_NFSD_V4=y
-+CONFIG_NFSD_TCP=y
++# CONFIG_NFS_V4 is not set
++# CONFIG_NFS_DIRECTIO is not set
++# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
-+CONFIG_EXPORTFS=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
-+CONFIG_SUNRPC_GSS=y
-+CONFIG_RPCSEC_GSS_KRB5=y
++# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+CONFIG_SMB_FS=y
-+CONFIG_SMB_NLS_DEFAULT=y
-+CONFIG_SMB_NLS_REMOTE="cp437"
-+CONFIG_CIFS=y
-+# CONFIG_CIFS_STATS is not set
-+# CONFIG_CIFS_WEAK_PW_HASH is not set
-+# CONFIG_CIFS_XATTR is not set
-+# CONFIG_CIFS_DEBUG2 is not set
-+# CONFIG_CIFS_EXPERIMENTAL is not set
++# CONFIG_SMB_FS is not set
++# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
@@ -66376,23 +66814,8 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+#
+# Partition Types
+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+# CONFIG_OSF_PARTITION is not set
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+# CONFIG_MAC_PARTITION is not set
++# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_BSD_DISKLABEL is not set
-+# CONFIG_MINIX_SUBPARTITION is not set
-+# CONFIG_SOLARIS_X86_PARTITION is not set
-+# CONFIG_UNIXWARE_DISKLABEL is not set
-+# CONFIG_LDM_PARTITION is not set
-+CONFIG_SGI_PARTITION=y
-+# CONFIG_ULTRIX_PARTITION is not set
-+# CONFIG_SUN_PARTITION is not set
-+# CONFIG_KARMA_PARTITION is not set
-+CONFIG_EFI_PARTITION=y
+
+#
+# Native Language Support
@@ -66400,63 +66823,43 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
-+CONFIG_NLS_CODEPAGE_737=y
-+CONFIG_NLS_CODEPAGE_775=y
-+CONFIG_NLS_CODEPAGE_850=y
-+CONFIG_NLS_CODEPAGE_852=y
-+CONFIG_NLS_CODEPAGE_855=y
-+CONFIG_NLS_CODEPAGE_857=y
-+CONFIG_NLS_CODEPAGE_860=y
-+CONFIG_NLS_CODEPAGE_861=y
-+CONFIG_NLS_CODEPAGE_862=y
-+CONFIG_NLS_CODEPAGE_863=y
-+CONFIG_NLS_CODEPAGE_864=y
-+CONFIG_NLS_CODEPAGE_865=y
-+CONFIG_NLS_CODEPAGE_866=y
-+CONFIG_NLS_CODEPAGE_869=y
-+CONFIG_NLS_CODEPAGE_936=y
-+CONFIG_NLS_CODEPAGE_950=y
-+CONFIG_NLS_CODEPAGE_932=y
-+CONFIG_NLS_CODEPAGE_949=y
-+CONFIG_NLS_CODEPAGE_874=y
-+CONFIG_NLS_ISO8859_8=y
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++# CONFIG_NLS_CODEPAGE_850 is not set
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
-+CONFIG_NLS_CODEPAGE_1251=y
++# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
-+CONFIG_NLS_ISO8859_2=y
-+CONFIG_NLS_ISO8859_3=y
-+CONFIG_NLS_ISO8859_4=y
-+CONFIG_NLS_ISO8859_5=y
-+CONFIG_NLS_ISO8859_6=y
-+CONFIG_NLS_ISO8859_7=y
-+CONFIG_NLS_ISO8859_9=y
-+CONFIG_NLS_ISO8859_13=y
-+CONFIG_NLS_ISO8859_14=y
-+CONFIG_NLS_ISO8859_15=y
-+CONFIG_NLS_KOI8_R=y
-+CONFIG_NLS_KOI8_U=y
-+CONFIG_NLS_UTF8=y
-+
-+#
-+# Library routines
-+#
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+CONFIG_CRC32=y
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_PLIST=y
-+CONFIG_GENERIC_HARDIRQS=y
-+CONFIG_GENERIC_IRQ_PROBE=y
-+CONFIG_GENERIC_PENDING_IRQ=y
-+CONFIG_IRQ_PER_CPU=y
-+
-+#
-+# HP Simulator drivers
-+#
-+# CONFIG_HP_SIMETH is not set
-+# CONFIG_HP_SIMSERIAL is not set
-+# CONFIG_HP_SIMSCSI is not set
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++# CONFIG_NLS_UTF8 is not set
+
+#
+# Instrumentation Support
@@ -66467,33 +66870,35 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+#
+# Kernel hacking
+#
++CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_UNUSED_SYMBOLS=y
+CONFIG_DEBUG_KERNEL=y
-+CONFIG_LOG_BUF_SHIFT=20
++CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
-+CONFIG_DEBUG_MUTEXES=y
++# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RWSEMS is not set
++# CONFIG_DEBUG_LOCK_ALLOC is not set
++# CONFIG_PROVE_LOCKING is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_INFO is not set
++CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
++CONFIG_FRAME_POINTER=y
++# CONFIG_UNWIND_INFO is not set
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
-+CONFIG_IA64_GRANULE_16MB=y
-+# CONFIG_IA64_GRANULE_64MB is not set
-+CONFIG_IA64_PRINT_HAZARDS=y
-+# CONFIG_DISABLE_VHPT is not set
-+# CONFIG_IA64_DEBUG_CMPXCHG is not set
-+# CONFIG_IA64_DEBUG_IRQ is not set
++# CONFIG_DEBUG_RODATA is not set
++# CONFIG_DEBUG_STACKOVERFLOW is not set
++# CONFIG_DEBUG_STACK_USAGE is not set
+
+#
+# Security options
@@ -66508,17 +66913,18 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
++CONFIG_CRYPTO_MD5=m
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
-+CONFIG_CRYPTO_DES=y
++# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
++# CONFIG_CRYPTO_AES_X86_64 is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
@@ -66527,42 +66933,30 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
++CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
-+# CONFIG_XEN_SMPBOOT is not set
-+# CONFIG_XEN_DEVMEM is not set
++CONFIG_XEN=y
+CONFIG_XEN_INTERFACE_VERSION=0x00030207
+
+#
+# XEN
+#
-+CONFIG_XEN_PRIVILEGED_GUEST=y
-+# CONFIG_XEN_UNPRIVILEGED_GUEST is not set
++# CONFIG_XEN_PRIVILEGED_GUEST is not set
++CONFIG_XEN_UNPRIVILEGED_GUEST=y
+CONFIG_XEN_PRIVCMD=y
+CONFIG_XEN_XENBUS_DEV=y
-+CONFIG_XEN_BACKEND=y
-+CONFIG_XEN_BLKDEV_BACKEND=y
-+CONFIG_XEN_BLKDEV_TAP=y
-+CONFIG_XEN_NETDEV_BACKEND=y
-+# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
-+# CONFIG_XEN_NETDEV_LOOPBACK is not set
-+CONFIG_XEN_PCIDEV_BACKEND=y
-+# CONFIG_XEN_PCIDEV_BACKEND_VPCI is not set
-+# CONFIG_XEN_PCIDEV_BACKEND_PASS is not set
-+# CONFIG_XEN_PCIDEV_BACKEND_SLOT is not set
-+CONFIG_XEN_PCIDEV_BACKEND_CONTROLLER=y
-+# CONFIG_XEN_PCIDEV_BE_DEBUG is not set
-+CONFIG_XEN_TPMDEV_BACKEND=m
++# CONFIG_XEN_BACKEND is not set
++# CONFIG_XEN_NETDEV_ACCEL_SFC_UTIL is not set
+CONFIG_XEN_BLKDEV_FRONTEND=y
+CONFIG_XEN_NETDEV_FRONTEND=y
++CONFIG_XEN_SCSI_FRONTEND=m
+CONFIG_XEN_GRANT_DEV=y
-+CONFIG_XEN_FRAMEBUFFER=y
-+CONFIG_XEN_KEYBOARD=y
-+# CONFIG_XEN_SCRUB_PAGES is not set
++# CONFIG_XEN_NETDEV_ACCEL_SFC_FRONTEND is not set
++CONFIG_XEN_SCRUB_PAGES=y
+CONFIG_XEN_DISABLE_SERIAL=y
+CONFIG_XEN_SYSFS=y
+CONFIG_XEN_COMPAT_030002_AND_LATER=y
@@ -66572,12 +66966,23 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_ia64 linux-2.6.18-xen
+CONFIG_XEN_COMPAT=0x030002
+CONFIG_HAVE_IRQ_IGNORE_UNHANDLED=y
+CONFIG_NO_IDLE_HZ=y
++CONFIG_XEN_SMPBOOT=y
+CONFIG_XEN_BALLOON=y
-+CONFIG_XEN_XENCOMM=y
-diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_x86_32 linux-2.6.18-xen-3.2.0/buildconfigs/linux-defconfig_xen_x86_32
---- linux-2.6.18.8/buildconfigs/linux-defconfig_xen_x86_32 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/buildconfigs/linux-defconfig_xen_x86_32 2008-02-15 16:21:56.000000000 -0800
-@@ -0,0 +1,3318 @@
++CONFIG_XEN_DEVMEM=y
++
++#
++# Library routines
++#
++# CONFIG_CRC_CCITT is not set
++# CONFIG_CRC16 is not set
++# CONFIG_CRC32 is not set
++CONFIG_LIBCRC32C=m
++CONFIG_ZLIB_INFLATE=y
++CONFIG_PLIST=y
+diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_x86_32 linux-2.6.18-xen-3.3.0/buildconfigs/linux-defconfig_xen_x86_32
+--- linux-2.6.18.8/buildconfigs/linux-defconfig_xen_x86_32 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/buildconfigs/linux-defconfig_xen_x86_32 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,3326 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.18.8
@@ -66834,6 +67239,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_x86_32 linux-2.6.18-x
+CONFIG_XEN_PCIDEV_FRONTEND=y
+# CONFIG_XEN_PCIDEV_FE_DEBUG is not set
+# CONFIG_PCIEPORTBUS is not set
++# CONFIG_PCI_MSI is not set
+# CONFIG_PCI_DEBUG is not set
+CONFIG_ISA_DMA_API=y
+CONFIG_SCx200=m
@@ -67856,6 +68262,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_x86_32 linux-2.6.18-x
+CONFIG_I2O=m
+CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
+CONFIG_I2O_EXT_ADAPTEC=y
++CONFIG_I2O_EXT_ADAPTEC_DMA64=y
+CONFIG_I2O_CONFIG=m
+CONFIG_I2O_CONFIG_OLD_IOCTL=y
+CONFIG_I2O_BUS=m
@@ -67998,6 +68405,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_x86_32 linux-2.6.18-x
+CONFIG_S2IO=m
+CONFIG_S2IO_NAPI=y
+CONFIG_MYRI10GE=m
++# CONFIG_SFC is not set
+
+#
+# Token Ring devices
@@ -69829,7 +70237,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_x86_32 linux-2.6.18-x
+#
+# CONFIG_CRYPTO_DEV_PADLOCK is not set
+CONFIG_XEN=y
-+CONFIG_XEN_INTERFACE_VERSION=0x00030206
++CONFIG_XEN_INTERFACE_VERSION=0x00030207
+
+#
+# XEN
@@ -69843,6 +70251,8 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_x86_32 linux-2.6.18-x
+CONFIG_XEN_BLKDEV_TAP=y
+CONFIG_XEN_NETDEV_BACKEND=y
+# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
++# CONFIG_XEN_NETDEV_ACCEL_SFC_UTIL is not set
++# CONFIG_XEN_NETDEV_ACCEL_SFC_BACKEND is not set
+# CONFIG_XEN_NETDEV_LOOPBACK is not set
+CONFIG_XEN_PCIDEV_BACKEND=m
+CONFIG_XEN_PCIDEV_BACKEND_VPCI=y
@@ -69851,10 +70261,13 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_x86_32 linux-2.6.18-x
+# CONFIG_XEN_PCIDEV_BACKEND_CONTROLLER is not set
+# CONFIG_XEN_PCIDEV_BE_DEBUG is not set
+CONFIG_XEN_TPMDEV_BACKEND=m
++CONFIG_XEN_SCSI_BACKEND=m
+CONFIG_XEN_BLKDEV_FRONTEND=y
+CONFIG_XEN_NETDEV_FRONTEND=y
-+CONFIG_XEN_FRAMEBUFFER=y
++CONFIG_XEN_SCSI_FRONTEND=m
+CONFIG_XEN_GRANT_DEV=y
++# CONFIG_XEN_NETDEV_ACCEL_SFC_FRONTEND is not set
++CONFIG_XEN_FRAMEBUFFER=y
+CONFIG_XEN_KEYBOARD=y
+CONFIG_XEN_SCRUB_PAGES=y
+CONFIG_XEN_DISABLE_SERIAL=y
@@ -69896,14 +70309,14 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_x86_32 linux-2.6.18-x
+CONFIG_X86_NO_TSS=y
+CONFIG_X86_NO_IDT=y
+CONFIG_KTIME_SCALAR=y
-diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_x86_64 linux-2.6.18-xen-3.2.0/buildconfigs/linux-defconfig_xen_x86_64
---- linux-2.6.18.8/buildconfigs/linux-defconfig_xen_x86_64 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/buildconfigs/linux-defconfig_xen_x86_64 2008-02-15 16:21:56.000000000 -0800
-@@ -0,0 +1,3139 @@
+diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_x86_64 linux-2.6.18-xen-3.3.0/buildconfigs/linux-defconfig_xen_x86_64
+--- linux-2.6.18.8/buildconfigs/linux-defconfig_xen_x86_64 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/buildconfigs/linux-defconfig_xen_x86_64 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,3146 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.18.8
-+# Tue Oct 16 09:32:25 2007
++# Mon Feb 18 10:38:24 2008
+#
+CONFIG_X86_64=y
+CONFIG_64BIT=y
@@ -70111,6 +70524,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_x86_64 linux-2.6.18-x
+CONFIG_XEN_PCIDEV_FRONTEND=y
+# CONFIG_XEN_PCIDEV_FE_DEBUG is not set
+# CONFIG_PCIEPORTBUS is not set
++# CONFIG_PCI_MSI is not set
+# CONFIG_PCI_DEBUG is not set
+
+#
@@ -71260,6 +71674,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_x86_64 linux-2.6.18-x
+CONFIG_S2IO=m
+CONFIG_S2IO_NAPI=y
+CONFIG_MYRI10GE=m
++# CONFIG_SFC is not set
+
+#
+# Token Ring devices
@@ -72982,7 +73397,7 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_x86_64 linux-2.6.18-x
+# Hardware crypto devices
+#
+CONFIG_XEN=y
-+CONFIG_XEN_INTERFACE_VERSION=0x00030206
++CONFIG_XEN_INTERFACE_VERSION=0x00030207
+
+#
+# XEN
@@ -72996,6 +73411,8 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_x86_64 linux-2.6.18-x
+CONFIG_XEN_BLKDEV_TAP=y
+CONFIG_XEN_NETDEV_BACKEND=y
+# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
++# CONFIG_XEN_NETDEV_ACCEL_SFC_UTIL is not set
++# CONFIG_XEN_NETDEV_ACCEL_SFC_BACKEND is not set
+# CONFIG_XEN_NETDEV_LOOPBACK is not set
+CONFIG_XEN_PCIDEV_BACKEND=m
+# CONFIG_XEN_PCIDEV_BACKEND_VPCI is not set
@@ -73004,10 +73421,13 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_x86_64 linux-2.6.18-x
+# CONFIG_XEN_PCIDEV_BACKEND_CONTROLLER is not set
+# CONFIG_XEN_PCIDEV_BE_DEBUG is not set
+CONFIG_XEN_TPMDEV_BACKEND=m
++CONFIG_XEN_SCSI_BACKEND=m
+CONFIG_XEN_BLKDEV_FRONTEND=y
+CONFIG_XEN_NETDEV_FRONTEND=y
-+CONFIG_XEN_FRAMEBUFFER=y
++CONFIG_XEN_SCSI_FRONTEND=m
+CONFIG_XEN_GRANT_DEV=y
++# CONFIG_XEN_NETDEV_ACCEL_SFC_FRONTEND is not set
++CONFIG_XEN_FRAMEBUFFER=y
+CONFIG_XEN_KEYBOARD=y
+CONFIG_XEN_SCRUB_PAGES=y
+CONFIG_XEN_DISABLE_SERIAL=y
@@ -73039,20 +73459,191 @@ diff -rpuN linux-2.6.18.8/buildconfigs/linux-defconfig_xen_x86_64 linux-2.6.18-x
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
-diff -rpuN linux-2.6.18.8/drivers/Makefile linux-2.6.18-xen-3.2.0/drivers/Makefile
---- linux-2.6.18.8/drivers/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/Makefile 2008-02-15 16:21:56.000000000 -0800
-@@ -31,6 +31,7 @@ obj-y += base/ block/ misc/ mfd/ net/
- obj-$(CONFIG_NUBUS) += nubus/
- obj-$(CONFIG_ATM) += atm/
- obj-$(CONFIG_PPC_PMAC) += macintosh/
-+obj-$(CONFIG_XEN) += xen/
- obj-$(CONFIG_IDE) += ide/
- obj-$(CONFIG_FC4) += fc4/
- obj-$(CONFIG_SCSI) += scsi/
-diff -rpuN linux-2.6.18.8/drivers/acpi/Kconfig linux-2.6.18-xen-3.2.0/drivers/acpi/Kconfig
---- linux-2.6.18.8/drivers/acpi/Kconfig 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/acpi/Kconfig 2008-02-15 16:21:56.000000000 -0800
+diff -rpuN linux-2.6.18.8/Documentation/i2c/busses/i2c-i801 linux-2.6.18-xen-3.3.0/Documentation/i2c/busses/i2c-i801
+--- linux-2.6.18.8/Documentation/i2c/busses/i2c-i801 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/Documentation/i2c/busses/i2c-i801 2008-08-21 11:36:07.000000000 +0200
+@@ -10,6 +10,11 @@ Supported adapters:
+ * Intel 6300ESB
+ * Intel 82801FB/FR/FW/FRW (ICH6)
+ * Intel ICH7
++ * Intel 82801G (ICH7)
++ * Intel 82801H (ICH9)
++ * Intel 82801I (ICH9)
++ * Intel Tolapai
++ * Intel ICH10
+ Datasheets: Publicly available at the Intel website
+
+ Authors:
+diff -rpuN linux-2.6.18.8/drivers/acpi/dispatcher/dsobject.c linux-2.6.18-xen-3.3.0/drivers/acpi/dispatcher/dsobject.c
+--- linux-2.6.18.8/drivers/acpi/dispatcher/dsobject.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/acpi/dispatcher/dsobject.c 2008-08-21 11:36:07.000000000 +0200
+@@ -137,6 +137,71 @@ acpi_ds_build_internal_object(struct acp
+ return_ACPI_STATUS(status);
+ }
+ }
++
++ /* Special object resolution for elements of a package */
++
++ if ((op->common.parent->common.aml_opcode == AML_PACKAGE_OP) ||
++ (op->common.parent->common.aml_opcode ==
++ AML_VAR_PACKAGE_OP)) {
++ /*
++ * Attempt to resolve the node to a value before we insert it into
++ * the package. If this is a reference to a common data type,
++ * resolve it immediately. According to the ACPI spec, package
++ * elements can only be "data objects" or method references.
++ * Attempt to resolve to an Integer, Buffer, String or Package.
++ * If cannot, return the named reference (for things like Devices,
++ * Methods, etc.) Buffer Fields and Fields will resolve to simple
++ * objects (int/buf/str/pkg).
++ *
++ * NOTE: References to things like Devices, Methods, Mutexes, etc.
++ * will remain as named references. This behavior is not described
++ * in the ACPI spec, but it appears to be an oversight.
++ */
++ obj_desc = (union acpi_operand_object *)op->common.node;
++
++ status =
++ acpi_ex_resolve_node_to_value(ACPI_CAST_INDIRECT_PTR
++ (struct
++ acpi_namespace_node,
++ &obj_desc),
++ walk_state);
++ if (ACPI_FAILURE(status)) {
++ return_ACPI_STATUS(status);
++ }
++
++ switch (op->common.node->type) {
++ /*
++ * For these types, we need the actual node, not the subobject.
++ * However, the subobject got an extra reference count above.
++ */
++ case ACPI_TYPE_MUTEX:
++ case ACPI_TYPE_METHOD:
++ case ACPI_TYPE_POWER:
++ case ACPI_TYPE_PROCESSOR:
++ case ACPI_TYPE_EVENT:
++ case ACPI_TYPE_REGION:
++ case ACPI_TYPE_DEVICE:
++ case ACPI_TYPE_THERMAL:
++
++ obj_desc =
++ (union acpi_operand_object *)op->common.
++ node;
++ break;
++
++ default:
++ break;
++ }
++
++ /*
++ * If above resolved to an operand object, we are done. Otherwise,
++ * we have a NS node, we must create the package entry as a named
++ * reference.
++ */
++ if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) !=
++ ACPI_DESC_TYPE_NAMED) {
++ goto exit;
++ }
++ }
+ }
+
+ /* Create and init a new internal ACPI object */
+@@ -156,6 +221,7 @@ acpi_ds_build_internal_object(struct acp
+ return_ACPI_STATUS(status);
+ }
+
++ exit:
+ *obj_desc_ptr = obj_desc;
+ return_ACPI_STATUS(AE_OK);
+ }
+@@ -358,12 +424,25 @@ acpi_ds_build_internal_package_obj(struc
+ arg = arg->common.next;
+ for (i = 0; arg; i++) {
+ if (arg->common.aml_opcode == AML_INT_RETURN_VALUE_OP) {
+-
+- /* Object (package or buffer) is already built */
+-
+- obj_desc->package.elements[i] =
+- ACPI_CAST_PTR(union acpi_operand_object,
+- arg->common.node);
++ if (arg->common.node->type == ACPI_TYPE_METHOD) {
++ /*
++ * A method reference "looks" to the parser to be a method
++ * invocation, so we special case it here
++ */
++ arg->common.aml_opcode = AML_INT_NAMEPATH_OP;
++ status =
++ acpi_ds_build_internal_object(walk_state,
++ arg,
++ &obj_desc->
++ package.
++ elements[i]);
++ } else {
++ /* This package element is already built, just get it */
++
++ obj_desc->package.elements[i] =
++ ACPI_CAST_PTR(union acpi_operand_object,
++ arg->common.node);
++ }
+ } else {
+ status = acpi_ds_build_internal_object(walk_state, arg,
+ &obj_desc->
+diff -rpuN linux-2.6.18.8/drivers/acpi/hardware/hwregs.c linux-2.6.18-xen-3.3.0/drivers/acpi/hardware/hwregs.c
+--- linux-2.6.18.8/drivers/acpi/hardware/hwregs.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/acpi/hardware/hwregs.c 2008-08-21 11:36:07.000000000 +0200
+@@ -665,8 +665,6 @@ acpi_status acpi_hw_register_write(u8 us
+
+ /*
+ * Perform a read first to preserve certain bits (per ACPI spec)
+- *
+- * Note: This includes SCI_EN, we never want to change this bit
+ */
+ status = acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK,
+ ACPI_REGISTER_PM1_CONTROL,
+diff -rpuN linux-2.6.18.8/drivers/acpi/hardware/hwsleep.c linux-2.6.18-xen-3.3.0/drivers/acpi/hardware/hwsleep.c
+--- linux-2.6.18.8/drivers/acpi/hardware/hwsleep.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/acpi/hardware/hwsleep.c 2008-08-21 11:36:07.000000000 +0200
+@@ -227,7 +227,11 @@ acpi_status asmlinkage acpi_enter_sleep_
+ u32 PM1Bcontrol;
+ struct acpi_bit_register_info *sleep_type_reg_info;
+ struct acpi_bit_register_info *sleep_enable_reg_info;
++#if !(defined(CONFIG_XEN) && defined(CONFIG_X86))
+ u32 in_value;
++#else
++ int err;
++#endif
+ acpi_status status;
+
+ ACPI_FUNCTION_TRACE(acpi_enter_sleep_state);
+@@ -327,6 +331,7 @@ acpi_status asmlinkage acpi_enter_sleep_
+
+ ACPI_FLUSH_CPU_CACHE();
+
++#if !(defined(CONFIG_XEN) && defined(CONFIG_X86))
+ status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK,
+ ACPI_REGISTER_PM1A_CONTROL,
+ PM1Acontrol);
+@@ -376,6 +381,16 @@ acpi_status asmlinkage acpi_enter_sleep_
+ /* Spin until we wake */
+
+ } while (!in_value);
++#else
++ /* PV ACPI just need check hypercall return value */
++ err = acpi_notify_hypervisor_state(sleep_state,
++ PM1Acontrol, PM1Bcontrol);
++ if (err) {
++ ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
++ "Hypervisor failure [%d]\n", err));
++ return_ACPI_STATUS(AE_ERROR);
++ }
++#endif
+
+ return_ACPI_STATUS(AE_OK);
+ }
+diff -rpuN linux-2.6.18.8/drivers/acpi/Kconfig linux-2.6.18-xen-3.3.0/drivers/acpi/Kconfig
+--- linux-2.6.18.8/drivers/acpi/Kconfig 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/acpi/Kconfig 2008-08-21 11:36:07.000000000 +0200
@@ -305,6 +305,7 @@ config ACPI_SYSTEM
config X86_PM_TIMER
bool "Power Management Timer Support" if EMBEDDED
@@ -73061,7 +73652,7 @@ diff -rpuN linux-2.6.18.8/drivers/acpi/Kconfig linux-2.6.18-xen-3.2.0/drivers/ac
default y
help
The Power Management Timer is available on all ACPI-capable,
-@@ -362,6 +363,10 @@ config ACPI_SBS
+@@ -362,6 +363,15 @@ config ACPI_SBS
A "Smart Battery" is quite old and quite rare compared
to today's ACPI "Control Method" battery.
@@ -73069,39 +73660,599 @@ diff -rpuN linux-2.6.18.8/drivers/acpi/Kconfig linux-2.6.18-xen-3.2.0/drivers/ac
+ bool
+ depends on X86 && XEN && ACPI_SLEEP
+ default y
++
++config PROCESSOR_EXTERNAL_CONTROL
++ bool
++ depends on X86 && XEN
++ default y
endif # ACPI
endmenu
-diff -rpuN linux-2.6.18.8/drivers/acpi/hardware/hwsleep.c linux-2.6.18-xen-3.2.0/drivers/acpi/hardware/hwsleep.c
---- linux-2.6.18.8/drivers/acpi/hardware/hwsleep.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/acpi/hardware/hwsleep.c 2008-02-15 16:21:57.000000000 -0800
-@@ -327,6 +327,7 @@ acpi_status asmlinkage acpi_enter_sleep_
+diff -rpuN linux-2.6.18.8/drivers/acpi/Makefile linux-2.6.18-xen-3.3.0/drivers/acpi/Makefile
+--- linux-2.6.18.8/drivers/acpi/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/acpi/Makefile 2008-08-21 11:36:07.000000000 +0200
+@@ -34,6 +34,9 @@ processor-objs += processor_core.o proce
+ ifdef CONFIG_CPU_FREQ
+ processor-objs += processor_perflib.o
+ endif
++ifdef CONFIG_PROCESSOR_EXTERNAL_CONTROL
++processor-objs += processor_perflib.o processor_extcntl.o
++endif
- ACPI_FLUSH_CPU_CACHE();
+ obj-y += sleep/
+ obj-y += bus.o glue.o
+diff -rpuN linux-2.6.18.8/drivers/acpi/processor_core.c linux-2.6.18-xen-3.3.0/drivers/acpi/processor_core.c
+--- linux-2.6.18.8/drivers/acpi/processor_core.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/acpi/processor_core.c 2008-08-21 11:36:07.000000000 +0200
+@@ -475,7 +475,8 @@ static int acpi_processor_get_info(struc
+ */
+ if (cpu_index == -1) {
+ if (ACPI_FAILURE
+- (acpi_processor_hotadd_init(pr->handle, &pr->id))) {
++ (acpi_processor_hotadd_init(pr->handle, &pr->id)) &&
++ !processor_cntl_external()) {
+ printk(KERN_ERR PREFIX
+ "Getting cpuindex for acpiid 0x%x\n",
+ pr->acpi_id);
+@@ -508,7 +509,7 @@ static int acpi_processor_get_info(struc
+ request_region(pr->throttling.address, 6, "ACPI CPU throttle");
+ }
-+#ifndef CONFIG_ACPI_PV_SLEEP
- status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK,
- ACPI_REGISTER_PM1A_CONTROL,
- PM1Acontrol);
-@@ -378,6 +379,15 @@ acpi_status asmlinkage acpi_enter_sleep_
- } while (!in_value);
+-#ifdef CONFIG_CPU_FREQ
++#if defined(CONFIG_CPU_FREQ) || defined(CONFIG_PROCESSOR_EXTERNAL_CONTROL)
+ acpi_processor_ppc_has_changed(pr);
+ #endif
+ acpi_processor_get_throttling_info(pr);
+@@ -517,7 +518,7 @@ static int acpi_processor_get_info(struc
+ return 0;
+ }
- return_ACPI_STATUS(AE_OK);
+-static void *processor_device_array[NR_CPUS];
++static void *processor_device_array[NR_ACPI_CPUS];
+
+ static int acpi_processor_start(struct acpi_device *device)
+ {
+@@ -525,31 +526,46 @@ static int acpi_processor_start(struct a
+ acpi_status status = AE_OK;
+ struct acpi_processor *pr;
+
++ processor_extcntl_init();
+
+ pr = acpi_driver_data(device);
+
+ result = acpi_processor_get_info(pr);
+- if (result) {
++ if (result ||
++ ((pr->id == -1) && !processor_cntl_external())) {
+ /* Processor is physically not present */
+ return 0;
+ }
+
+- BUG_ON((pr->id >= NR_CPUS) || (pr->id < 0));
++ BUG_ON(!processor_cntl_external() &&
++ ((pr->id >= NR_CPUS) || (pr->id < 0)));
+
+ /*
+ * Buggy BIOS check
+ * ACPI id of processors can be reported wrongly by the BIOS.
+ * Don't trust it blindly
+ */
++#ifdef CONFIG_XEN
++ BUG_ON(pr->acpi_id >= NR_ACPI_CPUS);
++ if (processor_device_array[pr->acpi_id] != NULL &&
++ processor_device_array[pr->acpi_id] != (void *)device) {
+#else
-+ /* PV ACPI just need check hypercall return value */
-+ status = acpi_notify_hypervisor_state(sleep_state,
-+ PM1Acontrol, PM1Bcontrol);
-+ if (ACPI_FAILURE(status))
-+ return_ACPI_STATUS(status);
-+ else
-+ return_ACPI_STATUS(AE_OK);
+ if (processor_device_array[pr->id] != NULL &&
+ processor_device_array[pr->id] != (void *)device) {
++#endif /* CONFIG_XEN */
+ printk(KERN_WARNING "BIOS reported wrong ACPI id"
+ "for the processor\n");
+ return -ENODEV;
+ }
++#ifdef CONFIG_XEN
++ processor_device_array[pr->acpi_id] = (void *)device;
++ if (pr->id != -1)
++ processors[pr->id] = pr;
++#else
+ processor_device_array[pr->id] = (void *)device;
+
+ processors[pr->id] = pr;
++#endif /* CONFIG_XEN */
+
+ result = acpi_processor_add_fs(device);
+ if (result)
+@@ -564,6 +580,10 @@ static int acpi_processor_start(struct a
+
+ acpi_processor_power_init(pr, device);
+
++ result = processor_extcntl_prepare(pr);
++ if (result)
++ goto end;
++
+ if (pr->flags.throttling) {
+ printk(KERN_INFO PREFIX "%s [%s] (supports",
+ acpi_device_name(device), acpi_device_bid(device));
+@@ -656,7 +676,13 @@ static int acpi_processor_remove(struct
+
+ acpi_processor_remove_fs(device);
+
++#ifdef CONFIG_XEN
++ if (pr->id != -1)
++ processors[pr->id] = NULL;
++#else
+ processors[pr->id] = NULL;
++#endif /* CONFIG_XEN */
++
+
+ kfree(pr);
+
+@@ -710,6 +736,10 @@ int acpi_processor_device_add(acpi_handl
+ if (!pr)
+ return -ENODEV;
+
++ if (processor_cntl_external())
++ processor_notify_external(pr,
++ PROCESSOR_HOTPLUG, HOTPLUG_TYPE_ADD);
++
+ if ((pr->id >= 0) && (pr->id < NR_CPUS)) {
+ kobject_uevent(&(*device)->kobj, KOBJ_ONLINE);
+ }
+@@ -748,6 +778,10 @@ acpi_processor_hotplug_notify(acpi_handl
+ break;
+ }
+
++ if (processor_cntl_external())
++ processor_notify_external(pr,
++ PROCESSOR_HOTPLUG, HOTPLUG_TYPE_ADD);
++
+ if (pr->id >= 0 && (pr->id < NR_CPUS)) {
+ kobject_uevent(&device->kobj, KOBJ_OFFLINE);
+ break;
+@@ -777,8 +811,18 @@ acpi_processor_hotplug_notify(acpi_handl
+ return;
+ }
+
++#ifdef CONFIG_XEN
++ if ((pr->id >= 0) && (pr->id < NR_CPUS)
++ && (cpu_present(pr->id)))
++#else
+ if ((pr->id < NR_CPUS) && (cpu_present(pr->id)))
++#endif /* CONFIG_XEN */
+ kobject_uevent(&device->kobj, KOBJ_OFFLINE);
++
++ if (processor_cntl_external())
++ processor_notify_external(pr, PROCESSOR_HOTPLUG,
++ HOTPLUG_TYPE_REMOVE);
++
+ break;
+ default:
+ ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+@@ -843,6 +887,11 @@ static acpi_status acpi_processor_hotadd
+
+ static int acpi_processor_handle_eject(struct acpi_processor *pr)
+ {
++#ifdef CONFIG_XEN
++ if (pr->id == -1)
++ return (0);
++#endif /* CONFIG_XEN */
++
+ if (cpu_online(pr->id)) {
+ return (-EINVAL);
+ }
+diff -rpuN linux-2.6.18.8/drivers/acpi/processor_extcntl.c linux-2.6.18-xen-3.3.0/drivers/acpi/processor_extcntl.c
+--- linux-2.6.18.8/drivers/acpi/processor_extcntl.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/acpi/processor_extcntl.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,232 @@
++/*
++ * processor_extcntl.c - channel to external control logic
++ *
++ * Copyright (C) 2008, Intel corporation
++ *
++ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or (at
++ * your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License along
++ * with this program; if not, write to the Free Software Foundation, Inc.,
++ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/types.h>
++#include <linux/acpi.h>
++#include <linux/pm.h>
++#include <linux/cpu.h>
++
++#include <acpi/processor.h>
++
++#define ACPI_PROCESSOR_COMPONENT 0x01000000
++#define ACPI_PROCESSOR_CLASS "processor"
++#define ACPI_PROCESSOR_DRIVER_NAME "ACPI Processor Driver"
++#define _COMPONENT ACPI_PROCESSOR_COMPONENT
++ACPI_MODULE_NAME("acpi_processor")
++
++static int processor_extcntl_parse_csd(struct acpi_processor *pr);
++static int processor_extcntl_get_performance(struct acpi_processor *pr);
++/*
++ * External processor control logic may register with its own set of
++ * ops to get ACPI related notification. One example is like VMM.
++ */
++const struct processor_extcntl_ops *processor_extcntl_ops;
++EXPORT_SYMBOL(processor_extcntl_ops);
++
++static int processor_notify_smm(void)
++{
++ acpi_status status;
++ static int is_done = 0;
++
++ /* only need successfully notify BIOS once */
++ /* avoid double notification which may lead to unexpected result */
++ if (is_done)
++ return 0;
++
++ /* Can't write pstate_cnt to smi_cmd if either value is zero */
++ if ((!acpi_fadt.smi_cmd) || (!acpi_fadt.pstate_cnt)) {
++ ACPI_DEBUG_PRINT((ACPI_DB_INFO,"No SMI port or pstate_cnt\n"));
++ return 0;
++ }
++
++ ACPI_DEBUG_PRINT((ACPI_DB_INFO,
++ "Writing pstate_cnt [0x%x] to smi_cmd [0x%x]\n",
++ acpi_fadt.pstate_cnt, acpi_fadt.smi_cmd));
++
++ /* FADT v1 doesn't support pstate_cnt, many BIOS vendors use
++ * it anyway, so we need to support it... */
++ if (acpi_fadt_is_v1) {
++ ACPI_DEBUG_PRINT((ACPI_DB_INFO,
++ "Using v1.0 FADT reserved value for pstate_cnt\n"));
++ }
++
++ status = acpi_os_write_port(acpi_fadt.smi_cmd,
++ (u32) acpi_fadt.pstate_cnt, 8);
++ if (ACPI_FAILURE(status))
++ return status;
++
++ is_done = 1;
++
++ return 0;
++}
++
++int processor_notify_external(struct acpi_processor *pr, int event, int type)
++{
++ int ret = -EINVAL;
++
++ if (!processor_cntl_external())
++ return -EINVAL;
++
++ switch (event) {
++ case PROCESSOR_PM_INIT:
++ case PROCESSOR_PM_CHANGE:
++ if ((type >= PM_TYPE_MAX) ||
++ !processor_extcntl_ops->pm_ops[type])
++ break;
++
++ ret = processor_extcntl_ops->pm_ops[type](pr, event);
++ break;
++ case PROCESSOR_HOTPLUG:
++ if (processor_extcntl_ops->hotplug)
++ ret = processor_extcntl_ops->hotplug(pr, type);
++ break;
++ default:
++ printk(KERN_ERR "Unsupport processor events %d.\n", event);
++ break;
++ }
++
++ return ret;
++}
++
++/*
++ * External control logic can decide to grab full or part of physical
++ * processor control bits. Take a VMM for example, physical processors
++ * are owned by VMM and thus existence information like hotplug is
++ * always required to be notified to VMM. Similar is processor idle
++ * state which is also necessarily controlled by VMM. But for other
++ * control bits like performance/throttle states, VMM may choose to
++ * control or not upon its own policy.
++ */
++void processor_extcntl_init(void)
++{
++ if (!processor_extcntl_ops)
++ arch_acpi_processor_init_extcntl(&processor_extcntl_ops);
++}
++
++/*
++ * This is called from ACPI processor init, and targeted to hold
++ * some tricky housekeeping jobs to satisfy external control model.
++ * For example, we may put dependency parse stub here for idle
++ * and performance state. Those information may be not available
++ * if splitting from dom0 control logic like cpufreq driver.
++ */
++int processor_extcntl_prepare(struct acpi_processor *pr)
++{
++ /* parse cstate dependency information */
++ if (processor_pm_external())
++ processor_extcntl_parse_csd(pr);
++
++ /* Initialize performance states */
++ if (processor_pmperf_external())
++ processor_extcntl_get_performance(pr);
++
++ return 0;
++}
++
++/*
++ * Currently no _CSD is implemented which is why existing ACPI code
++ * doesn't parse _CSD at all. But to keep interface complete with
++ * external control logic, we put a placeholder here for future
++ * compatibility.
++ */
++static int processor_extcntl_parse_csd(struct acpi_processor *pr)
++{
++ int i;
++
++ for (i = 0; i < pr->power.count; i++) {
++ if (!pr->power.states[i].valid)
++ continue;
++
++ /* No dependency by default */
++ pr->power.states[i].domain_info = NULL;
++ pr->power.states[i].csd_count = 0;
++ }
++
++ return 0;
++}
++
++/*
++ * Existing ACPI module does parse performance states at some point,
++ * when acpi-cpufreq driver is loaded which however is something
++ * we'd like to disable to avoid confliction with external control
++ * logic. So we have to collect raw performance information here
++ * when ACPI processor object is found and started.
++ */
++static int processor_extcntl_get_performance(struct acpi_processor *pr)
++{
++ int ret;
++ struct acpi_processor_performance *perf;
++ struct acpi_psd_package *pdomain;
++
++ if (pr->performance)
++ return -EBUSY;
++
++ perf = kzalloc(sizeof(struct acpi_processor_performance), GFP_KERNEL);
++ if (!perf)
++ return -ENOMEM;
++
++ pr->performance = perf;
++ /* Get basic performance state information */
++ ret = acpi_processor_get_performance_info(pr);
++ if (ret < 0)
++ goto err_out;
++
++ /*
++ * Well, here we need retrieve performance dependency information
++ * from _PSD object. The reason why existing interface is not used
++ * is due to the reason that existing interface sticks to Linux cpu
++ * id to construct some bitmap, however we want to split ACPI
++ * processor objects from Linux cpu id logic. For example, even
++ * when Linux is configured as UP, we still want to parse all ACPI
++ * processor objects to external logic. In this case, it's preferred
++ * to use ACPI ID instead.
++ */
++ pr->performance->domain_info.num_processors = 0;
++ ret = acpi_processor_get_psd(pr);
++ if (ret < 0)
++ goto err_out;
++
++ /* Some sanity check */
++ pdomain = &pr->performance->domain_info;
++ if ((pdomain->revision != ACPI_PSD_REV0_REVISION) ||
++ (pdomain->num_entries != ACPI_PSD_REV0_ENTRIES) ||
++ ((pdomain->coord_type != DOMAIN_COORD_TYPE_SW_ALL) &&
++ (pdomain->coord_type != DOMAIN_COORD_TYPE_SW_ANY) &&
++ (pdomain->coord_type != DOMAIN_COORD_TYPE_HW_ALL))) {
++ ret = -EINVAL;
++ goto err_out;
++ }
++
++ /* Last step is to notify BIOS that external logic exists */
++ processor_notify_smm();
++
++ processor_notify_external(pr, PROCESSOR_PM_INIT, PM_TYPE_PERF);
++
++ return 0;
++err_out:
++ pr->performance = NULL;
++ kfree(perf);
++ return ret;
++}
+diff -rpuN linux-2.6.18.8/drivers/acpi/processor_idle.c linux-2.6.18-xen-3.3.0/drivers/acpi/processor_idle.c
+--- linux-2.6.18.8/drivers/acpi/processor_idle.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/acpi/processor_idle.c 2008-08-21 11:36:07.000000000 +0200
+@@ -714,8 +714,12 @@ static int acpi_processor_get_power_info
+ (reg->space_id != ACPI_ADR_SPACE_FIXED_HARDWARE))
+ continue;
+
+- cx.address = (reg->space_id == ACPI_ADR_SPACE_FIXED_HARDWARE) ?
+- 0 : reg->address;
++ if (!processor_pm_external())
++ cx.address = (reg->space_id ==
++ ACPI_ADR_SPACE_FIXED_HARDWARE) ?
++ 0 : reg->address;
++ else
++ cx.address = reg->address;
+
+ /* There should be an easy way to extract an integer... */
+ obj = (union acpi_object *)&(element->package.elements[1]);
+@@ -724,7 +728,9 @@ static int acpi_processor_get_power_info
+
+ cx.type = obj->integer.value;
+
+- if ((cx.type != ACPI_STATE_C1) &&
++ /* Following check doesn't apply to external control case */
++ if (!processor_pm_external() &&
++ (cx.type != ACPI_STATE_C1) &&
+ (reg->space_id != ACPI_ADR_SPACE_SYSTEM_IO))
+ continue;
+
+@@ -743,6 +749,12 @@ static int acpi_processor_get_power_info
+
+ cx.power = obj->integer.value;
+
++#ifdef CONFIG_PROCESSOR_EXTERNAL_CONTROL
++ /* cache control methods to notify external logic */
++ if (processor_pm_external())
++ memcpy(&cx.reg, reg, sizeof(*reg));
++#endif
++
+ current_count++;
+ memcpy(&(pr->power.states[current_count]), &cx, sizeof(cx));
+
+@@ -985,12 +997,16 @@ int acpi_processor_cst_has_changed(struc
+ return -ENODEV;
+
+ /* Fall back to the default idle loop */
+- pm_idle = pm_idle_save;
++ if (!processor_pm_external())
++ pm_idle = pm_idle_save;
+ synchronize_sched(); /* Relies on interrupts forcing exit from idle. */
+
+ pr->flags.power = 0;
+ result = acpi_processor_get_power_info(pr);
+- if ((pr->flags.power == 1) && (pr->flags.power_setup_done))
++ if (processor_pm_external())
++ processor_notify_external(pr,
++ PROCESSOR_PM_CHANGE, PM_TYPE_IDLE);
++ else if ((pr->flags.power == 1) && (pr->flags.power_setup_done))
+ pm_idle = acpi_processor_idle;
+
+ return result;
+@@ -1122,7 +1138,7 @@ int acpi_processor_power_init(struct acp
+ pr->power.states[i].type);
+ printk(")\n");
+
+- if (pr->id == 0) {
++ if (!processor_pm_external() && (pr->id == 0)) {
+ pm_idle_save = pm_idle;
+ pm_idle = acpi_processor_idle;
+ }
+@@ -1141,6 +1157,9 @@ int acpi_processor_power_init(struct acp
+
+ pr->flags.power_setup_done = 1;
+
++ if (processor_pm_external())
++ processor_notify_external(pr,
++ PROCESSOR_PM_INIT, PM_TYPE_IDLE);
+ return 0;
+ }
+
+diff -rpuN linux-2.6.18.8/drivers/acpi/processor_perflib.c linux-2.6.18-xen-3.3.0/drivers/acpi/processor_perflib.c
+--- linux-2.6.18.8/drivers/acpi/processor_perflib.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/acpi/processor_perflib.c 2008-08-21 11:36:07.000000000 +0200
+@@ -66,6 +66,7 @@ static DEFINE_MUTEX(performance_mutex);
+
+ static int acpi_processor_ppc_status = 0;
+
++#ifdef CONFIG_CPU_FREQ
+ static int acpi_processor_ppc_notifier(struct notifier_block *nb,
+ unsigned long event, void *data)
+ {
+@@ -102,6 +103,7 @@ static int acpi_processor_ppc_notifier(s
+ static struct notifier_block acpi_ppc_notifier_block = {
+ .notifier_call = acpi_processor_ppc_notifier,
+ };
++#endif /* CONFIG_CPU_FREQ */
+
+ static int acpi_processor_get_platform_limit(struct acpi_processor *pr)
+ {
+@@ -137,9 +139,15 @@ int acpi_processor_ppc_has_changed(struc
+ if (ret < 0)
+ return (ret);
+ else
++#ifdef CONFIG_CPU_FREQ
+ return cpufreq_update_policy(pr->id);
++#elif CONFIG_PROCESSOR_EXTERNAL_CONTROL
++ return processor_notify_external(pr,
++ PROCESSOR_PM_CHANGE, PM_TYPE_PERF);
++#endif
+ }
+
++#ifdef CONFIG_CPU_FREQ
+ void acpi_processor_ppc_init(void)
+ {
+ if (!cpufreq_register_notifier
+@@ -158,6 +166,7 @@ void acpi_processor_ppc_exit(void)
+
+ acpi_processor_ppc_status &= ~PPC_REGISTERED;
+ }
++#endif /* CONFIG_CPU_FREQ */
+
+ static int acpi_processor_get_performance_control(struct acpi_processor *pr)
+ {
+@@ -299,7 +308,10 @@ static int acpi_processor_get_performanc
+ return result;
+ }
+
+-static int acpi_processor_get_performance_info(struct acpi_processor *pr)
++#ifndef CONFIG_PROCESSOR_EXTERNAL_CONTROL
++static
++#endif
++int acpi_processor_get_performance_info(struct acpi_processor *pr)
+ {
+ int result = 0;
+ acpi_status status = AE_OK;
+@@ -331,6 +343,7 @@ static int acpi_processor_get_performanc
+ return 0;
+ }
+
++#ifdef CONFIG_CPU_FREQ
+ int acpi_processor_notify_smm(struct module *calling_module)
+ {
+ acpi_status status;
+@@ -398,6 +411,7 @@ int acpi_processor_notify_smm(struct mod
+ }
+
+ EXPORT_SYMBOL(acpi_processor_notify_smm);
++#endif /* CONFIG_CPU_FREQ */
+
+ #ifdef CONFIG_X86_ACPI_CPUFREQ_PROC_INTF
+ /* /proc/acpi/processor/../performance interface (DEPRECATED) */
+@@ -538,7 +552,10 @@ static void acpi_cpufreq_remove_file(str
+ }
+ #endif /* CONFIG_X86_ACPI_CPUFREQ_PROC_INTF */
+
+-static int acpi_processor_get_psd(struct acpi_processor *pr)
++#ifndef CONFIG_PROCESSOR_EXTERNAL_CONTROL
++static
+#endif
++int acpi_processor_get_psd(struct acpi_processor *pr)
+ {
+ int result = 0;
+ acpi_status status = AE_OK;
+diff -rpuN linux-2.6.18.8/drivers/acpi/resources/rsxface.c linux-2.6.18-xen-3.3.0/drivers/acpi/resources/rsxface.c
+--- linux-2.6.18.8/drivers/acpi/resources/rsxface.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/acpi/resources/rsxface.c 2008-08-21 11:36:07.000000000 +0200
+@@ -476,8 +476,6 @@ acpi_rs_match_vendor_resource(struct acp
+ return (AE_CTRL_TERMINATE);
}
- ACPI_EXPORT_SYMBOL(acpi_enter_sleep_state)
-diff -rpuN linux-2.6.18.8/drivers/acpi/sleep/main.c linux-2.6.18-xen-3.2.0/drivers/acpi/sleep/main.c
---- linux-2.6.18.8/drivers/acpi/sleep/main.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/acpi/sleep/main.c 2008-02-15 16:21:57.000000000 -0800
+-ACPI_EXPORT_SYMBOL(acpi_rs_match_vendor_resource)
+-
+ /*******************************************************************************
+ *
+ * FUNCTION: acpi_walk_resources
+diff -rpuN linux-2.6.18.8/drivers/acpi/sleep/main.c linux-2.6.18-xen-3.3.0/drivers/acpi/sleep/main.c
+--- linux-2.6.18.8/drivers/acpi/sleep/main.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/acpi/sleep/main.c 2008-08-21 11:36:07.000000000 +0200
@@ -91,7 +91,14 @@ static int acpi_pm_enter(suspend_state_t
break;
@@ -73130,9 +74281,9 @@ diff -rpuN linux-2.6.18.8/drivers/acpi/sleep/main.c linux-2.6.18-xen-3.2.0/drive
return 0;
}
-diff -rpuN linux-2.6.18.8/drivers/acpi/sleep/poweroff.c linux-2.6.18-xen-3.2.0/drivers/acpi/sleep/poweroff.c
---- linux-2.6.18.8/drivers/acpi/sleep/poweroff.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/acpi/sleep/poweroff.c 2008-02-15 16:21:57.000000000 -0800
+diff -rpuN linux-2.6.18.8/drivers/acpi/sleep/poweroff.c linux-2.6.18-xen-3.3.0/drivers/acpi/sleep/poweroff.c
+--- linux-2.6.18.8/drivers/acpi/sleep/poweroff.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/acpi/sleep/poweroff.c 2008-08-21 11:36:07.000000000 +0200
@@ -20,6 +20,7 @@
int acpi_sleep_prepare(u32 acpi_state)
{
@@ -73149,9 +74300,21 @@ diff -rpuN linux-2.6.18.8/drivers/acpi/sleep/poweroff.c linux-2.6.18-xen-3.2.0/d
ACPI_FLUSH_CPU_CACHE();
acpi_enable_wakeup_device_prep(acpi_state);
#endif
-diff -rpuN linux-2.6.18.8/drivers/block/floppy.c linux-2.6.18-xen-3.2.0/drivers/block/floppy.c
---- linux-2.6.18.8/drivers/block/floppy.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/block/floppy.c 2008-02-15 16:21:57.000000000 -0800
+diff -rpuN linux-2.6.18.8/drivers/acpi/sleep/proc.c linux-2.6.18-xen-3.3.0/drivers/acpi/sleep/proc.c
+--- linux-2.6.18.8/drivers/acpi/sleep/proc.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/acpi/sleep/proc.c 2008-08-21 11:36:07.000000000 +0200
+@@ -251,6 +251,8 @@ acpi_system_write_alarm(struct file *fil
+
+ if (adjust) {
+ yr += CMOS_READ(RTC_YEAR);
++ if (acpi_gbl_FADT->century)
++ yr += CMOS_READ(acpi_gbl_FADT->century) * 100;
+ mo += CMOS_READ(RTC_MONTH);
+ day += CMOS_READ(RTC_DAY_OF_MONTH);
+ hr += CMOS_READ(RTC_HOURS);
+diff -rpuN linux-2.6.18.8/drivers/block/floppy.c linux-2.6.18-xen-3.3.0/drivers/block/floppy.c
+--- linux-2.6.18.8/drivers/block/floppy.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/block/floppy.c 2008-08-21 11:36:07.000000000 +0200
@@ -4392,11 +4392,15 @@ static int floppy_grab_irq_and_dma(void)
if (fd_request_dma()) {
DPRINT("Unable to grab DMA%d for the floppy driver\n",
@@ -73173,9 +74336,9 @@ diff -rpuN linux-2.6.18.8/drivers/block/floppy.c linux-2.6.18-xen-3.2.0/drivers/
}
for (fdc = 0; fdc < N_FDC; fdc++) {
-diff -rpuN linux-2.6.18.8/drivers/char/agp/amd64-agp.c linux-2.6.18-xen-3.2.0/drivers/char/agp/amd64-agp.c
---- linux-2.6.18.8/drivers/char/agp/amd64-agp.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/char/agp/amd64-agp.c 2008-02-15 16:21:57.000000000 -0800
+diff -rpuN linux-2.6.18.8/drivers/char/agp/amd64-agp.c linux-2.6.18-xen-3.3.0/drivers/char/agp/amd64-agp.c
+--- linux-2.6.18.8/drivers/char/agp/amd64-agp.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/char/agp/amd64-agp.c 2008-08-21 11:36:07.000000000 +0200
@@ -15,6 +15,7 @@
#include <linux/mmzone.h>
#include <asm/page.h> /* PAGE_SIZE */
@@ -73210,9 +74373,9 @@ diff -rpuN linux-2.6.18.8/drivers/char/agp/amd64-agp.c linux-2.6.18-xen-3.2.0/dr
}
/* Request the Aperture. This catches cases when someone else
-diff -rpuN linux-2.6.18.8/drivers/char/agp/generic.c linux-2.6.18-xen-3.2.0/drivers/char/agp/generic.c
---- linux-2.6.18.8/drivers/char/agp/generic.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/char/agp/generic.c 2008-02-15 16:21:57.000000000 -0800
+diff -rpuN linux-2.6.18.8/drivers/char/agp/generic.c linux-2.6.18-xen-3.3.0/drivers/char/agp/generic.c
+--- linux-2.6.18.8/drivers/char/agp/generic.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/char/agp/generic.c 2008-08-21 11:36:07.000000000 +0200
@@ -51,28 +51,6 @@ int agp_memory_reserved;
*/
EXPORT_SYMBOL_GPL(agp_memory_reserved);
@@ -73242,9 +74405,9 @@ diff -rpuN linux-2.6.18.8/drivers/char/agp/generic.c linux-2.6.18-xen-3.2.0/driv
/*
* Generic routines for handling agp_memory structures -
* They use the basic page allocation routines to do the brunt of the work.
-diff -rpuN linux-2.6.18.8/drivers/char/agp/intel-agp.c linux-2.6.18-xen-3.2.0/drivers/char/agp/intel-agp.c
---- linux-2.6.18.8/drivers/char/agp/intel-agp.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/char/agp/intel-agp.c 2008-02-15 16:21:57.000000000 -0800
+diff -rpuN linux-2.6.18.8/drivers/char/agp/intel-agp.c linux-2.6.18-xen-3.3.0/drivers/char/agp/intel-agp.c
+--- linux-2.6.18.8/drivers/char/agp/intel-agp.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/char/agp/intel-agp.c 2008-08-21 11:36:07.000000000 +0200
@@ -164,9 +164,17 @@ static void *i8xx_alloc_pages(void)
if (page == NULL)
return NULL;
@@ -73278,9 +74441,21 @@ diff -rpuN linux-2.6.18.8/drivers/char/agp/intel-agp.c linux-2.6.18-xen-3.2.0/dr
atomic_dec(&agp_bridge->current_memory_agp);
}
-diff -rpuN linux-2.6.18.8/drivers/char/mem.c linux-2.6.18-xen-3.2.0/drivers/char/mem.c
---- linux-2.6.18.8/drivers/char/mem.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/char/mem.c 2008-02-15 16:21:57.000000000 -0800
+diff -rpuN linux-2.6.18.8/drivers/char/Kconfig linux-2.6.18-xen-3.3.0/drivers/char/Kconfig
+--- linux-2.6.18.8/drivers/char/Kconfig 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/char/Kconfig 2008-08-21 11:36:07.000000000 +0200
+@@ -1005,7 +1005,7 @@ config MAX_RAW_DEVS
+ config HPET
+ bool "HPET - High Precision Event Timer" if (X86 || IA64)
+ default n
+- depends on ACPI
++ depends on ACPI && !XEN
+ help
+ If you say Y here, you will have a miscdevice named "/dev/hpet/". Each
+ open selects one of the timers supported by the HPET. The timers are
+diff -rpuN linux-2.6.18.8/drivers/char/mem.c linux-2.6.18-xen-3.3.0/drivers/char/mem.c
+--- linux-2.6.18.8/drivers/char/mem.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/char/mem.c 2008-08-21 11:36:07.000000000 +0200
@@ -101,6 +101,7 @@ static inline int valid_mmap_phys_addr_r
}
#endif
@@ -73297,7 +74472,31 @@ diff -rpuN linux-2.6.18.8/drivers/char/mem.c linux-2.6.18-xen-3.2.0/drivers/char
#ifndef __HAVE_PHYS_MEM_ACCESS_PROT
static pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
-@@ -780,6 +782,7 @@ static int open_port(struct inode * inod
+@@ -262,6 +264,9 @@ static int mmap_mem(struct file * file,
+ static int mmap_kmem(struct file * file, struct vm_area_struct * vma)
+ {
+ unsigned long pfn;
++#ifdef CONFIG_XEN
++ unsigned long i, count;
++#endif
+
+ /* Turn a kernel-virtual address into a physical page frame */
+ pfn = __pa((u64)vma->vm_pgoff << PAGE_SHIFT) >> PAGE_SHIFT;
+@@ -276,6 +281,13 @@ static int mmap_kmem(struct file * file,
+ if (!pfn_valid(pfn))
+ return -EIO;
+
++#ifdef CONFIG_XEN
++ count = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;
++ for (i = 0; i < count; i++)
++ if ((pfn + i) != mfn_to_local_pfn(pfn_to_mfn(pfn + i)))
++ return -EIO;
++#endif
++
+ vma->vm_pgoff = pfn;
+ return mmap_mem(file, vma);
+ }
+@@ -780,6 +792,7 @@ static int open_port(struct inode * inod
#define open_kmem open_mem
#define open_oldmem open_mem
@@ -73305,7 +74504,7 @@ diff -rpuN linux-2.6.18.8/drivers/char/mem.c linux-2.6.18-xen-3.2.0/drivers/char
static const struct file_operations mem_fops = {
.llseek = memory_lseek,
.read = read_mem,
-@@ -787,6 +790,9 @@ static const struct file_operations mem_
+@@ -787,6 +800,9 @@ static const struct file_operations mem_
.mmap = mmap_mem,
.open = open_mem,
};
@@ -73315,9 +74514,9 @@ diff -rpuN linux-2.6.18.8/drivers/char/mem.c linux-2.6.18-xen-3.2.0/drivers/char
static const struct file_operations kmem_fops = {
.llseek = memory_lseek,
-diff -rpuN linux-2.6.18.8/drivers/char/tpm/Kconfig linux-2.6.18-xen-3.2.0/drivers/char/tpm/Kconfig
---- linux-2.6.18.8/drivers/char/tpm/Kconfig 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/char/tpm/Kconfig 2008-02-15 16:21:57.000000000 -0800
+diff -rpuN linux-2.6.18.8/drivers/char/tpm/Kconfig linux-2.6.18-xen-3.3.0/drivers/char/tpm/Kconfig
+--- linux-2.6.18.8/drivers/char/tpm/Kconfig 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/char/tpm/Kconfig 2008-08-21 11:36:07.000000000 +0200
@@ -58,5 +58,13 @@ config TCG_INFINEON
Further information on this driver and the supported hardware
can be found at http://www.prosec.rub.de/tpm
@@ -73333,18 +74532,18 @@ diff -rpuN linux-2.6.18.8/drivers/char/tpm/Kconfig linux-2.6.18-xen-3.2.0/driver
+ will be called tpm_xenu.
+endmenu
-diff -rpuN linux-2.6.18.8/drivers/char/tpm/Makefile linux-2.6.18-xen-3.2.0/drivers/char/tpm/Makefile
---- linux-2.6.18.8/drivers/char/tpm/Makefile 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/char/tpm/Makefile 2008-02-15 16:21:57.000000000 -0800
+diff -rpuN linux-2.6.18.8/drivers/char/tpm/Makefile linux-2.6.18-xen-3.3.0/drivers/char/tpm/Makefile
+--- linux-2.6.18.8/drivers/char/tpm/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/char/tpm/Makefile 2008-08-21 11:36:07.000000000 +0200
@@ -9,3 +9,5 @@ obj-$(CONFIG_TCG_TIS) += tpm_tis.o
obj-$(CONFIG_TCG_NSC) += tpm_nsc.o
obj-$(CONFIG_TCG_ATMEL) += tpm_atmel.o
obj-$(CONFIG_TCG_INFINEON) += tpm_infineon.o
+obj-$(CONFIG_TCG_XEN) += tpm_xenu.o
+tpm_xenu-y = tpm_xen.o tpm_vtpm.o
-diff -rpuN linux-2.6.18.8/drivers/char/tpm/tpm.h linux-2.6.18-xen-3.2.0/drivers/char/tpm/tpm.h
---- linux-2.6.18.8/drivers/char/tpm/tpm.h 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/char/tpm/tpm.h 2008-02-15 16:21:57.000000000 -0800
+diff -rpuN linux-2.6.18.8/drivers/char/tpm/tpm.h linux-2.6.18-xen-3.3.0/drivers/char/tpm/tpm.h
+--- linux-2.6.18.8/drivers/char/tpm/tpm.h 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/char/tpm/tpm.h 2008-08-21 11:36:07.000000000 +0200
@@ -105,6 +105,9 @@ struct tpm_chip {
struct dentry **bios_dir;
@@ -73374,9 +74573,9 @@ diff -rpuN linux-2.6.18.8/drivers/char/tpm/tpm.h linux-2.6.18-xen-3.2.0/drivers/
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 -rpuN linux-2.6.18.8/drivers/char/tpm/tpm_vtpm.c linux-2.6.18-xen-3.2.0/drivers/char/tpm/tpm_vtpm.c
---- linux-2.6.18.8/drivers/char/tpm/tpm_vtpm.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/char/tpm/tpm_vtpm.c 2008-02-15 16:21:57.000000000 -0800
+diff -rpuN linux-2.6.18.8/drivers/char/tpm/tpm_vtpm.c linux-2.6.18-xen-3.3.0/drivers/char/tpm/tpm_vtpm.c
+--- linux-2.6.18.8/drivers/char/tpm/tpm_vtpm.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/char/tpm/tpm_vtpm.c 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,542 @@
+/*
+ * Copyright (C) 2006 IBM Corporation
@@ -73920,9 +75119,9 @@ diff -rpuN linux-2.6.18.8/drivers/char/tpm/tpm_vtpm.c linux-2.6.18-xen-3.2.0/dri
+ tpm_remove_hardware(dev);
+ kfree(vtpms);
+}
-diff -rpuN linux-2.6.18.8/drivers/char/tpm/tpm_vtpm.h linux-2.6.18-xen-3.2.0/drivers/char/tpm/tpm_vtpm.h
---- linux-2.6.18.8/drivers/char/tpm/tpm_vtpm.h 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/char/tpm/tpm_vtpm.h 2008-02-15 16:21:57.000000000 -0800
+diff -rpuN linux-2.6.18.8/drivers/char/tpm/tpm_vtpm.h linux-2.6.18-xen-3.3.0/drivers/char/tpm/tpm_vtpm.h
+--- linux-2.6.18.8/drivers/char/tpm/tpm_vtpm.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/char/tpm/tpm_vtpm.h 2008-08-21 11:36:07.000000000 +0200
@@ -0,0 +1,55 @@
+#ifndef TPM_VTPM_H
+#define TPM_VTPM_H
@@ -73979,10 +75178,10 @@ diff -rpuN linux-2.6.18.8/drivers/char/tpm/tpm_vtpm.h linux-2.6.18-xen-3.2.0/dri
+}
+
+#endif
-diff -rpuN linux-2.6.18.8/drivers/char/tpm/tpm_xen.c linux-2.6.18-xen-3.2.0/drivers/char/tpm/tpm_xen.c
---- linux-2.6.18.8/drivers/char/tpm/tpm_xen.c 1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/char/tpm/tpm_xen.c 2008-02-15 16:21:57.000000000 -0800
-@@ -0,0 +1,720 @@
+diff -rpuN linux-2.6.18.8/drivers/char/tpm/tpm_xen.c linux-2.6.18-xen-3.3.0/drivers/char/tpm/tpm_xen.c
+--- linux-2.6.18.8/drivers/char/tpm/tpm_xen.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/char/tpm/tpm_xen.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,722 @@
+/*
+ * Copyright (c) 2005, IBM Corporation
+ *
@@ -74332,6 +75531,8 @@ diff -rpuN linux-2.6.18.8/drivers/char/tpm/tpm_xen.c linux-2.6.18-xen-3.2.0/driv
+ case XenbusStateInitialising:
+ case XenbusStateInitWait:
+ case XenbusStateInitialised:
++ case XenbusStateReconfiguring:
++ case XenbusStateReconfigured:
+ case XenbusStateUnknown:
+ break;
+
@@ -74703,9 +75904,9 @@ diff -rpuN linux-2.6.18.8/drivers/char/tpm/tpm_xen.c linux-2.6.18-xen-3.2.0/driv
+module_init(tpmif_init);
+
+MODULE_LICENSE("Dual BSD/GPL");
-diff -rpuN linux-2.6.18.8/drivers/char/tty_io.c linux-2.6.18-xen-3.2.0/drivers/char/tty_io.c
---- linux-2.6.18.8/drivers/char/tty_io.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/char/tty_io.c 2008-02-15 16:21:57.000000000 -0800
+diff -rpuN linux-2.6.18.8/drivers/char/tty_io.c linux-2.6.18-xen-3.3.0/drivers/char/tty_io.c
+--- linux-2.6.18.8/drivers/char/tty_io.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/char/tty_io.c 2008-08-21 11:36:07.000000000 +0200
@@ -130,6 +130,8 @@ LIST_HEAD(tty_drivers); /* linked list
vt.c for deeply disgusting hack reasons */
DEFINE_MUTEX(tty_mutex);
@@ -74741,9 +75942,9 @@ diff -rpuN linux-2.6.18.8/drivers/char/tty_io.c linux-2.6.18-xen-3.2.0/drivers/c
#endif
return 0;
}
-diff -rpuN linux-2.6.18.8/drivers/cpufreq/cpufreq_ondemand.c linux-2.6.18-xen-3.2.0/drivers/cpufreq/cpufreq_ondemand.c
---- linux-2.6.18.8/drivers/cpufreq/cpufreq_ondemand.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/cpufreq/cpufreq_ondemand.c 2008-02-15 16:21:58.000000000 -0800
+diff -rpuN linux-2.6.18.8/drivers/cpufreq/cpufreq_ondemand.c linux-2.6.18-xen-3.3.0/drivers/cpufreq/cpufreq_ondemand.c
+--- linux-2.6.18.8/drivers/cpufreq/cpufreq_ondemand.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/cpufreq/cpufreq_ondemand.c 2008-08-21 11:36:07.000000000 +0200
@@ -96,6 +96,7 @@ static inline cputime64_t get_cpu_idle_t
return retval;
}
@@ -74866,9 +76067,9 @@ diff -rpuN linux-2.6.18.8/drivers/cpufreq/cpufreq_ondemand.c linux-2.6.18-xen-3.
/* Check for frequency increase */
if (load > dbs_tuners_ins.up_threshold) {
-diff -rpuN linux-2.6.18.8/drivers/cpufreq/cpufreq_stats.c linux-2.6.18-xen-3.2.0/drivers/cpufreq/cpufreq_stats.c
---- linux-2.6.18.8/drivers/cpufreq/cpufreq_stats.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/cpufreq/cpufreq_stats.c 2008-02-15 16:21:58.000000000 -0800
+diff -rpuN linux-2.6.18.8/drivers/cpufreq/cpufreq_stats.c linux-2.6.18-xen-3.3.0/drivers/cpufreq/cpufreq_stats.c
+--- linux-2.6.18.8/drivers/cpufreq/cpufreq_stats.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/cpufreq/cpufreq_stats.c 2008-08-21 11:36:07.000000000 +0200
@@ -292,6 +292,9 @@ cpufreq_stat_notifier_trans (struct noti
if (old_index == new_index)
return 0;
@@ -74879,39 +76080,54 @@ diff -rpuN linux-2.6.18.8/drivers/cpufreq/cpufreq_stats.c linux-2.6.18-xen-3.2.0
spin_lock(&cpufreq_stats_lock);
stat->last_index = new_index;
#ifdef CONFIG_CPU_FREQ_STAT_DETAILS
-diff -rpuN linux-2.6.18.8/drivers/i2c/busses/Kconfig linux-2.6.18-xen-3.2.0/drivers/i2c/busses/Kconfig
---- linux-2.6.18.8/drivers/i2c/busses/Kconfig 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/i2c/busses/Kconfig 2008-02-15 16:21:58.000000000 -0800
-@@ -125,6 +125,7 @@ config I2C_I801
- ICH7
- ESB2
- ICH8
-+ ICH9
-
- This driver can also be built as a module. If so, the module
- will be called i2c-i801.
-diff -rpuN linux-2.6.18.8/drivers/i2c/busses/i2c-i801.c linux-2.6.18-xen-3.2.0/drivers/i2c/busses/i2c-i801.c
---- linux-2.6.18.8/drivers/i2c/busses/i2c-i801.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/i2c/busses/i2c-i801.c 2008-02-15 16:21:58.000000000 -0800
-@@ -33,6 +33,7 @@
+diff -rpuN linux-2.6.18.8/drivers/cpufreq/Kconfig linux-2.6.18-xen-3.3.0/drivers/cpufreq/Kconfig
+--- linux-2.6.18.8/drivers/cpufreq/Kconfig 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/cpufreq/Kconfig 2008-08-21 11:36:07.000000000 +0200
+@@ -1,5 +1,6 @@
+ config CPU_FREQ
+ bool "CPU Frequency scaling"
++ depends on !PROCESSOR_EXTERNAL_CONTROL
+ help
+ CPU Frequency scaling allows you to change the clock speed of
+ CPUs on the fly. This is a nice method to save power, because
+diff -rpuN linux-2.6.18.8/drivers/i2c/busses/i2c-i801.c linux-2.6.18-xen-3.3.0/drivers/i2c/busses/i2c-i801.c
+--- linux-2.6.18.8/drivers/i2c/busses/i2c-i801.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/i2c/busses/i2c-i801.c 2008-08-21 11:36:07.000000000 +0200
+@@ -33,6 +33,9 @@
ICH7 27DA
ESB2 269B
ICH8 283E
+ ICH9 2930
++ ICH10 3A30
++ ICH10 3A60
This driver supports several versions of Intel's I/O Controller Hubs (ICH).
For SMBus support, they are similar to the PIIX4 and are part
of Intel's '810' and other chipsets.
-@@ -457,6 +458,7 @@ static struct pci_device_id i801_ids[] =
+@@ -457,6 +460,9 @@ static struct pci_device_id i801_ids[] =
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_17) },
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB2_17) },
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_5) },
+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH9_6) },
++ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH10_4) },
++ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH10_5) },
{ 0, }
};
-diff -rpuN linux-2.6.18.8/drivers/ide/ide-lib.c linux-2.6.18-xen-3.2.0/drivers/ide/ide-lib.c
---- linux-2.6.18.8/drivers/ide/ide-lib.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/ide/ide-lib.c 2008-02-15 16:21:58.000000000 -0800
+diff -rpuN linux-2.6.18.8/drivers/i2c/busses/Kconfig linux-2.6.18-xen-3.3.0/drivers/i2c/busses/Kconfig
+--- linux-2.6.18.8/drivers/i2c/busses/Kconfig 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/i2c/busses/Kconfig 2008-08-21 11:36:07.000000000 +0200
+@@ -125,6 +125,8 @@ config I2C_I801
+ ICH7
+ ESB2
+ ICH8
++ ICH9
++ ICH10
+
+ This driver can also be built as a module. If so, the module
+ will be called i2c-i801.
+diff -rpuN linux-2.6.18.8/drivers/ide/ide-lib.c linux-2.6.18-xen-3.3.0/drivers/ide/ide-lib.c
+--- linux-2.6.18.8/drivers/ide/ide-lib.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/ide/ide-lib.c 2008-08-21 11:36:07.000000000 +0200
@@ -408,10 +408,10 @@ void ide_toggle_bounce(ide_drive_t *driv
{
u64 addr = BLK_BOUNCE_HIGH; /* dma64_addr_t */
@@ -74927,9 +76143,64 @@ diff -rpuN linux-2.6.18.8/drivers/ide/ide-lib.c linux-2.6.18-xen-3.2.0/drivers/i
addr = HWIF(drive)->pci_dev->dma_mask;
}
-diff -rpuN linux-2.6.18.8/drivers/net/r8169.c linux-2.6.18-xen-3.2.0/drivers/net/r8169.c
---- linux-2.6.18.8/drivers/net/r8169.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/net/r8169.c 2008-02-15 16:22:00.000000000 -0800
+diff -rpuN linux-2.6.18.8/drivers/ide/pci/atiixp.c linux-2.6.18-xen-3.3.0/drivers/ide/pci/atiixp.c
+--- linux-2.6.18.8/drivers/ide/pci/atiixp.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/ide/pci/atiixp.c 2008-08-21 11:36:07.000000000 +0200
+@@ -348,6 +348,7 @@ static struct pci_device_id atiixp_pci_t
+ { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP300_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+ { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP400_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+ { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
++ { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP700_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+ { 0, },
+ };
+ MODULE_DEVICE_TABLE(pci, atiixp_pci_tbl);
+diff -rpuN linux-2.6.18.8/drivers/input/gameport/gameport.c linux-2.6.18-xen-3.3.0/drivers/input/gameport/gameport.c
+--- linux-2.6.18.8/drivers/input/gameport/gameport.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/input/gameport/gameport.c 2008-08-21 11:36:07.000000000 +0200
+@@ -37,8 +37,6 @@ EXPORT_SYMBOL(gameport_unregister_driver
+ EXPORT_SYMBOL(gameport_open);
+ EXPORT_SYMBOL(gameport_close);
+ EXPORT_SYMBOL(gameport_rescan);
+-EXPORT_SYMBOL(gameport_cooked_read);
+-EXPORT_SYMBOL(gameport_set_name);
+ EXPORT_SYMBOL(gameport_set_phys);
+ EXPORT_SYMBOL(gameport_start_polling);
+ EXPORT_SYMBOL(gameport_stop_polling);
+diff -rpuN linux-2.6.18.8/drivers/Makefile linux-2.6.18-xen-3.3.0/drivers/Makefile
+--- linux-2.6.18.8/drivers/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/Makefile 2008-08-21 11:36:07.000000000 +0200
+@@ -31,6 +31,7 @@ obj-y += base/ block/ misc/ mfd/ net/
+ obj-$(CONFIG_NUBUS) += nubus/
+ obj-$(CONFIG_ATM) += atm/
+ obj-$(CONFIG_PPC_PMAC) += macintosh/
++obj-$(CONFIG_XEN) += xen/
+ obj-$(CONFIG_IDE) += ide/
+ obj-$(CONFIG_FC4) += fc4/
+ obj-$(CONFIG_SCSI) += scsi/
+diff -rpuN linux-2.6.18.8/drivers/net/Kconfig linux-2.6.18-xen-3.3.0/drivers/net/Kconfig
+--- linux-2.6.18.8/drivers/net/Kconfig 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/net/Kconfig 2008-08-21 11:36:07.000000000 +0200
+@@ -2399,6 +2399,8 @@ config MYRI10GE
+ <file:Documentation/networking/net-modules.txt>. The module
+ will be called myri10ge.
+
++source "drivers/net/sfc/Kconfig"
++
+ endmenu
+
+ source "drivers/net/tokenring/Kconfig"
+diff -rpuN linux-2.6.18.8/drivers/net/Makefile linux-2.6.18-xen-3.3.0/drivers/net/Makefile
+--- linux-2.6.18.8/drivers/net/Makefile 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/net/Makefile 2008-08-21 11:36:07.000000000 +0200
+@@ -219,3 +219,5 @@ obj-$(CONFIG_NETCONSOLE) += netconsole.o
+
+ obj-$(CONFIG_FS_ENET) += fs_enet/
+
++obj-$(CONFIG_SFC) += sfc/
++
+diff -rpuN linux-2.6.18.8/drivers/net/r8169.c linux-2.6.18-xen-3.3.0/drivers/net/r8169.c
+--- linux-2.6.18.8/drivers/net/r8169.c 2007-02-24 00:52:30.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/net/r8169.c 2008-08-21 11:36:07.000000000 +0200
@@ -6,26 +6,26 @@
History:
Feb 4 2002 - created initially by ShuChen <shuchen@realtek.com.tw>.
@@ -76241,9 +77512,42687 @@ diff -rpuN linux-2.6.18.8/drivers/net/r8169.c linux-2.6.18-xen-3.2.0/drivers/net
}
static void __exit
-diff -rpuN linux-2.6.18.8/drivers/oprofile/buffer_sync.c linux-2.6.18-xen-3.2.0/drivers/oprofile/buffer_sync.c
---- linux-2.6.18.8/drivers/oprofile/buffer_sync.c 2007-02-23 15:52:30.000000000 -0800
-+++ linux-2.6.18-xen-3.2.0/drivers/oprofile/buffer_sync.c 2008-02-15 16:22:00.000000000 -0800
+diff -rpuN linux-2.6.18.8/drivers/net/sfc/alaska.c linux-2.6.18-xen-3.3.0/drivers/net/sfc/alaska.c
+--- linux-2.6.18.8/drivers/net/sfc/alaska.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/net/sfc/alaska.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,159 @@
++/****************************************************************************
++ * Driver for Solarflare network controllers
++ * (including support for SFE4001 10GBT NIC)
++ *
++ * Copyright 2005: Fen Systems Ltd.
++ * Copyright 2006-2007: Solarflare Communications Inc,
++ * 9501 Jeronimo Road, Suite 250,
++ * Irvine, CA 92618, USA
++ *
++ * Initially developed by Michael Brown <mbrown@fensystems.co.uk>
++ * Maintained by Solarflare Communications <linux-net-drivers@solarflare.com>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 as published
++ * by the Free Software Foundation, incorporated herein by reference.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ ****************************************************************************
++ */
++
++#include "net_driver.h"
++#include <linux/ethtool.h>
++#include "gmii.h"
++#include "phy.h"
++
++/* Marvell 88E1111 "Alaska" PHY control */
++#define ALASKA_PHY_SPECIFIC 16
++#define ALASKA_ALLOW_SLEEP 0x0200
++
++#define ALASKA_EXTENDED_CONTROL 20
++#define EXTENDED_LINE_LOOPBACK 0x8000
++
++#define ALASKA_LED_CONTROL 24
++#define LED_BLINK_MASK 0x0700
++#define LED_BLINK_FAST 0x0100
++#define LED_BLINK_SLOW 0x0300
++#define LED_TX_CTRL_MASK 0x0041
++#define LED_TX_CTRL_LINK_AND_ACTIVITY 0x0001
++
++#define ALASKA_LED_OVERRIDE 25
++#define LED_LINK1000_MASK 0x0030
++#define LED_LINK1000_BLINK 0x0010
++#define LED_TX_MASK 0x0003
++#define LED_TX_BLINK 0x0001
++
++static void alaska_reconfigure(struct efx_nic *efx)
++{
++ struct mii_if_info *gmii = &efx->mii;
++ u32 bmcr, phy_ext;
++
++ /* Configure line loopback if requested */
++ phy_ext = gmii->mdio_read(gmii->dev, gmii->phy_id,
++ ALASKA_EXTENDED_CONTROL);
++ if (efx->loopback_mode == LOOPBACK_NETWORK)
++ phy_ext |= EXTENDED_LINE_LOOPBACK;
++ else
++ phy_ext &= ~EXTENDED_LINE_LOOPBACK;
++ gmii->mdio_write(gmii->dev, gmii->phy_id, ALASKA_EXTENDED_CONTROL,
++ phy_ext);
++
++ /* Configure PHY loopback if requested */
++ bmcr = gmii->mdio_read(gmii->dev, gmii->phy_id, MII_BMCR);
++ if (efx->loopback_mode == LOOPBACK_PHY)
++ bmcr |= BMCR_LOOPBACK;
++ else
++ bmcr &= ~BMCR_LOOPBACK;
++ gmii->mdio_write(gmii->dev, gmii->phy_id, MII_BMCR, bmcr);
++
++ /* Read link up status */
++ if (efx->loopback_mode == LOOPBACK_NONE)
++ efx->link_up = mii_link_ok(gmii);
++ else
++ efx->link_up = 1;
++
++ /* Determine link options from PHY */
++ if (gmii->force_media) {
++ efx->link_options = gmii_forced_result(bmcr);
++ } else {
++ int lpa = gmii_lpa(gmii);
++ int adv = gmii_advertised(gmii);
++ efx->link_options = gmii_nway_result(adv & lpa);
++ }
++}
++
++static void alaska_clear_interrupt(struct efx_nic *efx)
++{
++ struct mii_if_info *gmii = &efx->mii;
++
++ /* Read interrupt status register to clear */
++ gmii->mdio_read(gmii->dev, gmii->phy_id, GMII_ISR);
++}
++
++static int alaska_init(struct efx_nic *efx)
++{
++ struct mii_if_info *gmii = &efx->mii;
++ u32 ier, leds, ctrl_1g, phy_spec;
++
++ /* Read ISR to clear any outstanding PHY interrupts */
++ gmii->mdio_read(gmii->dev, gmii->phy_id, GMII_ISR);
++
++ /* Enable PHY interrupts */
++ ier = gmii->mdio_read(gmii->dev, gmii->phy_id, GMII_IER);
++ ier |= IER_LINK_CHG;
++ gmii->mdio_write(gmii->dev, gmii->phy_id, GMII_IER, ier);
++
++ /* Remove 1G half-duplex as unsupported in Mentor MAC */
++ ctrl_1g = gmii->mdio_read(gmii->dev, gmii->phy_id, MII_CTRL1000);
++ ctrl_1g &= ~(ADVERTISE_1000HALF);
++ gmii->mdio_write(gmii->dev, gmii->phy_id, MII_CTRL1000, ctrl_1g);
++
++ /*
++ * The PHY can save power when there is no external connection
++ * (sleep mode). However, this is incompatible with PHY
++ * loopback, and if enable and disable it quickly the PHY can
++ * go to sleep even when sleep mode is disabled. (SFC bug
++ * 9309.) Therefore we disable it all the time.
++ */
++ phy_spec = gmii->mdio_read(gmii->dev, gmii->phy_id,
++ ALASKA_PHY_SPECIFIC);
++ phy_spec &= ~ALASKA_ALLOW_SLEEP;
++ gmii->mdio_write(gmii->dev, gmii->phy_id, ALASKA_PHY_SPECIFIC,
++ phy_spec);
++
++ /* Configure LEDs */
++ leds = gmii->mdio_read(gmii->dev, gmii->phy_id, ALASKA_LED_CONTROL);
++ leds &= ~(LED_BLINK_MASK | LED_TX_CTRL_MASK);
++ leds |= (LED_BLINK_FAST | LED_TX_CTRL_LINK_AND_ACTIVITY);
++ gmii->mdio_write(gmii->dev, gmii->phy_id, ALASKA_LED_CONTROL, leds);
++
++ return 0;
++}
++
++static void alaska_fini(struct efx_nic *efx)
++{
++ struct mii_if_info *gmii = &efx->mii;
++ u32 ier;
++
++ /* Disable PHY interrupts */
++ ier = gmii->mdio_read(gmii->dev, gmii->phy_id, GMII_IER);
++ ier &= ~IER_LINK_CHG;
++ gmii->mdio_write(gmii->dev, gmii->phy_id, GMII_IER, ier);
++}
++
++
++struct efx_phy_operations alaska_phy_operations = {
++ .init = alaska_init,
++ .fini = alaska_fini,
++ .reconfigure = alaska_reconfigure,
++ .clear_interrupt = alaska_clear_interrupt,
++ .loopbacks = (1 << LOOPBACK_PHY) | (1 << LOOPBACK_NETWORK),
++ .startup_loopback = LOOPBACK_PHY,
++};
+diff -rpuN linux-2.6.18.8/drivers/net/sfc/bitfield.h linux-2.6.18-xen-3.3.0/drivers/net/sfc/bitfield.h
+--- linux-2.6.18.8/drivers/net/sfc/bitfield.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/net/sfc/bitfield.h 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,544 @@
++/****************************************************************************
++ * Driver for Solarflare network controllers
++ * (including support for SFE4001 10GBT NIC)
++ *
++ * Copyright 2005-2006: Fen Systems Ltd.
++ * Copyright 2006-2008: Solarflare Communications Inc,
++ * 9501 Jeronimo Road, Suite 250,
++ * Irvine, CA 92618, USA
++ *
++ * Initially developed by Michael Brown <mbrown@fensystems.co.uk>
++ * Maintained by Solarflare Communications <linux-net-drivers@solarflare.com>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 as published
++ * by the Free Software Foundation, incorporated herein by reference.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ ****************************************************************************
++ */
++
++#ifndef EFX_BITFIELD_H
++#define EFX_BITFIELD_H
++
++/*
++ * Efx bitfield access
++ *
++ * Efx NICs make extensive use of bitfields up to 128 bits
++ * wide. Since there is no native 128-bit datatype on most systems,
++ * and since 64-bit datatypes are inefficient on 32-bit systems and
++ * vice versa, we wrap accesses in a way that uses the most efficient
++ * datatype.
++ *
++ * The NICs are PCI devices and therefore little-endian. Since most
++ * of the quantities that we deal with are DMAed to/from host memory,
++ * we define our datatypes (efx_oword_t, efx_qword_t and
++ * efx_dword_t) to be little-endian.
++ */
++
++/* Lowest bit numbers and widths */
++#define EFX_DUMMY_FIELD_LBN 0
++#define EFX_DUMMY_FIELD_WIDTH 0
++#define EFX_DWORD_0_LBN 0
++#define EFX_DWORD_0_WIDTH 32
++#define EFX_DWORD_1_LBN 32
++#define EFX_DWORD_1_WIDTH 32
++#define EFX_DWORD_2_LBN 64
++#define EFX_DWORD_2_WIDTH 32
++#define EFX_DWORD_3_LBN 96
++#define EFX_DWORD_3_WIDTH 32
++
++#define EFX_BYTE 1
++#define EFX_WORD 2
++#define EFX_DWORD 4
++#define EFX_OWORD 8
++
++/* Specified attribute (e.g. LBN) of the specified field */
++#define EFX_VAL(field, attribute) field ## _ ## attribute
++/* Low bit number of the specified field */
++#define EFX_LOW_BIT(field) EFX_VAL(field, LBN)
++/* Bit width of the specified field */
++#define EFX_WIDTH(field) EFX_VAL(field, WIDTH)
++/* High bit number of the specified field */
++#define EFX_HIGH_BIT(field) (EFX_LOW_BIT(field) + EFX_WIDTH(field) - 1)
++/* Mask equal in width to the specified field.
++ *
++ * For example, a field with width 5 would have a mask of 0x1f.
++ *
++ * The maximum width mask that can be generated is 64 bits.
++ */
++#define EFX_MASK64(field) \
++ (EFX_WIDTH(field) == 64 ? ~((u64) 0) : \
++ (((((u64) 1) << EFX_WIDTH(field))) - 1))
++
++/* Mask equal in width to the specified field.
++ *
++ * For example, a field with width 5 would have a mask of 0x1f.
++ *
++ * The maximum width mask that can be generated is 32 bits. Use
++ * EFX_MASK64 for higher width fields.
++ */
++#define EFX_MASK32(field) \
++ (EFX_WIDTH(field) == 32 ? ~((u32) 0) : \
++ (((((u32) 1) << EFX_WIDTH(field))) - 1))
++
++/* A doubleword (i.e. 4 byte) datatype - little-endian in HW */
++typedef union efx_dword {
++ __le32 u32[1];
++} efx_dword_t;
++
++/* A quadword (i.e. 8 byte) datatype - little-endian in HW */
++typedef union efx_qword {
++ __le64 u64[1];
++ __le32 u32[2];
++ efx_dword_t dword[2];
++} efx_qword_t;
++
++/* An octword (eight-word, i.e. 16 byte) datatype - little-endian in HW */
++typedef union efx_oword {
++ __le64 u64[2];
++ efx_qword_t qword[2];
++ __le32 u32[4];
++ efx_dword_t dword[4];
++} efx_oword_t;
++
++/* Format string and value expanders for printk */
++#define EFX_DWORD_FMT "%08x"
++#define EFX_QWORD_FMT "%08x:%08x"
++#define EFX_OWORD_FMT "%08x:%08x:%08x:%08x"
++#define EFX_DWORD_VAL(dword) \
++ ((unsigned int) le32_to_cpu((dword).u32[0]))
++#define EFX_QWORD_VAL(qword) \
++ ((unsigned int) le32_to_cpu((qword).u32[1])), \
++ ((unsigned int) le32_to_cpu((qword).u32[0]))
++#define EFX_OWORD_VAL(oword) \
++ ((unsigned int) le32_to_cpu((oword).u32[3])), \
++ ((unsigned int) le32_to_cpu((oword).u32[2])), \
++ ((unsigned int) le32_to_cpu((oword).u32[1])), \
++ ((unsigned int) le32_to_cpu((oword).u32[0]))
++
++/*
++ * Extract bit field portion [low,high) from the native-endian element
++ * which contains bits [min,max).
++ *
++ * For example, suppose "element" represents the high 32 bits of a
++ * 64-bit value, and we wish to extract the bits belonging to the bit
++ * field occupying bits 28-45 of this 64-bit value.
++ *
++ * Then EFX_EXTRACT ( element, 32, 63, 28, 45 ) would give
++ *
++ * ( element ) << 4
++ *
++ * The result will contain the relevant bits filled in in the range
++ * [0,high-low), with garbage in bits [high-low+1,...).
++ */
++#define EFX_EXTRACT_NATIVE(native_element, min, max, low, high) \
++ (((low > max) || (high < min)) ? 0 : \
++ ((low > min) ? \
++ ((native_element) >> (low - min)) : \
++ ((native_element) << (min - low))))
++
++/*
++ * Extract bit field portion [low,high) from the 64-bit little-endian
++ * element which contains bits [min,max)
++ */
++#define EFX_EXTRACT64(element, min, max, low, high) \
++ EFX_EXTRACT_NATIVE(le64_to_cpu(element), min, max, low, high)
++
++/*
++ * Extract bit field portion [low,high) from the 32-bit little-endian
++ * element which contains bits [min,max)
++ */
++#define EFX_EXTRACT32(element, min, max, low, high) \
++ EFX_EXTRACT_NATIVE(le32_to_cpu(element), min, max, low, high)
++
++#define EFX_EXTRACT_OWORD64(oword, low, high) \
++ (EFX_EXTRACT64((oword).u64[0], 0, 63, low, high) | \
++ EFX_EXTRACT64((oword).u64[1], 64, 127, low, high))
++
++#define EFX_EXTRACT_QWORD64(qword, low, high) \
++ EFX_EXTRACT64((qword).u64[0], 0, 63, low, high)
++
++#define EFX_EXTRACT_OWORD32(oword, low, high) \
++ (EFX_EXTRACT32((oword).u32[0], 0, 31, low, high) | \
++ EFX_EXTRACT32((oword).u32[1], 32, 63, low, high) | \
++ EFX_EXTRACT32((oword).u32[2], 64, 95, low, high) | \
++ EFX_EXTRACT32((oword).u32[3], 96, 127, low, high))
++
++#define EFX_EXTRACT_QWORD32(qword, low, high) \
++ (EFX_EXTRACT32((qword).u32[0], 0, 31, low, high) | \
++ EFX_EXTRACT32((qword).u32[1], 32, 63, low, high))
++
++#define EFX_EXTRACT_DWORD(dword, low, high) \
++ EFX_EXTRACT32((dword).u32[0], 0, 31, low, high)
++
++#define EFX_OWORD_FIELD64(oword, field) \
++ (EFX_EXTRACT_OWORD64(oword, EFX_LOW_BIT(field), EFX_HIGH_BIT(field)) \
++ & EFX_MASK64(field))
++
++#define EFX_QWORD_FIELD64(qword, field) \
++ (EFX_EXTRACT_QWORD64(qword, EFX_LOW_BIT(field), EFX_HIGH_BIT(field)) \
++ & EFX_MASK64(field))
++
++#define EFX_OWORD_FIELD32(oword, field) \
++ (EFX_EXTRACT_OWORD32(oword, EFX_LOW_BIT(field), EFX_HIGH_BIT(field)) \
++ & EFX_MASK32(field))
++
++#define EFX_QWORD_FIELD32(qword, field) \
++ (EFX_EXTRACT_QWORD32(qword, EFX_LOW_BIT(field), EFX_HIGH_BIT(field)) \
++ & EFX_MASK32(field))
++
++#define EFX_DWORD_FIELD(dword, field) \
++ (EFX_EXTRACT_DWORD(dword, EFX_LOW_BIT(field), EFX_HIGH_BIT(field)) \
++ & EFX_MASK32(field))
++
++#define EFX_OWORD_IS_ZERO64(oword) \
++ (((oword).u64[0] | (oword).u64[1]) == (__force __le64) 0)
++
++#define EFX_QWORD_IS_ZERO64(qword) \
++ (((qword).u64[0]) == (__force __le64) 0)
++
++#define EFX_OWORD_IS_ZERO32(oword) \
++ (((oword).u32[0] | (oword).u32[1] | (oword).u32[2] | (oword).u32[3]) \
++ == (__force __le32) 0)
++
++#define EFX_QWORD_IS_ZERO32(qword) \
++ (((qword).u32[0] | (qword).u32[1]) == (__force __le32) 0)
++
++#define EFX_DWORD_IS_ZERO(dword) \
++ (((dword).u32[0]) == (__force __le32) 0)
++
++#define EFX_OWORD_IS_ALL_ONES64(oword) \
++ (((oword).u64[0] & (oword).u64[1]) == ~((__force __le64) 0))
++
++#define EFX_QWORD_IS_ALL_ONES64(qword) \
++ ((qword).u64[0] == ~((__force __le64) 0))
++
++#define EFX_OWORD_IS_ALL_ONES32(oword) \
++ (((oword).u32[0] & (oword).u32[1] & (oword).u32[2] & (oword).u32[3]) \
++ == ~((__force __le32) 0))
++
++#define EFX_QWORD_IS_ALL_ONES32(qword) \
++ (((qword).u32[0] & (qword).u32[1]) == ~((__force __le32) 0))
++
++#define EFX_DWORD_IS_ALL_ONES(dword) \
++ ((dword).u32[0] == ~((__force __le32) 0))
++
++#if BITS_PER_LONG == 64
++#define EFX_OWORD_FIELD EFX_OWORD_FIELD64
++#define EFX_QWORD_FIELD EFX_QWORD_FIELD64
++#define EFX_OWORD_IS_ZERO EFX_OWORD_IS_ZERO64
++#define EFX_QWORD_IS_ZERO EFX_QWORD_IS_ZERO64
++#define EFX_OWORD_IS_ALL_ONES EFX_OWORD_IS_ALL_ONES64
++#define EFX_QWORD_IS_ALL_ONES EFX_QWORD_IS_ALL_ONES64
++#else
++#define EFX_OWORD_FIELD EFX_OWORD_FIELD32
++#define EFX_QWORD_FIELD EFX_QWORD_FIELD32
++#define EFX_OWORD_IS_ZERO EFX_OWORD_IS_ZERO32
++#define EFX_QWORD_IS_ZERO EFX_QWORD_IS_ZERO32
++#define EFX_OWORD_IS_ALL_ONES EFX_OWORD_IS_ALL_ONES32
++#define EFX_QWORD_IS_ALL_ONES EFX_QWORD_IS_ALL_ONES32
++#endif
++
++/*
++ * Construct bit field portion
++ *
++ * Creates the portion of the bit field [low,high) that lies within
++ * the range [min,max).
++ */
++#define EFX_INSERT_NATIVE64(min, max, low, high, value) \
++ (((low > max) || (high < min)) ? 0 : \
++ ((low > min) ? \
++ (((u64) (value)) << (low - min)) : \
++ (((u64) (value)) >> (min - low))))
++
++#define EFX_INSERT_NATIVE32(min, max, low, high, value) \
++ (((low > max) || (high < min)) ? 0 : \
++ ((low > min) ? \
++ (((u32) (value)) << (low - min)) : \
++ (((u32) (value)) >> (min - low))))
++
++#define EFX_INSERT_NATIVE(min, max, low, high, value) \
++ ((((max - min) >= 32) || ((high - low) >= 32)) ? \
++ EFX_INSERT_NATIVE64(min, max, low, high, value) : \
++ EFX_INSERT_NATIVE32(min, max, low, high, value))
++
++/*
++ * Construct bit field portion
++ *
++ * Creates the portion of the named bit field that lies within the
++ * range [min,max).
++ */
++#define EFX_INSERT_FIELD_NATIVE(min, max, field, value) \
++ EFX_INSERT_NATIVE(min, max, EFX_LOW_BIT(field), \
++ EFX_HIGH_BIT(field), value)
++
++/*
++ * Construct bit field
++ *
++ * Creates the portion of the named bit fields that lie within the
++ * range [min,max).
++ */
++#define EFX_INSERT_FIELDS_NATIVE(min, max, \
++ field1, value1, \
++ field2, value2, \
++ field3, value3, \
++ field4, value4, \
++ field5, value5, \
++ field6, value6, \
++ field7, value7, \
++ field8, value8, \
++ field9, value9, \
++ field10, value10) \
++ (EFX_INSERT_FIELD_NATIVE((min), (max), field1, (value1)) | \
++ EFX_INSERT_FIELD_NATIVE((min), (max), field2, (value2)) | \
++ EFX_INSERT_FIELD_NATIVE((min), (max), field3, (value3)) | \
++ EFX_INSERT_FIELD_NATIVE((min), (max), field4, (value4)) | \
++ EFX_INSERT_FIELD_NATIVE((min), (max), field5, (value5)) | \
++ EFX_INSERT_FIELD_NATIVE((min), (max), field6, (value6)) | \
++ EFX_INSERT_FIELD_NATIVE((min), (max), field7, (value7)) | \
++ EFX_INSERT_FIELD_NATIVE((min), (max), field8, (value8)) | \
++ EFX_INSERT_FIELD_NATIVE((min), (max), field9, (value9)) | \
++ EFX_INSERT_FIELD_NATIVE((min), (max), field10, (value10)))
++
++#define EFX_INSERT_FIELDS64(...) \
++ cpu_to_le64(EFX_INSERT_FIELDS_NATIVE(__VA_ARGS__))
++
++#define EFX_INSERT_FIELDS32(...) \
++ cpu_to_le32(EFX_INSERT_FIELDS_NATIVE(__VA_ARGS__))
++
++#define EFX_POPULATE_OWORD64(oword, ...) do { \
++ (oword).u64[0] = EFX_INSERT_FIELDS64(0, 63, __VA_ARGS__); \
++ (oword).u64[1] = EFX_INSERT_FIELDS64(64, 127, __VA_ARGS__); \
++ } while (0)
++
++#define EFX_POPULATE_QWORD64(qword, ...) do { \
++ (qword).u64[0] = EFX_INSERT_FIELDS64(0, 63, __VA_ARGS__); \
++ } while (0)
++
++#define EFX_POPULATE_OWORD32(oword, ...) do { \
++ (oword).u32[0] = EFX_INSERT_FIELDS32(0, 31, __VA_ARGS__); \
++ (oword).u32[1] = EFX_INSERT_FIELDS32(32, 63, __VA_ARGS__); \
++ (oword).u32[2] = EFX_INSERT_FIELDS32(64, 95, __VA_ARGS__); \
++ (oword).u32[3] = EFX_INSERT_FIELDS32(96, 127, __VA_ARGS__); \
++ } while (0)
++
++#define EFX_POPULATE_QWORD32(qword, ...) do { \
++ (qword).u32[0] = EFX_INSERT_FIELDS32(0, 31, __VA_ARGS__); \
++ (qword).u32[1] = EFX_INSERT_FIELDS32(32, 63, __VA_ARGS__); \
++ } while (0)
++
++#define EFX_POPULATE_DWORD(dword, ...) do { \
++ (dword).u32[0] = EFX_INSERT_FIELDS32(0, 31, __VA_ARGS__); \
++ } while (0)
++
++#if BITS_PER_LONG == 64
++#define EFX_POPULATE_OWORD EFX_POPULATE_OWORD64
++#define EFX_POPULATE_QWORD EFX_POPULATE_QWORD64
++#else
++#define EFX_POPULATE_OWORD EFX_POPULATE_OWORD32
++#define EFX_POPULATE_QWORD EFX_POPULATE_QWORD32
++#endif
++
++/* Populate an octword field with various numbers of arguments */
++#define EFX_POPULATE_OWORD_10 EFX_POPULATE_OWORD
++#define EFX_POPULATE_OWORD_9(oword, ...) \
++ EFX_POPULATE_OWORD_10(oword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_OWORD_8(oword, ...) \
++ EFX_POPULATE_OWORD_9(oword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_OWORD_7(oword, ...) \
++ EFX_POPULATE_OWORD_8(oword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_OWORD_6(oword, ...) \
++ EFX_POPULATE_OWORD_7(oword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_OWORD_5(oword, ...) \
++ EFX_POPULATE_OWORD_6(oword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_OWORD_4(oword, ...) \
++ EFX_POPULATE_OWORD_5(oword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_OWORD_3(oword, ...) \
++ EFX_POPULATE_OWORD_4(oword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_OWORD_2(oword, ...) \
++ EFX_POPULATE_OWORD_3(oword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_OWORD_1(oword, ...) \
++ EFX_POPULATE_OWORD_2(oword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_ZERO_OWORD(oword) \
++ EFX_POPULATE_OWORD_1(oword, EFX_DUMMY_FIELD, 0)
++#define EFX_SET_OWORD(oword) \
++ EFX_POPULATE_OWORD_4(oword, \
++ EFX_DWORD_0, 0xffffffff, \
++ EFX_DWORD_1, 0xffffffff, \
++ EFX_DWORD_2, 0xffffffff, \
++ EFX_DWORD_3, 0xffffffff)
++
++/* Populate a quadword field with various numbers of arguments */
++#define EFX_POPULATE_QWORD_10 EFX_POPULATE_QWORD
++#define EFX_POPULATE_QWORD_9(qword, ...) \
++ EFX_POPULATE_QWORD_10(qword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_QWORD_8(qword, ...) \
++ EFX_POPULATE_QWORD_9(qword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_QWORD_7(qword, ...) \
++ EFX_POPULATE_QWORD_8(qword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_QWORD_6(qword, ...) \
++ EFX_POPULATE_QWORD_7(qword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_QWORD_5(qword, ...) \
++ EFX_POPULATE_QWORD_6(qword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_QWORD_4(qword, ...) \
++ EFX_POPULATE_QWORD_5(qword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_QWORD_3(qword, ...) \
++ EFX_POPULATE_QWORD_4(qword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_QWORD_2(qword, ...) \
++ EFX_POPULATE_QWORD_3(qword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_QWORD_1(qword, ...) \
++ EFX_POPULATE_QWORD_2(qword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_ZERO_QWORD(qword) \
++ EFX_POPULATE_QWORD_1(qword, EFX_DUMMY_FIELD, 0)
++#define EFX_SET_QWORD(qword) \
++ EFX_POPULATE_QWORD_2(qword, \
++ EFX_DWORD_0, 0xffffffff, \
++ EFX_DWORD_1, 0xffffffff)
++
++/* Populate a dword field with various numbers of arguments */
++#define EFX_POPULATE_DWORD_10 EFX_POPULATE_DWORD
++#define EFX_POPULATE_DWORD_9(dword, ...) \
++ EFX_POPULATE_DWORD_10(dword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_DWORD_8(dword, ...) \
++ EFX_POPULATE_DWORD_9(dword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_DWORD_7(dword, ...) \
++ EFX_POPULATE_DWORD_8(dword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_DWORD_6(dword, ...) \
++ EFX_POPULATE_DWORD_7(dword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_DWORD_5(dword, ...) \
++ EFX_POPULATE_DWORD_6(dword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_DWORD_4(dword, ...) \
++ EFX_POPULATE_DWORD_5(dword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_DWORD_3(dword, ...) \
++ EFX_POPULATE_DWORD_4(dword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_DWORD_2(dword, ...) \
++ EFX_POPULATE_DWORD_3(dword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_POPULATE_DWORD_1(dword, ...) \
++ EFX_POPULATE_DWORD_2(dword, EFX_DUMMY_FIELD, 0, __VA_ARGS__)
++#define EFX_ZERO_DWORD(dword) \
++ EFX_POPULATE_DWORD_1(dword, EFX_DUMMY_FIELD, 0)
++#define EFX_SET_DWORD(dword) \
++ EFX_POPULATE_DWORD_1(dword, EFX_DWORD_0, 0xffffffff)
++
++/*
++ * Modify a named field within an already-populated structure. Used
++ * for read-modify-write operations.
++ *
++ */
++
++#define EFX_INVERT_OWORD(oword) do { \
++ (oword).u64[0] = ~((oword).u64[0]); \
++ (oword).u64[1] = ~((oword).u64[1]); \
++ } while (0)
++
++#define EFX_INSERT_FIELD64(...) \
++ cpu_to_le64(EFX_INSERT_FIELD_NATIVE(__VA_ARGS__))
++
++#define EFX_INSERT_FIELD32(...) \
++ cpu_to_le32(EFX_INSERT_FIELD_NATIVE(__VA_ARGS__))
++
++#define EFX_INPLACE_MASK64(min, max, field) \
++ EFX_INSERT_FIELD64(min, max, field, EFX_MASK64(field))
++
++#define EFX_INPLACE_MASK32(min, max, field) \
++ EFX_INSERT_FIELD32(min, max, field, EFX_MASK32(field))
++
++#define EFX_SET_OWORD_FIELD64(oword, field, value) do { \
++ (oword).u64[0] = (((oword).u64[0] \
++ & ~EFX_INPLACE_MASK64(0, 63, field)) \
++ | EFX_INSERT_FIELD64(0, 63, field, value)); \
++ (oword).u64[1] = (((oword).u64[1] \
++ & ~EFX_INPLACE_MASK64(64, 127, field)) \
++ | EFX_INSERT_FIELD64(64, 127, field, value)); \
++ } while (0)
++
++#define EFX_SET_QWORD_FIELD64(qword, field, value) do { \
++ (qword).u64[0] = (((qword).u64[0] \
++ & ~EFX_INPLACE_MASK64(0, 63, field)) \
++ | EFX_INSERT_FIELD64(0, 63, field, value)); \
++ } while (0)
++
++#define EFX_SET_OWORD_FIELD32(oword, field, value) do { \
++ (oword).u32[0] = (((oword).u32[0] \
++ & ~EFX_INPLACE_MASK32(0, 31, field)) \
++ | EFX_INSERT_FIELD32(0, 31, field, value)); \
++ (oword).u32[1] = (((oword).u32[1] \
++ & ~EFX_INPLACE_MASK32(32, 63, field)) \
++ | EFX_INSERT_FIELD32(32, 63, field, value)); \
++ (oword).u32[2] = (((oword).u32[2] \
++ & ~EFX_INPLACE_MASK32(64, 95, field)) \
++ | EFX_INSERT_FIELD32(64, 95, field, value)); \
++ (oword).u32[3] = (((oword).u32[3] \
++ & ~EFX_INPLACE_MASK32(96, 127, field)) \
++ | EFX_INSERT_FIELD32(96, 127, field, value)); \
++ } while (0)
++
++#define EFX_SET_QWORD_FIELD32(qword, field, value) do { \
++ (qword).u32[0] = (((qword).u32[0] \
++ & ~EFX_INPLACE_MASK32(0, 31, field)) \
++ | EFX_INSERT_FIELD32(0, 31, field, value)); \
++ (qword).u32[1] = (((qword).u32[1] \
++ & ~EFX_INPLACE_MASK32(32, 63, field)) \
++ | EFX_INSERT_FIELD32(32, 63, field, value)); \
++ } while (0)
++
++#define EFX_SET_DWORD_FIELD(dword, field, value) do { \
++ (dword).u32[0] = (((dword).u32[0] \
++ & ~EFX_INPLACE_MASK32(0, 31, field)) \
++ | EFX_INSERT_FIELD32(0, 31, field, value)); \
++ } while (0)
++
++#if BITS_PER_LONG == 64
++#define EFX_SET_OWORD_FIELD EFX_SET_OWORD_FIELD64
++#define EFX_SET_QWORD_FIELD EFX_SET_QWORD_FIELD64
++#else
++#define EFX_SET_OWORD_FIELD EFX_SET_OWORD_FIELD32
++#define EFX_SET_QWORD_FIELD EFX_SET_QWORD_FIELD32
++#endif
++
++#define EFX_SET_OWORD_FIELD_VER(efx, oword, field, value) do { \
++ if (FALCON_REV(efx) == FALCON_REV_B0) { \
++ EFX_SET_OWORD_FIELD((oword), field##_B0, (value)); \
++ } else { \
++ EFX_SET_OWORD_FIELD((oword), field##_A1, (value)); \
++ } \
++} while (0)
++
++#define EFX_QWORD_FIELD_VER(efx, qword, field) \
++ (FALCON_REV(efx) == FALCON_REV_B0 ? \
++ EFX_QWORD_FIELD((qword), field##_B0) : \
++ EFX_QWORD_FIELD((qword), field##_A1))
++
++/* Used to avoid compiler warnings about shift range exceeding width
++ * of the data types when dma_addr_t is only 32 bits wide.
++ */
++#define DMA_ADDR_T_WIDTH (8 * sizeof(dma_addr_t))
++#define EFX_DMA_TYPE_WIDTH(width) \
++ (((width) < DMA_ADDR_T_WIDTH) ? (width) : DMA_ADDR_T_WIDTH)
++#define EFX_DMA_MAX_MASK ((DMA_ADDR_T_WIDTH == 64) ? \
++ ~((u64) 0) : ~((u32) 0))
++#define EFX_DMA_MASK(mask) ((mask) & EFX_DMA_MAX_MASK)
++
++/*
++ * Determine if a DMA address is over the 4GB threshold
++ *
++ * Defined in a slightly tortuous way to avoid compiler warnings.
++ */
++static inline int efx_is_over_4gb(dma_addr_t address)
++{
++ if (DMA_ADDR_T_WIDTH > 32)
++ return (((u64) address) >> 32) ? 1 : 0;
++ else
++ /* Can never be true */
++ return 0;
++}
++
++#endif /* EFX_BITFIELD_H */
+diff -rpuN linux-2.6.18.8/drivers/net/sfc/boards.c linux-2.6.18-xen-3.3.0/drivers/net/sfc/boards.c
+--- linux-2.6.18.8/drivers/net/sfc/boards.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/net/sfc/boards.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,528 @@
++/****************************************************************************
++ * Driver for Solarflare network controllers
++ * (including support for SFE4001 10GBT NIC)
++ *
++ * Copyright 2007: Solarflare Communications Inc,
++ * 9501 Jeronimo Road, Suite 250,
++ * Irvine, CA 92618, USA
++ *
++ * Developed by Solarflare Communications <linux-net-drivers@solarflare.com>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 as published
++ * by the Free Software Foundation, incorporated herein by reference.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ ****************************************************************************
++ */
++
++#include "net_driver.h"
++#include "phy.h"
++#include "lm87_support.h"
++#include "boards.h"
++#include "efx.h"
++
++/* Macros for unpacking the board revision */
++/* The revision info is in host byte order. */
++#define BOARD_TYPE(_rev) (_rev >> 8)
++#define BOARD_MAJOR(_rev) ((_rev >> 4) & 0xf)
++#define BOARD_MINOR(_rev) (_rev & 0xf)
++
++/* Blink support. If the PHY has no auto-blink mode so we hang it off a timer */
++#define BLINK_INTERVAL (HZ/2)
++
++static void blink_led_timer(unsigned long context)
++{
++ struct efx_nic *efx = (struct efx_nic *)context;
++ struct efx_blinker *bl = &efx->board_info.blinker;
++ efx->board_info.set_fault_led(efx, bl->state);
++ bl->state = !bl->state;
++ if (bl->resubmit) {
++ bl->timer.expires = jiffies + BLINK_INTERVAL;
++ add_timer(&bl->timer);
++ }
++}
++
++static void board_blink(struct efx_nic *efx, int blink)
++{
++ struct efx_blinker *blinker = &efx->board_info.blinker;
++
++ /* The rtnl mutex serialises all ethtool ioctls, so
++ * nothing special needs doing here. */
++ if (blink) {
++ blinker->resubmit = 1;
++ blinker->state = 0;
++ setup_timer(&blinker->timer, blink_led_timer,
++ (unsigned long)efx);
++ blinker->timer.expires = jiffies + BLINK_INTERVAL;
++ add_timer(&blinker->timer);
++ } else {
++ blinker->resubmit = 0;
++ if (blinker->timer.function)
++ del_timer_sync(&blinker->timer);
++ efx->board_info.set_fault_led(efx, 0);
++ }
++}
++
++
++struct sensor_conf {
++ const char *name;
++ const unsigned high;
++ const unsigned low;
++};
++
++#define NO_LIMIT ((unsigned)-1)
++
++#define LM87_SENSOR_BYTES (18)
++
++static int sensor_limits_to_bytes(const struct sensor_conf *limits,
++ int nlimits, u8 *bytes, int maxbytes)
++{
++ int i, nbytes;
++ nbytes = 0;
++ for (i = 0; i < nlimits; i++) {
++ bytes[nbytes++] = limits[i].high;
++ if (limits[i].low != NO_LIMIT)
++ bytes[nbytes++] = limits[i].low;
++ /* We may have overrun by one at this point, but this test
++ * should only trigger in development drivers as the sizes
++ * are not dynamic. */
++ if (nbytes > maxbytes) {
++ printk(KERN_ERR "%s: out of space!\n", __func__);
++ break;
++ }
++ }
++ return nbytes;
++}
++
++/*****************************************************************************
++ * Support for the SFE4002
++ *
++ */
++/* LM87 configuration data for the sensor on the SFE4002 board */
++static const struct sensor_conf sfe4002_lm87_limits[] = {
++ {"1.8V line", 0x91, 0x83}, /* 2.5V sensor, scaled for 1.8V */
++ {"1.2V line", 0x5a, 0x51}, /* Vccp1 */
++ {"3.3V line", 0xca, 0xb6},
++ {"5V line", 0xc9, 0xb6},
++ {"12V line", 0xe0, 0xb0},
++ {"1V line", 0x4b, 0x44}, /* vccp2 */
++ {"Ext. temp.", 0x46, 0x0a}, /* ASIC temp. */
++ {"Int. temp.", 0x3c, 0x0a}, /* Board temp. */
++ {"1.66V line", 0xb2, NO_LIMIT}, /* AIN1 only takes 1 value */
++ {"1.5V line", 0xa1, NO_LIMIT} /* AIN2 only takes 1 value */
++};
++
++static const int sfe4002_lm87_nlimits = ARRAY_SIZE(sfe4002_lm87_limits);
++
++static u16 sfe4002_lm87_irq_mask = EFX_LM87_NO_INTS;
++
++/* I2C ID of the onboard LM87 chip. This is board-specific as the bottom two
++ * bits are set by strap pins */
++#define SFE4002_LM87_I2C_ID (0x2e)
++
++/****************************************************************************/
++/* LED allocations. Note that on rev A0 boards the schematic and the reality
++ * differ: red and green are swapped. Below is the fixed (A1) layout (there
++ * are only 3 A0 boards in existence, so no real reason to make this
++ * conditional).
++ */
++#define SFE4002_FAULT_LED (2) /* Red */
++#define SFE4002_RX_LED (0) /* Green */
++#define SFE4002_TX_LED (1) /* Amber */
++
++static int sfe4002_init_leds(struct efx_nic *efx)
++{
++ /* Set the TX and RX LEDs to reflect status and activity, and the
++ * fault LED off */
++ xfp_set_led(efx, SFE4002_TX_LED,
++ QUAKE_LED_TXLINK | QUAKE_LED_LINK_ACTSTAT);
++ xfp_set_led(efx, SFE4002_RX_LED,
++ QUAKE_LED_RXLINK | QUAKE_LED_LINK_ACTSTAT);
++ xfp_set_led(efx, SFE4002_FAULT_LED, QUAKE_LED_OFF);
++ efx->board_info.blinker.led_num = SFE4002_FAULT_LED;
++ return 0;
++}
++
++static void sfe4002_fault_led(struct efx_nic *efx, int state)
++{
++ xfp_set_led(efx, SFE4002_FAULT_LED, state ? QUAKE_LED_ON :
++ QUAKE_LED_OFF);
++}
++
++static int sfe4002_sensor_meaning(struct efx_nic *efx, int limit_num,
++ unsigned val)
++{
++ const struct sensor_conf *lim = &sfe4002_lm87_limits[limit_num];
++ if (lim->low == NO_LIMIT)
++ EFX_ERR(efx, "%10s 0x%02x (nominal value 0x%02x)\n", lim->name,
++ val, lim->high);
++ else
++ EFX_ERR(efx, "%10s 0x%02x (nominal range 0x%02x - 0x%02x)\n",
++ lim->name, val, lim->high, lim->low);
++ return 1;
++}
++
++static int sfe4002_check_hw(struct efx_nic *efx)
++{
++ int rc;
++
++ /* A0 board rev. 4002s report a temperature fault the whole time
++ * (bad sensor) so we mask it out. */
++ unsigned alarm_mask = (efx->board_info.minor > 0) ?
++ 0 : ~EFX_LM87_ETMP_INT;
++
++ /* Check the sensor (NOP if not present). */
++ rc = efx_check_lm87(efx, alarm_mask);
++
++ /* We treat both lm87 interrupts and failure to talk to the lm87
++ * as problems (since failure will only be reported if we did
++ * find the sensor at probe time. */
++ if (rc)
++ EFX_ERR(efx, "sensor alert!\n");
++ return rc;
++}
++
++static int sfe4002_init(struct efx_nic *efx)
++{
++ u8 lm87_bytes[LM87_SENSOR_BYTES];
++ int nbytes;
++ int rc;
++
++ efx->board_info.monitor = sfe4002_check_hw;
++ efx->board_info.interpret_sensor = sfe4002_sensor_meaning;
++ efx->board_info.init_leds = sfe4002_init_leds;
++ efx->board_info.set_fault_led = sfe4002_fault_led;
++ efx->board_info.blink = board_blink;
++ /* To clean up shut down the lm87 (NOP if not present) */
++ efx->board_info.fini = efx_remove_lm87;
++
++ nbytes = sensor_limits_to_bytes(sfe4002_lm87_limits,
++ sfe4002_lm87_nlimits, lm87_bytes,
++ LM87_SENSOR_BYTES);
++
++ /* Activate the lm87 sensor if present (succeeds if nothing there) */
++ rc = efx_probe_lm87(efx, SFE4002_LM87_I2C_ID,
++ lm87_bytes, nbytes, sfe4002_lm87_irq_mask);
++
++ return rc;
++}
++
++/*****************************************************************************
++ * Support for the SFE4003
++ *
++ */
++/* LM87 configuration data for the sensor on the SFE4003 board */
++static const struct sensor_conf sfe4003_lm87_limits[] = {
++ {"1.5V line", 0x78, 0x6d}, /* 2.5V input, values scaled for 1.5V */
++ {"1.2V line", 0x5a, 0x51}, /* Vccp1 */
++ {"3.3V line", 0xca, 0xb6},
++ {"5V line", 0xc0, 0x00}, /* Sensor not connected. */
++ {"12V line", 0xe0, 0xb0},
++ {"1V line", 0x4b, 0x44}, /* Vccp2 */
++ {"Ext. temp.", 0x46, 0x0a}, /* ASIC temp. */
++ {"Int. temp.", 0x3c, 0x0a}, /* Board temp. */
++ {"", 0xff, NO_LIMIT}, /* FAN1/AIN1 unused */
++ {"", 0xff, NO_LIMIT} /* FAN2/AIN2 unused */
++};
++
++static const int sfe4003_lm87_nlimits = ARRAY_SIZE(sfe4003_lm87_limits);
++
++static u16 sfe4003_lm87_irq_mask = EFX_LM87_NO_INTS;
++
++
++static int sfe4003_sensor_meaning(struct efx_nic *efx, int limit_num,
++ unsigned val)
++{
++ const struct sensor_conf *lim = &sfe4003_lm87_limits[limit_num];
++ if (lim->low == NO_LIMIT)
++ return 0; /* Neither AIN1 nor AIN2 mean anything to us */
++ else
++ EFX_ERR(efx, "%10s 0x%02x (nominal range 0x%02x - 0x%02x)\n",
++ lim->name, val, lim->high, lim->low);
++ return 1;
++}
++
++/* I2C ID of the onboard LM87 chip. This is board-specific as the bottom two
++ * bits are set by strap pins */
++#define SFE4003_LM87_I2C_ID (0x2e)
++
++/* Board-specific LED info. */
++#define SFE4003_RED_LED_GPIO (11)
++#define SFE4003_LED_ON (1)
++#define SFE4003_LED_OFF (0)
++
++static void sfe4003_fault_led(struct efx_nic *efx, int state)
++{
++ /* The LEDs were not wired to GPIOs before A3 */
++ if (efx->board_info.minor < 3 && efx->board_info.major == 0)
++ return;
++
++ txc_set_gpio_val(efx, SFE4003_RED_LED_GPIO,
++ state ? SFE4003_LED_ON : SFE4003_LED_OFF);
++}
++
++static int sfe4003_init_leds(struct efx_nic *efx)
++{
++ /* The LEDs were not wired to GPIOs before A3 */
++ if (efx->board_info.minor < 3 && efx->board_info.major == 0)
++ return 0;
++
++ txc_set_gpio_dir(efx, SFE4003_RED_LED_GPIO, TXC_GPIO_DIR_OUTPUT);
++ txc_set_gpio_val(efx, SFE4003_RED_LED_GPIO, SFE4003_LED_OFF);
++ return 0;
++}
++
++static int sfe4003_check_hw(struct efx_nic *efx)
++{
++ int rc;
++ /* A0/A1/A2 board rev. 4003s report a temperature fault the whole time
++ * (bad sensor) so we mask it out. */
++ unsigned alarm_mask =
++ ~(EFX_LM87_ETMP_INT | EFX_LM87_FAN1_INT | EFX_LM87_FAN2_INT);
++
++ /* Check the sensor (NOP if not present). */
++
++ rc = efx_check_lm87(efx, alarm_mask);
++ /* We treat both lm87 interrupts and failure to talk to the lm87
++ * as problems (since failure will only be reported if we did
++ * find the sensor at probe time. */
++ if (rc)
++ EFX_ERR(efx, "sensor alert!\n");
++
++ return rc;
++}
++
++static int sfe4003_init(struct efx_nic *efx)
++{
++ u8 lm87_bytes[LM87_SENSOR_BYTES];
++ int nbytes;
++ int rc;
++ efx->board_info.monitor = sfe4003_check_hw;
++ efx->board_info.interpret_sensor = sfe4003_sensor_meaning;
++ efx->board_info.init_leds = sfe4003_init_leds;
++ efx->board_info.set_fault_led = sfe4003_fault_led;
++ efx->board_info.blink = board_blink;
++ /* To clean up shut down the lm87 (NOP if not present) */
++ efx->board_info.fini = efx_remove_lm87;
++
++ nbytes = sensor_limits_to_bytes(sfe4003_lm87_limits,
++ sfe4003_lm87_nlimits, lm87_bytes,
++ LM87_SENSOR_BYTES);
++
++ /* Activate the lm87 sensor if present (succeeds if nothing there) */
++ rc = efx_probe_lm87(efx, SFE4003_LM87_I2C_ID,
++ lm87_bytes, nbytes, sfe4003_lm87_irq_mask);
++
++ if (rc < 0)
++ EFX_ERR(efx, "Temperature sensor probe failure: "
++ "please check the jumper position\n");
++ return rc;
++}
++
++/*****************************************************************************
++ * Support for the SFE4005
++ *
++ */
++/* LM87 configuration data for the sensor on the SFE4005 board */
++static const u8 sfe4005_lm87_limits[] = {
++ 0x51, /* 2.5V high lim. (actually monitor 1.0V line, so 1050mV) */
++ 0x49, /* 2.5V low lim. (950mV) */
++ 0xf6, /* Vccp1 high lim. (3.3V rail, 3465 mV) */
++ 0xde, /* Vcpp1 low lim. (3.3V rail, 3135 mV) */
++ 0xca, /* 3.3V AUX high lim. (3465 mV) */
++ 0xb6, /* 3.3V AUX low lim. (3135mV) */
++ 0xc0, /* 5V high lim. not connected) */
++ 0x00, /* 5V low lim. (not connected) */
++ 0xd0, /* 12V high lim. (13000mV) */
++ 0xb0, /* 12V low lim. (11000mV) */
++ 0xc0, /* Vccp2 high lim. (unused) */
++ 0x00, /* Vccp2 low lim. (unused) */
++ 0x46, /* Ext temp 1 (ASIC) high lim. */
++ 0x0a, /* Ext temp 1 low lim. */
++ 0x3c, /* Int temp (board) high lim. */
++ 0x0a, /* Int temp 1 low lim. */
++ 0xff, /* Fan 1 high (unused) */
++ 0xff, /* Fan 2 high (unused) */
++};
++
++#define SFE4005_LM87_I2C_ID (0x2e)
++
++/* Until the LM87 monitoring is interrupt driven. */
++#define SFE4005_LM87_IRQMASK EFX_LM87_NO_INTS
++
++#define SFE4005_PCF8575_I2C_ID (0x20)
++/* Definitions for the I/O expander that controls the CX4 chip:
++ * which PCF8575 pin maps to which function */
++#define SFE4005_PORT0_EXTLOOP (1 << 0)
++#define SFE4005_PORT1_EXTLOOP (1 << 1)
++#define SFE4005_HOSTPROT_LOOP (1 << 2)
++#define SFE4005_BCAST (1 << 3) /* TX on both ports */
++#define SFE4005_PORT0_EQ (1 << 4)
++#define SFE4005_PORT1_EQ (1 << 5)
++#define SFE4005_HOSTPORT_EQ (1 << 6)
++#define SFE4005_PORTSEL (1 << 7) /* Which port (for RX in BCAST mode) */
++#define SFE4005_PORT0_PRE_LBN (8) /* Preemphasis on port 0 (2 bits)*/
++#define SFE4005_PORT1_PRE_LBN (10) /* Preemphasis on port 1 (2 bits)*/
++#define SFE4005_HOSTPORT_PRE_LBN (12) /* Preemphasis on host port (2 bits) */
++#define SFE4005_UNUSED (1 << 14)
++#define SFE4005_CX4uC_nRESET (1 << 15) /* Reset the controller on CX4 chip */
++
++
++/* By default only turn on host port EQ. Can also OR in SFE4005_PORT0_EQ,
++ * SFE4005_PORT1_EQ but this hasn't been seen to make a difference. */
++#define SFE4005_CX4_DEFAULTS (SFE4005_CX4uC_nRESET | SFE4005_HOSTPORT_EQ)
++
++static int sfe4005_write_ioexpander(struct efx_nic *efx)
++{
++ unsigned long iobits = (unsigned long)efx->phy_data;
++ struct efx_i2c_interface *i2c = &efx->i2c;
++ u8 send[2], check[2];
++ int rc;
++ /* Do not, EVER, deassert nRESET as that will reset Falcon too,
++ * and the driver won't know to repush the configuration, so
++ * nothing will work until the next power cycle. */
++ BUG_ON(!(iobits & SFE4005_CX4uC_nRESET));
++ send[0] = (iobits & 0xff);
++ send[1] = ((iobits >> 8) & 0xff);
++ rc = efx_i2c_send_bytes(i2c, SFE4005_PCF8575_I2C_ID, send, 2);
++ if (rc) {
++ EFX_ERR(efx, "failed to write to I/O expander: %d\n", rc);
++ return rc;
++ }
++ /* Paranoia: just check what the I/O expander reads back */
++ rc = efx_i2c_recv_bytes(i2c, SFE4005_PCF8575_I2C_ID, check, 2);
++ if (rc)
++ EFX_ERR(efx, "failed to read back from I/O expander: %d\n", rc);
++ else if (check[0] != send[0] || check[1] != send[1])
++ EFX_ERR(efx, "read back wrong value from I/O expander: "
++ "wanted %.2x%.2x, got %.2x%.2x\n",
++ send[1], send[0], check[1], check[0]);
++ return rc;
++}
++
++static int sfe4005_init(struct efx_nic *efx)
++{
++ unsigned long iobits = SFE4005_CX4_DEFAULTS;
++ int rc;
++
++ /* There is no PHY as such on the SFE4005 so phy_data is ours. */
++ efx->phy_data = (void *)iobits;
++
++ /* Push the values */
++ rc = sfe4005_write_ioexpander(efx);
++ if (rc)
++ return rc;
++
++ /* Activate the lm87 sensor if present (succeeds if nothing there) */
++ rc = efx_probe_lm87(efx, SFE4005_LM87_I2C_ID,
++ sfe4005_lm87_limits,
++ sizeof(sfe4005_lm87_limits), SFE4005_LM87_IRQMASK);
++
++ /* To clean up shut down the lm87 (NOP if not present) */
++ efx->board_info.fini = efx_remove_lm87;
++
++ return rc;
++}
++
++/* This will get expanded as board-specific details get moved out of the
++ * PHY drivers. */
++struct efx_board_data {
++ const char *ref_model;
++ const char *gen_type;
++ int (*init) (struct efx_nic *nic);
++ unsigned mwatts;
++};
++
++static void dummy_fini(struct efx_nic *nic)
++{
++}
++
++static int dummy_init(struct efx_nic *nic)
++{
++ nic->board_info.fini = dummy_fini;
++ return 0;
++}
++
++/* Maximum board power (mW)
++ * Falcon controller ASIC accounts for 2.2W
++ * 10Xpress PHY accounts for 12W
++ *
++ */
++#define SFE4001_POWER 18000
++#define SFE4002_POWER 7500
++#define SFE4003_POWER 4500
++#define SFE4005_POWER 4500
++
++static struct efx_board_data board_data[] = {
++ [EFX_BOARD_INVALID] =
++ {NULL, NULL, dummy_init, 0},
++ [EFX_BOARD_SFE4001] =
++ {"SFE4001", "10GBASE-T adapter", sfe4001_poweron, SFE4001_POWER },
++ [EFX_BOARD_SFE4002] =
++ {"SFE4002", "XFP adapter", sfe4002_init, SFE4002_POWER },
++ [EFX_BOARD_SFE4003] =
++ {"SFE4003", "10GBASE-CX4 adapter", sfe4003_init, SFE4003_POWER },
++ [EFX_BOARD_SFE4005] =
++ {"SFE4005", "10G blade adapter", sfe4005_init, SFE4005_POWER },
++};
++
++int efx_set_board_info(struct efx_nic *efx, u16 revision_info)
++{
++ int rc = 0;
++ struct efx_board_data *data;
++
++ if (BOARD_TYPE(revision_info) >= EFX_BOARD_MAX) {
++ EFX_ERR(efx, "squashing unknown board type %d\n",
++ BOARD_TYPE(revision_info));
++ revision_info = 0;
++ }
++
++ if (BOARD_TYPE(revision_info) == 0) {
++ efx->board_info.major = 0;
++ efx->board_info.minor = 0;
++ /* For early boards that don't have revision info. there is
++ * only 1 board for each PHY type, so we can work it out, with
++ * the exception of the PHY-less boards. */
++ switch (efx->phy_type) {
++ case PHY_TYPE_10XPRESS:
++ efx->board_info.type = EFX_BOARD_SFE4001;
++ break;
++ case PHY_TYPE_XFP:
++ efx->board_info.type = EFX_BOARD_SFE4002;
++ break;
++ case PHY_TYPE_CX4_RTMR:
++ efx->board_info.type = EFX_BOARD_SFE4003;
++ break;
++ default:
++ efx->board_info.type = 0;
++ break;
++ }
++ } else {
++ efx->board_info.type = BOARD_TYPE(revision_info);
++ efx->board_info.major = BOARD_MAJOR(revision_info);
++ efx->board_info.minor = BOARD_MINOR(revision_info);
++ }
++
++ data = &board_data[efx->board_info.type];
++
++ /* Report the board model number or generic type for recognisable
++ * boards. */
++ if (efx->board_info.type != 0)
++ EFX_INFO(efx, "board is %s rev %c%d\n",
++ (efx->pci_dev->subsystem_vendor == EFX_VENDID_SFC)
++ ? data->ref_model : data->gen_type,
++ 'A' + efx->board_info.major, efx->board_info.minor);
++
++ efx->board_info.init = data->init;
++ efx->board_info.mwatts = data->mwatts;
++
++ return rc;
++}
+diff -rpuN linux-2.6.18.8/drivers/net/sfc/boards.h linux-2.6.18-xen-3.3.0/drivers/net/sfc/boards.h
+--- linux-2.6.18.8/drivers/net/sfc/boards.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/net/sfc/boards.h 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,51 @@
++/****************************************************************************
++ * Driver for Solarflare network controllers
++ * (including support for SFE4001 10GBT NIC)
++ *
++ * Copyright 2007: Solarflare Communications Inc,
++ * 9501 Jeronimo Road, Suite 250,
++ * Irvine, CA 92618, USA
++ *
++ * Developed by Solarflare Communications <linux-net-drivers@solarflare.com>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 as published
++ * by the Free Software Foundation, incorporated herein by reference.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ ****************************************************************************
++ */
++
++#ifndef EFX_BOARDS_H
++#define EFX_BOARDS_H
++
++/* Board IDs (must fit in 8 bits). Note that 0 must never be assigned because
++ * on early boards it means there is no revision info. Board types pre 400x
++ * are not covered here, but this is not a problem because:
++ * - the early Falcon boards (FPGA, 401, 403) don't have any extra H/W we
++ * need care about and aren't being updated.
++ */
++enum efx_board_type {
++ EFX_BOARD_INVALID = 0, /* Early boards do not have board rev. info. */
++ EFX_BOARD_SFE4001 = 1,
++ EFX_BOARD_SFE4002 = 2,
++ EFX_BOARD_SFE4003 = 3,
++ EFX_BOARD_SFE4005 = 4,
++ /* Insert new types before here */
++ EFX_BOARD_MAX
++};
++
++extern int efx_set_board_info(struct efx_nic *efx, u16 revision_info);
++
++/* SFE4001 (10GBASE-T) */
++extern int sfe4001_poweron(struct efx_nic *efx);
++extern void sfe4001_poweroff(struct efx_nic *efx);
++
++#endif
+diff -rpuN linux-2.6.18.8/drivers/net/sfc/config.h linux-2.6.18-xen-3.3.0/drivers/net/sfc/config.h
+--- linux-2.6.18.8/drivers/net/sfc/config.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/net/sfc/config.h 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1 @@
++/* SFC config options can go here */
+diff -rpuN linux-2.6.18.8/drivers/net/sfc/debugfs.c linux-2.6.18-xen-3.3.0/drivers/net/sfc/debugfs.c
+--- linux-2.6.18.8/drivers/net/sfc/debugfs.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-xen-3.3.0/drivers/net/sfc/debugfs.c 2008-08-21 11:36:07.000000000 +0200
+@@ -0,0 +1,924 @@
++/****************************************************************************
++ * Driver for Solarflare network controllers
++ * (including support for SFE4001 10GBT NIC)
++ *
++ * Copyright 2005-2006: Fen Systems Ltd.
++ * Copyright 2006-2008: Solarflare Communications Inc,
++ * 9501 Jeronimo Road, Suite 250,
++ * Irvine, CA 92618, USA
++ *
++ * Initially developed by Michael Brown <mbrown@fensystems.co.uk>
++ * Maintained by Solarflare Communications <linux-net-drivers@solarflare.com>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 as published
++ * by the Free Software Foundation, incorporated herein by reference.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ ****************************************************************************
++ */
++
++#include <linux/module.h>
++#include <linux/pci.h>
++/* For out-of-tree builds we always need procfs, if only for a compatibility
++ * symlink.
++ */
++#include <linux/proc_fs.h>
++#include <linux/dcache.h>
++#include <linux/seq_file.h>
++#include "net_driver.h"
++#include "efx.h"
++#include "debugfs.h"
++#include "falcon.h"
++
++/* EFX_USE_DEBUGFS is defined by kernel_compat.h so we can't decide whether to
++ * include this earlier.
++ */
++#ifdef EFX_USE_DEBUGFS
++#include <linux/debugfs.h>
++#endif
++
++#ifndef PRIu64
++# if (BITS_PER_LONG == 64)
++# define PRIu64 "lu"
++# else
++# define PRIu64 "llu"
++# endif
++#endif
++
++#ifndef EFX_USE_DEBUGFS
++
++static void efx_debugfs_remove(struct proc_dir_entry *entry)
++{
++ if (entry)
++ remove_proc_entry(entry->name, entry->parent);
++}
++#define debugfs_remove efx_debugfs_remove
++
++#define debugfs_create_dir proc_mkdir
++#define debugfs_create_symlink proc_symlink
++
++#endif /* !EFX_USE_DEBUGFS */
++
++/* Parameter definition bound to a structure - each file has one of these */
++struct efx_debugfs_bound_param {
++ const struct efx_debugfs_parameter *param;
++ void *structure;
++};
++
++
++/* Maximum length for a name component or symlink target */
++#define EFX_DEBUGFS_NAME_LEN 32
++
++
++/* Top-level debug directory ([/sys/kernel]/debug/sfc) */
++static struct dentry *efx_debug_root;
++
++/* "cards" directory ([/sys/kernel]/debug/sfc/cards) */
++static struct dentry *efx_debug_cards;
++
++
++/* Sequential file interface to bound parameters */
++
++#if defined(EFX_USE_DEBUGFS)
++
++static int efx_debugfs_seq_show(struct seq_file *file, void *v)
++{
++ struct efx_debugfs_bound_param *binding =
++ (struct efx_debugfs_bound_param *)file->private;
++
++ return binding->param->reader(file,
++ binding->structure +
++ binding->param->offset);
++}
++
++static int efx_debugfs_open(struct inode *inode, struct file *file)
++{
++ return single_open(file, efx_debugfs_seq_show, inode->i_private);
++}
++
++#else /* EFX_NOT_UPSTREAM && !EFX_USE_DEBUGFS */
++
++static int efx_debugfs_seq_show(struct seq_file *file, void *v)
++{
++ struct proc_dir_entry *entry = (struct proc_dir_entry *)file->private;
++ struct efx_debugfs_parameter *param =
++ (struct efx_debugfs_parameter *)entry->data;
++ void *structure = (void *)entry->read_proc;
++
++ if (!structure)
++ return -EIO;
++
++ return param->reader(file, structure + param->offset);
++}
++
++static int efx_debugfs_open(struct inode *inode, struct file *file)
++{
++ return single_open(file, efx_debugfs_seq_show, PROC_I(inode)->pde);
++}
++
++#endif /* !EFX_NOT_UPSTREAM || EFX_USE_DEBUGFS */
++
++
++static struct file_operations efx_debugfs_file_ops = {
++ .owner = THIS_MODULE,
++ .open = efx_debugfs_open,
++ .read = seq_read,
++ .llseek = seq_lseek,
++ .release = seq_release
++};
++
++
++#if defined(EFX_USE_DEBUGFS)
++
++/**
++ * efx_fini_debugfs_child - remove a named child of a debugfs directory
++ * @dir: Directory
++ * @name: Name of child
++ *
++ * This removes the named child from the directory, if it exists.
++ */
++void efx_fini_debugfs_child(struct dentry *dir, const char *name)
++{
++ struct qstr child_name;
++ struct dentry *child;
++
++ child_name.len = strlen(name);
++ child_name.name = name;
++ child_name.hash = full_name_hash(child_name.name, child_name.len);
++ child = d_lookup(dir, &child_name);
++ if (child) {
++ /* If it's a "regular" file, free its parameter binding */
++ if (S_ISREG(child->d_inode->i_mode))
++ kfree(child->d_inode->i_private);
++ debugfs_remove(child);
++ dput(child);
++ }
++}
++
++#else /* EFX_NOT_UPSTREAM && !EFX_USE_DEBUGFS */
++
++void efx_fini_debugfs_child(struct proc_dir_entry *dir, const char *name)
++{
++ remove_proc_entry(name, dir);
++}
++
++#endif /* !EFX_NOT_UPSTREAM || EFX_USE_DEBUGFS */
++
++/*
++ * Remove a debugfs directory.
++ *
++ * This removes the named parameter-files and sym-links from the
++ * directory, and the directory itself. It does not do any recursion
++ * to subdirectories.
++ */
++static void efx_fini_debugfs_dir(struct dentry *dir,
++ struct efx_debugfs_parameter *params,
++ const char *const *symlink_names)
++{
++ if (!dir)
++ return;
++
++ while (params->name) {
++ efx_fini_debugfs_child(dir, params->name);
++ params++;
++ }
++ while (symlink_names && *symlink_names) {
++ efx_fini_debugfs_child(dir, *symlink_names);
++ symlink_names++;
++ }
++ debugfs_remove(dir);
++}
++
++/* Functions for printing various types of parameter. */
++
++int efx_debugfs_read_uint(struct seq_file *file, void *data)
++{
++ return seq_printf(file, "%#x\n", *(unsigned int *)data);
++}
++
++int efx_debugfs_read_int(struct seq_file *file, void *data)
++{
++ return seq_printf(file, "%d\n", *(int *)data);
++}
++
++int efx_debugfs_read_atomic(struct seq_file *file, void *data)
++{
++ unsigned int value = atomic_read((atomic_t *) data);
++
++ return seq_printf(file, "%#x\n", value);
++}
++
++int efx_debugfs_read_dword(struct seq_file *file, void *data)
++{
++ unsigned int value = EFX_DWORD_FIELD(*(efx_dword_t *) data,
++ EFX_DWORD_0);
++
++ return seq_printf(file, "%#x\n", value);
++}
++
++static int efx_debugfs_read_int_mode(struct seq_file *file, void *data)
++{
++ unsigned int value = *(enum efx_int_mode *) data;
++
++ return seq_printf(file, "%d => %s\n", value,
++ STRING_TABLE_LOOKUP(value, efx_interrupt_mode));
++}
++
++#define EFX_INT_MODE_PARAMETER(container_type, parameter) \
++ EFX_PARAMETER(container_type, parameter, \
++ enum efx_int_mode, efx_debugfs_read_int_mode)
++
++static int efx_debugfs_read_loop_mode(struct seq_file *file, void *data)
++{
++ unsigned int value = *(enum efx_loopback_mode *)data;
++
++ return seq_printf(file, "%d => %s\n", value,
++ STRING_TABLE_LOOKUP(value, efx_loopback_mode));
++}
++
++#define EFX_LOOPBACK_MODE_PARAMETER(container_type, parameter) \
++ EFX_PARAMETER(container_type, parameter, \
++ enum efx_loopback_mode, efx_debugfs_read_loop_mode)
++
++static int efx_debugfs_read_phy_type(struct seq_file *file, void *data)
++{
++ unsigned int value = *(enum phy_type *) data;
++
++ return seq_printf(file, "%d => %s\n", value,
++ STRING_TABLE_LOOKUP(value, efx_phy_type));
++}
++
++#define EFX_PHY_TYPE_PARAMETER(container_type, parameter) \
++ EFX_PARAMETER(container_type, parameter, \
++ enum phy_type, efx_debugfs_read_phy_type)
++
++int efx_debugfs_read_string(struct seq_file *file, void *data)
++{
++ return seq_puts(file, (const char *)data);
++}
++
++
++/**
++ * efx_init_debugfs_files - create parameter-files in a debugfs directory
++ * @parent: Containing directory
++ * @params: Pointer to zero-terminated parameter definition array
++ * @structure: Structure containing parameters
++ *
++ * Add parameter-files to the given debugfs directory. Return a
++ * negative error code or 0 on success.
++ */
++static int efx_init_debugfs_files(struct dentry *parent,
++ struct efx_debugfs_parameter *params,
++ void *structure)
++{
++ struct efx_debugfs_parameter *param = params;
++
++ while (param->name) {
++ struct dentry *entry;
++#if defined(EFX_USE_DEBUGFS)
++ struct efx_debugfs_bound_param *binding;
++
++ binding = kmalloc(sizeof(*binding), GFP_KERNEL);
++ if (!binding)
++ goto err;
++ binding->param = param;
++ binding->structure = structure;
++
++ entry = debugfs_create_file(param->name, S_IRUGO, parent,
++ binding, &efx_debugfs_file_ops);
++ if (!entry) {
++ kfree(binding);
++ goto err;
++ }
++#else
++ entry = create_proc_entry(param->name, S_IRUGO, parent);
++ if (!entry)
++ goto err;
++ /*
++ * We have no good way to free a binding created here.
++ * However, once we install our file_operations the
++ * read_proc pointer becomes redundant and we can
++ * abuse it as a structure pointer.
++ */
++ entry->data = param;
++ entry->read_proc = NULL;
++ smp_wmb();
++ entry->proc_fops = &efx_debugfs_file_ops;
++ smp_wmb();
++ entry->read_proc = (read_proc_t *) structure;
++#endif
++
++ param++;
++ }
++
++ return 0;
++
++ err:
++ while (param != params) {
++ param--;
++ efx_fini_debugfs_child(parent, param->name);
++ }
++ return -ENOMEM;
++}
++
++/**
++ * efx_init_debugfs_netdev - create debugfs sym-links for net device
++ * @net_dev: Net device
++ *
++ * Create sym-links named after @net_dev to the debugfs directories for
++ * the corresponding NIC and port. Return a negative error cod