ia64/xen-unstable

changeset 8742:2494b4e00cbb

Update to Linux 2.6.16-rc1-git4.

Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
author cl349@firebug.cl.cam.ac.uk
date Thu Feb 02 19:16:38 2006 +0000 (2006-02-02)
parents da6297243495
children 3b9c2c410b14
files buildconfigs/Rules.mk buildconfigs/linux-defconfig_xen0_x86_32 buildconfigs/linux-defconfig_xen0_x86_64 buildconfigs/linux-defconfig_xenU_x86_32 buildconfigs/linux-defconfig_xenU_x86_64 buildconfigs/linux-defconfig_xen_x86_32 buildconfigs/linux-defconfig_xen_x86_64 buildconfigs/mk.linux-2.6-xen linux-2.6-xen-sparse/arch/i386/Kconfig linux-2.6-xen-sparse/arch/i386/Makefile linux-2.6-xen-sparse/arch/i386/kernel/Makefile linux-2.6-xen-sparse/arch/i386/kernel/acpi/boot-xen.c linux-2.6-xen-sparse/arch/i386/kernel/apic-xen.c linux-2.6-xen-sparse/arch/i386/kernel/cpu/common-xen.c linux-2.6-xen-sparse/arch/i386/kernel/entry-xen.S linux-2.6-xen-sparse/arch/i386/kernel/head-xen.S linux-2.6-xen-sparse/arch/i386/kernel/init_task-xen.c linux-2.6-xen-sparse/arch/i386/kernel/io_apic-xen.c linux-2.6-xen-sparse/arch/i386/kernel/ioport-xen.c linux-2.6-xen-sparse/arch/i386/kernel/irq-xen.c linux-2.6-xen-sparse/arch/i386/kernel/microcode-xen.c linux-2.6-xen-sparse/arch/i386/kernel/mpparse-xen.c linux-2.6-xen-sparse/arch/i386/kernel/pci-dma-xen.c linux-2.6-xen-sparse/arch/i386/kernel/process-xen.c linux-2.6-xen-sparse/arch/i386/kernel/quirks-xen.c linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c linux-2.6-xen-sparse/arch/i386/kernel/smpboot.c linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c linux-2.6-xen-sparse/arch/i386/kernel/traps-xen.c linux-2.6-xen-sparse/arch/i386/kernel/traps.c linux-2.6-xen-sparse/arch/i386/mm/init-xen.c linux-2.6-xen-sparse/arch/i386/pci/irq-xen.c linux-2.6-xen-sparse/arch/ia64/Kconfig linux-2.6-xen-sparse/arch/ia64/Makefile linux-2.6-xen-sparse/arch/ia64/kernel/entry.S linux-2.6-xen-sparse/arch/ia64/kernel/head.S linux-2.6-xen-sparse/arch/ia64/kernel/setup.c linux-2.6-xen-sparse/arch/ia64/xen-mkbuildtree-pre linux-2.6-xen-sparse/arch/ia64/xen/drivers/evtchn_ia64.c linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S linux-2.6-xen-sparse/arch/x86_64/Kconfig linux-2.6-xen-sparse/arch/x86_64/Makefile linux-2.6-xen-sparse/arch/x86_64/ia32/Makefile linux-2.6-xen-sparse/arch/x86_64/ia32/ia32entry-xen.S linux-2.6-xen-sparse/arch/x86_64/ia32/vsyscall-int80.S linux-2.6-xen-sparse/arch/x86_64/ia32/vsyscall-sigreturn.S linux-2.6-xen-sparse/arch/x86_64/kernel/Makefile linux-2.6-xen-sparse/arch/x86_64/kernel/apic-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/e820-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/early_printk-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/entry-xen.S linux-2.6-xen-sparse/arch/x86_64/kernel/head-xen.S linux-2.6-xen-sparse/arch/x86_64/kernel/head64-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/io_apic-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/ioport-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/irq-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/pci-nommu-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/process-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/setup64-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/smp-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/traps-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/vsyscall-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/x8664_ksyms-xen.c linux-2.6-xen-sparse/arch/x86_64/mm/Makefile linux-2.6-xen-sparse/arch/x86_64/mm/fault-xen.c linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c linux-2.6-xen-sparse/arch/x86_64/mm/pageattr-xen.c linux-2.6-xen-sparse/drivers/Kconfig linux-2.6-xen-sparse/drivers/Makefile linux-2.6-xen-sparse/drivers/acpi/Kconfig linux-2.6-xen-sparse/drivers/acpi/tables.c linux-2.6-xen-sparse/drivers/char/mem.c linux-2.6-xen-sparse/drivers/char/tpm/Makefile linux-2.6-xen-sparse/drivers/char/tpm/tpm.c linux-2.6-xen-sparse/drivers/char/tpm/tpm.h linux-2.6-xen-sparse/drivers/char/tty_io.c linux-2.6-xen-sparse/drivers/serial/Kconfig linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c linux-2.6-xen-sparse/drivers/xen/char/mem.c linux-2.6-xen-sparse/drivers/xen/core/smpboot.c linux-2.6-xen-sparse/drivers/xen/netback/xenbus.c linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c linux-2.6-xen-sparse/fs/Kconfig linux-2.6-xen-sparse/include/asm-i386/atomic.h linux-2.6-xen-sparse/include/asm-i386/bitops.h linux-2.6-xen-sparse/include/asm-i386/futex.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/desc.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/dma-mapping.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/io.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/processor.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/ptrace.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/segment.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/synch_bitops.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/system.h linux-2.6-xen-sparse/include/asm-i386/system.h linux-2.6-xen-sparse/include/asm-ia64/hypercall.h linux-2.6-xen-sparse/include/asm-ia64/hypervisor.h linux-2.6-xen-sparse/include/asm-ia64/pal.h linux-2.6-xen-sparse/include/asm-ia64/processor.h linux-2.6-xen-sparse/include/asm-ia64/system.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/desc.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/dma-mapping.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/fixmap.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/hw_irq.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/io.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/mmu_context.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/page.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/pci.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/pgtable.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/processor.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/segment.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/smp.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/system.h linux-2.6-xen-sparse/include/linux/gfp.h linux-2.6-xen-sparse/include/linux/irq.h linux-2.6-xen-sparse/include/linux/mm.h linux-2.6-xen-sparse/include/linux/skbuff.h linux-2.6-xen-sparse/include/xen/xenbus.h linux-2.6-xen-sparse/kernel/irq/manage.c linux-2.6-xen-sparse/lib/Kconfig.debug linux-2.6-xen-sparse/mm/Kconfig linux-2.6-xen-sparse/mm/memory.c linux-2.6-xen-sparse/mm/mmap.c linux-2.6-xen-sparse/mm/page_alloc.c linux-2.6-xen-sparse/net/core/dev.c linux-2.6-xen-sparse/net/core/skbuff.c patches/linux-2.6.15/i386-mach-io-check-nmi.patch patches/linux-2.6.15/net-csum.patch patches/linux-2.6.15/pmd-shared.patch patches/linux-2.6.15/smp-alts.patch patches/linux-2.6.16-rc1-git4/i386-mach-io-check-nmi.patch patches/linux-2.6.16-rc1-git4/net-csum.patch patches/linux-2.6.16-rc1-git4/pmd-shared.patch patches/linux-2.6.16-rc1-git4/smp-alts.patch
line diff
     1.1 --- a/buildconfigs/Rules.mk	Thu Feb 02 19:15:22 2006 +0100
     1.2 +++ b/buildconfigs/Rules.mk	Thu Feb 02 19:16:38 2006 +0000
     1.3 @@ -26,6 +26,7 @@ LINUX_VER	?= $(shell grep "^LINUX_VER" b
     1.4  # Setup Linux search path
     1.5  LINUX_SRC_PATH	?= .:..
     1.6  vpath linux-%.tar.bz2 $(LINUX_SRC_PATH)
     1.7 +vpath patch-%.bz2 $(LINUX_SRC_PATH)
     1.8  
     1.9  # download a pristine Linux kernel tarball if there isn't one in LINUX_SRC_PATH
    1.10  linux-%.tar.bz2: override _LINUX_VDIR = $(word 1,$(subst ., ,$*)).$(word 2,$(subst ., ,$*))
    1.11 @@ -33,6 +34,12 @@ linux-%.tar.bz2:
    1.12  	@echo "Cannot find $@ in path $(LINUX_SRC_PATH)"
    1.13  	wget $(KERNEL_REPO)/pub/linux/kernel/v$(_LINUX_VDIR)/$@ -O./$@
    1.14  
    1.15 +patch-%.bz2: override _LINUX_VDIR = $(word 1,$(subst ., ,$(*F))).$(word 2,$(subst ., ,$(*F)))
    1.16 +patch-%.bz2: override _LINUX_XDIR = $(if $(word 3,$(subst -, ,$(*F))),snapshots,testing)
    1.17 +patch-%.bz2:
    1.18 +	@echo "Cannot find $(@F) in path $(LINUX_SRC_PATH)"
    1.19 +	wget $(KERNEL_REPO)/pub/linux/kernel/v$(_LINUX_VDIR)/$(_LINUX_XDIR)/$(@F) -O./$@
    1.20 +
    1.21  # Expand NetBSD release to NetBSD version
    1.22  NETBSD_RELEASE  ?= 2.0
    1.23  NETBSD_VER      ?= $(patsubst netbsd-%-xen-sparse,%,$(wildcard netbsd-$(NETBSD_RELEASE)*-xen-sparse))
     2.1 --- a/buildconfigs/linux-defconfig_xen0_x86_32	Thu Feb 02 19:15:22 2006 +0100
     2.2 +++ b/buildconfigs/linux-defconfig_xen0_x86_32	Thu Feb 02 19:16:38 2006 +0000
     2.3 @@ -1,16 +1,16 @@
     2.4  #
     2.5  # Automatically generated make config: don't edit
     2.6 -# Linux kernel version: 2.6.15-xen0
     2.7 -# Wed Feb  1 15:54:13 2006
     2.8 +# Linux kernel version: 2.6.16-rc1-git4-xen0
     2.9 +# Thu Feb  2 18:19:17 2006
    2.10  #
    2.11  CONFIG_X86_32=y
    2.12  CONFIG_SEMAPHORE_SLEEPERS=y
    2.13  CONFIG_X86=y
    2.14  CONFIG_MMU=y
    2.15 -CONFIG_UID16=y
    2.16  CONFIG_GENERIC_ISA_DMA=y
    2.17  CONFIG_GENERIC_IOMAP=y
    2.18  CONFIG_ARCH_MAY_HAVE_PC_FDC=y
    2.19 +CONFIG_DMI=y
    2.20  
    2.21  #
    2.22  # Code maturity level options
    2.23 @@ -32,17 +32,19 @@ CONFIG_SYSVIPC=y
    2.24  # CONFIG_BSD_PROCESS_ACCT is not set
    2.25  CONFIG_SYSCTL=y
    2.26  # CONFIG_AUDIT is not set
    2.27 -CONFIG_HOTPLUG=y
    2.28 -CONFIG_KOBJECT_UEVENT=y
    2.29  # CONFIG_IKCONFIG is not set
    2.30  CONFIG_INITRAMFS_SOURCE=""
    2.31 +CONFIG_UID16=y
    2.32 +CONFIG_VM86=y
    2.33  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
    2.34  # CONFIG_EMBEDDED is not set
    2.35  CONFIG_KALLSYMS=y
    2.36  # CONFIG_KALLSYMS_ALL is not set
    2.37  # CONFIG_KALLSYMS_EXTRA_PASS is not set
    2.38 +CONFIG_HOTPLUG=y
    2.39  CONFIG_PRINTK=y
    2.40  CONFIG_BUG=y
    2.41 +CONFIG_ELF_CORE=y
    2.42  CONFIG_BASE_FULL=y
    2.43  CONFIG_FUTEX=y
    2.44  CONFIG_EPOLL=y
    2.45 @@ -51,8 +53,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
    2.46  CONFIG_CC_ALIGN_LABELS=0
    2.47  CONFIG_CC_ALIGN_LOOPS=0
    2.48  CONFIG_CC_ALIGN_JUMPS=0
    2.49 +CONFIG_SLAB=y
    2.50  # CONFIG_TINY_SHMEM is not set
    2.51  CONFIG_BASE_SMALL=0
    2.52 +# CONFIG_SLOB is not set
    2.53  
    2.54  #
    2.55  # Loadable module support
    2.56 @@ -115,6 +119,7 @@ CONFIG_M686=y
    2.57  # CONFIG_MWINCHIP2 is not set
    2.58  # CONFIG_MWINCHIP3D is not set
    2.59  # CONFIG_MGEODEGX1 is not set
    2.60 +# CONFIG_MGEODE_LX is not set
    2.61  # CONFIG_MCYRIXIII is not set
    2.62  # CONFIG_MVIAC3_2 is not set
    2.63  # CONFIG_X86_GENERIC is not set
    2.64 @@ -153,10 +158,9 @@ CONFIG_SWIOTLB=y
    2.65  # CONFIG_DELL_RBU is not set
    2.66  # CONFIG_DCDBAS is not set
    2.67  # CONFIG_NOHIGHMEM is not set
    2.68 -# CONFIG_HIGHMEM4G is not set
    2.69 -CONFIG_HIGHMEM64G=y
    2.70 +CONFIG_HIGHMEM4G=y
    2.71 +# CONFIG_HIGHMEM64G is not set
    2.72  CONFIG_HIGHMEM=y
    2.73 -CONFIG_X86_PAE=y
    2.74  CONFIG_SELECT_MEMORY_MODEL=y
    2.75  CONFIG_FLATMEM_MANUAL=y
    2.76  # CONFIG_DISCONTIGMEM_MANUAL is not set
    2.77 @@ -172,6 +176,7 @@ CONFIG_SECCOMP=y
    2.78  CONFIG_HZ_250=y
    2.79  # CONFIG_HZ_1000 is not set
    2.80  CONFIG_HZ=250
    2.81 +# CONFIG_CRASH_DUMP is not set
    2.82  CONFIG_PHYSICAL_START=0x100000
    2.83  
    2.84  #
    2.85 @@ -285,6 +290,7 @@ CONFIG_BRIDGE_NETFILTER=y
    2.86  # Core Netfilter Configuration
    2.87  #
    2.88  # CONFIG_NETFILTER_NETLINK is not set
    2.89 +# CONFIG_NETFILTER_XTABLES is not set
    2.90  
    2.91  #
    2.92  # IP: Netfilter Configuration
    2.93 @@ -301,51 +307,6 @@ CONFIG_IP_NF_FTP=m
    2.94  # CONFIG_IP_NF_AMANDA is not set
    2.95  # CONFIG_IP_NF_PPTP is not set
    2.96  # CONFIG_IP_NF_QUEUE is not set
    2.97 -CONFIG_IP_NF_IPTABLES=m
    2.98 -# CONFIG_IP_NF_MATCH_LIMIT is not set
    2.99 -CONFIG_IP_NF_MATCH_IPRANGE=m
   2.100 -# CONFIG_IP_NF_MATCH_MAC is not set
   2.101 -# CONFIG_IP_NF_MATCH_PKTTYPE is not set
   2.102 -# CONFIG_IP_NF_MATCH_MARK is not set
   2.103 -# CONFIG_IP_NF_MATCH_MULTIPORT is not set
   2.104 -# CONFIG_IP_NF_MATCH_TOS is not set
   2.105 -# CONFIG_IP_NF_MATCH_RECENT is not set
   2.106 -# CONFIG_IP_NF_MATCH_ECN is not set
   2.107 -# CONFIG_IP_NF_MATCH_DSCP is not set
   2.108 -# CONFIG_IP_NF_MATCH_AH_ESP is not set
   2.109 -# CONFIG_IP_NF_MATCH_LENGTH is not set
   2.110 -# CONFIG_IP_NF_MATCH_TTL is not set
   2.111 -# CONFIG_IP_NF_MATCH_TCPMSS is not set
   2.112 -# CONFIG_IP_NF_MATCH_HELPER is not set
   2.113 -# CONFIG_IP_NF_MATCH_STATE is not set
   2.114 -# CONFIG_IP_NF_MATCH_CONNTRACK is not set
   2.115 -# CONFIG_IP_NF_MATCH_OWNER is not set
   2.116 -CONFIG_IP_NF_MATCH_PHYSDEV=m
   2.117 -# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
   2.118 -# CONFIG_IP_NF_MATCH_REALM is not set
   2.119 -# CONFIG_IP_NF_MATCH_SCTP is not set
   2.120 -# CONFIG_IP_NF_MATCH_DCCP is not set
   2.121 -# CONFIG_IP_NF_MATCH_COMMENT is not set
   2.122 -# CONFIG_IP_NF_MATCH_CONNBYTES is not set
   2.123 -# CONFIG_IP_NF_MATCH_HASHLIMIT is not set
   2.124 -# CONFIG_IP_NF_MATCH_STRING is not set
   2.125 -CONFIG_IP_NF_FILTER=m
   2.126 -CONFIG_IP_NF_TARGET_REJECT=m
   2.127 -# CONFIG_IP_NF_TARGET_LOG is not set
   2.128 -# CONFIG_IP_NF_TARGET_ULOG is not set
   2.129 -# CONFIG_IP_NF_TARGET_TCPMSS is not set
   2.130 -# CONFIG_IP_NF_TARGET_NFQUEUE is not set
   2.131 -CONFIG_IP_NF_NAT=m
   2.132 -CONFIG_IP_NF_NAT_NEEDED=y
   2.133 -CONFIG_IP_NF_TARGET_MASQUERADE=m
   2.134 -# CONFIG_IP_NF_TARGET_REDIRECT is not set
   2.135 -# CONFIG_IP_NF_TARGET_NETMAP is not set
   2.136 -# CONFIG_IP_NF_TARGET_SAME is not set
   2.137 -# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
   2.138 -CONFIG_IP_NF_NAT_FTP=m
   2.139 -# CONFIG_IP_NF_MANGLE is not set
   2.140 -# CONFIG_IP_NF_RAW is not set
   2.141 -# CONFIG_IP_NF_ARPTABLES is not set
   2.142  
   2.143  #
   2.144  # Bridge: Netfilter Configuration
   2.145 @@ -361,6 +322,11 @@ CONFIG_IP_NF_NAT_FTP=m
   2.146  # SCTP Configuration (EXPERIMENTAL)
   2.147  #
   2.148  # CONFIG_IP_SCTP is not set
   2.149 +
   2.150 +#
   2.151 +# TIPC Configuration (EXPERIMENTAL)
   2.152 +#
   2.153 +# CONFIG_TIPC is not set
   2.154  # CONFIG_ATM is not set
   2.155  CONFIG_BRIDGE=y
   2.156  # CONFIG_VLAN_8021Q is not set
   2.157 @@ -564,6 +530,7 @@ CONFIG_AIC79XX_REG_PRETTY_PRINT=y
   2.158  # CONFIG_SCSI_ADVANSYS is not set
   2.159  CONFIG_MEGARAID_NEWGEN=y
   2.160  # CONFIG_MEGARAID_MM is not set
   2.161 +# CONFIG_MEGARAID_LEGACY is not set
   2.162  # CONFIG_MEGARAID_SAS is not set
   2.163  CONFIG_SCSI_SATA=y
   2.164  # CONFIG_SCSI_SATA_AHCI is not set
   2.165 @@ -592,13 +559,7 @@ CONFIG_SCSI_SATA_INTEL_COMBINED=y
   2.166  # CONFIG_SCSI_IPR is not set
   2.167  # CONFIG_SCSI_QLOGIC_FC is not set
   2.168  # CONFIG_SCSI_QLOGIC_1280 is not set
   2.169 -CONFIG_SCSI_QLA2XXX=y
   2.170 -# CONFIG_SCSI_QLA21XX is not set
   2.171 -# CONFIG_SCSI_QLA22XX is not set
   2.172 -# CONFIG_SCSI_QLA2300 is not set
   2.173 -# CONFIG_SCSI_QLA2322 is not set
   2.174 -# CONFIG_SCSI_QLA6312 is not set
   2.175 -# CONFIG_SCSI_QLA24XX is not set
   2.176 +# CONFIG_SCSI_QLA_FC is not set
   2.177  # CONFIG_SCSI_LPFC is not set
   2.178  # CONFIG_SCSI_DC395x is not set
   2.179  # CONFIG_SCSI_DC390T is not set
   2.180 @@ -721,12 +682,14 @@ CONFIG_ACENIC=y
   2.181  # CONFIG_DL2K is not set
   2.182  CONFIG_E1000=y
   2.183  # CONFIG_E1000_NAPI is not set
   2.184 +# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
   2.185  # CONFIG_NS83820 is not set
   2.186  # CONFIG_HAMACHI is not set
   2.187  # CONFIG_YELLOWFIN is not set
   2.188  # CONFIG_R8169 is not set
   2.189  # CONFIG_SIS190 is not set
   2.190  # CONFIG_SKGE is not set
   2.191 +# CONFIG_SKY2 is not set
   2.192  CONFIG_SK98LIN=y
   2.193  # CONFIG_VIA_VELOCITY is not set
   2.194  CONFIG_TIGON3=y
   2.195 @@ -884,6 +847,7 @@ CONFIG_DRM_SIS=m
   2.196  # CONFIG_DRM_VIA is not set
   2.197  # CONFIG_DRM_SAVAGE is not set
   2.198  # CONFIG_MWAVE is not set
   2.199 +# CONFIG_CS5535_GPIO is not set
   2.200  # CONFIG_RAW_DRIVER is not set
   2.201  # CONFIG_HPET is not set
   2.202  # CONFIG_HANGCHECK_TIMER is not set
   2.203 @@ -900,6 +864,12 @@ CONFIG_DRM_SIS=m
   2.204  # CONFIG_I2C is not set
   2.205  
   2.206  #
   2.207 +# SPI support
   2.208 +#
   2.209 +# CONFIG_SPI is not set
   2.210 +# CONFIG_SPI_MASTER is not set
   2.211 +
   2.212 +#
   2.213  # Dallas's 1-wire bus
   2.214  #
   2.215  # CONFIG_W1 is not set
   2.216 @@ -988,12 +958,14 @@ CONFIG_USB_UHCI_HCD=y
   2.217  # may also be needed; see USB_STORAGE Help for more information
   2.218  #
   2.219  # CONFIG_USB_STORAGE is not set
   2.220 +# CONFIG_USB_LIBUSUAL is not set
   2.221  
   2.222  #
   2.223  # USB Input Devices
   2.224  #
   2.225  CONFIG_USB_HID=y
   2.226  CONFIG_USB_HIDINPUT=y
   2.227 +# CONFIG_USB_HIDINPUT_POWERBOOK is not set
   2.228  # CONFIG_HID_FF is not set
   2.229  # CONFIG_USB_HIDDEV is not set
   2.230  # CONFIG_USB_AIPTEK is not set
   2.231 @@ -1007,6 +979,7 @@ CONFIG_USB_HIDINPUT=y
   2.232  # CONFIG_USB_YEALINK is not set
   2.233  # CONFIG_USB_XPAD is not set
   2.234  # CONFIG_USB_ATI_REMOTE is not set
   2.235 +# CONFIG_USB_ATI_REMOTE2 is not set
   2.236  # CONFIG_USB_KEYSPAN_REMOTE is not set
   2.237  # CONFIG_USB_APPLETOUCH is not set
   2.238  
   2.239 @@ -1084,6 +1057,11 @@ CONFIG_USB_MON=y
   2.240  #
   2.241  
   2.242  #
   2.243 +# EDAC - error detection and reporting (RAS)
   2.244 +#
   2.245 +# CONFIG_EDAC is not set
   2.246 +
   2.247 +#
   2.248  # File systems
   2.249  #
   2.250  CONFIG_EXT2_FS=y
   2.251 @@ -1103,6 +1081,7 @@ CONFIG_REISERFS_FS=y
   2.252  # CONFIG_JFS_FS is not set
   2.253  # CONFIG_FS_POSIX_ACL is not set
   2.254  # CONFIG_XFS_FS is not set
   2.255 +# CONFIG_OCFS2_FS is not set
   2.256  # CONFIG_MINIX_FS is not set
   2.257  # CONFIG_ROMFS_FS is not set
   2.258  CONFIG_INOTIFY=y
   2.259 @@ -1141,6 +1120,7 @@ CONFIG_TMPFS=y
   2.260  # CONFIG_HUGETLB_PAGE is not set
   2.261  CONFIG_RAMFS=y
   2.262  # CONFIG_RELAYFS_FS is not set
   2.263 +# CONFIG_CONFIGFS_FS is not set
   2.264  
   2.265  #
   2.266  # Miscellaneous filesystems
   2.267 @@ -1246,12 +1226,13 @@ CONFIG_NLS_ISO8859_1=y
   2.268  # Kernel hacking
   2.269  #
   2.270  # CONFIG_PRINTK_TIME is not set
   2.271 +CONFIG_MAGIC_SYSRQ=y
   2.272  CONFIG_DEBUG_KERNEL=y
   2.273 -CONFIG_MAGIC_SYSRQ=y
   2.274  CONFIG_LOG_BUF_SHIFT=14
   2.275  CONFIG_DETECT_SOFTLOCKUP=y
   2.276  # CONFIG_SCHEDSTATS is not set
   2.277  # CONFIG_DEBUG_SLAB is not set
   2.278 +# CONFIG_DEBUG_MUTEXES is not set
   2.279  # CONFIG_DEBUG_SPINLOCK is not set
   2.280  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
   2.281  # CONFIG_DEBUG_KOBJECT is not set
   2.282 @@ -1261,11 +1242,13 @@ CONFIG_DEBUG_BUGVERBOSE=y
   2.283  # CONFIG_DEBUG_FS is not set
   2.284  # CONFIG_DEBUG_VM is not set
   2.285  CONFIG_FRAME_POINTER=y
   2.286 +CONFIG_FORCED_INLINING=y
   2.287  # CONFIG_RCU_TORTURE_TEST is not set
   2.288  CONFIG_EARLY_PRINTK=y
   2.289  # CONFIG_DEBUG_STACKOVERFLOW is not set
   2.290  # CONFIG_DEBUG_STACK_USAGE is not set
   2.291  # CONFIG_DEBUG_PAGEALLOC is not set
   2.292 +# CONFIG_DEBUG_RODATA is not set
   2.293  # CONFIG_4KSTACKS is not set
   2.294  CONFIG_X86_FIND_SMP_CONFIG=y
   2.295  CONFIG_X86_MPPARSE=y
   2.296 @@ -1293,6 +1276,7 @@ CONFIG_CRYPTO_DES=m
   2.297  # CONFIG_CRYPTO_BLOWFISH is not set
   2.298  # CONFIG_CRYPTO_TWOFISH is not set
   2.299  # CONFIG_CRYPTO_SERPENT is not set
   2.300 +# CONFIG_CRYPTO_AES is not set
   2.301  # CONFIG_CRYPTO_AES_586 is not set
   2.302  # CONFIG_CRYPTO_CAST5 is not set
   2.303  # CONFIG_CRYPTO_CAST6 is not set
   2.304 @@ -1344,3 +1328,4 @@ CONFIG_ZLIB_INFLATE=y
   2.305  CONFIG_GENERIC_HARDIRQS=y
   2.306  CONFIG_GENERIC_IRQ_PROBE=y
   2.307  CONFIG_X86_BIOS_REBOOT=y
   2.308 +CONFIG_KTIME_SCALAR=y
     3.1 --- a/buildconfigs/linux-defconfig_xen0_x86_64	Thu Feb 02 19:15:22 2006 +0100
     3.2 +++ b/buildconfigs/linux-defconfig_xen0_x86_64	Thu Feb 02 19:16:38 2006 +0000
     3.3 @@ -1,7 +1,7 @@
     3.4  #
     3.5  # Automatically generated make config: don't edit
     3.6 -# Linux kernel version: 2.6.15-xen0
     3.7 -# Wed Feb  1 15:50:08 2006
     3.8 +# Linux kernel version: 2.6.16-rc1-git4
     3.9 +# Thu Feb  2 17:51:17 2006
    3.10  #
    3.11  CONFIG_X86_64=y
    3.12  CONFIG_64BIT=y
    3.13 @@ -15,6 +15,7 @@ CONFIG_EARLY_PRINTK=y
    3.14  CONFIG_GENERIC_ISA_DMA=y
    3.15  CONFIG_GENERIC_IOMAP=y
    3.16  CONFIG_ARCH_MAY_HAVE_PC_FDC=y
    3.17 +CONFIG_DMI=y
    3.18  
    3.19  #
    3.20  # Code maturity level options
    3.21 @@ -36,17 +37,19 @@ CONFIG_SYSVIPC=y
    3.22  # CONFIG_BSD_PROCESS_ACCT is not set
    3.23  CONFIG_SYSCTL=y
    3.24  # CONFIG_AUDIT is not set
    3.25 -CONFIG_HOTPLUG=y
    3.26 -CONFIG_KOBJECT_UEVENT=y
    3.27  # CONFIG_IKCONFIG is not set
    3.28  CONFIG_INITRAMFS_SOURCE=""
    3.29 +CONFIG_UID16=y
    3.30 +CONFIG_VM86=y
    3.31  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
    3.32  # CONFIG_EMBEDDED is not set
    3.33  CONFIG_KALLSYMS=y
    3.34  # CONFIG_KALLSYMS_ALL is not set
    3.35  # CONFIG_KALLSYMS_EXTRA_PASS is not set
    3.36 +CONFIG_HOTPLUG=y
    3.37  CONFIG_PRINTK=y
    3.38  CONFIG_BUG=y
    3.39 +CONFIG_ELF_CORE=y
    3.40  CONFIG_BASE_FULL=y
    3.41  CONFIG_FUTEX=y
    3.42  CONFIG_EPOLL=y
    3.43 @@ -55,8 +58,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
    3.44  CONFIG_CC_ALIGN_LABELS=0
    3.45  CONFIG_CC_ALIGN_LOOPS=0
    3.46  CONFIG_CC_ALIGN_JUMPS=0
    3.47 +CONFIG_SLAB=y
    3.48  # CONFIG_TINY_SHMEM is not set
    3.49  CONFIG_BASE_SMALL=0
    3.50 +# CONFIG_SLOB is not set
    3.51  
    3.52  #
    3.53  # Loadable module support
    3.54 @@ -90,6 +95,8 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
    3.55  #
    3.56  # Processor type and features
    3.57  #
    3.58 +CONFIG_X86_PC=y
    3.59 +# CONFIG_X86_VSMP is not set
    3.60  # CONFIG_MK8 is not set
    3.61  # CONFIG_MPSC is not set
    3.62  CONFIG_GENERIC_CPU=y
    3.63 @@ -107,6 +114,7 @@ CONFIG_X86_LOCAL_APIC=y
    3.64  CONFIG_PREEMPT_NONE=y
    3.65  # CONFIG_PREEMPT_VOLUNTARY is not set
    3.66  # CONFIG_PREEMPT is not set
    3.67 +CONFIG_ARCH_SPARSEMEM_ENABLE=y
    3.68  CONFIG_ARCH_FLATMEM_ENABLE=y
    3.69  CONFIG_SELECT_MEMORY_MODEL=y
    3.70  CONFIG_FLATMEM_MANUAL=y
    3.71 @@ -116,9 +124,8 @@ CONFIG_FLATMEM=y
    3.72  CONFIG_FLAT_NODE_MEM_MAP=y
    3.73  # CONFIG_SPARSEMEM_STATIC is not set
    3.74  CONFIG_SPLIT_PTLOCK_CPUS=4096
    3.75 -CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
    3.76  CONFIG_SWIOTLB=y
    3.77 -CONFIG_DUMMY_IOMMU=y
    3.78 +# CONFIG_CRASH_DUMP is not set
    3.79  CONFIG_PHYSICAL_START=0x100000
    3.80  CONFIG_SECCOMP=y
    3.81  # CONFIG_HZ_100 is not set
    3.82 @@ -173,7 +180,6 @@ CONFIG_IA32_EMULATION=y
    3.83  # CONFIG_IA32_AOUT is not set
    3.84  CONFIG_COMPAT=y
    3.85  CONFIG_SYSVIPC_COMPAT=y
    3.86 -CONFIG_UID16=y
    3.87  
    3.88  #
    3.89  # Networking
    3.90 @@ -220,6 +226,7 @@ CONFIG_BRIDGE_NETFILTER=y
    3.91  # Core Netfilter Configuration
    3.92  #
    3.93  # CONFIG_NETFILTER_NETLINK is not set
    3.94 +# CONFIG_NETFILTER_XTABLES is not set
    3.95  
    3.96  #
    3.97  # IP: Netfilter Configuration
    3.98 @@ -236,51 +243,6 @@ CONFIG_IP_NF_FTP=m
    3.99  # CONFIG_IP_NF_AMANDA is not set
   3.100  # CONFIG_IP_NF_PPTP is not set
   3.101  # CONFIG_IP_NF_QUEUE is not set
   3.102 -CONFIG_IP_NF_IPTABLES=m
   3.103 -# CONFIG_IP_NF_MATCH_LIMIT is not set
   3.104 -CONFIG_IP_NF_MATCH_IPRANGE=m
   3.105 -# CONFIG_IP_NF_MATCH_MAC is not set
   3.106 -# CONFIG_IP_NF_MATCH_PKTTYPE is not set
   3.107 -# CONFIG_IP_NF_MATCH_MARK is not set
   3.108 -# CONFIG_IP_NF_MATCH_MULTIPORT is not set
   3.109 -# CONFIG_IP_NF_MATCH_TOS is not set
   3.110 -# CONFIG_IP_NF_MATCH_RECENT is not set
   3.111 -# CONFIG_IP_NF_MATCH_ECN is not set
   3.112 -# CONFIG_IP_NF_MATCH_DSCP is not set
   3.113 -# CONFIG_IP_NF_MATCH_AH_ESP is not set
   3.114 -# CONFIG_IP_NF_MATCH_LENGTH is not set
   3.115 -# CONFIG_IP_NF_MATCH_TTL is not set
   3.116 -# CONFIG_IP_NF_MATCH_TCPMSS is not set
   3.117 -# CONFIG_IP_NF_MATCH_HELPER is not set
   3.118 -# CONFIG_IP_NF_MATCH_STATE is not set
   3.119 -# CONFIG_IP_NF_MATCH_CONNTRACK is not set
   3.120 -# CONFIG_IP_NF_MATCH_OWNER is not set
   3.121 -CONFIG_IP_NF_MATCH_PHYSDEV=m
   3.122 -# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
   3.123 -# CONFIG_IP_NF_MATCH_REALM is not set
   3.124 -# CONFIG_IP_NF_MATCH_SCTP is not set
   3.125 -# CONFIG_IP_NF_MATCH_DCCP is not set
   3.126 -# CONFIG_IP_NF_MATCH_COMMENT is not set
   3.127 -# CONFIG_IP_NF_MATCH_CONNBYTES is not set
   3.128 -# CONFIG_IP_NF_MATCH_HASHLIMIT is not set
   3.129 -# CONFIG_IP_NF_MATCH_STRING is not set
   3.130 -CONFIG_IP_NF_FILTER=m
   3.131 -CONFIG_IP_NF_TARGET_REJECT=m
   3.132 -# CONFIG_IP_NF_TARGET_LOG is not set
   3.133 -# CONFIG_IP_NF_TARGET_ULOG is not set
   3.134 -# CONFIG_IP_NF_TARGET_TCPMSS is not set
   3.135 -# CONFIG_IP_NF_TARGET_NFQUEUE is not set
   3.136 -CONFIG_IP_NF_NAT=m
   3.137 -CONFIG_IP_NF_NAT_NEEDED=y
   3.138 -CONFIG_IP_NF_TARGET_MASQUERADE=m
   3.139 -# CONFIG_IP_NF_TARGET_REDIRECT is not set
   3.140 -# CONFIG_IP_NF_TARGET_NETMAP is not set
   3.141 -# CONFIG_IP_NF_TARGET_SAME is not set
   3.142 -# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
   3.143 -CONFIG_IP_NF_NAT_FTP=m
   3.144 -# CONFIG_IP_NF_MANGLE is not set
   3.145 -# CONFIG_IP_NF_RAW is not set
   3.146 -# CONFIG_IP_NF_ARPTABLES is not set
   3.147  
   3.148  #
   3.149  # Bridge: Netfilter Configuration
   3.150 @@ -296,6 +258,11 @@ CONFIG_IP_NF_NAT_FTP=m
   3.151  # SCTP Configuration (EXPERIMENTAL)
   3.152  #
   3.153  # CONFIG_IP_SCTP is not set
   3.154 +
   3.155 +#
   3.156 +# TIPC Configuration (EXPERIMENTAL)
   3.157 +#
   3.158 +# CONFIG_TIPC is not set
   3.159  # CONFIG_ATM is not set
   3.160  CONFIG_BRIDGE=y
   3.161  # CONFIG_VLAN_8021Q is not set
   3.162 @@ -499,6 +466,7 @@ CONFIG_AIC79XX_REG_PRETTY_PRINT=y
   3.163  # CONFIG_SCSI_ADVANSYS is not set
   3.164  CONFIG_MEGARAID_NEWGEN=y
   3.165  # CONFIG_MEGARAID_MM is not set
   3.166 +# CONFIG_MEGARAID_LEGACY is not set
   3.167  # CONFIG_MEGARAID_SAS is not set
   3.168  CONFIG_SCSI_SATA=y
   3.169  # CONFIG_SCSI_SATA_AHCI is not set
   3.170 @@ -531,13 +499,7 @@ CONFIG_SCSI_BUSLOGIC=y
   3.171  # CONFIG_SCSI_IPR is not set
   3.172  # CONFIG_SCSI_QLOGIC_FC is not set
   3.173  # CONFIG_SCSI_QLOGIC_1280 is not set
   3.174 -CONFIG_SCSI_QLA2XXX=y
   3.175 -# CONFIG_SCSI_QLA21XX is not set
   3.176 -# CONFIG_SCSI_QLA22XX is not set
   3.177 -# CONFIG_SCSI_QLA2300 is not set
   3.178 -# CONFIG_SCSI_QLA2322 is not set
   3.179 -# CONFIG_SCSI_QLA6312 is not set
   3.180 -# CONFIG_SCSI_QLA24XX is not set
   3.181 +# CONFIG_SCSI_QLA_FC is not set
   3.182  # CONFIG_SCSI_LPFC is not set
   3.183  # CONFIG_SCSI_DC395x is not set
   3.184  # CONFIG_SCSI_DC390T is not set
   3.185 @@ -659,12 +621,14 @@ CONFIG_ACENIC=y
   3.186  # CONFIG_DL2K is not set
   3.187  CONFIG_E1000=y
   3.188  # CONFIG_E1000_NAPI is not set
   3.189 +# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
   3.190  # CONFIG_NS83820 is not set
   3.191  # CONFIG_HAMACHI is not set
   3.192  # CONFIG_YELLOWFIN is not set
   3.193  # CONFIG_R8169 is not set
   3.194  # CONFIG_SIS190 is not set
   3.195  # CONFIG_SKGE is not set
   3.196 +# CONFIG_SKY2 is not set
   3.197  CONFIG_SK98LIN=y
   3.198  # CONFIG_VIA_VELOCITY is not set
   3.199  CONFIG_TIGON3=y
   3.200 @@ -825,6 +789,12 @@ CONFIG_DRM_SIS=m
   3.201  # CONFIG_I2C is not set
   3.202  
   3.203  #
   3.204 +# SPI support
   3.205 +#
   3.206 +# CONFIG_SPI is not set
   3.207 +# CONFIG_SPI_MASTER is not set
   3.208 +
   3.209 +#
   3.210  # Dallas's 1-wire bus
   3.211  #
   3.212  # CONFIG_W1 is not set
   3.213 @@ -913,12 +883,14 @@ CONFIG_USB_UHCI_HCD=y
   3.214  # may also be needed; see USB_STORAGE Help for more information
   3.215  #
   3.216  # CONFIG_USB_STORAGE is not set
   3.217 +# CONFIG_USB_LIBUSUAL is not set
   3.218  
   3.219  #
   3.220  # USB Input Devices
   3.221  #
   3.222  CONFIG_USB_HID=y
   3.223  CONFIG_USB_HIDINPUT=y
   3.224 +# CONFIG_USB_HIDINPUT_POWERBOOK is not set
   3.225  # CONFIG_HID_FF is not set
   3.226  # CONFIG_USB_HIDDEV is not set
   3.227  # CONFIG_USB_AIPTEK is not set
   3.228 @@ -932,6 +904,7 @@ CONFIG_USB_HIDINPUT=y
   3.229  # CONFIG_USB_YEALINK is not set
   3.230  # CONFIG_USB_XPAD is not set
   3.231  # CONFIG_USB_ATI_REMOTE is not set
   3.232 +# CONFIG_USB_ATI_REMOTE2 is not set
   3.233  # CONFIG_USB_KEYSPAN_REMOTE is not set
   3.234  # CONFIG_USB_APPLETOUCH is not set
   3.235  
   3.236 @@ -1017,6 +990,11 @@ CONFIG_INFINIBAND_SRP=y
   3.237  #
   3.238  
   3.239  #
   3.240 +# EDAC - error detection and reporting (RAS)
   3.241 +#
   3.242 +# CONFIG_EDAC is not set
   3.243 +
   3.244 +#
   3.245  # Firmware Drivers
   3.246  #
   3.247  # CONFIG_DELL_RBU is not set
   3.248 @@ -1042,6 +1020,7 @@ CONFIG_REISERFS_FS=y
   3.249  # CONFIG_JFS_FS is not set
   3.250  # CONFIG_FS_POSIX_ACL is not set
   3.251  # CONFIG_XFS_FS is not set
   3.252 +# CONFIG_OCFS2_FS is not set
   3.253  # CONFIG_MINIX_FS is not set
   3.254  # CONFIG_ROMFS_FS is not set
   3.255  CONFIG_INOTIFY=y
   3.256 @@ -1080,6 +1059,7 @@ CONFIG_TMPFS=y
   3.257  # CONFIG_HUGETLB_PAGE is not set
   3.258  CONFIG_RAMFS=y
   3.259  # CONFIG_RELAYFS_FS is not set
   3.260 +# CONFIG_CONFIGFS_FS is not set
   3.261  
   3.262  #
   3.263  # Miscellaneous filesystems
   3.264 @@ -1186,20 +1166,23 @@ CONFIG_NLS_ISO8859_1=y
   3.265  # Kernel hacking
   3.266  #
   3.267  # CONFIG_PRINTK_TIME is not set
   3.268 +CONFIG_MAGIC_SYSRQ=y
   3.269  CONFIG_DEBUG_KERNEL=y
   3.270 -CONFIG_MAGIC_SYSRQ=y
   3.271  CONFIG_LOG_BUF_SHIFT=15
   3.272  CONFIG_DETECT_SOFTLOCKUP=y
   3.273  # CONFIG_SCHEDSTATS is not set
   3.274  # CONFIG_DEBUG_SLAB is not set
   3.275 +# CONFIG_DEBUG_MUTEXES is not set
   3.276  # CONFIG_DEBUG_SPINLOCK is not set
   3.277  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
   3.278  # CONFIG_DEBUG_KOBJECT is not set
   3.279  # CONFIG_DEBUG_FS is not set
   3.280  # CONFIG_DEBUG_VM is not set
   3.281  CONFIG_FRAME_POINTER=y
   3.282 +CONFIG_FORCED_INLINING=y
   3.283  # CONFIG_RCU_TORTURE_TEST is not set
   3.284  # CONFIG_INIT_DEBUG is not set
   3.285 +# CONFIG_DEBUG_RODATA is not set
   3.286  
   3.287  #
   3.288  # Security options
   3.289 @@ -1224,6 +1207,7 @@ CONFIG_CRYPTO_DES=m
   3.290  # CONFIG_CRYPTO_BLOWFISH is not set
   3.291  # CONFIG_CRYPTO_TWOFISH is not set
   3.292  # CONFIG_CRYPTO_SERPENT is not set
   3.293 +# CONFIG_CRYPTO_AES is not set
   3.294  # CONFIG_CRYPTO_AES_X86_64 is not set
   3.295  # CONFIG_CRYPTO_CAST5 is not set
   3.296  # CONFIG_CRYPTO_CAST6 is not set
     4.1 --- a/buildconfigs/linux-defconfig_xenU_x86_32	Thu Feb 02 19:15:22 2006 +0100
     4.2 +++ b/buildconfigs/linux-defconfig_xenU_x86_32	Thu Feb 02 19:16:38 2006 +0000
     4.3 @@ -1,16 +1,16 @@
     4.4  #
     4.5  # Automatically generated make config: don't edit
     4.6 -# Linux kernel version: 2.6.15-xenU
     4.7 -# Wed Feb  1 17:28:35 2006
     4.8 +# Linux kernel version: 2.6.16-rc1-git4-xenU
     4.9 +# Thu Feb  2 18:28:58 2006
    4.10  #
    4.11  CONFIG_X86_32=y
    4.12  CONFIG_SEMAPHORE_SLEEPERS=y
    4.13  CONFIG_X86=y
    4.14  CONFIG_MMU=y
    4.15 -CONFIG_UID16=y
    4.16  CONFIG_GENERIC_ISA_DMA=y
    4.17  CONFIG_GENERIC_IOMAP=y
    4.18  CONFIG_ARCH_MAY_HAVE_PC_FDC=y
    4.19 +CONFIG_DMI=y
    4.20  
    4.21  #
    4.22  # Code maturity level options
    4.23 @@ -31,18 +31,20 @@ CONFIG_SYSVIPC=y
    4.24  # CONFIG_BSD_PROCESS_ACCT is not set
    4.25  CONFIG_SYSCTL=y
    4.26  # CONFIG_AUDIT is not set
    4.27 -CONFIG_HOTPLUG=y
    4.28 -CONFIG_KOBJECT_UEVENT=y
    4.29  # CONFIG_IKCONFIG is not set
    4.30  # CONFIG_CPUSETS is not set
    4.31  CONFIG_INITRAMFS_SOURCE=""
    4.32 +CONFIG_UID16=y
    4.33 +CONFIG_VM86=y
    4.34  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
    4.35  # CONFIG_EMBEDDED is not set
    4.36  CONFIG_KALLSYMS=y
    4.37  # CONFIG_KALLSYMS_ALL is not set
    4.38  # CONFIG_KALLSYMS_EXTRA_PASS is not set
    4.39 +CONFIG_HOTPLUG=y
    4.40  CONFIG_PRINTK=y
    4.41  CONFIG_BUG=y
    4.42 +CONFIG_ELF_CORE=y
    4.43  CONFIG_BASE_FULL=y
    4.44  CONFIG_FUTEX=y
    4.45  CONFIG_EPOLL=y
    4.46 @@ -51,8 +53,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
    4.47  CONFIG_CC_ALIGN_LABELS=0
    4.48  CONFIG_CC_ALIGN_LOOPS=0
    4.49  CONFIG_CC_ALIGN_JUMPS=0
    4.50 +CONFIG_SLAB=y
    4.51  # CONFIG_TINY_SHMEM is not set
    4.52  CONFIG_BASE_SMALL=0
    4.53 +# CONFIG_SLOB is not set
    4.54  
    4.55  #
    4.56  # Loadable module support
    4.57 @@ -116,6 +120,7 @@ CONFIG_M686=y
    4.58  # CONFIG_MWINCHIP2 is not set
    4.59  # CONFIG_MWINCHIP3D is not set
    4.60  # CONFIG_MGEODEGX1 is not set
    4.61 +# CONFIG_MGEODE_LX is not set
    4.62  # CONFIG_MCYRIXIII is not set
    4.63  # CONFIG_MVIAC3_2 is not set
    4.64  # CONFIG_X86_GENERIC is not set
    4.65 @@ -152,10 +157,9 @@ CONFIG_X86_CPUID=y
    4.66  # CONFIG_DELL_RBU is not set
    4.67  # CONFIG_DCDBAS is not set
    4.68  # CONFIG_NOHIGHMEM is not set
    4.69 -# CONFIG_HIGHMEM4G is not set
    4.70 -CONFIG_HIGHMEM64G=y
    4.71 +CONFIG_HIGHMEM4G=y
    4.72 +# CONFIG_HIGHMEM64G is not set
    4.73  CONFIG_HIGHMEM=y
    4.74 -CONFIG_X86_PAE=y
    4.75  CONFIG_SELECT_MEMORY_MODEL=y
    4.76  CONFIG_FLATMEM_MANUAL=y
    4.77  # CONFIG_DISCONTIGMEM_MANUAL is not set
    4.78 @@ -170,6 +174,7 @@ CONFIG_SECCOMP=y
    4.79  CONFIG_HZ_250=y
    4.80  # CONFIG_HZ_1000 is not set
    4.81  CONFIG_HZ=250
    4.82 +# CONFIG_CRASH_DUMP is not set
    4.83  CONFIG_PHYSICAL_START=0x100000
    4.84  CONFIG_HOTPLUG_CPU=y
    4.85  
    4.86 @@ -223,6 +228,11 @@ CONFIG_TCP_CONG_BIC=y
    4.87  # SCTP Configuration (EXPERIMENTAL)
    4.88  #
    4.89  # CONFIG_IP_SCTP is not set
    4.90 +
    4.91 +#
    4.92 +# TIPC Configuration (EXPERIMENTAL)
    4.93 +#
    4.94 +# CONFIG_TIPC is not set
    4.95  # CONFIG_ATM is not set
    4.96  # CONFIG_BRIDGE is not set
    4.97  # CONFIG_VLAN_8021Q is not set
    4.98 @@ -372,6 +382,11 @@ CONFIG_NETDEVICES=y
    4.99  #
   4.100  
   4.101  #
   4.102 +# EDAC - error detection and reporting (RAS)
   4.103 +#
   4.104 +# CONFIG_EDAC is not set
   4.105 +
   4.106 +#
   4.107  # File systems
   4.108  #
   4.109  CONFIG_EXT2_FS=y
   4.110 @@ -391,6 +406,7 @@ CONFIG_REISERFS_FS=y
   4.111  # CONFIG_JFS_FS is not set
   4.112  # CONFIG_FS_POSIX_ACL is not set
   4.113  # CONFIG_XFS_FS is not set
   4.114 +# CONFIG_OCFS2_FS is not set
   4.115  # CONFIG_MINIX_FS is not set
   4.116  # CONFIG_ROMFS_FS is not set
   4.117  CONFIG_INOTIFY=y
   4.118 @@ -429,6 +445,7 @@ CONFIG_TMPFS=y
   4.119  # CONFIG_HUGETLB_PAGE is not set
   4.120  CONFIG_RAMFS=y
   4.121  # CONFIG_RELAYFS_FS is not set
   4.122 +# CONFIG_CONFIGFS_FS is not set
   4.123  
   4.124  #
   4.125  # Miscellaneous filesystems
   4.126 @@ -529,12 +546,13 @@ CONFIG_NLS_ISO8859_1=y
   4.127  # Kernel hacking
   4.128  #
   4.129  # CONFIG_PRINTK_TIME is not set
   4.130 +CONFIG_MAGIC_SYSRQ=y
   4.131  CONFIG_DEBUG_KERNEL=y
   4.132 -CONFIG_MAGIC_SYSRQ=y
   4.133  CONFIG_LOG_BUF_SHIFT=14
   4.134  CONFIG_DETECT_SOFTLOCKUP=y
   4.135  # CONFIG_SCHEDSTATS is not set
   4.136  # CONFIG_DEBUG_SLAB is not set
   4.137 +# CONFIG_DEBUG_MUTEXES is not set
   4.138  # CONFIG_DEBUG_SPINLOCK is not set
   4.139  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
   4.140  # CONFIG_DEBUG_KOBJECT is not set
   4.141 @@ -544,11 +562,13 @@ CONFIG_DEBUG_BUGVERBOSE=y
   4.142  # CONFIG_DEBUG_FS is not set
   4.143  # CONFIG_DEBUG_VM is not set
   4.144  CONFIG_FRAME_POINTER=y
   4.145 +CONFIG_FORCED_INLINING=y
   4.146  # CONFIG_RCU_TORTURE_TEST is not set
   4.147  CONFIG_EARLY_PRINTK=y
   4.148  # CONFIG_DEBUG_STACKOVERFLOW is not set
   4.149  # CONFIG_DEBUG_STACK_USAGE is not set
   4.150  # CONFIG_DEBUG_PAGEALLOC is not set
   4.151 +# CONFIG_DEBUG_RODATA is not set
   4.152  # CONFIG_4KSTACKS is not set
   4.153  
   4.154  #
   4.155 @@ -574,6 +594,7 @@ CONFIG_CRYPTO_MD5=m
   4.156  # CONFIG_CRYPTO_BLOWFISH is not set
   4.157  # CONFIG_CRYPTO_TWOFISH is not set
   4.158  # CONFIG_CRYPTO_SERPENT is not set
   4.159 +# CONFIG_CRYPTO_AES is not set
   4.160  # CONFIG_CRYPTO_AES_586 is not set
   4.161  # CONFIG_CRYPTO_CAST5 is not set
   4.162  # CONFIG_CRYPTO_CAST6 is not set
   4.163 @@ -622,3 +643,4 @@ CONFIG_GENERIC_PENDING_IRQ=y
   4.164  CONFIG_X86_SMP=y
   4.165  CONFIG_X86_BIOS_REBOOT=y
   4.166  CONFIG_X86_TRAMPOLINE=y
   4.167 +CONFIG_KTIME_SCALAR=y
     5.1 --- a/buildconfigs/linux-defconfig_xenU_x86_64	Thu Feb 02 19:15:22 2006 +0100
     5.2 +++ b/buildconfigs/linux-defconfig_xenU_x86_64	Thu Feb 02 19:16:38 2006 +0000
     5.3 @@ -1,7 +1,7 @@
     5.4  #
     5.5  # Automatically generated make config: don't edit
     5.6 -# Linux kernel version: 2.6.15-xenU
     5.7 -# Wed Feb  1 15:49:27 2006
     5.8 +# Linux kernel version: 2.6.16-rc1-git4
     5.9 +# Thu Feb  2 17:50:11 2006
    5.10  #
    5.11  CONFIG_X86_64=y
    5.12  CONFIG_64BIT=y
    5.13 @@ -15,6 +15,7 @@ CONFIG_EARLY_PRINTK=y
    5.14  CONFIG_GENERIC_ISA_DMA=y
    5.15  CONFIG_GENERIC_IOMAP=y
    5.16  CONFIG_ARCH_MAY_HAVE_PC_FDC=y
    5.17 +CONFIG_DMI=y
    5.18  
    5.19  #
    5.20  # Code maturity level options
    5.21 @@ -37,18 +38,20 @@ CONFIG_BSD_PROCESS_ACCT=y
    5.22  CONFIG_SYSCTL=y
    5.23  CONFIG_AUDIT=y
    5.24  CONFIG_AUDITSYSCALL=y
    5.25 -CONFIG_HOTPLUG=y
    5.26 -CONFIG_KOBJECT_UEVENT=y
    5.27  # CONFIG_IKCONFIG is not set
    5.28  # CONFIG_CPUSETS is not set
    5.29  CONFIG_INITRAMFS_SOURCE=""
    5.30 +CONFIG_UID16=y
    5.31 +CONFIG_VM86=y
    5.32  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
    5.33  # CONFIG_EMBEDDED is not set
    5.34  CONFIG_KALLSYMS=y
    5.35  # CONFIG_KALLSYMS_ALL is not set
    5.36  CONFIG_KALLSYMS_EXTRA_PASS=y
    5.37 +CONFIG_HOTPLUG=y
    5.38  CONFIG_PRINTK=y
    5.39  CONFIG_BUG=y
    5.40 +CONFIG_ELF_CORE=y
    5.41  CONFIG_BASE_FULL=y
    5.42  CONFIG_FUTEX=y
    5.43  CONFIG_EPOLL=y
    5.44 @@ -57,8 +60,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
    5.45  CONFIG_CC_ALIGN_LABELS=0
    5.46  CONFIG_CC_ALIGN_LOOPS=0
    5.47  CONFIG_CC_ALIGN_JUMPS=0
    5.48 +CONFIG_SLAB=y
    5.49  # CONFIG_TINY_SHMEM is not set
    5.50  CONFIG_BASE_SMALL=0
    5.51 +# CONFIG_SLOB is not set
    5.52  
    5.53  #
    5.54  # Loadable module support
    5.55 @@ -93,6 +98,8 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
    5.56  #
    5.57  # Processor type and features
    5.58  #
    5.59 +CONFIG_X86_PC=y
    5.60 +# CONFIG_X86_VSMP is not set
    5.61  # CONFIG_MK8 is not set
    5.62  CONFIG_MPSC=y
    5.63  # CONFIG_GENERIC_CPU is not set
    5.64 @@ -109,6 +116,7 @@ CONFIG_PREEMPT_NONE=y
    5.65  # CONFIG_PREEMPT_VOLUNTARY is not set
    5.66  # CONFIG_PREEMPT is not set
    5.67  CONFIG_PREEMPT_BKL=y
    5.68 +CONFIG_ARCH_SPARSEMEM_ENABLE=y
    5.69  CONFIG_ARCH_FLATMEM_ENABLE=y
    5.70  CONFIG_SELECT_MEMORY_MODEL=y
    5.71  CONFIG_FLATMEM_MANUAL=y
    5.72 @@ -118,10 +126,9 @@ CONFIG_FLATMEM=y
    5.73  CONFIG_FLAT_NODE_MEM_MAP=y
    5.74  # CONFIG_SPARSEMEM_STATIC is not set
    5.75  CONFIG_SPLIT_PTLOCK_CPUS=4096
    5.76 -CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
    5.77  CONFIG_NR_CPUS=8
    5.78  # CONFIG_HOTPLUG_CPU is not set
    5.79 -CONFIG_DUMMY_IOMMU=y
    5.80 +# CONFIG_CRASH_DUMP is not set
    5.81  CONFIG_PHYSICAL_START=0x100000
    5.82  CONFIG_SECCOMP=y
    5.83  # CONFIG_HZ_100 is not set
    5.84 @@ -148,7 +155,6 @@ CONFIG_IA32_EMULATION=y
    5.85  # CONFIG_IA32_AOUT is not set
    5.86  CONFIG_COMPAT=y
    5.87  CONFIG_SYSVIPC_COMPAT=y
    5.88 -CONFIG_UID16=y
    5.89  
    5.90  #
    5.91  # Networking
    5.92 @@ -243,6 +249,7 @@ CONFIG_BRIDGE_NETFILTER=y
    5.93  # Core Netfilter Configuration
    5.94  #
    5.95  # CONFIG_NETFILTER_NETLINK is not set
    5.96 +# CONFIG_NETFILTER_XTABLES is not set
    5.97  
    5.98  #
    5.99  # IP: Netfilter Configuration
   5.100 @@ -259,91 +266,11 @@ CONFIG_IP_NF_TFTP=m
   5.101  CONFIG_IP_NF_AMANDA=m
   5.102  # CONFIG_IP_NF_PPTP is not set
   5.103  CONFIG_IP_NF_QUEUE=m
   5.104 -CONFIG_IP_NF_IPTABLES=m
   5.105 -CONFIG_IP_NF_MATCH_LIMIT=m
   5.106 -CONFIG_IP_NF_MATCH_IPRANGE=m
   5.107 -CONFIG_IP_NF_MATCH_MAC=m
   5.108 -CONFIG_IP_NF_MATCH_PKTTYPE=m
   5.109 -CONFIG_IP_NF_MATCH_MARK=m
   5.110 -CONFIG_IP_NF_MATCH_MULTIPORT=m
   5.111 -CONFIG_IP_NF_MATCH_TOS=m
   5.112 -CONFIG_IP_NF_MATCH_RECENT=m
   5.113 -CONFIG_IP_NF_MATCH_ECN=m
   5.114 -CONFIG_IP_NF_MATCH_DSCP=m
   5.115 -CONFIG_IP_NF_MATCH_AH_ESP=m
   5.116 -CONFIG_IP_NF_MATCH_LENGTH=m
   5.117 -CONFIG_IP_NF_MATCH_TTL=m
   5.118 -CONFIG_IP_NF_MATCH_TCPMSS=m
   5.119 -CONFIG_IP_NF_MATCH_HELPER=m
   5.120 -CONFIG_IP_NF_MATCH_STATE=m
   5.121 -CONFIG_IP_NF_MATCH_CONNTRACK=m
   5.122 -CONFIG_IP_NF_MATCH_OWNER=m
   5.123 -CONFIG_IP_NF_MATCH_PHYSDEV=m
   5.124 -CONFIG_IP_NF_MATCH_ADDRTYPE=m
   5.125 -CONFIG_IP_NF_MATCH_REALM=m
   5.126 -CONFIG_IP_NF_MATCH_SCTP=m
   5.127 -# CONFIG_IP_NF_MATCH_DCCP is not set
   5.128 -CONFIG_IP_NF_MATCH_COMMENT=m
   5.129 -# CONFIG_IP_NF_MATCH_CONNBYTES is not set
   5.130 -# CONFIG_IP_NF_MATCH_HASHLIMIT is not set
   5.131 -# CONFIG_IP_NF_MATCH_STRING is not set
   5.132 -CONFIG_IP_NF_FILTER=m
   5.133 -CONFIG_IP_NF_TARGET_REJECT=m
   5.134 -CONFIG_IP_NF_TARGET_LOG=m
   5.135 -CONFIG_IP_NF_TARGET_ULOG=m
   5.136 -CONFIG_IP_NF_TARGET_TCPMSS=m
   5.137 -# CONFIG_IP_NF_TARGET_NFQUEUE is not set
   5.138 -CONFIG_IP_NF_NAT=m
   5.139 -CONFIG_IP_NF_NAT_NEEDED=y
   5.140 -CONFIG_IP_NF_TARGET_MASQUERADE=m
   5.141 -CONFIG_IP_NF_TARGET_REDIRECT=m
   5.142 -CONFIG_IP_NF_TARGET_NETMAP=m
   5.143 -CONFIG_IP_NF_TARGET_SAME=m
   5.144 -CONFIG_IP_NF_NAT_SNMP_BASIC=m
   5.145 -CONFIG_IP_NF_NAT_IRC=m
   5.146 -CONFIG_IP_NF_NAT_FTP=m
   5.147 -CONFIG_IP_NF_NAT_TFTP=m
   5.148 -CONFIG_IP_NF_NAT_AMANDA=m
   5.149 -CONFIG_IP_NF_MANGLE=m
   5.150 -CONFIG_IP_NF_TARGET_TOS=m
   5.151 -CONFIG_IP_NF_TARGET_ECN=m
   5.152 -CONFIG_IP_NF_TARGET_DSCP=m
   5.153 -CONFIG_IP_NF_TARGET_MARK=m
   5.154 -CONFIG_IP_NF_TARGET_CLASSIFY=m
   5.155 -# CONFIG_IP_NF_TARGET_TTL is not set
   5.156 -CONFIG_IP_NF_RAW=m
   5.157 -CONFIG_IP_NF_TARGET_NOTRACK=m
   5.158 -CONFIG_IP_NF_ARPTABLES=m
   5.159 -CONFIG_IP_NF_ARPFILTER=m
   5.160 -CONFIG_IP_NF_ARP_MANGLE=m
   5.161  
   5.162  #
   5.163  # IPv6: Netfilter Configuration (EXPERIMENTAL)
   5.164  #
   5.165  # CONFIG_IP6_NF_QUEUE is not set
   5.166 -CONFIG_IP6_NF_IPTABLES=m
   5.167 -CONFIG_IP6_NF_MATCH_LIMIT=m
   5.168 -CONFIG_IP6_NF_MATCH_MAC=m
   5.169 -CONFIG_IP6_NF_MATCH_RT=m
   5.170 -CONFIG_IP6_NF_MATCH_OPTS=m
   5.171 -CONFIG_IP6_NF_MATCH_FRAG=m
   5.172 -CONFIG_IP6_NF_MATCH_HL=m
   5.173 -CONFIG_IP6_NF_MATCH_MULTIPORT=m
   5.174 -CONFIG_IP6_NF_MATCH_OWNER=m
   5.175 -CONFIG_IP6_NF_MATCH_MARK=m
   5.176 -CONFIG_IP6_NF_MATCH_IPV6HEADER=m
   5.177 -CONFIG_IP6_NF_MATCH_AHESP=m
   5.178 -CONFIG_IP6_NF_MATCH_LENGTH=m
   5.179 -CONFIG_IP6_NF_MATCH_EUI64=m
   5.180 -CONFIG_IP6_NF_MATCH_PHYSDEV=m
   5.181 -CONFIG_IP6_NF_FILTER=m
   5.182 -CONFIG_IP6_NF_TARGET_LOG=m
   5.183 -# CONFIG_IP6_NF_TARGET_REJECT is not set
   5.184 -# CONFIG_IP6_NF_TARGET_NFQUEUE is not set
   5.185 -CONFIG_IP6_NF_MANGLE=m
   5.186 -CONFIG_IP6_NF_TARGET_MARK=m
   5.187 -# CONFIG_IP6_NF_TARGET_HL is not set
   5.188 -CONFIG_IP6_NF_RAW=m
   5.189  
   5.190  #
   5.191  # Bridge: Netfilter Configuration
   5.192 @@ -383,6 +310,11 @@ CONFIG_IP_SCTP=m
   5.193  # CONFIG_SCTP_HMAC_NONE is not set
   5.194  # CONFIG_SCTP_HMAC_SHA1 is not set
   5.195  CONFIG_SCTP_HMAC_MD5=y
   5.196 +
   5.197 +#
   5.198 +# TIPC Configuration (EXPERIMENTAL)
   5.199 +#
   5.200 +# CONFIG_TIPC is not set
   5.201  CONFIG_ATM=m
   5.202  CONFIG_ATM_CLIP=m
   5.203  # CONFIG_ATM_CLIP_NO_ICMP is not set
   5.204 @@ -698,6 +630,11 @@ CONFIG_INPUT=m
   5.205  #
   5.206  
   5.207  #
   5.208 +# EDAC - error detection and reporting (RAS)
   5.209 +#
   5.210 +# CONFIG_EDAC is not set
   5.211 +
   5.212 +#
   5.213  # Firmware Drivers
   5.214  #
   5.215  # CONFIG_DELL_RBU is not set
   5.216 @@ -736,6 +673,7 @@ CONFIG_XFS_EXPORT=y
   5.217  CONFIG_XFS_SECURITY=y
   5.218  CONFIG_XFS_POSIX_ACL=y
   5.219  # CONFIG_XFS_RT is not set
   5.220 +# CONFIG_OCFS2_FS is not set
   5.221  CONFIG_MINIX_FS=m
   5.222  CONFIG_ROMFS_FS=m
   5.223  CONFIG_INOTIFY=y
   5.224 @@ -778,6 +716,7 @@ CONFIG_TMPFS=y
   5.225  # CONFIG_HUGETLB_PAGE is not set
   5.226  CONFIG_RAMFS=y
   5.227  # CONFIG_RELAYFS_FS is not set
   5.228 +# CONFIG_CONFIGFS_FS is not set
   5.229  
   5.230  #
   5.231  # Miscellaneous filesystems
   5.232 @@ -857,6 +796,7 @@ CONFIG_UNIXWARE_DISKLABEL=y
   5.233  CONFIG_SGI_PARTITION=y
   5.234  # CONFIG_ULTRIX_PARTITION is not set
   5.235  CONFIG_SUN_PARTITION=y
   5.236 +# CONFIG_KARMA_PARTITION is not set
   5.237  CONFIG_EFI_PARTITION=y
   5.238  
   5.239  #
   5.240 @@ -913,20 +853,23 @@ CONFIG_NLS_UTF8=m
   5.241  # Kernel hacking
   5.242  #
   5.243  # CONFIG_PRINTK_TIME is not set
   5.244 +CONFIG_MAGIC_SYSRQ=y
   5.245  CONFIG_DEBUG_KERNEL=y
   5.246 -CONFIG_MAGIC_SYSRQ=y
   5.247  CONFIG_LOG_BUF_SHIFT=15
   5.248  CONFIG_DETECT_SOFTLOCKUP=y
   5.249  # CONFIG_SCHEDSTATS is not set
   5.250  # CONFIG_DEBUG_SLAB is not set
   5.251 +# CONFIG_DEBUG_MUTEXES is not set
   5.252  # CONFIG_DEBUG_SPINLOCK is not set
   5.253  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
   5.254  # CONFIG_DEBUG_KOBJECT is not set
   5.255  # CONFIG_DEBUG_FS is not set
   5.256  # CONFIG_DEBUG_VM is not set
   5.257  CONFIG_FRAME_POINTER=y
   5.258 +CONFIG_FORCED_INLINING=y
   5.259  # CONFIG_RCU_TORTURE_TEST is not set
   5.260  # CONFIG_INIT_DEBUG is not set
   5.261 +# CONFIG_DEBUG_RODATA is not set
   5.262  
   5.263  #
   5.264  # Security options
   5.265 @@ -951,6 +894,7 @@ CONFIG_CRYPTO_DES=m
   5.266  CONFIG_CRYPTO_BLOWFISH=m
   5.267  CONFIG_CRYPTO_TWOFISH=m
   5.268  CONFIG_CRYPTO_SERPENT=m
   5.269 +# CONFIG_CRYPTO_AES is not set
   5.270  # CONFIG_CRYPTO_AES_X86_64 is not set
   5.271  CONFIG_CRYPTO_CAST5=m
   5.272  CONFIG_CRYPTO_CAST6=m
     6.1 --- a/buildconfigs/linux-defconfig_xen_x86_32	Thu Feb 02 19:15:22 2006 +0100
     6.2 +++ b/buildconfigs/linux-defconfig_xen_x86_32	Thu Feb 02 19:16:38 2006 +0000
     6.3 @@ -1,16 +1,16 @@
     6.4  #
     6.5  # Automatically generated make config: don't edit
     6.6 -# Linux kernel version: 2.6.15-xen
     6.7 -# Wed Feb  1 17:28:24 2006
     6.8 +# Linux kernel version: 2.6.16-rc1-git4-xen
     6.9 +# Thu Feb  2 18:43:06 2006
    6.10  #
    6.11  CONFIG_X86_32=y
    6.12  CONFIG_SEMAPHORE_SLEEPERS=y
    6.13  CONFIG_X86=y
    6.14  CONFIG_MMU=y
    6.15 -CONFIG_UID16=y
    6.16  CONFIG_GENERIC_ISA_DMA=y
    6.17  CONFIG_GENERIC_IOMAP=y
    6.18  CONFIG_ARCH_MAY_HAVE_PC_FDC=y
    6.19 +CONFIG_DMI=y
    6.20  
    6.21  #
    6.22  # Code maturity level options
    6.23 @@ -34,18 +34,20 @@ CONFIG_BSD_PROCESS_ACCT=y
    6.24  # CONFIG_BSD_PROCESS_ACCT_V3 is not set
    6.25  CONFIG_SYSCTL=y
    6.26  # CONFIG_AUDIT is not set
    6.27 -CONFIG_HOTPLUG=y
    6.28 -CONFIG_KOBJECT_UEVENT=y
    6.29  # CONFIG_IKCONFIG is not set
    6.30  # CONFIG_CPUSETS is not set
    6.31  CONFIG_INITRAMFS_SOURCE=""
    6.32 +CONFIG_UID16=y
    6.33 +CONFIG_VM86=y
    6.34  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
    6.35  CONFIG_EMBEDDED=y
    6.36  CONFIG_KALLSYMS=y
    6.37  # CONFIG_KALLSYMS_ALL is not set
    6.38  # CONFIG_KALLSYMS_EXTRA_PASS is not set
    6.39 +CONFIG_HOTPLUG=y
    6.40  CONFIG_PRINTK=y
    6.41  CONFIG_BUG=y
    6.42 +CONFIG_ELF_CORE=y
    6.43  CONFIG_BASE_FULL=y
    6.44  CONFIG_FUTEX=y
    6.45  CONFIG_EPOLL=y
    6.46 @@ -54,8 +56,11 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
    6.47  CONFIG_CC_ALIGN_LABELS=0
    6.48  CONFIG_CC_ALIGN_LOOPS=0
    6.49  CONFIG_CC_ALIGN_JUMPS=0
    6.50 +CONFIG_SLAB=y
    6.51  # CONFIG_TINY_SHMEM is not set
    6.52  CONFIG_BASE_SMALL=0
    6.53 +# CONFIG_SLOB is not set
    6.54 +CONFIG_OBSOLETE_INTERMODULE=m
    6.55  
    6.56  #
    6.57  # Loadable module support
    6.58 @@ -119,6 +124,7 @@ CONFIG_M686=y
    6.59  # CONFIG_MWINCHIP2 is not set
    6.60  # CONFIG_MWINCHIP3D is not set
    6.61  # CONFIG_MGEODEGX1 is not set
    6.62 +# CONFIG_MGEODE_LX is not set
    6.63  # CONFIG_MCYRIXIII is not set
    6.64  # CONFIG_MVIAC3_2 is not set
    6.65  # CONFIG_X86_GENERIC is not set
    6.66 @@ -158,10 +164,9 @@ CONFIG_SWIOTLB=y
    6.67  CONFIG_DELL_RBU=m
    6.68  CONFIG_DCDBAS=m
    6.69  # CONFIG_NOHIGHMEM is not set
    6.70 -# CONFIG_HIGHMEM4G is not set
    6.71 -CONFIG_HIGHMEM64G=y
    6.72 +CONFIG_HIGHMEM4G=y
    6.73 +# CONFIG_HIGHMEM64G is not set
    6.74  CONFIG_HIGHMEM=y
    6.75 -CONFIG_X86_PAE=y
    6.76  CONFIG_SELECT_MEMORY_MODEL=y
    6.77  CONFIG_FLATMEM_MANUAL=y
    6.78  # CONFIG_DISCONTIGMEM_MANUAL is not set
    6.79 @@ -177,8 +182,8 @@ CONFIG_SECCOMP=y
    6.80  CONFIG_HZ_250=y
    6.81  # CONFIG_HZ_1000 is not set
    6.82  CONFIG_HZ=250
    6.83 +# CONFIG_CRASH_DUMP is not set
    6.84  CONFIG_PHYSICAL_START=0x100000
    6.85 -# CONFIG_CRASH_DUMP is not set
    6.86  CONFIG_HOTPLUG_CPU=y
    6.87  
    6.88  #
    6.89 @@ -244,6 +249,11 @@ CONFIG_CARDBUS=y
    6.90  # PC-card bridges
    6.91  #
    6.92  CONFIG_YENTA=m
    6.93 +CONFIG_YENTA_O2=y
    6.94 +CONFIG_YENTA_RICOH=y
    6.95 +CONFIG_YENTA_TI=y
    6.96 +CONFIG_YENTA_ENE_TUNE=y
    6.97 +CONFIG_YENTA_TOSHIBA=y
    6.98  CONFIG_PD6729=m
    6.99  CONFIG_I82092=m
   6.100  CONFIG_PCCARD_NONSTATIC=m
   6.101 @@ -313,6 +323,7 @@ CONFIG_TCP_CONG_ADVANCED=y
   6.102  # TCP congestion control
   6.103  #
   6.104  CONFIG_TCP_CONG_BIC=m
   6.105 +CONFIG_TCP_CONG_CUBIC=m
   6.106  CONFIG_TCP_CONG_WESTWOOD=m
   6.107  CONFIG_TCP_CONG_HTCP=m
   6.108  CONFIG_TCP_CONG_HSTCP=m
   6.109 @@ -370,6 +381,29 @@ CONFIG_BRIDGE_NETFILTER=y
   6.110  CONFIG_NETFILTER_NETLINK=m
   6.111  CONFIG_NETFILTER_NETLINK_QUEUE=m
   6.112  CONFIG_NETFILTER_NETLINK_LOG=m
   6.113 +CONFIG_NETFILTER_XTABLES=m
   6.114 +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
   6.115 +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
   6.116 +CONFIG_NETFILTER_XT_TARGET_MARK=m
   6.117 +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
   6.118 +CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
   6.119 +CONFIG_NETFILTER_XT_MATCH_COMMENT=m
   6.120 +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
   6.121 +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
   6.122 +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
   6.123 +CONFIG_NETFILTER_XT_MATCH_DCCP=m
   6.124 +CONFIG_NETFILTER_XT_MATCH_HELPER=m
   6.125 +CONFIG_NETFILTER_XT_MATCH_LENGTH=m
   6.126 +CONFIG_NETFILTER_XT_MATCH_LIMIT=m
   6.127 +CONFIG_NETFILTER_XT_MATCH_MAC=m
   6.128 +CONFIG_NETFILTER_XT_MATCH_MARK=m
   6.129 +CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
   6.130 +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
   6.131 +CONFIG_NETFILTER_XT_MATCH_REALM=m
   6.132 +CONFIG_NETFILTER_XT_MATCH_SCTP=m
   6.133 +CONFIG_NETFILTER_XT_MATCH_STATE=m
   6.134 +CONFIG_NETFILTER_XT_MATCH_STRING=m
   6.135 +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
   6.136  
   6.137  #
   6.138  # IP: Netfilter Configuration
   6.139 @@ -388,40 +422,23 @@ CONFIG_IP_NF_AMANDA=m
   6.140  CONFIG_IP_NF_PPTP=m
   6.141  CONFIG_IP_NF_QUEUE=m
   6.142  CONFIG_IP_NF_IPTABLES=m
   6.143 -CONFIG_IP_NF_MATCH_LIMIT=m
   6.144  CONFIG_IP_NF_MATCH_IPRANGE=m
   6.145 -CONFIG_IP_NF_MATCH_MAC=m
   6.146 -CONFIG_IP_NF_MATCH_PKTTYPE=m
   6.147 -CONFIG_IP_NF_MATCH_MARK=m
   6.148  CONFIG_IP_NF_MATCH_MULTIPORT=m
   6.149  CONFIG_IP_NF_MATCH_TOS=m
   6.150  CONFIG_IP_NF_MATCH_RECENT=m
   6.151  CONFIG_IP_NF_MATCH_ECN=m
   6.152  CONFIG_IP_NF_MATCH_DSCP=m
   6.153  CONFIG_IP_NF_MATCH_AH_ESP=m
   6.154 -CONFIG_IP_NF_MATCH_LENGTH=m
   6.155  CONFIG_IP_NF_MATCH_TTL=m
   6.156 -CONFIG_IP_NF_MATCH_TCPMSS=m
   6.157 -CONFIG_IP_NF_MATCH_HELPER=m
   6.158 -CONFIG_IP_NF_MATCH_STATE=m
   6.159 -CONFIG_IP_NF_MATCH_CONNTRACK=m
   6.160  CONFIG_IP_NF_MATCH_OWNER=m
   6.161 -CONFIG_IP_NF_MATCH_PHYSDEV=m
   6.162  CONFIG_IP_NF_MATCH_ADDRTYPE=m
   6.163 -CONFIG_IP_NF_MATCH_REALM=m
   6.164 -CONFIG_IP_NF_MATCH_SCTP=m
   6.165 -CONFIG_IP_NF_MATCH_DCCP=m
   6.166 -CONFIG_IP_NF_MATCH_COMMENT=m
   6.167 -CONFIG_IP_NF_MATCH_CONNMARK=m
   6.168 -CONFIG_IP_NF_MATCH_CONNBYTES=m
   6.169  CONFIG_IP_NF_MATCH_HASHLIMIT=m
   6.170 -CONFIG_IP_NF_MATCH_STRING=m
   6.171 +CONFIG_IP_NF_MATCH_POLICY=m
   6.172  CONFIG_IP_NF_FILTER=m
   6.173  CONFIG_IP_NF_TARGET_REJECT=m
   6.174  CONFIG_IP_NF_TARGET_LOG=m
   6.175  CONFIG_IP_NF_TARGET_ULOG=m
   6.176  CONFIG_IP_NF_TARGET_TCPMSS=m
   6.177 -CONFIG_IP_NF_TARGET_NFQUEUE=m
   6.178  CONFIG_IP_NF_NAT=m
   6.179  CONFIG_IP_NF_NAT_NEEDED=y
   6.180  CONFIG_IP_NF_TARGET_MASQUERADE=m
   6.181 @@ -438,13 +455,9 @@ CONFIG_IP_NF_MANGLE=m
   6.182  CONFIG_IP_NF_TARGET_TOS=m
   6.183  CONFIG_IP_NF_TARGET_ECN=m
   6.184  CONFIG_IP_NF_TARGET_DSCP=m
   6.185 -CONFIG_IP_NF_TARGET_MARK=m
   6.186 -CONFIG_IP_NF_TARGET_CLASSIFY=m
   6.187  CONFIG_IP_NF_TARGET_TTL=m
   6.188 -CONFIG_IP_NF_TARGET_CONNMARK=m
   6.189  CONFIG_IP_NF_TARGET_CLUSTERIP=m
   6.190  CONFIG_IP_NF_RAW=m
   6.191 -CONFIG_IP_NF_TARGET_NOTRACK=m
   6.192  CONFIG_IP_NF_ARPTABLES=m
   6.193  CONFIG_IP_NF_ARPFILTER=m
   6.194  CONFIG_IP_NF_ARP_MANGLE=m
   6.195 @@ -454,26 +467,20 @@ CONFIG_IP_NF_ARP_MANGLE=m
   6.196  #
   6.197  CONFIG_IP6_NF_QUEUE=m
   6.198  CONFIG_IP6_NF_IPTABLES=m
   6.199 -CONFIG_IP6_NF_MATCH_LIMIT=m
   6.200 -CONFIG_IP6_NF_MATCH_MAC=m
   6.201  CONFIG_IP6_NF_MATCH_RT=m
   6.202  CONFIG_IP6_NF_MATCH_OPTS=m
   6.203  CONFIG_IP6_NF_MATCH_FRAG=m
   6.204  CONFIG_IP6_NF_MATCH_HL=m
   6.205  CONFIG_IP6_NF_MATCH_MULTIPORT=m
   6.206  CONFIG_IP6_NF_MATCH_OWNER=m
   6.207 -CONFIG_IP6_NF_MATCH_MARK=m
   6.208  CONFIG_IP6_NF_MATCH_IPV6HEADER=m
   6.209  CONFIG_IP6_NF_MATCH_AHESP=m
   6.210 -CONFIG_IP6_NF_MATCH_LENGTH=m
   6.211  CONFIG_IP6_NF_MATCH_EUI64=m
   6.212 -CONFIG_IP6_NF_MATCH_PHYSDEV=m
   6.213 +CONFIG_IP6_NF_MATCH_POLICY=m
   6.214  CONFIG_IP6_NF_FILTER=m
   6.215  CONFIG_IP6_NF_TARGET_LOG=m
   6.216  CONFIG_IP6_NF_TARGET_REJECT=m
   6.217 -CONFIG_IP6_NF_TARGET_NFQUEUE=m
   6.218  CONFIG_IP6_NF_MANGLE=m
   6.219 -CONFIG_IP6_NF_TARGET_MARK=m
   6.220  CONFIG_IP6_NF_TARGET_HL=m
   6.221  CONFIG_IP6_NF_RAW=m
   6.222  
   6.223 @@ -533,6 +540,19 @@ CONFIG_IP_SCTP=m
   6.224  # CONFIG_SCTP_HMAC_NONE is not set
   6.225  # CONFIG_SCTP_HMAC_SHA1 is not set
   6.226  CONFIG_SCTP_HMAC_MD5=y
   6.227 +
   6.228 +#
   6.229 +# TIPC Configuration (EXPERIMENTAL)
   6.230 +#
   6.231 +CONFIG_TIPC=m
   6.232 +CONFIG_TIPC_ADVANCED=y
   6.233 +CONFIG_TIPC_ZONES=3
   6.234 +CONFIG_TIPC_CLUSTERS=1
   6.235 +CONFIG_TIPC_NODES=255
   6.236 +CONFIG_TIPC_SLAVE_NODES=0
   6.237 +CONFIG_TIPC_PORTS=8191
   6.238 +CONFIG_TIPC_LOG=0
   6.239 +# CONFIG_TIPC_DEBUG is not set
   6.240  CONFIG_ATM=y
   6.241  CONFIG_ATM_CLIP=y
   6.242  # CONFIG_ATM_CLIP_NO_ICMP is not set
   6.243 @@ -828,6 +848,8 @@ CONFIG_MTD_PLATRAM=m
   6.244  CONFIG_MTD_PMC551=m
   6.245  # CONFIG_MTD_PMC551_BUGFIX is not set
   6.246  # CONFIG_MTD_PMC551_DEBUG is not set
   6.247 +CONFIG_MTD_DATAFLASH=m
   6.248 +CONFIG_MTD_M25P80=m
   6.249  CONFIG_MTD_SLRAM=m
   6.250  CONFIG_MTD_PHRAM=m
   6.251  CONFIG_MTD_MTDRAM=m
   6.252 @@ -1075,6 +1097,7 @@ CONFIG_SCSI_ADVANSYS=m
   6.253  CONFIG_MEGARAID_NEWGEN=y
   6.254  CONFIG_MEGARAID_MM=m
   6.255  CONFIG_MEGARAID_MAILBOX=m
   6.256 +CONFIG_MEGARAID_LEGACY=m
   6.257  CONFIG_MEGARAID_SAS=m
   6.258  CONFIG_SCSI_SATA=m
   6.259  CONFIG_SCSI_SATA_AHCI=m
   6.260 @@ -1114,13 +1137,8 @@ CONFIG_SCSI_IPR=m
   6.261  CONFIG_SCSI_QLOGIC_FC=m
   6.262  CONFIG_SCSI_QLOGIC_FC_FIRMWARE=y
   6.263  CONFIG_SCSI_QLOGIC_1280=m
   6.264 -CONFIG_SCSI_QLA2XXX=m
   6.265 -CONFIG_SCSI_QLA21XX=m
   6.266 -CONFIG_SCSI_QLA22XX=m
   6.267 -CONFIG_SCSI_QLA2300=m
   6.268 -CONFIG_SCSI_QLA2322=m
   6.269 -CONFIG_SCSI_QLA6312=m
   6.270 -CONFIG_SCSI_QLA24XX=m
   6.271 +CONFIG_SCSI_QLA_FC=m
   6.272 +# CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE is not set
   6.273  CONFIG_SCSI_LPFC=m
   6.274  CONFIG_SCSI_DC395x=m
   6.275  CONFIG_SCSI_DC390T=m
   6.276 @@ -1197,15 +1215,13 @@ CONFIG_IEEE1394_SBP2=m
   6.277  CONFIG_IEEE1394_ETH1394=m
   6.278  CONFIG_IEEE1394_DV1394=m
   6.279  CONFIG_IEEE1394_RAWIO=m
   6.280 -CONFIG_IEEE1394_CMP=m
   6.281 -CONFIG_IEEE1394_AMDTP=m
   6.282  
   6.283  #
   6.284  # I2O device support
   6.285  #
   6.286  CONFIG_I2O=m
   6.287 +CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
   6.288  CONFIG_I2O_EXT_ADAPTEC=y
   6.289 -CONFIG_I2O_EXT_ADAPTEC_DMA64=y
   6.290  CONFIG_I2O_CONFIG=m
   6.291  CONFIG_I2O_CONFIG_OLD_IOCTL=y
   6.292  CONFIG_I2O_BUS=m
   6.293 @@ -1315,6 +1331,7 @@ CONFIG_VIA_RHINE=m
   6.294  CONFIG_DL2K=m
   6.295  CONFIG_E1000=m
   6.296  # CONFIG_E1000_NAPI is not set
   6.297 +# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
   6.298  CONFIG_NS83820=m
   6.299  CONFIG_HAMACHI=m
   6.300  CONFIG_YELLOWFIN=m
   6.301 @@ -1323,6 +1340,7 @@ CONFIG_R8169=m
   6.302  # CONFIG_R8169_VLAN is not set
   6.303  CONFIG_SIS190=m
   6.304  CONFIG_SKGE=m
   6.305 +CONFIG_SKY2=m
   6.306  CONFIG_SK98LIN=m
   6.307  CONFIG_VIA_VELOCITY=m
   6.308  CONFIG_TIGON3=m
   6.309 @@ -1370,8 +1388,9 @@ CONFIG_PCMCIA_RAYCS=m
   6.310  #
   6.311  CONFIG_IPW2100=m
   6.312  CONFIG_IPW2100_MONITOR=y
   6.313 -# CONFIG_IPW_DEBUG is not set
   6.314 +# CONFIG_IPW2100_DEBUG is not set
   6.315  CONFIG_IPW2200=m
   6.316 +# CONFIG_IPW2200_DEBUG is not set
   6.317  CONFIG_HERMES=m
   6.318  CONFIG_PLX_HERMES=m
   6.319  CONFIG_TMD_HERMES=m
   6.320 @@ -1703,6 +1722,7 @@ CONFIG_JOYSTICK_GAMECON=m
   6.321  CONFIG_JOYSTICK_TURBOGRAFX=m
   6.322  CONFIG_JOYSTICK_JOYDUMP=m
   6.323  CONFIG_INPUT_TOUCHSCREEN=y
   6.324 +CONFIG_TOUCHSCREEN_ADS7846=m
   6.325  CONFIG_TOUCHSCREEN_GUNZE=m
   6.326  CONFIG_TOUCHSCREEN_ELO=m
   6.327  CONFIG_TOUCHSCREEN_MTOUCH=m
   6.328 @@ -1744,13 +1764,13 @@ CONFIG_SERIAL_8250=m
   6.329  # CONFIG_SERIAL_8250_CS is not set
   6.330  # CONFIG_SERIAL_8250_ACPI is not set
   6.331  CONFIG_SERIAL_8250_NR_UARTS=4
   6.332 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4
   6.333  # CONFIG_SERIAL_8250_EXTENDED is not set
   6.334  
   6.335  #
   6.336  # Non-8250 serial port support
   6.337  #
   6.338 -CONFIG_SERIAL_CORE=m
   6.339 -CONFIG_SERIAL_JSM=m
   6.340 +# CONFIG_SERIAL_JSM is not set
   6.341  CONFIG_UNIX98_PTYS=y
   6.342  CONFIG_LEGACY_PTYS=y
   6.343  CONFIG_LEGACY_PTY_COUNT=256
   6.344 @@ -1799,6 +1819,7 @@ CONFIG_W83627HF_WDT=m
   6.345  CONFIG_W83877F_WDT=m
   6.346  CONFIG_W83977F_WDT=m
   6.347  CONFIG_MACHZ_WDT=m
   6.348 +CONFIG_SBC_EPX_C3_WATCHDOG=m
   6.349  
   6.350  #
   6.351  # PCI-based Watchdog Cards
   6.352 @@ -1856,6 +1877,7 @@ CONFIG_CARDMAN_4000=m
   6.353  CONFIG_CARDMAN_4040=m
   6.354  CONFIG_MWAVE=m
   6.355  CONFIG_SCx200_GPIO=m
   6.356 +CONFIG_CS5535_GPIO=m
   6.357  CONFIG_RAW_DRIVER=m
   6.358  CONFIG_MAX_RAW_DEVS=256
   6.359  # CONFIG_HPET is not set
   6.360 @@ -1929,6 +1951,23 @@ CONFIG_RTC_X1205_I2C=m
   6.361  # CONFIG_I2C_DEBUG_CHIP is not set
   6.362  
   6.363  #
   6.364 +# SPI support
   6.365 +#
   6.366 +CONFIG_SPI=y
   6.367 +# CONFIG_SPI_DEBUG is not set
   6.368 +CONFIG_SPI_MASTER=y
   6.369 +
   6.370 +#
   6.371 +# SPI Master Controller Drivers
   6.372 +#
   6.373 +CONFIG_SPI_BITBANG=m
   6.374 +CONFIG_SPI_BUTTERFLY=m
   6.375 +
   6.376 +#
   6.377 +# SPI Protocol Masters
   6.378 +#
   6.379 +
   6.380 +#
   6.381  # Dallas's 1-wire bus
   6.382  #
   6.383  CONFIG_W1=m
   6.384 @@ -1974,6 +2013,7 @@ CONFIG_SENSORS_SIS5595=m
   6.385  CONFIG_SENSORS_SMSC47M1=m
   6.386  # CONFIG_SENSORS_SMSC47B397 is not set
   6.387  CONFIG_SENSORS_VIA686A=m
   6.388 +CONFIG_SENSORS_VT8231=m
   6.389  CONFIG_SENSORS_W83781D=m
   6.390  CONFIG_SENSORS_W83792D=m
   6.391  CONFIG_SENSORS_W83L785TS=m
   6.392 @@ -2003,6 +2043,7 @@ CONFIG_VIDEO_DEV=m
   6.393  #
   6.394  # Video Adapters
   6.395  #
   6.396 +# CONFIG_VIDEO_ADV_DEBUG is not set
   6.397  CONFIG_VIDEO_BT848=m
   6.398  # CONFIG_VIDEO_BT848_DVB is not set
   6.399  CONFIG_VIDEO_SAA6588=m
   6.400 @@ -2031,6 +2072,7 @@ CONFIG_VIDEO_HEXIUM_ORION=m
   6.401  CONFIG_VIDEO_HEXIUM_GEMINI=m
   6.402  CONFIG_VIDEO_CX88=m
   6.403  # CONFIG_VIDEO_CX88_DVB is not set
   6.404 +CONFIG_VIDEO_CX88_ALSA=m
   6.405  CONFIG_VIDEO_EM28XX=m
   6.406  CONFIG_VIDEO_OVCAMCHIP=m
   6.407  CONFIG_VIDEO_AUDIO_DECODER=m
   6.408 @@ -2066,6 +2108,7 @@ CONFIG_DVB_USB=m
   6.409  # CONFIG_DVB_USB_DEBUG is not set
   6.410  CONFIG_DVB_USB_A800=m
   6.411  CONFIG_DVB_USB_DIBUSB_MB=m
   6.412 +# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set
   6.413  CONFIG_DVB_USB_DIBUSB_MC=m
   6.414  CONFIG_DVB_USB_UMT_010=m
   6.415  CONFIG_DVB_USB_CXUSB=m
   6.416 @@ -2110,6 +2153,7 @@ CONFIG_DVB_PLUTO2=m
   6.417  #
   6.418  CONFIG_DVB_STV0299=m
   6.419  CONFIG_DVB_CX24110=m
   6.420 +CONFIG_DVB_CX24123=m
   6.421  CONFIG_DVB_TDA8083=m
   6.422  CONFIG_DVB_TDA80XX=m
   6.423  CONFIG_DVB_MT312=m
   6.424 @@ -2202,7 +2246,6 @@ CONFIG_FB_ATY128=m
   6.425  CONFIG_FB_ATY=m
   6.426  CONFIG_FB_ATY_CT=y
   6.427  CONFIG_FB_ATY_GENERIC_LCD=y
   6.428 -CONFIG_FB_ATY_XL_INIT=y
   6.429  CONFIG_FB_ATY_GX=y
   6.430  CONFIG_FB_SAVAGE=m
   6.431  CONFIG_FB_SAVAGE_I2C=y
   6.432 @@ -2249,8 +2292,6 @@ CONFIG_SOUND=m
   6.433  # Advanced Linux Sound Architecture
   6.434  #
   6.435  CONFIG_SND=m
   6.436 -CONFIG_SND_AC97_CODEC=m
   6.437 -CONFIG_SND_AC97_BUS=m
   6.438  CONFIG_SND_TIMER=m
   6.439  CONFIG_SND_PCM=m
   6.440  CONFIG_SND_HWDEP=m
   6.441 @@ -2263,9 +2304,10 @@ CONFIG_SND_PCM_OSS=m
   6.442  CONFIG_SND_SEQUENCER_OSS=y
   6.443  CONFIG_SND_RTCTIMER=m
   6.444  CONFIG_SND_SEQ_RTCTIMER_DEFAULT=y
   6.445 +# CONFIG_SND_DYNAMIC_MINORS is not set
   6.446 +CONFIG_SND_SUPPORT_OLD_API=y
   6.447  # CONFIG_SND_VERBOSE_PRINTK is not set
   6.448  # CONFIG_SND_DEBUG is not set
   6.449 -CONFIG_SND_GENERIC_DRIVER=y
   6.450  
   6.451  #
   6.452  # Generic devices
   6.453 @@ -2273,6 +2315,8 @@ CONFIG_SND_GENERIC_DRIVER=y
   6.454  CONFIG_SND_MPU401_UART=m
   6.455  CONFIG_SND_OPL3_LIB=m
   6.456  CONFIG_SND_VX_LIB=m
   6.457 +CONFIG_SND_AC97_CODEC=m
   6.458 +CONFIG_SND_AC97_BUS=m
   6.459  CONFIG_SND_DUMMY=m
   6.460  CONFIG_SND_VIRMIDI=m
   6.461  CONFIG_SND_MTPAV=m
   6.462 @@ -2282,6 +2326,7 @@ CONFIG_SND_MPU401=m
   6.463  #
   6.464  # PCI devices
   6.465  #
   6.466 +CONFIG_SND_AD1889=m
   6.467  CONFIG_SND_ALI5451=m
   6.468  CONFIG_SND_ATIIXP=m
   6.469  CONFIG_SND_ATIIXP_MODEM=m
   6.470 @@ -2291,40 +2336,41 @@ CONFIG_SND_AU8830=m
   6.471  CONFIG_SND_AZT3328=m
   6.472  CONFIG_SND_BT87X=m
   6.473  # CONFIG_SND_BT87X_OVERCLOCK is not set
   6.474 +CONFIG_SND_CA0106=m
   6.475 +CONFIG_SND_CMIPCI=m
   6.476 +CONFIG_SND_CS4281=m
   6.477  CONFIG_SND_CS46XX=m
   6.478  CONFIG_SND_CS46XX_NEW_DSP=y
   6.479 -CONFIG_SND_CS4281=m
   6.480 +CONFIG_SND_CS5535AUDIO=m
   6.481  CONFIG_SND_EMU10K1=m
   6.482  # CONFIG_SND_EMU10K1X is not set
   6.483 -# CONFIG_SND_CA0106 is not set
   6.484 -CONFIG_SND_KORG1212=m
   6.485 -CONFIG_SND_MIXART=m
   6.486 -CONFIG_SND_NM256=m
   6.487 -CONFIG_SND_RME32=m
   6.488 -CONFIG_SND_RME96=m
   6.489 -CONFIG_SND_RME9652=m
   6.490 -CONFIG_SND_HDSP=m
   6.491 -CONFIG_SND_HDSPM=m
   6.492 -CONFIG_SND_TRIDENT=m
   6.493 -CONFIG_SND_YMFPCI=m
   6.494 -CONFIG_SND_AD1889=m
   6.495 -CONFIG_SND_CMIPCI=m
   6.496  CONFIG_SND_ENS1370=m
   6.497  CONFIG_SND_ENS1371=m
   6.498  CONFIG_SND_ES1938=m
   6.499  CONFIG_SND_ES1968=m
   6.500 -CONFIG_SND_MAESTRO3=m
   6.501  CONFIG_SND_FM801=m
   6.502  CONFIG_SND_FM801_TEA575X=m
   6.503 +CONFIG_SND_HDA_INTEL=m
   6.504 +CONFIG_SND_HDSP=m
   6.505 +CONFIG_SND_HDSPM=m
   6.506  CONFIG_SND_ICE1712=m
   6.507  CONFIG_SND_ICE1724=m
   6.508  CONFIG_SND_INTEL8X0=m
   6.509  CONFIG_SND_INTEL8X0M=m
   6.510 +CONFIG_SND_KORG1212=m
   6.511 +CONFIG_SND_MAESTRO3=m
   6.512 +CONFIG_SND_MIXART=m
   6.513 +CONFIG_SND_NM256=m
   6.514 +CONFIG_SND_PCXHR=m
   6.515 +CONFIG_SND_RME32=m
   6.516 +CONFIG_SND_RME96=m
   6.517 +CONFIG_SND_RME9652=m
   6.518  CONFIG_SND_SONICVIBES=m
   6.519 +CONFIG_SND_TRIDENT=m
   6.520  CONFIG_SND_VIA82XX=m
   6.521  # CONFIG_SND_VIA82XX_MODEM is not set
   6.522  CONFIG_SND_VX222=m
   6.523 -CONFIG_SND_HDA_INTEL=m
   6.524 +CONFIG_SND_YMFPCI=m
   6.525  
   6.526  #
   6.527  # USB devices
   6.528 @@ -2403,12 +2449,15 @@ CONFIG_USB_STORAGE_USBAT=y
   6.529  CONFIG_USB_STORAGE_SDDR09=y
   6.530  CONFIG_USB_STORAGE_SDDR55=y
   6.531  CONFIG_USB_STORAGE_JUMPSHOT=y
   6.532 +CONFIG_USB_STORAGE_ALAUDA=y
   6.533 +CONFIG_USB_LIBUSUAL=y
   6.534  
   6.535  #
   6.536  # USB Input Devices
   6.537  #
   6.538  CONFIG_USB_HID=m
   6.539  CONFIG_USB_HIDINPUT=y
   6.540 +# CONFIG_USB_HIDINPUT_POWERBOOK is not set
   6.541  # CONFIG_HID_FF is not set
   6.542  CONFIG_USB_HIDDEV=y
   6.543  
   6.544 @@ -2428,6 +2477,7 @@ CONFIG_USB_EGALAX=m
   6.545  CONFIG_USB_YEALINK=m
   6.546  CONFIG_USB_XPAD=m
   6.547  CONFIG_USB_ATI_REMOTE=m
   6.548 +CONFIG_USB_ATI_REMOTE2=m
   6.549  CONFIG_USB_KEYSPAN_REMOTE=m
   6.550  CONFIG_USB_APPLETOUCH=m
   6.551  
   6.552 @@ -2555,6 +2605,7 @@ CONFIG_USB_TEST=m
   6.553  CONFIG_USB_ATM=m
   6.554  CONFIG_USB_SPEEDTOUCH=m
   6.555  CONFIG_USB_CXACRU=m
   6.556 +CONFIG_USB_UEAGLEATM=m
   6.557  CONFIG_USB_XUSBATM=m
   6.558  
   6.559  #
   6.560 @@ -2594,6 +2645,24 @@ CONFIG_USB_G_SERIAL=m
   6.561  #
   6.562  
   6.563  #
   6.564 +# EDAC - error detection and reporting (RAS)
   6.565 +#
   6.566 +CONFIG_EDAC=m
   6.567 +
   6.568 +#
   6.569 +# Reporting subsystems
   6.570 +#
   6.571 +# CONFIG_EDAC_DEBUG is not set
   6.572 +CONFIG_EDAC_MM_EDAC=m
   6.573 +CONFIG_EDAC_AMD76X=m
   6.574 +CONFIG_EDAC_E7XXX=m
   6.575 +CONFIG_EDAC_E752X=m
   6.576 +CONFIG_EDAC_I82875P=m
   6.577 +CONFIG_EDAC_I82860=m
   6.578 +CONFIG_EDAC_R82600=m
   6.579 +CONFIG_EDAC_POLL=y
   6.580 +
   6.581 +#
   6.582  # File systems
   6.583  #
   6.584  CONFIG_EXT2_FS=y
   6.585 @@ -2625,6 +2694,7 @@ CONFIG_XFS_EXPORT=y
   6.586  CONFIG_XFS_SECURITY=y
   6.587  CONFIG_XFS_POSIX_ACL=y
   6.588  CONFIG_XFS_RT=y
   6.589 +CONFIG_OCFS2_FS=m
   6.590  CONFIG_MINIX_FS=m
   6.591  CONFIG_ROMFS_FS=m
   6.592  CONFIG_INOTIFY=y
   6.593 @@ -2669,6 +2739,7 @@ CONFIG_TMPFS=y
   6.594  # CONFIG_HUGETLB_PAGE is not set
   6.595  CONFIG_RAMFS=y
   6.596  CONFIG_RELAYFS_FS=m
   6.597 +CONFIG_CONFIGFS_FS=m
   6.598  
   6.599  #
   6.600  # Miscellaneous filesystems
   6.601 @@ -2769,6 +2840,7 @@ CONFIG_LDM_PARTITION=y
   6.602  CONFIG_SGI_PARTITION=y
   6.603  CONFIG_ULTRIX_PARTITION=y
   6.604  CONFIG_SUN_PARTITION=y
   6.605 +CONFIG_KARMA_PARTITION=y
   6.606  CONFIG_EFI_PARTITION=y
   6.607  
   6.608  #
   6.609 @@ -2824,12 +2896,13 @@ CONFIG_NLS_UTF8=m
   6.610  # Kernel hacking
   6.611  #
   6.612  # CONFIG_PRINTK_TIME is not set
   6.613 +CONFIG_MAGIC_SYSRQ=y
   6.614  CONFIG_DEBUG_KERNEL=y
   6.615 -CONFIG_MAGIC_SYSRQ=y
   6.616  CONFIG_LOG_BUF_SHIFT=14
   6.617  CONFIG_DETECT_SOFTLOCKUP=y
   6.618  # CONFIG_SCHEDSTATS is not set
   6.619  # CONFIG_DEBUG_SLAB is not set
   6.620 +# CONFIG_DEBUG_MUTEXES is not set
   6.621  # CONFIG_DEBUG_SPINLOCK is not set
   6.622  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
   6.623  # CONFIG_DEBUG_KOBJECT is not set
   6.624 @@ -2839,11 +2912,13 @@ CONFIG_DETECT_SOFTLOCKUP=y
   6.625  # CONFIG_DEBUG_FS is not set
   6.626  # CONFIG_DEBUG_VM is not set
   6.627  # CONFIG_FRAME_POINTER is not set
   6.628 +CONFIG_FORCED_INLINING=y
   6.629  # CONFIG_RCU_TORTURE_TEST is not set
   6.630  # CONFIG_EARLY_PRINTK is not set
   6.631  # CONFIG_DEBUG_STACKOVERFLOW is not set
   6.632  # CONFIG_DEBUG_STACK_USAGE is not set
   6.633  # CONFIG_DEBUG_PAGEALLOC is not set
   6.634 +# CONFIG_DEBUG_RODATA is not set
   6.635  # CONFIG_4KSTACKS is not set
   6.636  CONFIG_X86_FIND_SMP_CONFIG=y
   6.637  CONFIG_X86_MPPARSE=y
   6.638 @@ -2945,3 +3020,4 @@ CONFIG_GENERIC_PENDING_IRQ=y
   6.639  CONFIG_X86_SMP=y
   6.640  CONFIG_X86_BIOS_REBOOT=y
   6.641  CONFIG_X86_TRAMPOLINE=y
   6.642 +CONFIG_KTIME_SCALAR=y
     7.1 --- a/buildconfigs/linux-defconfig_xen_x86_64	Thu Feb 02 19:15:22 2006 +0100
     7.2 +++ b/buildconfigs/linux-defconfig_xen_x86_64	Thu Feb 02 19:16:38 2006 +0000
     7.3 @@ -1,7 +1,7 @@
     7.4  #
     7.5  # Automatically generated make config: don't edit
     7.6 -# Linux kernel version: 2.6.15-xen
     7.7 -# Wed Feb  1 15:51:35 2006
     7.8 +# Linux kernel version: 2.6.16-rc1-git4
     7.9 +# Thu Feb  2 17:54:57 2006
    7.10  #
    7.11  CONFIG_X86_64=y
    7.12  CONFIG_64BIT=y
    7.13 @@ -15,6 +15,7 @@ CONFIG_EARLY_PRINTK=y
    7.14  CONFIG_GENERIC_ISA_DMA=y
    7.15  CONFIG_GENERIC_IOMAP=y
    7.16  CONFIG_ARCH_MAY_HAVE_PC_FDC=y
    7.17 +CONFIG_DMI=y
    7.18  
    7.19  #
    7.20  # Code maturity level options
    7.21 @@ -37,18 +38,20 @@ CONFIG_SYSVIPC=y
    7.22  # CONFIG_BSD_PROCESS_ACCT is not set
    7.23  CONFIG_SYSCTL=y
    7.24  # CONFIG_AUDIT is not set
    7.25 -CONFIG_HOTPLUG=y
    7.26 -CONFIG_KOBJECT_UEVENT=y
    7.27  # CONFIG_IKCONFIG is not set
    7.28  # CONFIG_CPUSETS is not set
    7.29  CONFIG_INITRAMFS_SOURCE=""
    7.30 +CONFIG_UID16=y
    7.31 +CONFIG_VM86=y
    7.32  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
    7.33  # CONFIG_EMBEDDED is not set
    7.34  CONFIG_KALLSYMS=y
    7.35  # CONFIG_KALLSYMS_ALL is not set
    7.36  CONFIG_KALLSYMS_EXTRA_PASS=y
    7.37 +CONFIG_HOTPLUG=y
    7.38  CONFIG_PRINTK=y
    7.39  CONFIG_BUG=y
    7.40 +CONFIG_ELF_CORE=y
    7.41  CONFIG_BASE_FULL=y
    7.42  CONFIG_FUTEX=y
    7.43  CONFIG_EPOLL=y
    7.44 @@ -57,8 +60,11 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
    7.45  CONFIG_CC_ALIGN_LABELS=0
    7.46  CONFIG_CC_ALIGN_LOOPS=0
    7.47  CONFIG_CC_ALIGN_JUMPS=0
    7.48 +CONFIG_SLAB=y
    7.49  # CONFIG_TINY_SHMEM is not set
    7.50  CONFIG_BASE_SMALL=0
    7.51 +# CONFIG_SLOB is not set
    7.52 +CONFIG_OBSOLETE_INTERMODULE=m
    7.53  
    7.54  #
    7.55  # Loadable module support
    7.56 @@ -93,6 +99,8 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
    7.57  #
    7.58  # Processor type and features
    7.59  #
    7.60 +CONFIG_X86_PC=y
    7.61 +# CONFIG_X86_VSMP is not set
    7.62  # CONFIG_MK8 is not set
    7.63  # CONFIG_MPSC is not set
    7.64  CONFIG_GENERIC_CPU=y
    7.65 @@ -111,6 +119,7 @@ CONFIG_PREEMPT_NONE=y
    7.66  # CONFIG_PREEMPT_VOLUNTARY is not set
    7.67  # CONFIG_PREEMPT is not set
    7.68  CONFIG_PREEMPT_BKL=y
    7.69 +CONFIG_ARCH_SPARSEMEM_ENABLE=y
    7.70  CONFIG_ARCH_FLATMEM_ENABLE=y
    7.71  CONFIG_SELECT_MEMORY_MODEL=y
    7.72  CONFIG_FLATMEM_MANUAL=y
    7.73 @@ -120,11 +129,10 @@ CONFIG_FLATMEM=y
    7.74  CONFIG_FLAT_NODE_MEM_MAP=y
    7.75  # CONFIG_SPARSEMEM_STATIC is not set
    7.76  CONFIG_SPLIT_PTLOCK_CPUS=4096
    7.77 -CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
    7.78  CONFIG_NR_CPUS=8
    7.79  # CONFIG_HOTPLUG_CPU is not set
    7.80  CONFIG_SWIOTLB=y
    7.81 -CONFIG_DUMMY_IOMMU=y
    7.82 +# CONFIG_CRASH_DUMP is not set
    7.83  CONFIG_PHYSICAL_START=0x100000
    7.84  CONFIG_SECCOMP=y
    7.85  # CONFIG_HZ_100 is not set
    7.86 @@ -180,7 +188,6 @@ CONFIG_IA32_EMULATION=y
    7.87  # CONFIG_IA32_AOUT is not set
    7.88  CONFIG_COMPAT=y
    7.89  CONFIG_SYSVIPC_COMPAT=y
    7.90 -CONFIG_UID16=y
    7.91  
    7.92  #
    7.93  # Networking
    7.94 @@ -228,6 +235,7 @@ CONFIG_TCP_CONG_ADVANCED=y
    7.95  # TCP congestion control
    7.96  #
    7.97  CONFIG_TCP_CONG_BIC=m
    7.98 +CONFIG_TCP_CONG_CUBIC=m
    7.99  CONFIG_TCP_CONG_WESTWOOD=m
   7.100  CONFIG_TCP_CONG_HTCP=m
   7.101  CONFIG_TCP_CONG_HSTCP=m
   7.102 @@ -285,6 +293,29 @@ CONFIG_BRIDGE_NETFILTER=y
   7.103  CONFIG_NETFILTER_NETLINK=m
   7.104  CONFIG_NETFILTER_NETLINK_QUEUE=m
   7.105  CONFIG_NETFILTER_NETLINK_LOG=m
   7.106 +CONFIG_NETFILTER_XTABLES=m
   7.107 +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
   7.108 +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
   7.109 +CONFIG_NETFILTER_XT_TARGET_MARK=m
   7.110 +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
   7.111 +CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
   7.112 +CONFIG_NETFILTER_XT_MATCH_COMMENT=m
   7.113 +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
   7.114 +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
   7.115 +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
   7.116 +CONFIG_NETFILTER_XT_MATCH_DCCP=m
   7.117 +CONFIG_NETFILTER_XT_MATCH_HELPER=m
   7.118 +CONFIG_NETFILTER_XT_MATCH_LENGTH=m
   7.119 +CONFIG_NETFILTER_XT_MATCH_LIMIT=m
   7.120 +CONFIG_NETFILTER_XT_MATCH_MAC=m
   7.121 +CONFIG_NETFILTER_XT_MATCH_MARK=m
   7.122 +CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
   7.123 +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
   7.124 +CONFIG_NETFILTER_XT_MATCH_REALM=m
   7.125 +CONFIG_NETFILTER_XT_MATCH_SCTP=m
   7.126 +CONFIG_NETFILTER_XT_MATCH_STATE=m
   7.127 +CONFIG_NETFILTER_XT_MATCH_STRING=m
   7.128 +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
   7.129  
   7.130  #
   7.131  # IP: Netfilter Configuration
   7.132 @@ -303,40 +334,23 @@ CONFIG_IP_NF_AMANDA=m
   7.133  CONFIG_IP_NF_PPTP=m
   7.134  CONFIG_IP_NF_QUEUE=m
   7.135  CONFIG_IP_NF_IPTABLES=m
   7.136 -CONFIG_IP_NF_MATCH_LIMIT=m
   7.137  CONFIG_IP_NF_MATCH_IPRANGE=m
   7.138 -CONFIG_IP_NF_MATCH_MAC=m
   7.139 -CONFIG_IP_NF_MATCH_PKTTYPE=m
   7.140 -CONFIG_IP_NF_MATCH_MARK=m
   7.141  CONFIG_IP_NF_MATCH_MULTIPORT=m
   7.142  CONFIG_IP_NF_MATCH_TOS=m
   7.143  CONFIG_IP_NF_MATCH_RECENT=m
   7.144  CONFIG_IP_NF_MATCH_ECN=m
   7.145  CONFIG_IP_NF_MATCH_DSCP=m
   7.146  CONFIG_IP_NF_MATCH_AH_ESP=m
   7.147 -CONFIG_IP_NF_MATCH_LENGTH=m
   7.148  CONFIG_IP_NF_MATCH_TTL=m
   7.149 -CONFIG_IP_NF_MATCH_TCPMSS=m
   7.150 -CONFIG_IP_NF_MATCH_HELPER=m
   7.151 -CONFIG_IP_NF_MATCH_STATE=m
   7.152 -CONFIG_IP_NF_MATCH_CONNTRACK=m
   7.153  CONFIG_IP_NF_MATCH_OWNER=m
   7.154 -CONFIG_IP_NF_MATCH_PHYSDEV=m
   7.155  CONFIG_IP_NF_MATCH_ADDRTYPE=m
   7.156 -CONFIG_IP_NF_MATCH_REALM=m
   7.157 -CONFIG_IP_NF_MATCH_SCTP=m
   7.158 -CONFIG_IP_NF_MATCH_DCCP=m
   7.159 -CONFIG_IP_NF_MATCH_COMMENT=m
   7.160 -CONFIG_IP_NF_MATCH_CONNMARK=m
   7.161 -CONFIG_IP_NF_MATCH_CONNBYTES=m
   7.162  CONFIG_IP_NF_MATCH_HASHLIMIT=m
   7.163 -CONFIG_IP_NF_MATCH_STRING=m
   7.164 +CONFIG_IP_NF_MATCH_POLICY=m
   7.165  CONFIG_IP_NF_FILTER=m
   7.166  CONFIG_IP_NF_TARGET_REJECT=m
   7.167  CONFIG_IP_NF_TARGET_LOG=m
   7.168  CONFIG_IP_NF_TARGET_ULOG=m
   7.169  CONFIG_IP_NF_TARGET_TCPMSS=m
   7.170 -CONFIG_IP_NF_TARGET_NFQUEUE=m
   7.171  CONFIG_IP_NF_NAT=m
   7.172  CONFIG_IP_NF_NAT_NEEDED=y
   7.173  CONFIG_IP_NF_TARGET_MASQUERADE=m
   7.174 @@ -353,13 +367,9 @@ CONFIG_IP_NF_MANGLE=m
   7.175  CONFIG_IP_NF_TARGET_TOS=m
   7.176  CONFIG_IP_NF_TARGET_ECN=m
   7.177  CONFIG_IP_NF_TARGET_DSCP=m
   7.178 -CONFIG_IP_NF_TARGET_MARK=m
   7.179 -CONFIG_IP_NF_TARGET_CLASSIFY=m
   7.180  CONFIG_IP_NF_TARGET_TTL=m
   7.181 -CONFIG_IP_NF_TARGET_CONNMARK=m
   7.182  CONFIG_IP_NF_TARGET_CLUSTERIP=m
   7.183  CONFIG_IP_NF_RAW=m
   7.184 -CONFIG_IP_NF_TARGET_NOTRACK=m
   7.185  CONFIG_IP_NF_ARPTABLES=m
   7.186  CONFIG_IP_NF_ARPFILTER=m
   7.187  CONFIG_IP_NF_ARP_MANGLE=m
   7.188 @@ -369,26 +379,20 @@ CONFIG_IP_NF_ARP_MANGLE=m
   7.189  #
   7.190  CONFIG_IP6_NF_QUEUE=m
   7.191  CONFIG_IP6_NF_IPTABLES=m
   7.192 -CONFIG_IP6_NF_MATCH_LIMIT=m
   7.193 -CONFIG_IP6_NF_MATCH_MAC=m
   7.194  CONFIG_IP6_NF_MATCH_RT=m
   7.195  CONFIG_IP6_NF_MATCH_OPTS=m
   7.196  CONFIG_IP6_NF_MATCH_FRAG=m
   7.197  CONFIG_IP6_NF_MATCH_HL=m
   7.198  CONFIG_IP6_NF_MATCH_MULTIPORT=m
   7.199  CONFIG_IP6_NF_MATCH_OWNER=m
   7.200 -CONFIG_IP6_NF_MATCH_MARK=m
   7.201  CONFIG_IP6_NF_MATCH_IPV6HEADER=m
   7.202  CONFIG_IP6_NF_MATCH_AHESP=m
   7.203 -CONFIG_IP6_NF_MATCH_LENGTH=m
   7.204  CONFIG_IP6_NF_MATCH_EUI64=m
   7.205 -CONFIG_IP6_NF_MATCH_PHYSDEV=m
   7.206 +CONFIG_IP6_NF_MATCH_POLICY=m
   7.207  CONFIG_IP6_NF_FILTER=m
   7.208  CONFIG_IP6_NF_TARGET_LOG=m
   7.209  CONFIG_IP6_NF_TARGET_REJECT=m
   7.210 -CONFIG_IP6_NF_TARGET_NFQUEUE=m
   7.211  CONFIG_IP6_NF_MANGLE=m
   7.212 -CONFIG_IP6_NF_TARGET_MARK=m
   7.213  CONFIG_IP6_NF_TARGET_HL=m
   7.214  CONFIG_IP6_NF_RAW=m
   7.215  
   7.216 @@ -443,6 +447,13 @@ CONFIG_IP_SCTP=m
   7.217  # CONFIG_SCTP_HMAC_NONE is not set
   7.218  # CONFIG_SCTP_HMAC_SHA1 is not set
   7.219  CONFIG_SCTP_HMAC_MD5=y
   7.220 +
   7.221 +#
   7.222 +# TIPC Configuration (EXPERIMENTAL)
   7.223 +#
   7.224 +CONFIG_TIPC=m
   7.225 +# CONFIG_TIPC_ADVANCED is not set
   7.226 +# CONFIG_TIPC_DEBUG is not set
   7.227  CONFIG_ATM=m
   7.228  CONFIG_ATM_CLIP=m
   7.229  # CONFIG_ATM_CLIP_NO_ICMP is not set
   7.230 @@ -708,6 +719,8 @@ CONFIG_MTD_PLATRAM=m
   7.231  CONFIG_MTD_PMC551=m
   7.232  # CONFIG_MTD_PMC551_BUGFIX is not set
   7.233  # CONFIG_MTD_PMC551_DEBUG is not set
   7.234 +CONFIG_MTD_DATAFLASH=m
   7.235 +CONFIG_MTD_M25P80=m
   7.236  # CONFIG_MTD_SLRAM is not set
   7.237  # CONFIG_MTD_PHRAM is not set
   7.238  CONFIG_MTD_MTDRAM=m
   7.239 @@ -939,6 +952,7 @@ CONFIG_AIC79XX_DEBUG_MASK=0
   7.240  CONFIG_MEGARAID_NEWGEN=y
   7.241  CONFIG_MEGARAID_MM=m
   7.242  CONFIG_MEGARAID_MAILBOX=m
   7.243 +CONFIG_MEGARAID_LEGACY=m
   7.244  CONFIG_MEGARAID_SAS=m
   7.245  CONFIG_SCSI_SATA=y
   7.246  CONFIG_SCSI_SATA_AHCI=m
   7.247 @@ -979,13 +993,8 @@ CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
   7.248  # CONFIG_SCSI_IPR is not set
   7.249  # CONFIG_SCSI_QLOGIC_FC is not set
   7.250  CONFIG_SCSI_QLOGIC_1280=m
   7.251 -CONFIG_SCSI_QLA2XXX=y
   7.252 -CONFIG_SCSI_QLA21XX=m
   7.253 -CONFIG_SCSI_QLA22XX=m
   7.254 -CONFIG_SCSI_QLA2300=m
   7.255 -CONFIG_SCSI_QLA2322=m
   7.256 -CONFIG_SCSI_QLA6312=m
   7.257 -CONFIG_SCSI_QLA24XX=m
   7.258 +CONFIG_SCSI_QLA_FC=m
   7.259 +# CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE is not set
   7.260  CONFIG_SCSI_LPFC=m
   7.261  CONFIG_SCSI_DC395x=m
   7.262  CONFIG_SCSI_DC390T=m
   7.263 @@ -1052,13 +1061,12 @@ CONFIG_IEEE1394_SBP2=m
   7.264  CONFIG_IEEE1394_ETH1394=m
   7.265  CONFIG_IEEE1394_DV1394=m
   7.266  CONFIG_IEEE1394_RAWIO=m
   7.267 -CONFIG_IEEE1394_CMP=m
   7.268 -CONFIG_IEEE1394_AMDTP=m
   7.269  
   7.270  #
   7.271  # I2O device support
   7.272  #
   7.273  CONFIG_I2O=m
   7.274 +CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
   7.275  CONFIG_I2O_EXT_ADAPTEC=y
   7.276  CONFIG_I2O_EXT_ADAPTEC_DMA64=y
   7.277  CONFIG_I2O_CONFIG=m
   7.278 @@ -1161,6 +1169,7 @@ CONFIG_ACENIC=m
   7.279  CONFIG_DL2K=m
   7.280  CONFIG_E1000=m
   7.281  CONFIG_E1000_NAPI=y
   7.282 +# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
   7.283  CONFIG_NS83820=m
   7.284  CONFIG_HAMACHI=m
   7.285  CONFIG_YELLOWFIN=m
   7.286 @@ -1169,6 +1178,7 @@ CONFIG_R8169_NAPI=y
   7.287  CONFIG_R8169_VLAN=y
   7.288  CONFIG_SIS190=m
   7.289  CONFIG_SKGE=m
   7.290 +CONFIG_SKY2=m
   7.291  CONFIG_SK98LIN=m
   7.292  CONFIG_VIA_VELOCITY=m
   7.293  CONFIG_TIGON3=m
   7.294 @@ -1208,8 +1218,9 @@ CONFIG_NET_RADIO=y
   7.295  #
   7.296  CONFIG_IPW2100=m
   7.297  CONFIG_IPW2100_MONITOR=y
   7.298 -# CONFIG_IPW_DEBUG is not set
   7.299 +# CONFIG_IPW2100_DEBUG is not set
   7.300  CONFIG_IPW2200=m
   7.301 +# CONFIG_IPW2200_DEBUG is not set
   7.302  CONFIG_AIRO=m
   7.303  CONFIG_HERMES=m
   7.304  CONFIG_PLX_HERMES=m
   7.305 @@ -1461,6 +1472,7 @@ CONFIG_JOYSTICK_GAMECON=m
   7.306  CONFIG_JOYSTICK_TURBOGRAFX=m
   7.307  CONFIG_JOYSTICK_JOYDUMP=m
   7.308  CONFIG_INPUT_TOUCHSCREEN=y
   7.309 +CONFIG_TOUCHSCREEN_ADS7846=m
   7.310  CONFIG_TOUCHSCREEN_GUNZE=m
   7.311  CONFIG_TOUCHSCREEN_ELO=m
   7.312  CONFIG_TOUCHSCREEN_MTOUCH=m
   7.313 @@ -1548,6 +1560,7 @@ CONFIG_W83627HF_WDT=m
   7.314  CONFIG_W83877F_WDT=m
   7.315  CONFIG_W83977F_WDT=m
   7.316  CONFIG_MACHZ_WDT=m
   7.317 +CONFIG_SBC_EPX_C3_WATCHDOG=m
   7.318  
   7.319  #
   7.320  # PCI-based Watchdog Cards
   7.321 @@ -1649,6 +1662,23 @@ CONFIG_RTC_X1205_I2C=m
   7.322  # CONFIG_I2C_DEBUG_CHIP is not set
   7.323  
   7.324  #
   7.325 +# SPI support
   7.326 +#
   7.327 +CONFIG_SPI=y
   7.328 +# CONFIG_SPI_DEBUG is not set
   7.329 +CONFIG_SPI_MASTER=y
   7.330 +
   7.331 +#
   7.332 +# SPI Master Controller Drivers
   7.333 +#
   7.334 +CONFIG_SPI_BITBANG=m
   7.335 +CONFIG_SPI_BUTTERFLY=m
   7.336 +
   7.337 +#
   7.338 +# SPI Protocol Masters
   7.339 +#
   7.340 +
   7.341 +#
   7.342  # Dallas's 1-wire bus
   7.343  #
   7.344  CONFIG_W1=m
   7.345 @@ -1694,6 +1724,7 @@ CONFIG_SENSORS_SIS5595=m
   7.346  CONFIG_SENSORS_SMSC47M1=m
   7.347  CONFIG_SENSORS_SMSC47B397=m
   7.348  CONFIG_SENSORS_VIA686A=m
   7.349 +CONFIG_SENSORS_VT8231=m
   7.350  CONFIG_SENSORS_W83781D=m
   7.351  CONFIG_SENSORS_W83792D=m
   7.352  CONFIG_SENSORS_W83L785TS=m
   7.353 @@ -1723,6 +1754,7 @@ CONFIG_VIDEO_DEV=m
   7.354  #
   7.355  # Video Adapters
   7.356  #
   7.357 +# CONFIG_VIDEO_ADV_DEBUG is not set
   7.358  CONFIG_VIDEO_BT848=m
   7.359  # CONFIG_VIDEO_BT848_DVB is not set
   7.360  CONFIG_VIDEO_SAA6588=m
   7.361 @@ -1753,6 +1785,7 @@ CONFIG_VIDEO_HEXIUM_ORION=m
   7.362  CONFIG_VIDEO_HEXIUM_GEMINI=m
   7.363  CONFIG_VIDEO_CX88=m
   7.364  CONFIG_VIDEO_CX88_DVB=m
   7.365 +CONFIG_VIDEO_CX88_ALSA=m
   7.366  CONFIG_VIDEO_CX88_DVB_ALL_FRONTENDS=y
   7.367  CONFIG_VIDEO_EM28XX=m
   7.368  CONFIG_VIDEO_OVCAMCHIP=m
   7.369 @@ -1789,6 +1822,7 @@ CONFIG_DVB_USB=m
   7.370  # CONFIG_DVB_USB_DEBUG is not set
   7.371  CONFIG_DVB_USB_A800=m
   7.372  CONFIG_DVB_USB_DIBUSB_MB=m
   7.373 +# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set
   7.374  CONFIG_DVB_USB_DIBUSB_MC=m
   7.375  CONFIG_DVB_USB_UMT_010=m
   7.376  CONFIG_DVB_USB_CXUSB=m
   7.377 @@ -1838,6 +1872,7 @@ CONFIG_DVB_PLUTO2=m
   7.378  #
   7.379  CONFIG_DVB_STV0299=m
   7.380  CONFIG_DVB_CX24110=m
   7.381 +CONFIG_DVB_CX24123=m
   7.382  CONFIG_DVB_TDA8083=m
   7.383  CONFIG_DVB_TDA80XX=m
   7.384  CONFIG_DVB_MT312=m
   7.385 @@ -1925,7 +1960,6 @@ CONFIG_FB_ATY128=m
   7.386  CONFIG_FB_ATY=m
   7.387  CONFIG_FB_ATY_CT=y
   7.388  CONFIG_FB_ATY_GENERIC_LCD=y
   7.389 -# CONFIG_FB_ATY_XL_INIT is not set
   7.390  CONFIG_FB_ATY_GX=y
   7.391  CONFIG_FB_SAVAGE=m
   7.392  CONFIG_FB_SAVAGE_I2C=y
   7.393 @@ -1936,7 +1970,6 @@ CONFIG_FB_KYRO=m
   7.394  CONFIG_FB_3DFX=m
   7.395  CONFIG_FB_3DFX_ACCEL=y
   7.396  CONFIG_FB_VOODOO1=m
   7.397 -CONFIG_FB_CYBLA=m
   7.398  CONFIG_FB_TRIDENT=m
   7.399  CONFIG_FB_TRIDENT_ACCEL=y
   7.400  # CONFIG_FB_PM3 is not set
   7.401 @@ -1976,8 +2009,6 @@ CONFIG_SOUND=m
   7.402  # Advanced Linux Sound Architecture
   7.403  #
   7.404  CONFIG_SND=m
   7.405 -CONFIG_SND_AC97_CODEC=m
   7.406 -CONFIG_SND_AC97_BUS=m
   7.407  CONFIG_SND_TIMER=m
   7.408  CONFIG_SND_PCM=m
   7.409  CONFIG_SND_HWDEP=m
   7.410 @@ -1990,9 +2021,10 @@ CONFIG_SND_PCM_OSS=m
   7.411  CONFIG_SND_SEQUENCER_OSS=y
   7.412  CONFIG_SND_RTCTIMER=m
   7.413  CONFIG_SND_SEQ_RTCTIMER_DEFAULT=y
   7.414 +# CONFIG_SND_DYNAMIC_MINORS is not set
   7.415 +CONFIG_SND_SUPPORT_OLD_API=y
   7.416  # CONFIG_SND_VERBOSE_PRINTK is not set
   7.417  # CONFIG_SND_DEBUG is not set
   7.418 -CONFIG_SND_GENERIC_DRIVER=y
   7.419  
   7.420  #
   7.421  # Generic devices
   7.422 @@ -2000,6 +2032,8 @@ CONFIG_SND_GENERIC_DRIVER=y
   7.423  CONFIG_SND_MPU401_UART=m
   7.424  CONFIG_SND_OPL3_LIB=m
   7.425  CONFIG_SND_VX_LIB=m
   7.426 +CONFIG_SND_AC97_CODEC=m
   7.427 +CONFIG_SND_AC97_BUS=m
   7.428  CONFIG_SND_DUMMY=m
   7.429  CONFIG_SND_VIRMIDI=m
   7.430  CONFIG_SND_MTPAV=m
   7.431 @@ -2009,6 +2043,8 @@ CONFIG_SND_MPU401=m
   7.432  #
   7.433  # PCI devices
   7.434  #
   7.435 +CONFIG_SND_AD1889=m
   7.436 +CONFIG_SND_ALS4000=m
   7.437  CONFIG_SND_ALI5451=m
   7.438  CONFIG_SND_ATIIXP=m
   7.439  CONFIG_SND_ATIIXP_MODEM=m
   7.440 @@ -2018,41 +2054,40 @@ CONFIG_SND_AU8830=m
   7.441  CONFIG_SND_AZT3328=m
   7.442  CONFIG_SND_BT87X=m
   7.443  # CONFIG_SND_BT87X_OVERCLOCK is not set
   7.444 +CONFIG_SND_CA0106=m
   7.445 +CONFIG_SND_CMIPCI=m
   7.446 +CONFIG_SND_CS4281=m
   7.447  CONFIG_SND_CS46XX=m
   7.448  CONFIG_SND_CS46XX_NEW_DSP=y
   7.449 -CONFIG_SND_CS4281=m
   7.450  CONFIG_SND_EMU10K1=m
   7.451  CONFIG_SND_EMU10K1X=m
   7.452 -CONFIG_SND_CA0106=m
   7.453 -CONFIG_SND_KORG1212=m
   7.454 -CONFIG_SND_MIXART=m
   7.455 -CONFIG_SND_NM256=m
   7.456 -CONFIG_SND_RME32=m
   7.457 -CONFIG_SND_RME96=m
   7.458 -CONFIG_SND_RME9652=m
   7.459 -CONFIG_SND_HDSP=m
   7.460 -CONFIG_SND_HDSPM=m
   7.461 -CONFIG_SND_TRIDENT=m
   7.462 -CONFIG_SND_YMFPCI=m
   7.463 -CONFIG_SND_AD1889=m
   7.464 -CONFIG_SND_ALS4000=m
   7.465 -CONFIG_SND_CMIPCI=m
   7.466  CONFIG_SND_ENS1370=m
   7.467  CONFIG_SND_ENS1371=m
   7.468  CONFIG_SND_ES1938=m
   7.469  CONFIG_SND_ES1968=m
   7.470 -CONFIG_SND_MAESTRO3=m
   7.471  CONFIG_SND_FM801=m
   7.472  CONFIG_SND_FM801_TEA575X=m
   7.473 +CONFIG_SND_HDA_INTEL=m
   7.474 +CONFIG_SND_HDSP=m
   7.475 +CONFIG_SND_HDSPM=m
   7.476  CONFIG_SND_ICE1712=m
   7.477  CONFIG_SND_ICE1724=m
   7.478  CONFIG_SND_INTEL8X0=m
   7.479  CONFIG_SND_INTEL8X0M=m
   7.480 +CONFIG_SND_KORG1212=m
   7.481 +CONFIG_SND_MAESTRO3=m
   7.482 +CONFIG_SND_MIXART=m
   7.483 +CONFIG_SND_NM256=m
   7.484 +CONFIG_SND_PCXHR=m
   7.485 +CONFIG_SND_RME32=m
   7.486 +CONFIG_SND_RME96=m
   7.487 +CONFIG_SND_RME9652=m
   7.488  CONFIG_SND_SONICVIBES=m
   7.489 +CONFIG_SND_TRIDENT=m
   7.490  CONFIG_SND_VIA82XX=m
   7.491  CONFIG_SND_VIA82XX_MODEM=m
   7.492  CONFIG_SND_VX222=m
   7.493 -CONFIG_SND_HDA_INTEL=m
   7.494 +CONFIG_SND_YMFPCI=m
   7.495  
   7.496  #
   7.497  # USB devices
   7.498 @@ -2119,12 +2154,15 @@ CONFIG_USB_STORAGE_USBAT=y
   7.499  CONFIG_USB_STORAGE_SDDR09=y
   7.500  CONFIG_USB_STORAGE_SDDR55=y
   7.501  CONFIG_USB_STORAGE_JUMPSHOT=y
   7.502 +# CONFIG_USB_STORAGE_ALAUDA is not set
   7.503 +# CONFIG_USB_LIBUSUAL is not set
   7.504  
   7.505  #
   7.506  # USB Input Devices
   7.507  #
   7.508  CONFIG_USB_HID=y
   7.509  CONFIG_USB_HIDINPUT=y
   7.510 +# CONFIG_USB_HIDINPUT_POWERBOOK is not set
   7.511  CONFIG_HID_FF=y
   7.512  CONFIG_HID_PID=y
   7.513  CONFIG_LOGITECH_FF=y
   7.514 @@ -2141,6 +2179,7 @@ CONFIG_USB_EGALAX=m
   7.515  CONFIG_USB_YEALINK=m
   7.516  CONFIG_USB_XPAD=m
   7.517  CONFIG_USB_ATI_REMOTE=m
   7.518 +CONFIG_USB_ATI_REMOTE2=m
   7.519  CONFIG_USB_KEYSPAN_REMOTE=m
   7.520  CONFIG_USB_APPLETOUCH=m
   7.521  
   7.522 @@ -2267,6 +2306,7 @@ CONFIG_USB_TEST=m
   7.523  CONFIG_USB_ATM=m
   7.524  CONFIG_USB_SPEEDTOUCH=m
   7.525  CONFIG_USB_CXACRU=m
   7.526 +CONFIG_USB_UEAGLEATM=m
   7.527  CONFIG_USB_XUSBATM=m
   7.528  
   7.529  #
   7.530 @@ -2299,6 +2339,24 @@ CONFIG_INFINIBAND_SRP=m
   7.531  #
   7.532  
   7.533  #
   7.534 +# EDAC - error detection and reporting (RAS)
   7.535 +#
   7.536 +CONFIG_EDAC=m
   7.537 +
   7.538 +#
   7.539 +# Reporting subsystems
   7.540 +#
   7.541 +# CONFIG_EDAC_DEBUG is not set
   7.542 +CONFIG_EDAC_MM_EDAC=m
   7.543 +CONFIG_EDAC_AMD76X=m
   7.544 +CONFIG_EDAC_E7XXX=m
   7.545 +CONFIG_EDAC_E752X=m
   7.546 +CONFIG_EDAC_I82875P=m
   7.547 +CONFIG_EDAC_I82860=m
   7.548 +CONFIG_EDAC_R82600=m
   7.549 +CONFIG_EDAC_POLL=y
   7.550 +
   7.551 +#
   7.552  # Firmware Drivers
   7.553  #
   7.554  CONFIG_DELL_RBU=m
   7.555 @@ -2338,6 +2396,7 @@ CONFIG_XFS_EXPORT=y
   7.556  CONFIG_XFS_SECURITY=y
   7.557  CONFIG_XFS_POSIX_ACL=y
   7.558  # CONFIG_XFS_RT is not set
   7.559 +CONFIG_OCFS2_FS=m
   7.560  CONFIG_MINIX_FS=m
   7.561  CONFIG_ROMFS_FS=m
   7.562  CONFIG_INOTIFY=y
   7.563 @@ -2380,6 +2439,7 @@ CONFIG_TMPFS=y
   7.564  # CONFIG_HUGETLB_PAGE is not set
   7.565  CONFIG_RAMFS=y
   7.566  CONFIG_RELAYFS_FS=m
   7.567 +CONFIG_CONFIGFS_FS=m
   7.568  
   7.569  #
   7.570  # Miscellaneous filesystems
   7.571 @@ -2469,6 +2529,7 @@ CONFIG_UNIXWARE_DISKLABEL=y
   7.572  CONFIG_SGI_PARTITION=y
   7.573  # CONFIG_ULTRIX_PARTITION is not set
   7.574  CONFIG_SUN_PARTITION=y
   7.575 +# CONFIG_KARMA_PARTITION is not set
   7.576  CONFIG_EFI_PARTITION=y
   7.577  
   7.578  #
   7.579 @@ -2525,20 +2586,23 @@ CONFIG_NLS_UTF8=m
   7.580  # Kernel hacking
   7.581  #
   7.582  # CONFIG_PRINTK_TIME is not set
   7.583 +CONFIG_MAGIC_SYSRQ=y
   7.584  CONFIG_DEBUG_KERNEL=y
   7.585 -CONFIG_MAGIC_SYSRQ=y
   7.586  CONFIG_LOG_BUF_SHIFT=15
   7.587  CONFIG_DETECT_SOFTLOCKUP=y
   7.588  # CONFIG_SCHEDSTATS is not set
   7.589  # CONFIG_DEBUG_SLAB is not set
   7.590 +# CONFIG_DEBUG_MUTEXES is not set
   7.591  # CONFIG_DEBUG_SPINLOCK is not set
   7.592  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
   7.593  # CONFIG_DEBUG_KOBJECT is not set
   7.594  # CONFIG_DEBUG_FS is not set
   7.595  # CONFIG_DEBUG_VM is not set
   7.596  # CONFIG_FRAME_POINTER is not set
   7.597 +CONFIG_FORCED_INLINING=y
   7.598  # CONFIG_RCU_TORTURE_TEST is not set
   7.599  # CONFIG_INIT_DEBUG is not set
   7.600 +# CONFIG_DEBUG_RODATA is not set
   7.601  
   7.602  #
   7.603  # Security options
   7.604 @@ -2547,6 +2611,7 @@ CONFIG_KEYS=y
   7.605  CONFIG_KEYS_DEBUG_PROC_KEYS=y
   7.606  CONFIG_SECURITY=y
   7.607  CONFIG_SECURITY_NETWORK=y
   7.608 +CONFIG_SECURITY_NETWORK_XFRM=y
   7.609  CONFIG_SECURITY_CAPABILITIES=y
   7.610  # CONFIG_SECURITY_ROOTPLUG is not set
   7.611  # CONFIG_SECURITY_SECLVL is not set
     8.1 --- a/buildconfigs/mk.linux-2.6-xen	Thu Feb 02 19:15:22 2006 +0100
     8.2 +++ b/buildconfigs/mk.linux-2.6-xen	Thu Feb 02 19:16:38 2006 +0000
     8.3 @@ -2,7 +2,7 @@
     8.4  OS           = linux
     8.5  
     8.6  LINUX_SERIES = 2.6
     8.7 -LINUX_VER    = 2.6.15
     8.8 +LINUX_VER    = 2.6.16-rc1-git4
     8.9  
    8.10  EXTRAVERSION ?= xen
    8.11  
    8.12 @@ -20,6 +20,18 @@ build: $(LINUX_DIR)/include/linux/autoco
    8.13  	fi
    8.14  	$(MAKE) -C $(LINUX_DIR) ARCH=$(LINUX_ARCH) INSTALL_PATH=$(DESTDIR) install
    8.15  
    8.16 +pristine-linux-%/.valid-pristine: override _LINUX_PDIR = linux-$*.16-rc1-git4
    8.17 +pristine-linux-%.16-rc1-git4/.valid-pristine: linux-%.15.tar.bz2 patch-%.16-rc1.bz2 patch-%.16-rc1-git4.bz2
    8.18 +	rm -rf tmp-pristine-$(_LINUX_PDIR) $(@D)
    8.19 +	mkdir -p tmp-pristine-$(_LINUX_PDIR)
    8.20 +	tar -C tmp-pristine-$(_LINUX_PDIR) -jxf $<
    8.21 +	-@rm tmp-pristine-$(_LINUX_PDIR)/pax_global_header
    8.22 +	mv tmp-pristine-$(_LINUX_PDIR)/* $(@D)
    8.23 +	@rm -rf tmp-pristine-$(_LINUX_PDIR)
    8.24 +	bzcat $(wordlist 2,$(words $^),$^) | patch -d $(@D) -p1
    8.25 +	touch $(@D)/.hgskip
    8.26 +	touch $@ # update timestamp to avoid rebuild
    8.27 +
    8.28  $(LINUX_DIR)/include/linux/autoconf.h: ref-$(OS)-$(LINUX_VER)/.valid-ref
    8.29  	rm -rf $(LINUX_DIR)
    8.30  	cp -al $(<D) $(LINUX_DIR)
     9.1 --- a/linux-2.6-xen-sparse/arch/i386/Kconfig	Thu Feb 02 19:15:22 2006 +0100
     9.2 +++ b/linux-2.6-xen-sparse/arch/i386/Kconfig	Thu Feb 02 19:16:38 2006 +0000
     9.3 @@ -29,10 +29,6 @@ config MMU
     9.4  config SBUS
     9.5  	bool
     9.6  
     9.7 -config UID16
     9.8 -	bool
     9.9 -	default y
    9.10 -
    9.11  config GENERIC_ISA_DMA
    9.12  	bool
    9.13  	default y
    9.14 @@ -45,8 +41,22 @@ config ARCH_MAY_HAVE_PC_FDC
    9.15  	bool
    9.16  	default y
    9.17  
    9.18 +config DMI
    9.19 +	bool
    9.20 +	default y
    9.21 +
    9.22  source "init/Kconfig"
    9.23  
    9.24 +config DOUBLEFAULT
    9.25 +	default y
    9.26 +	bool "Enable doublefault exception handler" if EMBEDDED
    9.27 +	depends on !XEN
    9.28 +	help
    9.29 +          This option allows trapping of rare doublefault exceptions that
    9.30 +          would otherwise cause a system to silently reboot. Disabling this
    9.31 +          option saves about 4k and might cause you much additional grey
    9.32 +          hair.
    9.33 +
    9.34  menu "Processor type and features"
    9.35  
    9.36  choice
    9.37 @@ -498,7 +508,6 @@ config NUMA
    9.38  	depends on SMP && HIGHMEM64G && (X86_NUMAQ || X86_GENERICARCH || (X86_SUMMIT && ACPI))
    9.39  	default n if X86_PC
    9.40  	default y if (X86_NUMAQ || X86_SUMMIT)
    9.41 -	select SPARSEMEM_STATIC
    9.42  
    9.43  # Need comments to help the hapless user trying to turn on NUMA support
    9.44  comment "NUMA (NUMA-Q) requires SMP, 64GB highmem support"
    9.45 @@ -527,6 +536,10 @@ config HAVE_ARCH_ALLOC_REMAP
    9.46  	depends on NUMA
    9.47  	default y
    9.48  
    9.49 +config ARCH_FLATMEM_ENABLE
    9.50 +	def_bool y
    9.51 +	depends on (ARCH_SELECT_MEMORY_MODEL && X86_PC)
    9.52 +
    9.53  config ARCH_DISCONTIGMEM_ENABLE
    9.54  	def_bool y
    9.55  	depends on NUMA
    9.56 @@ -537,7 +550,8 @@ config ARCH_DISCONTIGMEM_DEFAULT
    9.57  
    9.58  config ARCH_SPARSEMEM_ENABLE
    9.59  	def_bool y
    9.60 -	depends on NUMA
    9.61 +	depends on (NUMA || (X86_PC && EXPERIMENTAL))
    9.62 +	select SPARSEMEM_STATIC
    9.63  
    9.64  config ARCH_SELECT_MEMORY_MODEL
    9.65  	def_bool y
    9.66 @@ -663,10 +677,6 @@ config REGPARM
    9.67  	and passes the first three arguments of a function call in registers.
    9.68  	This will probably break binary only modules.
    9.69  
    9.70 -	This feature is only enabled for gcc-3.0 and later - earlier compilers
    9.71 -	generate incorrect output with certain kernel constructs when
    9.72 -	-mregparm=3 is used.
    9.73 -
    9.74  config SECCOMP
    9.75  	bool "Enable seccomp to safely compute untrusted bytecode"
    9.76  	depends on PROC_FS
    9.77 @@ -686,17 +696,6 @@ config SECCOMP
    9.78  
    9.79  source kernel/Kconfig.hz
    9.80  
    9.81 -config PHYSICAL_START
    9.82 -	hex "Physical address where the kernel is loaded" if EMBEDDED
    9.83 -	default "0x100000"
    9.84 -	help
    9.85 -	  This gives the physical address where the kernel is loaded.
    9.86 -	  Primarily used in the case of kexec on panic where the
    9.87 -	  fail safe kernel needs to run at a different address than
    9.88 -	  the panic-ed kernel.
    9.89 -
    9.90 -	  Don't change this unless you know what you are doing.
    9.91 -
    9.92  config KEXEC
    9.93  	bool "kexec system call (EXPERIMENTAL)"
    9.94  	depends on EXPERIMENTAL && !X86_XEN
    9.95 @@ -716,12 +715,31 @@ config KEXEC
    9.96  
    9.97  config CRASH_DUMP
    9.98  	bool "kernel crash dumps (EXPERIMENTAL)"
    9.99 -	depends on EMBEDDED
   9.100  	depends on EXPERIMENTAL
   9.101  	depends on HIGHMEM
   9.102  	help
   9.103  	  Generate crash dump after being started by kexec.
   9.104  
   9.105 +config PHYSICAL_START
   9.106 +	hex "Physical address where the kernel is loaded" if (EMBEDDED || CRASH_DUMP)
   9.107 +
   9.108 +	default "0x1000000" if CRASH_DUMP
   9.109 +	default "0x100000"
   9.110 +	help
   9.111 +	  This gives the physical address where the kernel is loaded. Normally
   9.112 +	  for regular kernels this value is 0x100000 (1MB). But in the case
   9.113 +	  of kexec on panic the fail safe kernel needs to run at a different
   9.114 +	  address than the panic-ed kernel. This option is used to set the load
   9.115 +	  address for kernels used to capture crash dump on being kexec'ed
   9.116 +	  after panic. The default value for crash dump kernels is
   9.117 +	  0x1000000 (16MB). This can also be set based on the "X" value as
   9.118 +	  specified in the "crashkernel=YM@XM" command line boot parameter
   9.119 +	  passed to the panic-ed kernel. Typically this parameter is set as
   9.120 +	  crashkernel=64M@16M. Please take a look at
   9.121 +	  Documentation/kdump/kdump.txt for more details about crash dumps.
   9.122 +
   9.123 +	  Don't change this unless you know what you are doing.
   9.124 +
   9.125  config HOTPLUG_CPU
   9.126  	bool "Support for hot-pluggable CPUs (EXPERIMENTAL)"
   9.127  	depends on SMP && HOTPLUG && EXPERIMENTAL
   9.128 @@ -1102,3 +1120,7 @@ config X86_TRAMPOLINE
   9.129  	bool
   9.130  	depends on X86_SMP || (X86_VOYAGER && SMP)
   9.131  	default y
   9.132 +
   9.133 +config KTIME_SCALAR
   9.134 +	bool
   9.135 +	default y
    10.1 --- a/linux-2.6-xen-sparse/arch/i386/Makefile	Thu Feb 02 19:15:22 2006 +0100
    10.2 +++ b/linux-2.6-xen-sparse/arch/i386/Makefile	Thu Feb 02 19:16:38 2006 +0000
    10.3 @@ -37,14 +37,11 @@ CFLAGS += $(call cc-option,-mpreferred-s
    10.4  # CPU-specific tuning. Anything which can be shared with UML should go here.
    10.5  include $(srctree)/arch/i386/Makefile.cpu
    10.6  
    10.7 -# -mregparm=3 works ok on gcc-3.0 and later
    10.8 -#
    10.9 -GCC_VERSION			:= $(call cc-version)
   10.10 -cflags-$(CONFIG_REGPARM) 	+= $(shell if [ $(GCC_VERSION) -ge 0300 ] ; then echo "-mregparm=3"; fi ;)
   10.11 +cflags-$(CONFIG_REGPARM) += -mregparm=3
   10.12  
   10.13 -# Disable unit-at-a-time mode, it makes gcc use a lot more stack
   10.14 -# due to the lack of sharing of stacklots.
   10.15 -CFLAGS += $(call cc-option,-fno-unit-at-a-time)
   10.16 +# Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use
   10.17 +# a lot more stack due to the lack of sharing of stacklots:
   10.18 +CFLAGS				+= $(shell if [ $(call cc-version) -lt 0400 ] ; then echo $(call cc-option,-fno-unit-at-a-time); fi ;)
   10.19  
   10.20  CFLAGS += $(cflags-y)
   10.21  
   10.22 @@ -107,7 +104,7 @@ AFLAGS += $(mflags-y)
   10.23  boot := arch/i386/boot
   10.24  
   10.25  .PHONY: zImage bzImage compressed zlilo bzlilo \
   10.26 -	zdisk bzdisk fdimage fdimage144 fdimage288 install kernel_install
   10.27 +	zdisk bzdisk fdimage fdimage144 fdimage288 install
   10.28  
   10.29  ifdef CONFIG_XEN
   10.30  CPPFLAGS        := -D__KERNEL__ -Iinclude$(if $(KBUILD_SRC),2)/asm/mach-xen $(LINUXINCLUDE)
   10.31 @@ -142,8 +139,7 @@ zdisk bzdisk: vmlinux
   10.32  fdimage fdimage144 fdimage288: vmlinux
   10.33  	$(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@
   10.34  
   10.35 -install: vmlinux
   10.36 -install kernel_install:
   10.37 +install:
   10.38  	$(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) install
   10.39  endif
   10.40  
    11.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/Makefile	Thu Feb 02 19:15:22 2006 +0100
    11.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/Makefile	Thu Feb 02 19:16:38 2006 +0000
    11.3 @@ -4,10 +4,10 @@
    11.4  
    11.5  extra-y := head.o init_task.o vmlinux.lds
    11.6  
    11.7 -obj-y	:= process.o semaphore.o signal.o entry.o traps.o irq.o vm86.o \
    11.8 +obj-y	:= process.o semaphore.o signal.o entry.o traps.o irq.o \
    11.9  		ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_i386.o \
   11.10  		pci-dma.o i386_ksyms.o i387.o dmi_scan.o bootflag.o \
   11.11 -		doublefault.o quirks.o i8237.o
   11.12 +		quirks.o i8237.o
   11.13  
   11.14  obj-y				+= cpu/
   11.15  obj-y				+= timers/
   11.16 @@ -25,6 +25,7 @@ obj-$(CONFIG_X86_LOCAL_APIC)	+= apic.o n
   11.17  obj-$(CONFIG_X86_IO_APIC)	+= io_apic.o
   11.18  obj-$(CONFIG_X86_REBOOTFIXUPS)	+= reboot_fixups.o
   11.19  obj-$(CONFIG_KEXEC)		+= machine_kexec.o relocate_kernel.o crash.o
   11.20 +obj-$(CONFIG_CRASH_DUMP)	+= crash_dump.o
   11.21  obj-$(CONFIG_X86_NUMAQ)		+= numaq.o
   11.22  obj-$(CONFIG_X86_SUMMIT_NUMA)	+= summit.o
   11.23  obj-$(CONFIG_KPROBES)		+= kprobes.o
   11.24 @@ -33,6 +34,8 @@ obj-y				+= sysenter.o vsyscall.o
   11.25  obj-$(CONFIG_ACPI_SRAT) 	+= srat.o
   11.26  obj-$(CONFIG_HPET_TIMER) 	+= time_hpet.o
   11.27  obj-$(CONFIG_EFI) 		+= efi.o efi_stub.o
   11.28 +obj-$(CONFIG_DOUBLEFAULT) 	+= doublefault.o
   11.29 +obj-$(CONFIG_VM86)		+= vm86.o
   11.30  obj-$(CONFIG_EARLY_PRINTK)	+= early_printk.o
   11.31  obj-$(CONFIG_SMP_ALTERNATIVES)	+= smpalts.o
   11.32  
   11.33 @@ -86,7 +89,7 @@ include $(srctree)/scripts/Makefile.xen
   11.34  
   11.35  obj-y += fixup.o
   11.36  microcode-$(subst m,y,$(CONFIG_MICROCODE)) := microcode-xen.o
   11.37 -n-obj-xen := i8259.o doublefault.o timers/ reboot.o smpboot.o trampoline.o
   11.38 +n-obj-xen := i8259.o timers/ reboot.o smpboot.o trampoline.o
   11.39  
   11.40  obj-y := $(call filterxen, $(obj-y), $(n-obj-xen))
   11.41  obj-y := $(call cherrypickxen, $(obj-y))
    12.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/acpi/boot-xen.c	Thu Feb 02 19:15:22 2006 +0100
    12.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/acpi/boot-xen.c	Thu Feb 02 19:16:38 2006 +0000
    12.3 @@ -108,7 +108,7 @@ char *__acpi_map_table(unsigned long phy
    12.4  	if (!phys_addr || !size)
    12.5  		return NULL;
    12.6  
    12.7 -	if (phys_addr < (end_pfn_map << PAGE_SHIFT))
    12.8 +	if (phys_addr+size <= (end_pfn_map << PAGE_SHIFT) + PAGE_SIZE)
    12.9  		return __va(phys_addr);
   12.10  
   12.11  	return NULL;
    13.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/apic-xen.c	Thu Feb 02 19:15:22 2006 +0100
    13.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/apic-xen.c	Thu Feb 02 19:16:38 2006 +0000
    13.3 @@ -26,6 +26,7 @@
    13.4  #include <linux/kernel_stat.h>
    13.5  #include <linux/sysdev.h>
    13.6  #include <linux/cpu.h>
    13.7 +#include <linux/module.h>
    13.8  
    13.9  #include <asm/atomic.h>
   13.10  #include <asm/smp.h>
   13.11 @@ -37,9 +38,18 @@
   13.12  #include <asm/i8253.h>
   13.13  
   13.14  #include <mach_apic.h>
   13.15 +#include <mach_ipi.h>
   13.16  
   13.17  #include "io_ports.h"
   13.18  
   13.19 +#ifndef CONFIG_XEN
   13.20 +/*
   13.21 + * cpu_mask that denotes the CPUs that needs timer interrupt coming in as
   13.22 + * IPIs in place of local APIC timers
   13.23 + */
   13.24 +static cpumask_t timer_bcast_ipi;
   13.25 +#endif
   13.26 +
   13.27  /*
   13.28   * Knob to control our willingness to enable the local APIC.
   13.29   */
   13.30 @@ -73,6 +83,50 @@ void ack_bad_irq(unsigned int irq)
   13.31  	ack_APIC_irq();
   13.32  }
   13.33  
   13.34 +#ifdef CONFIG_XEN
   13.35 +void switch_APIC_timer_to_ipi(void *cpumask) { }
   13.36 +EXPORT_SYMBOL(switch_APIC_timer_to_ipi);
   13.37 +void switch_ipi_to_APIC_timer(void *cpumask) { }
   13.38 +EXPORT_SYMBOL(switch_ipi_to_APIC_timer);
   13.39 +#else
   13.40 +#ifndef CONFIG_SMP
   13.41 +static void up_apic_timer_interrupt_call(struct pt_regs *regs)
   13.42 +{
   13.43 +	int cpu = smp_processor_id();
   13.44 +
   13.45 +	/*
   13.46 +	 * the NMI deadlock-detector uses this.
   13.47 +	 */
   13.48 +	per_cpu(irq_stat, cpu).apic_timer_irqs++;
   13.49 +
   13.50 +	smp_local_timer_interrupt(regs);
   13.51 +}
   13.52 +#endif
   13.53 +
   13.54 +void smp_send_timer_broadcast_ipi(struct pt_regs *regs)
   13.55 +{
   13.56 +	cpumask_t mask;
   13.57 +
   13.58 +	cpus_and(mask, cpu_online_map, timer_bcast_ipi);
   13.59 +	if (!cpus_empty(mask)) {
   13.60 +#ifdef CONFIG_SMP
   13.61 +		send_IPI_mask(mask, LOCAL_TIMER_VECTOR);
   13.62 +#else
   13.63 +		/*
   13.64 +		 * We can directly call the apic timer interrupt handler
   13.65 +		 * in UP case. Minus all irq related functions
   13.66 +		 */
   13.67 +		up_apic_timer_interrupt_call(regs);
   13.68 +#endif
   13.69 +	}
   13.70 +}
   13.71 +
   13.72 +int setup_profiling_timer(unsigned int multiplier)
   13.73 +{
   13.74 +	return -EINVAL;
   13.75 +}
   13.76 +#endif
   13.77 +
   13.78  /*
   13.79   * This initializes the IO-APIC and APIC hardware if this is
   13.80   * a UP kernel.
    14.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/cpu/common-xen.c	Thu Feb 02 19:15:22 2006 +0100
    14.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/cpu/common-xen.c	Thu Feb 02 19:16:38 2006 +0000
    14.3 @@ -20,9 +20,6 @@
    14.4  #include "cpu.h"
    14.5  
    14.6  #ifndef CONFIG_XEN
    14.7 -DEFINE_PER_CPU(struct desc_struct, cpu_gdt_table[GDT_ENTRIES]);
    14.8 -EXPORT_PER_CPU_SYMBOL(cpu_gdt_table);
    14.9 -
   14.10  DEFINE_PER_CPU(unsigned char, cpu_16bit_stack[CPU_16BIT_STACK_SIZE]);
   14.11  EXPORT_PER_CPU_SYMBOL(cpu_16bit_stack);
   14.12  #endif
   14.13 @@ -212,7 +209,10 @@ static int __devinit have_cpuid_p(void)
   14.14  
   14.15  /* Do minimum CPU detection early.
   14.16     Fields really needed: vendor, cpuid_level, family, model, mask, cache alignment.
   14.17 -   The others are not touched to avoid unwanted side effects. */
   14.18 +   The others are not touched to avoid unwanted side effects.
   14.19 +
   14.20 +   WARNING: this function is only called on the BP.  Don't add code here
   14.21 +   that is supposed to run on all CPUs. */
   14.22  static void __init early_cpu_detect(void)
   14.23  {
   14.24  	struct cpuinfo_x86 *c = &boot_cpu_data;
   14.25 @@ -244,12 +244,6 @@ static void __init early_cpu_detect(void
   14.26  		if (cap0 & (1<<19))
   14.27  			c->x86_cache_alignment = ((misc >> 8) & 0xff) * 8;
   14.28  	}
   14.29 -
   14.30 -	early_intel_workaround(c);
   14.31 -
   14.32 -#ifdef CONFIG_X86_HT
   14.33 -	phys_proc_id[smp_processor_id()] = (cpuid_ebx(1) >> 24) & 0xff;
   14.34 -#endif
   14.35  }
   14.36  
   14.37  void __devinit generic_identify(struct cpuinfo_x86 * c)
   14.38 @@ -297,6 +291,12 @@ void __devinit generic_identify(struct c
   14.39  				get_model_name(c); /* Default name */
   14.40  		}
   14.41  	}
   14.42 +
   14.43 +	early_intel_workaround(c);
   14.44 +
   14.45 +#ifdef CONFIG_X86_HT
   14.46 +	phys_proc_id[smp_processor_id()] = (cpuid_ebx(1) >> 24) & 0xff;
   14.47 +#endif
   14.48  }
   14.49  
   14.50  static void __devinit squash_the_stupid_serial_number(struct cpuinfo_x86 *c)
   14.51 @@ -607,11 +607,6 @@ void __cpuinit cpu_init(void)
   14.52  	cpu_gdt_init(&cpu_gdt_descr[cpu]);
   14.53  
   14.54  	/*
   14.55 -	 * Delete NT
   14.56 -	 */
   14.57 -	__asm__("pushfl ; andl $0xffffbfff,(%esp) ; popfl");
   14.58 -
   14.59 -	/*
   14.60  	 * Set up and load the per-CPU TSS and LDT
   14.61  	 */
   14.62  	atomic_inc(&init_mm.mm_count);
   14.63 @@ -624,6 +619,11 @@ void __cpuinit cpu_init(void)
   14.64  
   14.65  	load_LDT(&init_mm.context);
   14.66  
   14.67 +#ifdef CONFIG_DOUBLEFAULT
   14.68 +	/* Set up doublefault TSS pointer in the GDT */
   14.69 +	__set_tss_desc(cpu, GDT_ENTRY_DOUBLEFAULT_TSS, &doublefault_tss);
   14.70 +#endif
   14.71 +
   14.72  	/* Clear %fs and %gs. */
   14.73  	asm volatile ("xorl %eax, %eax; movl %eax, %fs; movl %eax, %gs");
   14.74  
    15.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/entry-xen.S	Thu Feb 02 19:15:22 2006 +0100
    15.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/entry-xen.S	Thu Feb 02 19:16:38 2006 +0000
    15.3 @@ -392,6 +392,7 @@ work_notifysig:				# deal with pending s
    15.4  
    15.5  	ALIGN
    15.6  work_notifysig_v86:
    15.7 +#ifdef CONFIG_VM86
    15.8  	pushl %ecx			# save ti_flags for do_notify_resume
    15.9  	call save_v86_state		# %eax contains pt_regs pointer
   15.10  	popl %ecx
   15.11 @@ -399,6 +400,7 @@ work_notifysig_v86:
   15.12  	xorl %edx, %edx
   15.13  	call do_notify_resume
   15.14  	jmp resume_userspace
   15.15 +#endif
   15.16  
   15.17  	# perform syscall exit tracing
   15.18  	ALIGN
   15.19 @@ -843,6 +845,7 @@ ENTRY(fixup_4gb_segment)
   15.20  	pushl $do_fixup_4gb_segment
   15.21  	jmp error_code
   15.22  
   15.23 +.section .rodata,"a"
   15.24  #include "syscall_table.S"
   15.25  
   15.26  syscall_table_size=(.-sys_call_table)
    16.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/head-xen.S	Thu Feb 02 19:15:22 2006 +0100
    16.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/head-xen.S	Thu Feb 02 19:16:38 2006 +0000
    16.3 @@ -161,15 +161,20 @@ ENTRY(cpu_gdt_table)
    16.4  	.quad 0x0000000000000000	/* 0x80 TSS descriptor */
    16.5  	.quad 0x0000000000000000	/* 0x88 LDT descriptor */
    16.6  
    16.7 -	/* Segments used for calling PnP BIOS */
    16.8 +	/*
    16.9 +	 * Segments used for calling PnP BIOS have byte granularity.
   16.10 +	 * They code segments and data segments have fixed 64k limits,
   16.11 +	 * the transfer segment sizes are set at run time.
   16.12 +	 */
   16.13  	.quad 0x0000000000000000	/* 0x90 32-bit code */
   16.14  	.quad 0x0000000000000000	/* 0x98 16-bit code */
   16.15  	.quad 0x0000000000000000	/* 0xa0 16-bit data */
   16.16  	.quad 0x0000000000000000	/* 0xa8 16-bit data */
   16.17  	.quad 0x0000000000000000	/* 0xb0 16-bit data */
   16.18 +
   16.19  	/*
   16.20  	 * The APM segments have byte granularity and their bases
   16.21 -	 * and limits are set at run time.
   16.22 +	 * are set at run time.  All have 64k limits.
   16.23  	 */
   16.24  	.quad 0x0000000000000000	/* 0xb8 APM CS    code */
   16.25  	.quad 0x0000000000000000	/* 0xc0 APM CS 16 code (16 bit) */
   16.26 @@ -181,7 +186,9 @@ ENTRY(cpu_gdt_table)
   16.27  	.quad 0x0000000000000000	/* 0xe8 - unused */
   16.28  	.quad 0x0000000000000000	/* 0xf0 - unused */
   16.29  	.quad 0x0000000000000000	/* 0xf8 - GDT entry 31: double-fault TSS */
   16.30 -	.fill GDT_ENTRIES-32,8,0
   16.31 +
   16.32 +	/* Be sure this is zeroed to avoid false validations in Xen */
   16.33 +	.fill PAGE_SIZE_asm / 8 - GDT_ENTRIES,8,0
   16.34  
   16.35  .org 0x3000
   16.36  ENTRY(default_ldt)
    17.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/init_task-xen.c	Thu Feb 02 19:15:22 2006 +0100
    17.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/init_task-xen.c	Thu Feb 02 19:16:38 2006 +0000
    17.3 @@ -45,5 +45,5 @@ EXPORT_SYMBOL(init_task);
    17.4   * per-CPU TSS segments. Threads are completely 'soft' on Linux,
    17.5   * no more per-task TSS's.
    17.6   */ 
    17.7 -DEFINE_PER_CPU(struct tss_struct, init_tss) ____cacheline_maxaligned_in_smp = INIT_TSS;
    17.8 +DEFINE_PER_CPU(struct tss_struct, init_tss) ____cacheline_internodealigned_in_smp = INIT_TSS;
    17.9  
    18.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/io_apic-xen.c	Thu Feb 02 19:15:22 2006 +0100
    18.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/io_apic-xen.c	Thu Feb 02 19:16:38 2006 +0000
    18.3 @@ -1701,7 +1701,7 @@ static void __init enable_IO_APIC(void)
    18.4  	for(apic = 0; apic < nr_ioapics; apic++) {
    18.5  		int pin;
    18.6  		/* See if any of the pins is in ExtINT mode */
    18.7 -		for(pin = 0; pin < nr_ioapic_registers[i]; pin++) {
    18.8 +		for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) {
    18.9  			struct IO_APIC_route_entry entry;
   18.10  			spin_lock_irqsave(&ioapic_lock, flags);
   18.11  			*(((int *)&entry) + 0) = io_apic_read(apic, 0x10 + 2 * pin);
   18.12 @@ -1775,8 +1775,8 @@ void disable_IO_APIC(void)
   18.13  		entry.dest_mode       = 0; /* Physical */
   18.14  		entry.delivery_mode   = dest_ExtINT; /* ExtInt */
   18.15  		entry.vector          = 0;
   18.16 -		entry.dest.physical.physical_dest = 0;
   18.17 -
   18.18 +		entry.dest.physical.physical_dest =
   18.19 +					GET_APIC_ID(apic_read(APIC_ID));
   18.20  
   18.21  		/*
   18.22  		 * Add it to the IO-APIC irq-routing table:
    19.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/ioport-xen.c	Thu Feb 02 19:15:22 2006 +0100
    19.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/ioport-xen.c	Thu Feb 02 19:16:38 2006 +0000
    19.3 @@ -7,6 +7,7 @@
    19.4  
    19.5  #include <linux/sched.h>
    19.6  #include <linux/kernel.h>
    19.7 +#include <linux/capability.h>
    19.8  #include <linux/errno.h>
    19.9  #include <linux/types.h>
   19.10  #include <linux/ioport.h>
    20.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/irq-xen.c	Thu Feb 02 19:15:22 2006 +0100
    20.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/irq-xen.c	Thu Feb 02 19:16:38 2006 +0000
    20.3 @@ -19,7 +19,7 @@
    20.4  #include <linux/cpu.h>
    20.5  #include <linux/delay.h>
    20.6  
    20.7 -DEFINE_PER_CPU(irq_cpustat_t, irq_stat) ____cacheline_maxaligned_in_smp;
    20.8 +DEFINE_PER_CPU(irq_cpustat_t, irq_stat) ____cacheline_internodealigned_in_smp;
    20.9  EXPORT_PER_CPU_SYMBOL(irq_stat);
   20.10  
   20.11  #ifndef CONFIG_X86_LOCAL_APIC
    21.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/microcode-xen.c	Thu Feb 02 19:15:22 2006 +0100
    21.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/microcode-xen.c	Thu Feb 02 19:16:38 2006 +0000
    21.3 @@ -21,6 +21,7 @@
    21.4   */
    21.5  
    21.6  //#define DEBUG /* pr_debug */
    21.7 +#include <linux/capability.h>
    21.8  #include <linux/kernel.h>
    21.9  #include <linux/init.h>
   21.10  #include <linux/sched.h>
    22.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/mpparse-xen.c	Thu Feb 02 19:15:22 2006 +0100
    22.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/mpparse-xen.c	Thu Feb 02 19:16:38 2006 +0000
    22.3 @@ -38,6 +38,12 @@
    22.4  int smp_found_config;
    22.5  unsigned int __initdata maxcpus = NR_CPUS;
    22.6  
    22.7 +#ifdef CONFIG_HOTPLUG_CPU
    22.8 +#define CPU_HOTPLUG_ENABLED	(1)
    22.9 +#else
   22.10 +#define CPU_HOTPLUG_ENABLED	(0)
   22.11 +#endif
   22.12 +
   22.13  /*
   22.14   * Various Linux-internal data structures created from the
   22.15   * MP-table.
   22.16 @@ -220,14 +226,18 @@ static void __devinit MP_processor_info 
   22.17  	cpu_set(num_processors, cpu_possible_map);
   22.18  	num_processors++;
   22.19  
   22.20 -	if ((num_processors > 8) &&
   22.21 -	    ((APIC_XAPIC(ver) &&
   22.22 -	     (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL)) ||
   22.23 -	     (boot_cpu_data.x86_vendor == X86_VENDOR_AMD)))
   22.24 -		def_to_bigsmp = 1;
   22.25 -	else
   22.26 -		def_to_bigsmp = 0;
   22.27 -
   22.28 +	if (CPU_HOTPLUG_ENABLED || (num_processors > 8)) {
   22.29 +		switch (boot_cpu_data.x86_vendor) {
   22.30 +		case X86_VENDOR_INTEL:
   22.31 +			if (!APIC_XAPIC(ver)) {
   22.32 +				def_to_bigsmp = 0;
   22.33 +				break;
   22.34 +			}
   22.35 +			/* If P4 and above fall through */
   22.36 +		case X86_VENDOR_AMD:
   22.37 +			def_to_bigsmp = 1;
   22.38 +		}
   22.39 +	}
   22.40  	bios_cpu_apicid[num_processors - 1] = m->mpc_apicid;
   22.41  }
   22.42  #else
    23.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/pci-dma-xen.c	Thu Feb 02 19:15:22 2006 +0100
    23.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/pci-dma-xen.c	Thu Feb 02 19:16:38 2006 +0000
    23.3 @@ -17,6 +17,25 @@
    23.4  #include <xen/balloon.h>
    23.5  #include <asm/tlbflush.h>
    23.6  #include <asm/swiotlb.h>
    23.7 +#include <asm/bug.h>
    23.8 +
    23.9 +#ifdef __x86_64__
   23.10 +int iommu_merge __read_mostly = 0;
   23.11 +EXPORT_SYMBOL(iommu_merge);
   23.12 +
   23.13 +dma_addr_t bad_dma_address __read_mostly;
   23.14 +EXPORT_SYMBOL(bad_dma_address);
   23.15 +
   23.16 +/* This tells the BIO block layer to assume merging. Default to off
   23.17 +   because we cannot guarantee merging later. */
   23.18 +int iommu_bio_merge __read_mostly = 0;
   23.19 +EXPORT_SYMBOL(iommu_bio_merge);
   23.20 +
   23.21 +__init int iommu_setup(char *p)
   23.22 +{
   23.23 +    return 1;
   23.24 +}
   23.25 +#endif
   23.26  
   23.27  struct dma_coherent_mem {
   23.28  	void		*virt_base;
   23.29 @@ -41,7 +60,9 @@ dma_map_sg(struct device *hwdev, struct 
   23.30  {
   23.31  	int i, rc;
   23.32  
   23.33 -	BUG_ON(direction == DMA_NONE);
   23.34 +	if (direction == DMA_NONE)
   23.35 +		BUG();
   23.36 +	WARN_ON(nents == 0 || sg[0].length == 0);
   23.37  
   23.38  	if (swiotlb) {
   23.39  		rc = swiotlb_map_sg(hwdev, sg, nents, direction);
   23.40 @@ -266,7 +287,9 @@ dma_map_single(struct device *dev, void 
   23.41  {
   23.42  	dma_addr_t dma;
   23.43  
   23.44 -	BUG_ON(direction == DMA_NONE);
   23.45 +	if (direction == DMA_NONE)
   23.46 +		BUG();
   23.47 +	WARN_ON(size == 0);
   23.48  
   23.49  	if (swiotlb) {
   23.50  		dma = swiotlb_map_single(dev, ptr, size, direction);
   23.51 @@ -285,7 +308,8 @@ void
   23.52  dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
   23.53  		 enum dma_data_direction direction)
   23.54  {
   23.55 -	BUG_ON(direction == DMA_NONE);
   23.56 +	if (direction == DMA_NONE)
   23.57 +		BUG();
   23.58  	if (swiotlb)
   23.59  		swiotlb_unmap_single(dev, dma_addr, size, direction);
   23.60  }
    24.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/process-xen.c	Thu Feb 02 19:15:22 2006 +0100
    24.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/process-xen.c	Thu Feb 02 19:16:38 2006 +0000
    24.3 @@ -48,12 +48,14 @@
    24.4  #include <asm/processor.h>
    24.5  #include <asm/i387.h>
    24.6  #include <asm/desc.h>
    24.7 -#include <xen/interface/physdev.h>
    24.8 -#include <xen/interface/vcpu.h>
    24.9 +#include <asm/vm86.h>
   24.10  #ifdef CONFIG_MATH_EMULATION
   24.11  #include <asm/math_emu.h>
   24.12  #endif
   24.13  
   24.14 +#include <xen/interface/physdev.h>
   24.15 +#include <xen/interface/vcpu.h>
   24.16 +
   24.17  #include <linux/err.h>
   24.18  
   24.19  #include <asm/tlbflush.h>
   24.20 @@ -222,9 +224,7 @@ void show_regs(struct pt_regs * regs)
   24.21  	cr0 = read_cr0();
   24.22  	cr2 = read_cr2();
   24.23  	cr3 = read_cr3();
   24.24 -	if (current_cpu_data.x86 > 4) {
   24.25 -		cr4 = read_cr4();
   24.26 -	}
   24.27 +	cr4 = read_cr4_safe();
   24.28  	printk("CR0: %08lx CR2: %08lx CR3: %08lx CR4: %08lx\n", cr0, cr2, cr3, cr4);
   24.29  	show_trace(NULL, &regs->esp);
   24.30  }
   24.31 @@ -309,17 +309,7 @@ void flush_thread(void)
   24.32  
   24.33  void release_thread(struct task_struct *dead_task)
   24.34  {
   24.35 -	if (dead_task->mm) {
   24.36 -		// temporary debugging check
   24.37 -		if (dead_task->mm->context.size) {
   24.38 -			printk("WARNING: dead process %8s still has LDT? <%p/%d>\n",
   24.39 -					dead_task->comm,
   24.40 -					dead_task->mm->context.ldt,
   24.41 -					dead_task->mm->context.size);
   24.42 -			BUG();
   24.43 -		}
   24.44 -	}
   24.45 -
   24.46 +	BUG_ON(dead_task->mm);
   24.47  	release_vm86_irqs(dead_task);
   24.48  }
   24.49  
   24.50 @@ -340,18 +330,7 @@ int copy_thread(int nr, unsigned long cl
   24.51  	struct task_struct *tsk;
   24.52  	int err;
   24.53  
   24.54 -	childregs = ((struct pt_regs *) (THREAD_SIZE + (unsigned long) p->thread_info)) - 1;
   24.55 -	/*
   24.56 -	 * The below -8 is to reserve 8 bytes on top of the ring0 stack.
   24.57 -	 * This is necessary to guarantee that the entire "struct pt_regs"
   24.58 -	 * is accessable even if the CPU haven't stored the SS/ESP registers
   24.59 -	 * on the stack (interrupt gate does not save these registers
   24.60 -	 * when switching to the same priv ring).
   24.61 -	 * Therefore beware: accessing the xss/esp fields of the
   24.62 -	 * "struct pt_regs" is possible, but they may contain the
   24.63 -	 * completely wrong values.
   24.64 -	 */
   24.65 -	childregs = (struct pt_regs *) ((unsigned long) childregs - 8);
   24.66 +	childregs = task_pt_regs(p);
   24.67  	*childregs = *regs;
   24.68  	childregs->eax = 0;
   24.69  	childregs->esp = esp;
   24.70 @@ -458,12 +437,7 @@ EXPORT_SYMBOL(dump_thread);
   24.71   */
   24.72  int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs)
   24.73  {
   24.74 -	struct pt_regs ptregs;
   24.75 -	
   24.76 -	ptregs = *(struct pt_regs *)
   24.77 -		((unsigned long)tsk->thread_info +
   24.78 -		/* see comments in copy_thread() about -8 */
   24.79 -		THREAD_SIZE - sizeof(ptregs) - 8);
   24.80 +	struct pt_regs ptregs = *task_pt_regs(tsk);
   24.81  	ptregs.xcs &= 0xffff;
   24.82  	ptregs.xds &= 0xffff;
   24.83  	ptregs.xes &= 0xffff;
   24.84 @@ -487,8 +461,8 @@ static inline void disable_tsc(struct ta
   24.85  	 * gcc should eliminate the ->thread_info dereference if
   24.86  	 * has_secure_computing returns 0 at compile time (SECCOMP=n).
   24.87  	 */
   24.88 -	prev = prev_p->thread_info;
   24.89 -	next = next_p->thread_info;
   24.90 +	prev = task_thread_info(prev_p);
   24.91 +	next = task_thread_info(next_p);
   24.92  
   24.93  	if (has_secure_computing(prev) || has_secure_computing(next)) {
   24.94  		/* slow path here */
   24.95 @@ -707,7 +681,7 @@ unsigned long get_wchan(struct task_stru
   24.96  	int count = 0;
   24.97  	if (!p || p == current || p->state == TASK_RUNNING)
   24.98  		return 0;
   24.99 -	stack_page = (unsigned long)p->thread_info;
  24.100 +	stack_page = (unsigned long)task_stack_page(p);
  24.101  	esp = p->thread.esp;
  24.102  	if (!stack_page || esp < stack_page || esp > top_esp+stack_page)
  24.103  		return 0;
    25.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/quirks-xen.c	Thu Feb 02 19:15:22 2006 +0100
    25.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/quirks-xen.c	Thu Feb 02 19:16:38 2006 +0000
    25.3 @@ -25,8 +25,7 @@ static void __devinit quirk_intel_irqbal
    25.4  
    25.5  	/* enable access to config space*/
    25.6  	pci_read_config_byte(dev, 0xf4, &config);
    25.7 -	config |= 0x2;
    25.8 -	pci_write_config_byte(dev, 0xf4, config);
    25.9 +	pci_write_config_byte(dev, 0xf4, config|0x2);
   25.10  
   25.11  	/* read xTPR register */
   25.12  	raw_pci_ops->read(0, 0, 0x40, 0x4c, 2, &word);
   25.13 @@ -39,9 +38,9 @@ static void __devinit quirk_intel_irqbal
   25.14  		(void)HYPERVISOR_dom0_op(&op);
   25.15  	}
   25.16  
   25.17 -	config &= ~0x2;
   25.18 -	/* disable access to config space*/
   25.19 -	pci_write_config_byte(dev, 0xf4, config);
   25.20 +	/* put back the original value for config space*/
   25.21 +	if (!(config & 0x2))
   25.22 +		pci_write_config_byte(dev, 0xf4, config);
   25.23  }
   25.24  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_E7320_MCH,	quirk_intel_irqbalance);
   25.25  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_E7525_MCH,	quirk_intel_irqbalance);
    26.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c	Thu Feb 02 19:15:22 2006 +0100
    26.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c	Thu Feb 02 19:16:38 2006 +0000
    26.3 @@ -48,6 +48,7 @@
    26.4  #include <linux/notifier.h>
    26.5  #include <linux/kexec.h>
    26.6  #include <linux/crash_dump.h>
    26.7 +#include <linux/dmi.h>
    26.8  
    26.9  #include <video/edid.h>
   26.10  
   26.11 @@ -159,7 +160,6 @@ EXPORT_SYMBOL(ist_info);
   26.12  struct e820map e820;
   26.13  
   26.14  extern void early_cpu_init(void);
   26.15 -extern void dmi_scan_machine(void);
   26.16  extern void generic_apic_probe(char *);
   26.17  extern int root_mountflags;
   26.18  
   26.19 @@ -944,7 +944,7 @@ static void __init parse_cmdline_early (
   26.20  			}
   26.21  		}
   26.22  #endif
   26.23 -#ifdef CONFIG_CRASH_DUMP
   26.24 +#ifdef CONFIG_PROC_VMCORE
   26.25  		/* elfcorehdr= specifies the location of elf core header
   26.26  		 * stored by the crashed kernel.
   26.27  		 */
   26.28 @@ -1001,6 +1001,12 @@ efi_find_max_pfn(unsigned long start, un
   26.29  	return 0;
   26.30  }
   26.31  
   26.32 +static int __init
   26.33 +efi_memory_present_wrapper(unsigned long start, unsigned long end, void *arg)
   26.34 +{
   26.35 +	memory_present(0, start, end);
   26.36 +	return 0;
   26.37 +}
   26.38  
   26.39  /*
   26.40   * Find the highest page frame number we have available
   26.41 @@ -1012,6 +1018,7 @@ void __init find_max_pfn(void)
   26.42  	max_pfn = 0;
   26.43  	if (efi_enabled) {
   26.44  		efi_memmap_walk(efi_find_max_pfn, &max_pfn);
   26.45 +		efi_memmap_walk(efi_memory_present_wrapper, NULL);
   26.46  		return;
   26.47  	}
   26.48  
   26.49 @@ -1026,6 +1033,7 @@ void __init find_max_pfn(void)
   26.50  			continue;
   26.51  		if (end > max_pfn)
   26.52  			max_pfn = end;
   26.53 +		memory_present(0, start, end);
   26.54  	}
   26.55  }
   26.56  #else
   26.57 @@ -1796,7 +1804,7 @@ void __init setup_arch(char **cmdline_p)
   26.58  		if (s) {
   26.59  			extern void setup_early_printk(char *);
   26.60  
   26.61 -			setup_early_printk(s);
   26.62 +			setup_early_printk(strchr(s, '=') + 1);
   26.63  			printk("early console enabled\n");
   26.64  		}
   26.65  	}
    27.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/smpboot.c	Thu Feb 02 19:15:22 2006 +0100
    27.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/smpboot.c	Thu Feb 02 19:16:38 2006 +0000
    27.3 @@ -875,8 +875,7 @@ static inline struct task_struct * alloc
    27.4  		/* initialize thread_struct.  we really want to avoid destroy
    27.5  		 * idle tread
    27.6  		 */
    27.7 -		idle->thread.esp = (unsigned long)(((struct pt_regs *)
    27.8 -			(THREAD_SIZE + (unsigned long) idle->thread_info)) - 1);
    27.9 +		idle->thread.esp = (unsigned long)task_pt_regs(idle);
   27.10  		init_idle(idle, cpu);
   27.11  		return idle;
   27.12  	}
   27.13 @@ -903,6 +902,12 @@ static int __devinit do_boot_cpu(int api
   27.14  	unsigned long start_eip;
   27.15  	unsigned short nmi_high = 0, nmi_low = 0;
   27.16  
   27.17 +	if (!cpu_gdt_descr[cpu].address &&
   27.18 +	    !(cpu_gdt_descr[cpu].address = get_zeroed_page(GFP_KERNEL))) {
   27.19 +		printk("Failed to allocate GDT for CPU %d\n", cpu);
   27.20 +		return 1;
   27.21 +	}
   27.22 +
   27.23  	++cpucount;
   27.24  
   27.25  	/*
   27.26 @@ -1090,6 +1095,7 @@ static void smp_tune_scheduling (void)
   27.27  			cachesize = 16; /* Pentiums, 2x8kB cache */
   27.28  			bandwidth = 100;
   27.29  		}
   27.30 +		max_cache_size = cachesize * 1024;
   27.31  	}
   27.32  }
   27.33  
    28.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c	Thu Feb 02 19:15:22 2006 +0100
    28.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c	Thu Feb 02 19:16:38 2006 +0000
    28.3 @@ -27,6 +27,12 @@
    28.4  #include <asm/uaccess.h>
    28.5  #include <xen/interface/memory.h>
    28.6  
    28.7 +#if defined(CONFIG_SWIOTLB)
    28.8 +extern void swiotlb_init(void);
    28.9 +int swiotlb;
   28.10 +EXPORT_SYMBOL(swiotlb);
   28.11 +#endif
   28.12 +
   28.13  #define OFFSET(val,align) ((unsigned long)((val) & ( (align) - 1)))
   28.14  
   28.15  #define SG_ENT_PHYS_ADDRESS(sg)	(page_to_phys((sg)->page) + (sg)->offset)
    29.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/traps-xen.c	Thu Feb 02 19:15:22 2006 +0100
    29.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/traps-xen.c	Thu Feb 02 19:16:38 2006 +0000
    29.3 @@ -109,33 +109,38 @@ static inline int valid_stack_ptr(struct
    29.4  		p < (void *)tinfo + THREAD_SIZE - 3;
    29.5  }
    29.6  
    29.7 +static void print_addr_and_symbol(unsigned long addr, char *log_lvl)
    29.8 +{
    29.9 +	printk(log_lvl);
   29.10 +	printk(" [<%08lx>] ", addr);
   29.11 +	print_symbol("%s", addr);
   29.12 +	printk("\n");
   29.13 +}
   29.14 +
   29.15  static inline unsigned long print_context_stack(struct thread_info *tinfo,
   29.16 -				unsigned long *stack, unsigned long ebp)
   29.17 +				unsigned long *stack, unsigned long ebp,
   29.18 +				char *log_lvl)
   29.19  {
   29.20  	unsigned long addr;
   29.21  
   29.22  #ifdef	CONFIG_FRAME_POINTER
   29.23  	while (valid_stack_ptr(tinfo, (void *)ebp)) {
   29.24  		addr = *(unsigned long *)(ebp + 4);
   29.25 -		printk(" [<%08lx>] ", addr);
   29.26 -		print_symbol("%s", addr);
   29.27 -		printk("\n");
   29.28 +		print_addr_and_symbol(addr, log_lvl);
   29.29  		ebp = *(unsigned long *)ebp;
   29.30  	}
   29.31  #else
   29.32  	while (valid_stack_ptr(tinfo, stack)) {
   29.33  		addr = *stack++;
   29.34 -		if (__kernel_text_address(addr)) {
   29.35 -			printk(" [<%08lx>]", addr);
   29.36 -			print_symbol(" %s", addr);
   29.37 -			printk("\n");
   29.38 -		}
   29.39 +		if (__kernel_text_address(addr))
   29.40 +			print_addr_and_symbol(addr, log_lvl);
   29.41  	}
   29.42  #endif
   29.43  	return ebp;
   29.44  }
   29.45  
   29.46 -void show_trace(struct task_struct *task, unsigned long * stack)
   29.47 +static void show_trace_log_lvl(struct task_struct *task,
   29.48 +			       unsigned long *stack, char *log_lvl)
   29.49  {
   29.50  	unsigned long ebp;
   29.51  
   29.52 @@ -154,15 +159,21 @@ void show_trace(struct task_struct *task
   29.53  		struct thread_info *context;
   29.54  		context = (struct thread_info *)
   29.55  			((unsigned long)stack & (~(THREAD_SIZE - 1)));
   29.56 -		ebp = print_context_stack(context, stack, ebp);
   29.57 +		ebp = print_context_stack(context, stack, ebp, log_lvl);
   29.58  		stack = (unsigned long*)context->previous_esp;
   29.59  		if (!stack)
   29.60  			break;
   29.61 -		printk(" =======================\n");
   29.62 +		printk(KERN_EMERG " =======================\n");
   29.63  	}
   29.64  }
   29.65  
   29.66 -void show_stack(struct task_struct *task, unsigned long *esp)
   29.67 +void show_trace(struct task_struct *task, unsigned long * stack)
   29.68 +{
   29.69 +	show_trace_log_lvl(task, stack, "");
   29.70 +}
   29.71 +
   29.72 +static void show_stack_log_lvl(struct task_struct *task, unsigned long *esp,
   29.73 +			       char *log_lvl)
   29.74  {
   29.75  	unsigned long *stack;
   29.76  	int i;
   29.77 @@ -175,15 +186,26 @@ void show_stack(struct task_struct *task
   29.78  	}
   29.79  
   29.80  	stack = esp;
   29.81 +	printk(log_lvl);
   29.82  	for(i = 0; i < kstack_depth_to_print; i++) {
   29.83  		if (kstack_end(stack))
   29.84  			break;
   29.85 -		if (i && ((i % 8) == 0))
   29.86 -			printk("\n       ");
   29.87 +		if (i && ((i % 8) == 0)) {
   29.88 +			printk("\n");
   29.89 +			printk(log_lvl);
   29.90 +			printk("       ");
   29.91 +		}
   29.92  		printk("%08lx ", *stack++);
   29.93  	}
   29.94 -	printk("\nCall Trace:\n");
   29.95 -	show_trace(task, esp);
   29.96 +	printk("\n");
   29.97 +	printk(log_lvl);
   29.98 +	printk("Call Trace:\n");
   29.99 +	show_trace_log_lvl(task, esp, log_lvl);
  29.100 +}
  29.101 +
  29.102 +void show_stack(struct task_struct *task, unsigned long *esp)
  29.103 +{
  29.104 +	show_stack_log_lvl(task, esp, "");
  29.105  }
  29.106  
  29.107  /*
  29.108 @@ -213,18 +235,18 @@ void show_registers(struct pt_regs *regs
  29.109  		ss = regs->xss & 0xffff;
  29.110  	}
  29.111  	print_modules();
  29.112 -	printk("CPU:    %d\nEIP:    %04x:[<%08lx>]    %s VLI\nEFLAGS: %08lx"
  29.113 -			"   (%s) \n",
  29.114 +	printk(KERN_EMERG "CPU:    %d\nEIP:    %04x:[<%08lx>]    %s VLI\n"
  29.115 +			"EFLAGS: %08lx   (%s) \n",
  29.116  		smp_processor_id(), 0xffff & regs->xcs, regs->eip,
  29.117  		print_tainted(), regs->eflags, system_utsname.release);
  29.118 -	print_symbol("EIP is at %s\n", regs->eip);
  29.119 -	printk("eax: %08lx   ebx: %08lx   ecx: %08lx   edx: %08lx\n",
  29.120 +	print_symbol(KERN_EMERG "EIP is at %s\n", regs->eip);
  29.121 +	printk(KERN_EMERG "eax: %08lx   ebx: %08lx   ecx: %08lx   edx: %08lx\n",
  29.122  		regs->eax, regs->ebx, regs->ecx, regs->edx);
  29.123 -	printk("esi: %08lx   edi: %08lx   ebp: %08lx   esp: %08lx\n",
  29.124 +	printk(KERN_EMERG "esi: %08lx   edi: %08lx   ebp: %08lx   esp: %08lx\n",
  29.125  		regs->esi, regs->edi, regs->ebp, esp);
  29.126 -	printk("ds: %04x   es: %04x   ss: %04x\n",
  29.127 +	printk(KERN_EMERG "ds: %04x   es: %04x   ss: %04x\n",
  29.128  		regs->xds & 0xffff, regs->xes & 0xffff, ss);
  29.129 -	printk("Process %s (pid: %d, threadinfo=%p task=%p)",
  29.130 +	printk(KERN_EMERG "Process %s (pid: %d, threadinfo=%p task=%p)",
  29.131  		current->comm, current->pid, current_thread_info(), current);
  29.132  	/*
  29.133  	 * When in-kernel, we also print out the stack and code at the
  29.134 @@ -233,10 +255,10 @@ void show_registers(struct pt_regs *regs
  29.135  	if (in_kernel) {
  29.136  		u8 __user *eip;
  29.137  
  29.138 -		printk("\nStack: ");
  29.139 -		show_stack(NULL, (unsigned long*)esp);
  29.140 +		printk("\n" KERN_EMERG "Stack: ");
  29.141 +		show_stack_log_lvl(NULL, (unsigned long *)esp, KERN_EMERG);
  29.142  
  29.143 -		printk("Code: ");
  29.144 +		printk(KERN_EMERG "Code: ");
  29.145  
  29.146  		eip = (u8 __user *)regs->eip - 43;
  29.147  		for (i = 0; i < 64; i++, eip++) {
  29.148 @@ -277,15 +299,15 @@ static void handle_BUG(struct pt_regs *r
  29.149  		(unsigned long)file < PAGE_OFFSET || __get_user(c, file))
  29.150  		file = "<bad filename>";
  29.151  
  29.152 -	printk("------------[ cut here ]------------\n");
  29.153 -	printk(KERN_ALERT "kernel BUG at %s:%d!\n", file, line);
  29.154 +	printk(KERN_EMERG "------------[ cut here ]------------\n");
  29.155 +	printk(KERN_EMERG "kernel BUG at %s:%d!\n", file, line);
  29.156  
  29.157  no_bug:
  29.158  	return;
  29.159  
  29.160  	/* Here we know it was a BUG but file-n-line is unavailable */
  29.161  bug:
  29.162 -	printk("Kernel BUG\n");
  29.163 +	printk(KERN_EMERG "Kernel BUG\n");
  29.164  }
  29.165  
  29.166  /* This is gone through when something in the kernel
  29.167 @@ -303,28 +325,35 @@ void die(const char * str, struct pt_reg
  29.168  		.lock_owner_depth =	0
  29.169  	};
  29.170  	static int die_counter;
  29.171 +	unsigned long flags;
  29.172  
  29.173  	if (die.lock_owner != raw_smp_processor_id()) {
  29.174  		console_verbose();
  29.175 -		spin_lock_irq(&die.lock);
  29.176 +		spin_lock_irqsave(&die.lock, flags);
  29.177  		die.lock_owner = smp_processor_id();
  29.178  		die.lock_owner_depth = 0;
  29.179  		bust_spinlocks(1);
  29.180  	}
  29.181 +	else
  29.182 +		local_save_flags(flags);
  29.183  
  29.184  	if (++die.lock_owner_depth < 3) {
  29.185  		int nl = 0;
  29.186  		handle_BUG(regs);
  29.187 -		printk(KERN_ALERT "%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter);
  29.188 +		printk(KERN_EMERG "%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter);
  29.189  #ifdef CONFIG_PREEMPT
  29.190 -		printk("PREEMPT ");
  29.191 +		printk(KERN_EMERG "PREEMPT ");
  29.192  		nl = 1;
  29.193  #endif
  29.194  #ifdef CONFIG_SMP
  29.195 +		if (!nl)
  29.196 +			printk(KERN_EMERG);
  29.197  		printk("SMP ");
  29.198  		nl = 1;
  29.199  #endif
  29.200  #ifdef CONFIG_DEBUG_PAGEALLOC
  29.201 +		if (!nl)
  29.202 +			printk(KERN_EMERG);
  29.203  		printk("DEBUG_PAGEALLOC");
  29.204  		nl = 1;
  29.205  #endif
  29.206 @@ -333,11 +362,11 @@ void die(const char * str, struct pt_reg
  29.207  	notify_die(DIE_OOPS, (char *)str, regs, err, 255, SIGSEGV);
  29.208  		show_registers(regs);
  29.209    	} else
  29.210 -		printk(KERN_ERR "Recursive die() failure, output suppressed\n");
  29.211 +		printk(KERN_EMERG "Recursive die() failure, output suppressed\n");
  29.212  
  29.213  	bust_spinlocks(0);
  29.214  	die.lock_owner = -1;
  29.215 -	spin_unlock_irq(&die.lock);
  29.216 +	spin_unlock_irqrestore(&die.lock, flags);
  29.217  
  29.218  	if (kexec_should_crash(current))
  29.219  		crash_kexec(regs);
  29.220 @@ -449,7 +478,7 @@ DO_VM86_ERROR( 3, SIGTRAP, "int3", int3)
  29.221  #endif
  29.222  DO_VM86_ERROR( 4, SIGSEGV, "overflow", overflow)
  29.223  DO_VM86_ERROR( 5, SIGSEGV, "bounds", bounds)
  29.224 -DO_ERROR_INFO( 6, SIGILL,  "invalid operand", invalid_op, ILL_ILLOPN, regs->eip)
  29.225 +DO_ERROR_INFO( 6, SIGILL,  "invalid opcode", invalid_op, ILL_ILLOPN, regs->eip)
  29.226  DO_VM86_ERROR( 7, SIGSEGV, "device not available", device_not_available)
  29.227  DO_ERROR( 9, SIGFPE,  "coprocessor segment overrun", coprocessor_segment_overrun)
  29.228  DO_ERROR(10, SIGSEGV, "invalid TSS", invalid_TSS)
  29.229 @@ -508,8 +537,10 @@ gp_in_kernel:
  29.230  
  29.231  static void mem_parity_error(unsigned char reason, struct pt_regs * regs)
  29.232  {
  29.233 -	printk("Uhhuh. NMI received. Dazed and confused, but trying to continue\n");
  29.234 -	printk("You probably have a hardware problem with your RAM chips\n");
  29.235 +	printk(KERN_EMERG "Uhhuh. NMI received. Dazed and confused, but trying "
  29.236 +			"to continue\n");
  29.237 +	printk(KERN_EMERG "You probably have a hardware problem with your RAM "
  29.238 +			"chips\n");
  29.239  
  29.240  	/* Clear and disable the memory parity error line. */
  29.241  	clear_mem_error(reason);
  29.242 @@ -517,7 +548,7 @@ static void mem_parity_error(unsigned ch
  29.243  
  29.244  static void io_check_error(unsigned char reason, struct pt_regs * regs)
  29.245  {
  29.246 -	printk("NMI: IOCK error (debug interrupt?)\n");
  29.247 +	printk(KERN_EMERG "NMI: IOCK error (debug interrupt?)\n");
  29.248  	show_registers(regs);
  29.249  
  29.250  	/* Re-enable the IOCK line, wait for a few seconds */
  29.251 @@ -554,11 +585,11 @@ void die_nmi (struct pt_regs *regs, cons
  29.252  	* to get a message out.
  29.253  	*/
  29.254  	bust_spinlocks(1);
  29.255 -	printk(msg);
  29.256 +	printk(KERN_EMERG "%s", msg);
  29.257  	printk(" on CPU%d, eip %08lx, registers:\n",
  29.258  		smp_processor_id(), regs->eip);
  29.259  	show_registers(regs);
  29.260 -	printk("console shuts up ...\n");
  29.261 +	printk(KERN_EMERG "console shuts up ...\n");
  29.262  	console_silent();
  29.263  	spin_unlock(&nmi_print_lock);
  29.264  	bust_spinlocks(0);
  29.265 @@ -957,8 +988,8 @@ asmlinkage void math_state_restore(struc
  29.266  
  29.267  asmlinkage void math_emulate(long arg)
  29.268  {
  29.269 -	printk("math-emulation not enabled and no coprocessor found.\n");
  29.270 -	printk("killing %s.\n",current->comm);
  29.271 +	printk(KERN_EMERG "math-emulation not enabled and no coprocessor found.\n");
  29.272 +	printk(KERN_EMERG "killing %s.\n",current->comm);
  29.273  	force_sig(SIGFPE,current);
  29.274  	schedule();
  29.275  }
  29.276 @@ -989,7 +1020,7 @@ static trap_info_t trap_table[] = {
  29.277  	{  1, 0|4, __KERNEL_CS, (unsigned long)debug			},
  29.278  	{  3, 3|4, __KERNEL_CS, (unsigned long)int3			},
  29.279  	{  4, 3, __KERNEL_CS, (unsigned long)overflow			},
  29.280 -	{  5, 3, __KERNEL_CS, (unsigned long)bounds			},
  29.281 +	{  5, 0, __KERNEL_CS, (unsigned long)bounds			},
  29.282  	{  6, 0, __KERNEL_CS, (unsigned long)invalid_op			},
  29.283  	{  7, 0|4, __KERNEL_CS, (unsigned long)device_not_available	},
  29.284  	{  9, 0, __KERNEL_CS, (unsigned long)coprocessor_segment_overrun },
  29.285 @@ -1013,6 +1044,28 @@ void __init trap_init(void)
  29.286  {
  29.287  	HYPERVISOR_set_trap_table(trap_table);
  29.288  
  29.289 +	if (cpu_has_fxsr) {
  29.290 +		/*
  29.291 +		 * Verify that the FXSAVE/FXRSTOR data will be 16-byte aligned.
  29.292 +		 * Generates a compile-time "error: zero width for bit-field" if
  29.293 +		 * the alignment is wrong.
  29.294 +		 */
  29.295 +		struct fxsrAlignAssert {
  29.296 +			int _:!(offsetof(struct task_struct,
  29.297 +					thread.i387.fxsave) & 15);
  29.298 +		};
  29.299 +
  29.300 +		printk(KERN_INFO "Enabling fast FPU save and restore... ");
  29.301 +		set_in_cr4(X86_CR4_OSFXSR);
  29.302 +		printk("done.\n");
  29.303 +	}
  29.304 +	if (cpu_has_xmm) {
  29.305 +		printk(KERN_INFO "Enabling unmasked SIMD FPU exception "
  29.306 +				"support... ");
  29.307 +		set_in_cr4(X86_CR4_OSXMMEXCPT);
  29.308 +		printk("done.\n");
  29.309 +	}
  29.310 +
  29.311  	/*
  29.312  	 * default LDT is a single-entry callgate to lcall7 for iBCS
  29.313  	 * and a callgate to lcall27 for Solaris/x86 binaries
    30.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/traps.c	Thu Feb 02 19:15:22 2006 +0100
    30.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/traps.c	Thu Feb 02 19:16:38 2006 +0000
    30.3 @@ -112,33 +112,38 @@ static inline int valid_stack_ptr(struct
    30.4  		p < (void *)tinfo + THREAD_SIZE - 3;
    30.5  }
    30.6  
    30.7 +static void print_addr_and_symbol(unsigned long addr, char *log_lvl)
    30.8 +{
    30.9 +	printk(log_lvl);
   30.10 +	printk(" [<%08lx>] ", addr);
   30.11 +	print_symbol("%s", addr);
   30.12 +	printk("\n");
   30.13 +}
   30.14 +
   30.15  static inline unsigned long print_context_stack(struct thread_info *tinfo,
   30.16 -				unsigned long *stack, unsigned long ebp)
   30.17 +				unsigned long *stack, unsigned long ebp,
   30.18 +				char *log_lvl)
   30.19  {
   30.20  	unsigned long addr;
   30.21  
   30.22  #ifdef	CONFIG_FRAME_POINTER
   30.23  	while (valid_stack_ptr(tinfo, (void *)ebp)) {
   30.24  		addr = *(unsigned long *)(ebp + 4);
   30.25 -		printk(" [<%08lx>] ", addr);
   30.26 -		print_symbol("%s", addr);
   30.27 -		printk("\n");
   30.28 +		print_addr_and_symbol(addr, log_lvl);
   30.29  		ebp = *(unsigned long *)ebp;
   30.30  	}
   30.31  #else
   30.32  	while (valid_stack_ptr(tinfo, stack)) {
   30.33  		addr = *stack++;
   30.34 -		if (__kernel_text_address(addr)) {
   30.35 -			printk(" [<%08lx>]", addr);
   30.36 -			print_symbol(" %s", addr);
   30.37 -			printk("\n");
   30.38 -		}
   30.39 +		if (__kernel_text_address(addr))
   30.40 +			print_addr_and_symbol(addr, log_lvl);
   30.41  	}
   30.42  #endif
   30.43  	return ebp;
   30.44  }
   30.45  
   30.46 -void show_trace(struct task_struct *task, unsigned long * stack)
   30.47 +static void show_trace_log_lvl(struct task_struct *task,
   30.48 +			       unsigned long *stack, char *log_lvl)
   30.49  {
   30.50  	unsigned long ebp;
   30.51  
   30.52 @@ -157,15 +162,21 @@ void show_trace(struct task_struct *task
   30.53  		struct thread_info *context;
   30.54  		context = (struct thread_info *)
   30.55  			((unsigned long)stack & (~(THREAD_SIZE - 1)));
   30.56 -		ebp = print_context_stack(context, stack, ebp);
   30.57 +		ebp = print_context_stack(context, stack, ebp, log_lvl);
   30.58  		stack = (unsigned long*)context->previous_esp;
   30.59  		if (!stack)
   30.60  			break;
   30.61 -		printk(" =======================\n");
   30.62 +		printk(KERN_EMERG " =======================\n");
   30.63  	}
   30.64  }
   30.65  
   30.66 -void show_stack(struct task_struct *task, unsigned long *esp)
   30.67 +void show_trace(struct task_struct *task, unsigned long * stack)
   30.68 +{
   30.69 +	show_trace_log_lvl(task, stack, "");
   30.70 +}
   30.71 +
   30.72 +static void show_stack_log_lvl(struct task_struct *task, unsigned long *esp,
   30.73 +			       char *log_lvl)
   30.74  {
   30.75  	unsigned long *stack;
   30.76  	int i;
   30.77 @@ -178,15 +189,26 @@ void show_stack(struct task_struct *task
   30.78  	}
   30.79  
   30.80  	stack = esp;
   30.81 +	printk(log_lvl);
   30.82  	for(i = 0; i < kstack_depth_to_print; i++) {
   30.83  		if (kstack_end(stack))
   30.84  			break;
   30.85 -		if (i && ((i % 8) == 0))
   30.86 -			printk("\n       ");
   30.87 +		if (i && ((i % 8) == 0)) {
   30.88 +			printk("\n");
   30.89 +			printk(log_lvl);
   30.90 +			printk("       ");
   30.91 +		}
   30.92  		printk("%08lx ", *stack++);
   30.93  	}
   30.94 -	printk("\nCall Trace:\n");
   30.95 -	show_trace(task, esp);
   30.96 +	printk("\n");
   30.97 +	printk(log_lvl);
   30.98 +	printk("Call Trace:\n");
   30.99 +	show_trace_log_lvl(task, esp, log_lvl);
  30.100 +}
  30.101 +
  30.102 +void show_stack(struct task_struct *task, unsigned long *esp)
  30.103 +{
  30.104 +	show_stack_log_lvl(task, esp, "");
  30.105  }
  30.106  
  30.107  /*
  30.108 @@ -216,18 +238,18 @@ void show_registers(struct pt_regs *regs
  30.109  		ss = regs->xss & 0xffff;
  30.110  	}
  30.111  	print_modules();
  30.112 -	printk("CPU:    %d\nEIP:    %04x:[<%08lx>]    %s VLI\nEFLAGS: %08lx"
  30.113 -			"   (%s) \n",
  30.114 +	printk(KERN_EMERG "CPU:    %d\nEIP:    %04x:[<%08lx>]    %s VLI\n"
  30.115 +			"EFLAGS: %08lx   (%s) \n",
  30.116  		smp_processor_id(), 0xffff & regs->xcs, regs->eip,
  30.117  		print_tainted(), regs->eflags, system_utsname.release);
  30.118 -	print_symbol("EIP is at %s\n", regs->eip);
  30.119 -	printk("eax: %08lx   ebx: %08lx   ecx: %08lx   edx: %08lx\n",
  30.120 +	print_symbol(KERN_EMERG "EIP is at %s\n", regs->eip);
  30.121 +	printk(KERN_EMERG "eax: %08lx   ebx: %08lx   ecx: %08lx   edx: %08lx\n",
  30.122  		regs->eax, regs->ebx, regs->ecx, regs->edx);
  30.123 -	printk("esi: %08lx   edi: %08lx   ebp: %08lx   esp: %08lx\n",
  30.124 +	printk(KERN_EMERG "esi: %08lx   edi: %08lx   ebp: %08lx   esp: %08lx\n",
  30.125  		regs->esi, regs->edi, regs->ebp, esp);
  30.126 -	printk("ds: %04x   es: %04x   ss: %04x\n",
  30.127 +	printk(KERN_EMERG "ds: %04x   es: %04x   ss: %04x\n",
  30.128  		regs->xds & 0xffff, regs->xes & 0xffff, ss);
  30.129 -	printk("Process %s (pid: %d, threadinfo=%p task=%p)",
  30.130 +	printk(KERN_EMERG "Process %s (pid: %d, threadinfo=%p task=%p)",
  30.131  		current->comm, current->pid, current_thread_info(), current);
  30.132  	/*
  30.133  	 * When in-kernel, we also print out the stack and code at the
  30.134 @@ -236,10 +258,10 @@ void show_registers(struct pt_regs *regs
  30.135  	if (in_kernel) {
  30.136  		u8 __user *eip;
  30.137  
  30.138 -		printk("\nStack: ");
  30.139 -		show_stack(NULL, (unsigned long*)esp);
  30.140 +		printk("\n" KERN_EMERG "Stack: ");
  30.141 +		show_stack_log_lvl(NULL, (unsigned long *)esp, KERN_EMERG);
  30.142  
  30.143 -		printk("Code: ");
  30.144 +		printk(KERN_EMERG "Code: ");
  30.145  
  30.146  		eip = (u8 __user *)regs->eip - 43;
  30.147  		for (i = 0; i < 64; i++, eip++) {
  30.148 @@ -280,15 +302,15 @@ static void handle_BUG(struct pt_regs *r
  30.149  		(unsigned long)file < PAGE_OFFSET || __get_user(c, file))
  30.150  		file = "<bad filename>";
  30.151  
  30.152 -	printk("------------[ cut here ]------------\n");
  30.153 -	printk(KERN_ALERT "kernel BUG at %s:%d!\n", file, line);
  30.154 +	printk(KERN_EMERG "------------[ cut here ]------------\n");
  30.155 +	printk(KERN_EMERG "kernel BUG at %s:%d!\n", file, line);
  30.156  
  30.157  no_bug:
  30.158  	return;
  30.159  
  30.160  	/* Here we know it was a BUG but file-n-line is unavailable */
  30.161  bug:
  30.162 -	printk("Kernel BUG\n");
  30.163 +	printk(KERN_EMERG "Kernel BUG\n");
  30.164  }
  30.165  
  30.166  /* This is gone through when something in the kernel
  30.167 @@ -306,28 +328,35 @@ void die(const char * str, struct pt_reg
  30.168  		.lock_owner_depth =	0
  30.169  	};
  30.170  	static int die_counter;
  30.171 +	unsigned long flags;
  30.172  
  30.173  	if (die.lock_owner != raw_smp_processor_id()) {
  30.174  		console_verbose();
  30.175 -		spin_lock_irq(&die.lock);
  30.176 +		spin_lock_irqsave(&die.lock, flags);
  30.177  		die.lock_owner = smp_processor_id();
  30.178  		die.lock_owner_depth = 0;
  30.179  		bust_spinlocks(1);
  30.180  	}
  30.181 +	else
  30.182 +		local_save_flags(flags);
  30.183  
  30.184  	if (++die.lock_owner_depth < 3) {
  30.185  		int nl = 0;
  30.186  		handle_BUG(regs);
  30.187 -		printk(KERN_ALERT "%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter);
  30.188 +		printk(KERN_EMERG "%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter);
  30.189  #ifdef CONFIG_PREEMPT
  30.190 -		printk("PREEMPT ");
  30.191 +		printk(KERN_EMERG "PREEMPT ");
  30.192  		nl = 1;
  30.193  #endif
  30.194  #ifdef CONFIG_SMP
  30.195 +		if (!nl)
  30.196 +			printk(KERN_EMERG);
  30.197  		printk("SMP ");
  30.198  		nl = 1;
  30.199  #endif
  30.200  #ifdef CONFIG_DEBUG_PAGEALLOC
  30.201 +		if (!nl)
  30.202 +			printk(KERN_EMERG);
  30.203  		printk("DEBUG_PAGEALLOC");
  30.204  		nl = 1;
  30.205  #endif
  30.206 @@ -336,11 +365,11 @@ void die(const char * str, struct pt_reg
  30.207  	notify_die(DIE_OOPS, (char *)str, regs, err, 255, SIGSEGV);
  30.208  		show_registers(regs);
  30.209    	} else
  30.210 -		printk(KERN_ERR "Recursive die() failure, output suppressed\n");
  30.211 +		printk(KERN_EMERG "Recursive die() failure, output suppressed\n");
  30.212  
  30.213  	bust_spinlocks(0);
  30.214  	die.lock_owner = -1;
  30.215 -	spin_unlock_irq(&die.lock);
  30.216 +	spin_unlock_irqrestore(&die.lock, flags);
  30.217  
  30.218  	if (kexec_should_crash(current))
  30.219  		crash_kexec(regs);
  30.220 @@ -452,7 +481,7 @@ DO_VM86_ERROR( 3, SIGTRAP, "int3", int3)
  30.221  #endif
  30.222  DO_VM86_ERROR( 4, SIGSEGV, "overflow", overflow)
  30.223  DO_VM86_ERROR( 5, SIGSEGV, "bounds", bounds)
  30.224 -DO_ERROR_INFO( 6, SIGILL,  "invalid operand", invalid_op, ILL_ILLOPN, regs->eip)
  30.225 +DO_ERROR_INFO( 6, SIGILL,  "invalid opcode", invalid_op, ILL_ILLOPN, regs->eip)
  30.226  DO_ERROR( 9, SIGFPE,  "coprocessor segment overrun", coprocessor_segment_overrun)
  30.227  DO_ERROR(10, SIGSEGV, "invalid TSS", invalid_TSS)
  30.228  DO_ERROR(11, SIGBUS,  "segment not present", segment_not_present)
  30.229 @@ -524,8 +553,10 @@ gp_in_kernel:
  30.230  
  30.231  static void mem_parity_error(unsigned char reason, struct pt_regs * regs)
  30.232  {
  30.233 -	printk("Uhhuh. NMI received. Dazed and confused, but trying to continue\n");
  30.234 -	printk("You probably have a hardware problem with your RAM chips\n");
  30.235 +	printk(KERN_EMERG "Uhhuh. NMI received. Dazed and confused, but trying "
  30.236 +			"to continue\n");
  30.237 +	printk(KERN_EMERG "You probably have a hardware problem with your RAM "
  30.238 +			"chips\n");
  30.239  
  30.240  	/* Clear and disable the memory parity error line. */
  30.241  	clear_mem_error(reason);
  30.242 @@ -533,7 +564,7 @@ static void mem_parity_error(unsigned ch
  30.243  
  30.244  static void io_check_error(unsigned char reason, struct pt_regs * regs)
  30.245  {
  30.246 -	printk("NMI: IOCK error (debug interrupt?)\n");
  30.247 +	printk(KERN_EMERG "NMI: IOCK error (debug interrupt?)\n");
  30.248  	show_registers(regs);
  30.249  
  30.250  	/* Re-enable the IOCK line, wait for a few seconds */
  30.251 @@ -570,11 +601,11 @@ void die_nmi (struct pt_regs *regs, cons
  30.252  	* to get a message out.
  30.253  	*/
  30.254  	bust_spinlocks(1);
  30.255 -	printk(msg);
  30.256 +	printk(KERN_EMERG "%s", msg);
  30.257  	printk(" on CPU%d, eip %08lx, registers:\n",
  30.258  		smp_processor_id(), regs->eip);
  30.259  	show_registers(regs);
  30.260 -	printk("console shuts up ...\n");
  30.261 +	printk(KERN_EMERG "console shuts up ...\n");
  30.262  	console_silent();
  30.263  	spin_unlock(&nmi_print_lock);
  30.264  	bust_spinlocks(0);
  30.265 @@ -980,8 +1011,8 @@ asmlinkage void math_state_restore(struc
  30.266  
  30.267  asmlinkage void math_emulate(long arg)
  30.268  {
  30.269 -	printk("math-emulation not enabled and no coprocessor found.\n");
  30.270 -	printk("killing %s.\n",current->comm);
  30.271 +	printk(KERN_EMERG "math-emulation not enabled and no coprocessor found.\n");
  30.272 +	printk(KERN_EMERG "killing %s.\n",current->comm);
  30.273  	force_sig(SIGFPE,current);
  30.274  	schedule();
  30.275  }
  30.276 @@ -1068,9 +1099,9 @@ void __init trap_init(void)
  30.277  	set_trap_gate(0,&divide_error);
  30.278  	set_intr_gate(1,&debug);
  30.279  	set_intr_gate(2,&nmi);
  30.280 -	set_system_intr_gate(3, &int3); /* int3-5 can be called from all */
  30.281 +	set_system_intr_gate(3, &int3); /* int3/4 can be called from all */
  30.282  	set_system_gate(4,&overflow);
  30.283 -	set_system_gate(5,&bounds);
  30.284 +	set_trap_gate(5,&bounds);
  30.285  	set_trap_gate(6,&invalid_op);
  30.286  	set_trap_gate(7,&device_not_available);
  30.287  	set_task_gate(8,GDT_ENTRY_DOUBLEFAULT_TSS);
  30.288 @@ -1088,6 +1119,28 @@ void __init trap_init(void)
  30.289  #endif
  30.290  	set_trap_gate(19,&simd_coprocessor_error);
  30.291  
  30.292 +	if (cpu_has_fxsr) {
  30.293 +		/*
  30.294 +		 * Verify that the FXSAVE/FXRSTOR data will be 16-byte aligned.
  30.295 +		 * Generates a compile-time "error: zero width for bit-field" if
  30.296 +		 * the alignment is wrong.
  30.297 +		 */
  30.298 +		struct fxsrAlignAssert {
  30.299 +			int _:!(offsetof(struct task_struct,
  30.300 +					thread.i387.fxsave) & 15);
  30.301 +		};
  30.302 +
  30.303 +		printk(KERN_INFO "Enabling fast FPU save and restore... ");
  30.304 +		set_in_cr4(X86_CR4_OSFXSR);
  30.305 +		printk("done.\n");
  30.306 +	}
  30.307 +	if (cpu_has_xmm) {
  30.308 +		printk(KERN_INFO "Enabling unmasked SIMD FPU exception "
  30.309 +				"support... ");
  30.310 +		set_in_cr4(X86_CR4_OSXMMEXCPT);
  30.311 +		printk("done.\n");
  30.312 +	}
  30.313 +
  30.314  	set_system_gate(SYSCALL_VECTOR,&system_call);
  30.315  
  30.316  	/*
    31.1 --- a/linux-2.6-xen-sparse/arch/i386/mm/init-xen.c	Thu Feb 02 19:15:22 2006 +0100
    31.2 +++ b/linux-2.6-xen-sparse/arch/i386/mm/init-xen.c	Thu Feb 02 19:16:38 2006 +0000
    31.3 @@ -45,12 +45,6 @@
    31.4  
    31.5  extern unsigned long *contiguous_bitmap;
    31.6  
    31.7 -#if defined(CONFIG_SWIOTLB)
    31.8 -extern void swiotlb_init(void);
    31.9 -int swiotlb;
   31.10 -EXPORT_SYMBOL(swiotlb);
   31.11 -#endif
   31.12 -
   31.13  unsigned int __VMALLOC_RESERVE = 128 << 20;
   31.14  
   31.15  DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
   31.16 @@ -315,7 +309,7 @@ static void __init permanent_kmaps_init(
   31.17  	pkmap_page_table = pte;	
   31.18  }
   31.19  
   31.20 -static void __devinit free_new_highpage(struct page *page, int pfn)
   31.21 +static void __meminit free_new_highpage(struct page *page, int pfn)
   31.22  {
   31.23  	set_page_count(page, 1);
   31.24  	if (pfn < xen_start_info->nr_pages)
   31.25 @@ -816,6 +810,30 @@ void free_initmem(void)
   31.26  	printk (KERN_INFO "Freeing unused kernel memory: %dk freed\n", (__init_end - __init_begin) >> 10);
   31.27  }
   31.28  
   31.29 +#ifdef CONFIG_DEBUG_RODATA
   31.30 +
   31.31 +extern char __start_rodata, __end_rodata;
   31.32 +void mark_rodata_ro(void)
   31.33 +{
   31.34 +	unsigned long addr = (unsigned long)&__start_rodata;
   31.35 +
   31.36 +	for (; addr < (unsigned long)&__end_rodata; addr += PAGE_SIZE)
   31.37 +		change_page_attr(virt_to_page(addr), 1, PAGE_KERNEL_RO);
   31.38 +
   31.39 +	printk ("Write protecting the kernel read-only data: %luk\n",
   31.40 +			(unsigned long)(&__end_rodata - &__start_rodata) >> 10);
   31.41 +
   31.42 +	/*
   31.43 +	 * change_page_attr() requires a global_flush_tlb() call after it.
   31.44 +	 * We do this after the printk so that if something went wrong in the
   31.45 +	 * change, the printk gets out at least to give a better debug hint
   31.46 +	 * of who is the culprit.
   31.47 +	 */
   31.48 +	global_flush_tlb();
   31.49 +}
   31.50 +#endif
   31.51 +
   31.52 +
   31.53  #ifdef CONFIG_BLK_DEV_INITRD
   31.54  void free_initrd_mem(unsigned long start, unsigned long end)
   31.55  {
    32.1 --- a/linux-2.6-xen-sparse/arch/i386/pci/irq-xen.c	Thu Feb 02 19:15:22 2006 +0100
    32.2 +++ b/linux-2.6-xen-sparse/arch/i386/pci/irq-xen.c	Thu Feb 02 19:16:38 2006 +0000
    32.3 @@ -78,7 +78,7 @@ static inline struct irq_routing_table *
    32.4  	for (i=0; i < rt->size; i++)
    32.5  		sum += addr[i];
    32.6  	if (!sum) {
    32.7 -		DBG("PCI: Interrupt Routing Table found at 0x%p\n", rt);
    32.8 +		DBG(KERN_DEBUG "PCI: Interrupt Routing Table found at 0x%p\n", rt);
    32.9  		return rt;
   32.10  	}
   32.11  	return NULL;
   32.12 @@ -131,7 +131,7 @@ static void __init pirq_peer_trick(void)
   32.13  #ifdef DEBUG
   32.14  		{
   32.15  			int j;
   32.16 -			DBG("%02x:%02x slot=%02x", e->bus, e->devfn/8, e->slot);
   32.17 +			DBG(KERN_DEBUG "%02x:%02x slot=%02x", e->bus, e->devfn/8, e->slot);
   32.18  			for(j=0; j<4; j++)
   32.19  				DBG(" %d:%02x/%04x", j, e->irq[j].link, e->irq[j].bitmap);
   32.20  			DBG("\n");
   32.21 @@ -163,10 +163,10 @@ void eisa_set_level_irq(unsigned int irq
   32.22  		return;
   32.23  
   32.24  	eisa_irq_mask |= (1 << irq);
   32.25 -	printk("PCI: setting IRQ %u as level-triggered\n", irq);
   32.26 +	printk(KERN_DEBUG "PCI: setting IRQ %u as level-triggered\n", irq);
   32.27  	val = inb(port);
   32.28  	if (!(val & mask)) {
   32.29 -		DBG(" -> edge");
   32.30 +		DBG(KERN_DEBUG " -> edge");
   32.31  		outb(val | mask, port);
   32.32  	}
   32.33  }
   32.34 @@ -680,11 +680,11 @@ static __init int ali_router_probe(struc
   32.35  	{
   32.36  	case PCI_DEVICE_ID_AL_M1533:
   32.37  	case PCI_DEVICE_ID_AL_M1563:
   32.38 -		printk("PCI: Using ALI IRQ Router\n");
   32.39 -			r->name = "ALI";
   32.40 -			r->get = pirq_ali_get;
   32.41 -			r->set = pirq_ali_set;
   32.42 -			return 1;
   32.43 +		printk(KERN_DEBUG "PCI: Using ALI IRQ Router\n");
   32.44 +		r->name = "ALI";
   32.45 +		r->get = pirq_ali_get;
   32.46 +		r->set = pirq_ali_set;
   32.47 +		return 1;
   32.48  	}
   32.49  	return 0;
   32.50  }
   32.51 @@ -752,12 +752,13 @@ static void __init pirq_find_router(stru
   32.52  	r->get = NULL;
   32.53  	r->set = NULL;
   32.54  	
   32.55 -	DBG("PCI: Attempting to find IRQ router for %04x:%04x\n",
   32.56 +	DBG(KERN_DEBUG "PCI: Attempting to find IRQ router for %04x:%04x\n",
   32.57  	    rt->rtr_vendor, rt->rtr_device);
   32.58  
   32.59  	pirq_router_dev = pci_find_slot(rt->rtr_bus, rt->rtr_devfn);
   32.60  	if (!pirq_router_dev) {
   32.61 -		DBG("PCI: Interrupt router not found at %02x:%02x\n", rt->rtr_bus, rt->rtr_devfn);
   32.62 +		DBG(KERN_DEBUG "PCI: Interrupt router not found at "
   32.63 +			"%02x:%02x\n", rt->rtr_bus, rt->rtr_devfn);
   32.64  		return;
   32.65  	}
   32.66  
   32.67 @@ -802,7 +803,7 @@ static int pcibios_lookup_irq(struct pci
   32.68  	/* Find IRQ pin */
   32.69  	pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
   32.70  	if (!pin) {
   32.71 -		DBG(" -> no interrupt pin\n");
   32.72 +		DBG(KERN_DEBUG " -> no interrupt pin\n");
   32.73  		return 0;
   32.74  	}
   32.75  	pin = pin - 1;
   32.76 @@ -812,16 +813,16 @@ static int pcibios_lookup_irq(struct pci
   32.77  	if (!pirq_table)
   32.78  		return 0;
   32.79  	
   32.80 -	DBG("IRQ for %s[%c]", pci_name(dev), 'A' + pin);
   32.81 +	DBG(KERN_DEBUG "IRQ for %s[%c]", pci_name(dev), 'A' + pin);
   32.82  	info = pirq_get_info(dev);
   32.83  	if (!info) {
   32.84 -		DBG(" -> not found in routing table\n");
   32.85 +		DBG(" -> not found in routing table\n" KERN_DEBUG);
   32.86  		return 0;
   32.87  	}
   32.88  	pirq = info->irq[pin].link;
   32.89  	mask = info->irq[pin].bitmap;
   32.90  	if (!pirq) {
   32.91 -		DBG(" -> not routed\n");
   32.92 +		DBG(" -> not routed\n" KERN_DEBUG);
   32.93  		return 0;
   32.94  	}
   32.95  	DBG(" -> PIRQ %02x, mask %04x, excl %04x", pirq, mask, pirq_table->exclusive_irqs);
   32.96 @@ -849,9 +850,12 @@ static int pcibios_lookup_irq(struct pci
   32.97  	 * reported by the device if possible.
   32.98  	 */
   32.99  	newirq = dev->irq;
  32.100 -	if (!((1 << newirq) & mask)) {
  32.101 +	if (newirq && !((1 << newirq) & mask)) {
  32.102  		if ( pci_probe & PCI_USE_PIRQ_MASK) newirq = 0;
  32.103 -		else printk(KERN_WARNING "PCI: IRQ %i for device %s doesn't match PIRQ mask - try pci=usepirqmask\n", newirq, pci_name(dev));
  32.104 +		else printk("\n" KERN_WARNING
  32.105 +			"PCI: IRQ %i for device %s doesn't match PIRQ mask "
  32.106 +			"- try pci=usepirqmask\n" KERN_DEBUG, newirq,
  32.107 +			pci_name(dev));
  32.108  	}
  32.109  	if (!newirq && assign) {
  32.110  		for (i = 0; i < 16; i++) {
  32.111 @@ -926,14 +930,14 @@ static void __init pcibios_fixup_irqs(vo
  32.112  	struct pci_dev *dev = NULL;
  32.113  	u8 pin;
  32.114  
  32.115 -	DBG("PCI: IRQ fixup\n");
  32.116 +	DBG(KERN_DEBUG "PCI: IRQ fixup\n");
  32.117  	while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) {
  32.118  		/*
  32.119  		 * If the BIOS has set an out of range IRQ number, just ignore it.
  32.120  		 * Also keep track of which IRQ's are already in use.
  32.121  		 */
  32.122  		if (dev->irq >= 16) {
  32.123 -			DBG("%s: ignoring bogus IRQ %d\n", pci_name(dev), dev->irq);
  32.124 +			DBG(KERN_DEBUG "%s: ignoring bogus IRQ %d\n", pci_name(dev), dev->irq);
  32.125  			dev->irq = 0;
  32.126  		}
  32.127  		/* If the IRQ is already assigned to a PCI device, ignore its ISA use penalty */
  32.128 @@ -1042,7 +1046,7 @@ static struct dmi_system_id __initdata p
  32.129  
  32.130  static int __init pcibios_irq_init(void)
  32.131  {
  32.132 -	DBG("PCI: IRQ init\n");
  32.133 +	DBG(KERN_DEBUG "PCI: IRQ init\n");
  32.134  
  32.135  	if (pcibios_enable_irq || raw_pci_ops == NULL)
  32.136  		return 0;
    33.1 --- a/linux-2.6-xen-sparse/arch/ia64/Kconfig	Thu Feb 02 19:15:22 2006 +0100
    33.2 +++ b/linux-2.6-xen-sparse/arch/ia64/Kconfig	Thu Feb 02 19:16:38 2006 +0000
    33.3 @@ -26,10 +26,6 @@ config MMU
    33.4  	bool
    33.5  	default y
    33.6  
    33.7 -config SWIOTLB
    33.8 -       bool
    33.9 -       default y
   33.10 -
   33.11  config RWSEM_XCHGADD_ALGORITHM
   33.12  	bool
   33.13  	default y
   33.14 @@ -101,23 +97,16 @@ config SCHED_NO_NO_OMIT_FRAME_POINTER
   33.15  	bool
   33.16  	default y
   33.17  
   33.18 -config IA64_UNCACHED_ALLOCATOR
   33.19 -	bool
   33.20 -	select GENERIC_ALLOCATOR
   33.21 -
   33.22 -config DMA_IS_DMA32
   33.23 -	bool
   33.24 -	default y
   33.25 -
   33.26  choice
   33.27  	prompt "System type"
   33.28  	default IA64_GENERIC
   33.29  
   33.30  config IA64_GENERIC
   33.31  	bool "generic"
   33.32 -	select ACPI
   33.33  	select NUMA
   33.34  	select ACPI_NUMA
   33.35 +	select VIRTUAL_MEM_MAP
   33.36 +	select DISCONTIGMEM
   33.37  	help
   33.38  	  This selects the system type of your hardware.  A "generic" kernel
   33.39  	  will run on any supported IA-64 system.  However, if you configure
   33.40 @@ -215,21 +204,6 @@ config IA64_PAGE_SIZE_64KB
   33.41  
   33.42  endchoice
   33.43  
   33.44 -choice
   33.45 -	prompt "Page Table Levels"
   33.46 -	default PGTABLE_3
   33.47 -
   33.48 -config PGTABLE_3
   33.49 -	bool "3 Levels"
   33.50 -
   33.51 -config PGTABLE_4
   33.52 -	depends on !IA64_PAGE_SIZE_64KB
   33.53 -	bool "4 Levels"
   33.54 -
   33.55 -endchoice
   33.56 -
   33.57 -source kernel/Kconfig.hz
   33.58 -
   33.59  config IA64_BRL_EMU
   33.60  	bool
   33.61  	depends on ITANIUM
   33.62 @@ -242,6 +216,40 @@ config IA64_L1_CACHE_SHIFT
   33.63  	default "6" if ITANIUM
   33.64  
   33.65  # align cache-sensitive data to 64 bytes
   33.66 +config NUMA
   33.67 +	bool "NUMA support"
   33.68 +	depends on !IA64_HP_SIM
   33.69 +	default y if IA64_SGI_SN2
   33.70 +	select ACPI_NUMA
   33.71 +	help
   33.72 +	  Say Y to compile the kernel to support NUMA (Non-Uniform Memory
   33.73 +	  Access).  This option is for configuring high-end multiprocessor
   33.74 +	  server systems.  If in doubt, say N.
   33.75 +
   33.76 +config VIRTUAL_MEM_MAP
   33.77 +	bool "Virtual mem map"
   33.78 +	default y if !IA64_HP_SIM
   33.79 +	help
   33.80 +	  Say Y to compile the kernel with support for a virtual mem map.
   33.81 +	  This code also only takes effect if a memory hole of greater than
   33.82 +	  1 Gb is found during boot.  You must turn this option on if you
   33.83 +	  require the DISCONTIGMEM option for your machine. If you are
   33.84 +	  unsure, say Y.
   33.85 +
   33.86 +config HOLES_IN_ZONE
   33.87 +	bool
   33.88 +	default y if VIRTUAL_MEM_MAP
   33.89 +
   33.90 +config DISCONTIGMEM
   33.91 +	bool "Discontiguous memory support"
   33.92 +	depends on (IA64_DIG || IA64_SGI_SN2 || IA64_GENERIC || IA64_HP_ZX1 || IA64_HP_ZX1_SWIOTLB) && NUMA && VIRTUAL_MEM_MAP
   33.93 +	default y if (IA64_SGI_SN2 || IA64_GENERIC) && NUMA
   33.94 +	help
   33.95 +	  Say Y to support efficient handling of discontiguous physical memory,
   33.96 +	  for architectures which are either NUMA (Non-Uniform Memory Access)
   33.97 +	  or have huge holes in the physical address space for other reasons.
   33.98 +	  See <file:Documentation/vm/numa> for more.
   33.99 +
  33.100  config IA64_CYCLONE
  33.101  	bool "Cyclone (EXA) Time Source support"
  33.102  	help
  33.103 @@ -253,10 +261,16 @@ config IOSAPIC
  33.104  	depends on !IA64_HP_SIM
  33.105  	default y
  33.106  
  33.107 +config IA64_SGI_SN_SIM
  33.108 +	bool "SGI Medusa Simulator Support"
  33.109 +	depends on IA64_SGI_SN2
  33.110 +	help
  33.111 +	  If you are compiling a kernel that will run under SGI's IA-64
  33.112 +	  simulator (Medusa) then say Y, otherwise say N.
  33.113 +
  33.114  config IA64_SGI_SN_XP
  33.115  	tristate "Support communication between SGI SSIs"
  33.116 -	depends on IA64_GENERIC || IA64_SGI_SN2
  33.117 -	select IA64_UNCACHED_ALLOCATOR
  33.118 +	depends on MSPEC
  33.119  	help
  33.120  	  An SGI machine can be divided into multiple Single System
  33.121  	  Images which act independently of each other and have
  33.122 @@ -265,10 +279,8 @@ config IA64_SGI_SN_XP
  33.123  	  based on a network adapter and DMA messaging.
  33.124  
  33.125  config FORCE_MAX_ZONEORDER
  33.126 -	int "MAX_ORDER (11 - 17)"  if !HUGETLB_PAGE
  33.127 -	range 11 17  if !HUGETLB_PAGE
  33.128 -	default "17" if HUGETLB_PAGE
  33.129 -	default "11"
  33.130 +	int
  33.131 +	default "18"
  33.132  
  33.133  config SMP
  33.134  	bool "Symmetric multi-processing support"
  33.135 @@ -289,8 +301,8 @@ config SMP
  33.136  	  If you don't know what to do here, say N.
  33.137  
  33.138  config NR_CPUS
  33.139 -	int "Maximum number of CPUs (2-1024)"
  33.140 -	range 2 1024
  33.141 +	int "Maximum number of CPUs (2-512)"
  33.142 +	range 2 512
  33.143  	depends on SMP
  33.144  	default "64"
  33.145  	help
  33.146 @@ -331,59 +343,10 @@ config PREEMPT
  33.147            Say Y here if you are building a kernel for a desktop, embedded
  33.148            or real-time system.  Say N if you are unsure.
  33.149  
  33.150 -source "mm/Kconfig"
  33.151 -
  33.152 -config ARCH_SELECT_MEMORY_MODEL
  33.153 -	def_bool y
  33.154 -
  33.155 -config ARCH_DISCONTIGMEM_ENABLE
  33.156 -	def_bool y
  33.157 -	help
  33.158 -	  Say Y to support efficient handling of discontiguous physical memory,
  33.159 -	  for architectures which are either NUMA (Non-Uniform Memory Access)
  33.160 -	  or have huge holes in the physical address space for other reasons.
  33.161 - 	  See <file:Documentation/vm/numa> for more.
  33.162 -
  33.163 -config ARCH_FLATMEM_ENABLE
  33.164 -	def_bool y
  33.165 -
  33.166 -config ARCH_SPARSEMEM_ENABLE
  33.167 -	def_bool y
  33.168 -	depends on ARCH_DISCONTIGMEM_ENABLE
  33.169 -
  33.170 -config ARCH_DISCONTIGMEM_DEFAULT
  33.171 -	def_bool y if (IA64_SGI_SN2 || IA64_GENERIC || IA64_HP_ZX1 || IA64_HP_ZX1_SWIOTLB)
  33.172 -	depends on ARCH_DISCONTIGMEM_ENABLE
  33.173 -
  33.174 -config NUMA
  33.175 -	bool "NUMA support"
  33.176 -	depends on !IA64_HP_SIM && !FLATMEM
  33.177 -	default y if IA64_SGI_SN2
  33.178 -	help
  33.179 -	  Say Y to compile the kernel to support NUMA (Non-Uniform Memory
  33.180 -	  Access).  This option is for configuring high-end multiprocessor
  33.181 -	  server systems.  If in doubt, say N.
  33.182 -
  33.183 -# VIRTUAL_MEM_MAP and FLAT_NODE_MEM_MAP are functionally equivalent.
  33.184 -# VIRTUAL_MEM_MAP has been retained for historical reasons.
  33.185 -config VIRTUAL_MEM_MAP
  33.186 -	bool "Virtual mem map"
  33.187 -	depends on !SPARSEMEM
  33.188 -	default y if !IA64_HP_SIM
  33.189 -	help
  33.190 -	  Say Y to compile the kernel with support for a virtual mem map.
  33.191 -	  This code also only takes effect if a memory hole of greater than
  33.192 -	  1 Gb is found during boot.  You must turn this option on if you
  33.193 -	  require the DISCONTIGMEM option for your machine. If you are
  33.194 -	  unsure, say Y.
  33.195 -
  33.196 -config HOLES_IN_ZONE
  33.197 +config HAVE_DEC_LOCK
  33.198  	bool
  33.199 -	default y if VIRTUAL_MEM_MAP
  33.200 -
  33.201 -config HAVE_ARCH_EARLY_PFN_TO_NID
  33.202 -	def_bool y
  33.203 -	depends on NEED_MULTIPLE_NODES
  33.204 +	depends on (SMP || PREEMPT)
  33.205 +	default y
  33.206  
  33.207  config IA32_SUPPORT
  33.208  	bool "Support for Linux/x86 binaries"
  33.209 @@ -421,6 +384,11 @@ config IA64_PALINFO
  33.210  	  To use this option, you have to ensure that the "/proc file system
  33.211  	  support" (CONFIG_PROC_FS) is enabled, too.
  33.212  
  33.213 +config ACPI_DEALLOCATE_IRQ
  33.214 +	bool
  33.215 +	depends on IOSAPIC && EXPERIMENTAL
  33.216 +	default y
  33.217 +
  33.218  source "drivers/firmware/Kconfig"
  33.219  
  33.220  source "fs/Kconfig.binfmt"
  33.221 @@ -429,14 +397,36 @@ endmenu
  33.222  
  33.223  menu "Power management and ACPI"
  33.224  
  33.225 -source "kernel/power/Kconfig"
  33.226 +config PM
  33.227 +	bool "Power Management support"
  33.228 +	depends on !IA64_HP_SIM
  33.229 +	default y
  33.230 +	help
  33.231 +	  "Power Management" means that parts of your computer are shut
  33.232 +	  off or put into a power conserving "sleep" mode if they are not
  33.233 +	  being used.  There are two competing standards for doing this: APM
  33.234 +	  and ACPI.  If you want to use either one, say Y here and then also
  33.235 +	  to the requisite support below.
  33.236 +
  33.237 +	  Power Management is most important for battery powered laptop
  33.238 +	  computers; if you have a laptop, check out the Linux Laptop home
  33.239 +	  page on the WWW at <http://www.linux-on-laptops.com/> and the
  33.240 +	  Battery Powered Linux mini-HOWTO, available from
  33.241 +	  <http://www.tldp.org/docs.html#howto>.
  33.242 +
  33.243 +	  Note that, even if you say N here, Linux on the x86 architecture
  33.244 +	  will issue the hlt instruction if nothing is to be done, thereby
  33.245 +	  sending the processor to sleep and saving power.
  33.246 +
  33.247 +config ACPI
  33.248 +	bool
  33.249 +	depends on !IA64_HP_SIM
  33.250 +	default y
  33.251 +
  33.252 +if !IA64_HP_SIM
  33.253  
  33.254  source "drivers/acpi/Kconfig"
  33.255  
  33.256 -if PM
  33.257 -
  33.258 -source "arch/ia64/kernel/cpufreq/Kconfig"
  33.259 -
  33.260  endif
  33.261  
  33.262  endmenu
  33.263 @@ -448,8 +438,15 @@ menu "Bus options (PCI, PCMCIA)"
  33.264  config PCI
  33.265  	bool "PCI support"
  33.266  	help
  33.267 -	  Real IA-64 machines all have PCI/PCI-X/PCI Express busses.  Say Y
  33.268 -	  here unless you are using a simulator without PCI support.
  33.269 +	  Find out whether you have a PCI motherboard. PCI is the name of a
  33.270 +	  bus system, i.e. the way the CPU talks to the other stuff inside
  33.271 +	  your box. Other bus systems are ISA, EISA, MicroChannel (MCA) or
  33.272 +	  VESA. If you have PCI, say Y, otherwise N.
  33.273 +
  33.274 +	  The PCI-HOWTO, available from
  33.275 +	  <http://www.tldp.org/docs.html#howto>, contains valuable
  33.276 +	  information about which PCI hardware does work under Linux and which
  33.277 +	  doesn't.
  33.278  
  33.279  config PCI_DOMAINS
  33.280  	bool
  33.281 @@ -465,8 +462,6 @@ endmenu
  33.282  
  33.283  endif
  33.284  
  33.285 -source "net/Kconfig"
  33.286 -
  33.287  source "drivers/Kconfig"
  33.288  
  33.289  source "fs/Kconfig"
  33.290 @@ -484,28 +479,10 @@ config GENERIC_IRQ_PROBE
  33.291  	bool
  33.292  	default y
  33.293  
  33.294 -config GENERIC_PENDING_IRQ
  33.295 -	bool
  33.296 -	depends on GENERIC_HARDIRQS && SMP
  33.297 -	default y
  33.298 -
  33.299  source "arch/ia64/hp/sim/Kconfig"
  33.300  
  33.301 -menu "Instrumentation Support"
  33.302 -        depends on EXPERIMENTAL
  33.303 -
  33.304  source "arch/ia64/oprofile/Kconfig"
  33.305  
  33.306 -config KPROBES
  33.307 -	bool "Kprobes (EXPERIMENTAL)"
  33.308 -	help
  33.309 -	  Kprobes allows you to trap at almost any kernel address and
  33.310 -	  execute a callback function.  register_kprobe() establishes
  33.311 -	  a probepoint and specifies the callback.  Kprobes is useful
  33.312 -	  for kernel debugging, non-intrusive instrumentation and testing.
  33.313 -	  If in doubt, say "N".
  33.314 -endmenu
  33.315 -
  33.316  source "arch/ia64/Kconfig.debug"
  33.317  
  33.318  source "security/Kconfig"
    34.1 --- a/linux-2.6-xen-sparse/arch/ia64/Makefile	Thu Feb 02 19:15:22 2006 +0100
    34.2 +++ b/linux-2.6-xen-sparse/arch/ia64/Makefile	Thu Feb 02 19:16:38 2006 +0000
    34.3 @@ -11,6 +11,9 @@
    34.4  NM := $(CROSS_COMPILE)nm -B
    34.5  READELF := $(CROSS_COMPILE)readelf
    34.6  
    34.7 +# following is temporary pending xen directory restructuring
    34.8 +NOSTDINC_FLAGS += -Iinclude/asm-xen
    34.9 +
   34.10  export AWK
   34.11  
   34.12  CHECKFLAGS	+= -m64 -D__ia64=1 -D__ia64__=1 -D_LP64 -D__LP64__
   34.13 @@ -88,7 +91,42 @@ unwcheck: vmlinux
   34.14  archclean:
   34.15  	$(Q)$(MAKE) $(clean)=$(boot)
   34.16  
   34.17 -CLEAN_FILES += vmlinux.gz bootloader
   34.18 +CLEAN_FILES += include/asm-ia64/.offsets.h.stamp vmlinux.gz bootloader
   34.19 +#CLEAN_FILES += include/asm-xen/xen-public include/asm-ia64/xen/asm-xsi-offsets.h
   34.20 +#CLEAN_FILES += include/asm-xen/linux-public include/asm-xen/asm-ia64/hypervisor.h
   34.21 +
   34.22 +MRPROPER_FILES += include/asm-ia64/offsets.h
   34.23 +
   34.24 +prepare: include/asm-ia64/offsets.h
   34.25 +
   34.26 +arch/ia64/kernel/asm-offsets.s: include/asm include/linux/version.h include/config/MARKER
   34.27 +
   34.28 +include/asm-ia64/offsets.h: arch/ia64/kernel/asm-offsets.s
   34.29 +	$(call filechk,gen-asm-offsets)
   34.30 +
   34.31 +arch/ia64/kernel/asm-offsets.s: include/asm-ia64/.offsets.h.stamp
   34.32 +
   34.33 +#XEN_PATH ?= $(srctree)/../xen-ia64-unstable.hg/
   34.34 +include/asm-ia64/.offsets.h.stamp:
   34.35 +	mkdir -p include/asm-ia64
   34.36 +	[ -s include/asm-ia64/offsets.h ] \
   34.37 +	 || echo "#define IA64_TASK_SIZE 0" > include/asm-ia64/offsets.h
   34.38 +	touch $@
   34.39 +	[ -e include/asm-xen/asm ] \
   34.40 +	 || ln -s asm-ia64 include/asm-xen/asm
   34.41 +#	[ -e include/asm-xen/xen-public ] \
   34.42 +#	 || ln -s $(XEN_PATH)/xen/include/public \
   34.43 +#		include/asm-xen/xen-public
   34.44 +#	[ -e include/asm-ia64/xen/asm-xsi-offsets.h ] \
   34.45 +#	 || ln -s $(XEN_PATH)/xen/include/asm-ia64/asm-xsi-offsets.h \
   34.46 +#		include/asm-ia64/xen/asm-xsi-offsets.h
   34.47 +#	[ -e include/asm-xen/linux-public ] \
   34.48 +#	 || ln -s $(XEN_PATH)/linux-2.6-xen-sparse/include/asm-xen/linux-public \
   34.49 +		include/asm-xen/linux-public
   34.50 +	[ -e include/asm-xen/asm-ia64/hypervisor.h ] \
   34.51 +	 || ln -s $(XEN_PATH)/linux-2.6-xen-sparse/include/asm-xen/asm-ia64/hypervisor.h \
   34.52 +		include/asm-xen/asm-ia64/hypervisor.h
   34.53 +
   34.54  
   34.55  boot:	lib/lib.a vmlinux
   34.56  	$(Q)$(MAKE) $(build)=$(boot) $@
    35.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/entry.S	Thu Feb 02 19:15:22 2006 +0100
    35.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/entry.S	Thu Feb 02 19:16:38 2006 +0000
    35.3 @@ -37,7 +37,7 @@
    35.4  #include <asm/cache.h>
    35.5  #include <asm/errno.h>
    35.6  #include <asm/kregs.h>
    35.7 -#include <asm/asm-offsets.h>
    35.8 +#include <asm/offsets.h>
    35.9  #include <asm/pgtable.h>
   35.10  #include <asm/percpu.h>
   35.11  #include <asm/processor.h>
   35.12 @@ -204,6 +204,9 @@ GLOBAL_ENTRY(__ia64_switch_to)
   35.13  (p6)	br.cond.dpnt .map
   35.14  	;;
   35.15  .done:
   35.16 +(p6)	ssm psr.ic			// if we had to map, reenable the psr.ic bit FIRST!!!
   35.17 +	;;
   35.18 +(p6)	srlz.d
   35.19  	ld8 sp=[r21]			// load kernel stack pointer of new task
   35.20  	mov IA64_KR(CURRENT)=in0	// update "current" application register
   35.21  	mov r8=r13			// return pointer to previously running task
   35.22 @@ -231,9 +234,6 @@ GLOBAL_ENTRY(__ia64_switch_to)
   35.23  	mov IA64_KR(CURRENT_STACK)=r26	// remember last page we mapped...
   35.24  	;;
   35.25  	itr.d dtr[r25]=r23		// wire in new mapping...
   35.26 -	ssm psr.ic			// reenable the psr.ic bit
   35.27 -	;;
   35.28 -	srlz.d
   35.29  	br.cond.sptk .done
   35.30  END(__ia64_switch_to)
   35.31  
   35.32 @@ -470,28 +470,17 @@ GLOBAL_ENTRY(load_switch_stack)
   35.33  	br.cond.sptk.many b7
   35.34  END(load_switch_stack)
   35.35  
   35.36 -GLOBAL_ENTRY(prefetch_stack)
   35.37 -	add r14 = -IA64_SWITCH_STACK_SIZE, sp
   35.38 -	add r15 = IA64_TASK_THREAD_KSP_OFFSET, in0
   35.39 -	;;
   35.40 -	ld8 r16 = [r15]				// load next's stack pointer
   35.41 -	lfetch.fault.excl [r14], 128
   35.42 -	;;
   35.43 -	lfetch.fault.excl [r14], 128
   35.44 -	lfetch.fault [r16], 128
   35.45 +GLOBAL_ENTRY(__ia64_syscall)
   35.46 +	.regstk 6,0,0,0
   35.47 +	mov r15=in5				// put syscall number in place
   35.48 +	break __BREAK_SYSCALL
   35.49 +	movl r2=errno
   35.50 +	cmp.eq p6,p7=-1,r10
   35.51  	;;
   35.52 -	lfetch.fault.excl [r14], 128
   35.53 -	lfetch.fault [r16], 128
   35.54 -	;;
   35.55 -	lfetch.fault.excl [r14], 128
   35.56 -	lfetch.fault [r16], 128
   35.57 -	;;
   35.58 -	lfetch.fault.excl [r14], 128
   35.59 -	lfetch.fault [r16], 128
   35.60 -	;;
   35.61 -	lfetch.fault [r16], 128
   35.62 +(p6)	st4 [r2]=r8
   35.63 +(p6)	mov r8=-1
   35.64  	br.ret.sptk.many rp
   35.65 -END(prefetch_stack)
   35.66 +END(__ia64_syscall)
   35.67  
   35.68  GLOBAL_ENTRY(execve)
   35.69  	mov r15=__NR_execve			// put syscall number in place
   35.70 @@ -651,7 +640,7 @@ END(ia64_ret_from_syscall)
   35.71   *	      r8-r11: restored (syscall return value(s))
   35.72   *		 r12: restored (user-level stack pointer)
   35.73   *		 r13: restored (user-level thread pointer)
   35.74 - *		 r14: set to __kernel_syscall_via_epc
   35.75 + *		 r14: cleared
   35.76   *		 r15: restored (syscall #)
   35.77   *	     r16-r17: cleared
   35.78   *		 r18: user-level b6
   35.79 @@ -672,7 +661,7 @@ END(ia64_ret_from_syscall)
   35.80   *		  pr: restored (user-level pr)
   35.81   *		  b0: restored (user-level rp)
   35.82   *	          b6: restored
   35.83 - *		  b7: set to __kernel_syscall_via_epc
   35.84 + *		  b7: cleared
   35.85   *	     ar.unat: restored (user-level ar.unat)
   35.86   *	      ar.pfs: restored (user-level ar.pfs)
   35.87   *	      ar.rsc: restored (user-level ar.rsc)
   35.88 @@ -718,79 +707,72 @@ GLOBAL_ENTRY(__ia64_leave_syscall)
   35.89  	;;
   35.90  (p6)	ld4 r31=[r18]				// load current_thread_info()->flags
   35.91  	ld8 r19=[r2],PT(B6)-PT(LOADRS)		// load ar.rsc value for "loadrs"
   35.92 -	nop.i 0
   35.93 +	mov b7=r0		// clear b7
   35.94  	;;
   35.95 -	mov r16=ar.bsp				// M2  get existing backing store pointer
   35.96 +	ld8 r23=[r3],PT(R11)-PT(AR_BSPSTORE)	// load ar.bspstore (may be garbage)
   35.97  	ld8 r18=[r2],PT(R9)-PT(B6)		// load b6
   35.98  (p6)	and r15=TIF_WORK_MASK,r31		// any work other than TIF_SYSCALL_TRACE?
   35.99  	;;
  35.100 -	ld8 r23=[r3],PT(R11)-PT(AR_BSPSTORE)	// load ar.bspstore (may be garbage)
  35.101 +	mov r16=ar.bsp				// M2  get existing backing store pointer
  35.102  (p6)	cmp4.ne.unc p6,p0=r15, r0		// any special work pending?
  35.103  (p6)	br.cond.spnt .work_pending_syscall
  35.104  	;;
  35.105  	// start restoring the state saved on the kernel stack (struct pt_regs):
  35.106  	ld8 r9=[r2],PT(CR_IPSR)-PT(R9)
  35.107  	ld8 r11=[r3],PT(CR_IIP)-PT(R11)
  35.108 -(pNonSys) break 0		//      bug check: we shouldn't be here if pNonSys is TRUE!
  35.109 +	mov f6=f0		// clear f6
  35.110  	;;
  35.111  	invala			// M0|1 invalidate ALAT
  35.112 -	rsm psr.i | psr.ic	// M2   turn off interrupts and interruption collection
  35.113 -	cmp.eq p9,p0=r0,r0	// A    set p9 to indicate that we should restore cr.ifs
  35.114 +	rsm psr.i | psr.ic	// M2 initiate turning off of interrupt and interruption collection
  35.115 +	mov f9=f0		// clear f9
  35.116  
  35.117 -	ld8 r29=[r2],16		// M0|1 load cr.ipsr
  35.118 -	ld8 r28=[r3],16		// M0|1 load cr.iip
  35.119 -	mov r22=r0		// A    clear r22
  35.120 +	ld8 r29=[r2],16		// load cr.ipsr
  35.121 +	ld8 r28=[r3],16			// load cr.iip
  35.122 +	mov f8=f0		// clear f8
  35.123  	;;
  35.124  	ld8 r30=[r2],16		// M0|1 load cr.ifs
  35.125  	ld8 r25=[r3],16		// M0|1 load ar.unat
  35.126 -(pUStk) add r14=IA64_TASK_THREAD_ON_USTACK_OFFSET,r13
  35.127 +	cmp.eq p9,p0=r0,r0	// set p9 to indicate that we should restore cr.ifs
  35.128  	;;
  35.129  	ld8 r26=[r2],PT(B0)-PT(AR_PFS)	// M0|1 load ar.pfs
  35.130 -(pKStk)	mov r22=psr			// M2   read PSR now that interrupts are disabled
  35.131 -	nop 0
  35.132 -	;;
  35.133 -	ld8 r21=[r2],PT(AR_RNAT)-PT(B0) // M0|1 load b0
  35.134 -	ld8 r27=[r3],PT(PR)-PT(AR_RSC)	// M0|1 load ar.rsc
  35.135 -	mov f6=f0			// F    clear f6
  35.136 -	;;
  35.137 -	ld8 r24=[r2],PT(AR_FPSR)-PT(AR_RNAT)	// M0|1 load ar.rnat (may be garbage)
  35.138 -	ld8 r31=[r3],PT(R1)-PT(PR)		// M0|1 load predicates
  35.139 -	mov f7=f0				// F    clear f7
  35.140 -	;;
  35.141 -	ld8 r20=[r2],PT(R12)-PT(AR_FPSR)	// M0|1 load ar.fpsr
  35.142 -	ld8.fill r1=[r3],16			// M0|1 load r1
  35.143 -(pUStk) mov r17=1				// A
  35.144 -	;;
  35.145 -(pUStk) st1 [r14]=r17				// M2|3
  35.146 -	ld8.fill r13=[r3],16			// M0|1
  35.147 -	mov f8=f0				// F    clear f8
  35.148 +(pKStk)	mov r22=psr		// M2 read PSR now that interrupts are disabled
  35.149 +	mov f10=f0		// clear f10
  35.150  	;;
  35.151 -	ld8.fill r12=[r2]			// M0|1 restore r12 (sp)
  35.152 -	ld8.fill r15=[r3]			// M0|1 restore r15
  35.153 -	mov b6=r18				// I0   restore b6
  35.154 -
  35.155 -	addl r17=THIS_CPU(ia64_phys_stacked_size_p8),r0 // A
  35.156 -	mov f9=f0					// F    clear f9
  35.157 -(pKStk) br.cond.dpnt.many skip_rbs_switch		// B
  35.158 -
  35.159 -	srlz.d				// M0   ensure interruption collection is off (for cover)
  35.160 -	shr.u r18=r19,16		// I0|1 get byte size of existing "dirty" partition
  35.161 -	cover				// B    add current frame into dirty partition & set cr.ifs
  35.162 +	ld8 r21=[r2],PT(AR_RNAT)-PT(B0) // load b0
  35.163 +	ld8 r27=[r3],PT(PR)-PT(AR_RSC)	// load ar.rsc
  35.164 +	mov f11=f0		// clear f11
  35.165  	;;
  35.166 -(pUStk) ld4 r17=[r17]			// M0|1 r17 = cpu_data->phys_stacked_size_p8
  35.167 -	mov r19=ar.bsp			// M2   get new backing store pointer
  35.168 -	mov f10=f0			// F    clear f10
  35.169 -
  35.170 -	nop.m 0
  35.171 -	movl r14=__kernel_syscall_via_epc // X
  35.172 +	ld8 r24=[r2],PT(AR_FPSR)-PT(AR_RNAT)	// load ar.rnat (may be garbage)
  35.173 +	ld8 r31=[r3],PT(R1)-PT(PR)		// load predicates
  35.174 +(pUStk) add r14=IA64_TASK_THREAD_ON_USTACK_OFFSET,r13
  35.175  	;;
  35.176 -	mov.m ar.csd=r0			// M2   clear ar.csd
  35.177 -	mov.m ar.ccv=r0			// M2   clear ar.ccv
  35.178 -	mov b7=r14			// I0   clear b7 (hint with __kernel_syscall_via_epc)
  35.179 +	ld8 r20=[r2],PT(R12)-PT(AR_FPSR)	// load ar.fpsr
  35.180 +	ld8.fill r1=[r3],16	// load r1
  35.181 +(pUStk) mov r17=1
  35.182 +	;;
  35.183 +	srlz.d			// M0  ensure interruption collection is off
  35.184 +	ld8.fill r13=[r3],16
  35.185 +	mov f7=f0		// clear f7
  35.186 +	;;
  35.187 +	ld8.fill r12=[r2]	// restore r12 (sp)
  35.188 +	mov.m ar.ssd=r0		// M2 clear ar.ssd
  35.189 +	mov r22=r0		// clear r22
  35.190  
  35.191 -	mov.m ar.ssd=r0			// M2   clear ar.ssd
  35.192 -	mov f11=f0			// F    clear f11
  35.193 -	br.cond.sptk.many rbs_switch	// B
  35.194 +	ld8.fill r15=[r3]	// restore r15
  35.195 +(pUStk) st1 [r14]=r17
  35.196 +	addl r3=THIS_CPU(ia64_phys_stacked_size_p8),r0
  35.197 +	;;
  35.198 +(pUStk)	ld4 r17=[r3]		// r17 = cpu_data->phys_stacked_size_p8
  35.199 +	mov.m ar.csd=r0		// M2 clear ar.csd
  35.200 +	mov b6=r18		// I0  restore b6
  35.201 +	;;
  35.202 +	mov r14=r0		// clear r14
  35.203 +	shr.u r18=r19,16	// I0|1 get byte size of existing "dirty" partition
  35.204 +(pKStk) br.cond.dpnt.many skip_rbs_switch
  35.205 +
  35.206 +	mov.m ar.ccv=r0		// clear ar.ccv
  35.207 +(pNonSys) br.cond.dpnt.many dont_preserve_current_frame
  35.208 +	br.cond.sptk.many rbs_switch
  35.209  END(__ia64_leave_syscall)
  35.210  
  35.211  #ifdef CONFIG_IA32_SUPPORT
  35.212 @@ -909,7 +891,7 @@ GLOBAL_ENTRY(__ia64_leave_kernel)
  35.213  	ldf.fill f7=[r2],PT(F11)-PT(F7)
  35.214  	ldf.fill f8=[r3],32
  35.215  	;;
  35.216 -	srlz.d	// ensure that inter. collection is off (VHPT is don't care, since text is pinned)
  35.217 +	srlz.i			// ensure interruption collection is off
  35.218  	mov ar.ccv=r15
  35.219  	;;
  35.220  	ldf.fill f11=[r2]
  35.221 @@ -969,10 +951,11 @@ GLOBAL_ENTRY(__ia64_leave_kernel)
  35.222  	 * NOTE: alloc, loadrs, and cover can't be predicated.
  35.223  	 */
  35.224  (pNonSys) br.cond.dpnt dont_preserve_current_frame
  35.225 +
  35.226 +rbs_switch:
  35.227  	cover				// add current frame into dirty partition and set cr.ifs
  35.228  	;;
  35.229  	mov r19=ar.bsp			// get new backing store pointer
  35.230 -rbs_switch:
  35.231  	sub r16=r16,r18			// krbs = old bsp - size of dirty partition
  35.232  	cmp.ne p9,p0=r0,r0		// clear p9 to skip restore of cr.ifs
  35.233  	;;
  35.234 @@ -1047,14 +1030,14 @@ rse_clear_invalid:
  35.235  	mov loc5=0
  35.236  	mov loc6=0
  35.237  	mov loc7=0
  35.238 -(pRecurse) br.call.dptk.few b0=rse_clear_invalid
  35.239 +(pRecurse) br.call.sptk.few b0=rse_clear_invalid
  35.240  	;;
  35.241  	mov loc8=0
  35.242  	mov loc9=0
  35.243  	cmp.ne pReturn,p0=r0,in1	// if recursion count != 0, we need to do a br.ret
  35.244  	mov loc10=0
  35.245  	mov loc11=0
  35.246 -(pReturn) br.ret.dptk.many b0
  35.247 +(pReturn) br.ret.sptk.many b0
  35.248  #endif /* !CONFIG_ITANIUM */
  35.249  #	undef pRecurse
  35.250  #	undef pReturn
  35.251 @@ -1278,7 +1261,7 @@ ENTRY(sys_rt_sigreturn)
  35.252   	stf.spill [r17]=f11
  35.253  	adds out0=16,sp				// out0 = &sigscratch
  35.254  	br.call.sptk.many rp=ia64_rt_sigreturn
  35.255 -.ret19:	.restore sp,0
  35.256 +.ret19:	.restore sp 0
  35.257  	adds sp=16,sp
  35.258  	;;
  35.259  	ld8 r9=[sp]				// load new ar.unat
  35.260 @@ -1600,11 +1583,11 @@ sys_call_table:
  35.261  	data8 sys_add_key
  35.262  	data8 sys_request_key
  35.263  	data8 sys_keyctl
  35.264 -	data8 sys_ioprio_set
  35.265 -	data8 sys_ioprio_get			// 1275
  35.266  	data8 sys_ni_syscall
  35.267 -	data8 sys_inotify_init
  35.268 -	data8 sys_inotify_add_watch
  35.269 -	data8 sys_inotify_rm_watch
  35.270 +	data8 sys_ni_syscall			// 1275
  35.271 +	data8 sys_ni_syscall
  35.272 +	data8 sys_ni_syscall
  35.273 +	data8 sys_ni_syscall
  35.274 +	data8 sys_ni_syscall
  35.275  
  35.276  	.org sys_call_table + 8*NR_syscalls	// guard against failures to increase NR_syscalls
    36.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/head.S	Thu Feb 02 19:15:22 2006 +0100
    36.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/head.S	Thu Feb 02 19:16:38 2006 +0000
    36.3 @@ -25,7 +25,7 @@
    36.4  #include <asm/fpu.h>
    36.5  #include <asm/kregs.h>
    36.6  #include <asm/mmu_context.h>
    36.7 -#include <asm/asm-offsets.h>
    36.8 +#include <asm/offsets.h>
    36.9  #include <asm/pal.h>
   36.10  #include <asm/pgtable.h>
   36.11  #include <asm/processor.h>
    37.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c	Thu Feb 02 19:15:22 2006 +0100
    37.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c	Thu Feb 02 19:16:38 2006 +0000
    37.3 @@ -20,7 +20,6 @@
    37.4   * 02/01/00 R.Seth	fixed get_cpuinfo for SMP
    37.5   * 01/07/99 S.Eranian	added the support for command line argument
    37.6   * 06/24/99 W.Drummond	added boot_cpu_data.
    37.7 - * 05/28/05 Z. Menyhart	Dynamic stride size for "flush_icache_range()"
    37.8   */
    37.9  #include <linux/config.h>
   37.10  #include <linux/module.h>
   37.11 @@ -41,8 +40,6 @@
   37.12  #include <linux/serial_core.h>
   37.13  #include <linux/efi.h>
   37.14  #include <linux/initrd.h>
   37.15 -#include <linux/platform.h>
   37.16 -#include <linux/pm.h>
   37.17  
   37.18  #include <asm/ia32.h>
   37.19  #include <asm/machvec.h>
   37.20 @@ -75,30 +72,8 @@ DEFINE_PER_CPU(unsigned long, ia64_phys_
   37.21  unsigned long ia64_cycles_per_usec;
   37.22  struct ia64_boot_param *ia64_boot_param;
   37.23  struct screen_info screen_info;
   37.24 -unsigned long vga_console_iobase;
   37.25 -unsigned long vga_console_membase;
   37.26 -
   37.27 -static struct resource data_resource = {
   37.28 -	.name	= "Kernel data",
   37.29 -	.flags	= IORESOURCE_BUSY | IORESOURCE_MEM
   37.30 -};
   37.31 -
   37.32 -static struct resource code_resource = {
   37.33 -	.name	= "Kernel code",
   37.34 -	.flags	= IORESOURCE_BUSY | IORESOURCE_MEM
   37.35 -};
   37.36 -extern void efi_initialize_iomem_resources(struct resource *,
   37.37 -		struct resource *);
   37.38 -extern char _text[], _end[], _etext[];
   37.39  
   37.40  unsigned long ia64_max_cacheline_size;
   37.41 -
   37.42 -int dma_get_cache_alignment(void)
   37.43 -{
   37.44 -        return ia64_max_cacheline_size;
   37.45 -}
   37.46 -EXPORT_SYMBOL(dma_get_cache_alignment);
   37.47 -
   37.48  unsigned long ia64_iobase;	/* virtual address for I/O accesses */
   37.49  EXPORT_SYMBOL(ia64_iobase);
   37.50  struct io_space io_space[MAX_IO_SPACES];
   37.51 @@ -106,13 +81,6 @@ EXPORT_SYMBOL(io_space);
   37.52  unsigned int num_io_spaces;
   37.53  
   37.54  /*
   37.55 - * "flush_icache_range()" needs to know what processor dependent stride size to use
   37.56 - * when it makes i-cache(s) coherent with d-caches.
   37.57 - */
   37.58 -#define	I_CACHE_STRIDE_SHIFT	5	/* Safest way to go: 32 bytes by 32 bytes */
   37.59 -unsigned long ia64_i_cache_stride_shift = ~0;
   37.60 -
   37.61 -/*
   37.62   * The merge_mask variable needs to be set to (max(iommu_page_size(iommu)) - 1).  This
   37.63   * mask specifies a mask of address bits that must be 0 in order for two buffers to be
   37.64   * mergeable by the I/O MMU (i.e., the end address of the first buffer and the start
   37.65 @@ -191,22 +159,6 @@ sort_regions (struct rsvd_region *rsvd_r
   37.66  	}
   37.67  }
   37.68  
   37.69 -/*
   37.70 - * Request address space for all standard resources
   37.71 - */
   37.72 -static int __init register_memory(void)
   37.73 -{
   37.74 -	code_resource.start = ia64_tpa(_text);
   37.75 -	code_resource.end   = ia64_tpa(_etext) - 1;
   37.76 -	data_resource.start = ia64_tpa(_etext);
   37.77 -	data_resource.end   = ia64_tpa(_end) - 1;
   37.78 -	efi_initialize_iomem_resources(&code_resource, &data_resource);
   37.79 -
   37.80 -	return 0;
   37.81 -}
   37.82 -
   37.83 -__initcall(register_memory);
   37.84 -
   37.85  /**
   37.86   * reserve_memory - setup reserved memory areas
   37.87   *
   37.88 @@ -247,9 +199,6 @@ reserve_memory (void)
   37.89  	}
   37.90  #endif
   37.91  
   37.92 -	efi_memmap_init(&rsvd_region[n].start, &rsvd_region[n].end);
   37.93 -	n++;
   37.94 -
   37.95  	/* end of memory marker */
   37.96  	rsvd_region[n].start = ~0UL;
   37.97  	rsvd_region[n].end   = ~0UL;
   37.98 @@ -283,31 +232,28 @@ find_initrd (void)
   37.99  static void __init
  37.100  io_port_init (void)
  37.101  {
  37.102 +	extern unsigned long ia64_iobase;
  37.103  	unsigned long phys_iobase;
  37.104  
  37.105  	/*
  37.106 -	 * Set `iobase' based on the EFI memory map or, failing that, the
  37.107 -	 * value firmware left in ar.k0.
  37.108 +	 *  Set `iobase' to the appropriate address in region 6 (uncached access range).
  37.109  	 *
  37.110 -	 * Note that in ia32 mode, IN/OUT instructions use ar.k0 to compute
  37.111 -	 * the port's virtual address, so ia32_load_state() loads it with a
  37.112 -	 * user virtual address.  But in ia64 mode, glibc uses the
  37.113 -	 * *physical* address in ar.k0 to mmap the appropriate area from
  37.114 -	 * /dev/mem, and the inX()/outX() interfaces use MMIO.  In both
  37.115 -	 * cases, user-mode can only use the legacy 0-64K I/O port space.
  37.116 -	 *
  37.117 -	 * ar.k0 is not involved in kernel I/O port accesses, which can use
  37.118 -	 * any of the I/O port spaces and are done via MMIO using the
  37.119 -	 * virtual mmio_base from the appropriate io_space[].
  37.120 +	 *  The EFI memory map is the "preferred" location to get the I/O port space base,
  37.121 +	 *  rather the relying on AR.KR0. This should become more clear in future SAL
  37.122 +	 *  specs. We'll fall back to getting it out of AR.KR0 if no appropriate entry is
  37.123 +	 *  found in the memory map.
  37.124  	 */
  37.125  	phys_iobase = efi_get_iobase();
  37.126 -	if (!phys_iobase) {
  37.127 +	if (phys_iobase)
  37.128 +		/* set AR.KR0 since this is all we use it for anyway */
  37.129 +		ia64_set_kr(IA64_KR_IO_BASE, phys_iobase);
  37.130 +	else {
  37.131  		phys_iobase = ia64_get_kr(IA64_KR_IO_BASE);
  37.132 -		printk(KERN_INFO "No I/O port range found in EFI memory map, "
  37.133 -			"falling back to AR.KR0 (0x%lx)\n", phys_iobase);
  37.134 +		printk(KERN_INFO "No I/O port range found in EFI memory map, falling back "
  37.135 +		       "to AR.KR0\n");
  37.136 +		printk(KERN_INFO "I/O port base = 0x%lx\n", phys_iobase);
  37.137  	}
  37.138  	ia64_iobase = (unsigned long) ioremap(phys_iobase, 0);
  37.139 -	ia64_set_kr(IA64_KR_IO_BASE, __pa(ia64_iobase));
  37.140  
  37.141  	/* setup legacy IO port space */
  37.142  	io_space[0].mmio_base = ia64_iobase;
  37.143 @@ -327,29 +273,26 @@ io_port_init (void)
  37.144  static inline int __init
  37.145  early_console_setup (char *cmdline)
  37.146  {
  37.147 -	int earlycons = 0;
  37.148 -
  37.149  #ifdef CONFIG_XEN
  37.150 -	if (!early_xen_console_setup(cmdline))
  37.151 -		earlycons++;
  37.152 +	if (!early_xen_console_setup(cmdline)) return 0;
  37.153  #endif
  37.154  #ifdef CONFIG_SERIAL_SGI_L1_CONSOLE
  37.155  	{
  37.156  		extern int sn_serial_console_early_setup(void);
  37.157  		if (!sn_serial_console_early_setup())
  37.158 -			earlycons++;
  37.159 +			return 0;
  37.160  	}
  37.161  #endif
  37.162  #ifdef CONFIG_EFI_PCDP
  37.163  	if (!efi_setup_pcdp_console(cmdline))
  37.164 -		earlycons++;
  37.165 +		return 0;
  37.166  #endif
  37.167  #ifdef CONFIG_SERIAL_8250_CONSOLE
  37.168  	if (!early_serial_console_init(cmdline))
  37.169 -		earlycons++;
  37.170 +		return 0;
  37.171  #endif
  37.172  
  37.173 -	return (earlycons) ? 0 : -1;
  37.174 +	return -1;
  37.175  }
  37.176  
  37.177  static inline void
  37.178 @@ -430,7 +373,7 @@ setup_arch (char **cmdline_p)
  37.179  	if (early_console_setup(*cmdline_p) == 0)
  37.180  		mark_bsp_online();
  37.181  
  37.182 -#ifdef CONFIG_ACPI
  37.183 +#ifdef CONFIG_ACPI_BOOT
  37.184  	/* Initialize the ACPI boot-time table parser */
  37.185  	acpi_table_init();
  37.186  # ifdef CONFIG_ACPI_NUMA
  37.187 @@ -465,9 +408,8 @@ setup_arch (char **cmdline_p)
  37.188  #endif
  37.189  
  37.190  	cpu_init();	/* initialize the bootstrap CPU */
  37.191 -	mmu_context_init();	/* initialize context_id bitmap */
  37.192  
  37.193 -#ifdef CONFIG_ACPI
  37.194 +#ifdef CONFIG_ACPI_BOOT
  37.195  	acpi_boot_init();
  37.196  #endif
  37.197  
  37.198 @@ -573,7 +515,7 @@ show_cpuinfo (struct seq_file *m, void *
  37.199  		   c->itc_freq / 1000000, c->itc_freq % 1000000,
  37.200  		   lpj*HZ/500000, (lpj*HZ/5000) % 100);
  37.201  #ifdef CONFIG_SMP
  37.202 -	seq_printf(m, "siblings   : %u\n", cpus_weight(cpu_core_map[cpunum]));
  37.203 +	seq_printf(m, "siblings   : %u\n", c->num_log);
  37.204  	if (c->threads_per_core > 1 || c->cores_per_socket > 1)
  37.205  		seq_printf(m,
  37.206  		   	   "physical id: %u\n"
  37.207 @@ -683,12 +625,6 @@ setup_per_cpu_areas (void)
  37.208  	/* start_kernel() requires this... */
  37.209  }
  37.210  
  37.211 -/*
  37.212 - * Calculate the max. cache line size.
  37.213 - *
  37.214 - * In addition, the minimum of the i-cache stride sizes is calculated for
  37.215 - * "flush_icache_range()".
  37.216 - */
  37.217  static void
  37.218  get_max_cacheline_size (void)
  37.219  {
  37.220 @@ -702,8 +638,6 @@ get_max_cacheline_size (void)
  37.221                  printk(KERN_ERR "%s: ia64_pal_cache_summary() failed (status=%ld)\n",
  37.222                         __FUNCTION__, status);
  37.223                  max = SMP_CACHE_BYTES;
  37.224 -		/* Safest setup for "flush_icache_range()" */
  37.225 -		ia64_i_cache_stride_shift = I_CACHE_STRIDE_SHIFT;
  37.226  		goto out;
  37.227          }
  37.228  
  37.229 @@ -712,31 +646,14 @@ get_max_cacheline_size (void)
  37.230  						    &cci);
  37.231  		if (status != 0) {
  37.232  			printk(KERN_ERR
  37.233 -			       "%s: ia64_pal_cache_config_info(l=%lu, 2) failed (status=%ld)\n",
  37.234 +			       "%s: ia64_pal_cache_config_info(l=%lu) failed (status=%ld)\n",
  37.235  			       __FUNCTION__, l, status);
  37.236  			max = SMP_CACHE_BYTES;
  37.237 -			/* The safest setup for "flush_icache_range()" */
  37.238 -			cci.pcci_stride = I_CACHE_STRIDE_SHIFT;
  37.239 -			cci.pcci_unified = 1;
  37.240  		}
  37.241  		line_size = 1 << cci.pcci_line_size;
  37.242  		if (line_size > max)
  37.243  			max = line_size;
  37.244 -		if (!cci.pcci_unified) {
  37.245 -			status = ia64_pal_cache_config_info(l,
  37.246 -						    /* cache_type (instruction)= */ 1,
  37.247 -						    &cci);
  37.248 -			if (status != 0) {
  37.249 -				printk(KERN_ERR
  37.250 -				"%s: ia64_pal_cache_config_info(l=%lu, 1) failed (status=%ld)\n",
  37.251 -					__FUNCTION__, l, status);
  37.252 -				/* The safest setup for "flush_icache_range()" */
  37.253 -				cci.pcci_stride = I_CACHE_STRIDE_SHIFT;
  37.254 -			}
  37.255 -		}
  37.256 -		if (cci.pcci_stride < ia64_i_cache_stride_shift)
  37.257 -			ia64_i_cache_stride_shift = cci.pcci_stride;
  37.258 -	}
  37.259 +        }
  37.260    out:
  37.261  	if (max > ia64_max_cacheline_size)
  37.262  		ia64_max_cacheline_size = max;
  37.263 @@ -865,7 +782,6 @@ cpu_init (void)
  37.264  	/* size of physical stacked register partition plus 8 bytes: */
  37.265  	__get_cpu_var(ia64_phys_stacked_size_p8) = num_phys_stacked*8 + 8;
  37.266  	platform_cpu_init();
  37.267 -	pm_idle = default_idle;
  37.268  }
  37.269  
  37.270  void
    38.1 --- a/linux-2.6-xen-sparse/arch/ia64/xen-mkbuildtree-pre	Thu Feb 02 19:15:22 2006 +0100
    38.2 +++ b/linux-2.6-xen-sparse/arch/ia64/xen-mkbuildtree-pre	Thu Feb 02 19:16:38 2006 +0000
    38.3 @@ -13,10 +13,10 @@ then
    38.4  	mv net net.xen-x86
    38.5  	mv kernel kernel.xen-x86
    38.6  	mv drivers/acpi/tables.c drivers/acpi/tables.c.xen-x86
    38.7 -#	mv arch/xen/kernel drivers/xen/core
    38.8 -#	mv arch/xen arch/xen.xen-x86
    38.9 -#	mkdir arch/xen
   38.10 -#	mv arch/xen.xen-x86/configs arch/xen
   38.11 +	mv arch/xen/kernel drivers/xen/core
   38.12 +	mv arch/xen arch/xen.xen-x86
   38.13 +	mkdir arch/xen
   38.14 +	mv arch/xen.xen-x86/configs arch/xen
   38.15  #	mv include/asm-generic include/asm-generic.xen-x86
   38.16  	mv include/linux include/linux.xen-x86
   38.17  	mkdir include/linux
    39.1 --- a/linux-2.6-xen-sparse/arch/ia64/xen/drivers/evtchn_ia64.c	Thu Feb 02 19:15:22 2006 +0100
    39.2 +++ b/linux-2.6-xen-sparse/arch/ia64/xen/drivers/evtchn_ia64.c	Thu Feb 02 19:16:38 2006 +0000
    39.3 @@ -4,7 +4,7 @@
    39.4  #include <linux/config.h>
    39.5  #include <linux/kernel.h>
    39.6  #include <asm/hw_irq.h>
    39.7 -#include <xen/evtchn.h>
    39.8 +#include <asm-xen/evtchn.h>
    39.9  
   39.10  #define MAX_EVTCHN 1024
   39.11  
    40.1 --- a/linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S	Thu Feb 02 19:15:22 2006 +0100
    40.2 +++ b/linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S	Thu Feb 02 19:16:38 2006 +0000
    40.3 @@ -14,7 +14,7 @@
    40.4  #include <asm/cache.h>
    40.5  #include <asm/errno.h>
    40.6  #include <asm/kregs.h>
    40.7 -#include <asm/asm-offsets.h>
    40.8 +#include <asm/offsets.h>
    40.9  #include <asm/pgtable.h>
   40.10  #include <asm/percpu.h>
   40.11  #include <asm/processor.h>
    41.1 --- a/linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S	Thu Feb 02 19:15:22 2006 +0100
    41.2 +++ b/linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S	Thu Feb 02 19:16:38 2006 +0000
    41.3 @@ -35,7 +35,7 @@
    41.4  #include <asm/break.h>
    41.5  #include <asm/ia32.h>
    41.6  #include <asm/kregs.h>
    41.7 -#include <asm/asm-offsets.h>
    41.8 +#include <asm/offsets.h>
    41.9  #include <asm/pgtable.h>
   41.10  #include <asm/processor.h>
   41.11  #include <asm/ptrace.h>
    42.1 --- a/linux-2.6-xen-sparse/arch/x86_64/Kconfig	Thu Feb 02 19:15:22 2006 +0100
    42.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/Kconfig	Thu Feb 02 19:16:38 2006 +0000
    42.3 @@ -69,12 +69,34 @@ config ARCH_MAY_HAVE_PC_FDC
    42.4  	bool
    42.5  	default y
    42.6  
    42.7 +config DMI
    42.8 +	bool
    42.9 +	default y
   42.10 +
   42.11  source "init/Kconfig"
   42.12  
   42.13  
   42.14  menu "Processor type and features"
   42.15  
   42.16  choice
   42.17 +	prompt "Subarchitecture Type"
   42.18 +	default X86_PC
   42.19 +
   42.20 +config X86_PC
   42.21 +	bool "PC-compatible"
   42.22 +	help
   42.23 +	  Choose this option if your computer is a standard PC or compatible.
   42.24 +
   42.25 +config X86_VSMP
   42.26 +	bool "Support for ScaleMP vSMP"
   42.27 +	 help
   42.28 +	  Support for ScaleMP vSMP systems.  Say 'Y' here if this kernel is
   42.29 +	  supposed to run on these EM64T-based machines.  Only choose this option
   42.30 +	  if you have one of these machines.
   42.31 +
   42.32 +endchoice
   42.33 +
   42.34 +choice
   42.35  	prompt "Processor family"
   42.36  	default MK8
   42.37  
   42.38 @@ -100,7 +122,6 @@ endchoice
   42.39  config X86_64_XEN
   42.40  	bool "Enable Xen compatible kernel"
   42.41  	select SWIOTLB if XEN_PHYSDEV_ACCESS
   42.42 -	select DUMMY_IOMMU if XEN_PHYSDEV_ACCESS
   42.43  	help
   42.44  	  This option will compile a kernel compatible with Xen hypervisor
   42.45  
   42.46 @@ -299,7 +320,11 @@ config ARCH_DISCONTIGMEM_DEFAULT
   42.47  
   42.48  config ARCH_SPARSEMEM_ENABLE
   42.49  	def_bool y
   42.50 -	depends on NUMA
   42.51 +	depends on (NUMA || EXPERIMENTAL)
   42.52 +
   42.53 +config ARCH_MEMORY_PROBE
   42.54 +	def_bool y
   42.55 +	depends on MEMORY_HOTPLUG
   42.56  
   42.57  config ARCH_FLATMEM_ENABLE
   42.58  	def_bool y
   42.59 @@ -309,6 +334,7 @@ source "mm/Kconfig"
   42.60  
   42.61  config HAVE_ARCH_EARLY_PFN_TO_NID
   42.62  	def_bool y
   42.63 +	depends on NUMA
   42.64  
   42.65  config NR_CPUS
   42.66  	int "Maximum number of CPUs (2-256)"
   42.67 @@ -346,7 +372,7 @@ config HPET_TIMER
   42.68  	  <http://www.intel.com/hardwaredesign/hpetspec.htm>.
   42.69  
   42.70  config X86_PM_TIMER
   42.71 -	bool "PM timer"
   42.72 +	bool "PM timer" if EMBEDDED
   42.73  	depends on ACPI && !X86_64_XEN
   42.74  	default y
   42.75  	help
   42.76 @@ -365,32 +391,24 @@ config HPET_EMULATE_RTC
   42.77  	depends on HPET_TIMER && RTC=y
   42.78  
   42.79  config GART_IOMMU
   42.80 -	bool "IOMMU support"
   42.81 +	bool "K8 GART IOMMU support"
   42.82  	default y
   42.83 +	select SWIOTLB
   42.84  	depends on PCI && !X86_64_XEN
   42.85  	help
   42.86  	  Support the IOMMU. Needed to run systems with more than 3GB of memory
   42.87  	  properly with 32-bit PCI devices that do not support DAC (Double Address
   42.88  	  Cycle). The IOMMU can be turned off at runtime with the iommu=off parameter.
   42.89  	  Normally the kernel will take the right choice by itself.
   42.90 -	  This option includes a driver for the AMD Opteron/Athlon64 IOMMU
   42.91 -	  and a software emulation used on some other systems.
   42.92 +	  This option includes a driver for the AMD Opteron/Athlon64 northbridge IOMMU
   42.93 +	  and a software emulation used on other systems.
   42.94  	  If unsure, say Y.
   42.95  
   42.96  # need this always enabled with GART_IOMMU for the VIA workaround
   42.97  config SWIOTLB
   42.98 -       bool
   42.99 -       depends on GART_IOMMU
  42.100 -       default y
  42.101 -
  42.102 -config DUMMY_IOMMU
  42.103  	bool
  42.104 -	depends on !GART_IOMMU && !SWIOTLB
  42.105  	default y
  42.106 -	help
  42.107 -	  Don't use IOMMU code. This will cause problems when you have more than 4GB
  42.108 -	  of memory and any 32-bit devices. Don't turn on unless you know what you
  42.109 -	  are doing.
  42.110 +	depends on GART_IOMMU
  42.111  
  42.112  config X86_MCE
  42.113  	bool "Machine check support" if EMBEDDED
  42.114 @@ -418,17 +436,6 @@ config X86_MCE_AMD
  42.115  	   Additional support for AMD specific MCE features such as
  42.116  	   the DRAM Error Threshold.
  42.117  
  42.118 -config PHYSICAL_START
  42.119 -	hex "Physical address where the kernel is loaded" if EMBEDDED
  42.120 -	default "0x100000"
  42.121 -	help
  42.122 -	  This gives the physical address where the kernel is loaded.
  42.123 -	  Primarily used in the case of kexec on panic where the
  42.124 -	  fail safe kernel needs to run at a different address than
  42.125 -	  the panic-ed kernel.
  42.126 -
  42.127 -	  Don't change this unless you know what you are doing.
  42.128 -
  42.129  config KEXEC
  42.130  	bool "kexec system call (EXPERIMENTAL)"
  42.131  	depends on EXPERIMENTAL && !X86_64_XEN
  42.132 @@ -446,6 +453,31 @@ config KEXEC
  42.133  	  support.  As of this writing the exact hardware interface is
  42.134  	  strongly in flux, so no good recommendation can be made.
  42.135  
  42.136 +config CRASH_DUMP
  42.137 +	bool "kernel crash dumps (EXPERIMENTAL)"
  42.138 +	depends on EXPERIMENTAL
  42.139 +	help
  42.140 +		Generate crash dump after being started by kexec.
  42.141 +
  42.142 +config PHYSICAL_START
  42.143 +	hex "Physical address where the kernel is loaded" if (EMBEDDED || CRASH_DUMP)
  42.144 +	default "0x1000000" if CRASH_DUMP
  42.145 +	default "0x100000"
  42.146 +	help
  42.147 +	  This gives the physical address where the kernel is loaded. Normally
  42.148 +	  for regular kernels this value is 0x100000 (1MB). But in the case
  42.149 +	  of kexec on panic the fail safe kernel needs to run at a different
  42.150 +	  address than the panic-ed kernel. This option is used to set the load
  42.151 +	  address for kernels used to capture crash dump on being kexec'ed
  42.152 +	  after panic. The default value for crash dump kernels is
  42.153 +	  0x1000000 (16MB). This can also be set based on the "X" value as
  42.154 +	  specified in the "crashkernel=YM@XM" command line boot parameter
  42.155 +	  passed to the panic-ed kernel. Typically this parameter is set as
  42.156 +	  crashkernel=64M@16M. Please take a look at
  42.157 +	  Documentation/kdump/kdump.txt for more details about crash dumps.
  42.158 +
  42.159 +	  Don't change this unless you know what you are doing.
  42.160 +
  42.161  config SECCOMP
  42.162  	bool "Enable seccomp to safely compute untrusted bytecode"
  42.163  	depends on PROC_FS
  42.164 @@ -568,11 +600,6 @@ config SYSVIPC_COMPAT
  42.165  	depends on COMPAT && SYSVIPC
  42.166  	default y
  42.167  
  42.168 -config UID16
  42.169 -	bool
  42.170 -	depends on IA32_EMULATION
  42.171 -	default y
  42.172 -
  42.173  endmenu
  42.174  
  42.175  source "net/Kconfig"
    43.1 --- a/linux-2.6-xen-sparse/arch/x86_64/Makefile	Thu Feb 02 19:15:22 2006 +0100
    43.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/Makefile	Thu Feb 02 19:16:38 2006 +0000
    43.3 @@ -31,6 +31,7 @@ cflags-$(CONFIG_MK8) += $(call cc-option
    43.4  cflags-$(CONFIG_MPSC) += $(call cc-option,-march=nocona)
    43.5  CFLAGS += $(cflags-y)
    43.6  
    43.7 +CFLAGS += -m64
    43.8  CFLAGS += -mno-red-zone
    43.9  CFLAGS += -mcmodel=kernel
   43.10  CFLAGS += -pipe
   43.11 @@ -38,8 +39,10 @@ CFLAGS += -pipe
   43.12  # actually it makes the kernel smaller too.
   43.13  CFLAGS += -fno-reorder-blocks	
   43.14  CFLAGS += -Wno-sign-compare
   43.15 +ifneq ($(CONFIG_UNWIND_INFO),y)
   43.16 +CFLAGS += -fno-asynchronous-unwind-tables
   43.17 +endif
   43.18  ifneq ($(CONFIG_DEBUG_INFO),y)
   43.19 -CFLAGS += -fno-asynchronous-unwind-tables
   43.20  # -fweb shrinks the kernel a bit, but the difference is very small
   43.21  # it also messes up debugging, so don't use it for now.
   43.22  #CFLAGS += $(call cc-option,-fweb)
   43.23 @@ -50,6 +53,8 @@ CFLAGS += $(call cc-option,-funit-at-a-t
   43.24  # prevent gcc from generating any FP code by mistake
   43.25  CFLAGS += $(call cc-option,-mno-sse -mno-mmx -mno-sse2 -mno-3dnow,)
   43.26  
   43.27 +AFLAGS += -m64
   43.28 +
   43.29  head-y := arch/x86_64/kernel/head.o arch/x86_64/kernel/head64.o arch/x86_64/kernel/init_task.o
   43.30  
   43.31  libs-y 					+= arch/x86_64/lib/
   43.32 @@ -95,8 +100,11 @@ bzlilo: vmlinux
   43.33  bzdisk: vmlinux
   43.34  	$(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) zdisk
   43.35  
   43.36 -install fdimage fdimage144 fdimage288: vmlinux
   43.37 +fdimage fdimage144 fdimage288: vmlinux
   43.38  	$(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) $@
   43.39 +
   43.40 +install:
   43.41 +	$(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) $@ 
   43.42  endif
   43.43  
   43.44  archclean:
    44.1 --- a/linux-2.6-xen-sparse/arch/x86_64/ia32/Makefile	Thu Feb 02 19:15:22 2006 +0100
    44.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/ia32/Makefile	Thu Feb 02 19:16:38 2006 +0000
    44.3 @@ -2,9 +2,9 @@
    44.4  # Makefile for the ia32 kernel emulation subsystem.
    44.5  #
    44.6  
    44.7 -obj-$(CONFIG_IA32_EMULATION) := ia32entry.o sys_ia32.o ia32_ioctl.o \
    44.8 -	ia32_signal.o tls32.o \
    44.9 -	ia32_binfmt.o fpu32.o ptrace32.o syscall32.o syscall32_syscall.o
   44.10 +obj-$(CONFIG_IA32_EMULATION) := ia32entry.o sys_ia32.o ia32_signal.o tls32.o \
   44.11 +	ia32_binfmt.o fpu32.o ptrace32.o syscall32.o syscall32_syscall.o \
   44.12 +	mmap32.o
   44.13  
   44.14  sysv-$(CONFIG_SYSVIPC) := ipc32.o
   44.15  obj-$(CONFIG_IA32_EMULATION) += $(sysv-y)
   44.16 @@ -30,7 +30,6 @@ quiet_cmd_syscall = SYSCALL $@
   44.17  
   44.18  AFLAGS_vsyscall-sysenter.o = -m32 -Iarch/i386/kernel
   44.19  AFLAGS_vsyscall-syscall.o = -m32 -Iarch/i386/kernel
   44.20 -CFLAGS_ia32_ioctl.o += -Ifs/
   44.21  
   44.22  ifdef CONFIG_XEN
   44.23  AFLAGS_vsyscall-int80.o = -m32 -Iarch/i386/kernel
    45.1 --- a/linux-2.6-xen-sparse/arch/x86_64/ia32/ia32entry-xen.S	Thu Feb 02 19:15:22 2006 +0100
    45.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/ia32/ia32entry-xen.S	Thu Feb 02 19:16:38 2006 +0000
    45.3 @@ -52,6 +52,18 @@
    45.4  #define __sti		sti	
    45.5  #endif			
    45.6  
    45.7 +	.macro CFI_STARTPROC32 simple
    45.8 +	CFI_STARTPROC	\simple
    45.9 +	CFI_UNDEFINED	r8
   45.10 +	CFI_UNDEFINED	r9
   45.11 +	CFI_UNDEFINED	r10
   45.12 +	CFI_UNDEFINED	r11
   45.13 +	CFI_UNDEFINED	r12
   45.14 +	CFI_UNDEFINED	r13
   45.15 +	CFI_UNDEFINED	r14
   45.16 +	CFI_UNDEFINED	r15
   45.17 +	.endm
   45.18 +
   45.19  /*
   45.20   * 32bit SYSENTER instruction entry.
   45.21   *
   45.22 @@ -72,7 +84,7 @@
   45.23   * with the int 0x80 path.
   45.24   */ 	
   45.25  ENTRY(ia32_sysenter_target)
   45.26 -	CFI_STARTPROC	simple
   45.27 +	CFI_STARTPROC32	simple
   45.28  	CFI_DEF_CFA	rsp,0
   45.29  	CFI_REGISTER	rsp,rbp
   45.30  	__swapgs 
   45.31 @@ -110,6 +122,7 @@ 1:	movl	(%rbp),%r9d
   45.32   	.quad 1b,ia32_badarg
   45.33   	.previous	
   45.34  	GET_THREAD_INFO(%r10)
   45.35 +	orl    $TS_COMPAT,threadinfo_status(%r10)
   45.36  	testl  $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%r10)
   45.37  	CFI_REMEMBER_STATE
   45.38  	jnz  sysenter_tracesys
   45.39 @@ -124,6 +137,7 @@ sysenter_do_call:
   45.40  	__cli
   45.41  	testl	$_TIF_ALLWORK_MASK,threadinfo_flags(%r10)
   45.42  	jnz	int_ret_from_sys_call
   45.43 +	andl    $~TS_COMPAT,threadinfo_status(%r10)
   45.44  	/* clear IF, that popfq doesn't enable interrupts early */
   45.45  	andl  $~0x200,EFLAGS-R11(%rsp) 
   45.46  	RESTORE_ARGS 1,24,1,1,1,1
   45.47 @@ -181,7 +195,7 @@ 1:	movl	(%rbp),%r9d
   45.48   * with the int 0x80 path.	
   45.49   */ 	
   45.50  ENTRY(ia32_cstar_target)
   45.51 -	CFI_STARTPROC	simple
   45.52 +	CFI_STARTPROC32	simple
   45.53  	CFI_DEF_CFA	rsp,0
   45.54  	CFI_REGISTER	rip,rcx
   45.55  	/*CFI_REGISTER	rflags,r11*/
   45.56 @@ -212,6 +226,7 @@ 1:	movl	(%r8),%r9d
   45.57  	.quad 1b,ia32_badarg
   45.58  	.previous	
   45.59  	GET_THREAD_INFO(%r10)
   45.60 +	orl   $TS_COMPAT,threadinfo_status(%r10)
   45.61  	testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%r10)
   45.62  	CFI_REMEMBER_STATE
   45.63  	jnz   cstar_tracesys
   45.64 @@ -226,6 +241,7 @@ cstar_do_call:
   45.65  	__cli
   45.66  	testl $_TIF_ALLWORK_MASK,threadinfo_flags(%r10)
   45.67  	jnz  int_ret_from_sys_call
   45.68 +	andl $~TS_COMPAT,threadinfo_status(%r10)
   45.69  	RESTORE_ARGS 1,-ARG_SKIP,1,1,1
   45.70  	movl RIP-ARGOFFSET(%rsp),%ecx
   45.71  	CFI_REGISTER rip,rcx
   45.72 @@ -303,6 +319,7 @@ ENTRY(ia32_syscall)
   45.73  	   this could be a problem. */
   45.74  	SAVE_ARGS 0,0,1
   45.75  	GET_THREAD_INFO(%r10)
   45.76 +	orl   $TS_COMPAT,threadinfo_status(%r10)
   45.77  	testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%r10)
   45.78  	jnz ia32_tracesys
   45.79  ia32_do_syscall:	
   45.80 @@ -345,7 +362,7 @@ quiet_ni_syscall:
   45.81  	jmp  ia32_ptregs_common	
   45.82  	.endm
   45.83  
   45.84 -	CFI_STARTPROC
   45.85 +	CFI_STARTPROC32
   45.86  
   45.87  	PTREGSCALL stub32_rt_sigreturn, sys32_rt_sigreturn, %rdi
   45.88  	PTREGSCALL stub32_sigreturn, sys32_sigreturn, %rdi
   45.89 @@ -360,15 +377,26 @@ quiet_ni_syscall:
   45.90  
   45.91  ENTRY(ia32_ptregs_common)
   45.92  	popq %r11
   45.93 -	CFI_ADJUST_CFA_OFFSET -8
   45.94 -	CFI_REGISTER rip, r11
   45.95 +	CFI_ENDPROC
   45.96 +	CFI_STARTPROC32	simple
   45.97 +	CFI_DEF_CFA	rsp,SS+8-ARGOFFSET
   45.98 +	CFI_REL_OFFSET	rax,RAX-ARGOFFSET
   45.99 +	CFI_REL_OFFSET	rcx,RCX-ARGOFFSET
  45.100 +	CFI_REL_OFFSET	rdx,RDX-ARGOFFSET
  45.101 +	CFI_REL_OFFSET	rsi,RSI-ARGOFFSET
  45.102 +	CFI_REL_OFFSET	rdi,RDI-ARGOFFSET
  45.103 +	CFI_REL_OFFSET	rip,RIP-ARGOFFSET
  45.104 +/*	CFI_REL_OFFSET	cs,CS-ARGOFFSET*/
  45.105 +/*	CFI_REL_OFFSET	rflags,EFLAGS-ARGOFFSET*/
  45.106 +	CFI_REL_OFFSET	rsp,RSP-ARGOFFSET
  45.107 +/*	CFI_REL_OFFSET	ss,SS-ARGOFFSET*/
  45.108  	SAVE_REST
  45.109  	call *%rax
  45.110  	RESTORE_REST
  45.111  	jmp  ia32_sysret	/* misbalances the return cache */
  45.112  	CFI_ENDPROC
  45.113  
  45.114 -	.data
  45.115 +	.section .rodata,"a"
  45.116  	.align 8
  45.117  	.globl ia32_sys_call_table
  45.118  ia32_sys_call_table:
  45.119 @@ -635,7 +663,7 @@ ia32_sys_call_table:
  45.120  	.quad sys_epoll_wait
  45.121  	.quad sys_remap_file_pages
  45.122  	.quad sys_set_tid_address
  45.123 -	.quad sys32_timer_create
  45.124 +	.quad compat_sys_timer_create
  45.125  	.quad compat_sys_timer_settime	/* 260 */
  45.126  	.quad compat_sys_timer_gettime
  45.127  	.quad sys_timer_getoverrun
  45.128 @@ -670,6 +698,20 @@ ia32_sys_call_table:
  45.129  	.quad sys_inotify_init
  45.130  	.quad sys_inotify_add_watch
  45.131  	.quad sys_inotify_rm_watch
  45.132 +	.quad sys_migrate_pages
  45.133 +	.quad compat_sys_openat		/* 295 */
  45.134 +	.quad sys_mkdirat
  45.135 +	.quad sys_mknodat
  45.136 +	.quad sys_fchownat
  45.137 +	.quad sys_futimesat
  45.138 +	.quad compat_sys_newfstatat	/* 300 */
  45.139 +	.quad sys_unlinkat
  45.140 +	.quad sys_renameat
  45.141 +	.quad sys_linkat
  45.142 +	.quad sys_symlinkat
  45.143 +	.quad sys_readlinkat		/* 305 */
  45.144 +	.quad sys_fchmodat
  45.145 +	.quad sys_faccessat
  45.146  ia32_syscall_end:		
  45.147  	.rept IA32_NR_syscalls-(ia32_syscall_end-ia32_sys_call_table)/8
  45.148  		.quad ni_syscall
    46.1 --- a/linux-2.6-xen-sparse/arch/x86_64/ia32/vsyscall-int80.S	Thu Feb 02 19:15:22 2006 +0100
    46.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/ia32/vsyscall-int80.S	Thu Feb 02 19:16:38 2006 +0000
    46.3 @@ -9,6 +9,7 @@
    46.4  #include <asm/ia32_unistd.h>
    46.5  #include <asm/asm-offsets.h>
    46.6  
    46.7 +	.code32
    46.8  	.text
    46.9  	.section .text.vsyscall,"ax"
   46.10  	.globl __kernel_vsyscall
    47.1 --- a/linux-2.6-xen-sparse/arch/x86_64/ia32/vsyscall-sigreturn.S	Thu Feb 02 19:15:22 2006 +0100
    47.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/ia32/vsyscall-sigreturn.S	Thu Feb 02 19:16:38 2006 +0000
    47.3 @@ -7,6 +7,7 @@
    47.4   * by doing ".balign 32" must match in both versions of the page.
    47.5   */
    47.6  
    47.7 +	.code32
    47.8  	.section .text.sigreturn,"ax"
    47.9  	.balign 32
   47.10  	.globl __kernel_sigreturn
    48.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/Makefile	Thu Feb 02 19:15:22 2006 +0100
    48.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/Makefile	Thu Feb 02 19:16:38 2006 +0000
    48.3 @@ -7,7 +7,8 @@ EXTRA_AFLAGS	:= -traditional
    48.4  obj-y	:= process.o signal.o entry.o traps.o irq.o \
    48.5  		ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_x86_64.o \
    48.6  		x8664_ksyms.o i387.o syscall.o vsyscall.o \
    48.7 -		setup64.o bootflag.o e820.o reboot.o quirks.o i8237.o
    48.8 +		setup64.o bootflag.o e820.o reboot.o quirks.o i8237.o \
    48.9 +		dmi_scan.o pci-dma.o pci-nommu.o
   48.10  
   48.11  obj-$(CONFIG_X86_MCE)         += mce.o
   48.12  obj-$(CONFIG_X86_MCE_INTEL)	+= mce_intel.o
   48.13 @@ -23,15 +24,17 @@ obj-$(CONFIG_X86_XEN_GENAPIC)	+= genapic
   48.14  obj-$(CONFIG_X86_IO_APIC)	+= io_apic.o mpparse.o \
   48.15  		genapic.o genapic_cluster.o genapic_flat.o
   48.16  obj-$(CONFIG_KEXEC)		+= machine_kexec.o relocate_kernel.o crash.o
   48.17 +obj-$(CONFIG_CRASH_DUMP)	+= crash_dump.o
   48.18  obj-$(CONFIG_SOFTWARE_SUSPEND)	+= suspend.o
   48.19  obj-$(CONFIG_ACPI_SLEEP)	+= suspend.o
   48.20  obj-$(CONFIG_SOFTWARE_SUSPEND)	+= suspend_asm.o
   48.21  obj-$(CONFIG_CPU_FREQ)		+= cpufreq/
   48.22  obj-$(CONFIG_EARLY_PRINTK)	+= early_printk.o
   48.23  obj-$(CONFIG_GART_IOMMU)	+= pci-gart.o aperture.o
   48.24 -obj-$(CONFIG_DUMMY_IOMMU)	+= pci-nommu.o pci-dma.o
   48.25 +obj-$(CONFIG_SWIOTLB)		+= pci-swiotlb.o
   48.26  obj-$(CONFIG_KPROBES)		+= kprobes.o
   48.27  obj-$(CONFIG_X86_PM_TIMER)	+= pmtimer.o
   48.28 +obj-$(CONFIG_X86_VSMP)		+= vsmp.o
   48.29  
   48.30  obj-$(CONFIG_MODULES)		+= module.o
   48.31  
   48.32 @@ -48,6 +51,7 @@ intel_cacheinfo-y		+= ../../i386/kernel/
   48.33  quirks-y			+= ../../i386/kernel/quirks.o
   48.34  i8237-y				+= ../../i386/kernel/i8237.o
   48.35  msr-$(subst m,y,$(CONFIG_X86_MSR))  += ../../i386/kernel/msr.o
   48.36 +dmi_scan-y			+= ../../i386/kernel/dmi_scan.o
   48.37  
   48.38  ifdef CONFIG_XEN
   48.39  time-y				+= ../../i386/kernel/time-xen.o
   48.40 @@ -55,7 +59,7 @@ pci-dma-y			+= ../../i386/kernel/pci-dma
   48.41  microcode-$(subst m,y,$(CONFIG_MICROCODE))  := ../../i386/kernel/microcode-xen.o
   48.42  quirks-y			:= ../../i386/kernel/quirks-xen.o
   48.43  
   48.44 -n-obj-xen := i8259.o reboot.o i8237.o smpboot.o trampoline.o
   48.45 +n-obj-xen := i8259.o reboot.o i8237.o smpboot.o trampoline.o pci-swiotlb.o
   48.46  
   48.47  include $(srctree)/scripts/Makefile.xen
   48.48  
    49.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/apic-xen.c	Thu Feb 02 19:15:22 2006 +0100
    49.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/apic-xen.c	Thu Feb 02 19:16:38 2006 +0000
    49.3 @@ -25,6 +25,7 @@
    49.4  #include <linux/mc146818rtc.h>
    49.5  #include <linux/kernel_stat.h>
    49.6  #include <linux/sysdev.h>
    49.7 +#include <linux/module.h>
    49.8  
    49.9  #include <asm/atomic.h>
   49.10  #include <asm/smp.h>
   49.11 @@ -33,6 +34,7 @@
   49.12  #include <asm/desc.h>
   49.13  #include <asm/arch_hooks.h>
   49.14  #include <asm/hpet.h>
   49.15 +#include <asm/idle.h>
   49.16  
   49.17  /*
   49.18   * Debug level
   49.19 @@ -42,35 +44,12 @@ int disable_apic;
   49.20  
   49.21  void smp_local_timer_interrupt(struct pt_regs *regs)
   49.22  {
   49.23 -
   49.24  	profile_tick(CPU_PROFILING, regs);
   49.25  #ifndef CONFIG_XEN
   49.26 -	int cpu = smp_processor_id();
   49.27 -
   49.28 -	if (--per_cpu(prof_counter, cpu) <= 0) {
   49.29 -		/*
   49.30 -		 * The multiplier may have changed since the last time we got
   49.31 -		 * to this point as a result of the user writing to
   49.32 -		 * /proc/profile. In this case we need to adjust the APIC
   49.33 -		 * timer accordingly.
   49.34 -		 *
   49.35 -		 * Interrupts are already masked off at this point.
   49.36 -		 */
   49.37 -		per_cpu(prof_counter, cpu) = per_cpu(prof_multiplier, cpu);
   49.38 -		if (per_cpu(prof_counter, cpu) != 
   49.39 -		    per_cpu(prof_old_multiplier, cpu)) {
   49.40 -			__setup_APIC_LVTT(calibration_result/
   49.41 -					per_cpu(prof_counter, cpu));
   49.42 -			per_cpu(prof_old_multiplier, cpu) =
   49.43 -				per_cpu(prof_counter, cpu);
   49.44 -		}
   49.45 -
   49.46  #ifdef CONFIG_SMP
   49.47  		update_process_times(user_mode(regs));
   49.48  #endif
   49.49 -	}
   49.50  #endif
   49.51 -
   49.52  	/*
   49.53  	 * We take the 'long' return path, and there every subsystem
   49.54  	 * grabs the appropriate locks (kernel lock/ irq lock).
   49.55 @@ -108,6 +87,7 @@ void smp_apic_timer_interrupt(struct pt_
   49.56  	 * Besides, if we don't timer interrupts ignore the global
   49.57  	 * interrupt lock, which is the WrongThing (tm) to do.
   49.58  	 */
   49.59 +	exit_idle();
   49.60  	irq_enter();
   49.61  	smp_local_timer_interrupt(regs);
   49.62  	irq_exit();
   49.63 @@ -119,6 +99,7 @@ void smp_apic_timer_interrupt(struct pt_
   49.64  asmlinkage void smp_spurious_interrupt(void)
   49.65  {
   49.66  	unsigned int v;
   49.67 +	exit_idle();
   49.68  	irq_enter();
   49.69  	/*
   49.70  	 * Check if this really is a spurious interrupt and ACK it
   49.71 @@ -154,6 +135,7 @@ asmlinkage void smp_error_interrupt(void
   49.72  {
   49.73  	unsigned int v, v1;
   49.74  
   49.75 +	exit_idle();
   49.76  	irq_enter();
   49.77  	/* First tickle the hardware, only then report what went on. -- REW */
   49.78  	v = apic_read(APIC_ESR);
   49.79 @@ -182,6 +164,13 @@ int get_physical_broadcast(void)
   49.80          return 0xff;
   49.81  }
   49.82  
   49.83 +#ifdef CONFIG_XEN
   49.84 +void switch_APIC_timer_to_ipi(void *cpumask) { }
   49.85 +EXPORT_SYMBOL(switch_APIC_timer_to_ipi);
   49.86 +void switch_ipi_to_APIC_timer(void *cpumask) { }
   49.87 +EXPORT_SYMBOL(switch_ipi_to_APIC_timer);
   49.88 +#endif
   49.89 +
   49.90  /*
   49.91   * This initializes the IO-APIC and APIC hardware if this is
   49.92   * a UP kernel.
    50.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/e820-xen.c	Thu Feb 02 19:15:22 2006 +0100
    50.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/e820-xen.c	Thu Feb 02 19:16:38 2006 +0000
    50.3 @@ -276,6 +276,7 @@ void __init e820_reserve_resources(void)
    50.4  		}
    50.5  	}
    50.6  }
    50.7 +#endif /* CONFIG_XEN */
    50.8  
    50.9  void __init e820_print_map(char *who)
   50.10  {
   50.11 @@ -303,6 +304,7 @@ void __init e820_print_map(char *who)
   50.12  	}
   50.13  }
   50.14  
   50.15 +#ifndef CONFIG_XEN
   50.16  /*
   50.17   * Sanitize the BIOS e820 map.
   50.18   *
   50.19 @@ -660,6 +662,27 @@ void __init parse_memopt(char *p, char *
   50.20  	xen_override_max_pfn = (unsigned long) end_user_pfn;
   50.21  } 
   50.22  
   50.23 +void __init parse_memmapopt(char *p, char **from)
   50.24 +{
   50.25 +	unsigned long long start_at, mem_size;
   50.26 +
   50.27 +	mem_size = memparse(p, from);
   50.28 +	p = *from;
   50.29 +	if (*p == '@') {
   50.30 +		start_at = memparse(p+1, from);
   50.31 +		add_memory_region(start_at, mem_size, E820_RAM);
   50.32 +	} else if (*p == '#') {
   50.33 +		start_at = memparse(p+1, from);
   50.34 +		add_memory_region(start_at, mem_size, E820_ACPI);
   50.35 +	} else if (*p == '$') {
   50.36 +		start_at = memparse(p+1, from);
   50.37 +		add_memory_region(start_at, mem_size, E820_RESERVED);
   50.38 +	} else {
   50.39 +		end_user_pfn = (mem_size >> PAGE_SHIFT);
   50.40 +	}
   50.41 +	p = *from;
   50.42 +}
   50.43 +
   50.44  /*
   50.45   * Search for the biggest gap in the low 32 bits of the e820
   50.46   * memory space.  We pass this space to PCI to assign MMIO resources
    51.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/early_printk-xen.c	Thu Feb 02 19:15:22 2006 +0100
    51.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/early_printk-xen.c	Thu Feb 02 19:16:38 2006 +0000
    51.3 @@ -251,7 +251,7 @@ void early_printk(const char *fmt, ...)
    51.4  	va_end(ap); 
    51.5  } 
    51.6  
    51.7 -static int keep_early; 
    51.8 +static int __initdata keep_early;
    51.9  
   51.10  int __init setup_early_printk(char *opt) 
   51.11  {  
   51.12 @@ -261,8 +261,6 @@ int __init setup_early_printk(char *opt)
   51.13  	if (early_console_initialized)
   51.14  		return -1;
   51.15  
   51.16 -	opt = strchr(opt, '=') + 1;
   51.17 -
   51.18  	strlcpy(buf,opt,sizeof(buf)); 
   51.19  	space = strchr(buf, ' '); 
   51.20  	if (space)
    52.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/entry-xen.S	Thu Feb 02 19:15:22 2006 +0100
    52.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/entry-xen.S	Thu Feb 02 19:16:38 2006 +0000
    52.3 @@ -48,6 +48,7 @@
    52.4  #include <asm/unistd.h>
    52.5  #include <asm/thread_info.h>
    52.6  #include <asm/hw_irq.h>
    52.7 +#include <asm/page.h>
    52.8  #include <asm/errno.h>
    52.9  #include <xen/interface/arch-x86_64.h>
   52.10  
   52.11 @@ -334,6 +335,7 @@ int_with_check:
   52.12  	movl threadinfo_flags(%rcx),%edx
   52.13  	andl %edi,%edx
   52.14  	jnz   int_careful
   52.15 +	andl    $~TS_COMPAT,threadinfo_status(%rcx)
   52.16  	jmp   retint_restore_args
   52.17  
   52.18  	/* Either reschedule or signal or syscall exit tracking needed. */
   52.19 @@ -679,27 +681,40 @@ ENTRY(spurious_interrupt)
   52.20  	CFI_ENDPROC
   52.21  	.endm
   52.22  
   52.23 -#if 0
   52.24 +#if 0 /* not XEN */
   52.25  	/* error code is on the stack already */
   52.26  	/* handle NMI like exceptions that can happen everywhere */
   52.27 -	.macro paranoidentry sym
   52.28 +	.macro paranoidentry sym, ist=0
   52.29          movq (%rsp),%rcx
   52.30          movq 8(%rsp),%r11
   52.31          addq $0x10,%rsp /* skip rcx and r11 */        
   52.32  	SAVE_ALL
   52.33  	cld
   52.34 +#if 0 /* not XEN */
   52.35  	movl $1,%ebx
   52.36  	movl  $MSR_GS_BASE,%ecx
   52.37  	rdmsr
   52.38  	testl %edx,%edx
   52.39  	js    1f
   52.40 -/*	swapgs */
   52.41 +	swapgs
   52.42  	xorl  %ebx,%ebx
   52.43 -1:	movq %rsp,%rdi
   52.44 +1:
   52.45 +#endif
   52.46 +	.if \ist
   52.47 +	movq	%gs:pda_data_offset, %rbp
   52.48 +	.endif
   52.49 +	movq %rsp,%rdi
   52.50  	movq ORIG_RAX(%rsp),%rsi
   52.51  	movq $-1,ORIG_RAX(%rsp)
   52.52 +	.if \ist
   52.53 +	subq	$EXCEPTION_STKSZ, per_cpu__init_tss + TSS_ist + (\ist - 1) * 8(%rbp)
   52.54 +	.endif
   52.55  	call \sym
   52.56 -	cli
   52.57 +	.if \ist
   52.58 +	addq	$EXCEPTION_STKSZ, per_cpu__init_tss + TSS_ist + (\ist - 1) * 8(%rbp)
   52.59 +	.endif
   52.60 +/*	cli */
   52.61 +	XEN_BLOCK_EVENTS(%rsi)		
   52.62  	.endm
   52.63  #endif
   52.64  	
   52.65 @@ -1057,7 +1072,12 @@ paranoid_schedule:
   52.66  #endif        
   52.67  
   52.68  KPROBE_ENTRY(int3)
   52.69 -	zeroentry do_int3	
   52.70 + 	INTR_FRAME
   52.71 +/* 	pushq $0
   52.72 + 	CFI_ADJUST_CFA_OFFSET 8 */
   52.73 + 	zeroentry do_int3
   52.74 +/* 	jmp paranoid_exit */
   52.75 + 	CFI_ENDPROC
   52.76  	.previous .text
   52.77  
   52.78  ENTRY(overflow)
   52.79 @@ -1120,24 +1140,18 @@ ENTRY(machine_check)
   52.80  	CFI_ENDPROC
   52.81  #endif
   52.82  
   52.83 -ENTRY(call_debug)
   52.84 -       zeroentry do_call_debug
   52.85 -
   52.86 -
   52.87  ENTRY(call_softirq)
   52.88  	CFI_STARTPROC
   52.89  	movq %gs:pda_irqstackptr,%rax
   52.90 -	pushq %r15
   52.91 -	CFI_ADJUST_CFA_OFFSET 8
   52.92 -	movq %rsp,%r15
   52.93 -	CFI_DEF_CFA_REGISTER	r15
   52.94 +	movq %rsp,%rdx
   52.95 +	CFI_DEF_CFA_REGISTER	rdx
   52.96  	incl %gs:pda_irqcount
   52.97  	cmove %rax,%rsp
   52.98 +	pushq %rdx
   52.99 +	/*todo CFI_DEF_CFA_EXPRESSION ...*/
  52.100  	call __do_softirq
  52.101 -	movq %r15,%rsp
  52.102 +	popq %rsp
  52.103  	CFI_DEF_CFA_REGISTER	rsp
  52.104  	decl %gs:pda_irqcount
  52.105 -	popq %r15
  52.106 -	CFI_ADJUST_CFA_OFFSET -8
  52.107  	ret
  52.108  	CFI_ENDPROC
    53.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/head-xen.S	Thu Feb 02 19:15:22 2006 +0100
    53.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/head-xen.S	Thu Feb 02 19:16:38 2006 +0000
    53.3 @@ -22,7 +22,6 @@
    53.4  	.ascii	",HYPERCALL_PAGE=0x10d" /* __pa(hypercall_page) >> 12 */
    53.5  	.ascii	",LOADER=generic"
    53.6  	.byte	0
    53.7 -                
    53.8        
    53.9  #include <linux/threads.h>
   53.10  #include <linux/init.h>
   53.11 @@ -93,14 +92,15 @@ ENTRY(lgdt_finish)
   53.12  ENTRY(stext)
   53.13  ENTRY(_stext)
   53.14  
   53.15 -	/*
   53.16 -	 * This default setting generates an ident mapping at address 0x100000
   53.17 -	 * and a mapping for the kernel that precisely maps virtual address
   53.18 -	 * 0xffffffff80000000 to physical address 0x000000. (always using
   53.19 -	 * 2Mbyte large pages provided by PAE mode)
   53.20 -	 */
   53.21 -.org 0x1000
   53.22 -ENTRY(init_level4_pgt)
   53.23 +	$page = 0
   53.24 +#define NEXT_PAGE(name) \
   53.25 +	$page = $page + 1; \
   53.26 +	.org $page * 0x1000; \
   53.27 +	phys_/**/name = $page * 0x1000 + __PHYSICAL_START; \
   53.28 +ENTRY(name)
   53.29 +
   53.30 +NEXT_PAGE(init_level4_pgt)
   53.31 +	/* This gets initialized in x86_64_start_kernel */
   53.32  	.fill	512,8,0
   53.33  
   53.34          /*
   53.35 @@ -110,73 +110,39 @@ ENTRY(init_level4_pgt)
   53.36           * We also use this page to establish the initiali mapping for
   53.37           * vsyscall area.
   53.38           */
   53.39 -.org 0x2000
   53.40 -ENTRY(init_level4_user_pgt)
   53.41 +NEXT_PAGE(init_level4_user_pgt)
   53.42  	.fill	512,8,0
   53.43  
   53.44  	/*
   53.45  	 * In Xen the following pre-initialized pgt entries are re-initialized.
   53.46  	 */
   53.47 -.org 0x3000
   53.48 -ENTRY(level3_kernel_pgt)
   53.49 +NEXT_PAGE(level3_kernel_pgt)
   53.50  	.fill	510,8,0
   53.51  	/* (2^48-(2*1024*1024*1024)-((2^39)*511))/(2^30) = 510 */
   53.52 -	.quad	0x0000000000005007 + __PHYSICAL_START	/* -> level2_kernel_pgt */
   53.53 +	.quad	phys_level2_kernel_pgt | 0x007
   53.54  	.fill	1,8,0
   53.55  
   53.56 -.org 0x4000
   53.57 -ENTRY(level2_ident_pgt)
   53.58 +NEXT_PAGE(level2_ident_pgt)
   53.59  	/* 40MB for bootup. 	*/
   53.60 -	.quad	0x0000000000000083
   53.61 -	.quad	0x0000000000200083
   53.62 -	.quad	0x0000000000400083
   53.63 -	.quad	0x0000000000600083
   53.64 -	.quad	0x0000000000800083
   53.65 -	.quad	0x0000000000A00083
   53.66 -	.quad	0x0000000000C00083
   53.67 -	.quad	0x0000000000E00083
   53.68 -	.quad	0x0000000001000083
   53.69 -	.quad	0x0000000001200083
   53.70 -	.quad	0x0000000001400083
   53.71 -	.quad	0x0000000001600083
   53.72 -	.quad	0x0000000001800083
   53.73 -	.quad	0x0000000001A00083
   53.74 -	.quad	0x0000000001C00083
   53.75 -	.quad	0x0000000001E00083
   53.76 -	.quad	0x0000000002000083
   53.77 -	.quad	0x0000000002200083
   53.78 -	.quad	0x0000000002400083
   53.79 -	.quad	0x0000000002600083
   53.80 +	i = 0
   53.81 +	.rept 20
   53.82 +	.quad	i << 21 | 0x083
   53.83 +	i = i + 1
   53.84 +	.endr
   53.85  	/* Temporary mappings for the super early allocator in arch/x86_64/mm/init.c */
   53.86  	.globl temp_boot_pmds
   53.87  temp_boot_pmds:
   53.88  	.fill	492,8,0
   53.89  
   53.90 -.org 0x5000
   53.91 -ENTRY(level2_kernel_pgt)
   53.92 +NEXT_PAGE(level2_kernel_pgt)
   53.93  	/* 40MB kernel mapping. The kernel code cannot be bigger than that.
   53.94  	   When you change this change KERNEL_TEXT_SIZE in page.h too. */
   53.95  	/* (2^48-(2*1024*1024*1024)-((2^39)*511)-((2^30)*510)) = 0 */
   53.96 -	.quad	0x0000000000000183
   53.97 -	.quad	0x0000000000200183
   53.98 -	.quad	0x0000000000400183
   53.99 -	.quad	0x0000000000600183
  53.100 -	.quad	0x0000000000800183
  53.101 -	.quad	0x0000000000A00183
  53.102 -	.quad	0x0000000000C00183
  53.103 -	.quad	0x0000000000E00183
  53.104 -	.quad	0x0000000001000183
  53.105 -	.quad	0x0000000001200183
  53.106 -	.quad	0x0000000001400183
  53.107 -	.quad	0x0000000001600183
  53.108 -	.quad	0x0000000001800183
  53.109 -	.quad	0x0000000001A00183
  53.110 -	.quad	0x0000000001C00183
  53.111 -	.quad	0x0000000001E00183
  53.112 -	.quad	0x0000000002000183
  53.113 -	.quad	0x0000000002200183
  53.114 -	.quad	0x0000000002400183
  53.115 -	.quad	0x0000000002600183
  53.116 +	i = 0
  53.117 +	.rept 20
  53.118 +	.quad	i << 21 | 0x183
  53.119 +	i = i + 1
  53.120 +	.endr
  53.121  	/* Module mapping starts here */
  53.122  	.fill	492,8,0
  53.123  	
  53.124 @@ -184,19 +150,16 @@ ENTRY(level2_kernel_pgt)
  53.125           * This is used for vsyscall area mapping as we have a different
  53.126           * level4 page table for user.
  53.127           */
  53.128 -.org 0x6000
  53.129 -ENTRY(level3_user_pgt)
  53.130 +NEXT_PAGE(level3_user_pgt)
  53.131          .fill	512,8,0
  53.132  
  53.133 -.org 0x7000
  53.134 -ENTRY(cpu_gdt_table)
  53.135 +NEXT_PAGE(cpu_gdt_table)
  53.136  /* The TLS descriptors are currently at a different place compared to i386.
  53.137     Hopefully nobody expects them at a fixed place (Wine?) */
  53.138  	.quad	0x0000000000000000	/* NULL descriptor */
  53.139 -	.quad	0x008ffa000000ffff	/* __KERNEL_COMPAT32_CS */	
  53.140 +	.quad	0x0			/* unused */
  53.141  	.quad	0x00affa000000ffff	/* __KERNEL_CS */
  53.142  	.quad	0x00cff2000000ffff	/* __KERNEL_DS */
  53.143 -	
  53.144         	.quad	0x00cffa000000ffff	/* __USER32_CS */
  53.145  	.quad	0x00cff2000000ffff	/* __USER_DS, __USER32_DS  */		
  53.146  	.quad	0x00affa000000ffff	/* __USER_CS */
  53.147 @@ -204,47 +167,45 @@ ENTRY(cpu_gdt_table)
  53.148  	.quad	0,0			/* TSS */
  53.149  	.quad	0,0			/* LDT */
  53.150  	.quad   0,0,0			/* three TLS descriptors */ 
  53.151 -	.quad	0			/* unused now?   __KERNEL16_CS - 16bit PM for S3 wakeup. */
  53.152 -
  53.153 +	.quad	0			/* unused */
  53.154  gdt_end:
  53.155  #if 0
  53.156  	/* asm/segment.h:GDT_ENTRIES must match this */	
  53.157  	/* This should be a multiple of the cache line size */
  53.158 -	/* GDTs of other CPUs: */	
  53.159 -	.fill (GDT_SIZE * NR_CPUS) - (gdt_end - cpu_gdt_table)
  53.160 +	/* GDTs of other CPUs are now dynamically allocated */
  53.161 +
  53.162 +	/* zero the remaining page */
  53.163 +	.fill PAGE_SIZE / 8 - GDT_ENTRIES,8,0
  53.164  #endif
  53.165  
  53.166 -.org 0x8000
  53.167 -ENTRY(empty_zero_page)
  53.168 -
  53.169 -.org 0x9000
  53.170 -ENTRY(empty_bad_page)
  53.171 -
  53.172 -.org 0xa000
  53.173 -ENTRY(empty_bad_pte_table)
  53.174 -
  53.175 -.org 0xb000
  53.176 -ENTRY(empty_bad_pmd_table)
  53.177 +NEXT_PAGE(empty_zero_page)
  53.178  
  53.179 -.org 0xc000
  53.180 -ENTRY(level3_physmem_pgt)
  53.181 -	.quad	0x0000000000005007 + __PHYSICAL_START	/* -> level2_kernel_pgt (so that __va works even before pagetable_init) */
  53.182 +NEXT_PAGE(level3_physmem_pgt)
  53.183 +	.quad	phys_level2_kernel_pgt | 0x007	/* so that __va works even before pagetable_init */
  53.184  
  53.185 -.org 0xd000
  53.186 -ENTRY(hypercall_page)
  53.187 +NEXT_PAGE(hypercall_page)
  53.188 +.if (phys_hypercall_page - 0x10a000)
  53.189 +	/* cause compiler error if the hypercall_page is at a
  53.190 +	 * different address than expected. */
  53.191 +	.quad	__adjust_hypercall_page_in_header
  53.192 +.endif
  53.193  
  53.194 -.org 0xe000
  53.195 +#undef NEXT_PAGE
  53.196 +
  53.197 +	.data
  53.198 +
  53.199 +#ifndef CONFIG_XEN
  53.200  #ifdef CONFIG_ACPI_SLEEP
  53.201 +	.align PAGE_SIZE
  53.202  ENTRY(wakeup_level4_pgt)
  53.203 -	.quad	0x0000000000002007 + __PHYSICAL_START	/* -> level3_ident_pgt */
  53.204 +	.quad	phys_level3_ident_pgt | 0x007
  53.205  	.fill	255,8,0
  53.206 -	.quad	0x000000000000a007 + __PHYSICAL_START
  53.207 +	.quad	phys_level3_physmem_pgt | 0x007
  53.208  	.fill	254,8,0
  53.209  	/* (2^48-(2*1024*1024*1024))/(2^39) = 511 */
  53.210 -	.quad	0x0000000000003007 + __PHYSICAL_START	/* -> level3_kernel_pgt */
  53.211 +	.quad	phys_level3_kernel_pgt | 0x007
  53.212  #endif
  53.213  
  53.214 -#ifndef CONFIG_XEN
  53.215  #ifndef CONFIG_HOTPLUG_CPU
  53.216  	__INITDATA
  53.217  #endif
  53.218 @@ -256,12 +217,12 @@ ENTRY(wakeup_level4_pgt)
  53.219  	 */
  53.220  	.align PAGE_SIZE
  53.221  ENTRY(boot_level4_pgt)
  53.222 -	.quad	0x0000000000002007 + __PHYSICAL_START	/* -> level3_ident_pgt */
  53.223 +	.quad	phys_level3_ident_pgt | 0x007
  53.224  	.fill	255,8,0
  53.225 -	.quad	0x000000000000a007 + __PHYSICAL_START
  53.226 +	.quad	phys_level3_physmem_pgt | 0x007
  53.227  	.fill	254,8,0
  53.228  	/* (2^48-(2*1024*1024*1024))/(2^39) = 511 */
  53.229 -	.quad	0x0000000000003007 + __PHYSICAL_START	/* -> level3_kernel_pgt */
  53.230 +	.quad	phys_level3_kernel_pgt | 0x007
  53.231  #endif
  53.232  
  53.233  	.data
  53.234 @@ -284,10 +245,8 @@ gdt:
  53.235   * Also sysret mandates a special GDT layout 
  53.236   */
  53.237  		 		
  53.238 -#if 0        		 		
  53.239 -.align L1_CACHE_BYTES
  53.240 -#endif
  53.241 -	.align  L1_CACHE_BYTES
  53.242 +.align PAGE_SIZE
  53.243 +
  53.244  ENTRY(idt_table)	
  53.245  	.rept   256
  53.246  	.quad   0
    54.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/head64-xen.c	Thu Feb 02 19:15:22 2006 +0100
    54.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/head64-xen.c	Thu Feb 02 19:16:38 2006 +0000
    54.3 @@ -45,9 +45,9 @@ static void __init clear_bss(void)
    54.4  
    54.5  extern char saved_command_line[];
    54.6  
    54.7 -#if 0
    54.8  static void __init copy_bootdata(char *real_mode_data)
    54.9  {
   54.10 +#if 0
   54.11  	int new_data;
   54.12  	char * command_line;
   54.13  
   54.14 @@ -63,9 +63,17 @@ static void __init copy_bootdata(char *r
   54.15  	}
   54.16  	command_line = (char *) ((u64)(new_data));
   54.17  	memcpy(saved_command_line, command_line, COMMAND_LINE_SIZE);
   54.18 -	printk("Bootdata ok (command line is %s)\n", saved_command_line);	
   54.19 +	printk("Bootdata ok (command line is %s)\n", saved_command_line);
   54.20 +#else
   54.21 +	int max_cmdline;
   54.22 +	
   54.23 +	if ((max_cmdline = MAX_GUEST_CMDLINE) > COMMAND_LINE_SIZE)
   54.24 +		max_cmdline = COMMAND_LINE_SIZE;
   54.25 +	memcpy(saved_command_line, xen_start_info->cmd_line, max_cmdline);
   54.26 +	saved_command_line[max_cmdline-1] = '\0';
   54.27 +	printk("Bootdata ok (command line is %s)\n", saved_command_line);
   54.28 +#endif
   54.29  }
   54.30 -#endif
   54.31  
   54.32  static void __init setup_boot_cpu_data(void)
   54.33  {
   54.34 @@ -87,6 +95,7 @@ static void __init setup_boot_cpu_data(v
   54.35  
   54.36  void __init x86_64_start_kernel(char * real_mode_data)
   54.37  {
   54.38 +	char *s;
   54.39  	int i;
   54.40  
   54.41  	if (!xen_feature(XENFEAT_auto_translated_physmap)) {
   54.42 @@ -101,16 +110,18 @@ void __init x86_64_start_kernel(char * r
   54.43  #if 0
   54.44  	asm volatile("lidt %0" :: "m" (idt_descr));
   54.45  #endif
   54.46 +
   54.47 + 	for (i = 0; i < NR_CPUS; i++)
   54.48 + 		cpu_pda(i) = &boot_cpu_pda[i];
   54.49 +
   54.50  	pda_init(0);
   54.51 -        /*	copy_bootdata(real_mode_data); */
   54.52 +	copy_bootdata(real_mode_data);
   54.53  #ifdef CONFIG_SMP
   54.54  	cpu_set(0, cpu_online_map);
   54.55  #endif
   54.56 -#if 0
   54.57  	s = strstr(saved_command_line, "earlyprintk=");
   54.58  	if (s != NULL)
   54.59 -		setup_early_printk(s);
   54.60 -#endif
   54.61 +		setup_early_printk(strchr(s, '=') + 1);
   54.62  #ifdef CONFIG_NUMA
   54.63  	s = strstr(saved_command_line, "numa=");
   54.64  	if (s != NULL)
    55.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/io_apic-xen.c	Thu Feb 02 19:15:22 2006 +0100
    55.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/io_apic-xen.c	Thu Feb 02 19:16:38 2006 +0000
    55.3 @@ -37,6 +37,7 @@
    55.4  #include <asm/proto.h>
    55.5  #include <asm/mach_apic.h>
    55.6  #include <asm/acpi.h>
    55.7 +#include <asm/dma.h>
    55.8  
    55.9  #define __apicdebuginit  __init
   55.10  
   55.11 @@ -46,6 +47,11 @@ static int no_timer_check;
   55.12  
   55.13  int disable_timer_pin_1 __initdata;
   55.14  
   55.15 +#ifndef CONFIG_XEN
   55.16 +/* Where if anywhere is the i8259 connect in external int mode */
   55.17 +static struct { int pin, apic; } ioapic_i8259 = { -1, -1 };
   55.18 +#endif
   55.19 +
   55.20  static DEFINE_SPINLOCK(ioapic_lock);
   55.21  
   55.22  /*
   55.23 @@ -308,9 +314,6 @@ static int __init enable_ioapic_setup(ch
   55.24  void __init check_ioapic(void) 
   55.25  { 
   55.26  	int num,slot,func; 
   55.27 -	if (ioapic_force) 
   55.28 -		return; 
   55.29 -
   55.30  	/* Poor man's PCI discovery */
   55.31  	for (num = 0; num < 32; num++) { 
   55.32  		for (slot = 0; slot < 32; slot++) { 
   55.33 @@ -332,7 +335,7 @@ void __init check_ioapic(void)
   55.34  				switch (vendor) { 
   55.35  				case PCI_VENDOR_ID_VIA:
   55.36  #ifdef CONFIG_GART_IOMMU
   55.37 -					if ((end_pfn >= (0xffffffff>>PAGE_SHIFT) ||
   55.38 +					if ((end_pfn > MAX_DMA32_PFN ||
   55.39  					     force_iommu) &&
   55.40  					    !iommu_aperture_allowed) {
   55.41  						printk(KERN_INFO
   55.42 @@ -412,7 +415,7 @@ static int find_irq_entry(int apic, int 
   55.43  /*
   55.44   * Find the pin to which IRQ[irq] (ISA) is connected
   55.45   */
   55.46 -static int find_isa_irq_pin(int irq, int type)
   55.47 +static int __init find_isa_irq_pin(int irq, int type)
   55.48  {
   55.49  	int i;
   55.50  
   55.51 @@ -429,6 +432,31 @@ static int find_isa_irq_pin(int irq, int
   55.52  	}
   55.53  	return -1;
   55.54  }
   55.55 +
   55.56 +static int __init find_isa_irq_apic(int irq, int type)
   55.57 +{
   55.58 +	int i;
   55.59 +
   55.60 +	for (i = 0; i < mp_irq_entries; i++) {
   55.61 +		int lbus = mp_irqs[i].mpc_srcbus;
   55.62 +
   55.63 +		if ((mp_bus_id_to_type[lbus] == MP_BUS_ISA ||
   55.64 +		     mp_bus_id_to_type[lbus] == MP_BUS_EISA ||
   55.65 +		     mp_bus_id_to_type[lbus] == MP_BUS_MCA) &&
   55.66 +		    (mp_irqs[i].mpc_irqtype == type) &&
   55.67 +		    (mp_irqs[i].mpc_srcbusirq == irq))
   55.68 +			break;
   55.69 +	}
   55.70 +	if (i < mp_irq_entries) {
   55.71 +		int apic;
   55.72 +		for(apic = 0; apic < nr_ioapics; apic++) {
   55.73 +			if (mp_ioapics[apic].mpc_apicid == mp_irqs[i].mpc_dstapic)
   55.74 +				return apic;
   55.75 +		}
   55.76 +	}
   55.77 +
   55.78 +	return -1;
   55.79 +}
   55.80  #endif
   55.81  
   55.82  /*
   55.83 @@ -926,7 +954,7 @@ static void __init setup_IO_APIC_irqs(vo
   55.84   * Set up the 8259A-master output pin as broadcast to all
   55.85   * CPUs.
   55.86   */
   55.87 -static void __init setup_ExtINT_IRQ0_pin(unsigned int pin, int vector)
   55.88 +static void __init setup_ExtINT_IRQ0_pin(unsigned int apic, unsigned int pin, int vector)
   55.89  {
   55.90  	struct IO_APIC_route_entry entry;
   55.91  	unsigned long flags;
   55.92 @@ -936,7 +964,7 @@ static void __init setup_ExtINT_IRQ0_pin
   55.93  	disable_8259A_irq(0);
   55.94  
   55.95  	/* mask LVT0 */
   55.96 -	apic_write_around(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT);
   55.97 +	apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT);
   55.98  
   55.99  	/*
  55.100  	 * We use logical delivery to get the timer IRQ
  55.101 @@ -960,8 +988,8 @@ static void __init setup_ExtINT_IRQ0_pin
  55.102  	 * Add it to the IO-APIC irq-routing table:
  55.103  	 */
  55.104  	spin_lock_irqsave(&ioapic_lock, flags);
  55.105 -	io_apic_write(0, 0x11+2*pin, *(((int *)&entry)+1));
  55.106 -	io_apic_write(0, 0x10+2*pin, *(((int *)&entry)+0));
  55.107 +	io_apic_write(apic, 0x11+2*pin, *(((int *)&entry)+1));
  55.108 +	io_apic_write(apic, 0x10+2*pin, *(((int *)&entry)+0));
  55.109  	spin_unlock_irqrestore(&ioapic_lock, flags);
  55.110  
  55.111  	enable_8259A_irq(0);
  55.112 @@ -1244,7 +1272,10 @@ void __init print_IO_APIC(void) { }
  55.113  static void __init enable_IO_APIC(void)
  55.114  {
  55.115  	union IO_APIC_reg_01 reg_01;
  55.116 -	int i;
  55.117 +#ifndef CONFIG_XEN
  55.118 +	int i8259_apic, i8259_pin;
  55.119 +#endif
  55.120 +	int i, apic;
  55.121  	unsigned long flags;
  55.122  
  55.123  	for (i = 0; i < PIN_MAP_SIZE; i++) {
  55.124 @@ -1258,12 +1289,51 @@ static void __init enable_IO_APIC(void)
  55.125  	/*
  55.126  	 * The number of IO-APIC IRQ registers (== #pins):
  55.127  	 */
  55.128 -	for (i = 0; i < nr_ioapics; i++) {
  55.129 +	for (apic = 0; apic < nr_ioapics; apic++) {
  55.130  		spin_lock_irqsave(&ioapic_lock, flags);
  55.131 -		reg_01.raw = io_apic_read(i, 1);
  55.132 +		reg_01.raw = io_apic_read(apic, 1);
  55.133  		spin_unlock_irqrestore(&ioapic_lock, flags);
  55.134 -		nr_ioapic_registers[i] = reg_01.bits.entries+1;
  55.135 +		nr_ioapic_registers[apic] = reg_01.bits.entries+1;
  55.136  	}
  55.137 +#ifndef CONFIG_XEN
  55.138 +	for(apic = 0; apic < nr_ioapics; apic++) {
  55.139 +		int pin;
  55.140 +		/* See if any of the pins is in ExtINT mode */
  55.141 +		for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) {
  55.142 +			struct IO_APIC_route_entry entry;
  55.143 +			spin_lock_irqsave(&ioapic_lock, flags);
  55.144 +			*(((int *)&entry) + 0) = io_apic_read(apic, 0x10 + 2 * pin);
  55.145 +			*(((int *)&entry) + 1) = io_apic_read(apic, 0x11 + 2 * pin);
  55.146 +			spin_unlock_irqrestore(&ioapic_lock, flags);
  55.147 +
  55.148 +
  55.149 +			/* If the interrupt line is enabled and in ExtInt mode
  55.150 +			 * I have found the pin where the i8259 is connected.
  55.151 +			 */
  55.152 +			if ((entry.mask == 0) && (entry.delivery_mode == dest_ExtINT)) {
  55.153 +				ioapic_i8259.apic = apic;
  55.154 +				ioapic_i8259.pin  = pin;
  55.155 +				goto found_i8259;
  55.156 +			}
  55.157 +		}
  55.158 +	}
  55.159 + found_i8259:
  55.160 +	/* Look to see what if the MP table has reported the ExtINT */
  55.161 +	i8259_pin  = find_isa_irq_pin(0, mp_ExtINT);
  55.162 +	i8259_apic = find_isa_irq_apic(0, mp_ExtINT);
  55.163 +	/* Trust the MP table if nothing is setup in the hardware */
  55.164 +	if ((ioapic_i8259.pin == -1) && (i8259_pin >= 0)) {
  55.165 +		printk(KERN_WARNING "ExtINT not setup in hardware but reported by MP table\n");
  55.166 +		ioapic_i8259.pin  = i8259_pin;
  55.167 +		ioapic_i8259.apic = i8259_apic;
  55.168 +	}
  55.169 +	/* Complain if the MP table and the hardware disagree */
  55.170 +	if (((ioapic_i8259.apic != i8259_apic) || (ioapic_i8259.pin != i8259_pin)) &&
  55.171 +		(i8259_pin >= 0) && (ioapic_i8259.pin >= 0))
  55.172 +	{
  55.173 +		printk(KERN_WARNING "ExtINT in hardware and MP table differ\n");
  55.174 +	}
  55.175 +#endif
  55.176  
  55.177  	/*
  55.178  	 * Do not trust the IO-APIC being empty at bootup
  55.179 @@ -1276,9 +1346,6 @@ static void __init enable_IO_APIC(void)
  55.180   */
  55.181  void disable_IO_APIC(void)
  55.182  {
  55.183 -#ifndef CONFIG_XEN
  55.184 -	int pin;
  55.185 -#endif
  55.186  	/*
  55.187  	 * Clear the IO-APIC before rebooting:
  55.188  	 */
  55.189 @@ -1290,8 +1357,7 @@ void disable_IO_APIC(void)
  55.190  	 * Put that IOAPIC in virtual wire mode
  55.191  	 * so legacy interrupts can be delivered.
  55.192  	 */
  55.193 -	pin = find_isa_irq_pin(0, mp_ExtINT);
  55.194 -	if (pin != -1) {
  55.195 +	if (ioapic_i8259.pin != -1) {
  55.196  		struct IO_APIC_route_entry entry;
  55.197  		unsigned long flags;
  55.198  
  55.199 @@ -1302,21 +1368,23 @@ void disable_IO_APIC(void)
  55.200  		entry.polarity        = 0; /* High */
  55.201  		entry.delivery_status = 0;
  55.202  		entry.dest_mode       = 0; /* Physical */
  55.203 -		entry.delivery_mode   = 7; /* ExtInt */
  55.204 +		entry.delivery_mode   = dest_ExtINT; /* ExtInt */
  55.205  		entry.vector          = 0;
  55.206 -		entry.dest.physical.physical_dest = 0;
  55.207 -
  55.208 +		entry.dest.physical.physical_dest =
  55.209 +					GET_APIC_ID(apic_read(APIC_ID));
  55.210  
  55.211  		/*
  55.212  		 * Add it to the IO-APIC irq-routing table:
  55.213  		 */
  55.214  		spin_lock_irqsave(&ioapic_lock, flags);
  55.215 -		io_apic_write(0, 0x11+2*pin, *(((int *)&entry)+1));
  55.216 -		io_apic_write(0, 0x10+2*pin, *(((int *)&entry)+0));
  55.217 +		io_apic_write(ioapic_i8259.apic, 0x11+2*ioapic_i8259.pin,
  55.218 +			*(((int *)&entry)+1));
  55.219 +		io_apic_write(ioapic_i8259.apic, 0x10+2*ioapic_i8259.pin,
  55.220 +			*(((int *)&entry)+0));
  55.221  		spin_unlock_irqrestore(&ioapic_lock, flags);
  55.222  	}
  55.223  
  55.224 -	disconnect_bsp_APIC(pin != -1);
  55.225 +	disconnect_bsp_APIC(ioapic_i8259.pin != -1);
  55.226  #endif
  55.227  }
  55.228  
  55.229 @@ -1640,7 +1708,7 @@ static void enable_lapic_irq (unsigned i
  55.230  	unsigned long v;
  55.231  
  55.232  	v = apic_read(APIC_LVT0);
  55.233 -	apic_write_around(APIC_LVT0, v & ~APIC_LVT_MASKED);
  55.234 +	apic_write(APIC_LVT0, v & ~APIC_LVT_MASKED);
  55.235  }
  55.236  
  55.237  static void disable_lapic_irq (unsigned int irq)
  55.238 @@ -1648,7 +1716,7 @@ static void disable_lapic_irq (unsigned 
  55.239  	unsigned long v;
  55.240  
  55.241  	v = apic_read(APIC_LVT0);
  55.242 -	apic_write_around(APIC_LVT0, v | APIC_LVT_MASKED);
  55.243 +	apic_write(APIC_LVT0, v | APIC_LVT_MASKED);
  55.244  }
  55.245  
  55.246  static void ack_lapic_irq (unsigned int irq)
  55.247 @@ -1695,20 +1763,21 @@ static void setup_nmi (void)
  55.248   */
  55.249  static inline void unlock_ExtINT_logic(void)
  55.250  {
  55.251 -	int pin, i;
  55.252 +	int apic, pin, i;
  55.253  	struct IO_APIC_route_entry entry0, entry1;
  55.254  	unsigned char save_control, save_freq_select;
  55.255  	unsigned long flags;
  55.256  
  55.257 -	pin = find_isa_irq_pin(8, mp_INT);
  55.258 +	pin  = find_isa_irq_pin(8, mp_INT);
  55.259 +	apic = find_isa_irq_apic(8, mp_INT);
  55.260  	if (pin == -1)
  55.261  		return;
  55.262  
  55.263  	spin_lock_irqsave(&ioapic_lock, flags);
  55.264 -	*(((int *)&entry0) + 1) = io_apic_read(0, 0x11 + 2 * pin);
  55.265 -	*(((int *)&entry0) + 0) = io_apic_read(0, 0x10 + 2 * pin);
  55.266 +	*(((int *)&entry0) + 1) = io_apic_read(apic, 0x11 + 2 * pin);
  55.267 +	*(((int *)&entry0) + 0) = io_apic_read(apic, 0x10 + 2 * pin);
  55.268  	spin_unlock_irqrestore(&ioapic_lock, flags);
  55.269 -	clear_IO_APIC_pin(0, pin);
  55.270 +	clear_IO_APIC_pin(apic, pin);
  55.271  
  55.272  	memset(&entry1, 0, sizeof(entry1));
  55.273  
  55.274 @@ -1721,8 +1790,8 @@ static inline void unlock_ExtINT_logic(v
  55.275  	entry1.vector = 0;
  55.276  
  55.277  	spin_lock_irqsave(&ioapic_lock, flags);
  55.278 -	io_apic_write(0, 0x11 + 2 * pin, *(((int *)&entry1) + 1));
  55.279 -	io_apic_write(0, 0x10 + 2 * pin, *(((int *)&entry1) + 0));
  55.280 +	io_apic_write(apic, 0x11 + 2 * pin, *(((int *)&entry1) + 1));
  55.281 +	io_apic_write(apic, 0x10 + 2 * pin, *(((int *)&entry1) + 0));
  55.282  	spin_unlock_irqrestore(&ioapic_lock, flags);
  55.283  
  55.284  	save_control = CMOS_READ(RTC_CONTROL);
  55.285 @@ -1740,11 +1809,11 @@ static inline void unlock_ExtINT_logic(v
  55.286  
  55.287  	CMOS_WRITE(save_control, RTC_CONTROL);
  55.288  	CMOS_WRITE(save_freq_select, RTC_FREQ_SELECT);
  55.289 -	clear_IO_APIC_pin(0, pin);
  55.290 +	clear_IO_APIC_pin(apic, pin);
  55.291  
  55.292  	spin_lock_irqsave(&ioapic_lock, flags);
  55.293 -	io_apic_write(0, 0x11 + 2 * pin, *(((int *)&entry0) + 1));
  55.294 -	io_apic_write(0, 0x10 + 2 * pin, *(((int *)&entry0) + 0));
  55.295 +	io_apic_write(apic, 0x11 + 2 * pin, *(((int *)&entry0) + 1));
  55.296 +	io_apic_write(apic, 0x10 + 2 * pin, *(((int *)&entry0) + 0));
  55.297  	spin_unlock_irqrestore(&ioapic_lock, flags);
  55.298  }
  55.299  
  55.300 @@ -1756,7 +1825,7 @@ static inline void unlock_ExtINT_logic(v
  55.301   */
  55.302  static inline void check_timer(void)
  55.303  {
  55.304 -	int pin1, pin2;
  55.305 +	int apic1, pin1, apic2, pin2;
  55.306  	int vector;
  55.307  
  55.308  	/*
  55.309 @@ -1773,14 +1842,17 @@ static inline void check_timer(void)
  55.310  	 * the 8259A which implies the virtual wire has to be
  55.311  	 * disabled in the local APIC.
  55.312  	 */
  55.313 -	apic_write_around(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT);
  55.314 +	apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT);
  55.315  	init_8259A(1);
  55.316  	enable_8259A_irq(0);
  55.317  
  55.318 -	pin1 = find_isa_irq_pin(0, mp_INT);
  55.319 -	pin2 = find_isa_irq_pin(0, mp_ExtINT);
  55.320 +	pin1  = find_isa_irq_pin(0, mp_INT);
  55.321 +	apic1 = find_isa_irq_apic(0, mp_INT);
  55.322 +	pin2  = ioapic_i8259.pin;
  55.323 +	apic2 = ioapic_i8259.apic;
  55.324  
  55.325 -	apic_printk(APIC_VERBOSE,KERN_INFO "..TIMER: vector=0x%02X pin1=%d pin2=%d\n", vector, pin1, pin2);
  55.326 +	apic_printk(APIC_VERBOSE,KERN_INFO "..TIMER: vector=0x%02X apic1=%d pin1=%d apic2=%d pin2=%d\n",
  55.327 +		vector, apic1, pin1, apic2, pin2);
  55.328  
  55.329  	if (pin1 != -1) {
  55.330  		/*
  55.331 @@ -1798,17 +1870,20 @@ static inline void check_timer(void)
  55.332  				clear_IO_APIC_pin(0, pin1);
  55.333  			return;
  55.334  		}
  55.335 -		clear_IO_APIC_pin(0, pin1);
  55.336 -		apic_printk(APIC_QUIET,KERN_ERR "..MP-BIOS bug: 8254 timer not connected to IO-APIC\n");
  55.337 +		clear_IO_APIC_pin(apic1, pin1);
  55.338 +		apic_printk(APIC_QUIET,KERN_ERR "..MP-BIOS bug: 8254 timer not "
  55.339 +				"connected to IO-APIC\n");
  55.340  	}
  55.341  
  55.342 -	apic_printk(APIC_VERBOSE,KERN_INFO "...trying to set up timer (IRQ0) through the 8259A ... ");
  55.343 +	apic_printk(APIC_VERBOSE,KERN_INFO "...trying to set up timer (IRQ0) "
  55.344 +				"through the 8259A ... ");
  55.345  	if (pin2 != -1) {
  55.346 -		apic_printk(APIC_VERBOSE,"\n..... (found pin %d) ...", pin2);
  55.347 +		apic_printk(APIC_VERBOSE,"\n..... (found apic %d pin %d) ...",
  55.348 +			apic2, pin2);
  55.349  		/*
  55.350  		 * legacy devices should be connected to IO APIC #0
  55.351  		 */
  55.352 -		setup_ExtINT_IRQ0_pin(pin2, vector);
  55.353 +		setup_ExtINT_IRQ0_pin(apic2, pin2, vector);
  55.354  		if (timer_irq_works()) {
  55.355  			printk("works.\n");
  55.356  			nmi_watchdog_default();
  55.357 @@ -1820,7 +1895,7 @@ static inline void check_timer(void)
  55.358  		/*
  55.359  		 * Cleanup, just in case ...
  55.360  		 */
  55.361 -		clear_IO_APIC_pin(0, pin2);
  55.362 +		clear_IO_APIC_pin(apic2, pin2);
  55.363  	}
  55.364  	printk(" failed.\n");
  55.365  
  55.366 @@ -1833,21 +1908,21 @@ static inline void check_timer(void)
  55.367  
  55.368  	disable_8259A_irq(0);
  55.369  	irq_desc[0].handler = &lapic_irq_type;
  55.370 -	apic_write_around(APIC_LVT0, APIC_DM_FIXED | vector);	/* Fixed mode */
  55.371 +	apic_write(APIC_LVT0, APIC_DM_FIXED | vector);	/* Fixed mode */
  55.372  	enable_8259A_irq(0);
  55.373  
  55.374  	if (timer_irq_works()) {
  55.375  		apic_printk(APIC_QUIET, " works.\n");
  55.376  		return;
  55.377  	}
  55.378 -	apic_write_around(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_FIXED | vector);
  55.379 +	apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_FIXED | vector);
  55.380  	apic_printk(APIC_VERBOSE," failed.\n");
  55.381  
  55.382  	apic_printk(APIC_VERBOSE, KERN_INFO "...trying to set up timer as ExtINT IRQ...");
  55.383  
  55.384  	init_8259A(0);
  55.385  	make_8259A_irq(0);
  55.386 -	apic_write_around(APIC_LVT0, APIC_DM_EXTINT);
  55.387 +	apic_write(APIC_LVT0, APIC_DM_EXTINT);
  55.388  
  55.389  	unlock_ExtINT_logic();
  55.390  
    56.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/ioport-xen.c	Thu Feb 02 19:15:22 2006 +0100
    56.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/ioport-xen.c	Thu Feb 02 19:16:38 2006 +0000
    56.3 @@ -7,6 +7,7 @@
    56.4  
    56.5  #include <linux/sched.h>
    56.6  #include <linux/kernel.h>
    56.7 +#include <linux/capability.h>
    56.8  #include <linux/errno.h>
    56.9  #include <linux/types.h>
   56.10  #include <linux/ioport.h>
    57.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/irq-xen.c	Thu Feb 02 19:15:22 2006 +0100
    57.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/irq-xen.c	Thu Feb 02 19:16:38 2006 +0000
    57.3 @@ -17,6 +17,7 @@
    57.4  #include <linux/delay.h>
    57.5  #include <asm/uaccess.h>
    57.6  #include <asm/io_apic.h>
    57.7 +#include <asm/idle.h>
    57.8  
    57.9  atomic_t irq_err_count;
   57.10  #ifdef CONFIG_X86_IO_APIC
   57.11 @@ -69,13 +70,13 @@ skip:
   57.12  		seq_printf(p, "NMI: ");
   57.13  		for (j = 0; j < NR_CPUS; j++)
   57.14  			if (cpu_online(j))
   57.15 -				seq_printf(p, "%10u ", cpu_pda[j].__nmi_count);
   57.16 +				seq_printf(p, "%10u ", cpu_pda(j)->__nmi_count);
   57.17  		seq_putc(p, '\n');
   57.18  #ifdef CONFIG_X86_LOCAL_APIC
   57.19  		seq_printf(p, "LOC: ");
   57.20  		for (j = 0; j < NR_CPUS; j++)
   57.21  			if (cpu_online(j))
   57.22 -				seq_printf(p, "%10u ", cpu_pda[j].apic_timer_irqs);
   57.23 +				seq_printf(p, "%10u ", cpu_pda(j)->apic_timer_irqs);
   57.24  		seq_putc(p, '\n');
   57.25  #endif
   57.26  		seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count));
   57.27 @@ -98,6 +99,7 @@ asmlinkage unsigned int do_IRQ(struct pt
   57.28  	/* high bits used in ret_from_ code  */
   57.29          int irq = regs->orig_rax & __IRQ_MASK(HARDIRQ_BITS);
   57.30  
   57.31 +	exit_idle();
   57.32  	irq_enter();
   57.33  
   57.34  	__do_IRQ(irq, regs);
    58.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/pci-nommu-xen.c	Thu Feb 02 19:15:22 2006 +0100
    58.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/pci-nommu-xen.c	Thu Feb 02 19:16:38 2006 +0000
    58.3 @@ -6,93 +6,94 @@
    58.4  #include <linux/string.h>
    58.5  #include <asm/proto.h>
    58.6  #include <asm/processor.h>
    58.7 -
    58.8 -int iommu_merge = 0;
    58.9 -EXPORT_SYMBOL(iommu_merge);
   58.10 -
   58.11 -dma_addr_t bad_dma_address;
   58.12 -EXPORT_SYMBOL(bad_dma_address);
   58.13 -
   58.14 -int iommu_bio_merge = 0;
   58.15 -EXPORT_SYMBOL(iommu_bio_merge);
   58.16 +#include <asm/dma.h>
   58.17  
   58.18 -int iommu_sac_force = 0;
   58.19 -EXPORT_SYMBOL(iommu_sac_force);
   58.20 -
   58.21 -#if 0
   58.22 -/* 
   58.23 - * Dummy IO MMU functions
   58.24 - */
   58.25 -
   58.26 -void *dma_alloc_coherent(struct device *hwdev, size_t size,
   58.27 -			 dma_addr_t *dma_handle, gfp_t gfp)
   58.28 +static int
   58.29 +check_addr(char *name, struct device *hwdev, dma_addr_t bus, size_t size)
   58.30  {
   58.31 -	void *ret;
   58.32 -	u64 mask;
   58.33 -	int order = get_order(size);
   58.34 -
   58.35 -	if (hwdev)
   58.36 -		mask = hwdev->coherent_dma_mask & *hwdev->dma_mask;
   58.37 -	else
   58.38 -		mask = 0xffffffff;
   58.39 -	for (;;) {
   58.40 -		ret = (void *)__get_free_pages(gfp, order);
   58.41 -		if (ret == NULL)
   58.42 -			return NULL;
   58.43 -		*dma_handle = virt_to_bus(ret);
   58.44 -		if ((*dma_handle & ~mask) == 0)
   58.45 -			break;
   58.46 -		free_pages((unsigned long)ret, order);
   58.47 -		if (gfp & GFP_DMA)
   58.48 -			return NULL;
   58.49 -		gfp |= GFP_DMA;
   58.50 +        if (hwdev && bus + size > *hwdev->dma_mask) {
   58.51 +		printk(KERN_ERR
   58.52 +		    "nommu_%s: overflow %Lx+%lu of device mask %Lx\n",
   58.53 +	       name, (long long)bus, size, (long long)*hwdev->dma_mask);
   58.54 +		return 0;
   58.55  	}
   58.56 -
   58.57 -	memset(ret, 0, size);
   58.58 -	return ret;
   58.59 +	return 1;
   58.60  }
   58.61 -EXPORT_SYMBOL(dma_alloc_coherent);
   58.62  
   58.63 -void dma_free_coherent(struct device *hwdev, size_t size,
   58.64 -			 void *vaddr, dma_addr_t dma_handle)
   58.65 -{
   58.66 -	free_pages((unsigned long)vaddr, get_order(size));
   58.67 -}
   58.68 -EXPORT_SYMBOL(dma_free_coherent);
   58.69 -#endif
   58.70 -
   58.71 -#if 0
   58.72 -int dma_supported(struct device *hwdev, u64 mask)
   58.73 +static dma_addr_t
   58.74 +nommu_map_single(struct device *hwdev, void *ptr, size_t size,
   58.75 +	       int direction)
   58.76  {
   58.77 -        /*
   58.78 -         * we fall back to GFP_DMA when the mask isn't all 1s,
   58.79 -         * so we can't guarantee allocations that must be
   58.80 -         * within a tighter range than GFP_DMA..
   58.81 -	 * RED-PEN this won't work for pci_map_single. Caller has to
   58.82 -	 * use GFP_DMA in the first place.
   58.83 -         */
   58.84 -        if (mask < 0x00ffffff)
   58.85 -                return 0;
   58.86 -
   58.87 -	return 1;
   58.88 -} 
   58.89 -EXPORT_SYMBOL(dma_supported);
   58.90 -#endif
   58.91 +	dma_addr_t bus = virt_to_bus(ptr);
   58.92 +	if (!check_addr("map_single", hwdev, bus, size))
   58.93 +				return bad_dma_address;
   58.94 +	return bus;
   58.95 +}
   58.96  
   58.97 -int dma_get_cache_alignment(void)
   58.98 +void nommu_unmap_single(struct device *dev, dma_addr_t addr,size_t size,
   58.99 +			int direction)
  58.100  {
  58.101 -	return boot_cpu_data.x86_clflush_size;
  58.102  }
  58.103 -EXPORT_SYMBOL(dma_get_cache_alignment);
  58.104  
  58.105 -static int __init check_ram(void) 
  58.106 -{ 
  58.107 -	if (end_pfn >= 0xffffffff>>PAGE_SHIFT) { 
  58.108 -		printk(
  58.109 -		KERN_ERR "WARNING more than 4GB of memory but IOMMU not compiled in.\n"
  58.110 -		KERN_ERR "WARNING 32bit PCI may malfunction.\n");
  58.111 -	} 
  58.112 -	return 0;
  58.113 -} 
  58.114 -__initcall(check_ram);
  58.115 +/* Map a set of buffers described by scatterlist in streaming
  58.116 + * mode for DMA.  This is the scatter-gather version of the
  58.117 + * above pci_map_single interface.  Here the scatter gather list
  58.118 + * elements are each tagged with the appropriate dma address
  58.119 + * and length.  They are obtained via sg_dma_{address,length}(SG).
  58.120 + *
  58.121 + * NOTE: An implementation may be able to use a smaller number of
  58.122 + *       DMA address/length pairs than there are SG table elements.
  58.123 + *       (for example via virtual mapping capabilities)
  58.124 + *       The routine returns the number of addr/length pairs actually
  58.125 + *       used, at most nents.
  58.126 + *
  58.127 + * Device ownership issues as mentioned above for pci_map_single are
  58.128 + * the same here.
  58.129 + */
  58.130 +int nommu_map_sg(struct device *hwdev, struct scatterlist *sg,
  58.131 +	       int nents, int direction)
  58.132 +{
  58.133 +	int i;
  58.134  
  58.135 +	BUG_ON(direction == DMA_NONE);
  58.136 + 	for (i = 0; i < nents; i++ ) {
  58.137 +		struct scatterlist *s = &sg[i];
  58.138 +		BUG_ON(!s->page);
  58.139 +		s->dma_address = virt_to_bus(page_address(s->page) +s->offset);
  58.140 +		if (!check_addr("map_sg", hwdev, s->dma_address, s->length))
  58.141 +			return 0;
  58.142 +		s->dma_length = s->length;
  58.143 +	}
  58.144 +	return nents;
  58.145 +}
  58.146 +
  58.147 +/* Unmap a set of streaming mode DMA translations.
  58.148 + * Again, cpu read rules concerning calls here are the same as for
  58.149 + * pci_unmap_single() above.
  58.150 + */
  58.151 +void nommu_unmap_sg(struct device *dev, struct scatterlist *sg,
  58.152 +		  int nents, int dir)
  58.153 +{
  58.154 +}
  58.155 +
  58.156 +struct dma_mapping_ops nommu_dma_ops = {
  58.157 +	.map_single = nommu_map_single,
  58.158 +	.unmap_single = nommu_unmap_single,
  58.159 +	.map_sg = nommu_map_sg,
  58.160 +	.unmap_sg = nommu_unmap_sg,
  58.161 +	.is_phys = 1,
  58.162 +};
  58.163 +
  58.164 +void __init no_iommu_init(void)
  58.165 +{
  58.166 +	if (dma_ops)
  58.167 +		return;
  58.168 +	printk(KERN_INFO "PCI-DMA: Disabling IOMMU.\n");
  58.169 +	dma_ops = &nommu_dma_ops;
  58.170 +	if (end_pfn > MAX_DMA32_PFN) {
  58.171 +		printk(KERN_ERR
  58.172 +		       "WARNING more than 4GB of memory but IOMMU not compiled in.\n"
  58.173 +		       KERN_ERR "WARNING 32bit PCI may malfunction.\n"
  58.174 +		       KERN_ERR "You might want to enable CONFIG_GART_IOMMU\n");
  58.175 +	}
  58.176 +}
    59.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/process-xen.c	Thu Feb 02 19:15:22 2006 +0100
    59.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/process-xen.c	Thu Feb 02 19:16:38 2006 +0000
    59.3 @@ -39,6 +39,7 @@
    59.4  #include <linux/utsname.h>
    59.5  #include <linux/random.h>
    59.6  #include <linux/kprobes.h>
    59.7 +#include <linux/notifier.h>
    59.8  
    59.9  #include <asm/uaccess.h>
   59.10  #include <asm/pgtable.h>
   59.11 @@ -56,13 +57,12 @@
   59.12  #include <asm/proto.h>
   59.13  #include <asm/hardirq.h>
   59.14  #include <asm/ia32.h>
   59.15 +#include <asm/idle.h>
   59.16  
   59.17  asmlinkage extern void ret_from_fork(void);
   59.18  
   59.19  unsigned long kernel_thread_flags = CLONE_VM | CLONE_UNTRACED;
   59.20  
   59.21 -static atomic_t hlt_counter = ATOMIC_INIT(0);
   59.22 -
   59.23  unsigned long boot_option_idle_override = 0;
   59.24  EXPORT_SYMBOL(boot_option_idle_override);
   59.25  
   59.26 @@ -72,19 +72,49 @@ EXPORT_SYMBOL(boot_option_idle_override)
   59.27  void (*pm_idle)(void);
   59.28  static DEFINE_PER_CPU(unsigned int, cpu_idle_state);
   59.29  
   59.30 -void disable_hlt(void)
   59.31 +static struct notifier_block *idle_notifier;
   59.32 +static DEFINE_SPINLOCK(idle_notifier_lock);
   59.33 +
   59.34 +void idle_notifier_register(struct notifier_block *n)
   59.35  {
   59.36 -	atomic_inc(&hlt_counter);
   59.37 +	unsigned long flags;
   59.38 +	spin_lock_irqsave(&idle_notifier_lock, flags);
   59.39 +	notifier_chain_register(&idle_notifier, n);
   59.40 +	spin_unlock_irqrestore(&idle_notifier_lock, flags);
   59.41 +}
   59.42 +EXPORT_SYMBOL_GPL(idle_notifier_register);
   59.43 +
   59.44 +void idle_notifier_unregister(struct notifier_block *n)
   59.45 +{
   59.46 +	unsigned long flags;
   59.47 +	spin_lock_irqsave(&idle_notifier_lock, flags);
   59.48 +	notifier_chain_unregister(&idle_notifier, n);
   59.49 +	spin_unlock_irqrestore(&idle_notifier_lock, flags);
   59.50 +}
   59.51 +EXPORT_SYMBOL(idle_notifier_unregister);
   59.52 +
   59.53 +enum idle_state { CPU_IDLE, CPU_NOT_IDLE };
   59.54 +static DEFINE_PER_CPU(enum idle_state, idle_state) = CPU_NOT_IDLE;
   59.55 +
   59.56 +void enter_idle(void)
   59.57 +{
   59.58 +	__get_cpu_var(idle_state) = CPU_IDLE;
   59.59 +	notifier_call_chain(&idle_notifier, IDLE_START, NULL);
   59.60  }
   59.61  
   59.62 -EXPORT_SYMBOL(disable_hlt);
   59.63 -
   59.64 -void enable_hlt(void)
   59.65 +static void __exit_idle(void)
   59.66  {
   59.67 -	atomic_dec(&hlt_counter);
   59.68 +	__get_cpu_var(idle_state) = CPU_NOT_IDLE;
   59.69 +	notifier_call_chain(&idle_notifier, IDLE_END, NULL);
   59.70  }
   59.71  
   59.72 -EXPORT_SYMBOL(enable_hlt);
   59.73 +/* Called from interrupts to signify idle end */
   59.74 +void exit_idle(void)
   59.75 +{
   59.76 +	if (current->pid | read_pda(irqcount))
   59.77 +		return;
   59.78 +	__exit_idle();
   59.79 +}
   59.80  
   59.81  /* XXX XEN doesn't use default_idle(), poll_idle(). Use xen_idle() instead. */
   59.82  extern void stop_hz_timer(void);
   59.83 @@ -110,7 +140,7 @@ void xen_idle(void)
   59.84  DECLARE_PER_CPU(int, cpu_state);
   59.85  
   59.86  #include <asm/nmi.h>
   59.87 -/* We don't actually take CPU down, just spin without interrupts. */
   59.88 +/* We halt the CPU with physical CPU hotplug */
   59.89  static inline void play_dead(void)
   59.90  {
   59.91  	idle_task_exit();
   59.92 @@ -157,8 +187,9 @@ void cpu_idle (void)
   59.93  			
   59.94  			if (cpu_is_offline(smp_processor_id()))
   59.95  				play_dead();
   59.96 -
   59.97 +			enter_idle();
   59.98  			xen_idle();
   59.99 +			__exit_idle();
  59.100  		}
  59.101  
  59.102  		preempt_enable_no_resched();
  59.103 @@ -364,7 +395,7 @@ int copy_thread(int nr, unsigned long cl
  59.104  	struct task_struct *me = current;
  59.105  
  59.106  	childregs = ((struct pt_regs *)
  59.107 -			(THREAD_SIZE + (unsigned long) p->thread_info)) - 1;
  59.108 +			(THREAD_SIZE + task_stack_page(p))) - 1;
  59.109  	*childregs = *regs;
  59.110  
  59.111  	childregs->rax = 0;
  59.112 @@ -376,7 +407,7 @@ int copy_thread(int nr, unsigned long cl
  59.113  	p->thread.rsp0 = (unsigned long) (childregs+1);
  59.114  	p->thread.userrsp = me->thread.userrsp; 
  59.115  
  59.116 -	set_ti_thread_flag(p->thread_info, TIF_FORK);
  59.117 +	set_tsk_thread_flag(p, TIF_FORK);
  59.118  
  59.119  	p->thread.fs = me->thread.fs;
  59.120  	p->thread.gs = me->thread.gs;
  59.121 @@ -534,7 +565,7 @@ struct task_struct *
  59.122  	write_pda(oldrsp, next->userrsp); 
  59.123  	write_pda(pcurrent, next_p); 
  59.124  	write_pda(kernelstack,
  59.125 -	    (unsigned long)next_p->thread_info + THREAD_SIZE - PDA_STACKOFFSET);
  59.126 +		  task_stack_page(next_p) + THREAD_SIZE - PDA_STACKOFFSET);
  59.127  
  59.128  	/*
  59.129  	 * Now maybe reload the debug registers
  59.130 @@ -628,7 +659,7 @@ unsigned long get_wchan(struct task_stru
  59.131  
  59.132  	if (!p || p == current || p->state==TASK_RUNNING)
  59.133  		return 0; 
  59.134 -	stack = (unsigned long)p->thread_info; 
  59.135 +	stack = (unsigned long)task_stack_page(p);
  59.136  	if (p->thread.rsp < stack || p->thread.rsp > stack+THREAD_SIZE)
  59.137  		return 0;
  59.138  	fp = *(u64 *)(p->thread.rsp);
  59.139 @@ -748,8 +779,7 @@ int dump_task_regs(struct task_struct *t
  59.140  {
  59.141  	struct pt_regs *pp, ptregs;
  59.142  
  59.143 -	pp = (struct pt_regs *)(tsk->thread.rsp0);
  59.144 -	--pp; 
  59.145 +	pp = task_pt_regs(tsk);
  59.146  
  59.147  	ptregs = *pp; 
  59.148  	ptregs.cs &= 0xffff;
    60.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c	Thu Feb 02 19:15:22 2006 +0100
    60.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c	Thu Feb 02 19:16:38 2006 +0000
    60.3 @@ -35,6 +35,7 @@
    60.4  #include <asm/processor.h>
    60.5  #include <linux/console.h>
    60.6  #include <linux/seq_file.h>
    60.7 +#include <linux/crash_dump.h>
    60.8  #include <linux/root_dev.h>
    60.9  #include <linux/pci.h>
   60.10  #include <linux/acpi.h>
   60.11 @@ -42,6 +43,9 @@
   60.12  #include <linux/edd.h>
   60.13  #include <linux/mmzone.h>
   60.14  #include <linux/kexec.h>
   60.15 +#include <linux/cpufreq.h>
   60.16 +#include <linux/dmi.h>
   60.17 +#include <linux/dma-mapping.h>
   60.18  
   60.19  #include <asm/mtrr.h>
   60.20  #include <asm/uaccess.h>
   60.21 @@ -60,7 +64,9 @@
   60.22  #include <asm/setup.h>
   60.23  #include <asm/mach_apic.h>
   60.24  #include <asm/numa.h>
   60.25 +#include <asm/swiotlb.h>
   60.26  #include <asm/sections.h>
   60.27 +#include <asm/gart-mapping.h>
   60.28  #ifdef CONFIG_XEN
   60.29  #include <linux/percpu.h>
   60.30  #include <xen/interface/physdev.h>
   60.31 @@ -121,11 +127,6 @@ int bootloader_type;
   60.32  
   60.33  unsigned long saved_video_mode;
   60.34  
   60.35 -#ifdef CONFIG_SWIOTLB
   60.36 -int swiotlb;
   60.37 -EXPORT_SYMBOL(swiotlb);
   60.38 -#endif
   60.39 -
   60.40  /*
   60.41   * Setup options
   60.42   */
   60.43 @@ -316,19 +317,7 @@ static __init void parse_cmdline_early (
   60.44  {
   60.45  	char c = ' ', *to = command_line, *from = COMMAND_LINE;
   60.46  	int len = 0;
   60.47 -
   60.48 -	/* Save unparsed command line copy for /proc/cmdline */
   60.49 -#ifdef CONFIG_XEN
   60.50 -	int max_cmdline;
   60.51 -	
   60.52 -	if ((max_cmdline = MAX_GUEST_CMDLINE) > COMMAND_LINE_SIZE)
   60.53 -		max_cmdline = COMMAND_LINE_SIZE;
   60.54 -	memcpy(saved_command_line, xen_start_info->cmd_line, max_cmdline);
   60.55 -	saved_command_line[max_cmdline-1] = '\0';
   60.56 -#else
   60.57 -	memcpy(saved_command_line, COMMAND_LINE, COMMAND_LINE_SIZE);
   60.58 -	saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
   60.59 -#endif
   60.60 +	int userdef = 0;
   60.61  
   60.62  	for (;;) {
   60.63  		if (c != ' ') 
   60.64 @@ -392,10 +381,14 @@ static __init void parse_cmdline_early (
   60.65  		    !memcmp(from, "disableapic", 11))
   60.66  			disable_apic = 1;
   60.67  
   60.68 -		if (!memcmp(from, "noapic", 6)) 
   60.69 +		/* Don't confuse with noapictimer */
   60.70 +		if (!memcmp(from, "noapic", 6) &&
   60.71 +			(from[6] == ' ' || from[6] == 0))
   60.72  			skip_ioapic_setup = 1;
   60.73  
   60.74 -		if (!memcmp(from, "apic", 4)) { 
   60.75 +		/* Make sure to not confuse with apic= */
   60.76 +		if (!memcmp(from, "apic", 4) &&
   60.77 +			(from[4] == ' ' || from[4] == 0)) {
   60.78  			skip_ioapic_setup = 0;
   60.79  			ioapic_force = 1;
   60.80  		}
   60.81 @@ -404,16 +397,36 @@ static __init void parse_cmdline_early (
   60.82  		if (!memcmp(from, "mem=", 4))
   60.83  			parse_memopt(from+4, &from); 
   60.84  
   60.85 +		if (!memcmp(from, "memmap=", 7)) {
   60.86 +			/* exactmap option is for used defined memory */
   60.87 +			if (!memcmp(from+7, "exactmap", 8)) {
   60.88 +#ifdef CONFIG_CRASH_DUMP
   60.89 +				/* If we are doing a crash dump, we
   60.90 +				 * still need to know the real mem
   60.91 +				 * size before original memory map is
   60.92 +				 * reset.
   60.93 +				 */
   60.94 +				saved_max_pfn = e820_end_of_ram();
   60.95 +#endif
   60.96 +				from += 8+7;
   60.97 +				end_pfn_map = 0;
   60.98 +				e820.nr_map = 0;
   60.99 +				userdef = 1;
  60.100 +			}
  60.101 +			else {
  60.102 +				parse_memmapopt(from+7, &from);
  60.103 +				userdef = 1;
  60.104 +			}
  60.105 +		}
  60.106 +
  60.107  #ifdef CONFIG_NUMA
  60.108  		if (!memcmp(from, "numa=", 5))
  60.109  			numa_setup(from+5); 
  60.110  #endif
  60.111  
  60.112 -#ifdef CONFIG_GART_IOMMU 
  60.113  		if (!memcmp(from,"iommu=",6)) { 
  60.114  			iommu_setup(from+6); 
  60.115  		}
  60.116 -#endif
  60.117  
  60.118  		if (!memcmp(from,"oops=panic", 10))
  60.119  			panic_on_oops = 1;
  60.120 @@ -442,6 +455,14 @@ static __init void parse_cmdline_early (
  60.121  		}
  60.122  #endif
  60.123  
  60.124 +#ifdef CONFIG_PROC_VMCORE
  60.125 +		/* elfcorehdr= specifies the location of elf core header
  60.126 +		 * stored by the crashed kernel. This option will be passed
  60.127 +		 * by kexec loader to the capture kernel.
  60.128 +		 */
  60.129 +		else if(!memcmp(from, "elfcorehdr=", 11))
  60.130 +			elfcorehdr_addr = memparse(from+11, &from);
  60.131 +#endif
  60.132  	next_char:
  60.133  		c = *(from++);
  60.134  		if (!c)
  60.135 @@ -450,6 +471,10 @@ static __init void parse_cmdline_early (
  60.136  			break;
  60.137  		*(to++) = c;
  60.138  	}
  60.139 +	if (userdef) {
  60.140 +		printk(KERN_INFO "user-defined physical RAM map:\n");
  60.141 +		e820_print_map("user");
  60.142 +	}
  60.143  	*to = '\0';
  60.144  	*cmdline_p = command_line;
  60.145  }
  60.146 @@ -504,6 +529,8 @@ static unsigned char *k8_nops[ASM_NOP_MA
  60.147       k8nops + 1 + 2 + 3 + 4 + 5 + 6 + 7,
  60.148  }; 
  60.149  
  60.150 +extern char __vsyscall_0;
  60.151 +
  60.152  /* Replace instructions with better alternatives for this CPU type.
  60.153  
  60.154     This runs before SMP is initialized to avoid SMP problems with
  60.155 @@ -515,11 +542,17 @@ void apply_alternatives(void *start, voi
  60.156  	struct alt_instr *a; 
  60.157  	int diff, i, k;
  60.158  	for (a = start; (void *)a < end; a++) { 
  60.159 +		u8 *instr;
  60.160 +
  60.161  		if (!boot_cpu_has(a->cpuid))
  60.162  			continue;
  60.163  
  60.164  		BUG_ON(a->replacementlen > a->instrlen); 
  60.165 -		__inline_memcpy(a->instr, a->replacement, a->replacementlen); 
  60.166 +		instr = a->instr;
  60.167 +		/* vsyscall code is not mapped yet. resolve it manually. */
  60.168 +		if (instr >= (u8 *)VSYSCALL_START && instr < (u8*)VSYSCALL_END)
  60.169 +			instr -= VSYSCALL_START - (unsigned long)&__vsyscall_0;
  60.170 +		__inline_memcpy(instr, a->replacement, a->replacementlen);
  60.171  		diff = a->instrlen - a->replacementlen; 
  60.172  
  60.173  		/* Pad the rest with nops */
  60.174 @@ -527,7 +560,7 @@ void apply_alternatives(void *start, voi
  60.175  			k = diff;
  60.176  			if (k > ASM_NOP_MAX)
  60.177  				k = ASM_NOP_MAX;
  60.178 -			__inline_memcpy(a->instr + i, k8_nops[k], k); 
  60.179 +			__inline_memcpy(instr + i, k8_nops[k], k);
  60.180  		} 
  60.181  	}
  60.182  } 
  60.183 @@ -869,6 +902,8 @@ void __init setup_arch(char **cmdline_p)
  60.184  	acpi_boot_init();
  60.185  #endif
  60.186  
  60.187 +	init_cpu_to_node();
  60.188 +
  60.189  #ifdef CONFIG_X86_LOCAL_APIC
  60.190  	/*
  60.191  	 * get boot-time SMP configuration:
  60.192 @@ -1074,7 +1109,6 @@ static void __init amd_detect_cmp(struct
  60.193  static int __init init_amd(struct cpuinfo_x86 *c)
  60.194  {
  60.195  	int r;
  60.196 -	int level;
  60.197  
  60.198  #ifdef CONFIG_SMP
  60.199  	unsigned long value;
  60.200 @@ -1097,11 +1131,6 @@ static int __init init_amd(struct cpuinf
  60.201  	   3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway */
  60.202  	clear_bit(0*32+31, &c->x86_capability);
  60.203  	
  60.204 -	/* C-stepping K8? */
  60.205 -	level = cpuid_eax(1);
  60.206 -	if ((level >= 0x0f48 && level < 0x0f50) || level >= 0x0f58)
  60.207 -		set_bit(X86_FEATURE_K8_C, &c->x86_capability);
  60.208 -
  60.209  	r = get_model_name(c);
  60.210  	if (!r) { 
  60.211  		switch (c->x86) { 
  60.212 @@ -1114,6 +1143,10 @@ static int __init init_amd(struct cpuinf
  60.213  	} 
  60.214  	display_cacheinfo(c);
  60.215  
  60.216 +	/* c->x86_power is 8000_0007 edx. Bit 8 is constant TSC */
  60.217 +	if (c->x86_power & (1<<8))
  60.218 +		set_bit(X86_FEATURE_CONSTANT_TSC, &c->x86_capability);
  60.219 +
  60.220  	if (c->extended_cpuid_level >= 0x80000008) {
  60.221  		c->x86_max_cores = (cpuid_ecx(0x80000008) & 0xff) + 1;
  60.222  		if (c->x86_max_cores & (c->x86_max_cores - 1))
  60.223 @@ -1232,8 +1265,10 @@ static void __cpuinit init_intel(struct 
  60.224  
  60.225  	if (c->x86 == 15)
  60.226  		c->x86_cache_alignment = c->x86_clflush_size * 2;
  60.227 -	if (c->x86 >= 15)
  60.228 +	if ((c->x86 == 0xf && c->x86_model >= 0x03) ||
  60.229 +	    (c->x86 == 0x6 && c->x86_model >= 0x0e))
  60.230  		set_bit(X86_FEATURE_CONSTANT_TSC, &c->x86_capability);
  60.231 +	set_bit(X86_FEATURE_SYNC_RDTSC, &c->x86_capability);
  60.232   	c->x86_max_cores = intel_num_cpu_cores(c);
  60.233  
  60.234  	srat_detect_node();
  60.235 @@ -1432,7 +1467,7 @@ static int show_cpuinfo(struct seq_file 
  60.236  		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
  60.237  		NULL, NULL, NULL, "syscall", NULL, NULL, NULL, NULL,
  60.238  		NULL, NULL, NULL, NULL, "nx", NULL, "mmxext", NULL,
  60.239 -		NULL, "fxsr_opt", NULL, NULL, NULL, "lm", "3dnowext", "3dnow",
  60.240 +		NULL, "fxsr_opt", "rdtscp", NULL, NULL, "lm", "3dnowext", "3dnow",
  60.241  
  60.242  		/* Transmeta-defined */
  60.243  		"recovery", "longrun", NULL, "lrti", NULL, NULL, NULL, NULL,
  60.244 @@ -1460,7 +1495,7 @@ static int show_cpuinfo(struct seq_file 
  60.245  		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
  60.246  
  60.247  		/* AMD-defined (#2) */
  60.248 -		"lahf_lm", "cmp_legacy", NULL, NULL, NULL, NULL, NULL, NULL,
  60.249 +		"lahf_lm", "cmp_legacy", "svm", NULL, "cr8_legacy", NULL, NULL, NULL,
  60.250  		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
  60.251  		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
  60.252  		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
  60.253 @@ -1471,7 +1506,9 @@ static int show_cpuinfo(struct seq_file 
  60.254  		"vid",  /* voltage id control */
  60.255  		"ttp",  /* thermal trip */
  60.256  		"tm",
  60.257 -		"stc"
  60.258 +		"stc",
  60.259 +		NULL,
  60.260 +		/* nothing */	/* constant_tsc - moved to flags */
  60.261  	};
  60.262  
  60.263  
  60.264 @@ -1497,8 +1534,11 @@ static int show_cpuinfo(struct seq_file 
  60.265  		seq_printf(m, "stepping\t: unknown\n");
  60.266  	
  60.267  	if (cpu_has(c,X86_FEATURE_TSC)) {
  60.268 +		unsigned int freq = cpufreq_quick_get((unsigned)(c-cpu_data));
  60.269 +		if (!freq)
  60.270 +			freq = cpu_khz;
  60.271  		seq_printf(m, "cpu MHz\t\t: %u.%03u\n",
  60.272 -			     cpu_khz / 1000, (cpu_khz % 1000));
  60.273 +			     freq / 1000, (freq % 1000));
  60.274  	}
  60.275  
  60.276  	/* Cache size */
  60.277 @@ -1548,8 +1588,11 @@ static int show_cpuinfo(struct seq_file 
  60.278  		unsigned i;
  60.279  		for (i = 0; i < 32; i++) 
  60.280  			if (c->x86_power & (1 << i)) {
  60.281 -				if (i < ARRAY_SIZE(x86_power_flags))
  60.282 -					seq_printf(m, " %s", x86_power_flags[i]);
  60.283 +				if (i < ARRAY_SIZE(x86_power_flags) &&
  60.284 +					x86_power_flags[i])
  60.285 +					seq_printf(m, "%s%s",
  60.286 +						x86_power_flags[i][0]?" ":"",
  60.287 +						x86_power_flags[i]);
  60.288  				else
  60.289  					seq_printf(m, " [%d]", i);
  60.290  			}
  60.291 @@ -1581,3 +1624,11 @@ struct seq_operations cpuinfo_op = {
  60.292  	.stop =	c_stop,
  60.293  	.show =	show_cpuinfo,
  60.294  };
  60.295 +
  60.296 +static int __init run_dmi_scan(void)
  60.297 +{
  60.298 +	dmi_scan_machine();
  60.299 +	return 0;
  60.300 +}
  60.301 +core_initcall(run_dmi_scan);
  60.302 +
    61.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/setup64-xen.c	Thu Feb 02 19:15:22 2006 +0100
    61.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/setup64-xen.c	Thu Feb 02 19:16:38 2006 +0000
    61.3 @@ -37,14 +37,15 @@ char x86_boot_params[BOOT_PARAM_SIZE] __
    61.4  
    61.5  cpumask_t cpu_initialized __cpuinitdata = CPU_MASK_NONE;
    61.6  
    61.7 -struct x8664_pda cpu_pda[NR_CPUS] __cacheline_aligned; 
    61.8 +struct x8664_pda *_cpu_pda[NR_CPUS] __read_mostly;
    61.9 +struct x8664_pda boot_cpu_pda[NR_CPUS] __cacheline_aligned;
   61.10  
   61.11  struct desc_ptr idt_descr = { 256 * 16, (unsigned long) idt_table }; 
   61.12  
   61.13  char boot_cpu_stack[IRQSTACKSIZE] __attribute__((section(".bss.page_aligned")));
   61.14  
   61.15  unsigned long __supported_pte_mask __read_mostly = ~0UL;
   61.16 -static int do_not_nx __initdata = 0;
   61.17 +static int do_not_nx __cpuinitdata = 0;
   61.18  
   61.19  /* noexec=on|off
   61.20  Control non executable mappings for 64bit processes.
   61.21 @@ -117,7 +118,7 @@ void __init setup_per_cpu_areas(void)
   61.22  		}
   61.23  		if (!ptr)
   61.24  			panic("Cannot allocate cpu data for CPU %d\n", i);
   61.25 -		cpu_pda[i].data_offset = ptr - __per_cpu_start;
   61.26 +		cpu_pda(i)->data_offset = ptr - __per_cpu_start;
   61.27  		memcpy(ptr, __per_cpu_start, __per_cpu_end - __per_cpu_start);
   61.28  	}
   61.29  } 
   61.30 @@ -167,15 +168,14 @@ void __init cpu_gdt_init(struct desc_ptr
   61.31  
   61.32  void pda_init(int cpu)
   61.33  { 
   61.34 -	struct x8664_pda *pda = &cpu_pda[cpu];
   61.35 +	struct x8664_pda *pda = cpu_pda(cpu);
   61.36  
   61.37  	/* Setup up data that may be needed in __get_free_pages early */
   61.38  	asm volatile("movl %0,%%fs ; movl %0,%%gs" :: "r" (0)); 
   61.39  #ifndef CONFIG_XEN
   61.40 -	wrmsrl(MSR_GS_BASE, cpu_pda + cpu);
   61.41 +	wrmsrl(MSR_GS_BASE, pda);
   61.42  #else
   61.43 -	HYPERVISOR_set_segment_base(SEGBASE_GS_KERNEL, 
   61.44 -				    (unsigned long)(cpu_pda + cpu));
   61.45 +	HYPERVISOR_set_segment_base(SEGBASE_GS_KERNEL, (unsigned long)pda);
   61.46  #endif
   61.47  	pda->cpunumber = cpu; 
   61.48  	pda->irqcount = -1;
   61.49 @@ -203,7 +203,7 @@ void pda_init(int cpu)
   61.50  	pda->irqstackptr += IRQSTACKSIZE-64;
   61.51  } 
   61.52  
   61.53 -char boot_exception_stacks[N_EXCEPTION_STACKS * EXCEPTION_STKSZ] 
   61.54 +char boot_exception_stacks[(N_EXCEPTION_STACKS - 1) * EXCEPTION_STKSZ + DEBUG_STKSZ]
   61.55  __attribute__((section(".bss.page_aligned")));
   61.56  
   61.57  /* May not be marked __init: used by software suspend */
   61.58 @@ -272,28 +272,18 @@ void __cpuinit cpu_init (void)
   61.59  	 * Initialize the per-CPU GDT with the boot GDT,
   61.60  	 * and set up the GDT descriptor:
   61.61  	 */
   61.62 -#ifndef CONFIG_XEN 
   61.63 -	if (cpu) {
   61.64 -		memcpy(cpu_gdt_table[cpu], cpu_gdt_table[0], GDT_SIZE);
   61.65 -	}	
   61.66 +	if (cpu)
   61.67 + 		memcpy(cpu_gdt(cpu), cpu_gdt_table, GDT_SIZE);
   61.68  
   61.69  	cpu_gdt_descr[cpu].size = GDT_SIZE;
   61.70 -	cpu_gdt_descr[cpu].address = (unsigned long)cpu_gdt_table[cpu];
   61.71 -
   61.72 -	memcpy(me->thread.tls_array, cpu_gdt_table[cpu], GDT_ENTRY_TLS_ENTRIES * 8);
   61.73 +#ifndef CONFIG_XEN 
   61.74 + 	asm volatile("lgdt %0" :: "m" (cpu_gdt_descr[cpu]));
   61.75 + 	asm volatile("lidt %0" :: "m" (idt_descr));
   61.76  #else
   61.77 -	memcpy(me->thread.tls_array, &get_cpu_gdt_table(cpu)[GDT_ENTRY_TLS_MIN],
   61.78 -	    GDT_ENTRY_TLS_ENTRIES * 8);
   61.79 -
   61.80  	cpu_gdt_init(&cpu_gdt_descr[cpu]);
   61.81  #endif
   61.82 -       
   61.83 -	/*
   61.84 -	 * Delete NT
   61.85 -	 */
   61.86  
   61.87 -	asm volatile("pushfq ; popq %%rax ; btr $14,%%rax ; pushq %%rax ; popfq" ::: "eax");
   61.88 -
   61.89 +	memset(me->thread.tls_array, 0, GDT_ENTRY_TLS_ENTRIES * 8);
   61.90  	syscall_init();
   61.91  
   61.92  	wrmsrl(MSR_FS_BASE, 0);
   61.93 @@ -307,13 +297,27 @@ void __cpuinit cpu_init (void)
   61.94  	 */
   61.95  	for (v = 0; v < N_EXCEPTION_STACKS; v++) {
   61.96  		if (cpu) {
   61.97 -			estacks = (char *)__get_free_pages(GFP_ATOMIC, 
   61.98 -						   EXCEPTION_STACK_ORDER);
   61.99 +			static const unsigned int order[N_EXCEPTION_STACKS] = {
  61.100 +				[0 ... N_EXCEPTION_STACKS - 1] = EXCEPTION_STACK_ORDER,
  61.101 +				[DEBUG_STACK - 1] = DEBUG_STACK_ORDER
  61.102 +			};
  61.103 +
  61.104 +			estacks = (char *)__get_free_pages(GFP_ATOMIC, order[v]);
  61.105  			if (!estacks)
  61.106  				panic("Cannot allocate exception stack %ld %d\n",
  61.107  				      v, cpu); 
  61.108  		}
  61.109 -		estacks += EXCEPTION_STKSZ;
  61.110 +		switch (v + 1) {
  61.111 +#if DEBUG_STKSZ > EXCEPTION_STKSZ
  61.112 +		case DEBUG_STACK:
  61.113 +			cpu_pda[cpu].debugstack = (unsigned long)estacks;
  61.114 +			estacks += DEBUG_STKSZ;
  61.115 +			break;
  61.116 +#endif
  61.117 +		default:
  61.118 +			estacks += EXCEPTION_STKSZ;
  61.119 +			break;
  61.120 +		}
  61.121  		t->ist[v] = (unsigned long)estacks;
  61.122  	}
  61.123  
    62.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/smp-xen.c	Thu Feb 02 19:15:22 2006 +0100
    62.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/smp-xen.c	Thu Feb 02 19:16:38 2006 +0000
    62.3 @@ -27,6 +27,7 @@
    62.4  #include <asm/mmu_context.h>
    62.5  #include <asm/proto.h>
    62.6  #include <asm/apicdef.h>
    62.7 +#include <asm/idle.h>
    62.8  #ifdef CONFIG_XEN
    62.9  #include <xen/evtchn.h>
   62.10  #endif
   62.11 @@ -298,11 +299,6 @@ void flush_tlb_all(void)
   62.12  { xen_tlb_flush_all(); }
   62.13  #endif /* Xen */
   62.14  
   62.15 -void smp_kdb_stop(void)
   62.16 -{
   62.17 -	send_IPI_allbutself(KDB_VECTOR);
   62.18 -}
   62.19 -
   62.20  /*
   62.21   * this function sends a 'reschedule' IPI to another CPU.
   62.22   * it goes straight through and wastes no time serializing
   62.23 @@ -558,6 +554,7 @@ asmlinkage irqreturn_t smp_call_function
   62.24  	/*
   62.25  	 * At this point the info structure may be out of scope unless wait==1
   62.26  	 */
   62.27 +	exit_idle();
   62.28  	irq_enter();
   62.29  	(*func)(info);
   62.30  	irq_exit();
    63.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/traps-xen.c	Thu Feb 02 19:15:22 2006 +0100
    63.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/traps-xen.c	Thu Feb 02 19:16:38 2006 +0000
    63.3 @@ -70,7 +70,6 @@ asmlinkage void reserved(void);
    63.4  asmlinkage void alignment_check(void);
    63.5  asmlinkage void machine_check(void);
    63.6  asmlinkage void spurious_interrupt_bug(void);
    63.7 -asmlinkage void call_debug(void);
    63.8  
    63.9  struct notifier_block *die_chain;
   63.10  static DEFINE_SPINLOCK(die_notifier_lock);
   63.11 @@ -121,19 +120,31 @@ int printk_address(unsigned long address
   63.12  static unsigned long *in_exception_stack(unsigned cpu, unsigned long stack,
   63.13  					unsigned *usedp, const char **idp)
   63.14  {
   63.15 -	static const char ids[N_EXCEPTION_STACKS][8] = {
   63.16 +	static char ids[][8] = {
   63.17  		[DEBUG_STACK - 1] = "#DB",
   63.18  		[NMI_STACK - 1] = "NMI",
   63.19  		[DOUBLEFAULT_STACK - 1] = "#DF",
   63.20  		[STACKFAULT_STACK - 1] = "#SS",
   63.21  		[MCE_STACK - 1] = "#MC",
   63.22 +#if DEBUG_STKSZ > EXCEPTION_STKSZ
   63.23 +		[N_EXCEPTION_STACKS ... N_EXCEPTION_STACKS + DEBUG_STKSZ / EXCEPTION_STKSZ - 2] = "#DB[?]"
   63.24 +#endif
   63.25  	};
   63.26  	unsigned k;
   63.27  
   63.28  	for (k = 0; k < N_EXCEPTION_STACKS; k++) {
   63.29  		unsigned long end;
   63.30  
   63.31 -		end = per_cpu(init_tss, cpu).ist[k];
   63.32 +		switch (k + 1) {
   63.33 +#if DEBUG_STKSZ > EXCEPTION_STKSZ
   63.34 +		case DEBUG_STACK:
   63.35 +			end = cpu_pda(cpu)->debugstack + DEBUG_STKSZ;
   63.36 +			break;
   63.37 +#endif
   63.38 +		default:
   63.39 +			end = per_cpu(init_tss, cpu).ist[k];
   63.40 +			break;
   63.41 +		}
   63.42  		if (stack >= end)
   63.43  			continue;
   63.44  		if (stack >= end - EXCEPTION_STKSZ) {
   63.45 @@ -143,6 +154,22 @@ static unsigned long *in_exception_stack
   63.46  			*idp = ids[k];
   63.47  			return (unsigned long *)end;
   63.48  		}
   63.49 +#if DEBUG_STKSZ > EXCEPTION_STKSZ
   63.50 +		if (k == DEBUG_STACK - 1 && stack >= end - DEBUG_STKSZ) {
   63.51 +			unsigned j = N_EXCEPTION_STACKS - 1;
   63.52 +
   63.53 +			do {
   63.54 +				++j;
   63.55 +				end -= EXCEPTION_STKSZ;
   63.56 +				ids[j][4] = '1' + (j - N_EXCEPTION_STACKS);
   63.57 +			} while (stack < end - EXCEPTION_STKSZ);
   63.58 +			if (*usedp & (1U << j))
   63.59 +				break;
   63.60 +			*usedp |= 1U << j;
   63.61 +			*idp = ids[j];
   63.62 +			return (unsigned long *)end;
   63.63 +		}
   63.64 +#endif
   63.65  	}
   63.66  	return NULL;
   63.67  }
   63.68 @@ -156,9 +183,8 @@ static unsigned long *in_exception_stack
   63.69  
   63.70  void show_trace(unsigned long *stack)
   63.71  {
   63.72 -	unsigned long addr;
   63.73  	const unsigned cpu = safe_smp_processor_id();
   63.74 -	unsigned long *irqstack_end = (unsigned long *)cpu_pda[cpu].irqstackptr;
   63.75 +	unsigned long *irqstack_end = (unsigned long *)cpu_pda(cpu)->irqstackptr;
   63.76  	int i;
   63.77  	unsigned used = 0;
   63.78  
   63.79 @@ -166,8 +192,14 @@ void show_trace(unsigned long *stack)
   63.80  
   63.81  #define HANDLE_STACK(cond) \
   63.82  	do while (cond) { \
   63.83 -		addr = *stack++; \
   63.84 +		unsigned long addr = *stack++; \
   63.85  		if (kernel_text_address(addr)) { \
   63.86 +			if (i > 50) { \
   63.87 +				printk("\n       "); \
   63.88 +				i = 0; \
   63.89 +			} \
   63.90 +			else \
   63.91 +				i += printk(" "); \
   63.92  			/* \
   63.93  			 * If the address is either in the text segment of the \
   63.94  			 * kernel, or in the region which contains vmalloc'ed \
   63.95 @@ -177,25 +209,19 @@ void show_trace(unsigned long *stack)
   63.96  			 * out the call path that was taken. \
   63.97  			 */ \
   63.98  			i += printk_address(addr); \
   63.99 -			if (i > 50) { \
  63.100 -				printk("\n       "); \
  63.101 -				i = 0; \
  63.102 -			} \
  63.103 -			else \
  63.104 -				i += printk(" "); \
  63.105  		} \
  63.106  	} while (0)
  63.107  
  63.108 -	for(i = 0; ; ) {
  63.109 +	for(i = 11; ; ) {
  63.110  		const char *id;
  63.111  		unsigned long *estack_end;
  63.112  		estack_end = in_exception_stack(cpu, (unsigned long)stack,
  63.113  						&used, &id);
  63.114  
  63.115  		if (estack_end) {
  63.116 -			i += printk(" <%s> ", id);
  63.117 +			i += printk(" <%s>", id);
  63.118  			HANDLE_STACK (stack < estack_end);
  63.119 -			i += printk(" <EOE> ");
  63.120 +			i += printk(" <EOE>");
  63.121  			stack = (unsigned long *) estack_end[-2];
  63.122  			continue;
  63.123  		}
  63.124 @@ -205,11 +231,11 @@ void show_trace(unsigned long *stack)
  63.125  				(IRQSTACKSIZE - 64) / sizeof(*irqstack);
  63.126  
  63.127  			if (stack >= irqstack && stack < irqstack_end) {
  63.128 -				i += printk(" <IRQ> ");
  63.129 +				i += printk(" <IRQ>");
  63.130  				HANDLE_STACK (stack < irqstack_end);
  63.131  				stack = (unsigned long *) (irqstack_end[-1]);
  63.132  				irqstack_end = NULL;
  63.133 -				i += printk(" <EOI> ");
  63.134 +				i += printk(" <EOI>");
  63.135  				continue;
  63.136  			}
  63.137  		}
  63.138 @@ -226,8 +252,8 @@ void show_stack(struct task_struct *tsk,
  63.139  	unsigned long *stack;
  63.140  	int i;
  63.141  	const int cpu = safe_smp_processor_id();
  63.142 -	unsigned long *irqstack_end = (unsigned long *) (cpu_pda[cpu].irqstackptr);
  63.143 -	unsigned long *irqstack = (unsigned long *) (cpu_pda[cpu].irqstackptr - IRQSTACKSIZE);    
  63.144 +	unsigned long *irqstack_end = (unsigned long *) (cpu_pda(cpu)->irqstackptr);
  63.145 +	unsigned long *irqstack = (unsigned long *) (cpu_pda(cpu)->irqstackptr - IRQSTACKSIZE);
  63.146  
  63.147  	// debugging aid: "show_stack(NULL, NULL);" prints the
  63.148  	// back trace for this cpu.
  63.149 @@ -275,14 +301,14 @@ void show_registers(struct pt_regs *regs
  63.150  	int in_kernel = !user_mode(regs);
  63.151  	unsigned long rsp;
  63.152  	const int cpu = safe_smp_processor_id(); 
  63.153 -	struct task_struct *cur = cpu_pda[cpu].pcurrent; 
  63.154 +	struct task_struct *cur = cpu_pda(cpu)->pcurrent;
  63.155  
  63.156  		rsp = regs->rsp;
  63.157  
  63.158  	printk("CPU %d ", cpu);
  63.159  	__show_regs(regs);
  63.160  	printk("Process %s (pid: %d, threadinfo %p, task %p)\n",
  63.161 -		cur->comm, cur->pid, cur->thread_info, cur);
  63.162 +		cur->comm, cur->pid, task_thread_info(cur), cur);
  63.163  
  63.164  	/*
  63.165  	 * When in-kernel, we also print out the stack and code at the
  63.166 @@ -314,20 +340,26 @@ bad:
  63.167  void handle_BUG(struct pt_regs *regs)
  63.168  { 
  63.169  	struct bug_frame f;
  63.170 -	char tmp;
  63.171 +	long len;
  63.172 +	const char *prefix = "";
  63.173  
  63.174  	if (user_mode(regs))
  63.175  		return; 
  63.176 -	if (__copy_from_user(&f, (struct bug_frame *) regs->rip, 
  63.177 +	if (__copy_from_user(&f, (const void __user *) regs->rip,
  63.178  			     sizeof(struct bug_frame)))
  63.179  		return; 
  63.180  	if (f.filename >= 0 ||
  63.181  	    f.ud2[0] != 0x0f || f.ud2[1] != 0x0b) 
  63.182  		return;
  63.183 -	if (__get_user(tmp, (char *)(long)f.filename))
  63.184 +	len = __strnlen_user((char *)(long)f.filename, PATH_MAX) - 1;
  63.185 +	if (len < 0 || len >= PATH_MAX)
  63.186  		f.filename = (int)(long)"unmapped filename";
  63.187 +	else if (len > 50) {
  63.188 +		f.filename += len - 50;
  63.189 +		prefix = "...";
  63.190 +	}
  63.191  	printk("----------- [cut here ] --------- [please bite here ] ---------\n");
  63.192 -	printk(KERN_ALERT "Kernel BUG at %.50s:%d\n", (char *)(long)f.filename, f.line);
  63.193 +	printk(KERN_ALERT "Kernel BUG at %s%.50s:%d\n", prefix, (char *)(long)f.filename, f.line);
  63.194  } 
  63.195  
  63.196  #ifdef CONFIG_BUG
  63.197 @@ -382,7 +414,7 @@ void __die(const char * str, struct pt_r
  63.198  	printk("DEBUG_PAGEALLOC");
  63.199  #endif
  63.200  	printk("\n");
  63.201 -	notify_die(DIE_OOPS, (char *)str, regs, err, 255, SIGSEGV);
  63.202 +	notify_die(DIE_OOPS, str, regs, err, current->thread.trap_no, SIGSEGV);
  63.203  	show_registers(regs);
  63.204  	/* Executive summary in case the oops scrolled away */
  63.205  	printk(KERN_ALERT "RIP ");
  63.206 @@ -399,11 +431,6 @@ void die(const char * str, struct pt_reg
  63.207  	oops_end(flags);
  63.208  	do_exit(SIGSEGV); 
  63.209  }
  63.210 -static inline void die_if_kernel(const char * str, struct pt_regs * regs, long err)
  63.211 -{
  63.212 -	if (!(regs->eflags & VM_MASK) && (regs->cs == __KERNEL_CS))
  63.213 -		die(str, regs, err);
  63.214 -}
  63.215  
  63.216  #ifdef CONFIG_X86_LOCAL_APIC
  63.217  void die_nmi(char *str, struct pt_regs *regs)
  63.218 @@ -428,19 +455,20 @@ static void __kprobes do_trap(int trapnr
  63.219  			      struct pt_regs * regs, long error_code,
  63.220  			      siginfo_t *info)
  63.221  {
  63.222 +	struct task_struct *tsk = current;
  63.223 +
  63.224  	conditional_sti(regs);
  63.225  
  63.226 +	tsk->thread.error_code = error_code;
  63.227 +	tsk->thread.trap_no = trapnr;
  63.228 +
  63.229  	if (user_mode(regs)) {
  63.230 -		struct task_struct *tsk = current;
  63.231 -
  63.232  		if (exception_trace && unhandled_signal(tsk, signr))
  63.233  			printk(KERN_INFO
  63.234  			       "%s[%d] trap %s rip:%lx rsp:%lx error:%lx\n",
  63.235  			       tsk->comm, tsk->pid, str,
  63.236  			       regs->rip,regs->rsp,error_code); 
  63.237  
  63.238 -		tsk->thread.error_code = error_code;
  63.239 -		tsk->thread.trap_no = trapnr;
  63.240  		if (info)
  63.241  			force_sig_info(signr, info, tsk);
  63.242  		else
  63.243 @@ -487,7 +515,7 @@ asmlinkage void do_##name(struct pt_regs
  63.244  DO_ERROR_INFO( 0, SIGFPE,  "divide error", divide_error, FPE_INTDIV, regs->rip)
  63.245  DO_ERROR( 4, SIGSEGV, "overflow", overflow)
  63.246  DO_ERROR( 5, SIGSEGV, "bounds", bounds)
  63.247 -DO_ERROR_INFO( 6, SIGILL,  "invalid operand", invalid_op, ILL_ILLOPN, regs->rip)
  63.248 +DO_ERROR_INFO( 6, SIGILL,  "invalid opcode", invalid_op, ILL_ILLOPN, regs->rip)
  63.249  DO_ERROR( 7, SIGSEGV, "device not available", device_not_available)
  63.250  DO_ERROR( 9, SIGFPE,  "coprocessor segment overrun", coprocessor_segment_overrun)
  63.251  DO_ERROR(10, SIGSEGV, "invalid TSS", invalid_TSS)
  63.252 @@ -495,24 +523,41 @@ DO_ERROR(11, SIGBUS,  "segment not prese
  63.253  DO_ERROR_INFO(17, SIGBUS, "alignment check", alignment_check, BUS_ADRALN, 0)
  63.254  DO_ERROR(18, SIGSEGV, "reserved", reserved)
  63.255  DO_ERROR(12, SIGBUS,  "stack segment", stack_segment)
  63.256 -DO_ERROR( 8, SIGSEGV, "double fault", double_fault)
  63.257 +
  63.258 +asmlinkage void do_double_fault(struct pt_regs * regs, long error_code)
  63.259 +{
  63.260 +	static const char str[] = "double fault";
  63.261 +	struct task_struct *tsk = current;
  63.262 +
  63.263 +	/* Return not checked because double check cannot be ignored */
  63.264 +	notify_die(DIE_TRAP, str, regs, error_code, 8, SIGSEGV);
  63.265 +
  63.266 +	tsk->thread.error_code = error_code;
  63.267 +	tsk->thread.trap_no = 8;
  63.268 +
  63.269 +	/* This is always a kernel trap and never fixable (and thus must
  63.270 +	   never return). */
  63.271 +	for (;;)
  63.272 +		die(str, regs, error_code);
  63.273 +}
  63.274  
  63.275  asmlinkage void __kprobes do_general_protection(struct pt_regs * regs,
  63.276  						long error_code)
  63.277  {
  63.278 +	struct task_struct *tsk = current;
  63.279 +
  63.280  	conditional_sti(regs);
  63.281  
  63.282 +	tsk->thread.error_code = error_code;
  63.283 +	tsk->thread.trap_no = 13;
  63.284 +
  63.285  	if (user_mode(regs)) {
  63.286 -		struct task_struct *tsk = current;
  63.287 -
  63.288  		if (exception_trace && unhandled_signal(tsk, SIGSEGV))
  63.289  			printk(KERN_INFO
  63.290  		       "%s[%d] general protection rip:%lx rsp:%lx error:%lx\n",
  63.291  			       tsk->comm, tsk->pid,
  63.292  			       regs->rip,regs->rsp,error_code); 
  63.293  
  63.294 -		tsk->thread.error_code = error_code;
  63.295 -		tsk->thread.trap_no = 13;
  63.296  		force_sig(SIGSEGV, tsk);
  63.297  		return;
  63.298  	} 
  63.299 @@ -579,7 +624,7 @@ asmlinkage void default_do_nmi(struct pt
  63.300  		reason = get_nmi_reason();
  63.301  
  63.302  	if (!(reason & 0xc0)) {
  63.303 -		if (notify_die(DIE_NMI_IPI, "nmi_ipi", regs, reason, 0, SIGINT)
  63.304 +		if (notify_die(DIE_NMI_IPI, "nmi_ipi", regs, reason, 2, SIGINT)
  63.305  								== NOTIFY_STOP)
  63.306  			return;
  63.307  #ifdef CONFIG_X86_LOCAL_APIC
  63.308 @@ -595,7 +640,7 @@ asmlinkage void default_do_nmi(struct pt
  63.309  		unknown_nmi_error(reason, regs);
  63.310  		return;
  63.311  	}
  63.312 -	if (notify_die(DIE_NMI, "nmi", regs, reason, 0, SIGINT) == NOTIFY_STOP)
  63.313 +	if (notify_die(DIE_NMI, "nmi", regs, reason, 2, SIGINT) == NOTIFY_STOP)
  63.314  		return; 
  63.315  
  63.316  	/* AK: following checks seem to be broken on modern chipsets. FIXME */
  63.317 @@ -606,6 +651,7 @@ asmlinkage void default_do_nmi(struct pt
  63.318  		io_check_error(reason, regs);
  63.319  }
  63.320  
  63.321 +/* runs on IST stack. */
  63.322  asmlinkage void __kprobes do_int3(struct pt_regs * regs, long error_code)
  63.323  {
  63.324  	if (notify_die(DIE_INT3, "int3", regs, error_code, 3, SIGTRAP) == NOTIFY_STOP) {
  63.325 @@ -626,7 +672,7 @@ asmlinkage struct pt_regs *sync_regs(str
  63.326  		;
  63.327  	/* Exception from user space */
  63.328  	else if (user_mode(eregs))
  63.329 -		regs = ((struct pt_regs *)current->thread.rsp0) - 1;
  63.330 +		regs = task_pt_regs(current);
  63.331  	/* Exception from kernel and interrupts are enabled. Move to
  63.332   	   kernel process stack. */
  63.333  	else if (eregs->eflags & X86_EFLAGS_IF)
  63.334 @@ -690,11 +736,9 @@ asmlinkage void __kprobes do_debug(struc
  63.335  	info.si_signo = SIGTRAP;
  63.336  	info.si_errno = 0;
  63.337  	info.si_code = TRAP_BRKPT;
  63.338 -	if (!user_mode(regs))
  63.339 -		goto clear_dr7; 
  63.340 +	info.si_addr = user_mode(regs) ? (void __user *)regs->rip : NULL;
  63.341 +	force_sig_info(SIGTRAP, &info, tsk);
  63.342  
  63.343 -	info.si_addr = (void __user *)regs->rip;
  63.344 -	force_sig_info(SIGTRAP, &info, tsk);	
  63.345  clear_dr7:
  63.346  	set_debugreg(0UL, 7);
  63.347  	return;
  63.348 @@ -704,7 +748,7 @@ clear_TF_reenable:
  63.349  	regs->eflags &= ~TF_MASK;
  63.350  }
  63.351  
  63.352 -static int kernel_math_error(struct pt_regs *regs, char *str)
  63.353 +static int kernel_math_error(struct pt_regs *regs, const char *str, int trapnr)
  63.354  {
  63.355  	const struct exception_table_entry *fixup;
  63.356  	fixup = search_exception_tables(regs->rip);
  63.357 @@ -712,8 +756,9 @@ static int kernel_math_error(struct pt_r
  63.358  		regs->rip = fixup->fixup;
  63.359  		return 1;
  63.360  	}
  63.361 -	notify_die(DIE_GPF, str, regs, 0, 16, SIGFPE);
  63.362 +	notify_die(DIE_GPF, str, regs, 0, trapnr, SIGFPE);
  63.363  	/* Illegal floating point operation in the kernel */
  63.364 +	current->thread.trap_no = trapnr;
  63.365  	die(str, regs, 0);
  63.366  	return 0;
  63.367  }
  63.368 @@ -732,7 +777,7 @@ asmlinkage void do_coprocessor_error(str
  63.369  
  63.370  	conditional_sti(regs);
  63.371  	if (!user_mode(regs) &&
  63.372 -	    kernel_math_error(regs, "kernel x87 math error"))
  63.373 +	    kernel_math_error(regs, "kernel x87 math error", 16))
  63.374  		return;
  63.375  
  63.376  	/*
  63.377 @@ -801,7 +846,7 @@ asmlinkage void do_simd_coprocessor_erro
  63.378  
  63.379  	conditional_sti(regs);
  63.380  	if (!user_mode(regs) &&
  63.381 -        	kernel_math_error(regs, "kernel simd math error"))
  63.382 +        	kernel_math_error(regs, "kernel simd math error", 19))
  63.383  		return;
  63.384  
  63.385  	/*
  63.386 @@ -875,12 +920,7 @@ asmlinkage void math_state_restore(void)
  63.387  	if (!used_math())
  63.388  		init_fpu(me);
  63.389  	restore_fpu_checking(&me->thread.i387.fxsave);
  63.390 -	me->thread_info->status |= TS_USEDFPU;
  63.391 -}
  63.392 -
  63.393 -void do_call_debug(struct pt_regs *regs) 
  63.394 -{ 
  63.395 -	notify_die(DIE_CALL, "debug call", regs, 0, 255, SIGINT); 
  63.396 +	task_thread_info(me)->status |= TS_USEDFPU;
  63.397  }
  63.398  
  63.399  
  63.400 @@ -893,7 +933,7 @@ static trap_info_t trap_table[] = {
  63.401          {  1, 0|4, (__KERNEL_CS|0x3), (unsigned long)debug                      },
  63.402          {  3, 3|4, (__KERNEL_CS|0x3), (unsigned long)int3                       },
  63.403          {  4, 3|4, (__KERNEL_CS|0x3), (unsigned long)overflow                   },
  63.404 -        {  5, 3|4, (__KERNEL_CS|0x3), (unsigned long)bounds                     },
  63.405 +        {  5, 0|4, (__KERNEL_CS|0x3), (unsigned long)bounds                     },
  63.406          {  6, 0|4, (__KERNEL_CS|0x3), (unsigned long)invalid_op                 },
  63.407          {  7, 0|4, (__KERNEL_CS|0x3), (unsigned long)device_not_available       },
  63.408          {  9, 0|4, (__KERNEL_CS|0x3), (unsigned long)coprocessor_segment_overrun},
    64.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/vsyscall-xen.c	Thu Feb 02 19:15:22 2006 +0100
    64.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/vsyscall-xen.c	Thu Feb 02 19:16:38 2006 +0000
    64.3 @@ -35,14 +35,13 @@
    64.4  #include <asm/io.h>
    64.5  
    64.6  #define __vsyscall(nr) __attribute__ ((unused,__section__(".vsyscall_" #nr)))
    64.7 -#define force_inline __attribute__((always_inline)) inline
    64.8  
    64.9  int __sysctl_vsyscall __section_sysctl_vsyscall = 1;
   64.10  seqlock_t __xtime_lock __section_xtime_lock = SEQLOCK_UNLOCKED;
   64.11  
   64.12  #include <asm/unistd.h>
   64.13  
   64.14 -static force_inline void timeval_normalize(struct timeval * tv)
   64.15 +static __always_inline void timeval_normalize(struct timeval * tv)
   64.16  {
   64.17  	time_t __sec;
   64.18  
   64.19 @@ -53,7 +52,7 @@ static force_inline void timeval_normali
   64.20  	}
   64.21  }
   64.22  
   64.23 -static force_inline void do_vgettimeofday(struct timeval * tv)
   64.24 +static __always_inline void do_vgettimeofday(struct timeval * tv)
   64.25  {
   64.26  	long sequence, t;
   64.27  	unsigned long sec, usec;
   64.28 @@ -66,8 +65,7 @@ static force_inline void do_vgettimeofda
   64.29  			(__jiffies - __wall_jiffies) * (1000000 / HZ);
   64.30  
   64.31  		if (__vxtime.mode != VXTIME_HPET) {
   64.32 -			sync_core();
   64.33 -			rdtscll(t);
   64.34 +			t = get_cycles_sync();
   64.35  			if (t < __vxtime.last_tsc)
   64.36  				t = __vxtime.last_tsc;
   64.37  			usec += ((t - __vxtime.last_tsc) *
   64.38 @@ -84,12 +82,12 @@ static force_inline void do_vgettimeofda
   64.39  }
   64.40  
   64.41  /* RED-PEN may want to readd seq locking, but then the variable should be write-once. */
   64.42 -static force_inline void do_get_tz(struct timezone * tz)
   64.43 +static __always_inline void do_get_tz(struct timezone * tz)
   64.44  {
   64.45  	*tz = __sys_tz;
   64.46  }
   64.47  
   64.48 -static force_inline int gettimeofday(struct timeval *tv, struct timezone *tz)
   64.49 +static __always_inline int gettimeofday(struct timeval *tv, struct timezone *tz)
   64.50  {
   64.51  	int ret;
   64.52  	asm volatile("vsysc2: syscall"
   64.53 @@ -98,7 +96,7 @@ static force_inline int gettimeofday(str
   64.54  	return ret;
   64.55  }
   64.56  
   64.57 -static force_inline long time_syscall(long *t)
   64.58 +static __always_inline long time_syscall(long *t)
   64.59  {
   64.60  	long secs;
   64.61  	asm volatile("vsysc1: syscall"
    65.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/x8664_ksyms-xen.c	Thu Feb 02 19:15:22 2006 +0100
    65.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/x8664_ksyms-xen.c	Thu Feb 02 19:16:38 2006 +0000
    65.3 @@ -13,7 +13,6 @@
    65.4  #include <linux/string.h>
    65.5  #include <linux/syscalls.h>
    65.6  #include <linux/tty.h>
    65.7 -#include <linux/ioctl32.h>
    65.8  
    65.9  #include <asm/semaphore.h>
   65.10  #include <asm/processor.h>
   65.11 @@ -45,24 +44,17 @@ extern struct drive_info_struct drive_in
   65.12  EXPORT_SYMBOL(drive_info);
   65.13  #endif
   65.14  
   65.15 -extern unsigned long get_cmos_time(void);
   65.16 -
   65.17  /* platform dependent support */
   65.18  EXPORT_SYMBOL(boot_cpu_data);
   65.19  //EXPORT_SYMBOL(dump_fpu);
   65.20  EXPORT_SYMBOL(__ioremap);
   65.21  EXPORT_SYMBOL(ioremap_nocache);
   65.22  EXPORT_SYMBOL(iounmap);
   65.23 -EXPORT_SYMBOL(enable_irq);
   65.24 -EXPORT_SYMBOL(disable_irq);
   65.25 -EXPORT_SYMBOL(disable_irq_nosync);
   65.26 -EXPORT_SYMBOL(probe_irq_mask);
   65.27  EXPORT_SYMBOL(kernel_thread);
   65.28  EXPORT_SYMBOL(pm_idle);
   65.29  #ifdef CONFIG_ACPI_BOOT
   65.30  EXPORT_SYMBOL(pm_power_off);
   65.31  #endif
   65.32 -EXPORT_SYMBOL(get_cmos_time);
   65.33  
   65.34  EXPORT_SYMBOL(__down_failed);
   65.35  EXPORT_SYMBOL(__down_failed_interruptible);
   65.36 @@ -86,9 +78,6 @@ EXPORT_SYMBOL(__put_user_2);
   65.37  EXPORT_SYMBOL(__put_user_4);
   65.38  EXPORT_SYMBOL(__put_user_8);
   65.39  
   65.40 -EXPORT_SYMBOL(strpbrk);
   65.41 -EXPORT_SYMBOL(strstr);
   65.42 -
   65.43  EXPORT_SYMBOL(strncpy_from_user);
   65.44  EXPORT_SYMBOL(__strncpy_from_user);
   65.45  EXPORT_SYMBOL(clear_user);
   65.46 @@ -100,23 +89,17 @@ EXPORT_SYMBOL(copy_in_user);
   65.47  EXPORT_SYMBOL(strnlen_user);
   65.48  
   65.49  #ifdef CONFIG_PCI
   65.50 -EXPORT_SYMBOL(pci_alloc_consistent);
   65.51 -EXPORT_SYMBOL(pci_free_consistent);
   65.52 -#endif
   65.53 -
   65.54 -#ifdef CONFIG_PCI
   65.55  EXPORT_SYMBOL(pci_mem_start);
   65.56  #endif
   65.57  
   65.58  EXPORT_SYMBOL(copy_page);
   65.59  EXPORT_SYMBOL(clear_page);
   65.60  
   65.61 -EXPORT_SYMBOL(cpu_pda);
   65.62 +EXPORT_SYMBOL(_cpu_pda);
   65.63  #ifdef CONFIG_SMP
   65.64  EXPORT_SYMBOL(__write_lock_failed);
   65.65  EXPORT_SYMBOL(__read_lock_failed);
   65.66  
   65.67 -EXPORT_SYMBOL(synchronize_irq);
   65.68  EXPORT_SYMBOL(smp_call_function);
   65.69  #endif
   65.70  
   65.71 @@ -138,30 +121,17 @@ EXPORT_SYMBOL_GPL(unset_nmi_callback);
   65.72  #undef memcpy
   65.73  #undef memset
   65.74  #undef memmove
   65.75 -#undef memchr
   65.76  #undef strlen
   65.77 -#undef strncmp
   65.78 -#undef strncpy
   65.79 -#undef strchr	
   65.80  
   65.81  extern void * memset(void *,int,__kernel_size_t);
   65.82  extern size_t strlen(const char *);
   65.83  extern void * memmove(void * dest,const void *src,size_t count);
   65.84 -extern void *memchr(const void *s, int c, size_t n);
   65.85  extern void * memcpy(void *,const void *,__kernel_size_t);
   65.86  extern void * __memcpy(void *,const void *,__kernel_size_t);
   65.87  
   65.88  EXPORT_SYMBOL(memset);
   65.89  EXPORT_SYMBOL(strlen);
   65.90  EXPORT_SYMBOL(memmove);
   65.91 -EXPORT_SYMBOL(strncmp);
   65.92 -EXPORT_SYMBOL(strncpy);
   65.93 -EXPORT_SYMBOL(strchr);
   65.94 -EXPORT_SYMBOL(strncat);
   65.95 -EXPORT_SYMBOL(memchr);
   65.96 -EXPORT_SYMBOL(strrchr);
   65.97 -EXPORT_SYMBOL(strnlen);
   65.98 -EXPORT_SYMBOL(memscan);
   65.99  EXPORT_SYMBOL(memcpy);
  65.100  EXPORT_SYMBOL(__memcpy);
  65.101  
    66.1 --- a/linux-2.6-xen-sparse/arch/x86_64/mm/Makefile	Thu Feb 02 19:15:22 2006 +0100
    66.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/mm/Makefile	Thu Feb 02 19:16:38 2006 +0000
    66.3 @@ -2,7 +2,7 @@
    66.4  # Makefile for the linux x86_64-specific parts of the memory manager.
    66.5  #
    66.6  
    66.7 -obj-y	 := init.o fault.o ioremap.o extable.o pageattr.o
    66.8 +obj-y	 := init.o fault.o ioremap.o extable.o pageattr.o mmap.o
    66.9  obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o
   66.10  obj-$(CONFIG_NUMA) += numa.o
   66.11  obj-$(CONFIG_K8_NUMA) += k8topology.o
    67.1 --- a/linux-2.6-xen-sparse/arch/x86_64/mm/fault-xen.c	Thu Feb 02 19:15:22 2006 +0100
    67.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/mm/fault-xen.c	Thu Feb 02 19:16:38 2006 +0000
    67.3 @@ -35,6 +35,13 @@
    67.4  #include <asm-generic/sections.h>
    67.5  #include <asm/kdebug.h>
    67.6  
    67.7 +/* Page fault error code bits */
    67.8 +#define PF_PROT	(1<<0)		/* or no page found */
    67.9 +#define PF_WRITE	(1<<1)
   67.10 +#define PF_USER	(1<<2)
   67.11 +#define PF_RSVD	(1<<3)
   67.12 +#define PF_INSTR	(1<<4)
   67.13 +
   67.14  void bust_spinlocks(int yes)
   67.15  {
   67.16  	int loglevel_save = console_loglevel;
   67.17 @@ -68,7 +75,7 @@ static noinline int is_prefetch(struct p
   67.18  	unsigned char *max_instr;
   67.19  
   67.20  	/* If it was a exec fault ignore */
   67.21 -	if (error_code & (1<<4))
   67.22 +	if (error_code & PF_INSTR)
   67.23  		return 0;
   67.24  	
   67.25  	instr = (unsigned char *)convert_rip_to_linear(current, regs);
   67.26 @@ -223,17 +230,22 @@ static noinline void pgtable_bad(unsigne
   67.27  				 unsigned long error_code)
   67.28  {
   67.29  	unsigned long flags = oops_begin();
   67.30 +	struct task_struct *tsk;
   67.31  
   67.32  	printk(KERN_ALERT "%s: Corrupted page table at address %lx\n",
   67.33  	       current->comm, address);
   67.34  	dump_pagetable(address);
   67.35 +	tsk = current;
   67.36 +	tsk->thread.cr2 = address;
   67.37 +	tsk->thread.trap_no = 14;
   67.38 +	tsk->thread.error_code = error_code;
   67.39  	__die("Bad pagetable", regs, error_code);
   67.40  	oops_end(flags);
   67.41  	do_exit(SIGKILL);
   67.42  }
   67.43  
   67.44  /*
   67.45 - * Handle a fault on the vmalloc or module mapping area
   67.46 + * Handle a fault on the vmalloc area
   67.47   *
   67.48   * This assumes no large pages in there.
   67.49   */
   67.50 @@ -284,7 +296,6 @@ static int vmalloc_fault(unsigned long a
   67.51  	   that. */
   67.52  	if (!pte_present(*pte) || pte_pfn(*pte) != pte_pfn(*pte_ref))
   67.53  		BUG();
   67.54 -	__flush_tlb_all();
   67.55  	return 0;
   67.56  }
   67.57  
   67.58 @@ -306,12 +317,6 @@ int exception_trace = 1;
   67.59   * This routine handles page faults.  It determines the address,
   67.60   * and the problem, and then passes it off to one of the appropriate
   67.61   * routines.
   67.62 - *
   67.63 - * error_code:
   67.64 - *	bit 0 == 0 means no page found, 1 means protection fault
   67.65 - *	bit 1 == 0 means read, 1 means write
   67.66 - *	bit 2 == 0 means kernel, 1 means user-mode
   67.67 - *      bit 3 == 1 means fault was an instruction fetch
   67.68   */
   67.69  asmlinkage void __kprobes do_page_fault(struct pt_regs *regs,
   67.70  					unsigned long error_code)
   67.71 @@ -358,12 +363,16 @@ asmlinkage void __kprobes do_page_fault(
   67.72  	 *
   67.73  	 * This verifies that the fault happens in kernel space
   67.74  	 * (error_code & 4) == 0, and that the fault was not a
   67.75 -	 * protection error (error_code & 1) == 0.
   67.76 +	 * protection error (error_code & 9) == 0.
   67.77  	 */
   67.78  	if (unlikely(address >= TASK_SIZE64)) {
   67.79 -		if (!(error_code & 5) &&
   67.80 -		      ((address >= VMALLOC_START && address < VMALLOC_END) ||
   67.81 -		       (address >= MODULES_VADDR && address < MODULES_END))) {
   67.82 +		/*
   67.83 +		 * Don't check for the module range here: its PML4
   67.84 +		 * is always initialized because it's shared with the main
   67.85 +		 * kernel text. Only vmalloc may need PML4 syncups.
   67.86 +		 */
   67.87 +		if (!(error_code & (PF_RSVD|PF_USER|PF_PROT)) &&
   67.88 +		      ((address >= VMALLOC_START && address < VMALLOC_END))) {
   67.89  			if (vmalloc_fault(address) < 0)
   67.90  				goto bad_area_nosemaphore;
   67.91  			return;
   67.92 @@ -375,7 +384,7 @@ asmlinkage void __kprobes do_page_fault(
   67.93  		goto bad_area_nosemaphore;
   67.94  	}
   67.95  
   67.96 -	if (unlikely(error_code & (1 << 3)))
   67.97 +	if (unlikely(error_code & PF_RSVD))
   67.98  		pgtable_bad(address, regs, error_code);
   67.99  
  67.100  	/*
  67.101 @@ -402,7 +411,7 @@ asmlinkage void __kprobes do_page_fault(
  67.102  	 * thus avoiding the deadlock.
  67.103  	 */
  67.104  	if (!down_read_trylock(&mm->mmap_sem)) {
  67.105 -		if ((error_code & 4) == 0 &&
  67.106 +		if ((error_code & PF_USER) == 0 &&
  67.107  		    !search_exception_tables(regs->rip))
  67.108  			goto bad_area_nosemaphore;
  67.109  		down_read(&mm->mmap_sem);
  67.110 @@ -429,17 +438,17 @@ asmlinkage void __kprobes do_page_fault(
  67.111  good_area:
  67.112  	info.si_code = SEGV_ACCERR;
  67.113  	write = 0;
  67.114 -	switch (error_code & 3) {
  67.115 +	switch (error_code & (PF_PROT|PF_WRITE)) {
  67.116  		default:	/* 3: write, present */
  67.117  			/* fall through */
  67.118 -		case 2:		/* write, not present */
  67.119 +		case PF_WRITE:		/* write, not present */
  67.120  			if (!(vma->vm_flags & VM_WRITE))
  67.121  				goto bad_area;
  67.122  			write++;
  67.123  			break;
  67.124 -		case 1:		/* read, present */
  67.125 +		case PF_PROT:		/* read, present */
  67.126  			goto bad_area;
  67.127 -		case 0:		/* read, not present */
  67.128 +		case 0:			/* read, not present */
  67.129  			if (!(vma->vm_flags & (VM_READ | VM_EXEC)))
  67.130  				goto bad_area;
  67.131  	}
  67.132 @@ -474,7 +483,7 @@ bad_area:
  67.133  
  67.134  bad_area_nosemaphore:
  67.135  	/* User mode accesses just cause a SIGSEGV */
  67.136 -	if (error_code & 4) {
  67.137 +	if (error_code & PF_USER) {
  67.138  		if (is_prefetch(regs, address, error_code))
  67.139  			return;
  67.140  
  67.141 @@ -542,6 +551,9 @@ no_context:
  67.142  	printk_address(regs->rip);
  67.143  	printk("\n");
  67.144  	dump_pagetable(address);
  67.145 +	tsk->thread.cr2 = address;
  67.146 +	tsk->thread.trap_no = 14;
  67.147 +	tsk->thread.error_code = error_code;
  67.148  	__die("Oops", regs, error_code);
  67.149  	/* Executive summary in case the body of the oops scrolled away */
  67.150  	printk(KERN_EMERG "CR2: %016lx\n", address);
  67.151 @@ -567,7 +579,7 @@ do_sigbus:
  67.152  	up_read(&mm->mmap_sem);
  67.153  
  67.154  	/* Kernel mode? Handle exceptions or die */
  67.155 -	if (!(error_code & 4))
  67.156 +	if (!(error_code & PF_USER))
  67.157  		goto no_context;
  67.158  
  67.159  	tsk->thread.cr2 = address;
    68.1 --- a/linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c	Thu Feb 02 19:15:22 2006 +0100
    68.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c	Thu Feb 02 19:16:38 2006 +0000
    68.3 @@ -26,6 +26,9 @@
    68.4  #include <linux/bootmem.h>
    68.5  #include <linux/proc_fs.h>
    68.6  #include <linux/pci.h>
    68.7 +#include <linux/dma-mapping.h>
    68.8 +#include <linux/module.h>
    68.9 +#include <linux/memory_hotplug.h>
   68.10  
   68.11  #include <asm/processor.h>
   68.12  #include <asm/system.h>
   68.13 @@ -41,6 +44,8 @@
   68.14  #include <asm/proto.h>
   68.15  #include <asm/smp.h>
   68.16  #include <asm/sections.h>
   68.17 +#include <asm/dma-mapping.h>
   68.18 +#include <asm/swiotlb.h>
   68.19  
   68.20  #include <xen/features.h>
   68.21  
   68.22 @@ -48,6 +53,9 @@
   68.23  #define Dprintk(x...)
   68.24  #endif
   68.25  
   68.26 +struct dma_mapping_ops* dma_ops;
   68.27 +EXPORT_SYMBOL(dma_ops);
   68.28 +
   68.29  extern unsigned long *contiguous_bitmap;
   68.30  
   68.31  #if defined(CONFIG_SWIOTLB)
   68.32 @@ -374,16 +382,24 @@ unsigned long __initdata table_start, ta
   68.33  
   68.34  unsigned long get_machine_pfn(unsigned long addr)
   68.35  {
   68.36 -	pud_t* pud = pud_offset_k(addr);
   68.37 +	pud_t* pud = pud_offset_k(NULL, addr);
   68.38  	pmd_t* pmd = pmd_offset(pud, addr);
   68.39  	pte_t *pte = pte_offset_kernel(pmd, addr);
   68.40  
   68.41  	return pte_mfn(*pte);
   68.42  } 
   68.43  
   68.44 -static __init void *alloc_static_page(unsigned long *phys)
   68.45 +static __meminit void *alloc_static_page(unsigned long *phys)
   68.46  {
   68.47  	unsigned long va = (start_pfn << PAGE_SHIFT) + __START_KERNEL_map;
   68.48 +
   68.49 +	if (after_bootmem) {
   68.50 +		void *adr = (void *)get_zeroed_page(GFP_ATOMIC);
   68.51 +
   68.52 +		*phys = __pa(adr);
   68.53 +		return adr;
   68.54 +	}
   68.55 +
   68.56  	*phys = start_pfn << PAGE_SHIFT;
   68.57  	start_pfn++;
   68.58  	memset((void *)va, 0, PAGE_SIZE);
   68.59 @@ -417,77 +433,86 @@ static inline int make_readonly(unsigned
   68.60  	return readonly;
   68.61  }
   68.62  
   68.63 -static void __init phys_pud_init(pud_t *pud, unsigned long address, unsigned long end)
   68.64 +static void __meminit
   68.65 +phys_pmd_init(pmd_t *pmd, unsigned long address, unsigned long end)
   68.66 +{
   68.67 +	int i, k;
   68.68 +
   68.69 +	for (i = 0; i < PTRS_PER_PMD; pmd++, i++) {
   68.70 +		unsigned long pte_phys;
   68.71 +		pte_t *pte, *pte_save;
   68.72 +
   68.73 +		if (address >= end) {
   68.74 +			for (; i < PTRS_PER_PMD; i++, pmd++)
   68.75 +				set_pmd(pmd, __pmd(0));
   68.76 +			break;
   68.77 +		}
   68.78 +		pte = alloc_static_page(&pte_phys);
   68.79 +		pte_save = pte;
   68.80 +		for (k = 0; k < PTRS_PER_PTE; pte++, k++, address += PTE_SIZE) {
   68.81 +			if ((address >= end) ||
   68.82 +			    ((address >> PAGE_SHIFT) >=
   68.83 +			     xen_start_info->nr_pages)) { 
   68.84 +				__set_pte(pte, __pte(0)); 
   68.85 +				continue;
   68.86 +			}
   68.87 +			if (make_readonly(address)) {
   68.88 +				__set_pte(pte, 
   68.89 +					  __pte(address | (_KERNPG_TABLE & ~_PAGE_RW)));
   68.90 +				continue;
   68.91 +			}
   68.92 +			__set_pte(pte, __pte(address | _KERNPG_TABLE));
   68.93 +		}
   68.94 +		pte = pte_save;
   68.95 +		early_make_page_readonly(pte, XENFEAT_writable_page_tables);
   68.96 +		xen_pte_pin(pte_phys);
   68.97 +		set_pmd(pmd, __pmd(pte_phys | _KERNPG_TABLE));
   68.98 +	}
   68.99 +}
  68.100 +
  68.101 +static void __meminit
  68.102 +phys_pmd_update(pud_t *pud, unsigned long address, unsigned long end)
  68.103 +{
  68.104 +	pmd_t *pmd = pmd_offset(pud, (unsigned long)__va(address));
  68.105 +
  68.106 +	if (pmd_none(*pmd)) {
  68.107 +		spin_lock(&init_mm.page_table_lock);
  68.108 +		phys_pmd_init(pmd, address, end);
  68.109 +		spin_unlock(&init_mm.page_table_lock);
  68.110 +		__flush_tlb_all();
  68.111 +	}
  68.112 +}
  68.113 +
  68.114 +static void __meminit phys_pud_init(pud_t *pud, unsigned long address, unsigned long end)
  68.115  { 
  68.116 -	long i, j, k; 
  68.117 -	unsigned long paddr;
  68.118 +	long i = pud_index(address);
  68.119  
  68.120 -	i = pud_index(address);
  68.121  	pud = pud + i;
  68.122 +
  68.123 +	if (after_bootmem && pud_val(*pud)) {
  68.124 +		phys_pmd_update(pud, address, end);
  68.125 +		return;
  68.126 +	}
  68.127 +
  68.128  	for (; i < PTRS_PER_PUD; pud++, i++) {
  68.129 -		unsigned long pmd_phys;
  68.130 +		unsigned long paddr, pmd_phys;
  68.131  		pmd_t *pmd;
  68.132  
  68.133 -		paddr = address + i*PUD_SIZE;
  68.134 -		if (paddr >= end) { 
  68.135 -			for (; i < PTRS_PER_PUD; i++, pud++) 
  68.136 -				set_pud(pud, __pud(0)); 
  68.137 +		paddr = (address & PGDIR_MASK) + i*PUD_SIZE;
  68.138 +		if (paddr >= end)
  68.139  			break;
  68.140 -		} 
  68.141  
  68.142  		pmd = alloc_static_page(&pmd_phys);
  68.143  		early_make_page_readonly(pmd, XENFEAT_writable_page_tables);
  68.144  		xen_pmd_pin(pmd_phys);
  68.145 +		spin_lock(&init_mm.page_table_lock);
  68.146  		set_pud(pud, __pud(pmd_phys | _KERNPG_TABLE));
  68.147 -      		for (j = 0; j < PTRS_PER_PMD; pmd++, j++) {
  68.148 -			unsigned long pte_phys;
  68.149 -			pte_t *pte, *pte_save;
  68.150 -
  68.151 -			if (paddr >= end) { 
  68.152 -				for (; j < PTRS_PER_PMD; j++, pmd++)
  68.153 -					set_pmd(pmd,  __pmd(0)); 
  68.154 -				break;
  68.155 -			}
  68.156 -			pte = alloc_static_page(&pte_phys);
  68.157 -			pte_save = pte;
  68.158 -			for (k = 0; k < PTRS_PER_PTE; pte++, k++, paddr += PTE_SIZE) {
  68.159 -				if ((paddr >= end) ||
  68.160 -				    ((paddr >> PAGE_SHIFT) >=
  68.161 -				     xen_start_info->nr_pages)) { 
  68.162 -					__set_pte(pte, __pte(0)); 
  68.163 -					continue;
  68.164 -				}
  68.165 -				if (make_readonly(paddr)) {
  68.166 -					__set_pte(pte, 
  68.167 -						__pte(paddr | (_KERNPG_TABLE & ~_PAGE_RW)));
  68.168 -					continue;
  68.169 -				}
  68.170 -				__set_pte(pte, __pte(paddr | _KERNPG_TABLE));
  68.171 -			}
  68.172 -			pte = pte_save;
  68.173 -			early_make_page_readonly(
  68.174 -				pte, XENFEAT_writable_page_tables);
  68.175 -			xen_pte_pin(pte_phys);
  68.176 -			set_pmd(pmd, __pmd(pte_phys | _KERNPG_TABLE));
  68.177 -		}
  68.178 +		phys_pmd_init(pmd, paddr, end);
  68.179 +		spin_unlock(&init_mm.page_table_lock);
  68.180  	}
  68.181  	__flush_tlb();
  68.182  } 
  68.183  
  68.184 -static void __init find_early_table_space(unsigned long end)
  68.185 -{
  68.186 -	unsigned long puds, pmds, ptes; 
  68.187 -
  68.188 -	puds = (end + PUD_SIZE - 1) >> PUD_SHIFT;
  68.189 -	pmds = (end + PMD_SIZE - 1) >> PMD_SHIFT;
  68.190 -	ptes = (end + PTE_SIZE - 1) >> PAGE_SHIFT;
  68.191 -
  68.192 -	tables_space =
  68.193 -		round_up(puds * 8, PAGE_SIZE) + 
  68.194 -		round_up(pmds * 8, PAGE_SIZE) + 
  68.195 -		round_up(ptes * 8, PAGE_SIZE); 
  68.196 -}
  68.197 -
  68.198  void __init xen_init_pt(void)
  68.199  {
  68.200  	unsigned long addr, *page;
  68.201 @@ -586,39 +611,71 @@ void __init extend_init_mapping(void)
  68.202  	}
  68.203  }
  68.204  
  68.205 +static void __init find_early_table_space(unsigned long end)
  68.206 +{
  68.207 +	unsigned long puds, pmds, ptes; 
  68.208 +
  68.209 +	puds = (end + PUD_SIZE - 1) >> PUD_SHIFT;
  68.210 +	pmds = (end + PMD_SIZE - 1) >> PMD_SHIFT;
  68.211 +	ptes = (end + PTE_SIZE - 1) >> PAGE_SHIFT;
  68.212 +
  68.213 +	tables_space =
  68.214 +		round_up(puds * 8, PAGE_SIZE) + 
  68.215 +		round_up(pmds * 8, PAGE_SIZE) + 
  68.216 +		round_up(ptes * 8, PAGE_SIZE); 
  68.217 +
  68.218 +	extend_init_mapping();
  68.219 +
  68.220 +	table_start = start_pfn;
  68.221 +
  68.222 +	early_printk("kernel direct mapping tables up to %lx @ %lx-%lx\n",
  68.223 +		__pa(end), table_start << PAGE_SHIFT, start_pfn << PAGE_SHIFT);
  68.224 +}
  68.225 +
  68.226  /* Setup the direct mapping of the physical memory at PAGE_OFFSET.
  68.227     This runs before bootmem is initialized and gets pages directly from the 
  68.228     physical memory. To access them they are temporarily mapped. */
  68.229 -void __init init_memory_mapping(unsigned long start, unsigned long end)
  68.230 +void __meminit init_memory_mapping(unsigned long start, unsigned long end)
  68.231  { 
  68.232  	unsigned long next; 
  68.233  
  68.234  	Dprintk("init_memory_mapping\n");
  68.235  
  68.236 -	find_early_table_space(end);
  68.237 -	extend_init_mapping();
  68.238 -
  68.239 -	table_start = start_pfn;
  68.240 +	/* 
  68.241 +	 * Find space for the kernel direct mapping tables.
  68.242 +	 * Later we should allocate these tables in the local node of the memory
  68.243 +	 * mapped.  Unfortunately this is done currently before the nodes are 
  68.244 +	 * discovered.
  68.245 +	 */
  68.246 +	if (!after_bootmem)
  68.247 +		find_early_table_space(end);
  68.248  
  68.249  	start = (unsigned long)__va(start);
  68.250  	end = (unsigned long)__va(end);
  68.251  
  68.252  	for (; start < end; start = next) {
  68.253  		unsigned long pud_phys; 
  68.254 -		pud_t *pud = alloc_static_page(&pud_phys);
  68.255 -		early_make_page_readonly(pud, XENFEAT_writable_page_tables);
  68.256 +		pgd_t *pgd = pgd_offset_k(start);
  68.257 +		pud_t *pud;
  68.258 +
  68.259 +		if (after_bootmem) {
  68.260 +			pud = pud_offset_k(pgd, __PAGE_OFFSET);
  68.261 +			make_page_readonly(pud, XENFEAT_writable_page_tables);
  68.262 +			pud_phys = __pa(pud);
  68.263 +		} else {
  68.264 +			pud = alloc_static_page(&pud_phys);
  68.265 +			early_make_page_readonly(pud, XENFEAT_writable_page_tables);
  68.266 +		}
  68.267  		xen_pud_pin(pud_phys);
  68.268  		next = start + PGDIR_SIZE;
  68.269  		if (next > end) 
  68.270  			next = end; 
  68.271  		phys_pud_init(pud, __pa(start), __pa(next));
  68.272 -		set_pgd(pgd_offset_k(start), mk_kernel_pgd(pud_phys));
  68.273 +		if (!after_bootmem)
  68.274 +			set_pgd(pgd_offset_k(start), mk_kernel_pgd(pud_phys));
  68.275  	}
  68.276  
  68.277 -	printk("kernel direct mapping tables upto %lx @ %lx-%lx\n",
  68.278 -	       __pa(end), table_start<<PAGE_SHIFT, start_pfn<<PAGE_SHIFT);
  68.279 -
  68.280 -	BUG_ON(start_pfn != (table_start + (tables_space >> PAGE_SHIFT)));
  68.281 +	BUG_ON(!after_bootmem && start_pfn != table_start + (tables_space >> PAGE_SHIFT));
  68.282  
  68.283  	__flush_tlb_all();
  68.284  }
  68.285 @@ -696,6 +753,9 @@ size_zones(unsigned long *z, unsigned lo
  68.286  void __init paging_init(void)
  68.287  {
  68.288  	unsigned long zones[MAX_NR_ZONES], holes[MAX_NR_ZONES];
  68.289 +
  68.290 +	memory_present(0, 0, end_pfn);
  68.291 +	sparse_init();
  68.292  	size_zones(zones, holes, 0, end_pfn);
  68.293  	free_area_init_node(0, NODE_DATA(0), zones,
  68.294  			    __pa(PAGE_OFFSET) >> PAGE_SHIFT, holes);
  68.295 @@ -757,6 +817,50 @@ void __init clear_kernel_mapping(unsigne
  68.296  	__flush_tlb_all();
  68.297  } 
  68.298  
  68.299 +/*
  68.300 + * Memory hotplug specific functions
  68.301 + * These are only for non-NUMA machines right now.
  68.302 + */
  68.303 +#ifdef CONFIG_MEMORY_HOTPLUG
  68.304 +
  68.305 +void online_page(struct page *page)
  68.306 +{
  68.307 +	ClearPageReserved(page);
  68.308 +	set_page_count(page, 1);
  68.309 +	__free_page(page);
  68.310 +	totalram_pages++;
  68.311 +	num_physpages++;
  68.312 +}
  68.313 +
  68.314 +int add_memory(u64 start, u64 size)
  68.315 +{
  68.316 +	struct pglist_data *pgdat = NODE_DATA(0);
  68.317 +	struct zone *zone = pgdat->node_zones + MAX_NR_ZONES-2;
  68.318 +	unsigned long start_pfn = start >> PAGE_SHIFT;
  68.319 +	unsigned long nr_pages = size >> PAGE_SHIFT;
  68.320 +	int ret;
  68.321 +
  68.322 +	ret = __add_pages(zone, start_pfn, nr_pages);
  68.323 +	if (ret)
  68.324 +		goto error;
  68.325 +
  68.326 +	init_memory_mapping(start, (start + size -1));
  68.327 +
  68.328 +	return ret;
  68.329 +error:
  68.330 +	printk("%s: Problem encountered in __add_pages!\n", __func__);
  68.331 +	return ret;
  68.332 +}
  68.333 +EXPORT_SYMBOL_GPL(add_memory);
  68.334 +
  68.335 +int remove_memory(u64 start, u64 size)
  68.336 +{
  68.337 +	return -EINVAL;
  68.338 +}
  68.339 +EXPORT_SYMBOL_GPL(remove_memory);
  68.340 +
  68.341 +#endif
  68.342 +
  68.343  static struct kcore_list kcore_mem, kcore_vmalloc, kcore_kernel, kcore_modules,
  68.344  			 kcore_vsyscall;
  68.345  
  68.346 @@ -772,6 +876,7 @@ void __init mem_init(void)
  68.347  #if defined(CONFIG_SWIOTLB)
  68.348  	swiotlb_init();	
  68.349  #endif
  68.350 +	no_iommu_init();
  68.351  
  68.352  	/* How many end-of-memory variables you have, grandma! */
  68.353  	max_low_pfn = end_pfn;
  68.354 @@ -857,10 +962,33 @@ void free_initmem(void)
  68.355  #endif
  68.356  }
  68.357  
  68.358 +#ifdef CONFIG_DEBUG_RODATA
  68.359 +
  68.360 +extern char __start_rodata, __end_rodata;
  68.361 +void mark_rodata_ro(void)
  68.362 +{
  68.363 +	unsigned long addr = (unsigned long)&__start_rodata;
  68.364 +
  68.365 +	for (; addr < (unsigned long)&__end_rodata; addr += PAGE_SIZE)
  68.366 +		change_page_attr_addr(addr, 1, PAGE_KERNEL_RO);
  68.367 +
  68.368 +	printk ("Write protecting the kernel read-only data: %luk\n",
  68.369 +			(&__end_rodata - &__start_rodata) >> 10);
  68.370 +
  68.371 +	/*
  68.372 +	 * change_page_attr_addr() requires a global_flush_tlb() call after it.
  68.373 +	 * We do this after the printk so that if something went wrong in the
  68.374 +	 * change, the printk gets out at least to give a better debug hint
  68.375 +	 * of who is the culprit.
  68.376 +	 */
  68.377 +	global_flush_tlb();
  68.378 +}
  68.379 +#endif
  68.380 +
  68.381  #ifdef CONFIG_BLK_DEV_INITRD
  68.382  void free_initrd_mem(unsigned long start, unsigned long end)
  68.383  {
  68.384 -	if (start < (unsigned long)&_end)
  68.385 +	if (start >= end)
  68.386  		return;
  68.387  	printk ("Freeing initrd memory: %ldk freed\n", (end - start) >> 10);
  68.388  	for (; start < end; start += PAGE_SIZE) {
  68.389 @@ -900,7 +1028,7 @@ int kern_addr_valid(unsigned long addr)
  68.390  	if (pgd_none(*pgd))
  68.391  		return 0;
  68.392  
  68.393 -	pud = pud_offset_k(addr);
  68.394 +	pud = pud_offset_k(pgd, addr);
  68.395  	if (pud_none(*pud))
  68.396  		return 0; 
  68.397  
    69.1 --- a/linux-2.6-xen-sparse/arch/x86_64/mm/pageattr-xen.c	Thu Feb 02 19:15:22 2006 +0100
    69.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/mm/pageattr-xen.c	Thu Feb 02 19:16:38 2006 +0000
    69.3 @@ -266,6 +266,7 @@ static int
    69.4  	pte_t *kpte; 
    69.5  	struct page *kpte_page;
    69.6  	unsigned kpte_flags;
    69.7 +	pgprot_t ref_prot2;
    69.8  	kpte = lookup_address(address);
    69.9  	if (!kpte) return 0;
   69.10  	kpte_page = virt_to_page(((unsigned long)kpte) & PAGE_MASK);
   69.11 @@ -278,10 +279,14 @@ static int
   69.12   			 * split_large_page will take the reference for this change_page_attr
   69.13   			 * on the split page.
   69.14   			 */
   69.15 -			struct page *split = split_large_page(address, prot, ref_prot); 
   69.16 +
   69.17 +			struct page *split;
   69.18 +			ref_prot2 = __pgprot(pgprot_val(pte_pgprot(*lookup_address(address))) & ~(1<<_PAGE_BIT_PSE));
   69.19 +
   69.20 +			split = split_large_page(address, prot, ref_prot2);
   69.21  			if (!split)
   69.22  				return -ENOMEM;
   69.23 -			set_pte(kpte,mk_pte(split, ref_prot));
   69.24 +			set_pte(kpte,mk_pte(split, ref_prot2));
   69.25  			kpte_page = split;
   69.26  		}	
   69.27  		get_page(kpte_page);
    70.1 --- a/linux-2.6-xen-sparse/drivers/Kconfig	Thu Feb 02 19:15:22 2006 +0100
    70.2 +++ b/linux-2.6-xen-sparse/drivers/Kconfig	Thu Feb 02 19:16:38 2006 +0000
    70.3 @@ -54,6 +54,8 @@ source "drivers/char/Kconfig"
    70.4  
    70.5  source "drivers/i2c/Kconfig"
    70.6  
    70.7 +source "drivers/spi/Kconfig"
    70.8 +
    70.9  source "drivers/w1/Kconfig"
   70.10  
   70.11  source "drivers/hwmon/Kconfig"
   70.12 @@ -77,4 +79,6 @@ endif
   70.13  
   70.14  source "drivers/sn/Kconfig"
   70.15  
   70.16 +source "drivers/edac/Kconfig"
   70.17 +
   70.18  endmenu
    71.1 --- a/linux-2.6-xen-sparse/drivers/Makefile	Thu Feb 02 19:15:22 2006 +0100
    71.2 +++ b/linux-2.6-xen-sparse/drivers/Makefile	Thu Feb 02 19:16:38 2006 +0000
    71.3 @@ -13,6 +13,7 @@ obj-$(CONFIG_ACPI)		+= acpi/
    71.4  # PnP must come after ACPI since it will eventually need to check if acpi
    71.5  # was used and do nothing if so
    71.6  obj-$(CONFIG_PNP)		+= pnp/
    71.7 +obj-$(CONFIG_ARM_AMBA)		+= amba/
    71.8  
    71.9  # char/ comes before serial/ etc so that the VT console is the boot-time
   71.10  # default.
   71.11 @@ -41,6 +42,7 @@ obj-$(CONFIG_FUSION)		+= message/
   71.12  obj-$(CONFIG_IEEE1394)		+= ieee1394/
   71.13  obj-y				+= cdrom/
   71.14  obj-$(CONFIG_MTD)		+= mtd/
   71.15 +obj-$(CONFIG_SPI)		+= spi/
   71.16  obj-$(CONFIG_PCCARD)		+= pcmcia/
   71.17  obj-$(CONFIG_DIO)		+= dio/
   71.18  obj-$(CONFIG_SBUS)		+= sbus/
   71.19 @@ -62,6 +64,7 @@ obj-$(CONFIG_PHONE)		+= telephony/
   71.20  obj-$(CONFIG_MD)		+= md/
   71.21  obj-$(CONFIG_BT)		+= bluetooth/
   71.22  obj-$(CONFIG_ISDN)		+= isdn/
   71.23 +obj-$(CONFIG_EDAC)		+= edac/
   71.24  obj-$(CONFIG_MCA)		+= mca/
   71.25  obj-$(CONFIG_EISA)		+= eisa/
   71.26  obj-$(CONFIG_CPU_FREQ)		+= cpufreq/
    72.1 --- a/linux-2.6-xen-sparse/drivers/acpi/Kconfig	Thu Feb 02 19:15:22 2006 +0100
    72.2 +++ b/linux-2.6-xen-sparse/drivers/acpi/Kconfig	Thu Feb 02 19:16:38 2006 +0000
    72.3 @@ -168,7 +168,6 @@ config ACPI_NUMA
    72.4  config ACPI_ASUS
    72.5          tristate "ASUS/Medion Laptop Extras"
    72.6  	depends on X86
    72.7 -	default y
    72.8          ---help---
    72.9            This driver provides support for extra features of ACPI-compatible
   72.10            ASUS laptops. As some of Medion laptops are made by ASUS, it may also
   72.11 @@ -209,7 +208,6 @@ config ACPI_IBM
   72.12  config ACPI_TOSHIBA
   72.13  	tristate "Toshiba Laptop Extras"
   72.14  	depends on X86
   72.15 -	default y
   72.16  	---help---
   72.17  	  This driver adds support for access to certain system settings
   72.18  	  on "legacy free" Toshiba laptops.  These laptops can be recognized by
    73.1 --- a/linux-2.6-xen-sparse/drivers/acpi/tables.c	Thu Feb 02 19:15:22 2006 +0100
    73.2 +++ b/linux-2.6-xen-sparse/drivers/acpi/tables.c	Thu Feb 02 19:16:38 2006 +0000
    73.3 @@ -37,7 +37,7 @@
    73.4  
    73.5  #define PREFIX			"ACPI: "
    73.6  
    73.7 -#define ACPI_MAX_TABLES		256
    73.8 +#define ACPI_MAX_TABLES		128
    73.9  
   73.10  static char *acpi_table_signatures[ACPI_TABLE_COUNT] = {
   73.11  	[ACPI_TABLE_UNKNOWN] = "????",
   73.12 @@ -74,7 +74,7 @@ struct acpi_table_sdt {
   73.13  static unsigned long sdt_pa;	/* Physical Address */
   73.14  static unsigned long sdt_count;	/* Table count */
   73.15  
   73.16 -static struct acpi_table_sdt sdt_entry[ACPI_MAX_TABLES];
   73.17 +static struct acpi_table_sdt sdt_entry[ACPI_MAX_TABLES] __initdata;
   73.18  
   73.19  void acpi_table_print(struct acpi_table_header *header, unsigned long phys_addr)
   73.20  {
    74.1 --- a/linux-2.6-xen-sparse/drivers/char/mem.c	Thu Feb 02 19:15:22 2006 +0100
    74.2 +++ b/linux-2.6-xen-sparse/drivers/char/mem.c	Thu Feb 02 19:16:38 2006 +0000
    74.3 @@ -101,6 +101,11 @@ static inline int valid_phys_addr_range(
    74.4  
    74.5  	return 1;
    74.6  }
    74.7 +
    74.8 +static inline int valid_mmap_phys_addr_range(unsigned long addr, size_t *size)
    74.9 +{
   74.10 +	return 1;
   74.11 +}
   74.12  #endif
   74.13  
   74.14  #ifndef ARCH_HAS_DEV_MEM
   74.15 @@ -230,26 +235,36 @@ static ssize_t write_mem(struct file * f
   74.16  }
   74.17  #endif
   74.18  
   74.19 +#ifndef __HAVE_PHYS_MEM_ACCESS_PROT
   74.20 +static pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
   74.21 +				     unsigned long size, pgprot_t vma_prot)
   74.22 +{
   74.23 +#ifdef pgprot_noncached
   74.24 +	unsigned long offset = pfn << PAGE_SHIFT;
   74.25 +
   74.26 +	if (uncached_access(file, offset))
   74.27 +		return pgprot_noncached(vma_prot);
   74.28 +#endif
   74.29 +	return vma_prot;
   74.30 +}
   74.31 +#endif
   74.32 +
   74.33  static int mmap_mem(struct file * file, struct vm_area_struct * vma)
   74.34  {
   74.35 -#if defined(__HAVE_PHYS_MEM_ACCESS_PROT)
   74.36 +	size_t size = vma->vm_end - vma->vm_start;
   74.37 +
   74.38 +	if (!valid_mmap_phys_addr_range(vma->vm_pgoff << PAGE_SHIFT, &size))
   74.39 +		return -EINVAL;
   74.40 +
   74.41  	vma->vm_page_prot = phys_mem_access_prot(file, vma->vm_pgoff,
   74.42 -						 vma->vm_end - vma->vm_start,
   74.43 +						 size,
   74.44  						 vma->vm_page_prot);
   74.45 -#elif defined(pgprot_noncached)
   74.46 -	unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
   74.47 -	int uncached;
   74.48 -
   74.49 -	uncached = uncached_access(file, offset);
   74.50 -	if (uncached)
   74.51 -		vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
   74.52 -#endif
   74.53  
   74.54  	/* Remap-pfn-range will mark the range VM_IO and VM_RESERVED */
   74.55  	if (remap_pfn_range(vma,
   74.56  			    vma->vm_start,
   74.57  			    vma->vm_pgoff,
   74.58 -			    vma->vm_end-vma->vm_start,
   74.59 +			    size,
   74.60  			    vma->vm_page_prot))
   74.61  		return -EAGAIN;
   74.62  	return 0;
   74.63 @@ -521,7 +536,7 @@ static ssize_t write_kmem(struct file * 
   74.64   	return virtr + wrote;
   74.65  }
   74.66  
   74.67 -#if (defined(CONFIG_ISA) || !defined(__mc68000__)) && (!defined(CONFIG_PPC_ISERIES) || defined(CONFIG_PCI))
   74.68 +#if defined(CONFIG_ISA) || !defined(__mc68000__)
   74.69  static ssize_t read_port(struct file * file, char __user * buf,
   74.70  			 size_t count, loff_t *ppos)
   74.71  {
   74.72 @@ -728,7 +743,7 @@ static loff_t memory_lseek(struct file *
   74.73  {
   74.74  	loff_t ret;
   74.75  
   74.76 -	down(&file->f_dentry->d_inode->i_sem);
   74.77 +	mutex_lock(&file->f_dentry->d_inode->i_mutex);
   74.78  	switch (orig) {
   74.79  		case 0:
   74.80  			file->f_pos = offset;
   74.81 @@ -743,7 +758,7 @@ static loff_t memory_lseek(struct file *
   74.82  		default:
   74.83  			ret = -EINVAL;
   74.84  	}
   74.85 -	up(&file->f_dentry->d_inode->i_sem);
   74.86 +	mutex_unlock(&file->f_dentry->d_inode->i_mutex);
   74.87  	return ret;
   74.88  }
   74.89  
   74.90 @@ -786,7 +801,7 @@ static struct file_operations null_fops 
   74.91  	.write		= write_null,
   74.92  };
   74.93  
   74.94 -#if (defined(CONFIG_ISA) || !defined(__mc68000__)) && (!defined(CONFIG_PPC_ISERIES) || defined(CONFIG_PCI))
   74.95 +#if defined(CONFIG_ISA) || !defined(__mc68000__)
   74.96  static struct file_operations port_fops = {
   74.97  	.llseek		= memory_lseek,
   74.98  	.read		= read_port,
   74.99 @@ -823,7 +838,7 @@ static ssize_t kmsg_write(struct file * 
  74.100  			  size_t count, loff_t *ppos)
  74.101  {
  74.102  	char *tmp;
  74.103 -	int ret;
  74.104 +	ssize_t ret;
  74.105  
  74.106  	tmp = kmalloc(count + 1, GFP_KERNEL);
  74.107  	if (tmp == NULL)
  74.108 @@ -832,6 +847,9 @@ static ssize_t kmsg_write(struct file * 
  74.109  	if (!copy_from_user(tmp, buf, count)) {
  74.110  		tmp[count] = 0;
  74.111  		ret = printk("%s", tmp);
  74.112 +		if (ret > count)
  74.113 +			/* printk can add a prefix */
  74.114 +			ret = count;
  74.115  	}
  74.116  	kfree(tmp);
  74.117  	return ret;
  74.118 @@ -853,7 +871,7 @@ static int memory_open(struct inode * in
  74.119  		case 3:
  74.120  			filp->f_op = &null_fops;
  74.121  			break;
  74.122 -#if (defined(CONFIG_ISA) || !defined(__mc68000__)) && (!defined(CONFIG_PPC_ISERIES) || defined(CONFIG_PCI))
  74.123 +#if defined(CONFIG_ISA) || !defined(__mc68000__)
  74.124  		case 4:
  74.125  			filp->f_op = &port_fops;
  74.126  			break;
  74.127 @@ -900,7 +918,7 @@ static const struct {
  74.128  	{1, "mem",     S_IRUSR | S_IWUSR | S_IRGRP, &mem_fops},
  74.129  	{2, "kmem",    S_IRUSR | S_IWUSR | S_IRGRP, &kmem_fops},
  74.130  	{3, "null",    S_IRUGO | S_IWUGO,           &null_fops},
  74.131 -#if (defined(CONFIG_ISA) || !defined(__mc68000__)) && (!defined(CONFIG_PPC_ISERIES) || defined(CONFIG_PCI))
  74.132 +#if defined(CONFIG_ISA) || !defined(__mc68000__)
  74.133  	{4, "port",    S_IRUSR | S_IWUSR | S_IRGRP, &port_fops},
  74.134  #endif
  74.135  	{5, "zero",    S_IRUGO | S_IWUGO,           &zero_fops},
    75.1 --- a/linux-2.6-xen-sparse/drivers/char/tpm/Makefile	Thu Feb 02 19:15:22 2006 +0100
    75.2 +++ b/linux-2.6-xen-sparse/drivers/char/tpm/Makefile	Thu Feb 02 19:16:38 2006 +0000
    75.3 @@ -2,6 +2,9 @@
    75.4  # Makefile for the kernel tpm device drivers.
    75.5  #
    75.6  obj-$(CONFIG_TCG_TPM) += tpm.o
    75.7 +ifdef CONFIG_ACPI
    75.8 +	obj-$(CONFIG_TCG_TPM) += tpm_bios.o
    75.9 +endif
   75.10  obj-$(CONFIG_TCG_NSC) += tpm_nsc.o
   75.11  obj-$(CONFIG_TCG_ATMEL) += tpm_atmel.o
   75.12  obj-$(CONFIG_TCG_INFINEON) += tpm_infineon.o
    76.1 --- a/linux-2.6-xen-sparse/drivers/char/tpm/tpm.c	Thu Feb 02 19:15:22 2006 +0100
    76.2 +++ b/linux-2.6-xen-sparse/drivers/char/tpm/tpm.c	Thu Feb 02 19:16:38 2006 +0000
    76.3 @@ -438,6 +438,7 @@ ssize_t tpm_read(struct file * file, cha
    76.4  	int ret_size;
    76.5  	int pos, pending = 0;
    76.6  
    76.7 +	del_singleshot_timer_sync(&chip->user_read_timer);
    76.8  	flush_scheduled_work();
    76.9  	ret_size = atomic_read(&chip->data_pending);
   76.10  	if (ret_size > 0) {	/* relay data */
   76.11 @@ -488,6 +489,7 @@ void tpm_remove_hardware(struct device *
   76.12  	kfree(chip->vendor->miscdev.name);
   76.13  
   76.14  	sysfs_remove_group(&dev->kobj, chip->vendor->attr_group);
   76.15 +	tpm_bios_log_teardown(chip->bios_dir);
   76.16  
   76.17  	dev_mask[chip->dev_num / TPM_NUM_MASK_ENTRIES ] &=
   76.18  		~(1 << (chip->dev_num % TPM_NUM_MASK_ENTRIES));
   76.19 @@ -621,6 +623,8 @@ dev_num_search_complete:
   76.20  
   76.21  	sysfs_create_group(&dev->kobj, chip->vendor->attr_group);
   76.22  
   76.23 +	chip->bios_dir = tpm_bios_log_setup(devname);
   76.24 +
   76.25  	return 0;
   76.26  }
   76.27  EXPORT_SYMBOL_GPL(tpm_register_hardware);
    77.1 --- a/linux-2.6-xen-sparse/drivers/char/tpm/tpm.h	Thu Feb 02 19:15:22 2006 +0100
    77.2 +++ b/linux-2.6-xen-sparse/drivers/char/tpm/tpm.h	Thu Feb 02 19:16:38 2006 +0000
    77.3 @@ -81,6 +81,8 @@ struct tpm_chip {
    77.4  
    77.5  	struct tpm_vendor_specific *vendor;
    77.6  
    77.7 +	struct dentry **bios_dir;
    77.8 +
    77.9  	struct list_head list;
   77.10  };
   77.11  
   77.12 @@ -106,3 +108,16 @@ extern ssize_t tpm_read(struct file *, c
   77.13  extern void tpm_remove_hardware(struct device *);
   77.14  extern int tpm_pm_suspend(struct pci_dev *, pm_message_t);
   77.15  extern int tpm_pm_resume(struct pci_dev *);
   77.16 +
   77.17 +#ifdef CONFIG_ACPI
   77.18 +extern struct dentry ** tpm_bios_log_setup(char *);
   77.19 +extern void tpm_bios_log_teardown(struct dentry **);
   77.20 +#else
   77.21 +static inline struct dentry* tpm_bios_log_setup(char *name)
   77.22 +{
   77.23 +	return NULL;
   77.24 +}
   77.25 +static inline void tpm_bios_log_teardown(struct dentry **dir)
   77.26 +{
   77.27 +}
   77.28 +#endif
    78.1 --- a/linux-2.6-xen-sparse/drivers/char/tty_io.c	Thu Feb 02 19:15:22 2006 +0100
    78.2 +++ b/linux-2.6-xen-sparse/drivers/char/tty_io.c	Thu Feb 02 19:16:38 2006 +0000
    78.3 @@ -168,9 +168,12 @@ static struct tty_struct *alloc_tty_stru
    78.4  	return tty;
    78.5  }
    78.6  
    78.7 +static void tty_buffer_free_all(struct tty_struct *);
    78.8 +
    78.9  static inline void free_tty_struct(struct tty_struct *tty)
   78.10  {
   78.11  	kfree(tty->write_buf);
   78.12 +	tty_buffer_free_all(tty);
   78.13  	kfree(tty);
   78.14  }
   78.15  
   78.16 @@ -233,6 +236,200 @@ static int check_tty_count(struct tty_st
   78.17  }
   78.18  
   78.19  /*
   78.20 + * Tty buffer allocation management
   78.21 + */
   78.22 +
   78.23 +static void tty_buffer_free_all(struct tty_struct *tty)
   78.24 +{
   78.25 +	struct tty_buffer *thead;
   78.26 +	while((thead = tty->buf.head) != NULL) {
   78.27 +		tty->buf.head = thead->next;
   78.28 +		kfree(thead);
   78.29 +	}
   78.30 +	while((thead = tty->buf.free) != NULL) {
   78.31 +		tty->buf.free = thead->next;
   78.32 +		kfree(thead);
   78.33 +	}
   78.34 +	tty->buf.tail = NULL;
   78.35 +}
   78.36 +
   78.37 +static void tty_buffer_init(struct tty_struct *tty)
   78.38 +{
   78.39 +	tty->buf.head = NULL;
   78.40 +	tty->buf.tail = NULL;
   78.41 +	tty->buf.free = NULL;
   78.42 +}
   78.43 +
   78.44 +static struct tty_buffer *tty_buffer_alloc(size_t size)
   78.45 +{
   78.46 +	struct tty_buffer *p = kmalloc(sizeof(struct tty_buffer) + 2 * size, GFP_ATOMIC);
   78.47 +	if(p == NULL)
   78.48 +		return NULL;
   78.49 +	p->used = 0;
   78.50 +	p->size = size;
   78.51 +	p->next = NULL;
   78.52 +	p->char_buf_ptr = (char *)(p->data);
   78.53 +	p->flag_buf_ptr = (unsigned char *)p->char_buf_ptr + size;
   78.54 +/* 	printk("Flip create %p\n", p); */
   78.55 +	return p;
   78.56 +}
   78.57 +
   78.58 +/* Must be called with the tty_read lock held. This needs to acquire strategy
   78.59 +   code to decide if we should kfree or relink a given expired buffer */
   78.60 +
   78.61 +static void tty_buffer_free(struct tty_struct *tty, struct tty_buffer *b)
   78.62 +{
   78.63 +	/* Dumb strategy for now - should keep some stats */
   78.64 +/* 	printk("Flip dispose %p\n", b); */
   78.65 +	if(b->size >= 512)
   78.66 +		kfree(b);
   78.67 +	else {
   78.68 +		b->next = tty->buf.free;
   78.69 +		tty->buf.free = b;
   78.70 +	}
   78.71 +}
   78.72 +
   78.73 +static struct tty_buffer *tty_buffer_find(struct tty_struct *tty, size_t size)
   78.74 +{
   78.75 +	struct tty_buffer **tbh = &tty->buf.free;
   78.76 +	while((*tbh) != NULL) {
   78.77 +		struct tty_buffer *t = *tbh;
   78.78 +		if(t->size >= size) {
   78.79 +			*tbh = t->next;
   78.80 +			t->next = NULL;
   78.81 +			t->used = 0;
   78.82 +			/* DEBUG ONLY */
   78.83 +			memset(t->data, '*', size);
   78.84 +/* 			printk("Flip recycle %p\n", t); */
   78.85 +			return t;
   78.86 +		}
   78.87 +		tbh = &((*tbh)->next);
   78.88 +	}
   78.89 +	/* Round the buffer size out */
   78.90 +	size = (size + 0xFF) & ~ 0xFF;
   78.91 +	return tty_buffer_alloc(size);
   78.92 +	/* Should possibly check if this fails for the largest buffer we
   78.93 +	   have queued and recycle that ? */
   78.94 +}
   78.95 +
   78.96 +int tty_buffer_request_room(struct tty_struct *tty, size_t size)
   78.97 +{
   78.98 +	struct tty_buffer *b = tty->buf.tail, *n;
   78.99 +	int left = 0;
  78.100 +
  78.101 +	/* OPTIMISATION: We could keep a per tty "zero" sized buffer to
  78.102 +	   remove this conditional if its worth it. This would be invisible
  78.103 +	   to the callers */
  78.104 +	if(b != NULL)
  78.105 +		left = b->size - b->used;
  78.106 +	if(left >= size)
  78.107 +		return size;
  78.108 +	/* This is the slow path - looking for new buffers to use */
  78.109 +	n = tty_buffer_find(tty, size);
  78.110 +	if(n == NULL)
  78.111 +		return left;
  78.112 +	if(b != NULL)
  78.113 +		b->next = n;
  78.114 +	else
  78.115 +		tty->buf.head = n;
  78.116 +	tty->buf.tail = n;
  78.117 +	return size;
  78.118 +}
  78.119 +
  78.120 +EXPORT_SYMBOL_GPL(tty_buffer_request_room);
  78.121 +
  78.122 +int tty_insert_flip_string(struct tty_struct *tty, unsigned char *chars, size_t size)
  78.123 +{
  78.124 +	int copied = 0;
  78.125 +	do {
  78.126 +		int space = tty_buffer_request_room(tty, size - copied);
  78.127 +		struct tty_buffer *tb = tty->buf.tail;
  78.128 +		/* If there is no space then tb may be NULL */
  78.129 +		if(unlikely(space == 0))
  78.130 +			break;
  78.131 +		memcpy(tb->char_buf_ptr + tb->used, chars, space);
  78.132 +		memset(tb->flag_buf_ptr + tb->used, TTY_NORMAL, space);
  78.133 +		tb->used += space;
  78.134 +		copied += space;
  78.135 +		chars += space;
  78.136 +/* 		printk("Flip insert %d.\n", space); */
  78.137 +	}
  78.138 +	/* There is a small chance that we need to split the data over
  78.139 +	   several buffers. If this is the case we must loop */
  78.140 +	while (unlikely(size > copied));
  78.141 +	return copied;
  78.142 +}
  78.143 +
  78.144 +EXPORT_SYMBOL_GPL(tty_insert_flip_string);
  78.145 +
  78.146 +int tty_insert_flip_string_flags(struct tty_struct *tty, unsigned char *chars, char *flags, size_t size)
  78.147 +{
  78.148 +	int copied = 0;
  78.149 +	do {
  78.150 +		int space = tty_buffer_request_room(tty, size - copied);
  78.151 +		struct tty_buffer *tb = tty->buf.tail;
  78.152 +		/* If there is no space then tb may be NULL */
  78.153 +		if(unlikely(space == 0))
  78.154 +			break;
  78.155 +		memcpy(tb->char_buf_ptr + tb->used, chars, space);
  78.156 +		memcpy(tb->flag_buf_ptr + tb->used, flags, space);
  78.157 +		tb->used += space;
  78.158 +		copied += space;
  78.159 +		chars += space;
  78.160 +		flags += space;
  78.161 +	}
  78.162 +	/* There is a small chance that we need to split the data over
  78.163 +	   several buffers. If this is the case we must loop */
  78.164 +	while (unlikely(size > copied));
  78.165 +	return copied;
  78.166 +}
  78.167 +
  78.168 +EXPORT_SYMBOL_GPL(tty_insert_flip_string_flags);
  78.169 +
  78.170 +
  78.171 +/*
  78.172 + *	Prepare a block of space in the buffer for data. Returns the length
  78.173 + *	available and buffer pointer to the space which is now allocated and
  78.174 + *	accounted for as ready for normal characters. This is used for drivers
  78.175 + *	that need their own block copy routines into the buffer. There is no
  78.176 + *	guarantee the buffer is a DMA target!
  78.177 + */
  78.178 +
  78.179 +int tty_prepare_flip_string(struct tty_struct *tty, unsigned char **chars, size_t size)
  78.180 +{
  78.181 +	int space = tty_buffer_request_room(tty, size);
  78.182 +	struct tty_buffer *tb = tty->buf.tail;
  78.183 +	*chars = tb->char_buf_ptr + tb->used;
  78.184 +	memset(tb->flag_buf_ptr + tb->used, TTY_NORMAL, space);
  78.185 +	tb->used += space;
  78.186 +	return space;
  78.187 +}
  78.188 +
  78.189 +EXPORT_SYMBOL_GPL(tty_prepare_flip_string);
  78.190 +
  78.191 +/*
  78.192 + *	Prepare a block of space in the buffer for data. Returns the length
  78.193 + *	available and buffer pointer to the space which is now allocated and
  78.194 + *	accounted for as ready for characters. This is used for drivers
  78.195 + *	that need their own block copy routines into the buffer. There is no
  78.196 + *	guarantee the buffer is a DMA target!
  78.197 + */
  78.198 +
  78.199 +int tty_prepare_flip_string_flags(struct tty_struct *tty, unsigned char **chars, char **flags, size_t size)
  78.200 +{
  78.201 +	int space = tty_buffer_request_room(tty, size);
  78.202 +	struct tty_buffer *tb = tty->buf.tail;
  78.203 +	*chars = tb->char_buf_ptr + tb->used;
  78.204 +	*flags = tb->flag_buf_ptr + tb->used;
  78.205 +	tb->used += space;
  78.206 +	return space;
  78.207 +}
  78.208 +
  78.209 +EXPORT_SYMBOL_GPL(tty_prepare_flip_string_flags);
  78.210 +
  78.211 +
  78.212 +
  78.213 +/*
  78.214   *	This is probably overkill for real world processors but
  78.215   *	they are not on hot paths so a little discipline won't do 
  78.216   *	any harm.
  78.217 @@ -494,6 +691,17 @@ restart:
  78.218  	if (ld == NULL)
  78.219  		return -EINVAL;
  78.220  
  78.221 +	/*
  78.222 +	 *	No more input please, we are switching. The new ldisc
  78.223 +	 *	will update this value in the ldisc open function
  78.224 +	 */
  78.225 +
  78.226 +	tty->receive_room = 0;
  78.227 +
  78.228 +	/*
  78.229 +	 *	Problem: What do we do if this blocks ?
  78.230 +	 */
  78.231 +
  78.232  	tty_wait_until_sent(tty, 0);
  78.233  
  78.234  	if (tty->ldisc.num == ldisc) {
  78.235 @@ -562,9 +770,9 @@ restart:
  78.236  	 *	we say so later on.
  78.237  	 */
  78.238  
  78.239 -	work = cancel_delayed_work(&tty->flip.work);
  78.240 +	work = cancel_delayed_work(&tty->buf.work);
  78.241  	/*
  78.242 -	 * Wait for ->hangup_work and ->flip.work handlers to terminate
  78.243 +	 * Wait for ->hangup_work and ->buf.work handlers to terminate
  78.244  	 */
  78.245  	 
  78.246  	flush_scheduled_work();
  78.247 @@ -618,7 +826,7 @@ restart:
  78.248  	/* Restart it in case no characters kick it off. Safe if
  78.249  	   already running */
  78.250  	if (work)
  78.251 -		schedule_delayed_work(&tty->flip.work, 1);
  78.252 +		schedule_delayed_work(&tty->buf.work, 1);
  78.253  	return retval;
  78.254  }
  78.255  
  78.256 @@ -1723,10 +1931,10 @@ static void release_dev(struct file * fi
  78.257  	 */
  78.258  	clear_bit(TTY_LDISC, &tty->flags);
  78.259  	clear_bit(TTY_DONT_FLIP, &tty->flags);
  78.260 -	cancel_delayed_work(&tty->flip.work);
  78.261 +	cancel_delayed_work(&tty->buf.work);
  78.262  
  78.263  	/*
  78.264 -	 * Wait for ->hangup_work and ->flip.work handlers to terminate
  78.265 +	 * Wait for ->hangup_work and ->buf.work handlers to terminate
  78.266  	 */
  78.267  	 
  78.268  	flush_scheduled_work();
  78.269 @@ -2520,17 +2728,15 @@ EXPORT_SYMBOL(do_SAK);
  78.270  
  78.271  /*
  78.272   * This routine is called out of the software interrupt to flush data
  78.273 - * from the flip buffer to the line discipline. 
  78.274 + * from the buffer chain to the line discipline.
  78.275   */
  78.276   
  78.277  static void flush_to_ldisc(void *private_)
  78.278  {
  78.279  	struct tty_struct *tty = (struct tty_struct *) private_;
  78.280 -	unsigned char	*cp;
  78.281 -	char		*fp;
  78.282 -	int		count;
  78.283  	unsigned long 	flags;
  78.284  	struct tty_ldisc *disc;
  78.285 +	struct tty_buffer *tbuf;
  78.286  
  78.287  	disc = tty_ldisc_ref(tty);
  78.288  	if (disc == NULL)	/*  !TTY_LDISC */
  78.289 @@ -2540,28 +2746,23 @@ static void flush_to_ldisc(void *private
  78.290  		/*
  78.291  		 * Do it after the next timer tick:
  78.292  		 */
  78.293 -		schedule_delayed_work(&tty->flip.work, 1);
  78.294 +		schedule_delayed_work(&tty->buf.work, 1);
  78.295  		goto out;
  78.296  	}
  78.297  	spin_lock_irqsave(&tty->read_lock, flags);
  78.298 -	if (tty->flip.buf_num) {
  78.299 -		cp = tty->flip.char_buf + TTY_FLIPBUF_SIZE;
  78.300 -		fp = tty->flip.flag_buf + TTY_FLIPBUF_SIZE;
  78.301 -		tty->flip.buf_num = 0;
  78.302 -		tty->flip.char_buf_ptr = tty->flip.char_buf;
  78.303 -		tty->flip.flag_buf_ptr = tty->flip.flag_buf;
  78.304 -	} else {
  78.305 -		cp = tty->flip.char_buf;
  78.306 -		fp = tty->flip.flag_buf;
  78.307 -		tty->flip.buf_num = 1;
  78.308 -		tty->flip.char_buf_ptr = tty->flip.char_buf + TTY_FLIPBUF_SIZE;
  78.309 -		tty->flip.flag_buf_ptr = tty->flip.flag_buf + TTY_FLIPBUF_SIZE;
  78.310 +	while((tbuf = tty->buf.head) != NULL) {
  78.311 +		tty->buf.head = tbuf->next;
  78.312 +		if (tty->buf.head == NULL)
  78.313 +			tty->buf.tail = NULL;
  78.314 +		spin_unlock_irqrestore(&tty->read_lock, flags);
  78.315 +		/* printk("Process buffer %p for %d\n", tbuf, tbuf->used); */
  78.316 +		disc->receive_buf(tty, tbuf->char_buf_ptr,
  78.317 +				       tbuf->flag_buf_ptr,
  78.318 +				       tbuf->used);
  78.319 +		spin_lock_irqsave(&tty->read_lock, flags);
  78.320 +		tty_buffer_free(tty, tbuf);
  78.321  	}
  78.322 -	count = tty->flip.count;
  78.323 -	tty->flip.count = 0;
  78.324  	spin_unlock_irqrestore(&tty->read_lock, flags);
  78.325 -
  78.326 -	disc->receive_buf(tty, cp, fp, count);
  78.327  out:
  78.328  	tty_ldisc_deref(disc);
  78.329  }
  78.330 @@ -2656,11 +2857,12 @@ void tty_flip_buffer_push(struct tty_str
  78.331  	if (tty->low_latency)
  78.332  		flush_to_ldisc((void *) tty);
  78.333  	else
  78.334 -		schedule_delayed_work(&tty->flip.work, 1);
  78.335 +		schedule_delayed_work(&tty->buf.work, 1);
  78.336  }
  78.337  
  78.338  EXPORT_SYMBOL(tty_flip_buffer_push);
  78.339  
  78.340 +
  78.341  /*
  78.342   * This subroutine initializes a tty structure.
  78.343   */
  78.344 @@ -2671,10 +2873,10 @@ static void initialize_tty_struct(struct
  78.345  	tty_ldisc_assign(tty, tty_ldisc_get(N_TTY));
  78.346  	tty->pgrp = -1;
  78.347  	tty->overrun_time = jiffies;
  78.348 -	tty->flip.char_buf_ptr = tty->flip.char_buf;
  78.349 -	tty->flip.flag_buf_ptr = tty->flip.flag_buf;
  78.350 -	INIT_WORK(&tty->flip.work, flush_to_ldisc, tty);
  78.351 -	init_MUTEX(&tty->flip.pty_sem);
  78.352 +	tty->buf.head = tty->buf.tail = NULL;
  78.353 +	tty_buffer_init(tty);
  78.354 +	INIT_WORK(&tty->buf.work, flush_to_ldisc, tty);
  78.355 +	init_MUTEX(&tty->buf.pty_sem);
  78.356  	init_MUTEX(&tty->termios_sem);
  78.357  	init_waitqueue_head(&tty->write_wait);
  78.358  	init_waitqueue_head(&tty->read_wait);
    79.1 --- a/linux-2.6-xen-sparse/drivers/serial/Kconfig	Thu Feb 02 19:15:22 2006 +0100
    79.2 +++ b/linux-2.6-xen-sparse/drivers/serial/Kconfig	Thu Feb 02 19:16:38 2006 +0000
    79.3 @@ -96,6 +96,16 @@ config SERIAL_8250_NR_UARTS
    79.4  	  PCI enumeration and any ports that may be added at run-time
    79.5  	  via hot-plug, or any ISA multi-port serial cards.
    79.6  
    79.7 +config SERIAL_8250_RUNTIME_UARTS
    79.8 +	int "Number of 8250/16550 serial ports to register at runtime"
    79.9 +	depends on SERIAL_8250
   79.10 +	default "4"
   79.11 +	help
   79.12 +	  Set this to the maximum number of serial ports you want
   79.13 +	  the kernel to register at boot time.  This can be overriden
   79.14 +	  with the module parameter "nr_uarts", or boot-time parameter
   79.15 +	  8250.nr_uarts
   79.16 +
   79.17  config SERIAL_8250_EXTENDED
   79.18  	bool "Extended 8250/16550 serial driver options"
   79.19  	depends on SERIAL_8250
   79.20 @@ -181,7 +191,6 @@ config SERIAL_8250_BOCA
   79.21  	  To compile this driver as a module, choose M here: the module
   79.22  	  will be called 8250_boca.
   79.23  
   79.24 -
   79.25  config SERIAL_8250_HUB6
   79.26  	tristate "Support Hub6 cards"
   79.27  	depends on SERIAL_8250 != n && ISA && SERIAL_8250_MANY_PORTS
   79.28 @@ -271,6 +280,40 @@ config SERIAL_AMBA_PL011_CONSOLE
   79.29  	  your boot loader (lilo or loadlin) about how to pass options to the
   79.30  	  kernel at boot time.)
   79.31  
   79.32 +config SERIAL_AT91
   79.33 +	bool "AT91RM9200 serial port support"
   79.34 +	depends on ARM && ARCH_AT91RM9200
   79.35 +	select SERIAL_CORE
   79.36 +	help
   79.37 +	  This enables the driver for the on-chip UARTs of the AT91RM9200
   79.38 +	  processor.
   79.39 +
   79.40 +config SERIAL_AT91_CONSOLE
   79.41 +	bool "Support for console on AT91RM9200 serial port"
   79.42 +	depends on SERIAL_AT91=y
   79.43 +	select SERIAL_CORE_CONSOLE
   79.44 +	help
   79.45 +	  Say Y here if you wish to use a UART on the AT91RM9200 as the system
   79.46 +	  console (the system console is the device which receives all kernel
   79.47 +	  messages and warnings and which allows logins in single user mode).
   79.48 +
   79.49 +config SERIAL_AT91_TTYAT
   79.50 +	bool "Install as device ttyAT0-4 instead of ttyS0-4"
   79.51 +	depends on SERIAL_AT91=y
   79.52 +	help
   79.53 +	  Say Y here if you wish to have the five internal AT91RM9200 UARTs
   79.54 +	  appear as /dev/ttyAT0-4 (major 204, minor 154-158) instead of the
   79.55 +	  normal /dev/ttyS0-4 (major 4, minor 64-68). This is necessary if
   79.56 +	  you also want other UARTs, such as external 8250/16C550 compatible
   79.57 +	  UARTs.
   79.58 +	  The ttySn nodes are legally reserved for the 8250 serial driver
   79.59 +	  but are often misused by other serial drivers.
   79.60 +
   79.61 +	  To use this, you should create suitable ttyATn device nodes in
   79.62 +	  /dev/, and pass "console=ttyATn" to the kernel.
   79.63 +
   79.64 +	  Say Y if you have an external 8250/16C550 UART.  If unsure, say N.
   79.65 +
   79.66  config SERIAL_CLPS711X
   79.67  	tristate "CLPS711X serial port support"
   79.68  	depends on ARM && ARCH_CLPS711X
   79.69 @@ -360,29 +403,6 @@ config SERIAL_21285_CONSOLE
   79.70  	  your boot loader (lilo or loadlin) about how to pass options to the
   79.71  	  kernel at boot time.)
   79.72  
   79.73 -config SERIAL_UART00
   79.74 -	bool "Excalibur serial port (uart00) support"
   79.75 -	depends on ARM && ARCH_CAMELOT
   79.76 -	select SERIAL_CORE
   79.77 -	help
   79.78 -	  Say Y here if you want to use the hard logic uart on Excalibur. This
   79.79 -	  driver also supports soft logic implementations of this uart core.
   79.80 -
   79.81 -config SERIAL_UART00_CONSOLE
   79.82 -	bool "Support for console on Excalibur serial port"
   79.83 -	depends on SERIAL_UART00
   79.84 -	select SERIAL_CORE_CONSOLE
   79.85 -	help
   79.86 -	  Say Y here if you want to support a serial console on an Excalibur
   79.87 -	  hard logic uart or uart00 IP core.
   79.88 -
   79.89 -	  Even if you say Y here, the currently visible virtual console
   79.90 -	  (/dev/tty0) will still be used as the system console by default, but
   79.91 -	  you can alter that using a kernel command line option such as
   79.92 -	  "console=ttyS1". (Try "man bootparam" or see the documentation of
   79.93 -	  your boot loader (lilo or loadlin) about how to pass options to the
   79.94 -	  kernel at boot time.)
   79.95 -
   79.96  config SERIAL_MPSC
   79.97  	bool "Marvell MPSC serial port support"
   79.98  	depends on PPC32 && MV64X60
   79.99 @@ -828,7 +848,7 @@ config SERIAL_M32R_SIO_CONSOLE
  79.100  
  79.101  config SERIAL_M32R_PLDSIO
  79.102  	bool "M32R SIO I/F on a PLD"
  79.103 -	depends on SERIAL_M32R_SIO=y && (PLAT_OPSPUT || PALT_USRV || PLAT_M32700UT)
  79.104 +	depends on SERIAL_M32R_SIO=y && (PLAT_OPSPUT || PLAT_USRV || PLAT_M32700UT)
  79.105  	default n
  79.106  	help
  79.107  	  Say Y here if you want to use the M32R serial controller
  79.108 @@ -874,7 +894,7 @@ config SERIAL_VR41XX_CONSOLE
  79.109  
  79.110  config SERIAL_JSM
  79.111          tristate "Digi International NEO PCI Support"
  79.112 -	depends on PCI
  79.113 +	depends on PCI && BROKEN
  79.114          select SERIAL_CORE
  79.115          help
  79.116            This is a driver for Digi International's Neo series
  79.117 @@ -897,4 +917,12 @@ config SERIAL_SGI_IOC4
  79.118  		and wish to use the serial ports on this card, say Y.
  79.119  		Otherwise, say N.
  79.120  
  79.121 +config SERIAL_SGI_IOC3
  79.122 +	tristate "SGI Altix IOC3 serial support"
  79.123 +	depends on (IA64_GENERIC || IA64_SGI_SN2) && SGI_IOC3
  79.124 +	select SERIAL_CORE
  79.125 +	help
  79.126 +	  If you have an SGI Altix with an IOC3 serial card,
  79.127 +	  say Y or M.  Otherwise, say N.
  79.128 +
  79.129  endmenu
    80.1 --- a/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c	Thu Feb 02 19:15:22 2006 +0100
    80.2 +++ b/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c	Thu Feb 02 19:16:38 2006 +0000
    80.3 @@ -91,15 +91,13 @@ static void balloon_process(void *unused
    80.4  static DECLARE_WORK(balloon_worker, balloon_process, NULL);
    80.5  static struct timer_list balloon_timer;
    80.6  
    80.7 -/* Use the private and mapping fields of struct page as a list. */
    80.8 -#define PAGE_TO_LIST(p) ((struct list_head *)&p->u.private)
    80.9 -#define LIST_TO_PAGE(l)				\
   80.10 -	(list_entry(((unsigned long *)l), struct page, u.private))
   80.11 +#define PAGE_TO_LIST(p) (&(p)->ballooned)
   80.12 +#define LIST_TO_PAGE(l) list_entry((l), struct page, ballooned)
   80.13  #define UNLIST_PAGE(p)				\
   80.14  	do {					\
   80.15  		list_del(PAGE_TO_LIST(p));	\
   80.16 -		p->mapping = NULL;		\
   80.17 -		p->u.private = 0;		\
   80.18 +		PAGE_TO_LIST(p)->next = NULL;	\
   80.19 +		PAGE_TO_LIST(p)->prev = NULL;	\
   80.20  	} while(0)
   80.21  
   80.22  #define IPRINTK(fmt, args...) \
    81.1 --- a/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c	Thu Feb 02 19:15:22 2006 +0100
    81.2 +++ b/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c	Thu Feb 02 19:16:38 2006 +0000
    81.3 @@ -664,7 +664,8 @@ static irqreturn_t blkif_int(int irq, vo
    81.4  				req, (bret->status == BLKIF_RSP_OKAY),
    81.5  				req->hard_nr_sectors);
    81.6  			BUG_ON(ret);
    81.7 -			end_that_request_last(req);
    81.8 +			end_that_request_last(
    81.9 +				req, (bret->status == BLKIF_RSP_OKAY));
   81.10  			break;
   81.11  		default:
   81.12  			BUG();
    82.1 --- a/linux-2.6-xen-sparse/drivers/xen/char/mem.c	Thu Feb 02 19:15:22 2006 +0100
    82.2 +++ b/linux-2.6-xen-sparse/drivers/xen/char/mem.c	Thu Feb 02 19:16:38 2006 +0000
    82.3 @@ -91,11 +91,13 @@ out:
    82.4  
    82.5  static int mmap_mem(struct file * file, struct vm_area_struct * vma)
    82.6  {
    82.7 +	size_t size = vma->vm_end - vma->vm_start;
    82.8 +
    82.9  	if (uncached_access(file))
   82.10  		vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
   82.11  
   82.12  	if (direct_remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,
   82.13 -				   vma->vm_end - vma->vm_start,
   82.14 +				   size,
   82.15  				   vma->vm_page_prot, DOMID_IO))
   82.16  		return -EAGAIN;
   82.17  
   82.18 @@ -114,7 +116,7 @@ static loff_t memory_lseek(struct file *
   82.19  {
   82.20  	loff_t ret;
   82.21  
   82.22 -	down(&file->f_dentry->d_inode->i_sem);
   82.23 +	mutex_lock(&file->f_dentry->d_inode->i_mutex);
   82.24  	switch (orig) {
   82.25  		case 0:
   82.26  			file->f_pos = offset;
   82.27 @@ -129,7 +131,7 @@ static loff_t memory_lseek(struct file *
   82.28  		default:
   82.29  			ret = -EINVAL;
   82.30  	}
   82.31 -	up(&file->f_dentry->d_inode->i_sem);
   82.32 +	mutex_unlock(&file->f_dentry->d_inode->i_mutex);
   82.33  	return ret;
   82.34  }
   82.35  
    83.1 --- a/linux-2.6-xen-sparse/drivers/xen/core/smpboot.c	Thu Feb 02 19:15:22 2006 +0100
    83.2 +++ b/linux-2.6-xen-sparse/drivers/xen/core/smpboot.c	Thu Feb 02 19:16:38 2006 +0000
    83.3 @@ -188,7 +188,7 @@ void vcpu_prepare(int vcpu)
    83.4  
    83.5  	ctxt.ctrlreg[3] = virt_to_mfn(init_level4_pgt) << PAGE_SHIFT;
    83.6  
    83.7 -	ctxt.gs_base_kernel = (unsigned long)(cpu_pda + vcpu);
    83.8 +	ctxt.gs_base_kernel = (unsigned long)(cpu_pda(vcpu));
    83.9  #endif
   83.10  
   83.11  	BUG_ON(HYPERVISOR_vcpu_op(VCPUOP_initialise, vcpu, &ctxt));
   83.12 @@ -226,8 +226,8 @@ void __init smp_prepare_cpus(unsigned in
   83.13  			panic("failed fork for CPU %d", cpu);
   83.14  
   83.15  #ifdef __x86_64__
   83.16 -		cpu_pda[cpu].pcurrent = idle;
   83.17 -		cpu_pda[cpu].cpunumber = cpu;
   83.18 +		cpu_pda(cpu)->pcurrent = idle;
   83.19 +		cpu_pda(cpu)->cpunumber = cpu;
   83.20  		per_cpu(init_tss,cpu).rsp0 = idle->thread.rsp;
   83.21  		clear_ti_thread_flag(idle->thread_info, TIF_FORK);
   83.22  #endif
    84.1 --- a/linux-2.6-xen-sparse/drivers/xen/netback/xenbus.c	Thu Feb 02 19:15:22 2006 +0100
    84.2 +++ b/linux-2.6-xen-sparse/drivers/xen/netback/xenbus.c	Thu Feb 02 19:16:38 2006 +0000
    84.3 @@ -112,15 +112,15 @@ fail:
    84.4   * and vif variables to the environment, for the benefit of the vif-* hotplug
    84.5   * scripts.
    84.6   */
    84.7 -static int netback_hotplug(struct xenbus_device *xdev, char **envp,
    84.8 -			   int num_envp, char *buffer, int buffer_size)
    84.9 +static int netback_uevent(struct xenbus_device *xdev, char **envp,
   84.10 +			  int num_envp, char *buffer, int buffer_size)
   84.11  {
   84.12  	struct backend_info *be = xdev->data;
   84.13  	netif_t *netif = be->netif;
   84.14  	int i = 0, length = 0;
   84.15  	char *val;
   84.16  
   84.17 -	DPRINTK("netback_hotplug");
   84.18 +	DPRINTK("netback_uevent");
   84.19  
   84.20  	val = xenbus_read(XBT_NULL, xdev->nodename, "script", NULL);
   84.21  	if (IS_ERR(val)) {
   84.22 @@ -129,15 +129,13 @@ static int netback_hotplug(struct xenbus
   84.23  		return err;
   84.24  	}
   84.25  	else {
   84.26 -		add_hotplug_env_var(envp, num_envp, &i,
   84.27 -				    buffer, buffer_size, &length,
   84.28 -				    "script=%s", val);
   84.29 +		add_uevent_var(envp, num_envp, &i, buffer, buffer_size,
   84.30 +			       &length, "script=%s", val);
   84.31  		kfree(val);
   84.32  	}
   84.33  
   84.34 -	add_hotplug_env_var(envp, num_envp, &i,
   84.35 -			    buffer, buffer_size, &length,
   84.36 -			    "vif=%s", netif->dev->name);
   84.37 +	add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &length,
   84.38 +		       "vif=%s", netif->dev->name);
   84.39  
   84.40  	envp[i] = NULL;
   84.41  
   84.42 @@ -183,7 +181,7 @@ static void backend_changed(struct xenbu
   84.43  			return;
   84.44  		}
   84.45  
   84.46 -		kobject_hotplug(&dev->dev.kobj, KOBJ_ONLINE);
   84.47 +		kobject_uevent(&dev->dev.kobj, KOBJ_ONLINE);
   84.48  
   84.49  		maybe_connect(be);
   84.50  	}
   84.51 @@ -216,7 +214,7 @@ static void frontend_changed(struct xenb
   84.52  		break;
   84.53  
   84.54  	case XenbusStateClosed:
   84.55 -		kobject_hotplug(&dev->dev.kobj, KOBJ_OFFLINE);
   84.56 +		kobject_uevent(&dev->dev.kobj, KOBJ_OFFLINE);
   84.57  		device_unregister(&dev->dev);
   84.58  		break;
   84.59  
   84.60 @@ -307,7 +305,7 @@ static struct xenbus_driver netback = {
   84.61  	.ids = netback_ids,
   84.62  	.probe = netback_probe,
   84.63  	.remove = netback_remove,
   84.64 -	.hotplug = netback_hotplug,
   84.65 +	.uevent = netback_uevent,
   84.66  	.otherend_changed = frontend_changed,
   84.67  };
   84.68  
    85.1 --- a/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c	Thu Feb 02 19:15:22 2006 +0100
    85.2 +++ b/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c	Thu Feb 02 19:16:38 2006 +0000
    85.3 @@ -45,6 +45,7 @@
    85.4  #include <linux/bitops.h>
    85.5  #include <linux/proc_fs.h>
    85.6  #include <linux/ethtool.h>
    85.7 +#include <linux/in.h>
    85.8  #include <net/sock.h>
    85.9  #include <net/pkt_sched.h>
   85.10  #include <net/arp.h>
    86.1 --- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c	Thu Feb 02 19:15:22 2006 +0100
    86.2 +++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c	Thu Feb 02 19:16:38 2006 +0000
    86.3 @@ -217,8 +217,8 @@ static int backend_bus_id(char bus_id[BU
    86.4  	return 0;
    86.5  }
    86.6  
    86.7 -static int xenbus_hotplug_backend(struct device *dev, char **envp,
    86.8 -				  int num_envp, char *buffer, int buffer_size);
    86.9 +static int xenbus_uevent_backend(struct device *dev, char **envp,
   86.10 +				 int num_envp, char *buffer, int buffer_size);
   86.11  static int xenbus_probe_backend(const char *type, const char *domid);
   86.12  static struct xen_bus_type xenbus_backend = {
   86.13  	.root = "backend",
   86.14 @@ -228,15 +228,15 @@ static struct xen_bus_type xenbus_backen
   86.15  	.bus = {
   86.16  		.name  = "xen-backend",
   86.17  		.match = xenbus_match,
   86.18 -		.hotplug = xenbus_hotplug_backend,
   86.19 +		.uevent = xenbus_uevent_backend,
   86.20  	},
   86.21  	.dev = {
   86.22  		.bus_id = "xen-backend",
   86.23  	},
   86.24  };
   86.25  
   86.26 -static int xenbus_hotplug_backend(struct device *dev, char **envp,
   86.27 -				  int num_envp, char *buffer, int buffer_size)
   86.28 +static int xenbus_uevent_backend(struct device *dev, char **envp,
   86.29 +				 int num_envp, char *buffer, int buffer_size)
   86.30  {
   86.31  	struct xenbus_device *xdev;
   86.32  	struct xenbus_driver *drv;
   86.33 @@ -253,17 +253,14 @@ static int xenbus_hotplug_backend(struct
   86.34  		return -ENODEV;
   86.35  
   86.36  	/* stuff we want to pass to /sbin/hotplug */
   86.37 -	add_hotplug_env_var(envp, num_envp, &i,
   86.38 -			    buffer, buffer_size, &length,
   86.39 -			    "XENBUS_TYPE=%s", xdev->devicetype);
   86.40 +	add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &length,
   86.41 +		       "XENBUS_TYPE=%s", xdev->devicetype);
   86.42  
   86.43 -	add_hotplug_env_var(envp, num_envp, &i,
   86.44 -			    buffer, buffer_size, &length,
   86.45 -			    "XENBUS_PATH=%s", xdev->nodename);
   86.46 +	add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &length,
   86.47 +		       "XENBUS_PATH=%s", xdev->nodename);
   86.48  
   86.49 -	add_hotplug_env_var(envp, num_envp, &i,
   86.50 -			    buffer, buffer_size, &length,
   86.51 -			    "XENBUS_BASE_PATH=%s", xenbus_backend.root);
   86.52 +	add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &length,
   86.53 +		       "XENBUS_BASE_PATH=%s", xenbus_backend.root);
   86.54  
   86.55  	/* terminate, set to next free slot, shrink available space */
   86.56  	envp[i] = NULL;
   86.57 @@ -274,9 +271,9 @@ static int xenbus_hotplug_backend(struct
   86.58  
   86.59  	if (dev->driver) {
   86.60  		drv = to_xenbus_driver(dev->driver);
   86.61 -		if (drv && drv->hotplug)
   86.62 -			return drv->hotplug(xdev, envp, num_envp, buffer,
   86.63 -					    buffer_size);
   86.64 +		if (drv && drv->uevent)
   86.65 +			return drv->uevent(xdev, envp, num_envp, buffer,
   86.66 +					   buffer_size);
   86.67  	}
   86.68  
   86.69  	return 0;
    87.1 --- a/linux-2.6-xen-sparse/fs/Kconfig	Thu Feb 02 19:15:22 2006 +0100
    87.2 +++ b/linux-2.6-xen-sparse/fs/Kconfig	Thu Feb 02 19:16:38 2006 +0000
    87.3 @@ -70,6 +70,7 @@ config FS_XIP
    87.4  
    87.5  config EXT3_FS
    87.6  	tristate "Ext3 journalling file system support"
    87.7 +	select JBD
    87.8  	help
    87.9  	  This is the journaling version of the Second extended file system
   87.10  	  (often called ext3), the de facto standard Linux file system
   87.11 @@ -138,23 +139,20 @@ config EXT3_FS_SECURITY
   87.12  	  extended attributes for file security labels, say N.
   87.13  
   87.14  config JBD
   87.15 -# CONFIG_JBD could be its own option (even modular), but until there are
   87.16 -# other users than ext3, we will simply make it be the same as CONFIG_EXT3_FS
   87.17 -# dep_tristate '  Journal Block Device support (JBD for ext3)' CONFIG_JBD $CONFIG_EXT3_FS
   87.18  	tristate
   87.19 -	default EXT3_FS
   87.20  	help
   87.21  	  This is a generic journaling layer for block devices.  It is
   87.22 -	  currently used by the ext3 file system, but it could also be used to
   87.23 -	  add journal support to other file systems or block devices such as
   87.24 -	  RAID or LVM.
   87.25 +	  currently used by the ext3 and OCFS2 file systems, but it could
   87.26 +	  also be used to add journal support to other file systems or block
   87.27 +	  devices such as RAID or LVM.
   87.28  
   87.29 -	  If you are using the ext3 file system, you need to say Y here. If
   87.30 -	  you are not using ext3 then you will probably want to say N.
   87.31 +	  If you are using the ext3 or OCFS2 file systems, you need to
   87.32 +	  say Y here. If you are not using ext3 OCFS2 then you will probably
   87.33 +	  want to say N.
   87.34  
   87.35  	  To compile this device as a module, choose M here: the module will be
   87.36 -	  called jbd.  If you are compiling ext3 into the kernel, you cannot
   87.37 -	  compile this code as a module.
   87.38 +	  called jbd.  If you are compiling ext3 or OCFS2 into the kernel,
   87.39 +	  you cannot compile this code as a module.
   87.40  
   87.41  config JBD_DEBUG
   87.42  	bool "JBD (ext3) debugging support"
   87.43 @@ -326,6 +324,38 @@ config FS_POSIX_ACL
   87.44  
   87.45  source "fs/xfs/Kconfig"
   87.46  
   87.47 +config OCFS2_FS
   87.48 +	tristate "OCFS2 file system support (EXPERIMENTAL)"
   87.49 +	depends on NET && EXPERIMENTAL
   87.50 +	select CONFIGFS_FS
   87.51 +	select JBD
   87.52 +	select CRC32
   87.53 +	select INET
   87.54 +	help
   87.55 +	  OCFS2 is a general purpose extent based shared disk cluster file
   87.56 +	  system with many similarities to ext3. It supports 64 bit inode
   87.57 +	  numbers, and has automatically extending metadata groups which may
   87.58 +	  also make it attractive for non-clustered use.
   87.59 +
   87.60 +	  You'll want to install the ocfs2-tools package in order to at least
   87.61 +	  get "mount.ocfs2".
   87.62 +
   87.63 +	  Project web page:    http://oss.oracle.com/projects/ocfs2
   87.64 +	  Tools web page:      http://oss.oracle.com/projects/ocfs2-tools
   87.65 +	  OCFS2 mailing lists: http://oss.oracle.com/projects/ocfs2/mailman/
   87.66 +
   87.67 +	  Note: Features which OCFS2 does not support yet:
   87.68 +	          - extended attributes
   87.69 +		  - shared writeable mmap
   87.70 +	          - loopback is supported, but data written will not
   87.71 +	            be cluster coherent.
   87.72 +	          - quotas
   87.73 +	          - cluster aware flock
   87.74 +	          - Directory change notification (F_NOTIFY)
   87.75 +	          - Distributed Caching (F_SETLEASE/F_GETLEASE/break_lease)
   87.76 +	          - POSIX ACLs
   87.77 +	          - readpages / writepages (not user visible)
   87.78 +
   87.79  config MINIX_FS
   87.80  	tristate "Minix fs support"
   87.81  	help
   87.82 @@ -768,7 +798,7 @@ config PROC_KCORE
   87.83  
   87.84  config PROC_VMCORE
   87.85          bool "/proc/vmcore support (EXPERIMENTAL)"
   87.86 -        depends on PROC_FS && EMBEDDED && EXPERIMENTAL && CRASH_DUMP
   87.87 +        depends on PROC_FS && EXPERIMENTAL && CRASH_DUMP
   87.88          help
   87.89          Exports the dump image of crashed kernel in ELF format.
   87.90  
   87.91 @@ -842,6 +872,20 @@ config RELAYFS_FS
   87.92  
   87.93  	  If unsure, say N.
   87.94  
   87.95 +config CONFIGFS_FS
   87.96 +	tristate "Userspace-driven configuration filesystem (EXPERIMENTAL)"
   87.97 +	depends on EXPERIMENTAL
   87.98 +	help
   87.99 +	  configfs is a ram-based filesystem that provides the converse
  87.100 +	  of sysfs's functionality. Where sysfs is a filesystem-based
  87.101 +	  view of kernel objects, configfs is a filesystem-based manager
  87.102 +	  of kernel objects, or config_items.
  87.103 +
  87.104 +	  Both sysfs and configfs can and should exist together on the
  87.105 +	  same system. One is not a replacement for the other.
  87.106 +
  87.107 +	  If unsure, say N.
  87.108 +
  87.109  endmenu
  87.110  
  87.111  menu "Miscellaneous filesystems"
    88.1 --- a/linux-2.6-xen-sparse/include/asm-i386/atomic.h	Thu Feb 02 19:15:22 2006 +0100
    88.2 +++ b/linux-2.6-xen-sparse/include/asm-i386/atomic.h	Thu Feb 02 19:16:38 2006 +0000
    88.3 @@ -211,6 +211,7 @@ static __inline__ int atomic_sub_return(
    88.4  }
    88.5  
    88.6  #define atomic_cmpxchg(v, old, new) ((int)cmpxchg(&((v)->counter), old, new))
    88.7 +#define atomic_xchg(v, new) (xchg(&((v)->counter), new))
    88.8  
    88.9  /**
   88.10   * atomic_add_unless - add unless the number is a given value
   88.11 @@ -249,4 +250,5 @@ static __inline__ int atomic_sub_return(
   88.12  #define smp_mb__before_atomic_inc()	barrier()
   88.13  #define smp_mb__after_atomic_inc()	barrier()
   88.14  
   88.15 +#include <asm-generic/atomic.h>
   88.16  #endif
    89.1 --- a/linux-2.6-xen-sparse/include/asm-i386/bitops.h	Thu Feb 02 19:15:22 2006 +0100
    89.2 +++ b/linux-2.6-xen-sparse/include/asm-i386/bitops.h	Thu Feb 02 19:16:38 2006 +0000
    89.3 @@ -38,7 +38,7 @@ static inline void set_bit(int nr, volat
    89.4  {
    89.5  	__asm__ __volatile__( LOCK
    89.6  		"btsl %1,%0"
    89.7 -		:"=m" (ADDR)
    89.8 +		:"+m" (ADDR)
    89.9  		:"Ir" (nr));
   89.10  }
   89.11  
   89.12 @@ -55,7 +55,7 @@ static inline void __set_bit(int nr, vol
   89.13  {
   89.14  	__asm__(
   89.15  		"btsl %1,%0"
   89.16 -		:"=m" (ADDR)
   89.17 +		:"+m" (ADDR)
   89.18  		:"Ir" (nr));
   89.19  }
   89.20  
   89.21 @@ -73,7 +73,7 @@ static inline void clear_bit(int nr, vol
   89.22  {
   89.23  	__asm__ __volatile__( LOCK
   89.24  		"btrl %1,%0"
   89.25 -		:"=m" (ADDR)
   89.26 +		:"+m" (ADDR)
   89.27  		:"Ir" (nr));
   89.28  }
   89.29  
   89.30 @@ -81,7 +81,7 @@ static inline void __clear_bit(int nr, v
   89.31  {
   89.32  	__asm__ __volatile__(
   89.33  		"btrl %1,%0"
   89.34 -		:"=m" (ADDR)
   89.35 +		:"+m" (ADDR)
   89.36  		:"Ir" (nr));
   89.37  }
   89.38  #define smp_mb__before_clear_bit()	barrier()
   89.39 @@ -100,7 +100,7 @@ static inline void __change_bit(int nr, 
   89.40  {
   89.41  	__asm__ __volatile__(
   89.42  		"btcl %1,%0"
   89.43 -		:"=m" (ADDR)
   89.44 +		:"+m" (ADDR)
   89.45  		:"Ir" (nr));
   89.46  }
   89.47  
   89.48 @@ -118,7 +118,7 @@ static inline void change_bit(int nr, vo
   89.49  {
   89.50  	__asm__ __volatile__( LOCK
   89.51  		"btcl %1,%0"
   89.52 -		:"=m" (ADDR)
   89.53 +		:"+m" (ADDR)
   89.54  		:"Ir" (nr));
   89.55  }
   89.56  
   89.57 @@ -137,7 +137,7 @@ static inline int test_and_set_bit(int n
   89.58  
   89.59  	__asm__ __volatile__( LOCK
   89.60  		"btsl %2,%1\n\tsbbl %0,%0"
   89.61 -		:"=r" (oldbit),"=m" (ADDR)
   89.62 +		:"=r" (oldbit),"+m" (ADDR)
   89.63  		:"Ir" (nr) : "memory");
   89.64  	return oldbit;
   89.65  }
   89.66 @@ -157,7 +157,7 @@ static inline int __test_and_set_bit(int
   89.67  
   89.68  	__asm__(
   89.69  		"btsl %2,%1\n\tsbbl %0,%0"
   89.70 -		:"=r" (oldbit),"=m" (ADDR)
   89.71 +		:"=r" (oldbit),"+m" (ADDR)
   89.72  		:"Ir" (nr));
   89.73  	return oldbit;
   89.74  }
   89.75 @@ -177,7 +177,7 @@ static inline int test_and_clear_bit(int
   89.76  
   89.77  	__asm__ __volatile__( LOCK
   89.78  		"btrl %2,%1\n\tsbbl %0,%0"
   89.79 -		:"=r" (oldbit),"=m" (ADDR)
   89.80 +		:"=r" (oldbit),"+m" (ADDR)
   89.81  		:"Ir" (nr) : "memory");
   89.82  	return oldbit;
   89.83  }
   89.84 @@ -197,7 +197,7 @@ static inline int __test_and_clear_bit(i
   89.85  
   89.86  	__asm__(
   89.87  		"btrl %2,%1\n\tsbbl %0,%0"
   89.88 -		:"=r" (oldbit),"=m" (ADDR)
   89.89 +		:"=r" (oldbit),"+m" (ADDR)
   89.90  		:"Ir" (nr));
   89.91  	return oldbit;
   89.92  }
   89.93 @@ -209,7 +209,7 @@ static inline int __test_and_change_bit(
   89.94  
   89.95  	__asm__ __volatile__(
   89.96  		"btcl %2,%1\n\tsbbl %0,%0"
   89.97 -		:"=r" (oldbit),"=m" (ADDR)
   89.98 +		:"=r" (oldbit),"+m" (ADDR)
   89.99  		:"Ir" (nr) : "memory");
  89.100  	return oldbit;
  89.101  }
  89.102 @@ -228,7 +228,7 @@ static inline int test_and_change_bit(in
  89.103  
  89.104  	__asm__ __volatile__( LOCK
  89.105  		"btcl %2,%1\n\tsbbl %0,%0"
  89.106 -		:"=r" (oldbit),"=m" (ADDR)
  89.107 +		:"=r" (oldbit),"+m" (ADDR)
  89.108  		:"Ir" (nr) : "memory");
  89.109  	return oldbit;
  89.110  }
  89.111 @@ -242,7 +242,7 @@ static inline int test_and_change_bit(in
  89.112  static int test_bit(int nr, const volatile void * addr);
  89.113  #endif
  89.114  
  89.115 -static inline int constant_test_bit(int nr, const volatile unsigned long *addr)
  89.116 +static __always_inline int constant_test_bit(int nr, const volatile unsigned long *addr)
  89.117  {
  89.118  	return ((1UL << (nr & 31)) & (addr[nr >> 5])) != 0;
  89.119  }
  89.120 @@ -327,9 +327,9 @@ static inline unsigned long __ffs(unsign
  89.121   * Returns the bit-number of the first set bit, not the number of the byte
  89.122   * containing a bit.
  89.123   */
  89.124 -static inline int find_first_bit(const unsigned long *addr, unsigned size)
  89.125 +static inline unsigned find_first_bit(const unsigned long *addr, unsigned size)
  89.126  {
  89.127 -	int x = 0;
  89.128 +	unsigned x = 0;
  89.129  
  89.130  	while (x < size) {
  89.131  		unsigned long val = *addr++;
  89.132 @@ -362,11 +362,7 @@ static inline unsigned long ffz(unsigned
  89.133  	return word;
  89.134  }
  89.135  
  89.136 -/*
  89.137 - * fls: find last bit set.
  89.138 - */
  89.139 -
  89.140 -#define fls(x) generic_fls(x)
  89.141 +#define fls64(x)   generic_fls64(x)
  89.142  
  89.143  #ifdef __KERNEL__
  89.144  
  89.145 @@ -409,6 +405,23 @@ static inline int ffs(int x)
  89.146  }
  89.147  
  89.148  /**
  89.149 + * fls - find last bit set
  89.150 + * @x: the word to search
  89.151 + *
  89.152 + * This is defined the same way as ffs.
  89.153 + */
  89.154 +static inline int fls(int x)
  89.155 +{
  89.156 +	int r;
  89.157 +
  89.158 +	__asm__("bsrl %1,%0\n\t"
  89.159 +		"jnz 1f\n\t"
  89.160 +		"movl $-1,%0\n"
  89.161 +		"1:" : "=r" (r) : "rm" (x));
  89.162 +	return r+1;
  89.163 +}
  89.164 +
  89.165 +/**
  89.166   * hweightN - returns the hamming weight of a N-bit word
  89.167   * @x: the word to weigh
  89.168   *
    90.1 --- a/linux-2.6-xen-sparse/include/asm-i386/futex.h	Thu Feb 02 19:15:22 2006 +0100
    90.2 +++ b/linux-2.6-xen-sparse/include/asm-i386/futex.h	Thu Feb 02 19:16:38 2006 +0000
    90.3 @@ -61,7 +61,7 @@ futex_atomic_op_inuser (int encoded_op, 
    90.4  	if (op == FUTEX_OP_SET)
    90.5  		__futex_atomic_op1("xchgl %0, %2", ret, oldval, uaddr, oparg);
    90.6  	else {
    90.7 -#if !defined(CONFIG_X86_BSWAP) && !defined(CONFIG_UML)
    90.8 +#ifndef CONFIG_X86_BSWAP
    90.9  		if (boot_cpu_data.x86 == 3)
   90.10  			ret = -ENOSYS;
   90.11  		else
    91.1 --- a/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/desc.h	Thu Feb 02 19:15:22 2006 +0100
    91.2 +++ b/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/desc.h	Thu Feb 02 19:16:38 2006 +0000
    91.3 @@ -15,8 +15,6 @@
    91.4  
    91.5  extern struct desc_struct cpu_gdt_table[NR_CPUS][GDT_ENTRIES];
    91.6  
    91.7 -#define get_cpu_gdt_table(_cpu) ((struct desc_struct *)cpu_gdt_descr[(_cpu)].address)
    91.8 -
    91.9  DECLARE_PER_CPU(unsigned char, cpu_16bit_stack[CPU_16BIT_STACK_SIZE]);
   91.10  
   91.11  struct Xgt_desc_struct {
   91.12 @@ -27,6 +25,11 @@ struct Xgt_desc_struct {
   91.13  
   91.14  extern struct Xgt_desc_struct idt_descr, cpu_gdt_descr[NR_CPUS];
   91.15  
   91.16 +static inline struct desc_struct *get_cpu_gdt_table(unsigned int cpu)
   91.17 +{
   91.18 +	return ((struct desc_struct *)cpu_gdt_descr[cpu].address);
   91.19 +}
   91.20 +
   91.21  #define load_TR_desc() __asm__ __volatile__("ltr %w0"::"q" (GDT_ENTRY_TSS*8))
   91.22  #define load_LDT_desc() __asm__ __volatile__("lldt %w0"::"q" (GDT_ENTRY_LDT*8))
   91.23  
    92.1 --- a/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/dma-mapping.h	Thu Feb 02 19:15:22 2006 +0100
    92.2 +++ b/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/dma-mapping.h	Thu Feb 02 19:16:38 2006 +0000
    92.3 @@ -126,7 +126,7 @@ dma_get_cache_alignment(void)
    92.4  {
    92.5  	/* no easy way to get cache size on all x86, so return the
    92.6  	 * maximum possible, to be safe */
    92.7 -	return (1 << L1_CACHE_SHIFT_MAX);
    92.8 +	return (1 << INTERNODE_CACHE_SHIFT);
    92.9  }
   92.10  #else
   92.11  extern int dma_get_cache_alignment(void);
    93.1 --- a/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/io.h	Thu Feb 02 19:15:22 2006 +0100
    93.2 +++ b/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/io.h	Thu Feb 02 19:16:38 2006 +0000
    93.3 @@ -143,6 +143,11 @@ extern void iounmap(volatile void __iome
    93.4  extern void *bt_ioremap(unsigned long offset, unsigned long size);
    93.5  extern void bt_iounmap(void *addr, unsigned long size);
    93.6  
    93.7 +/* Use early IO mappings for DMI because it's initialized early */
    93.8 +#define dmi_ioremap bt_ioremap
    93.9 +#define dmi_iounmap bt_iounmap
   93.10 +#define dmi_alloc alloc_bootmem
   93.11 +
   93.12  /*
   93.13   * ISA I/O bus memory addresses are 1:1 with the physical address.
   93.14   */
    94.1 --- a/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/processor.h	Thu Feb 02 19:15:22 2006 +0100
    94.2 +++ b/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/processor.h	Thu Feb 02 19:16:38 2006 +0000
    94.3 @@ -62,9 +62,11 @@ struct cpuinfo_x86 {
    94.4  	int 	x86_cache_size;  /* in KB - valid for CPUS which support this
    94.5  				    call  */
    94.6  	int 	x86_cache_alignment;	/* In bytes */
    94.7 -	int	fdiv_bug;
    94.8 -	int	f00f_bug;
    94.9 -	int	coma_bug;
   94.10 +	char	fdiv_bug;
   94.11 +	char	f00f_bug;
   94.12 +	char	coma_bug;
   94.13 +	char	pad0;
   94.14 +	int	x86_power;
   94.15  	unsigned long loops_per_jiffy;
   94.16  	unsigned char x86_max_cores;	/* cpuid returned max cores value */
   94.17  	unsigned char booted_cores;	/* number of cores as seen by OS */
   94.18 @@ -289,9 +291,11 @@ static inline void clear_in_cr4 (unsigne
   94.19  	outb((data), 0x23); \
   94.20  } while (0)
   94.21  
   94.22 -static inline void serialize_cpu(void)
   94.23 +/* Stop speculative execution */
   94.24 +static inline void sync_core(void)
   94.25  {
   94.26 -	 __asm__ __volatile__ ("cpuid" : : : "ax", "bx", "cx", "dx");
   94.27 +	int tmp;
   94.28 +	asm volatile("cpuid" : "=a" (tmp) : "0" (1) : "ebx","ecx","edx","memory");
   94.29  }
   94.30  
   94.31  static inline void __monitor(const void *eax, unsigned long ecx,
   94.32 @@ -562,10 +566,20 @@ unsigned long get_wchan(struct task_stru
   94.33         (unsigned long)(&__ptr[THREAD_SIZE_LONGS]);                     \
   94.34  })
   94.35  
   94.36 +/*
   94.37 + * The below -8 is to reserve 8 bytes on top of the ring0 stack.
   94.38 + * This is necessary to guarantee that the entire "struct pt_regs"
   94.39 + * is accessable even if the CPU haven't stored the SS/ESP registers
   94.40 + * on the stack (interrupt gate does not save these registers
   94.41 + * when switching to the same priv ring).
   94.42 + * Therefore beware: accessing the xss/esp fields of the
   94.43 + * "struct pt_regs" is possible, but they may contain the
   94.44 + * completely wrong values.
   94.45 + */
   94.46  #define task_pt_regs(task)                                             \
   94.47  ({                                                                     \
   94.48         struct pt_regs *__regs__;                                       \
   94.49 -       __regs__ = (struct pt_regs *)KSTK_TOP((task)->thread_info);     \
   94.50 +       __regs__ = (struct pt_regs *)(KSTK_TOP(task_stack_page(task))-8); \
   94.51         __regs__ - 1;                                                   \
   94.52  })
   94.53  
    95.1 --- a/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/ptrace.h	Thu Feb 02 19:15:22 2006 +0100
    95.2 +++ b/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/ptrace.h	Thu Feb 02 19:16:38 2006 +0000
    95.3 @@ -54,6 +54,9 @@ struct pt_regs {
    95.4  #define PTRACE_GET_THREAD_AREA    25
    95.5  #define PTRACE_SET_THREAD_AREA    26
    95.6  
    95.7 +#define PTRACE_SYSEMU		  31
    95.8 +#define PTRACE_SYSEMU_SINGLESTEP  32
    95.9 +
   95.10  #ifdef __KERNEL__
   95.11  
   95.12  #include <asm/vm86.h>
    96.1 --- a/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/segment.h	Thu Feb 02 19:15:22 2006 +0100
    96.2 +++ b/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/segment.h	Thu Feb 02 19:16:38 2006 +0000
    96.3 @@ -89,6 +89,20 @@
    96.4  
    96.5  #define __BOOT_DS	FLAT_KERNEL_DS
    96.6  
    96.7 +/* The PnP BIOS entries in the GDT */
    96.8 +#define GDT_ENTRY_PNPBIOS_CS32		(GDT_ENTRY_PNPBIOS_BASE + 0)
    96.9 +#define GDT_ENTRY_PNPBIOS_CS16		(GDT_ENTRY_PNPBIOS_BASE + 1)
   96.10 +#define GDT_ENTRY_PNPBIOS_DS		(GDT_ENTRY_PNPBIOS_BASE + 2)
   96.11 +#define GDT_ENTRY_PNPBIOS_TS1		(GDT_ENTRY_PNPBIOS_BASE + 3)
   96.12 +#define GDT_ENTRY_PNPBIOS_TS2		(GDT_ENTRY_PNPBIOS_BASE + 4)
   96.13 +
   96.14 +/* The PnP BIOS selectors */
   96.15 +#define PNP_CS32   (GDT_ENTRY_PNPBIOS_CS32 * 8)	/* segment for calling fn */
   96.16 +#define PNP_CS16   (GDT_ENTRY_PNPBIOS_CS16 * 8)	/* code segment for BIOS */
   96.17 +#define PNP_DS     (GDT_ENTRY_PNPBIOS_DS * 8)	/* data segment for BIOS */
   96.18 +#define PNP_TS1    (GDT_ENTRY_PNPBIOS_TS1 * 8)	/* transfer data segment */
   96.19 +#define PNP_TS2    (GDT_ENTRY_PNPBIOS_TS2 * 8)	/* another data segment */
   96.20 +
   96.21  /*
   96.22   * The interrupt descriptor table has room for 256 idt's,
   96.23   * the global descriptor table is dependent on the number
    97.1 --- a/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/synch_bitops.h	Thu Feb 02 19:15:22 2006 +0100
    97.2 +++ b/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/synch_bitops.h	Thu Feb 02 19:16:38 2006 +0000
    97.3 @@ -15,21 +15,21 @@ static __inline__ void synch_set_bit(int
    97.4  {
    97.5      __asm__ __volatile__ ( 
    97.6          "lock btsl %1,%0"
    97.7 -        : "=m" (ADDR) : "Ir" (nr) : "memory" );
    97.8 +        : "+m" (ADDR) : "Ir" (nr) : "memory" );
    97.9  }
   97.10  
   97.11  static __inline__ void synch_clear_bit(int nr, volatile void * addr)
   97.12  {
   97.13      __asm__ __volatile__ (
   97.14          "lock btrl %1,%0"
   97.15 -        : "=m" (ADDR) : "Ir" (nr) : "memory" );
   97.16 +        : "+m" (ADDR) : "Ir" (nr) : "memory" );
   97.17  }
   97.18  
   97.19  static __inline__ void synch_change_bit(int nr, volatile void * addr)
   97.20  {
   97.21      __asm__ __volatile__ (
   97.22          "lock btcl %1,%0"
   97.23 -        : "=m" (ADDR) : "Ir" (nr) : "memory" );
   97.24 +        : "+m" (ADDR) : "Ir" (nr) : "memory" );
   97.25  }
   97.26  
   97.27  static __inline__ int synch_test_and_set_bit(int nr, volatile void * addr)
   97.28 @@ -37,7 +37,7 @@ static __inline__ int synch_test_and_set
   97.29      int oldbit;
   97.30      __asm__ __volatile__ (
   97.31          "lock btsl %2,%1\n\tsbbl %0,%0"
   97.32 -        : "=r" (oldbit), "=m" (ADDR) : "Ir" (nr) : "memory");
   97.33 +        : "=r" (oldbit), "+m" (ADDR) : "Ir" (nr) : "memory");
   97.34      return oldbit;
   97.35  }
   97.36  
   97.37 @@ -46,7 +46,7 @@ static __inline__ int synch_test_and_cle
   97.38      int oldbit;
   97.39      __asm__ __volatile__ (
   97.40          "lock btrl %2,%1\n\tsbbl %0,%0"
   97.41 -        : "=r" (oldbit), "=m" (ADDR) : "Ir" (nr) : "memory");
   97.42 +        : "=r" (oldbit), "+m" (ADDR) : "Ir" (nr) : "memory");
   97.43      return oldbit;
   97.44  }
   97.45  
   97.46 @@ -56,7 +56,7 @@ static __inline__ int synch_test_and_cha
   97.47  
   97.48      __asm__ __volatile__ (
   97.49          "lock btcl %2,%1\n\tsbbl %0,%0"
   97.50 -        : "=r" (oldbit), "=m" (ADDR) : "Ir" (nr) : "memory");
   97.51 +        : "=r" (oldbit), "+m" (ADDR) : "Ir" (nr) : "memory");
   97.52      return oldbit;
   97.53  }
   97.54  
   97.55 @@ -85,7 +85,7 @@ static inline unsigned long __synch_cmpx
   97.56  	case 2:
   97.57  		__asm__ __volatile__("lock; cmpxchgw %w1,%2"
   97.58  				     : "=a"(prev)
   97.59 -				     : "q"(new), "m"(*__synch_xg(ptr)),
   97.60 +				     : "r"(new), "m"(*__synch_xg(ptr)),
   97.61  				       "0"(old)
   97.62  				     : "memory");
   97.63  		return prev;
   97.64 @@ -93,14 +93,14 @@ static inline unsigned long __synch_cmpx
   97.65  	case 4:
   97.66  		__asm__ __volatile__("lock; cmpxchgl %k1,%2"
   97.67  				     : "=a"(prev)
   97.68 -				     : "q"(new), "m"(*__synch_xg(ptr)),
   97.69 +				     : "r"(new), "m"(*__synch_xg(ptr)),
   97.70  				       "0"(old)
   97.71  				     : "memory");
   97.72  		return prev;
   97.73  	case 8:
   97.74  		__asm__ __volatile__("lock; cmpxchgq %1,%2"
   97.75  				     : "=a"(prev)
   97.76 -				     : "q"(new), "m"(*__synch_xg(ptr)),
   97.77 +				     : "r"(new), "m"(*__synch_xg(ptr)),
   97.78  				       "0"(old)
   97.79  				     : "memory");
   97.80  		return prev;
   97.81 @@ -108,7 +108,7 @@ static inline unsigned long __synch_cmpx
   97.82  	case 4:
   97.83  		__asm__ __volatile__("lock; cmpxchgl %1,%2"
   97.84  				     : "=a"(prev)
   97.85 -				     : "q"(new), "m"(*__synch_xg(ptr)),
   97.86 +				     : "r"(new), "m"(*__synch_xg(ptr)),
   97.87  				       "0"(old)
   97.88  				     : "memory");
   97.89  		return prev;
   97.90 @@ -117,7 +117,8 @@ static inline unsigned long __synch_cmpx
   97.91  	return old;
   97.92  }
   97.93  
   97.94 -static __inline__ int synch_const_test_bit(int nr, const volatile void * addr)
   97.95 +static __always_inline int synch_const_test_bit(int nr,
   97.96 +						const volatile void * addr)
   97.97  {
   97.98      return ((1UL << (nr & 31)) & 
   97.99              (((const volatile unsigned int *) addr)[nr >> 5])) != 0;
    98.1 --- a/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/system.h	Thu Feb 02 19:15:22 2006 +0100
    98.2 +++ b/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/system.h	Thu Feb 02 19:16:38 2006 +0000
    98.3 @@ -63,23 +63,7 @@ extern struct task_struct * FASTCALL(__s
    98.4          ); } while(0)
    98.5  
    98.6  #define set_base(ldt,base) _set_base( ((char *)&(ldt)) , (base) )
    98.7 -#define set_limit(ldt,limit) _set_limit( ((char *)&(ldt)) , ((limit)-1)>>12 )
    98.8 -
    98.9 -static inline unsigned long _get_base(char * addr)
   98.10 -{
   98.11 -	unsigned long __base;
   98.12 -	__asm__("movb %3,%%dh\n\t"
   98.13 -		"movb %2,%%dl\n\t"
   98.14 -		"shll $16,%%edx\n\t"
   98.15 -		"movw %1,%%dx"
   98.16 -		:"=&d" (__base)
   98.17 -		:"m" (*((addr)+2)),
   98.18 -		 "m" (*((addr)+4)),
   98.19 -		 "m" (*((addr)+7)));
   98.20 -	return __base;
   98.21 -}
   98.22 -
   98.23 -#define get_base(ldt) _get_base( ((char *)&(ldt)) )
   98.24 +#define set_limit(ldt,limit) _set_limit( ((char *)&(ldt)) , ((limit)-1) )
   98.25  
   98.26  /*
   98.27   * Load a segment. Fall back on loading the zero
   98.28 @@ -146,6 +130,19 @@ static inline unsigned long _get_base(ch
   98.29  		:"=r" (__dummy)); \
   98.30  	__dummy; \
   98.31  })
   98.32 +
   98.33 +#define read_cr4_safe() ({			      \
   98.34 +	unsigned int __dummy;			      \
   98.35 +	/* This could fault if %cr4 does not exist */ \
   98.36 +	__asm__("1: movl %%cr4, %0		\n"   \
   98.37 +		"2:				\n"   \
   98.38 +		".section __ex_table,\"a\"	\n"   \
   98.39 +		".long 1b,2b			\n"   \
   98.40 +		".previous			\n"   \
   98.41 +		: "=r" (__dummy): "0" (0));	      \
   98.42 +	__dummy;				      \
   98.43 +})
   98.44 +
   98.45  #define write_cr4(x) \
   98.46  	__asm__ __volatile__("movl %0,%%cr4": :"r" (x));
   98.47  #define stts() (HYPERVISOR_fpu_taskswitch(1))
   98.48 @@ -668,6 +665,15 @@ void enable_hlt(void);
   98.49  extern int es7000_plat;
   98.50  void cpu_idle_wait(void);
   98.51  
   98.52 +/*
   98.53 + * On SMP systems, when the scheduler does migration-cost autodetection,
   98.54 + * it needs a way to flush as much of the CPU's caches as possible:
   98.55 + */
   98.56 +static inline void sched_cacheflush(void)
   98.57 +{
   98.58 +	wbinvd();
   98.59 +}
   98.60 +
   98.61  extern unsigned long arch_align_stack(unsigned long sp);
   98.62  
   98.63  #endif
    99.1 --- a/linux-2.6-xen-sparse/include/asm-i386/system.h	Thu Feb 02 19:15:22 2006 +0100
    99.2 +++ b/linux-2.6-xen-sparse/include/asm-i386/system.h	Thu Feb 02 19:16:38 2006 +0000
    99.3 @@ -54,23 +54,7 @@ extern struct task_struct * FASTCALL(__s
    99.4          ); } while(0)
    99.5  
    99.6  #define set_base(ldt,base) _set_base( ((char *)&(ldt)) , (base) )
    99.7 -#define set_limit(ldt,limit) _set_limit( ((char *)&(ldt)) , ((limit)-1)>>12 )
    99.8 -
    99.9 -static inline unsigned long _get_base(char * addr)
   99.10 -{
   99.11 -	unsigned long __base;
   99.12 -	__asm__("movb %3,%%dh\n\t"
   99.13 -		"movb %2,%%dl\n\t"
   99.14 -		"shll $16,%%edx\n\t"
   99.15 -		"movw %1,%%dx"
   99.16 -		:"=&d" (__base)
   99.17 -		:"m" (*((addr)+2)),
   99.18 -		 "m" (*((addr)+4)),
   99.19 -		 "m" (*((addr)+7)));
   99.20 -	return __base;
   99.21 -}
   99.22 -
   99.23 -#define get_base(ldt) _get_base( ((char *)&(ldt)) )
   99.24 +#define set_limit(ldt,limit) _set_limit( ((char *)&(ldt)) , ((limit)-1) )
   99.25  
   99.26  /*
   99.27   * Load a segment. Fall back on loading the zero
   99.28 @@ -140,6 +124,19 @@ static inline unsigned long _get_base(ch
   99.29  		:"=r" (__dummy)); \
   99.30  	__dummy; \
   99.31  })
   99.32 +
   99.33 +#define read_cr4_safe() ({			      \
   99.34 +	unsigned int __dummy;			      \
   99.35 +	/* This could fault if %cr4 does not exist */ \
   99.36 +	__asm__("1: movl %%cr4, %0		\n"   \
   99.37 +		"2:				\n"   \
   99.38 +		".section __ex_table,\"a\"	\n"   \
   99.39 +		".long 1b,2b			\n"   \
   99.40 +		".previous			\n"   \
   99.41 +		: "=r" (__dummy): "0" (0));	      \
   99.42 +	__dummy;				      \
   99.43 +})
   99.44 +
   99.45  #define write_cr4(x) \
   99.46  	__asm__ __volatile__("movl %0,%%cr4": :"r" (x));
   99.47  #define stts() write_cr0(8 | read_cr0())
   99.48 @@ -595,6 +592,15 @@ void enable_hlt(void);
   99.49  extern int es7000_plat;
   99.50  void cpu_idle_wait(void);
   99.51  
   99.52 +/*
   99.53 + * On SMP systems, when the scheduler does migration-cost autodetection,
   99.54 + * it needs a way to flush as much of the CPU's caches as possible:
   99.55 + */
   99.56 +static inline void sched_cacheflush(void)
   99.57 +{
   99.58 +	wbinvd();
   99.59 +}
   99.60 +
   99.61  extern unsigned long arch_align_stack(unsigned long sp);
   99.62  
   99.63  #endif
   100.1 --- a/linux-2.6-xen-sparse/include/asm-ia64/hypercall.h	Thu Feb 02 19:15:22 2006 +0100
   100.2 +++ b/linux-2.6-xen-sparse/include/asm-ia64/hypercall.h	Thu Feb 02 19:16:38 2006 +0000
   100.3 @@ -30,8 +30,8 @@
   100.4  #ifndef __HYPERCALL_H__
   100.5  #define __HYPERCALL_H__
   100.6  
   100.7 -#include <xen/interface/xen.h>
   100.8 -#include <xen/interface/sched.h>
   100.9 +#include <asm-xen/xen-public/xen.h>
  100.10 +#include <asm-xen/xen-public/sched.h>
  100.11  
  100.12  /* FIXME: temp place to hold these page related macros */
  100.13  #include <asm/page.h>
   101.1 --- a/linux-2.6-xen-sparse/include/asm-ia64/hypervisor.h	Thu Feb 02 19:15:22 2006 +0100
   101.2 +++ b/linux-2.6-xen-sparse/include/asm-ia64/hypervisor.h	Thu Feb 02 19:16:38 2006 +0000
   101.3 @@ -34,8 +34,8 @@
   101.4  #include <linux/types.h>
   101.5  #include <linux/kernel.h>
   101.6  #include <linux/version.h>
   101.7 -#include <xen/interface/xen.h>
   101.8 -#include <xen/interface/dom0_ops.h>
   101.9 +#include <asm-xen/xen-public/xen.h>
  101.10 +#include <asm-xen/xen-public/dom0_ops.h>
  101.11  #include <asm/ptrace.h>
  101.12  #include <asm/page.h>
  101.13  
   102.1 --- a/linux-2.6-xen-sparse/include/asm-ia64/pal.h	Thu Feb 02 19:15:22 2006 +0100
   102.2 +++ b/linux-2.6-xen-sparse/include/asm-ia64/pal.h	Thu Feb 02 19:16:38 2006 +0000
   102.3 @@ -75,8 +75,6 @@
   102.4  #define PAL_CACHE_READ		259	/* read tag & data of cacheline for diagnostic testing */
   102.5  #define PAL_CACHE_WRITE		260	/* write tag & data of cacheline for diagnostic testing */
   102.6  #define PAL_VM_TR_READ		261	/* read contents of translation register */
   102.7 -#define PAL_GET_PSTATE		262	/* get the current P-state */
   102.8 -#define PAL_SET_PSTATE		263	/* set the P-state */
   102.9  
  102.10  #ifndef __ASSEMBLY__
  102.11  
  102.12 @@ -1114,25 +1112,6 @@ ia64_pal_halt_info (pal_power_mgmt_info_
  102.13  	return iprv.status;
  102.14  }
  102.15  
  102.16 -/* Get the current P-state information */
  102.17 -static inline s64
  102.18 -ia64_pal_get_pstate (u64 *pstate_index)
  102.19 -{
  102.20 -	struct ia64_pal_retval iprv;
  102.21 -	PAL_CALL_STK(iprv, PAL_GET_PSTATE, 0, 0, 0);
  102.22 -	*pstate_index = iprv.v0;
  102.23 -	return iprv.status;
  102.24 -}
  102.25 -
  102.26 -/* Set the P-state */
  102.27 -static inline s64
  102.28 -ia64_pal_set_pstate (u64 pstate_index)
  102.29 -{
  102.30 -	struct ia64_pal_retval iprv;
  102.31 -	PAL_CALL_STK(iprv, PAL_SET_PSTATE, pstate_index, 0, 0);
  102.32 -	return iprv.status;
  102.33 -}
  102.34 -
  102.35  /* Cause the processor to enter LIGHT HALT state, where prefetching and execution are
  102.36   * suspended, but cache and TLB coherency is maintained.
  102.37   */
   103.1 --- a/linux-2.6-xen-sparse/include/asm-ia64/processor.h	Thu Feb 02 19:15:22 2006 +0100
   103.2 +++ b/linux-2.6-xen-sparse/include/asm-ia64/processor.h	Thu Feb 02 19:16:38 2006 +0000
   103.3 @@ -21,6 +21,9 @@
   103.4  #include <asm/ustack.h>
   103.5  #include <asm/privop.h>
   103.6  
   103.7 +/* Our arch specific arch_init_sched_domain is in arch/ia64/kernel/domain.c */
   103.8 +#define ARCH_HAS_SCHED_DOMAIN
   103.9 +
  103.10  #define IA64_NUM_DBG_REGS	8
  103.11  /*
  103.12   * Limits for PMC and PMD are set to less than maximum architected values
   104.1 --- a/linux-2.6-xen-sparse/include/asm-ia64/system.h	Thu Feb 02 19:15:22 2006 +0100
   104.2 +++ b/linux-2.6-xen-sparse/include/asm-ia64/system.h	Thu Feb 02 19:16:38 2006 +0000
   104.3 @@ -19,13 +19,12 @@
   104.4  #include <asm/pal.h>
   104.5  #include <asm/percpu.h>
   104.6  
   104.7 -#define GATE_ADDR		RGN_BASE(RGN_GATE)
   104.8 -
   104.9 +#define GATE_ADDR		__IA64_UL_CONST(0xa000000000000000)
  104.10  /*
  104.11   * 0xa000000000000000+2*PERCPU_PAGE_SIZE
  104.12   * - 0xa000000000000000+3*PERCPU_PAGE_SIZE remain unmapped (guard page)
  104.13   */
  104.14 -#define KERNEL_START		 (GATE_ADDR+0x100000000)
  104.15 +#define KERNEL_START		 __IA64_UL_CONST(0xa000000100000000)
  104.16  #define PERCPU_ADDR		(-PERCPU_PAGE_SIZE)
  104.17  
  104.18  #ifndef __ASSEMBLY__
  104.19 @@ -184,6 +183,8 @@ do {								\
  104.20  
  104.21  #ifdef __KERNEL__
  104.22  
  104.23 +#define prepare_to_switch()    do { } while(0)
  104.24 +
  104.25  #ifdef CONFIG_IA32_SUPPORT
  104.26  # define IS_IA32_PROCESS(regs)	(ia64_psr(regs)->is != 0)
  104.27  #else
  104.28 @@ -273,9 +274,14 @@ extern void ia64_load_extra (struct task
  104.29   * of that CPU which will not be released, because there we wait for the
  104.30   * tasklist_lock to become available.
  104.31   */
  104.32 -#define __ARCH_WANT_UNLOCKED_CTXSW
  104.33 +#define prepare_arch_switch(rq, next)		\
  104.34 +do {						\
  104.35 +	spin_lock(&(next)->switch_lock);	\
  104.36 +	spin_unlock(&(rq)->lock);		\
  104.37 +} while (0)
  104.38 +#define finish_arch_switch(rq, prev)	spin_unlock_irq(&(prev)->switch_lock)
  104.39 +#define task_running(rq, p) 		((rq)->curr == (p) || spin_is_locked(&(p)->switch_lock))
  104.40  
  104.41 -#define ARCH_HAS_PREFETCH_SWITCH_STACK
  104.42  #define ia64_platform_is(x) (strcmp(x, platform_name) == 0)
  104.43  
  104.44  void cpu_idle_wait(void);
   105.1 --- a/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/desc.h	Thu Feb 02 19:15:22 2006 +0100
   105.2 +++ b/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/desc.h	Thu Feb 02 19:16:38 2006 +0000
   105.3 @@ -67,7 +67,7 @@ struct desc_ptr {
   105.4  
   105.5  extern struct desc_ptr idt_descr, cpu_gdt_descr[NR_CPUS];
   105.6  
   105.7 -extern struct desc_struct cpu_gdt_table[NR_CPUS][GDT_ENTRIES];
   105.8 +extern struct desc_struct cpu_gdt_table[GDT_ENTRIES];
   105.9  
  105.10  #define get_cpu_gdt_table(_cpu) ((struct desc_struct *)(cpu_gdt_descr[(_cpu)].address))
  105.11  
  105.12 @@ -95,6 +95,9 @@ extern struct desc_struct default_ldt[];
  105.13  extern struct gate_struct idt_table[]; 
  105.14  extern struct desc_ptr cpu_gdt_descr[];
  105.15  
  105.16 +/* the cpu gdt accessor */
  105.17 +#define cpu_gdt(_cpu) ((struct desc_struct *)cpu_gdt_descr[_cpu].address)
  105.18 +
  105.19  static inline void _set_gate(void *adr, unsigned type, unsigned long func, unsigned dpl, unsigned ist)  
  105.20  {
  105.21  	struct gate_struct s; 	
  105.22 @@ -130,6 +133,11 @@ static inline void set_system_gate(int n
  105.23  	_set_gate(&idt_table[nr], GATE_INTERRUPT, (unsigned long) func, 3, 0); 
  105.24  } 
  105.25  
  105.26 +static inline void set_system_gate_ist(int nr, void *func, unsigned ist)
  105.27 +{
  105.28 +	_set_gate(&idt_table[nr], GATE_INTERRUPT, (unsigned long) func, 3, ist);
  105.29 +}
  105.30 +
  105.31  static inline void set_tssldt_descriptor(void *ptr, unsigned long tss, unsigned type, 
  105.32  					 unsigned size) 
  105.33  { 
  105.34 @@ -155,21 +163,20 @@ static inline void set_tss_desc(unsigned
  105.35  	 * -1? seg base+limit should be pointing to the address of the
  105.36  	 * last valid byte
  105.37  	 */
  105.38 -        set_tssldt_descriptor((struct ldttss_desc *)&get_cpu_gdt_table(cpu)[GDT_ENTRY_TSS], 
  105.39 +        set_tssldt_descriptor(&cpu_gdt(cpu)[GDT_ENTRY_TSS], 
  105.40  		(unsigned long)addr, DESC_TSS,
  105.41  		IO_BITMAP_OFFSET + IO_BITMAP_BYTES + sizeof(unsigned long) - 1);
  105.42  } 
  105.43  
  105.44  static inline void set_ldt_desc(unsigned cpu, void *addr, int size)
  105.45  { 
  105.46 -	set_tssldt_descriptor((struct ldttss_desc *)&get_cpu_gdt_table(cpu)[GDT_ENTRY_LDT], 
  105.47 -                              (unsigned long)addr, 
  105.48 +	set_tssldt_descriptor(&cpu_gdt(cpu)[GDT_ENTRY_LDT], (unsigned long)addr,
  105.49  			      DESC_LDT, size * 8 - 1);
  105.50  }
  105.51  
  105.52  static inline void set_seg_base(unsigned cpu, int entry, void *base)
  105.53  { 
  105.54 -	struct desc_struct *d = (struct desc_struct *)&get_cpu_gdt_table(cpu)[entry];
  105.55 +	struct desc_struct *d = &cpu_gdt(cpu)[entry];
  105.56  	u32 addr = (u32)(u64)base;
  105.57  	BUG_ON((u64)base >> 32); 
  105.58  	d->base0 = addr & 0xffff;
  105.59 @@ -212,7 +219,7 @@ static inline void set_seg_base(unsigned
  105.60  static inline void load_TLS(struct thread_struct *t, unsigned int cpu)
  105.61  {
  105.62  #if 0
  105.63 -	u64 *gdt = (u64 *)(cpu_gdt_table[cpu] + GDT_ENTRY_TLS_MIN);
  105.64 +	u64 *gdt = (u64 *)(cpu_gdt(cpu) + GDT_ENTRY_TLS_MIN);
  105.65  	gdt[0] = t->tls_array[0];
  105.66  	gdt[1] = t->tls_array[1];
  105.67  	gdt[2] = t->tls_array[2];
   106.1 --- a/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/dma-mapping.h	Thu Feb 02 19:15:22 2006 +0100
   106.2 +++ b/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/dma-mapping.h	Thu Feb 02 19:16:38 2006 +0000
   106.3 @@ -1,1 +1,191 @@
   106.4 +#ifndef _X8664_DMA_MAPPING_H
   106.5 +#define _X8664_DMA_MAPPING_H 1
   106.6 +
   106.7 +/*
   106.8 + * IOMMU interface. See Documentation/DMA-mapping.txt and DMA-API.txt for
   106.9 + * documentation.
  106.10 + */
  106.11 +
  106.12 +#include <linux/config.h>
  106.13 +
  106.14 +#include <asm/scatterlist.h>
  106.15 +#include <asm/io.h>
  106.16 +#include <asm/swiotlb.h>
  106.17 +
  106.18 +struct dma_mapping_ops {
  106.19 +	int             (*mapping_error)(dma_addr_t dma_addr);
  106.20 +	void*           (*alloc_coherent)(struct device *dev, size_t size,
  106.21 +                                dma_addr_t *dma_handle, gfp_t gfp);
  106.22 +	void            (*free_coherent)(struct device *dev, size_t size,
  106.23 +                                void *vaddr, dma_addr_t dma_handle);
  106.24 +	dma_addr_t      (*map_single)(struct device *hwdev, void *ptr,
  106.25 +                                size_t size, int direction);
  106.26 +	/* like map_single, but doesn't check the device mask */
  106.27 +	dma_addr_t      (*map_simple)(struct device *hwdev, char *ptr,
  106.28 +                                size_t size, int direction);
  106.29 +	void            (*unmap_single)(struct device *dev, dma_addr_t addr,
  106.30 +		                size_t size, int direction);
  106.31 +	void            (*sync_single_for_cpu)(struct device *hwdev,
  106.32 +		                dma_addr_t dma_handle, size_t size,
  106.33 +				int direction);
  106.34 +	void            (*sync_single_for_device)(struct device *hwdev,
  106.35 +                                dma_addr_t dma_handle, size_t size,
  106.36 +				int direction);
  106.37 +	void            (*sync_single_range_for_cpu)(struct device *hwdev,
  106.38 +                                dma_addr_t dma_handle, unsigned long offset,
  106.39 +		                size_t size, int direction);
  106.40 +	void            (*sync_single_range_for_device)(struct device *hwdev,
  106.41 +				dma_addr_t dma_handle, unsigned long offset,
  106.42 +		                size_t size, int direction);
  106.43 +	void            (*sync_sg_for_cpu)(struct device *hwdev,
  106.44 +                                struct scatterlist *sg, int nelems,
  106.45 +				int direction);
  106.46 +	void            (*sync_sg_for_device)(struct device *hwdev,
  106.47 +				struct scatterlist *sg, int nelems,
  106.48 +				int direction);
  106.49 +	int             (*map_sg)(struct device *hwdev, struct scatterlist *sg,
  106.50 +		                int nents, int direction);
  106.51 +	void            (*unmap_sg)(struct device *hwdev,
  106.52 +				struct scatterlist *sg, int nents,
  106.53 +				int direction);
  106.54 +	int             (*dma_supported)(struct device *hwdev, u64 mask);
  106.55 +	int		is_phys;
  106.56 +};
  106.57 +
  106.58 +extern dma_addr_t bad_dma_address;
  106.59 +extern struct dma_mapping_ops* dma_ops;
  106.60 +extern int iommu_merge;
  106.61 +
  106.62 +#if 0
  106.63 +static inline int dma_mapping_error(dma_addr_t dma_addr)
  106.64 +{
  106.65 +	if (dma_ops->mapping_error)
  106.66 +		return dma_ops->mapping_error(dma_addr);
  106.67 +
  106.68 +	return (dma_addr == bad_dma_address);
  106.69 +}
  106.70 +
  106.71 +extern void *dma_alloc_coherent(struct device *dev, size_t size,
  106.72 +				dma_addr_t *dma_handle, gfp_t gfp);
  106.73 +extern void dma_free_coherent(struct device *dev, size_t size, void *vaddr,
  106.74 +			      dma_addr_t dma_handle);
  106.75 +
  106.76 +static inline dma_addr_t
  106.77 +dma_map_single(struct device *hwdev, void *ptr, size_t size,
  106.78 +	       int direction)
  106.79 +{
  106.80 +	return dma_ops->map_single(hwdev, ptr, size, direction);
  106.81 +}
  106.82 +
  106.83 +static inline void
  106.84 +dma_unmap_single(struct device *dev, dma_addr_t addr,size_t size,
  106.85 +		 int direction)
  106.86 +{
  106.87 +	dma_ops->unmap_single(dev, addr, size, direction);
  106.88 +}
  106.89 +
  106.90 +#define dma_map_page(dev,page,offset,size,dir) \
  106.91 +	dma_map_single((dev), page_address(page)+(offset), (size), (dir))
  106.92 +
  106.93 +#define dma_unmap_page dma_unmap_single
  106.94 +
  106.95 +static inline void
  106.96 +dma_sync_single_for_cpu(struct device *hwdev, dma_addr_t dma_handle,
  106.97 +			size_t size, int direction)
  106.98 +{
  106.99 +	if (dma_ops->sync_single_for_cpu)
 106.100 +		dma_ops->sync_single_for_cpu(hwdev, dma_handle, size,
 106.101 +					     direction);
 106.102 +	flush_write_buffers();
 106.103 +}
 106.104 +
 106.105 +static inline void
 106.106 +dma_sync_single_for_device(struct device *hwdev, dma_addr_t dma_handle,
 106.107 +			   size_t size, int direction)
 106.108 +{
 106.109 +	if (dma_ops->sync_single_for_device)
 106.110 +		dma_ops->sync_single_for_device(hwdev, dma_handle, size,
 106.111 +						direction);
 106.112 +	flush_write_buffers();
 106.113 +}
 106.114 +
 106.115 +static inline void
 106.116 +dma_sync_single_range_for_cpu(struct device *hwdev, dma_addr_t dma_handle,
 106.117 +			      unsigned long offset, size_t size, int direction)
 106.118 +{
 106.119 +	if (dma_ops->sync_single_range_for_cpu) {
 106.120 +		dma_ops->sync_single_range_for_cpu(hwdev, dma_handle, offset, size, direction);
 106.121 +	}
 106.122 +
 106.123 +	flush_write_buffers();
 106.124 +}
 106.125 +
 106.126 +static inline void
 106.127 +dma_sync_single_range_for_device(struct device *hwdev, dma_addr_t dma_handle,
 106.128 +				 unsigned long offset, size_t size, int direction)
 106.129 +{
 106.130 +	if (dma_ops->sync_single_range_for_device)
 106.131 +		dma_ops->sync_single_range_for_device(hwdev, dma_handle,
 106.132 +						      offset, size, direction);
 106.133 +
 106.134 +	flush_write_buffers();
 106.135 +}
 106.136 +
 106.137 +static inline void
 106.138 +dma_sync_sg_for_cpu(struct device *hwdev, struct scatterlist *sg,
 106.139 +		    int nelems, int direction)
 106.140 +{
 106.141 +	if (dma_ops->sync_sg_for_cpu)
 106.142 +		dma_ops->sync_sg_for_cpu(hwdev, sg, nelems, direction);
 106.143 +	flush_write_buffers();
 106.144 +}
 106.145 +
 106.146 +static inline void
 106.147 +dma_sync_sg_for_device(struct device *hwdev, struct scatterlist *sg,
 106.148 +		       int nelems, int direction)
 106.149 +{
 106.150 +	if (dma_ops->sync_sg_for_device) {
 106.151 +		dma_ops->sync_sg_for_device(hwdev, sg, nelems, direction);
 106.152 +	}
 106.153 +
 106.154 +	flush_write_buffers();
 106.155 +}
 106.156 +
 106.157 +static inline int
 106.158 +dma_map_sg(struct device *hwdev, struct scatterlist *sg, int nents, int direction)
 106.159 +{
 106.160 +	return dma_ops->map_sg(hwdev, sg, nents, direction);
 106.161 +}
 106.162 +
 106.163 +static inline void
 106.164 +dma_unmap_sg(struct device *hwdev, struct scatterlist *sg, int nents,
 106.165 +	     int direction)
 106.166 +{
 106.167 +	dma_ops->unmap_sg(hwdev, sg, nents, direction);
 106.168 +}
 106.169 +
 106.170 +extern int dma_supported(struct device *hwdev, u64 mask);
 106.171 +
 106.172 +/* same for gart, swiotlb, and nommu */
 106.173 +static inline int dma_get_cache_alignment(void)
 106.174 +{
 106.175 +	return boot_cpu_data.x86_clflush_size;
 106.176 +}
 106.177 +
 106.178 +#define dma_is_consistent(h) 1
 106.179 +
 106.180 +extern int dma_set_mask(struct device *dev, u64 mask);
 106.181 +
 106.182 +static inline void
 106.183 +dma_cache_sync(void *vaddr, size_t size, enum dma_data_direction dir)
 106.184 +{
 106.185 +	flush_write_buffers();
 106.186 +}
 106.187 +
 106.188 +extern struct device fallback_dev;
 106.189 +extern int panic_on_overflow;
 106.190 +#endif
 106.191 +
 106.192 +#endif /* _X8664_DMA_MAPPING_H */
 106.193 +
 106.194  #include <asm-i386/mach-xen/asm/dma-mapping.h>
   107.1 --- a/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/fixmap.h	Thu Feb 02 19:15:22 2006 +0100
   107.2 +++ b/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/fixmap.h	Thu Feb 02 19:16:38 2006 +0000
   107.3 @@ -93,7 +93,7 @@ extern void __this_fixmap_does_not_exist
   107.4   * directly without translation, we catch the bug with a NULL-deference
   107.5   * kernel oops. Illegal ranges of incoming indices are caught too.
   107.6   */
   107.7 -static inline unsigned long fix_to_virt(const unsigned int idx)
   107.8 +static __always_inline unsigned long fix_to_virt(const unsigned int idx)
   107.9  {
  107.10  	/*
  107.11  	 * this branch gets completely eliminated after inlining,
   108.1 --- a/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/hw_irq.h	Thu Feb 02 19:15:22 2006 +0100
   108.2 +++ b/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/hw_irq.h	Thu Feb 02 19:16:38 2006 +0000
   108.3 @@ -46,19 +46,19 @@ struct hw_interrupt_type;
   108.4   *  some of the following vectors are 'rare', they are merged
   108.5   *  into a single vector (CALL_FUNCTION_VECTOR) to save vector space.
   108.6   *  TLB, reschedule and local APIC vectors are performance-critical.
   108.7 - *
   108.8 - *  Vectors 0xf0-0xf9 are free (reserved for future Linux use).
   108.9   */
  108.10  #ifndef CONFIG_XEN
  108.11  #define SPURIOUS_APIC_VECTOR	0xff
  108.12  #define ERROR_APIC_VECTOR	0xfe
  108.13  #define RESCHEDULE_VECTOR	0xfd
  108.14  #define CALL_FUNCTION_VECTOR	0xfc
  108.15 -#define KDB_VECTOR		0xfb	/* reserved for KDB */
  108.16 +/* fb free - please don't readd KDB here because it's useless
  108.17 +   (hint - think what a NMI bit does to a vector) */
  108.18  #define THERMAL_APIC_VECTOR	0xfa
  108.19  #define THRESHOLD_APIC_VECTOR   0xf9
  108.20 -#define INVALIDATE_TLB_VECTOR_END	0xf8
  108.21 -#define INVALIDATE_TLB_VECTOR_START	0xf0	/* f0-f8 used for TLB flush */
  108.22 +/* f8 free */
  108.23 +#define INVALIDATE_TLB_VECTOR_END	0xf7
  108.24 +#define INVALIDATE_TLB_VECTOR_START	0xf0	/* f0-f7 used for TLB flush */
  108.25  
  108.26  #define NUM_INVALIDATE_TLB_VECTORS	8
  108.27  #endif
   109.1 --- a/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/io.h	Thu Feb 02 19:15:22 2006 +0100
   109.2 +++ b/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/io.h	Thu Feb 02 19:16:38 2006 +0000
   109.3 @@ -158,6 +158,11 @@ static inline void __iomem * ioremap (un
   109.4  extern void __iomem * ioremap_nocache (unsigned long offset, unsigned long size);
   109.5  extern void iounmap(volatile void __iomem *addr);
   109.6  
   109.7 +/* Use normal IO mappings for DMI */
   109.8 +#define dmi_ioremap ioremap
   109.9 +#define dmi_iounmap(x,l) iounmap(x)
  109.10 +#define dmi_alloc(l) kmalloc(l, GFP_ATOMIC)
  109.11 +
  109.12  /*
  109.13   * ISA I/O bus memory addresses are 1:1 with the physical address.
  109.14   */
   110.1 --- a/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/mmu_context.h	Thu Feb 02 19:15:22 2006 +0100
   110.2 +++ b/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/mmu_context.h	Thu Feb 02 19:16:38 2006 +0000
   110.3 @@ -18,7 +18,7 @@ void destroy_context(struct mm_struct *m
   110.4  
   110.5  static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
   110.6  {
   110.7 -#if 0 /*  XEN: no lazy tlb */
   110.8 +#if defined(CONFIG_SMP) && !defined(CONFIG_XEN)
   110.9  	if (read_pda(mmu_state) == TLBSTATE_OK) 
  110.10  		write_pda(mmu_state, TLBSTATE_LAZY);
  110.11  #endif
  110.12 @@ -78,7 +78,7 @@ static inline void switch_mm(struct mm_s
  110.13  
  110.14  		/* stop flush ipis for the previous mm */
  110.15  		clear_bit(cpu, &prev->cpu_vm_mask);
  110.16 -#if 0  /* XEN: no lazy tlb */
  110.17 +#if defined(CONFIG_SMP) && !defined(CONFIG_XEN)
  110.18  		write_pda(mmu_state, TLBSTATE_OK);
  110.19  		write_pda(active_mm, next);
  110.20  #endif
  110.21 @@ -104,8 +104,7 @@ static inline void switch_mm(struct mm_s
  110.22  
  110.23  		BUG_ON(HYPERVISOR_mmuext_op(_op, op-_op, NULL, DOMID_SELF));
  110.24  	}
  110.25 -
  110.26 -#if 0 /* XEN: no lazy tlb */
  110.27 +#if defined(CONFIG_SMP) && !defined(CONFIG_XEN)
  110.28  	else {
  110.29  		write_pda(mmu_state, TLBSTATE_OK);
  110.30  		if (read_pda(active_mm) != next)
   111.1 --- a/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/page.h	Thu Feb 02 19:15:22 2006 +0100
   111.2 +++ b/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/page.h	Thu Feb 02 19:16:38 2006 +0000
   111.3 @@ -37,13 +37,25 @@
   111.4  #define PHYSICAL_PAGE_MASK	(~(PAGE_SIZE-1) & __PHYSICAL_MASK)
   111.5  
   111.6  #define THREAD_ORDER 1 
   111.7 -#ifdef __ASSEMBLY__
   111.8 -#define THREAD_SIZE  (1 << (PAGE_SHIFT + THREAD_ORDER))
   111.9 -#else
  111.10 -#define THREAD_SIZE  (1UL << (PAGE_SHIFT + THREAD_ORDER))
  111.11 -#endif
  111.12 +#define THREAD_SIZE  (PAGE_SIZE << THREAD_ORDER)
  111.13  #define CURRENT_MASK (~(THREAD_SIZE-1))
  111.14  
  111.15 +#define EXCEPTION_STACK_ORDER 0
  111.16 +#define EXCEPTION_STKSZ (PAGE_SIZE << EXCEPTION_STACK_ORDER)
  111.17 +
  111.18 +#define DEBUG_STACK_ORDER EXCEPTION_STACK_ORDER
  111.19 +#define DEBUG_STKSZ (PAGE_SIZE << DEBUG_STACK_ORDER)
  111.20 +
  111.21 +#define IRQSTACK_ORDER 2
  111.22 +#define IRQSTACKSIZE (PAGE_SIZE << IRQSTACK_ORDER)
  111.23 +
  111.24 +#define STACKFAULT_STACK 1
  111.25 +#define DOUBLEFAULT_STACK 2
  111.26 +#define NMI_STACK 3
  111.27 +#define DEBUG_STACK 4
  111.28 +#define MCE_STACK 5
  111.29 +#define N_EXCEPTION_STACKS 5  /* hw limit: 7 */
  111.30 +
  111.31  #define LARGE_PAGE_MASK (~(LARGE_PAGE_SIZE-1))
  111.32  #define LARGE_PAGE_SIZE (1UL << PMD_SHIFT)
  111.33  
   112.1 --- a/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/pci.h	Thu Feb 02 19:15:22 2006 +0100
   112.2 +++ b/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/pci.h	Thu Feb 02 19:16:38 2006 +0000
   112.3 @@ -42,18 +42,20 @@ int pcibios_set_irq_routing(struct pci_d
   112.4  #include <asm/scatterlist.h>
   112.5  #include <linux/string.h>
   112.6  #include <asm/page.h>
   112.7 +#include <linux/dma-mapping.h> /* for have_iommu */
   112.8  
   112.9  extern int iommu_setup(char *opt);
  112.10  
  112.11 -#ifdef CONFIG_GART_IOMMU
  112.12  /* The PCI address space does equal the physical memory
  112.13   * address space.  The networking and block device layers use
  112.14   * this boolean for bounce buffer decisions
  112.15   *
  112.16 - * On AMD64 it mostly equals, but we set it to zero to tell some subsystems
  112.17 - * that an IOMMU is available.
  112.18 + * On AMD64 it mostly equals, but we set it to zero if a hardware
  112.19 + * IOMMU (gart) of sotware IOMMU (swiotlb) is available.
  112.20   */
  112.21 -#define PCI_DMA_BUS_IS_PHYS	(no_iommu ? 1 : 0)
  112.22 +#define PCI_DMA_BUS_IS_PHYS (dma_ops->is_phys)
  112.23 +
  112.24 +#ifdef CONFIG_GART_IOMMU
  112.25  
  112.26  /*
  112.27   * x86-64 always supports DAC, but sometimes it is useful to force
  112.28 @@ -78,8 +80,6 @@ extern int iommu_sac_force;
  112.29  
  112.30  #elif defined(CONFIG_SWIOTLB)
  112.31  
  112.32 -#define PCI_DMA_BUS_IS_PHYS	0
  112.33 -
  112.34  #define pci_dac_dma_supported(pci_dev, mask)    1
  112.35  
  112.36  #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME)	\
  112.37 @@ -98,7 +98,6 @@ extern int iommu_sac_force;
  112.38  #else
  112.39  /* No IOMMU */
  112.40  
  112.41 -#define PCI_DMA_BUS_IS_PHYS	1
  112.42  #define pci_dac_dma_supported(pci_dev, mask)    1
  112.43  
  112.44  #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME)
   113.1 --- a/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/pgtable.h	Thu Feb 02 19:15:22 2006 +0100
   113.2 +++ b/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/pgtable.h	Thu Feb 02 19:16:38 2006 +0000
   113.3 @@ -160,6 +160,8 @@ static inline pte_t ptep_get_and_clear_f
   113.4  
   113.5  #define pte_same(a, b)		((a).pte == (b).pte)
   113.6  
   113.7 +#define pte_pgprot(a)	(__pgprot((a).pte & ~PHYSICAL_PAGE_MASK))
   113.8 +
   113.9  #define PMD_SIZE	(1UL << PMD_SHIFT)
  113.10  #define PMD_MASK	(~(PMD_SIZE-1))
  113.11  #define PUD_SIZE	(1UL << PUD_SHIFT)
  113.12 @@ -319,25 +321,25 @@ static inline pte_t pfn_pte(unsigned lon
  113.13  
  113.14  #define __LARGE_PTE (_PAGE_PSE|_PAGE_PRESENT)
  113.15  static inline int pte_user(pte_t pte)		{ return __pte_val(pte) & _PAGE_USER; }
  113.16 -extern inline int pte_read(pte_t pte)		{ return __pte_val(pte) & _PAGE_USER; }
  113.17 -extern inline int pte_exec(pte_t pte)		{ return __pte_val(pte) & _PAGE_USER; }
  113.18 -extern inline int pte_dirty(pte_t pte)		{ return __pte_val(pte) & _PAGE_DIRTY; }
  113.19 -extern inline int pte_young(pte_t pte)		{ return __pte_val(pte) & _PAGE_ACCESSED; }
  113.20 -extern inline int pte_write(pte_t pte)		{ return __pte_val(pte) & _PAGE_RW; }
  113.21 +static inline int pte_read(pte_t pte)		{ return __pte_val(pte) & _PAGE_USER; }
  113.22 +static inline int pte_exec(pte_t pte)		{ return __pte_val(pte) & _PAGE_USER; }
  113.23 +static inline int pte_dirty(pte_t pte)		{ return __pte_val(pte) & _PAGE_DIRTY; }
  113.24 +static inline int pte_young(pte_t pte)		{ return __pte_val(pte) & _PAGE_ACCESSED; }
  113.25 +static inline int pte_write(pte_t pte)		{ return __pte_val(pte) & _PAGE_RW; }
  113.26  static inline int pte_file(pte_t pte)		{ return __pte_val(pte) & _PAGE_FILE; }
  113.27  static inline int pte_huge(pte_t pte)		{ return (__pte_val(pte) & __LARGE_PTE) == __LARGE_PTE; }
  113.28  
  113.29 -extern inline pte_t pte_rdprotect(pte_t pte)	{ __pte_val(pte) &= ~_PAGE_USER; return pte; }
  113.30 -extern inline pte_t pte_exprotect(pte_t pte)	{ __pte_val(pte) &= ~_PAGE_USER; return pte; }
  113.31 -extern inline pte_t pte_mkclean(pte_t pte)	{ __pte_val(pte) &= ~_PAGE_DIRTY; return pte; }
  113.32 -extern inline pte_t pte_mkold(pte_t pte)	{ __pte_val(pte) &= ~_PAGE_ACCESSED; return pte; }
  113.33 -extern inline pte_t pte_wrprotect(pte_t pte)	{ __pte_val(pte) &= ~_PAGE_RW; return pte; }
  113.34 -extern inline pte_t pte_mkread(pte_t pte)	{ __pte_val(pte) |= _PAGE_USER; return pte; }
  113.35 -extern inline pte_t pte_mkexec(pte_t pte)	{ __pte_val(pte) |= _PAGE_USER; return pte; }
  113.36 -extern inline pte_t pte_mkdirty(pte_t pte)	{ __pte_val(pte) |= _PAGE_DIRTY; return pte; }
  113.37 -extern inline pte_t pte_mkyoung(pte_t pte)	{ __pte_val(pte) |= _PAGE_ACCESSED; return pte; }
  113.38 -extern inline pte_t pte_mkwrite(pte_t pte)	{ __pte_val(pte) |= _PAGE_RW; return pte; }
  113.39 -extern inline pte_t pte_mkhuge(pte_t pte)	{ __pte_val(pte) |= __LARGE_PTE; return pte; }
  113.40 +static inline pte_t pte_rdprotect(pte_t pte)	{ __pte_val(pte) &= ~_PAGE_USER; return pte; }
  113.41 +static inline pte_t pte_exprotect(pte_t pte)	{ __pte_val(pte) &= ~_PAGE_USER; return pte; }
  113.42 +static inline pte_t pte_mkclean(pte_t pte)	{ __pte_val(pte) &= ~_PAGE_DIRTY; return pte; }
  113.43 +static inline pte_t pte_mkold(pte_t pte)	{ __pte_val(pte) &= ~_PAGE_ACCESSED; return pte; }
  113.44 +static inline pte_t pte_wrprotect(pte_t pte)	{ __pte_val(pte) &= ~_PAGE_RW; return pte; }
  113.45 +static inline pte_t pte_mkread(pte_t pte)	{ __pte_val(pte) |= _PAGE_USER; return pte; }
  113.46 +static inline pte_t pte_mkexec(pte_t pte)	{ __pte_val(pte) |= _PAGE_USER; return pte; }
  113.47 +static inline pte_t pte_mkdirty(pte_t pte)	{ __pte_val(pte) |= _PAGE_DIRTY; return pte; }
  113.48 +static inline pte_t pte_mkyoung(pte_t pte)	{ __pte_val(pte) |= _PAGE_ACCESSED; return pte; }
  113.49 +static inline pte_t pte_mkwrite(pte_t pte)	{ __pte_val(pte) |= _PAGE_RW; return pte; }
  113.50 +static inline pte_t pte_mkhuge(pte_t pte)	{ __pte_val(pte) |= __LARGE_PTE; return pte; }
  113.51  
  113.52  struct vm_area_struct;
  113.53  
  113.54 @@ -405,7 +407,7 @@ static inline pud_t *__pud_offset_k(pud_
  113.55  
  113.56  /* This accesses the reference page table of the boot cpu. 
  113.57     Other CPUs get synced lazily via the page fault handler. */
  113.58 -static inline pud_t *pud_offset_k(unsigned long address)
  113.59 +static inline pud_t *pud_offset_k(pgd_t *pgd, unsigned long address)
  113.60  {
  113.61  	return pud_offset(pgd_offset_k(address), address);
  113.62  }
   114.1 --- a/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/processor.h	Thu Feb 02 19:15:22 2006 +0100
   114.2 +++ b/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/processor.h	Thu Feb 02 19:16:38 2006 +0000
   114.3 @@ -245,7 +245,13 @@ struct tss_struct {
   114.4  extern struct cpuinfo_x86 boot_cpu_data;
   114.5  DECLARE_PER_CPU(struct tss_struct,init_tss);
   114.6  
   114.7 +#ifdef CONFIG_X86_VSMP
   114.8 +#define ARCH_MIN_TASKALIGN	(1 << INTERNODE_CACHE_SHIFT)
   114.9 +#define ARCH_MIN_MMSTRUCT_ALIGN	(1 << INTERNODE_CACHE_SHIFT)
  114.10 +#else
  114.11  #define ARCH_MIN_TASKALIGN	16
  114.12 +#define ARCH_MIN_MMSTRUCT_ALIGN	0
  114.13 +#endif
  114.14  
  114.15  struct thread_struct {
  114.16  	unsigned long	rsp0;
  114.17 @@ -286,15 +292,6 @@ struct thread_struct {
  114.18  #define INIT_MMAP \
  114.19  { &init_mm, 0, 0, NULL, PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC, 1, NULL, NULL }
  114.20  
  114.21 -#define STACKFAULT_STACK 1
  114.22 -#define DOUBLEFAULT_STACK 2 
  114.23 -#define NMI_STACK 3 
  114.24 -#define DEBUG_STACK 4 
  114.25 -#define MCE_STACK 5
  114.26 -#define N_EXCEPTION_STACKS 5  /* hw limit: 7 */
  114.27 -#define EXCEPTION_STKSZ (PAGE_SIZE << EXCEPTION_STACK_ORDER)
  114.28 -#define EXCEPTION_STACK_ORDER 0 
  114.29 -
  114.30  #define start_thread(regs,new_rip,new_rsp) do { \
  114.31  	asm volatile("movl %0,%%fs; movl %0,%%es; movl %0,%%ds": :"r" (0));	 \
  114.32  	load_gs_index(0);							\
  114.33 @@ -333,8 +330,8 @@ extern long kernel_thread(int (*fn)(void
  114.34  #define thread_saved_pc(t) (*(unsigned long *)((t)->thread.rsp - 8))
  114.35  
  114.36  extern unsigned long get_wchan(struct task_struct *p);
  114.37 -#define KSTK_EIP(tsk) \
  114.38 -	(((struct pt_regs *)(tsk->thread.rsp0 - sizeof(struct pt_regs)))->rip)
  114.39 +#define task_pt_regs(tsk) ((struct pt_regs *)(tsk)->thread.rsp0 - 1)
  114.40 +#define KSTK_EIP(tsk) (task_pt_regs(tsk)->rip)
  114.41  #define KSTK_ESP(tsk) -1 /* sorry. doesn't work for syscall. */
  114.42  
  114.43  
  114.44 @@ -496,4 +493,6 @@ extern unsigned long boot_option_idle_ov
  114.45  /* Boot loader type from the setup header */
  114.46  extern int bootloader_type;
  114.47  
  114.48 +#define HAVE_ARCH_PICK_MMAP_LAYOUT 1
  114.49 +
  114.50  #endif /* __ASM_X86_64_PROCESSOR_H */
   115.1 --- a/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/segment.h	Thu Feb 02 19:15:22 2006 +0100
   115.2 +++ b/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/segment.h	Thu Feb 02 19:16:38 2006 +0000
   115.3 @@ -19,15 +19,13 @@
   115.4  #define __USER_DS     0x2b   /* 5*8+3 */ 
   115.5  #define __USER_CS     0x33   /* 6*8+3 */ 
   115.6  #define __USER32_DS	__USER_DS 
   115.7 -#define __KERNEL16_CS	(GDT_ENTRY_KERNELCS16 * 8)
   115.8 -#define __KERNEL_COMPAT32_CS   0x8
   115.9  
  115.10  #define GDT_ENTRY_TLS 1
  115.11  #define GDT_ENTRY_TSS 8	/* needs two entries */
  115.12  #define GDT_ENTRY_LDT 10 /* needs two entries */
  115.13  #define GDT_ENTRY_TLS_MIN 12
  115.14  #define GDT_ENTRY_TLS_MAX 14
  115.15 -#define GDT_ENTRY_KERNELCS16 15
  115.16 +/* 15 free */
  115.17  
  115.18  #define GDT_ENTRY_TLS_ENTRIES 3
  115.19  
   116.1 --- a/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/smp.h	Thu Feb 02 19:15:22 2006 +0100
   116.2 +++ b/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/smp.h	Thu Feb 02 19:16:38 2006 +0000
   116.3 @@ -34,6 +34,7 @@ struct pt_regs;
   116.4  extern cpumask_t cpu_present_mask;
   116.5  extern cpumask_t cpu_possible_map;
   116.6  extern cpumask_t cpu_online_map;
   116.7 +extern cpumask_t cpu_initialized;
   116.8  
   116.9  /*
  116.10   * Private routines/data
   117.1 --- a/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/system.h	Thu Feb 02 19:15:22 2006 +0100
   117.2 +++ b/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/system.h	Thu Feb 02 19:16:38 2006 +0000
   117.3 @@ -29,8 +29,8 @@
   117.4  #define __RESTORE(reg,offset) "movq (14-" #offset ")*8(%%rsp),%%" #reg "\n\t"
   117.5  
   117.6  /* frame pointer must be last for get_wchan */
   117.7 -#define SAVE_CONTEXT    "pushfq ; pushq %%rbp ; movq %%rsi,%%rbp\n\t"
   117.8 -#define RESTORE_CONTEXT "movq %%rbp,%%rsi ; popq %%rbp ; popfq\n\t" 
   117.9 +#define SAVE_CONTEXT    "pushq %%rbp ; movq %%rsi,%%rbp\n\t"
  117.10 +#define RESTORE_CONTEXT "movq %%rbp,%%rsi ; popq %%rbp\n\t"
  117.11  
  117.12  #define __EXTRA_CLOBBER  \
  117.13  	,"rcx","rbx","rdx","r8","r9","r10","r11","r12","r13","r14","r15"
  117.14 @@ -147,6 +147,21 @@ struct alt_instr {
  117.15  		      "663:\n\t" newinstr "\n664:\n"   /* replacement */ \
  117.16  		      ".previous" :: "i" (feature), ##input)
  117.17  
  117.18 +/* Like alternative_input, but with a single output argument */
  117.19 +#define alternative_io(oldinstr, newinstr, feature, output, input...) \
  117.20 +	asm volatile ("661:\n\t" oldinstr "\n662:\n"			\
  117.21 +		      ".section .altinstructions,\"a\"\n"		\
  117.22 +		      "  .align 8\n"					\
  117.23 +		      "  .quad 661b\n"            /* label */		\
  117.24 +		      "  .quad 663f\n"		  /* new instruction */	\
  117.25 +		      "  .byte %c[feat]\n"        /* feature bit */	\
  117.26 +		      "  .byte 662b-661b\n"       /* sourcelen */	\
  117.27 +		      "  .byte 664f-663f\n"       /* replacementlen */	\
  117.28 +		      ".previous\n"					\
  117.29 +		      ".section .altinstr_replacement,\"ax\"\n"		\
  117.30 +		      "663:\n\t" newinstr "\n664:\n"   /* replacement */ \
  117.31 +		      ".previous" : output : [feat] "i" (feature), ##input)
  117.32 +
  117.33  /*
  117.34   * Clear and set 'TS' bit respectively
  117.35   */
  117.36 @@ -188,6 +203,15 @@ static inline void write_cr4(unsigned lo
  117.37  #define wbinvd() \
  117.38  	__asm__ __volatile__ ("wbinvd": : :"memory");
  117.39  
  117.40 +/*
  117.41 + * On SMP systems, when the scheduler does migration-cost autodetection,
  117.42 + * it needs a way to flush as much of the CPU's caches as possible.
  117.43 + */
  117.44 +static inline void sched_cacheflush(void)
  117.45 +{
  117.46 +	wbinvd();
  117.47 +}
  117.48 +
  117.49  #endif	/* __KERNEL__ */
  117.50  
  117.51  #define nop() __asm__ __volatile__ ("nop")
  117.52 @@ -374,8 +398,6 @@ do {									\
  117.53  		preempt_enable_no_resched();				\
  117.54  } while (0)
  117.55  
  117.56 -#define safe_halt()		((void)0)
  117.57 -
  117.58  #define __save_and_cli(x)						\
  117.59  do {									\
  117.60  	vcpu_info_t *_vcpu;						\
  117.61 @@ -387,8 +409,6 @@ do {									\
  117.62  	barrier();							\
  117.63  } while (0)
  117.64  
  117.65 -void cpu_idle_wait(void);
  117.66 -
  117.67  #define local_irq_save(x)	__save_and_cli(x)
  117.68  #define local_irq_restore(x)	__restore_flags(x)
  117.69  #define local_save_flags(x)	__save_flags(x)
  117.70 @@ -405,12 +425,10 @@ void cpu_idle_wait(void);
  117.71  	preempt_enable_no_resched();					\
  117.72  	___x; })
  117.73  
  117.74 -/*
  117.75 - * disable hlt during certain critical i/o operations
  117.76 - */
  117.77 -#define HAVE_DISABLE_HLT
  117.78 -void disable_hlt(void);
  117.79 -void enable_hlt(void);
  117.80 +#define safe_halt()		((void)0)
  117.81 +#define halt()			((void)0)
  117.82 +
  117.83 +void cpu_idle_wait(void);
  117.84  
  117.85  extern unsigned long arch_align_stack(unsigned long sp);
  117.86  
   118.1 --- a/linux-2.6-xen-sparse/include/linux/gfp.h	Thu Feb 02 19:15:22 2006 +0100
   118.2 +++ b/linux-2.6-xen-sparse/include/linux/gfp.h	Thu Feb 02 19:16:38 2006 +0000
   118.3 @@ -57,6 +57,7 @@ struct vm_area_struct;
   118.4  			__GFP_NOFAIL|__GFP_NORETRY|__GFP_NO_GROW|__GFP_COMP| \
   118.5  			__GFP_NOMEMALLOC|__GFP_HARDWALL)
   118.6  
   118.7 +/* GFP_ATOMIC means both !wait (__GFP_WAIT not set) and use emergency pool */
   118.8  #define GFP_ATOMIC	(__GFP_HIGH)
   118.9  #define GFP_NOIO	(__GFP_WAIT)
  118.10  #define GFP_NOFS	(__GFP_WAIT | __GFP_IO)
  118.11 @@ -113,6 +114,10 @@ static inline struct page *alloc_pages_n
  118.12  	if (unlikely(order >= MAX_ORDER))
  118.13  		return NULL;
  118.14  
  118.15 +	/* Unknown node is current node */
  118.16 +	if (nid < 0)
  118.17 +		nid = numa_node_id();
  118.18 +
  118.19  	return __alloc_pages(gfp_mask, order,
  118.20  		NODE_DATA(nid)->node_zonelists + gfp_zone(gfp_mask));
  118.21  }
   119.1 --- a/linux-2.6-xen-sparse/include/linux/irq.h	Thu Feb 02 19:15:22 2006 +0100
   119.2 +++ b/linux-2.6-xen-sparse/include/linux/irq.h	Thu Feb 02 19:16:38 2006 +0000
   119.3 @@ -12,7 +12,7 @@
   119.4  #include <linux/config.h>
   119.5  #include <linux/smp.h>
   119.6  
   119.7 -#if !defined(CONFIG_ARCH_S390)
   119.8 +#if !defined(CONFIG_S390)
   119.9  
  119.10  #include <linux/linkage.h>
  119.11  #include <linux/cache.h>
  119.12 @@ -224,6 +224,17 @@ extern void note_interrupt(unsigned int 
  119.13  extern int can_request_irq(unsigned int irq, unsigned long irqflags);
  119.14  
  119.15  extern void init_irq_proc(void);
  119.16 +
  119.17 +#ifdef CONFIG_AUTO_IRQ_AFFINITY
  119.18 +extern int select_smp_affinity(unsigned int irq);
  119.19 +#else
  119.20 +static inline int
  119.21 +select_smp_affinity(unsigned int irq)
  119.22 +{
  119.23 +	return 1;
  119.24 +}
  119.25 +#endif
  119.26 +
  119.27  #endif
  119.28  
  119.29  extern hw_irq_controller no_irq_type;  /* needed in every arch ? */
   120.1 --- a/linux-2.6-xen-sparse/include/linux/mm.h	Thu Feb 02 19:15:22 2006 +0100
   120.2 +++ b/linux-2.6-xen-sparse/include/linux/mm.h	Thu Feb 02 19:16:38 2006 +0000
   120.3 @@ -3,6 +3,7 @@
   120.4  
   120.5  #include <linux/sched.h>
   120.6  #include <linux/errno.h>
   120.7 +#include <linux/capability.h>
   120.8  
   120.9  #ifdef __KERNEL__
  120.10  
  120.11 @@ -13,6 +14,7 @@
  120.12  #include <linux/rbtree.h>
  120.13  #include <linux/prio_tree.h>
  120.14  #include <linux/fs.h>
  120.15 +#include <linux/mutex.h>
  120.16  
  120.17  struct mempolicy;
  120.18  struct anon_vma;
  120.19 @@ -226,24 +228,30 @@ struct page {
  120.20  					 * & limit reverse map searches.
  120.21  					 */
  120.22  	union {
  120.23 -		unsigned long private;	/* Mapping-private opaque data:
  120.24 -					 * usually used for buffer_heads
  120.25 -					 * if PagePrivate set; used for
  120.26 -					 * swp_entry_t if PageSwapCache
  120.27 -					 * When page is free, this indicates
  120.28 -					 * order in the buddy system.
  120.29 -					 */
  120.30 +	    struct {
  120.31 +		unsigned long private;		/* Mapping-private opaque data:
  120.32 +					 	 * usually used for buffer_heads
  120.33 +						 * if PagePrivate set; used for
  120.34 +						 * swp_entry_t if PageSwapCache.
  120.35 +						 * When page is free, this
  120.36 +						 * indicates order in the buddy
  120.37 +						 * system.
  120.38 +						 */
  120.39 +		struct address_space *mapping;	/* If low bit clear, points to
  120.40 +						 * inode address_space, or NULL.
  120.41 +						 * If page mapped as anonymous
  120.42 +						 * memory, low bit is set, and
  120.43 +						 * it points to anon_vma object:
  120.44 +						 * see PAGE_MAPPING_ANON below.
  120.45 +						 */
  120.46 +	    };
  120.47  #if NR_CPUS >= CONFIG_SPLIT_PTLOCK_CPUS
  120.48 -		spinlock_t ptl;
  120.49 +	    spinlock_t ptl;
  120.50  #endif
  120.51 -	} u;
  120.52 -	struct address_space *mapping;	/* If low bit clear, points to
  120.53 -					 * inode address_space, or NULL.
  120.54 -					 * If page mapped as anonymous
  120.55 -					 * memory, low bit is set, and
  120.56 -					 * it points to anon_vma object:
  120.57 -					 * see PAGE_MAPPING_ANON below.
  120.58 -					 */
  120.59 +#ifdef CONFIG_XEN
  120.60 +	    struct list_head ballooned;
  120.61 +#endif
  120.62 +	};
  120.63  	pgoff_t index;			/* Our offset within mapping. */
  120.64  	struct list_head lru;		/* Pageout list, eg. active_list
  120.65  					 * protected by zone->lru_lock !
  120.66 @@ -264,8 +272,8 @@ struct page {
  120.67  #endif /* WANT_PAGE_VIRTUAL */
  120.68  };
  120.69  
  120.70 -#define page_private(page)		((page)->u.private)
  120.71 -#define set_page_private(page, v)	((page)->u.private = (v))
  120.72 +#define page_private(page)		((page)->private)
  120.73 +#define set_page_private(page, v)	((page)->private = (v))
  120.74  
  120.75  /*
  120.76   * FIXME: take this include out, include page-flags.h in
  120.77 @@ -311,7 +319,7 @@ struct page {
  120.78   */
  120.79  #define get_page_testone(p)	atomic_inc_and_test(&(p)->_count)
  120.80  
  120.81 -#define set_page_count(p,v) 	atomic_set(&(p)->_count, v - 1)
  120.82 +#define set_page_count(p,v) 	atomic_set(&(p)->_count, (v) - 1)
  120.83  #define __put_page(p)		atomic_dec(&(p)->_count)
  120.84  
  120.85  extern void FASTCALL(__page_cache_release(struct page *));
  120.86 @@ -510,7 +518,7 @@ static inline void set_page_links(struct
  120.87  extern struct page *mem_map;
  120.88  #endif
  120.89  
  120.90 -static inline void *lowmem_page_address(struct page *page)
  120.91 +static __always_inline void *lowmem_page_address(struct page *page)
  120.92  {
  120.93  	return __va(page_to_pfn(page) << PAGE_SHIFT);
  120.94  }
  120.95 @@ -637,14 +645,38 @@ struct mempolicy *shmem_get_policy(struc
  120.96  int shmem_lock(struct file *file, int lock, struct user_struct *user);
  120.97  #else
  120.98  #define shmem_nopage filemap_nopage
  120.99 -#define shmem_lock(a, b, c) 	({0;})	/* always in memory, no need to lock */
 120.100 -#define shmem_set_policy(a, b)	(0)
 120.101 -#define shmem_get_policy(a, b)	(NULL)
 120.102 +
 120.103 +static inline int shmem_lock(struct file *file, int lock,
 120.104 +			     struct user_struct *user)
 120.105 +{
 120.106 +	return 0;
 120.107 +}
 120.108 +
 120.109 +static inline int shmem_set_policy(struct vm_area_struct *vma,
 120.110 +				   struct mempolicy *new)
 120.111 +{
 120.112 +	return 0;
 120.113 +}
 120.114 +
 120.115 +static inline struct mempolicy *shmem_get_policy(struct vm_area_struct *vma,
 120.116 +						 unsigned long addr)
 120.117 +{
 120.118 +	return NULL;
 120.119 +}
 120.120  #endif
 120.121  struct file *shmem_file_setup(char *name, loff_t size, unsigned long flags);
 120.122 +extern int shmem_mmap(struct file *file, struct vm_area_struct *vma);
 120.123  
 120.124  int shmem_zero_setup(struct vm_area_struct *);
 120.125  
 120.126 +#ifndef CONFIG_MMU
 120.127 +extern unsigned long shmem_get_unmapped_area(struct file *file,
 120.128 +					     unsigned long addr,
 120.129 +					     unsigned long len,
 120.130 +					     unsigned long pgoff,
 120.131 +					     unsigned long flags);
 120.132 +#endif
 120.133 +
 120.134  static inline int can_do_mlock(void)
 120.135  {
 120.136  	if (capable(CAP_IPC_LOCK))
 120.137 @@ -693,14 +725,31 @@ static inline void unmap_shared_mapping_
 120.138  }
 120.139  
 120.140  extern int vmtruncate(struct inode * inode, loff_t offset);
 120.141 +extern int vmtruncate_range(struct inode * inode, loff_t offset, loff_t end);
 120.142  extern int install_page(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, struct page *page, pgprot_t prot);
 120.143  extern int install_file_pte(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, unsigned long pgoff, pgprot_t prot);
 120.144 -extern int __handle_mm_fault(struct mm_struct *mm,struct vm_area_struct *vma, unsigned long address, int write_access);
 120.145  
 120.146 -static inline int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long address, int write_access)
 120.147 +#ifdef CONFIG_MMU
 120.148 +extern int __handle_mm_fault(struct mm_struct *mm,struct vm_area_struct *vma,
 120.149 +			unsigned long address, int write_access);
 120.150 +
 120.151 +static inline int handle_mm_fault(struct mm_struct *mm,
 120.152 +			struct vm_area_struct *vma, unsigned long address,
 120.153 +			int write_access)
 120.154  {
 120.155 -	return __handle_mm_fault(mm, vma, address, write_access) & (~VM_FAULT_WRITE);
 120.156 +	return __handle_mm_fault(mm, vma, address, write_access) &
 120.157 +				(~VM_FAULT_WRITE);
 120.158  }
 120.159 +#else
 120.160 +static inline int handle_mm_fault(struct mm_struct *mm,
 120.161 +			struct vm_area_struct *vma, unsigned long address,
 120.162 +			int write_access)
 120.163 +{
 120.164 +	/* should never happen if there's no MMU */
 120.165 +	BUG();
 120.166 +	return VM_FAULT_SIGBUS;
 120.167 +}
 120.168 +#endif
 120.169  
 120.170  extern int make_pages_present(unsigned long addr, unsigned long end);
 120.171  extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write);
 120.172 @@ -777,7 +826,7 @@ static inline pmd_t *pmd_alloc(struct mm
 120.173   * overflow into the next struct page (as it might with DEBUG_SPINLOCK).
 120.174   * When freeing, reset page->mapping so free_pages_check won't complain.
 120.175   */
 120.176 -#define __pte_lockptr(page)	&((page)->u.ptl)
 120.177 +#define __pte_lockptr(page)	&((page)->ptl)
 120.178  #define pte_lock_init(_page)	do {					\
 120.179  	spin_lock_init(__pte_lockptr(_page));				\
 120.180  } while (0)
 120.181 @@ -899,6 +948,8 @@ extern unsigned long do_brk(unsigned lon
 120.182  /* filemap.c */
 120.183  extern unsigned long page_unuse(struct page *);
 120.184  extern void truncate_inode_pages(struct address_space *, loff_t);
 120.185 +extern void truncate_inode_pages_range(struct address_space *,
 120.186 +				       loff_t lstart, loff_t lend);
 120.187  
 120.188  /* generic vm_area_ops exported for stackable file systems */
 120.189  extern struct page *filemap_nopage(struct vm_area_struct *, unsigned long, int *);
 120.190 @@ -988,6 +1039,9 @@ static inline void vm_stat_account(struc
 120.191  static inline void
 120.192  kernel_map_pages(struct page *page, int numpages, int enable)
 120.193  {
 120.194 +	if (!PageHighMem(page) && !enable)
 120.195 +		mutex_debug_check_no_locks_freed(page_address(page),
 120.196 +						 numpages * PAGE_SIZE);
 120.197  }
 120.198  #endif
 120.199  
 120.200 @@ -1003,5 +1057,12 @@ int in_gate_area_no_task(unsigned long a
 120.201  /* /proc/<pid>/oom_adj set to -17 protects from the oom-killer */
 120.202  #define OOM_DISABLE -17
 120.203  
 120.204 +int drop_caches_sysctl_handler(struct ctl_table *, int, struct file *,
 120.205 +					void __user *, size_t *, loff_t *);
 120.206 +int shrink_slab(unsigned long scanned, gfp_t gfp_mask,
 120.207 +			unsigned long lru_pages);
 120.208 +void drop_pagecache(void);
 120.209 +void drop_slab(void);
 120.210 +
 120.211  #endif /* __KERNEL__ */
 120.212  #endif /* _LINUX_MM_H */
   121.1 --- a/linux-2.6-xen-sparse/include/linux/skbuff.h	Thu Feb 02 19:15:22 2006 +0100
   121.2 +++ b/linux-2.6-xen-sparse/include/linux/skbuff.h	Thu Feb 02 19:16:38 2006 +0000
   121.3 @@ -32,7 +32,6 @@
   121.4  
   121.5  #define HAVE_ALLOC_SKB		/* For the drivers to know */
   121.6  #define HAVE_ALIGNABLE_SKB	/* Ditto 8)		   */
   121.7 -#define SLAB_SKB 		/* Slabified skbuffs 	   */
   121.8  
   121.9  #define CHECKSUM_NONE 0
  121.10  #define CHECKSUM_HW 1
  121.11 @@ -134,7 +133,7 @@ struct skb_frag_struct {
  121.12   */
  121.13  struct skb_shared_info {
  121.14  	atomic_t	dataref;
  121.15 -	unsigned int	nr_frags;
  121.16 +	unsigned short	nr_frags;
  121.17  	unsigned short	tso_size;
  121.18  	unsigned short	tso_segs;
  121.19  	unsigned short  ufo_size;
  121.20 @@ -254,7 +253,7 @@ struct sk_buff {
  121.21  	 * want to keep them across layers you have to do a skb_clone()
  121.22  	 * first. This is owned by whoever has the skb queued ATM.
  121.23  	 */
  121.24 -	char			cb[40];
  121.25 +	char			cb[48];
  121.26  
  121.27  	unsigned int		len,
  121.28  				data_len,
  121.29 @@ -936,7 +935,7 @@ static inline int skb_tailroom(const str
  121.30   *	Increase the headroom of an empty &sk_buff by reducing the tail
  121.31   *	room. This is only allowed f