ia64/xen-unstable

changeset 13523:4fad820a2233

[linux] Update to linux-2.6.17.

Signed-off-by: Christian Limpach <Christian.Limpach@xensource.com>
author Christian Limpach <Christian.Limpach@xensource.com>
date Fri Jan 12 14:30:49 2007 +0000 (2007-01-12)
parents 6d6a4d5801bd
children 5babd90037b8
files 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/Kconfig.cpu linux-2.6-xen-sparse/arch/i386/Kconfig.debug 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/cpu/intel_cacheinfo-xen.c linux-2.6-xen-sparse/arch/i386/kernel/cpu/mtrr/main-xen.c linux-2.6-xen-sparse/arch/i386/kernel/crash.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/io_apic-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/process-xen.c linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c linux-2.6-xen-sparse/arch/i386/kernel/smp-xen.c linux-2.6-xen-sparse/arch/i386/kernel/smpalts.c linux-2.6-xen-sparse/arch/i386/kernel/smpboot.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/kernel/vm86.c linux-2.6-xen-sparse/arch/i386/kernel/vmlinux.lds.S linux-2.6-xen-sparse/arch/i386/mm/fault-xen.c linux-2.6-xen-sparse/arch/i386/mm/init-xen.c linux-2.6-xen-sparse/arch/i386/mm/pgtable-xen.c linux-2.6-xen-sparse/arch/i386/mm/pgtable.c linux-2.6-xen-sparse/arch/i386/pci/Makefile 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/dig/setup.c linux-2.6-xen-sparse/arch/ia64/kernel/entry.S linux-2.6-xen-sparse/arch/ia64/kernel/gate.lds.S linux-2.6-xen-sparse/arch/ia64/kernel/iosapic.c linux-2.6-xen-sparse/arch/ia64/kernel/patch.c linux-2.6-xen-sparse/arch/ia64/kernel/perfmon.c linux-2.6-xen-sparse/arch/ia64/kernel/setup.c linux-2.6-xen-sparse/arch/ia64/mm/ioremap.c linux-2.6-xen-sparse/arch/um/kernel/physmem.c 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/ia32entry-xen.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/acpi/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/io_apic-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/irq-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/mpparse-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/x8664_ksyms-xen.c 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/arch/x86_64/pci/Makefile 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/tty_io.c linux-2.6-xen-sparse/drivers/pci/Kconfig linux-2.6-xen-sparse/drivers/serial/Kconfig linux-2.6-xen-sparse/drivers/video/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/console/console.c linux-2.6-xen-sparse/drivers/xen/core/smpboot.c linux-2.6-xen-sparse/drivers/xen/netback/netback.c linux-2.6-xen-sparse/drivers/xen/pcifront/pci_op.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/apic.h 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/io.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/page.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/pgtable-2level.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/pgtable-3level.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/pgtable.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/setup.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/smp.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/spinlock.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/system.h linux-2.6-xen-sparse/include/asm-i386/page.h linux-2.6-xen-sparse/include/asm-i386/rwsem.h linux-2.6-xen-sparse/include/asm-i386/smp_alt.h linux-2.6-xen-sparse/include/asm-i386/spinlock.h linux-2.6-xen-sparse/include/asm-i386/system.h linux-2.6-xen-sparse/include/asm-ia64/intel_intrin.h linux-2.6-xen-sparse/include/asm-ia64/io.h linux-2.6-xen-sparse/include/asm-ia64/machvec.h linux-2.6-xen-sparse/include/asm-ia64/machvec_dig.h linux-2.6-xen-sparse/include/asm-ia64/page.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-um/page.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/e820.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/floppy.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/pgalloc.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/smp.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/system.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/mach_time.h linux-2.6-xen-sparse/include/linux/gfp.h linux-2.6-xen-sparse/include/linux/highmem.h linux-2.6-xen-sparse/include/linux/mm.h linux-2.6-xen-sparse/include/linux/pfn.h linux-2.6-xen-sparse/include/linux/skbuff.h linux-2.6-xen-sparse/kernel/fork.c linux-2.6-xen-sparse/lib/Makefile linux-2.6-xen-sparse/mm/Kconfig linux-2.6-xen-sparse/mm/highmem.c 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.16.33/blktap-aio-16_03_06.patch patches/linux-2.6.16.33/device_bind.patch patches/linux-2.6.16.33/fix-hz-suspend.patch patches/linux-2.6.16.33/fix-ide-cd-pio-mode.patch patches/linux-2.6.16.33/git-2a8a3d5b65e86ec1dfef7d268c64a909eab94af7.patch patches/linux-2.6.16.33/git-2efe55a9cec8418f0e0cde3dc3787a42fddc4411.patch patches/linux-2.6.16.33/git-3566561bfadffcb5dbc85d576be80c0dbf2cccc9.patch patches/linux-2.6.16.33/git-4bfaaef01a1badb9e8ffb0c0a37cd2379008d21f.patch patches/linux-2.6.16.33/git-dbaab49f92ff6ae6255762a948375e4036cbdbd2.patch patches/linux-2.6.16.33/i386-mach-io-check-nmi.patch patches/linux-2.6.16.33/ipv6-no-autoconf.patch patches/linux-2.6.16.33/kasprintf.patch patches/linux-2.6.16.33/linux-2.6.19-rc1-kexec-move_segment_code-i386.patch patches/linux-2.6.16.33/linux-2.6.19-rc1-kexec-move_segment_code-x86_64.patch patches/linux-2.6.16.33/net-csum.patch patches/linux-2.6.16.33/net-gso-0-base.patch patches/linux-2.6.16.33/net-gso-1-check-dodgy.patch patches/linux-2.6.16.33/net-gso-2-checksum-fix.patch patches/linux-2.6.16.33/net-gso-3-fix-errorcheck.patch patches/linux-2.6.16.33/net-gso-4-kill-warnon.patch patches/linux-2.6.16.33/net-gso-5-rcv-mss.patch patches/linux-2.6.16.33/net-gso-6-linear-segmentation.patch patches/linux-2.6.16.33/pci-mmconfig-fix-from-2.6.17.patch patches/linux-2.6.16.33/pmd-shared.patch patches/linux-2.6.16.33/rcu_needs_cpu.patch patches/linux-2.6.16.33/rename-TSS_sysenter_esp0-SYSENTER_stack_esp0.patch patches/linux-2.6.16.33/series patches/linux-2.6.16.33/smp-alts.patch patches/linux-2.6.16.33/tpm_plugin_2.6.17.patch patches/linux-2.6.16.33/vsnprintf.patch patches/linux-2.6.16.33/x86-elfnote-as-preprocessor-macro.patch patches/linux-2.6.16.33/x86-increase-interrupt-vector-range.patch patches/linux-2.6.16.33/x86-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch patches/linux-2.6.16.33/x86_64-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch patches/linux-2.6.16.33/xen-hotplug.patch patches/linux-2.6.16.33/xenoprof-generic.patch patches/linux-2.6.17/blktap-aio-16_03_06.patch patches/linux-2.6.17/fix-hz-suspend.patch patches/linux-2.6.17/fix-ide-cd-pio-mode.patch patches/linux-2.6.17/git-2a8a3d5b65e86ec1dfef7d268c64a909eab94af7.patch patches/linux-2.6.17/git-2efe55a9cec8418f0e0cde3dc3787a42fddc4411.patch patches/linux-2.6.17/git-3566561bfadffcb5dbc85d576be80c0dbf2cccc9.patch patches/linux-2.6.17/git-4bfaaef01a1badb9e8ffb0c0a37cd2379008d21f.patch patches/linux-2.6.17/git-dbaab49f92ff6ae6255762a948375e4036cbdbd2.patch patches/linux-2.6.17/i386-mach-io-check-nmi.patch patches/linux-2.6.17/ipv6-no-autoconf.patch patches/linux-2.6.17/kasprintf.patch patches/linux-2.6.17/linux-2.6.19-rc1-kexec-move_segment_code-i386.patch patches/linux-2.6.17/linux-2.6.19-rc1-kexec-move_segment_code-x86_64.patch patches/linux-2.6.17/net-csum.patch patches/linux-2.6.17/net-gso-0-base.patch patches/linux-2.6.17/net-gso-1-check-dodgy.patch patches/linux-2.6.17/net-gso-2-checksum-fix.patch patches/linux-2.6.17/net-gso-3-fix-errorcheck.patch patches/linux-2.6.17/net-gso-4-kill-warnon.patch patches/linux-2.6.17/net-gso-5-rcv-mss.patch patches/linux-2.6.17/net-gso-6-linear-segmentation.patch patches/linux-2.6.17/pmd-shared.patch patches/linux-2.6.17/rename-TSS_sysenter_esp0-SYSENTER_stack_esp0.patch patches/linux-2.6.17/series patches/linux-2.6.17/vsnprintf.patch patches/linux-2.6.17/x86-elfnote-as-preprocessor-macro.patch patches/linux-2.6.17/x86-increase-interrupt-vector-range.patch patches/linux-2.6.17/x86-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch patches/linux-2.6.17/x86_64-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch patches/linux-2.6.17/xen-hotplug.patch patches/linux-2.6.17/xenoprof-generic.patch
line diff
     1.1 --- a/buildconfigs/linux-defconfig_xen0_x86_32	Tue Jan 09 10:50:46 2007 +0000
     1.2 +++ b/buildconfigs/linux-defconfig_xen0_x86_32	Fri Jan 12 14:30:49 2007 +0000
     1.3 @@ -1,7 +1,7 @@
     1.4  #
     1.5  # Automatically generated make config: don't edit
     1.6 -# Linux kernel version: 2.6.16.13-xen0
     1.7 -# Thu May 11 17:06:31 2006
     1.8 +# Linux kernel version: 2.6.17-xen0
     1.9 +# Thu Jan 11 10:23:10 2007
    1.10  #
    1.11  CONFIG_X86_32=y
    1.12  CONFIG_SEMAPHORE_SLEEPERS=y
    1.13 @@ -9,6 +9,7 @@ CONFIG_X86=y
    1.14  CONFIG_MMU=y
    1.15  CONFIG_GENERIC_ISA_DMA=y
    1.16  CONFIG_GENERIC_IOMAP=y
    1.17 +CONFIG_GENERIC_HWEIGHT=y
    1.18  CONFIG_ARCH_MAY_HAVE_PC_FDC=y
    1.19  CONFIG_DMI=y
    1.20  
    1.21 @@ -31,6 +32,7 @@ CONFIG_SYSVIPC=y
    1.22  CONFIG_SYSCTL=y
    1.23  # CONFIG_AUDIT is not set
    1.24  # CONFIG_IKCONFIG is not set
    1.25 +# CONFIG_RELAY is not set
    1.26  CONFIG_INITRAMFS_SOURCE=""
    1.27  CONFIG_UID16=y
    1.28  CONFIG_VM86=y
    1.29 @@ -47,10 +49,6 @@ CONFIG_BASE_FULL=y
    1.30  CONFIG_FUTEX=y
    1.31  CONFIG_EPOLL=y
    1.32  CONFIG_SHMEM=y
    1.33 -CONFIG_CC_ALIGN_FUNCTIONS=0
    1.34 -CONFIG_CC_ALIGN_LABELS=0
    1.35 -CONFIG_CC_ALIGN_LOOPS=0
    1.36 -CONFIG_CC_ALIGN_JUMPS=0
    1.37  CONFIG_SLAB=y
    1.38  # CONFIG_TINY_SHMEM is not set
    1.39  CONFIG_BASE_SMALL=0
    1.40 @@ -62,7 +60,6 @@ CONFIG_BASE_SMALL=0
    1.41  CONFIG_MODULES=y
    1.42  CONFIG_MODULE_UNLOAD=y
    1.43  # CONFIG_MODULE_FORCE_UNLOAD is not set
    1.44 -CONFIG_OBSOLETE_MODPARM=y
    1.45  # CONFIG_MODVERSIONS is not set
    1.46  # CONFIG_MODULE_SRCVERSION_ALL is not set
    1.47  CONFIG_KMOD=y
    1.48 @@ -71,6 +68,8 @@ CONFIG_KMOD=y
    1.49  # Block layer
    1.50  #
    1.51  # CONFIG_LBD is not set
    1.52 +# CONFIG_BLK_DEV_IO_TRACE is not set
    1.53 +CONFIG_LSF=y
    1.54  
    1.55  #
    1.56  # IO Schedulers
    1.57 @@ -88,6 +87,7 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
    1.58  #
    1.59  # Processor type and features
    1.60  #
    1.61 +# CONFIG_SMP is not set
    1.62  # CONFIG_X86_PC is not set
    1.63  CONFIG_X86_XEN=y
    1.64  # CONFIG_X86_ELAN is not set
    1.65 @@ -135,7 +135,6 @@ CONFIG_X86_CMPXCHG64=y
    1.66  CONFIG_X86_GOOD_APIC=y
    1.67  CONFIG_X86_USE_PPRO_CHECKSUM=y
    1.68  CONFIG_X86_TSC=y
    1.69 -# CONFIG_SMP is not set
    1.70  CONFIG_PREEMPT_NONE=y
    1.71  # CONFIG_PREEMPT_VOLUNTARY is not set
    1.72  # CONFIG_PREEMPT is not set
    1.73 @@ -158,10 +157,6 @@ CONFIG_SWIOTLB=y
    1.74  # CONFIG_NOHIGHMEM is not set
    1.75  CONFIG_HIGHMEM4G=y
    1.76  # CONFIG_HIGHMEM64G is not set
    1.77 -CONFIG_VMSPLIT_3G=y
    1.78 -# CONFIG_VMSPLIT_3G_OPT is not set
    1.79 -# CONFIG_VMSPLIT_2G is not set
    1.80 -# CONFIG_VMSPLIT_1G is not set
    1.81  CONFIG_PAGE_OFFSET=0xC0000000
    1.82  CONFIG_HIGHMEM=y
    1.83  CONFIG_SELECT_MEMORY_MODEL=y
    1.84 @@ -202,6 +197,7 @@ CONFIG_ACPI_PROCESSOR=m
    1.85  CONFIG_ACPI_THERMAL=m
    1.86  CONFIG_ACPI_ASUS=m
    1.87  CONFIG_ACPI_IBM=m
    1.88 +# CONFIG_ACPI_IBM_DOCK is not set
    1.89  CONFIG_ACPI_TOSHIBA=m
    1.90  # CONFIG_ACPI_CUSTOM_DSDT is not set
    1.91  CONFIG_ACPI_BLACKLIST_YEAR=0
    1.92 @@ -230,7 +226,6 @@ CONFIG_PCI_MMCONFIG=y
    1.93  CONFIG_XEN_PCIDEV_FRONTEND=y
    1.94  # CONFIG_XEN_PCIDEV_FE_DEBUG is not set
    1.95  # CONFIG_PCIEPORTBUS is not set
    1.96 -CONFIG_PCI_LEGACY_PROC=y
    1.97  # CONFIG_PCI_DEBUG is not set
    1.98  CONFIG_ISA_DMA_API=y
    1.99  # CONFIG_SCx200 is not set
   1.100 @@ -280,6 +275,7 @@ CONFIG_IP_PNP_DHCP=y
   1.101  # CONFIG_INET_AH is not set
   1.102  # CONFIG_INET_ESP is not set
   1.103  # CONFIG_INET_IPCOMP is not set
   1.104 +# CONFIG_INET_XFRM_TUNNEL is not set
   1.105  # CONFIG_INET_TUNNEL is not set
   1.106  # CONFIG_INET_DIAG is not set
   1.107  # CONFIG_TCP_CONG_ADVANCED is not set
   1.108 @@ -290,6 +286,8 @@ CONFIG_TCP_CONG_BIC=y
   1.109  #
   1.110  # CONFIG_IP_VS is not set
   1.111  # CONFIG_IPV6 is not set
   1.112 +# CONFIG_INET6_XFRM_TUNNEL is not set
   1.113 +# CONFIG_INET6_TUNNEL is not set
   1.114  CONFIG_NETFILTER=y
   1.115  # CONFIG_NETFILTER_DEBUG is not set
   1.116  CONFIG_BRIDGE_NETFILTER=y
   1.117 @@ -314,6 +312,7 @@ CONFIG_IP_NF_FTP=m
   1.118  # CONFIG_IP_NF_TFTP is not set
   1.119  # CONFIG_IP_NF_AMANDA is not set
   1.120  # CONFIG_IP_NF_PPTP is not set
   1.121 +# CONFIG_IP_NF_H323 is not set
   1.122  # CONFIG_IP_NF_QUEUE is not set
   1.123  
   1.124  #
   1.125 @@ -339,6 +338,7 @@ CONFIG_IP_NF_FTP=m
   1.126  CONFIG_BRIDGE=y
   1.127  # CONFIG_VLAN_8021Q is not set
   1.128  # CONFIG_DECNET is not set
   1.129 +CONFIG_LLC=y
   1.130  # CONFIG_LLC2 is not set
   1.131  # CONFIG_IPX is not set
   1.132  # CONFIG_ATALK is not set
   1.133 @@ -542,6 +542,7 @@ CONFIG_AIC79XX_DEBUG_ENABLE=y
   1.134  CONFIG_AIC79XX_DEBUG_MASK=0
   1.135  CONFIG_AIC79XX_REG_PRETTY_PRINT=y
   1.136  # CONFIG_SCSI_DPT_I2O is not set
   1.137 +CONFIG_SCSI_ADVANSYS=y
   1.138  CONFIG_MEGARAID_NEWGEN=y
   1.139  # CONFIG_MEGARAID_MM is not set
   1.140  # CONFIG_MEGARAID_LEGACY is not set
   1.141 @@ -573,7 +574,6 @@ CONFIG_SCSI_SATA_INTEL_COMBINED=y
   1.142  # CONFIG_SCSI_INIA100 is not set
   1.143  # CONFIG_SCSI_SYM53C8XX_2 is not set
   1.144  # CONFIG_SCSI_IPR is not set
   1.145 -# CONFIG_SCSI_QLOGIC_FC is not set
   1.146  # CONFIG_SCSI_QLOGIC_1280 is not set
   1.147  # CONFIG_SCSI_QLA_FC is not set
   1.148  # CONFIG_SCSI_LPFC is not set
   1.149 @@ -592,6 +592,7 @@ CONFIG_MD_RAID0=y
   1.150  CONFIG_MD_RAID1=y
   1.151  # CONFIG_MD_RAID10 is not set
   1.152  CONFIG_MD_RAID5=y
   1.153 +# CONFIG_MD_RAID5_RESHAPE is not set
   1.154  # CONFIG_MD_RAID6 is not set
   1.155  # CONFIG_MD_MULTIPATH is not set
   1.156  # CONFIG_MD_FAULTY is not set
   1.157 @@ -905,18 +906,16 @@ CONFIG_DRM_SIS=m
   1.158  # CONFIG_IBM_ASM is not set
   1.159  
   1.160  #
   1.161 -# Multimedia Capabilities Port drivers
   1.162 -#
   1.163 -
   1.164 -#
   1.165  # Multimedia devices
   1.166  #
   1.167  # CONFIG_VIDEO_DEV is not set
   1.168 +CONFIG_VIDEO_V4L2=y
   1.169  
   1.170  #
   1.171  # Digital Video Broadcasting Devices
   1.172  #
   1.173  # CONFIG_DVB is not set
   1.174 +# CONFIG_USB_DABUSB is not set
   1.175  
   1.176  #
   1.177  # Graphics support
   1.178 @@ -928,6 +927,7 @@ CONFIG_DRM_SIS=m
   1.179  # Console display driver support
   1.180  #
   1.181  CONFIG_VGA_CONSOLE=y
   1.182 +# CONFIG_VGACON_SOFT_SCROLLBACK is not set
   1.183  CONFIG_DUMMY_CONSOLE=y
   1.184  
   1.185  #
   1.186 @@ -940,6 +940,7 @@ CONFIG_DUMMY_CONSOLE=y
   1.187  #
   1.188  CONFIG_USB_ARCH_HAS_HCD=y
   1.189  CONFIG_USB_ARCH_HAS_OHCI=y
   1.190 +CONFIG_USB_ARCH_HAS_EHCI=y
   1.191  CONFIG_USB=y
   1.192  # CONFIG_USB_DEBUG is not set
   1.193  
   1.194 @@ -992,9 +993,7 @@ CONFIG_USB_HIDINPUT=y
   1.195  # CONFIG_USB_ACECAD is not set
   1.196  # CONFIG_USB_KBTAB is not set
   1.197  # CONFIG_USB_POWERMATE is not set
   1.198 -# CONFIG_USB_MTOUCH is not set
   1.199 -# CONFIG_USB_ITMTOUCH is not set
   1.200 -# CONFIG_USB_EGALAX is not set
   1.201 +# CONFIG_USB_TOUCHSCREEN is not set
   1.202  # CONFIG_USB_YEALINK is not set
   1.203  # CONFIG_USB_XPAD is not set
   1.204  # CONFIG_USB_ATI_REMOTE is not set
   1.205 @@ -1009,15 +1008,6 @@ CONFIG_USB_HIDINPUT=y
   1.206  # CONFIG_USB_MICROTEK is not set
   1.207  
   1.208  #
   1.209 -# USB Multimedia devices
   1.210 -#
   1.211 -# CONFIG_USB_DABUSB is not set
   1.212 -
   1.213 -#
   1.214 -# Video4Linux support is needed for USB Multimedia device support
   1.215 -#
   1.216 -
   1.217 -#
   1.218  # USB Network Adapters
   1.219  #
   1.220  # CONFIG_USB_CATC is not set
   1.221 @@ -1067,6 +1057,19 @@ CONFIG_USB_MON=y
   1.222  # CONFIG_MMC is not set
   1.223  
   1.224  #
   1.225 +# LED devices
   1.226 +#
   1.227 +# CONFIG_NEW_LEDS is not set
   1.228 +
   1.229 +#
   1.230 +# LED drivers
   1.231 +#
   1.232 +
   1.233 +#
   1.234 +# LED Triggers
   1.235 +#
   1.236 +
   1.237 +#
   1.238  # InfiniBand support
   1.239  #
   1.240  # CONFIG_INFINIBAND is not set
   1.241 @@ -1077,6 +1080,25 @@ CONFIG_USB_MON=y
   1.242  # CONFIG_EDAC is not set
   1.243  
   1.244  #
   1.245 +# Real Time Clock
   1.246 +#
   1.247 +CONFIG_RTC_LIB=m
   1.248 +CONFIG_RTC_CLASS=m
   1.249 +
   1.250 +#
   1.251 +# RTC interfaces
   1.252 +#
   1.253 +CONFIG_RTC_INTF_SYSFS=m
   1.254 +CONFIG_RTC_INTF_PROC=m
   1.255 +CONFIG_RTC_INTF_DEV=m
   1.256 +
   1.257 +#
   1.258 +# RTC drivers
   1.259 +#
   1.260 +CONFIG_RTC_DRV_M48T86=m
   1.261 +CONFIG_RTC_DRV_TEST=m
   1.262 +
   1.263 +#
   1.264  # File systems
   1.265  #
   1.266  CONFIG_EXT2_FS=y
   1.267 @@ -1134,7 +1156,6 @@ CONFIG_SYSFS=y
   1.268  CONFIG_TMPFS=y
   1.269  # CONFIG_HUGETLB_PAGE is not set
   1.270  CONFIG_RAMFS=y
   1.271 -# CONFIG_RELAYFS_FS is not set
   1.272  # CONFIG_CONFIGFS_FS is not set
   1.273  
   1.274  #
   1.275 @@ -1258,11 +1279,13 @@ CONFIG_DEBUG_BUGVERBOSE=y
   1.276  # CONFIG_DEBUG_FS is not set
   1.277  # CONFIG_DEBUG_VM is not set
   1.278  CONFIG_FRAME_POINTER=y
   1.279 +# CONFIG_UNWIND_INFO is not set
   1.280  CONFIG_FORCED_INLINING=y
   1.281  # CONFIG_RCU_TORTURE_TEST is not set
   1.282  CONFIG_EARLY_PRINTK=y
   1.283  # CONFIG_DEBUG_STACKOVERFLOW is not set
   1.284  # CONFIG_DEBUG_STACK_USAGE is not set
   1.285 +CONFIG_STACK_BACKTRACE_COLS=2
   1.286  # CONFIG_DEBUG_PAGEALLOC is not set
   1.287  # CONFIG_DEBUG_RODATA is not set
   1.288  # CONFIG_4KSTACKS is not set
   1.289 @@ -1310,24 +1333,26 @@ CONFIG_CRYPTO_CRC32C=m
   1.290  #
   1.291  # CONFIG_CRYPTO_DEV_PADLOCK is not set
   1.292  CONFIG_XEN=y
   1.293 -CONFIG_XEN_INTERFACE_VERSION=0x00030202
   1.294 +CONFIG_XEN_INTERFACE_VERSION=0x00030203
   1.295  
   1.296  #
   1.297  # XEN
   1.298  #
   1.299  CONFIG_XEN_PRIVILEGED_GUEST=y
   1.300  # CONFIG_XEN_UNPRIVILEGED_GUEST is not set
   1.301 +CONFIG_XEN_PRIVCMD=y
   1.302 +CONFIG_XEN_XENBUS_DEV=y
   1.303  CONFIG_XEN_BACKEND=y
   1.304 +CONFIG_XEN_BLKDEV_BACKEND=y
   1.305 +CONFIG_XEN_BLKDEV_TAP=y
   1.306 +CONFIG_XEN_NETDEV_BACKEND=y
   1.307 +# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
   1.308 +CONFIG_XEN_NETDEV_LOOPBACK=y
   1.309  CONFIG_XEN_PCIDEV_BACKEND=y
   1.310  # CONFIG_XEN_PCIDEV_BACKEND_VPCI is not set
   1.311  CONFIG_XEN_PCIDEV_BACKEND_PASS=y
   1.312  # CONFIG_XEN_PCIDEV_BACKEND_SLOT is not set
   1.313  # CONFIG_XEN_PCIDEV_BE_DEBUG is not set
   1.314 -CONFIG_XEN_BLKDEV_BACKEND=y
   1.315 -CONFIG_XEN_BLKDEV_TAP=y
   1.316 -CONFIG_XEN_NETDEV_BACKEND=y
   1.317 -# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
   1.318 -CONFIG_XEN_NETDEV_LOOPBACK=y
   1.319  # CONFIG_XEN_TPMDEV_BACKEND is not set
   1.320  CONFIG_XEN_BLKDEV_FRONTEND=y
   1.321  CONFIG_XEN_NETDEV_FRONTEND=y
   1.322 @@ -1339,7 +1364,13 @@ CONFIG_XEN_COMPAT_030002_AND_LATER=y
   1.323  CONFIG_XEN_COMPAT_030002=y
   1.324  CONFIG_HAVE_ARCH_ALLOC_SKB=y
   1.325  CONFIG_HAVE_ARCH_DEV_ALLOC_SKB=y
   1.326 +CONFIG_HAVE_IRQ_IGNORE_UNHANDLED=y
   1.327  CONFIG_NO_IDLE_HZ=y
   1.328 +CONFIG_XEN_UTIL=y
   1.329 +CONFIG_XEN_BALLOON=y
   1.330 +CONFIG_XEN_DEVMEM=y
   1.331 +CONFIG_XEN_SKBUFF=y
   1.332 +CONFIG_XEN_REBOOT=y
   1.333  
   1.334  #
   1.335  # Library routines
     2.1 --- a/buildconfigs/linux-defconfig_xen0_x86_64	Tue Jan 09 10:50:46 2007 +0000
     2.2 +++ b/buildconfigs/linux-defconfig_xen0_x86_64	Fri Jan 12 14:30:49 2007 +0000
     2.3 @@ -1,7 +1,7 @@
     2.4  #
     2.5  # Automatically generated make config: don't edit
     2.6 -# Linux kernel version: 2.6.16.13-xen0
     2.7 -# Thu May 11 17:17:19 2006
     2.8 +# Linux kernel version: 2.6.17-xen0
     2.9 +# Thu Jan 11 09:46:03 2007
    2.10  #
    2.11  CONFIG_X86_64=y
    2.12  CONFIG_64BIT=y
    2.13 @@ -9,6 +9,7 @@ CONFIG_X86=y
    2.14  CONFIG_SEMAPHORE_SLEEPERS=y
    2.15  CONFIG_MMU=y
    2.16  CONFIG_RWSEM_GENERIC_SPINLOCK=y
    2.17 +CONFIG_GENERIC_HWEIGHT=y
    2.18  CONFIG_GENERIC_CALIBRATE_DELAY=y
    2.19  CONFIG_X86_CMPXCHG=y
    2.20  CONFIG_EARLY_PRINTK=y
    2.21 @@ -36,6 +37,7 @@ CONFIG_SYSVIPC=y
    2.22  CONFIG_SYSCTL=y
    2.23  # CONFIG_AUDIT is not set
    2.24  # CONFIG_IKCONFIG is not set
    2.25 +# CONFIG_RELAY is not set
    2.26  CONFIG_INITRAMFS_SOURCE=""
    2.27  CONFIG_UID16=y
    2.28  CONFIG_VM86=y
    2.29 @@ -52,10 +54,6 @@ CONFIG_BASE_FULL=y
    2.30  CONFIG_FUTEX=y
    2.31  CONFIG_EPOLL=y
    2.32  CONFIG_SHMEM=y
    2.33 -CONFIG_CC_ALIGN_FUNCTIONS=0
    2.34 -CONFIG_CC_ALIGN_LABELS=0
    2.35 -CONFIG_CC_ALIGN_LOOPS=0
    2.36 -CONFIG_CC_ALIGN_JUMPS=0
    2.37  CONFIG_SLAB=y
    2.38  # CONFIG_TINY_SHMEM is not set
    2.39  CONFIG_BASE_SMALL=0
    2.40 @@ -67,7 +65,6 @@ CONFIG_BASE_SMALL=0
    2.41  CONFIG_MODULES=y
    2.42  CONFIG_MODULE_UNLOAD=y
    2.43  # CONFIG_MODULE_FORCE_UNLOAD is not set
    2.44 -CONFIG_OBSOLETE_MODPARM=y
    2.45  # CONFIG_MODVERSIONS is not set
    2.46  # CONFIG_MODULE_SRCVERSION_ALL is not set
    2.47  CONFIG_KMOD=y
    2.48 @@ -76,6 +73,8 @@ CONFIG_KMOD=y
    2.49  # Block layer
    2.50  #
    2.51  # CONFIG_LBD is not set
    2.52 +# CONFIG_BLK_DEV_IO_TRACE is not set
    2.53 +CONFIG_LSF=y
    2.54  
    2.55  #
    2.56  # IO Schedulers
    2.57 @@ -103,6 +102,7 @@ CONFIG_X86_NO_TSS=y
    2.58  CONFIG_X86_NO_IDT=y
    2.59  CONFIG_X86_L1_CACHE_BYTES=128
    2.60  CONFIG_X86_L1_CACHE_SHIFT=7
    2.61 +CONFIG_X86_INTERNODE_CACHE_BYTES=128
    2.62  CONFIG_X86_GOOD_APIC=y
    2.63  CONFIG_MICROCODE=y
    2.64  # CONFIG_X86_MSR is not set
    2.65 @@ -115,7 +115,6 @@ CONFIG_MTRR=y
    2.66  CONFIG_PREEMPT_NONE=y
    2.67  # CONFIG_PREEMPT_VOLUNTARY is not set
    2.68  # CONFIG_PREEMPT is not set
    2.69 -CONFIG_ARCH_SPARSEMEM_ENABLE=y
    2.70  CONFIG_ARCH_FLATMEM_ENABLE=y
    2.71  CONFIG_SELECT_MEMORY_MODEL=y
    2.72  CONFIG_FLATMEM_MANUAL=y
    2.73 @@ -128,12 +127,13 @@ CONFIG_SPLIT_PTLOCK_CPUS=4096
    2.74  CONFIG_SWIOTLB=y
    2.75  CONFIG_KEXEC=y
    2.76  # CONFIG_CRASH_DUMP is not set
    2.77 -CONFIG_PHYSICAL_START=0x100000
    2.78 +CONFIG_PHYSICAL_START=0x200000
    2.79  CONFIG_SECCOMP=y
    2.80  CONFIG_HZ_100=y
    2.81  # CONFIG_HZ_250 is not set
    2.82  # CONFIG_HZ_1000 is not set
    2.83  CONFIG_HZ=100
    2.84 +# CONFIG_REORDER is not set
    2.85  CONFIG_GENERIC_HARDIRQS=y
    2.86  CONFIG_GENERIC_IRQ_PROBE=y
    2.87  CONFIG_ISA_DMA_API=y
    2.88 @@ -157,6 +157,7 @@ CONFIG_ACPI_PROCESSOR=m
    2.89  CONFIG_ACPI_THERMAL=m
    2.90  CONFIG_ACPI_ASUS=m
    2.91  CONFIG_ACPI_IBM=m
    2.92 +# CONFIG_ACPI_IBM_DOCK is not set
    2.93  CONFIG_ACPI_TOSHIBA=m
    2.94  CONFIG_ACPI_BLACKLIST_YEAR=0
    2.95  # CONFIG_ACPI_DEBUG is not set
    2.96 @@ -164,6 +165,7 @@ CONFIG_ACPI_EC=y
    2.97  CONFIG_ACPI_POWER=y
    2.98  CONFIG_ACPI_SYSTEM=y
    2.99  # CONFIG_ACPI_CONTAINER is not set
   2.100 +CONFIG_ACPI_HOTPLUG_MEMORY=m
   2.101  
   2.102  #
   2.103  # CPU Frequency scaling
   2.104 @@ -178,9 +180,7 @@ CONFIG_PCI_DIRECT=y
   2.105  # CONFIG_PCI_MMCONFIG is not set
   2.106  CONFIG_XEN_PCIDEV_FRONTEND=y
   2.107  # CONFIG_XEN_PCIDEV_FE_DEBUG is not set
   2.108 -# CONFIG_UNORDERED_IO is not set
   2.109  # CONFIG_PCIEPORTBUS is not set
   2.110 -CONFIG_PCI_LEGACY_PROC=y
   2.111  # CONFIG_PCI_DEBUG is not set
   2.112  
   2.113  #
   2.114 @@ -231,6 +231,7 @@ CONFIG_IP_PNP_DHCP=y
   2.115  # CONFIG_INET_AH is not set
   2.116  # CONFIG_INET_ESP is not set
   2.117  # CONFIG_INET_IPCOMP is not set
   2.118 +# CONFIG_INET_XFRM_TUNNEL is not set
   2.119  # CONFIG_INET_TUNNEL is not set
   2.120  # CONFIG_INET_DIAG is not set
   2.121  # CONFIG_TCP_CONG_ADVANCED is not set
   2.122 @@ -241,6 +242,8 @@ CONFIG_TCP_CONG_BIC=y
   2.123  #
   2.124  # CONFIG_IP_VS is not set
   2.125  # CONFIG_IPV6 is not set
   2.126 +# CONFIG_INET6_XFRM_TUNNEL is not set
   2.127 +# CONFIG_INET6_TUNNEL is not set
   2.128  CONFIG_NETFILTER=y
   2.129  # CONFIG_NETFILTER_DEBUG is not set
   2.130  CONFIG_BRIDGE_NETFILTER=y
   2.131 @@ -265,6 +268,7 @@ CONFIG_IP_NF_FTP=m
   2.132  # CONFIG_IP_NF_TFTP is not set
   2.133  # CONFIG_IP_NF_AMANDA is not set
   2.134  # CONFIG_IP_NF_PPTP is not set
   2.135 +# CONFIG_IP_NF_H323 is not set
   2.136  # CONFIG_IP_NF_QUEUE is not set
   2.137  
   2.138  #
   2.139 @@ -290,6 +294,7 @@ CONFIG_IP_NF_FTP=m
   2.140  CONFIG_BRIDGE=y
   2.141  # CONFIG_VLAN_8021Q is not set
   2.142  # CONFIG_DECNET is not set
   2.143 +CONFIG_LLC=y
   2.144  # CONFIG_LLC2 is not set
   2.145  # CONFIG_IPX is not set
   2.146  # CONFIG_ATALK is not set
   2.147 @@ -525,7 +530,6 @@ CONFIG_SCSI_BUSLOGIC=y
   2.148  # CONFIG_SCSI_INIA100 is not set
   2.149  # CONFIG_SCSI_SYM53C8XX_2 is not set
   2.150  # CONFIG_SCSI_IPR is not set
   2.151 -# CONFIG_SCSI_QLOGIC_FC is not set
   2.152  # CONFIG_SCSI_QLOGIC_1280 is not set
   2.153  # CONFIG_SCSI_QLA_FC is not set
   2.154  # CONFIG_SCSI_LPFC is not set
   2.155 @@ -795,6 +799,8 @@ CONFIG_RTC=y
   2.156  CONFIG_AGP=m
   2.157  CONFIG_AGP_AMD64=m
   2.158  # CONFIG_AGP_INTEL is not set
   2.159 +CONFIG_AGP_SIS=m
   2.160 +CONFIG_AGP_VIA=m
   2.161  CONFIG_DRM=m
   2.162  CONFIG_DRM_TDFX=m
   2.163  CONFIG_DRM_R128=m
   2.164 @@ -842,18 +848,16 @@ CONFIG_DRM_SIS=m
   2.165  # CONFIG_IBM_ASM is not set
   2.166  
   2.167  #
   2.168 -# Multimedia Capabilities Port drivers
   2.169 -#
   2.170 -
   2.171 -#
   2.172  # Multimedia devices
   2.173  #
   2.174  # CONFIG_VIDEO_DEV is not set
   2.175 +CONFIG_VIDEO_V4L2=y
   2.176  
   2.177  #
   2.178  # Digital Video Broadcasting Devices
   2.179  #
   2.180  # CONFIG_DVB is not set
   2.181 +# CONFIG_USB_DABUSB is not set
   2.182  
   2.183  #
   2.184  # Graphics support
   2.185 @@ -865,6 +869,7 @@ CONFIG_DRM_SIS=m
   2.186  # Console display driver support
   2.187  #
   2.188  CONFIG_VGA_CONSOLE=y
   2.189 +# CONFIG_VGACON_SOFT_SCROLLBACK is not set
   2.190  CONFIG_DUMMY_CONSOLE=y
   2.191  
   2.192  #
   2.193 @@ -877,6 +882,7 @@ CONFIG_DUMMY_CONSOLE=y
   2.194  #
   2.195  CONFIG_USB_ARCH_HAS_HCD=y
   2.196  CONFIG_USB_ARCH_HAS_OHCI=y
   2.197 +CONFIG_USB_ARCH_HAS_EHCI=y
   2.198  CONFIG_USB=y
   2.199  # CONFIG_USB_DEBUG is not set
   2.200  
   2.201 @@ -929,9 +935,7 @@ CONFIG_USB_HIDINPUT=y
   2.202  # CONFIG_USB_ACECAD is not set
   2.203  # CONFIG_USB_KBTAB is not set
   2.204  # CONFIG_USB_POWERMATE is not set
   2.205 -# CONFIG_USB_MTOUCH is not set
   2.206 -# CONFIG_USB_ITMTOUCH is not set
   2.207 -# CONFIG_USB_EGALAX is not set
   2.208 +# CONFIG_USB_TOUCHSCREEN is not set
   2.209  # CONFIG_USB_YEALINK is not set
   2.210  # CONFIG_USB_XPAD is not set
   2.211  # CONFIG_USB_ATI_REMOTE is not set
   2.212 @@ -946,15 +950,6 @@ CONFIG_USB_HIDINPUT=y
   2.213  # CONFIG_USB_MICROTEK is not set
   2.214  
   2.215  #
   2.216 -# USB Multimedia devices
   2.217 -#
   2.218 -# CONFIG_USB_DABUSB is not set
   2.219 -
   2.220 -#
   2.221 -# Video4Linux support is needed for USB Multimedia device support
   2.222 -#
   2.223 -
   2.224 -#
   2.225  # USB Network Adapters
   2.226  #
   2.227  # CONFIG_USB_CATC is not set
   2.228 @@ -1004,6 +999,23 @@ CONFIG_USB_MON=y
   2.229  # CONFIG_MMC is not set
   2.230  
   2.231  #
   2.232 +# LED devices
   2.233 +#
   2.234 +CONFIG_NEW_LEDS=y
   2.235 +CONFIG_LEDS_CLASS=m
   2.236 +
   2.237 +#
   2.238 +# LED drivers
   2.239 +#
   2.240 +
   2.241 +#
   2.242 +# LED Triggers
   2.243 +#
   2.244 +CONFIG_LEDS_TRIGGERS=y
   2.245 +CONFIG_LEDS_TRIGGER_TIMER=y
   2.246 +CONFIG_LEDS_TRIGGER_IDE_DISK=y
   2.247 +
   2.248 +#
   2.249  # InfiniBand support
   2.250  #
   2.251  CONFIG_INFINIBAND=y
   2.252 @@ -1022,6 +1034,25 @@ CONFIG_INFINIBAND_SRP=y
   2.253  # CONFIG_EDAC is not set
   2.254  
   2.255  #
   2.256 +# Real Time Clock
   2.257 +#
   2.258 +CONFIG_RTC_LIB=m
   2.259 +CONFIG_RTC_CLASS=m
   2.260 +
   2.261 +#
   2.262 +# RTC interfaces
   2.263 +#
   2.264 +CONFIG_RTC_INTF_SYSFS=m
   2.265 +CONFIG_RTC_INTF_PROC=m
   2.266 +CONFIG_RTC_INTF_DEV=m
   2.267 +
   2.268 +#
   2.269 +# RTC drivers
   2.270 +#
   2.271 +CONFIG_RTC_DRV_M48T86=m
   2.272 +CONFIG_RTC_DRV_TEST=m
   2.273 +
   2.274 +#
   2.275  # Firmware Drivers
   2.276  #
   2.277  # CONFIG_DELL_RBU is not set
   2.278 @@ -1085,7 +1116,6 @@ CONFIG_SYSFS=y
   2.279  CONFIG_TMPFS=y
   2.280  # CONFIG_HUGETLB_PAGE is not set
   2.281  CONFIG_RAMFS=y
   2.282 -# CONFIG_RELAYFS_FS is not set
   2.283  # CONFIG_CONFIGFS_FS is not set
   2.284  
   2.285  #
   2.286 @@ -1207,6 +1237,7 @@ CONFIG_DETECT_SOFTLOCKUP=y
   2.287  # CONFIG_DEBUG_FS is not set
   2.288  # CONFIG_DEBUG_VM is not set
   2.289  CONFIG_FRAME_POINTER=y
   2.290 +# CONFIG_UNWIND_INFO is not set
   2.291  CONFIG_FORCED_INLINING=y
   2.292  # CONFIG_RCU_TORTURE_TEST is not set
   2.293  # CONFIG_DEBUG_RODATA is not set
   2.294 @@ -1251,24 +1282,26 @@ CONFIG_CRYPTO_CRC32C=m
   2.295  # Hardware crypto devices
   2.296  #
   2.297  CONFIG_XEN=y
   2.298 -CONFIG_XEN_INTERFACE_VERSION=0x00030202
   2.299 +CONFIG_XEN_INTERFACE_VERSION=0x00030203
   2.300  
   2.301  #
   2.302  # XEN
   2.303  #
   2.304  CONFIG_XEN_PRIVILEGED_GUEST=y
   2.305  # CONFIG_XEN_UNPRIVILEGED_GUEST is not set
   2.306 +CONFIG_XEN_PRIVCMD=y
   2.307 +CONFIG_XEN_XENBUS_DEV=y
   2.308  CONFIG_XEN_BACKEND=y
   2.309 +CONFIG_XEN_BLKDEV_BACKEND=y
   2.310 +CONFIG_XEN_BLKDEV_TAP=y
   2.311 +CONFIG_XEN_NETDEV_BACKEND=y
   2.312 +# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
   2.313 +CONFIG_XEN_NETDEV_LOOPBACK=y
   2.314  CONFIG_XEN_PCIDEV_BACKEND=y
   2.315  # CONFIG_XEN_PCIDEV_BACKEND_VPCI is not set
   2.316  CONFIG_XEN_PCIDEV_BACKEND_PASS=y
   2.317  # CONFIG_XEN_PCIDEV_BACKEND_SLOT is not set
   2.318  # CONFIG_XEN_PCIDEV_BE_DEBUG is not set
   2.319 -CONFIG_XEN_BLKDEV_BACKEND=y
   2.320 -CONFIG_XEN_BLKDEV_TAP=y
   2.321 -CONFIG_XEN_NETDEV_BACKEND=y
   2.322 -# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
   2.323 -CONFIG_XEN_NETDEV_LOOPBACK=y
   2.324  # CONFIG_XEN_TPMDEV_BACKEND is not set
   2.325  CONFIG_XEN_BLKDEV_FRONTEND=y
   2.326  CONFIG_XEN_NETDEV_FRONTEND=y
   2.327 @@ -1280,7 +1313,13 @@ CONFIG_XEN_COMPAT_030002_AND_LATER=y
   2.328  CONFIG_XEN_COMPAT_030002=y
   2.329  CONFIG_HAVE_ARCH_ALLOC_SKB=y
   2.330  CONFIG_HAVE_ARCH_DEV_ALLOC_SKB=y
   2.331 +CONFIG_HAVE_IRQ_IGNORE_UNHANDLED=y
   2.332  CONFIG_NO_IDLE_HZ=y
   2.333 +CONFIG_XEN_UTIL=y
   2.334 +CONFIG_XEN_BALLOON=y
   2.335 +CONFIG_XEN_DEVMEM=y
   2.336 +CONFIG_XEN_SKBUFF=y
   2.337 +CONFIG_XEN_REBOOT=y
   2.338  
   2.339  #
   2.340  # Library routines
     3.1 --- a/buildconfigs/linux-defconfig_xenU_x86_32	Tue Jan 09 10:50:46 2007 +0000
     3.2 +++ b/buildconfigs/linux-defconfig_xenU_x86_32	Fri Jan 12 14:30:49 2007 +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.16.13-xenU
     3.7 -# Thu May 11 17:08:12 2006
     3.8 +# Linux kernel version: 2.6.17-xenU
     3.9 +# Thu Jan 11 10:26:13 2007
    3.10  #
    3.11  CONFIG_X86_32=y
    3.12  CONFIG_SEMAPHORE_SLEEPERS=y
    3.13 @@ -9,6 +9,7 @@ CONFIG_X86=y
    3.14  CONFIG_MMU=y
    3.15  CONFIG_GENERIC_ISA_DMA=y
    3.16  CONFIG_GENERIC_IOMAP=y
    3.17 +CONFIG_GENERIC_HWEIGHT=y
    3.18  CONFIG_ARCH_MAY_HAVE_PC_FDC=y
    3.19  CONFIG_DMI=y
    3.20  
    3.21 @@ -32,6 +33,7 @@ CONFIG_SYSCTL=y
    3.22  # CONFIG_AUDIT is not set
    3.23  # CONFIG_IKCONFIG is not set
    3.24  # CONFIG_CPUSETS is not set
    3.25 +# CONFIG_RELAY is not set
    3.26  CONFIG_INITRAMFS_SOURCE=""
    3.27  CONFIG_UID16=y
    3.28  CONFIG_VM86=y
    3.29 @@ -48,10 +50,6 @@ CONFIG_BASE_FULL=y
    3.30  CONFIG_FUTEX=y
    3.31  CONFIG_EPOLL=y
    3.32  CONFIG_SHMEM=y
    3.33 -CONFIG_CC_ALIGN_FUNCTIONS=0
    3.34 -CONFIG_CC_ALIGN_LABELS=0
    3.35 -CONFIG_CC_ALIGN_LOOPS=0
    3.36 -CONFIG_CC_ALIGN_JUMPS=0
    3.37  CONFIG_SLAB=y
    3.38  # CONFIG_TINY_SHMEM is not set
    3.39  CONFIG_BASE_SMALL=0
    3.40 @@ -63,7 +61,6 @@ CONFIG_BASE_SMALL=0
    3.41  CONFIG_MODULES=y
    3.42  CONFIG_MODULE_UNLOAD=y
    3.43  # CONFIG_MODULE_FORCE_UNLOAD is not set
    3.44 -CONFIG_OBSOLETE_MODPARM=y
    3.45  # CONFIG_MODVERSIONS is not set
    3.46  # CONFIG_MODULE_SRCVERSION_ALL is not set
    3.47  CONFIG_KMOD=y
    3.48 @@ -73,6 +70,8 @@ CONFIG_STOP_MACHINE=y
    3.49  # Block layer
    3.50  #
    3.51  # CONFIG_LBD is not set
    3.52 +# CONFIG_BLK_DEV_IO_TRACE is not set
    3.53 +CONFIG_LSF=y
    3.54  
    3.55  #
    3.56  # IO Schedulers
    3.57 @@ -90,6 +89,7 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
    3.58  #
    3.59  # Processor type and features
    3.60  #
    3.61 +CONFIG_SMP=y
    3.62  # CONFIG_X86_PC is not set
    3.63  CONFIG_X86_XEN=y
    3.64  # CONFIG_X86_ELAN is not set
    3.65 @@ -137,9 +137,8 @@ CONFIG_X86_CMPXCHG64=y
    3.66  CONFIG_X86_GOOD_APIC=y
    3.67  CONFIG_X86_USE_PPRO_CHECKSUM=y
    3.68  CONFIG_X86_TSC=y
    3.69 -CONFIG_SMP=y
    3.70 -CONFIG_SMP_ALTERNATIVES=y
    3.71  CONFIG_NR_CPUS=8
    3.72 +# CONFIG_SCHED_MC is not set
    3.73  CONFIG_PREEMPT_NONE=y
    3.74  # CONFIG_PREEMPT_VOLUNTARY is not set
    3.75  # CONFIG_PREEMPT is not set
    3.76 @@ -158,10 +157,6 @@ CONFIG_SWIOTLB=y
    3.77  # CONFIG_NOHIGHMEM is not set
    3.78  CONFIG_HIGHMEM4G=y
    3.79  # CONFIG_HIGHMEM64G is not set
    3.80 -CONFIG_VMSPLIT_3G=y
    3.81 -# CONFIG_VMSPLIT_3G_OPT is not set
    3.82 -# CONFIG_VMSPLIT_2G is not set
    3.83 -# CONFIG_VMSPLIT_1G is not set
    3.84  CONFIG_PAGE_OFFSET=0xC0000000
    3.85  CONFIG_HIGHMEM=y
    3.86  CONFIG_SELECT_MEMORY_MODEL=y
    3.87 @@ -233,11 +228,14 @@ CONFIG_IP_PNP=y
    3.88  # CONFIG_INET_AH is not set
    3.89  # CONFIG_INET_ESP is not set
    3.90  # CONFIG_INET_IPCOMP is not set
    3.91 +# CONFIG_INET_XFRM_TUNNEL is not set
    3.92  # CONFIG_INET_TUNNEL is not set
    3.93  # CONFIG_INET_DIAG is not set
    3.94  # CONFIG_TCP_CONG_ADVANCED is not set
    3.95  CONFIG_TCP_CONG_BIC=y
    3.96  # CONFIG_IPV6 is not set
    3.97 +# CONFIG_INET6_XFRM_TUNNEL is not set
    3.98 +# CONFIG_INET6_TUNNEL is not set
    3.99  # CONFIG_NETFILTER is not set
   3.100  
   3.101  #
   3.102 @@ -562,13 +560,10 @@ CONFIG_LEGACY_PTY_COUNT=256
   3.103  #
   3.104  
   3.105  #
   3.106 -# Multimedia Capabilities Port drivers
   3.107 -#
   3.108 -
   3.109 -#
   3.110  # Multimedia devices
   3.111  #
   3.112  # CONFIG_VIDEO_DEV is not set
   3.113 +CONFIG_VIDEO_V4L2=y
   3.114  
   3.115  #
   3.116  # Digital Video Broadcasting Devices
   3.117 @@ -585,6 +580,7 @@ CONFIG_LEGACY_PTY_COUNT=256
   3.118  # Console display driver support
   3.119  #
   3.120  CONFIG_VGA_CONSOLE=y
   3.121 +# CONFIG_VGACON_SOFT_SCROLLBACK is not set
   3.122  CONFIG_DUMMY_CONSOLE=y
   3.123  
   3.124  #
   3.125 @@ -597,6 +593,7 @@ CONFIG_DUMMY_CONSOLE=y
   3.126  #
   3.127  # CONFIG_USB_ARCH_HAS_HCD is not set
   3.128  # CONFIG_USB_ARCH_HAS_OHCI is not set
   3.129 +# CONFIG_USB_ARCH_HAS_EHCI is not set
   3.130  
   3.131  #
   3.132  # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
   3.133 @@ -613,6 +610,19 @@ CONFIG_DUMMY_CONSOLE=y
   3.134  # CONFIG_MMC is not set
   3.135  
   3.136  #
   3.137 +# LED devices
   3.138 +#
   3.139 +# CONFIG_NEW_LEDS is not set
   3.140 +
   3.141 +#
   3.142 +# LED drivers
   3.143 +#
   3.144 +
   3.145 +#
   3.146 +# LED Triggers
   3.147 +#
   3.148 +
   3.149 +#
   3.150  # InfiniBand support
   3.151  #
   3.152  
   3.153 @@ -622,6 +632,11 @@ CONFIG_DUMMY_CONSOLE=y
   3.154  # CONFIG_EDAC is not set
   3.155  
   3.156  #
   3.157 +# Real Time Clock
   3.158 +#
   3.159 +# CONFIG_RTC_CLASS is not set
   3.160 +
   3.161 +#
   3.162  # File systems
   3.163  #
   3.164  CONFIG_EXT2_FS=y
   3.165 @@ -679,7 +694,6 @@ CONFIG_SYSFS=y
   3.166  CONFIG_TMPFS=y
   3.167  # CONFIG_HUGETLB_PAGE is not set
   3.168  CONFIG_RAMFS=y
   3.169 -# CONFIG_RELAYFS_FS is not set
   3.170  # CONFIG_CONFIGFS_FS is not set
   3.171  
   3.172  #
   3.173 @@ -798,11 +812,13 @@ CONFIG_DEBUG_BUGVERBOSE=y
   3.174  # CONFIG_DEBUG_FS is not set
   3.175  # CONFIG_DEBUG_VM is not set
   3.176  CONFIG_FRAME_POINTER=y
   3.177 +# CONFIG_UNWIND_INFO is not set
   3.178  CONFIG_FORCED_INLINING=y
   3.179  # CONFIG_RCU_TORTURE_TEST is not set
   3.180  CONFIG_EARLY_PRINTK=y
   3.181  # CONFIG_DEBUG_STACKOVERFLOW is not set
   3.182  # CONFIG_DEBUG_STACK_USAGE is not set
   3.183 +CONFIG_STACK_BACKTRACE_COLS=2
   3.184  # CONFIG_DEBUG_PAGEALLOC is not set
   3.185  # CONFIG_DEBUG_RODATA is not set
   3.186  # CONFIG_4KSTACKS is not set
   3.187 @@ -848,13 +864,15 @@ CONFIG_CRYPTO_CRC32C=m
   3.188  #
   3.189  # CONFIG_CRYPTO_DEV_PADLOCK is not set
   3.190  CONFIG_XEN=y
   3.191 -CONFIG_XEN_INTERFACE_VERSION=0x00030202
   3.192 +CONFIG_XEN_INTERFACE_VERSION=0x00030203
   3.193  
   3.194  #
   3.195  # XEN
   3.196  #
   3.197  # CONFIG_XEN_PRIVILEGED_GUEST is not set
   3.198  CONFIG_XEN_UNPRIVILEGED_GUEST=y
   3.199 +CONFIG_XEN_PRIVCMD=y
   3.200 +CONFIG_XEN_XENBUS_DEV=y
   3.201  # CONFIG_XEN_BACKEND is not set
   3.202  CONFIG_XEN_BLKDEV_FRONTEND=y
   3.203  CONFIG_XEN_NETDEV_FRONTEND=y
   3.204 @@ -866,7 +884,14 @@ CONFIG_XEN_COMPAT_030002_AND_LATER=y
   3.205  CONFIG_XEN_COMPAT_030002=y
   3.206  CONFIG_HAVE_ARCH_ALLOC_SKB=y
   3.207  CONFIG_HAVE_ARCH_DEV_ALLOC_SKB=y
   3.208 +CONFIG_HAVE_IRQ_IGNORE_UNHANDLED=y
   3.209  CONFIG_NO_IDLE_HZ=y
   3.210 +CONFIG_XEN_UTIL=y
   3.211 +CONFIG_XEN_BALLOON=y
   3.212 +CONFIG_XEN_DEVMEM=y
   3.213 +CONFIG_XEN_SKBUFF=y
   3.214 +CONFIG_XEN_REBOOT=y
   3.215 +CONFIG_XEN_SMPBOOT=y
   3.216  
   3.217  #
   3.218  # Library routines
     4.1 --- a/buildconfigs/linux-defconfig_xenU_x86_64	Tue Jan 09 10:50:46 2007 +0000
     4.2 +++ b/buildconfigs/linux-defconfig_xenU_x86_64	Fri Jan 12 14:30:49 2007 +0000
     4.3 @@ -1,7 +1,7 @@
     4.4  #
     4.5  # Automatically generated make config: don't edit
     4.6 -# Linux kernel version: 2.6.16.13-xenU
     4.7 -# Thu May 11 17:17:57 2006
     4.8 +# Linux kernel version: 2.6.17-xenU
     4.9 +# Thu Jan 11 10:17:30 2007
    4.10  #
    4.11  CONFIG_X86_64=y
    4.12  CONFIG_64BIT=y
    4.13 @@ -9,6 +9,7 @@ CONFIG_X86=y
    4.14  CONFIG_SEMAPHORE_SLEEPERS=y
    4.15  CONFIG_MMU=y
    4.16  CONFIG_RWSEM_GENERIC_SPINLOCK=y
    4.17 +CONFIG_GENERIC_HWEIGHT=y
    4.18  CONFIG_GENERIC_CALIBRATE_DELAY=y
    4.19  CONFIG_X86_CMPXCHG=y
    4.20  CONFIG_EARLY_PRINTK=y
    4.21 @@ -39,6 +40,7 @@ CONFIG_AUDIT=y
    4.22  CONFIG_AUDITSYSCALL=y
    4.23  # CONFIG_IKCONFIG is not set
    4.24  # CONFIG_CPUSETS is not set
    4.25 +# CONFIG_RELAY is not set
    4.26  CONFIG_INITRAMFS_SOURCE=""
    4.27  CONFIG_UID16=y
    4.28  CONFIG_VM86=y
    4.29 @@ -55,10 +57,6 @@ CONFIG_BASE_FULL=y
    4.30  CONFIG_FUTEX=y
    4.31  CONFIG_EPOLL=y
    4.32  CONFIG_SHMEM=y
    4.33 -CONFIG_CC_ALIGN_FUNCTIONS=0
    4.34 -CONFIG_CC_ALIGN_LABELS=0
    4.35 -CONFIG_CC_ALIGN_LOOPS=0
    4.36 -CONFIG_CC_ALIGN_JUMPS=0
    4.37  CONFIG_SLAB=y
    4.38  # CONFIG_TINY_SHMEM is not set
    4.39  CONFIG_BASE_SMALL=0
    4.40 @@ -70,7 +68,6 @@ CONFIG_BASE_SMALL=0
    4.41  CONFIG_MODULES=y
    4.42  CONFIG_MODULE_UNLOAD=y
    4.43  # CONFIG_MODULE_FORCE_UNLOAD is not set
    4.44 -CONFIG_OBSOLETE_MODPARM=y
    4.45  CONFIG_MODVERSIONS=y
    4.46  # CONFIG_MODULE_SRCVERSION_ALL is not set
    4.47  CONFIG_KMOD=y
    4.48 @@ -80,6 +77,8 @@ CONFIG_STOP_MACHINE=y
    4.49  # Block layer
    4.50  #
    4.51  CONFIG_LBD=y
    4.52 +# CONFIG_BLK_DEV_IO_TRACE is not set
    4.53 +CONFIG_LSF=y
    4.54  
    4.55  #
    4.56  # IO Schedulers
    4.57 @@ -107,17 +106,18 @@ CONFIG_X86_NO_TSS=y
    4.58  CONFIG_X86_NO_IDT=y
    4.59  CONFIG_X86_L1_CACHE_BYTES=128
    4.60  CONFIG_X86_L1_CACHE_SHIFT=7
    4.61 +CONFIG_X86_INTERNODE_CACHE_BYTES=128
    4.62  CONFIG_X86_GOOD_APIC=y
    4.63  # CONFIG_MICROCODE is not set
    4.64  # CONFIG_X86_MSR is not set
    4.65  CONFIG_X86_CPUID=y
    4.66  CONFIG_X86_XEN_GENAPIC=y
    4.67  CONFIG_SMP=y
    4.68 +# CONFIG_SCHED_MC is not set
    4.69  CONFIG_PREEMPT_NONE=y
    4.70  # CONFIG_PREEMPT_VOLUNTARY is not set
    4.71  # CONFIG_PREEMPT is not set
    4.72  CONFIG_PREEMPT_BKL=y
    4.73 -CONFIG_ARCH_SPARSEMEM_ENABLE=y
    4.74  CONFIG_ARCH_FLATMEM_ENABLE=y
    4.75  CONFIG_SELECT_MEMORY_MODEL=y
    4.76  CONFIG_FLATMEM_MANUAL=y
    4.77 @@ -131,12 +131,13 @@ CONFIG_NR_CPUS=8
    4.78  CONFIG_HOTPLUG_CPU=y
    4.79  CONFIG_SWIOTLB=y
    4.80  # CONFIG_CRASH_DUMP is not set
    4.81 -CONFIG_PHYSICAL_START=0x100000
    4.82 +CONFIG_PHYSICAL_START=0x200000
    4.83  CONFIG_SECCOMP=y
    4.84  CONFIG_HZ_100=y
    4.85  # CONFIG_HZ_250 is not set
    4.86  # CONFIG_HZ_1000 is not set
    4.87  CONFIG_HZ=100
    4.88 +# CONFIG_REORDER is not set
    4.89  CONFIG_GENERIC_HARDIRQS=y
    4.90  CONFIG_GENERIC_IRQ_PROBE=y
    4.91  CONFIG_ISA_DMA_API=y
    4.92 @@ -146,7 +147,6 @@ CONFIG_GENERIC_PENDING_IRQ=y
    4.93  # Bus options (PCI etc.)
    4.94  #
    4.95  # CONFIG_PCI is not set
    4.96 -# CONFIG_UNORDERED_IO is not set
    4.97  
    4.98  #
    4.99  # PCCARD (PCMCIA/CardBus) support
   4.100 @@ -208,6 +208,7 @@ CONFIG_SYN_COOKIES=y
   4.101  CONFIG_INET_AH=m
   4.102  CONFIG_INET_ESP=m
   4.103  CONFIG_INET_IPCOMP=m
   4.104 +CONFIG_INET_XFRM_TUNNEL=m
   4.105  CONFIG_INET_TUNNEL=m
   4.106  # CONFIG_INET_DIAG is not set
   4.107  # CONFIG_TCP_CONG_ADVANCED is not set
   4.108 @@ -248,9 +249,11 @@ CONFIG_IP_VS_NQ=m
   4.109  CONFIG_IP_VS_FTP=m
   4.110  CONFIG_IPV6=m
   4.111  CONFIG_IPV6_PRIVACY=y
   4.112 +# CONFIG_IPV6_ROUTER_PREF is not set
   4.113  CONFIG_INET6_AH=m
   4.114  CONFIG_INET6_ESP=m
   4.115  CONFIG_INET6_IPCOMP=m
   4.116 +CONFIG_INET6_XFRM_TUNNEL=m
   4.117  CONFIG_INET6_TUNNEL=m
   4.118  CONFIG_IPV6_TUNNEL=m
   4.119  CONFIG_NETFILTER=y
   4.120 @@ -277,6 +280,7 @@ CONFIG_IP_NF_IRC=m
   4.121  CONFIG_IP_NF_TFTP=m
   4.122  CONFIG_IP_NF_AMANDA=m
   4.123  # CONFIG_IP_NF_PPTP is not set
   4.124 +# CONFIG_IP_NF_H323 is not set
   4.125  CONFIG_IP_NF_QUEUE=m
   4.126  
   4.127  #
   4.128 @@ -435,6 +439,7 @@ CONFIG_DONGLE=y
   4.129  CONFIG_ESI_DONGLE=m
   4.130  CONFIG_ACTISYS_DONGLE=m
   4.131  CONFIG_TEKRAM_DONGLE=m
   4.132 +# CONFIG_TOIM3232_DONGLE is not set
   4.133  CONFIG_LITELINK_DONGLE=m
   4.134  CONFIG_MA600_DONGLE=m
   4.135  CONFIG_GIRBIL_DONGLE=m
   4.136 @@ -476,6 +481,7 @@ CONFIG_BT_HCIUART_H4=y
   4.137  CONFIG_BT_HCIUART_BCSP=y
   4.138  CONFIG_BT_HCIVHCI=m
   4.139  # CONFIG_IEEE80211 is not set
   4.140 +CONFIG_WIRELESS_EXT=y
   4.141  
   4.142  #
   4.143  # Device Drivers
   4.144 @@ -578,6 +584,7 @@ CONFIG_MD_RAID0=m
   4.145  CONFIG_MD_RAID1=m
   4.146  CONFIG_MD_RAID10=m
   4.147  CONFIG_MD_RAID5=m
   4.148 +# CONFIG_MD_RAID5_RESHAPE is not set
   4.149  CONFIG_MD_RAID6=m
   4.150  CONFIG_MD_MULTIPATH=m
   4.151  # CONFIG_MD_FAULTY is not set
   4.152 @@ -637,12 +644,12 @@ CONFIG_MII=m
   4.153  # Wireless LAN (non-hamradio)
   4.154  #
   4.155  CONFIG_NET_RADIO=y
   4.156 +# CONFIG_NET_WIRELESS_RTNETLINK is not set
   4.157  
   4.158  #
   4.159  # Obsolete Wireless cards support (pre-802.11)
   4.160  #
   4.161  # CONFIG_STRIP is not set
   4.162 -CONFIG_ATMEL=m
   4.163  # CONFIG_HOSTAP is not set
   4.164  
   4.165  #
   4.166 @@ -800,13 +807,10 @@ CONFIG_LEGACY_PTY_COUNT=256
   4.167  #
   4.168  
   4.169  #
   4.170 -# Multimedia Capabilities Port drivers
   4.171 -#
   4.172 -
   4.173 -#
   4.174  # Multimedia devices
   4.175  #
   4.176  # CONFIG_VIDEO_DEV is not set
   4.177 +CONFIG_VIDEO_V4L2=y
   4.178  
   4.179  #
   4.180  # Digital Video Broadcasting Devices
   4.181 @@ -823,6 +827,7 @@ CONFIG_LEGACY_PTY_COUNT=256
   4.182  # Console display driver support
   4.183  #
   4.184  CONFIG_VGA_CONSOLE=y
   4.185 +# CONFIG_VGACON_SOFT_SCROLLBACK is not set
   4.186  CONFIG_DUMMY_CONSOLE=y
   4.187  
   4.188  #
   4.189 @@ -835,6 +840,7 @@ CONFIG_DUMMY_CONSOLE=y
   4.190  #
   4.191  # CONFIG_USB_ARCH_HAS_HCD is not set
   4.192  # CONFIG_USB_ARCH_HAS_OHCI is not set
   4.193 +# CONFIG_USB_ARCH_HAS_EHCI is not set
   4.194  
   4.195  #
   4.196  # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
   4.197 @@ -851,6 +857,19 @@ CONFIG_DUMMY_CONSOLE=y
   4.198  # CONFIG_MMC is not set
   4.199  
   4.200  #
   4.201 +# LED devices
   4.202 +#
   4.203 +# CONFIG_NEW_LEDS is not set
   4.204 +
   4.205 +#
   4.206 +# LED drivers
   4.207 +#
   4.208 +
   4.209 +#
   4.210 +# LED Triggers
   4.211 +#
   4.212 +
   4.213 +#
   4.214  # InfiniBand support
   4.215  #
   4.216  
   4.217 @@ -860,6 +879,11 @@ CONFIG_DUMMY_CONSOLE=y
   4.218  # CONFIG_EDAC is not set
   4.219  
   4.220  #
   4.221 +# Real Time Clock
   4.222 +#
   4.223 +# CONFIG_RTC_CLASS is not set
   4.224 +
   4.225 +#
   4.226  # Firmware Drivers
   4.227  #
   4.228  # CONFIG_DELL_RBU is not set
   4.229 @@ -940,7 +964,6 @@ CONFIG_SYSFS=y
   4.230  CONFIG_TMPFS=y
   4.231  # CONFIG_HUGETLB_PAGE is not set
   4.232  CONFIG_RAMFS=y
   4.233 -# CONFIG_RELAYFS_FS is not set
   4.234  # CONFIG_CONFIGFS_FS is not set
   4.235  
   4.236  #
   4.237 @@ -1091,6 +1114,7 @@ CONFIG_DETECT_SOFTLOCKUP=y
   4.238  # CONFIG_DEBUG_FS is not set
   4.239  # CONFIG_DEBUG_VM is not set
   4.240  CONFIG_FRAME_POINTER=y
   4.241 +# CONFIG_UNWIND_INFO is not set
   4.242  CONFIG_FORCED_INLINING=y
   4.243  # CONFIG_RCU_TORTURE_TEST is not set
   4.244  # CONFIG_DEBUG_RODATA is not set
   4.245 @@ -1135,13 +1159,15 @@ CONFIG_CRYPTO_CRC32C=m
   4.246  # Hardware crypto devices
   4.247  #
   4.248  CONFIG_XEN=y
   4.249 -CONFIG_XEN_INTERFACE_VERSION=0x00030202
   4.250 +CONFIG_XEN_INTERFACE_VERSION=0x00030203
   4.251  
   4.252  #
   4.253  # XEN
   4.254  #
   4.255  # CONFIG_XEN_PRIVILEGED_GUEST is not set
   4.256  CONFIG_XEN_UNPRIVILEGED_GUEST=y
   4.257 +CONFIG_XEN_PRIVCMD=y
   4.258 +CONFIG_XEN_XENBUS_DEV=y
   4.259  # CONFIG_XEN_BACKEND is not set
   4.260  CONFIG_XEN_BLKDEV_FRONTEND=y
   4.261  CONFIG_XEN_NETDEV_FRONTEND=y
   4.262 @@ -1153,7 +1179,14 @@ CONFIG_XEN_COMPAT_030002_AND_LATER=y
   4.263  CONFIG_XEN_COMPAT_030002=y
   4.264  CONFIG_HAVE_ARCH_ALLOC_SKB=y
   4.265  CONFIG_HAVE_ARCH_DEV_ALLOC_SKB=y
   4.266 +CONFIG_HAVE_IRQ_IGNORE_UNHANDLED=y
   4.267  CONFIG_NO_IDLE_HZ=y
   4.268 +CONFIG_XEN_UTIL=y
   4.269 +CONFIG_XEN_BALLOON=y
   4.270 +CONFIG_XEN_DEVMEM=y
   4.271 +CONFIG_XEN_SKBUFF=y
   4.272 +CONFIG_XEN_REBOOT=y
   4.273 +CONFIG_XEN_SMPBOOT=y
   4.274  
   4.275  #
   4.276  # Library routines
     5.1 --- a/buildconfigs/linux-defconfig_xen_x86_32	Tue Jan 09 10:50:46 2007 +0000
     5.2 +++ b/buildconfigs/linux-defconfig_xen_x86_32	Fri Jan 12 14:30:49 2007 +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.16.13-xen
     5.7 -# Thu May 11 17:11:00 2006
     5.8 +# Linux kernel version: 2.6.17-xen
     5.9 +# Thu Jan 11 10:45:59 2007
    5.10  #
    5.11  CONFIG_X86_32=y
    5.12  CONFIG_SEMAPHORE_SLEEPERS=y
    5.13 @@ -9,6 +9,7 @@ CONFIG_X86=y
    5.14  CONFIG_MMU=y
    5.15  CONFIG_GENERIC_ISA_DMA=y
    5.16  CONFIG_GENERIC_IOMAP=y
    5.17 +CONFIG_GENERIC_HWEIGHT=y
    5.18  CONFIG_ARCH_MAY_HAVE_PC_FDC=y
    5.19  CONFIG_DMI=y
    5.20  
    5.21 @@ -35,6 +36,7 @@ CONFIG_AUDITSYSCALL=y
    5.22  CONFIG_IKCONFIG=y
    5.23  CONFIG_IKCONFIG_PROC=y
    5.24  CONFIG_CPUSETS=y
    5.25 +# CONFIG_RELAY is not set
    5.26  CONFIG_INITRAMFS_SOURCE=""
    5.27  CONFIG_UID16=y
    5.28  CONFIG_VM86=y
    5.29 @@ -51,10 +53,6 @@ CONFIG_BASE_FULL=y
    5.30  CONFIG_FUTEX=y
    5.31  CONFIG_EPOLL=y
    5.32  CONFIG_SHMEM=y
    5.33 -CONFIG_CC_ALIGN_FUNCTIONS=0
    5.34 -CONFIG_CC_ALIGN_LABELS=0
    5.35 -CONFIG_CC_ALIGN_LOOPS=0
    5.36 -CONFIG_CC_ALIGN_JUMPS=0
    5.37  CONFIG_SLAB=y
    5.38  # CONFIG_TINY_SHMEM is not set
    5.39  CONFIG_BASE_SMALL=0
    5.40 @@ -67,7 +65,6 @@ CONFIG_OBSOLETE_INTERMODULE=m
    5.41  CONFIG_MODULES=y
    5.42  CONFIG_MODULE_UNLOAD=y
    5.43  CONFIG_MODULE_FORCE_UNLOAD=y
    5.44 -CONFIG_OBSOLETE_MODPARM=y
    5.45  CONFIG_MODVERSIONS=y
    5.46  CONFIG_MODULE_SRCVERSION_ALL=y
    5.47  CONFIG_KMOD=y
    5.48 @@ -77,6 +74,8 @@ CONFIG_STOP_MACHINE=y
    5.49  # Block layer
    5.50  #
    5.51  CONFIG_LBD=y
    5.52 +# CONFIG_BLK_DEV_IO_TRACE is not set
    5.53 +CONFIG_LSF=y
    5.54  
    5.55  #
    5.56  # IO Schedulers
    5.57 @@ -94,6 +93,7 @@ CONFIG_DEFAULT_IOSCHED="cfq"
    5.58  #
    5.59  # Processor type and features
    5.60  #
    5.61 +CONFIG_SMP=y
    5.62  # CONFIG_X86_PC is not set
    5.63  CONFIG_X86_XEN=y
    5.64  # CONFIG_X86_ELAN is not set
    5.65 @@ -142,9 +142,8 @@ CONFIG_X86_GOOD_APIC=y
    5.66  CONFIG_X86_INTEL_USERCOPY=y
    5.67  CONFIG_X86_USE_PPRO_CHECKSUM=y
    5.68  CONFIG_X86_TSC=y
    5.69 -CONFIG_SMP=y
    5.70 -CONFIG_SMP_ALTERNATIVES=y
    5.71  CONFIG_NR_CPUS=32
    5.72 +# CONFIG_SCHED_MC is not set
    5.73  # CONFIG_PREEMPT_NONE is not set
    5.74  CONFIG_PREEMPT_VOLUNTARY=y
    5.75  # CONFIG_PREEMPT is not set
    5.76 @@ -166,10 +165,6 @@ CONFIG_DCDBAS=m
    5.77  # CONFIG_NOHIGHMEM is not set
    5.78  CONFIG_HIGHMEM4G=y
    5.79  # CONFIG_HIGHMEM64G is not set
    5.80 -CONFIG_VMSPLIT_3G=y
    5.81 -# CONFIG_VMSPLIT_3G_OPT is not set
    5.82 -# CONFIG_VMSPLIT_2G is not set
    5.83 -# CONFIG_VMSPLIT_1G is not set
    5.84  CONFIG_PAGE_OFFSET=0xC0000000
    5.85  CONFIG_HIGHMEM=y
    5.86  CONFIG_SELECT_MEMORY_MODEL=y
    5.87 @@ -184,10 +179,10 @@ CONFIG_MTRR=y
    5.88  CONFIG_REGPARM=y
    5.89  CONFIG_SECCOMP=y
    5.90  CONFIG_HZ_100=y
    5.91 -CONFIG_KEXEC=y
    5.92  # CONFIG_HZ_250 is not set
    5.93  # CONFIG_HZ_1000 is not set
    5.94  CONFIG_HZ=100
    5.95 +CONFIG_KEXEC=y
    5.96  # CONFIG_CRASH_DUMP is not set
    5.97  CONFIG_PHYSICAL_START=0x100000
    5.98  CONFIG_HOTPLUG_CPU=y
    5.99 @@ -212,6 +207,7 @@ CONFIG_ACPI_HOTPLUG_CPU=y
   5.100  CONFIG_ACPI_THERMAL=m
   5.101  CONFIG_ACPI_ASUS=m
   5.102  CONFIG_ACPI_IBM=m
   5.103 +# CONFIG_ACPI_IBM_DOCK is not set
   5.104  CONFIG_ACPI_TOSHIBA=m
   5.105  CONFIG_ACPI_BLACKLIST_YEAR=0
   5.106  # CONFIG_ACPI_DEBUG is not set
   5.107 @@ -239,7 +235,6 @@ CONFIG_PCI_MMCONFIG=y
   5.108  CONFIG_XEN_PCIDEV_FRONTEND=y
   5.109  # CONFIG_XEN_PCIDEV_FE_DEBUG is not set
   5.110  # CONFIG_PCIEPORTBUS is not set
   5.111 -# CONFIG_PCI_LEGACY_PROC is not set
   5.112  # CONFIG_PCI_DEBUG is not set
   5.113  CONFIG_ISA_DMA_API=y
   5.114  CONFIG_SCx200=m
   5.115 @@ -325,6 +320,7 @@ CONFIG_SYN_COOKIES=y
   5.116  CONFIG_INET_AH=m
   5.117  CONFIG_INET_ESP=m
   5.118  CONFIG_INET_IPCOMP=m
   5.119 +CONFIG_INET_XFRM_TUNNEL=m
   5.120  CONFIG_INET_TUNNEL=m
   5.121  CONFIG_INET_DIAG=m
   5.122  CONFIG_INET_TCP_DIAG=m
   5.123 @@ -377,9 +373,11 @@ CONFIG_IP_VS_NQ=m
   5.124  CONFIG_IP_VS_FTP=m
   5.125  CONFIG_IPV6=m
   5.126  CONFIG_IPV6_PRIVACY=y
   5.127 +# CONFIG_IPV6_ROUTER_PREF is not set
   5.128  CONFIG_INET6_AH=m
   5.129  CONFIG_INET6_ESP=m
   5.130  CONFIG_INET6_IPCOMP=m
   5.131 +CONFIG_INET6_XFRM_TUNNEL=m
   5.132  CONFIG_INET6_TUNNEL=m
   5.133  CONFIG_IPV6_TUNNEL=m
   5.134  CONFIG_NETFILTER=y
   5.135 @@ -403,11 +401,14 @@ CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
   5.136  CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
   5.137  CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
   5.138  CONFIG_NETFILTER_XT_MATCH_DCCP=m
   5.139 +CONFIG_NETFILTER_XT_MATCH_ESP=m
   5.140  CONFIG_NETFILTER_XT_MATCH_HELPER=m
   5.141  CONFIG_NETFILTER_XT_MATCH_LENGTH=m
   5.142  CONFIG_NETFILTER_XT_MATCH_LIMIT=m
   5.143  CONFIG_NETFILTER_XT_MATCH_MAC=m
   5.144  CONFIG_NETFILTER_XT_MATCH_MARK=m
   5.145 +CONFIG_NETFILTER_XT_MATCH_POLICY=m
   5.146 +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
   5.147  CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
   5.148  CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
   5.149  CONFIG_NETFILTER_XT_MATCH_REALM=m
   5.150 @@ -431,20 +432,19 @@ CONFIG_IP_NF_NETBIOS_NS=m
   5.151  CONFIG_IP_NF_TFTP=m
   5.152  CONFIG_IP_NF_AMANDA=m
   5.153  CONFIG_IP_NF_PPTP=m
   5.154 +CONFIG_IP_NF_H323=m
   5.155  CONFIG_IP_NF_QUEUE=m
   5.156  CONFIG_IP_NF_IPTABLES=m
   5.157  CONFIG_IP_NF_MATCH_IPRANGE=m
   5.158 -CONFIG_IP_NF_MATCH_MULTIPORT=m
   5.159  CONFIG_IP_NF_MATCH_TOS=m
   5.160  CONFIG_IP_NF_MATCH_RECENT=m
   5.161  CONFIG_IP_NF_MATCH_ECN=m
   5.162  CONFIG_IP_NF_MATCH_DSCP=m
   5.163 -CONFIG_IP_NF_MATCH_AH_ESP=m
   5.164 +CONFIG_IP_NF_MATCH_AH=m
   5.165  CONFIG_IP_NF_MATCH_TTL=m
   5.166  CONFIG_IP_NF_MATCH_OWNER=m
   5.167  CONFIG_IP_NF_MATCH_ADDRTYPE=m
   5.168  CONFIG_IP_NF_MATCH_HASHLIMIT=m
   5.169 -CONFIG_IP_NF_MATCH_POLICY=m
   5.170  CONFIG_IP_NF_FILTER=m
   5.171  CONFIG_IP_NF_TARGET_REJECT=m
   5.172  CONFIG_IP_NF_TARGET_LOG=m
   5.173 @@ -462,6 +462,7 @@ CONFIG_IP_NF_NAT_FTP=m
   5.174  CONFIG_IP_NF_NAT_TFTP=m
   5.175  CONFIG_IP_NF_NAT_AMANDA=m
   5.176  CONFIG_IP_NF_NAT_PPTP=m
   5.177 +CONFIG_IP_NF_NAT_H323=m
   5.178  CONFIG_IP_NF_MANGLE=m
   5.179  CONFIG_IP_NF_TARGET_TOS=m
   5.180  CONFIG_IP_NF_TARGET_ECN=m
   5.181 @@ -482,12 +483,10 @@ CONFIG_IP6_NF_MATCH_RT=m
   5.182  CONFIG_IP6_NF_MATCH_OPTS=m
   5.183  CONFIG_IP6_NF_MATCH_FRAG=m
   5.184  CONFIG_IP6_NF_MATCH_HL=m
   5.185 -CONFIG_IP6_NF_MATCH_MULTIPORT=m
   5.186  CONFIG_IP6_NF_MATCH_OWNER=m
   5.187  CONFIG_IP6_NF_MATCH_IPV6HEADER=m
   5.188 -CONFIG_IP6_NF_MATCH_AHESP=m
   5.189 +CONFIG_IP6_NF_MATCH_AH=m
   5.190  CONFIG_IP6_NF_MATCH_EUI64=m
   5.191 -CONFIG_IP6_NF_MATCH_POLICY=m
   5.192  CONFIG_IP6_NF_FILTER=m
   5.193  CONFIG_IP6_NF_TARGET_LOG=m
   5.194  CONFIG_IP6_NF_TARGET_REJECT=m
   5.195 @@ -529,10 +528,12 @@ CONFIG_BRIDGE_EBT_ULOG=m
   5.196  #
   5.197  CONFIG_IP_DCCP=m
   5.198  CONFIG_INET_DCCP_DIAG=m
   5.199 +CONFIG_IP_DCCP_ACKVEC=y
   5.200  
   5.201  #
   5.202  # DCCP CCIDs Configuration (EXPERIMENTAL)
   5.203  #
   5.204 +CONFIG_IP_DCCP_CCID2=m
   5.205  CONFIG_IP_DCCP_CCID3=m
   5.206  CONFIG_IP_DCCP_TFRC_LIB=m
   5.207  
   5.208 @@ -540,7 +541,6 @@ CONFIG_IP_DCCP_TFRC_LIB=m
   5.209  # DCCP Kernel Hacking
   5.210  #
   5.211  # CONFIG_IP_DCCP_DEBUG is not set
   5.212 -# CONFIG_IP_DCCP_UNLOAD_HACK is not set
   5.213  
   5.214  #
   5.215  # SCTP Configuration (EXPERIMENTAL)
   5.216 @@ -694,6 +694,7 @@ CONFIG_DONGLE=y
   5.217  CONFIG_ESI_DONGLE=m
   5.218  CONFIG_ACTISYS_DONGLE=m
   5.219  CONFIG_TEKRAM_DONGLE=m
   5.220 +CONFIG_TOIM3232_DONGLE=m
   5.221  CONFIG_LITELINK_DONGLE=m
   5.222  CONFIG_MA600_DONGLE=m
   5.223  CONFIG_GIRBIL_DONGLE=m
   5.224 @@ -753,6 +754,9 @@ CONFIG_IEEE80211=m
   5.225  CONFIG_IEEE80211_CRYPT_WEP=m
   5.226  CONFIG_IEEE80211_CRYPT_CCMP=m
   5.227  CONFIG_IEEE80211_CRYPT_TKIP=m
   5.228 +CONFIG_IEEE80211_SOFTMAC=m
   5.229 +# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
   5.230 +CONFIG_WIRELESS_EXT=y
   5.231  
   5.232  #
   5.233  # Device Drivers
   5.234 @@ -820,7 +824,6 @@ CONFIG_MTD_CFI_I2=y
   5.235  # CONFIG_MTD_OTP is not set
   5.236  CONFIG_MTD_CFI_INTELEXT=m
   5.237  CONFIG_MTD_CFI_AMDSTD=m
   5.238 -CONFIG_MTD_CFI_AMDSTD_RETRY=0
   5.239  CONFIG_MTD_CFI_STAA=m
   5.240  CONFIG_MTD_CFI_UTIL=m
   5.241  CONFIG_MTD_RAM=m
   5.242 @@ -865,7 +868,6 @@ CONFIG_MTD_PHRAM=m
   5.243  CONFIG_MTD_MTDRAM=m
   5.244  CONFIG_MTDRAM_TOTAL_SIZE=4096
   5.245  CONFIG_MTDRAM_ERASE_SIZE=128
   5.246 -CONFIG_MTD_BLKMTD=m
   5.247  CONFIG_MTD_BLOCK2MTD=m
   5.248  
   5.249  #
   5.250 @@ -1102,6 +1104,7 @@ CONFIG_AIC79XX_DEBUG_ENABLE=y
   5.251  CONFIG_AIC79XX_DEBUG_MASK=0
   5.252  CONFIG_AIC79XX_REG_PRETTY_PRINT=y
   5.253  CONFIG_SCSI_DPT_I2O=m
   5.254 +CONFIG_SCSI_ADVANSYS=m
   5.255  CONFIG_MEGARAID_NEWGEN=y
   5.256  CONFIG_MEGARAID_MM=m
   5.257  CONFIG_MEGARAID_MAILBOX=m
   5.258 @@ -1144,12 +1147,10 @@ CONFIG_SCSI_SYM53C8XX_2=m
   5.259  CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
   5.260  CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
   5.261  CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
   5.262 -# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
   5.263 +CONFIG_SCSI_SYM53C8XX_MMIO=y
   5.264  CONFIG_SCSI_IPR=m
   5.265  CONFIG_SCSI_IPR_TRACE=y
   5.266  CONFIG_SCSI_IPR_DUMP=y
   5.267 -CONFIG_SCSI_QLOGIC_FC=m
   5.268 -CONFIG_SCSI_QLOGIC_FC_FIRMWARE=y
   5.269  CONFIG_SCSI_QLOGIC_1280=m
   5.270  CONFIG_SCSI_QLA_FC=m
   5.271  # CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE is not set
   5.272 @@ -1178,6 +1179,7 @@ CONFIG_MD_RAID0=m
   5.273  CONFIG_MD_RAID1=m
   5.274  CONFIG_MD_RAID10=m
   5.275  CONFIG_MD_RAID5=m
   5.276 +CONFIG_MD_RAID5_RESHAPE=y
   5.277  CONFIG_MD_RAID6=m
   5.278  CONFIG_MD_MULTIPATH=m
   5.279  CONFIG_MD_FAULTY=m
   5.280 @@ -1236,7 +1238,6 @@ CONFIG_IEEE1394_RAWIO=m
   5.281  CONFIG_I2O=m
   5.282  CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
   5.283  CONFIG_I2O_EXT_ADAPTEC=y
   5.284 -CONFIG_I2O_EXT_ADAPTEC_DMA64=y
   5.285  CONFIG_I2O_CONFIG=m
   5.286  CONFIG_I2O_CONFIG_OLD_IOCTL=y
   5.287  CONFIG_I2O_BUS=m
   5.288 @@ -1388,6 +1389,7 @@ CONFIG_ABYSS=m
   5.289  # Wireless LAN (non-hamradio)
   5.290  #
   5.291  CONFIG_NET_RADIO=y
   5.292 +CONFIG_NET_WIRELESS_RTNETLINK=y
   5.293  
   5.294  #
   5.295  # Obsolete Wireless cards support (pre-802.11)
   5.296 @@ -1408,6 +1410,8 @@ CONFIG_IPW2100=m
   5.297  CONFIG_IPW2100_MONITOR=y
   5.298  # CONFIG_IPW2100_DEBUG is not set
   5.299  CONFIG_IPW2200=m
   5.300 +CONFIG_IPW2200_MONITOR=y
   5.301 +CONFIG_IPW_QOS=y
   5.302  # CONFIG_IPW2200_DEBUG is not set
   5.303  CONFIG_AIRO=m
   5.304  CONFIG_HERMES=m
   5.305 @@ -1437,6 +1441,13 @@ CONFIG_HOSTAP_FIRMWARE_NVRAM=y
   5.306  CONFIG_HOSTAP_PLX=m
   5.307  CONFIG_HOSTAP_PCI=m
   5.308  CONFIG_HOSTAP_CS=m
   5.309 +CONFIG_BCM43XX=m
   5.310 +CONFIG_BCM43XX_DEBUG=y
   5.311 +CONFIG_BCM43XX_DMA=y
   5.312 +CONFIG_BCM43XX_PIO=y
   5.313 +CONFIG_BCM43XX_DMA_AND_PIO_MODE=y
   5.314 +# CONFIG_BCM43XX_DMA_MODE is not set
   5.315 +# CONFIG_BCM43XX_PIO_MODE is not set
   5.316  CONFIG_NET_WIRELESS=y
   5.317  
   5.318  #
   5.319 @@ -1637,6 +1648,15 @@ CONFIG_HISAX_HDLC=y
   5.320  #
   5.321  
   5.322  #
   5.323 +# Siemens Gigaset
   5.324 +#
   5.325 +CONFIG_ISDN_DRV_GIGASET=m
   5.326 +CONFIG_GIGASET_BASE=m
   5.327 +CONFIG_GIGASET_M105=m
   5.328 +# CONFIG_GIGASET_DEBUG is not set
   5.329 +# CONFIG_GIGASET_UNDOCREQ is not set
   5.330 +
   5.331 +#
   5.332  # CAPI subsystem
   5.333  #
   5.334  CONFIG_ISDN_CAPI=m
   5.335 @@ -1777,8 +1797,9 @@ CONFIG_HW_CONSOLE=y
   5.336  # Serial drivers
   5.337  #
   5.338  CONFIG_SERIAL_8250=m
   5.339 +CONFIG_SERIAL_8250_PCI=m
   5.340 +CONFIG_SERIAL_8250_PNP=m
   5.341  # CONFIG_SERIAL_8250_CS is not set
   5.342 -# CONFIG_SERIAL_8250_ACPI is not set
   5.343  CONFIG_SERIAL_8250_NR_UARTS=4
   5.344  CONFIG_SERIAL_8250_RUNTIME_UARTS=4
   5.345  # CONFIG_SERIAL_8250_EXTENDED is not set
   5.346 @@ -1963,9 +1984,7 @@ CONFIG_SENSORS_EEPROM=m
   5.347  CONFIG_SENSORS_PCF8574=m
   5.348  CONFIG_SENSORS_PCA9539=m
   5.349  CONFIG_SENSORS_PCF8591=m
   5.350 -CONFIG_SENSORS_RTC8564=m
   5.351  CONFIG_SENSORS_MAX6875=m
   5.352 -CONFIG_RTC_X1205_I2C=m
   5.353  # CONFIG_I2C_DEBUG_CORE is not set
   5.354  # CONFIG_I2C_DEBUG_ALGO is not set
   5.355  # CONFIG_I2C_DEBUG_BUS is not set
   5.356 @@ -1992,13 +2011,21 @@ CONFIG_SPI_BUTTERFLY=m
   5.357  # Dallas's 1-wire bus
   5.358  #
   5.359  CONFIG_W1=m
   5.360 -CONFIG_W1_MATROX=m
   5.361 -CONFIG_W1_DS9490=m
   5.362 -CONFIG_W1_DS9490_BRIDGE=m
   5.363 -CONFIG_W1_THERM=m
   5.364 -CONFIG_W1_SMEM=m
   5.365 -CONFIG_W1_DS2433=m
   5.366 -CONFIG_W1_DS2433_CRC=y
   5.367 +
   5.368 +#
   5.369 +# 1-wire Bus Masters
   5.370 +#
   5.371 +CONFIG_W1_MASTER_MATROX=m
   5.372 +CONFIG_W1_MASTER_DS9490=m
   5.373 +CONFIG_W1_MASTER_DS9490_BRIDGE=m
   5.374 +CONFIG_W1_MASTER_DS2482=m
   5.375 +
   5.376 +#
   5.377 +# 1-wire Slaves
   5.378 +#
   5.379 +CONFIG_W1_SLAVE_THERM=m
   5.380 +CONFIG_W1_SLAVE_SMEM=m
   5.381 +CONFIG_W1_SLAVE_DS2433=m
   5.382  
   5.383  #
   5.384  # Hardware Monitoring support
   5.385 @@ -2050,22 +2077,22 @@ CONFIG_SENSORS_HDAPS=m
   5.386  CONFIG_IBM_ASM=m
   5.387  
   5.388  #
   5.389 -# Multimedia Capabilities Port drivers
   5.390 -#
   5.391 -
   5.392 -#
   5.393  # Multimedia devices
   5.394  #
   5.395  CONFIG_VIDEO_DEV=m
   5.396 +CONFIG_VIDEO_V4L1=y
   5.397 +CONFIG_VIDEO_V4L1_COMPAT=y
   5.398 +CONFIG_VIDEO_V4L2=m
   5.399  
   5.400  #
   5.401 -# Video For Linux
   5.402 +# Video Capture Adapters
   5.403  #
   5.404  
   5.405  #
   5.406 -# Video Adapters
   5.407 +# Video Capture Adapters
   5.408  #
   5.409  # CONFIG_VIDEO_ADV_DEBUG is not set
   5.410 +CONFIG_VIDEO_VIVI=m
   5.411  CONFIG_VIDEO_BT848=m
   5.412  CONFIG_VIDEO_BT848_DVB=y
   5.413  CONFIG_VIDEO_SAA6588=m
   5.414 @@ -2075,6 +2102,7 @@ CONFIG_VIDEO_W9966=m
   5.415  CONFIG_VIDEO_CPIA=m
   5.416  CONFIG_VIDEO_CPIA_PP=m
   5.417  CONFIG_VIDEO_CPIA_USB=m
   5.418 +CONFIG_VIDEO_CPIA2=m
   5.419  CONFIG_VIDEO_SAA5246A=m
   5.420  CONFIG_VIDEO_SAA5249=m
   5.421  CONFIG_TUNER_3036=m
   5.422 @@ -2095,15 +2123,43 @@ CONFIG_VIDEO_MXB=m
   5.423  CONFIG_VIDEO_DPC=m
   5.424  CONFIG_VIDEO_HEXIUM_ORION=m
   5.425  CONFIG_VIDEO_HEXIUM_GEMINI=m
   5.426 +CONFIG_VIDEO_CX88_VP3054=m
   5.427  CONFIG_VIDEO_CX88=m
   5.428  CONFIG_VIDEO_CX88_ALSA=m
   5.429  CONFIG_VIDEO_CX88_DVB=m
   5.430  CONFIG_VIDEO_CX88_DVB_ALL_FRONTENDS=y
   5.431 -CONFIG_VIDEO_CX88_VP3054=m
   5.432 +CONFIG_VIDEO_OVCAMCHIP=m
   5.433 +
   5.434 +#
   5.435 +# Encoders and Decoders
   5.436 +#
   5.437 +CONFIG_VIDEO_MSP3400=m
   5.438 +CONFIG_VIDEO_CS53L32A=m
   5.439 +CONFIG_VIDEO_WM8775=m
   5.440 +CONFIG_VIDEO_WM8739=m
   5.441 +CONFIG_VIDEO_CX25840=m
   5.442 +CONFIG_VIDEO_SAA711X=m
   5.443 +CONFIG_VIDEO_SAA7127=m
   5.444 +CONFIG_VIDEO_UPD64031A=m
   5.445 +CONFIG_VIDEO_UPD64083=m
   5.446 +
   5.447 +#
   5.448 +# V4L USB devices
   5.449 +#
   5.450  CONFIG_VIDEO_EM28XX=m
   5.451 -CONFIG_VIDEO_OVCAMCHIP=m
   5.452 -CONFIG_VIDEO_AUDIO_DECODER=m
   5.453 -CONFIG_VIDEO_DECODER=m
   5.454 +CONFIG_USB_DSBR=m
   5.455 +CONFIG_VIDEO_USBVIDEO=m
   5.456 +CONFIG_USB_VICAM=m
   5.457 +CONFIG_USB_IBMCAM=m
   5.458 +CONFIG_USB_KONICAWC=m
   5.459 +CONFIG_USB_ET61X251=m
   5.460 +CONFIG_USB_OV511=m
   5.461 +CONFIG_USB_SE401=m
   5.462 +CONFIG_USB_SN9C102=m
   5.463 +CONFIG_USB_STV680=m
   5.464 +CONFIG_USB_W9968CF=m
   5.465 +CONFIG_USB_ZC0301=m
   5.466 +CONFIG_USB_PWC=m
   5.467  
   5.468  #
   5.469  # Radio Adapters
   5.470 @@ -2197,6 +2253,7 @@ CONFIG_DVB_L64781=m
   5.471  CONFIG_DVB_TDA1004X=m
   5.472  CONFIG_DVB_NXT6000=m
   5.473  CONFIG_DVB_MT352=m
   5.474 +CONFIG_DVB_ZL10353=m
   5.475  CONFIG_DVB_DIB3000MB=m
   5.476  CONFIG_DVB_DIB3000MC=m
   5.477  
   5.478 @@ -2224,6 +2281,7 @@ CONFIG_VIDEO_BUF_DVB=m
   5.479  CONFIG_VIDEO_BTCX=m
   5.480  CONFIG_VIDEO_IR=m
   5.481  CONFIG_VIDEO_TVEEPROM=m
   5.482 +CONFIG_USB_DABUSB=m
   5.483  
   5.484  #
   5.485  # Graphics support
   5.486 @@ -2233,6 +2291,7 @@ CONFIG_FB_CFB_FILLRECT=y
   5.487  CONFIG_FB_CFB_COPYAREA=y
   5.488  CONFIG_FB_CFB_IMAGEBLIT=y
   5.489  # CONFIG_FB_MACMODES is not set
   5.490 +CONFIG_FB_FIRMWARE_EDID=y
   5.491  CONFIG_FB_MODE_HELPERS=y
   5.492  CONFIG_FB_TILEBLITTING=y
   5.493  CONFIG_FB_CIRRUS=m
   5.494 @@ -2263,7 +2322,6 @@ CONFIG_FB_MATROX_MYSTIQUE=y
   5.495  CONFIG_FB_MATROX_G=y
   5.496  # CONFIG_FB_MATROX_I2C is not set
   5.497  CONFIG_FB_MATROX_MULTIHEAD=y
   5.498 -# CONFIG_FB_RADEON_OLD is not set
   5.499  CONFIG_FB_RADEON=m
   5.500  CONFIG_FB_RADEON_I2C=y
   5.501  # CONFIG_FB_RADEON_DEBUG is not set
   5.502 @@ -2287,6 +2345,7 @@ CONFIG_FB_CYBLA=m
   5.503  CONFIG_FB_TRIDENT=m
   5.504  # CONFIG_FB_TRIDENT_ACCEL is not set
   5.505  CONFIG_FB_GEODE=y
   5.506 +CONFIG_FB_GEODE_GX=m
   5.507  CONFIG_FB_GEODE_GX1=m
   5.508  CONFIG_FB_VIRTUAL=m
   5.509  
   5.510 @@ -2294,6 +2353,7 @@ CONFIG_FB_VIRTUAL=m
   5.511  # Console display driver support
   5.512  #
   5.513  CONFIG_VGA_CONSOLE=y
   5.514 +# CONFIG_VGACON_SOFT_SCROLLBACK is not set
   5.515  CONFIG_DUMMY_CONSOLE=y
   5.516  CONFIG_FRAMEBUFFER_CONSOLE=m
   5.517  # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
   5.518 @@ -2329,11 +2389,13 @@ CONFIG_SND_SEQ_DUMMY=m
   5.519  CONFIG_SND_OSSEMUL=y
   5.520  CONFIG_SND_MIXER_OSS=m
   5.521  CONFIG_SND_PCM_OSS=m
   5.522 +CONFIG_SND_PCM_OSS_PLUGINS=y
   5.523  CONFIG_SND_SEQUENCER_OSS=y
   5.524  CONFIG_SND_RTCTIMER=m
   5.525  CONFIG_SND_SEQ_RTCTIMER_DEFAULT=y
   5.526  # CONFIG_SND_DYNAMIC_MINORS is not set
   5.527  CONFIG_SND_SUPPORT_OLD_API=y
   5.528 +CONFIG_SND_VERBOSE_PROCFS=y
   5.529  # CONFIG_SND_VERBOSE_PRINTK is not set
   5.530  # CONFIG_SND_DEBUG is not set
   5.531  
   5.532 @@ -2355,6 +2417,7 @@ CONFIG_SND_MPU401=m
   5.533  # PCI devices
   5.534  #
   5.535  CONFIG_SND_AD1889=m
   5.536 +CONFIG_SND_ALS300=m
   5.537  CONFIG_SND_ALS4000=m
   5.538  CONFIG_SND_ALI5451=m
   5.539  CONFIG_SND_ATIIXP=m
   5.540 @@ -2378,7 +2441,6 @@ CONFIG_SND_ENS1371=m
   5.541  CONFIG_SND_ES1938=m
   5.542  CONFIG_SND_ES1968=m
   5.543  CONFIG_SND_FM801=m
   5.544 -# CONFIG_SND_FM801_TEA575X_BOOL is not set
   5.545  CONFIG_SND_FM801_TEA575X=m
   5.546  CONFIG_SND_HDA_INTEL=m
   5.547  CONFIG_SND_HDSP=m
   5.548 @@ -2392,6 +2454,7 @@ CONFIG_SND_MAESTRO3=m
   5.549  CONFIG_SND_MIXART=m
   5.550  CONFIG_SND_NM256=m
   5.551  CONFIG_SND_PCXHR=m
   5.552 +CONFIG_SND_RIPTIDE=m
   5.553  CONFIG_SND_RME32=m
   5.554  CONFIG_SND_RME96=m
   5.555  CONFIG_SND_RME9652=m
   5.556 @@ -2411,17 +2474,24 @@ CONFIG_SND_USB_USX2Y=m
   5.557  #
   5.558  # PCMCIA devices
   5.559  #
   5.560 +CONFIG_SND_VXPOCKET=m
   5.561 +CONFIG_SND_PDAUDIOCF=m
   5.562  
   5.563  #
   5.564  # Open Sound System
   5.565  #
   5.566  CONFIG_SOUND_PRIME=m
   5.567 -# CONFIG_OBSOLETE_OSS_DRIVER is not set
   5.568 +CONFIG_SOUND_BT878=m
   5.569 +CONFIG_SOUND_EMU10K1=m
   5.570 +# CONFIG_MIDI_EMU10K1 is not set
   5.571  CONFIG_SOUND_FUSION=m
   5.572 +CONFIG_SOUND_ES1371=m
   5.573  CONFIG_SOUND_ICH=m
   5.574  CONFIG_SOUND_TRIDENT=m
   5.575  # CONFIG_SOUND_MSNDCLAS is not set
   5.576  # CONFIG_SOUND_MSNDPIN is not set
   5.577 +CONFIG_SOUND_VIA82CXXX=m
   5.578 +# CONFIG_MIDI_VIA82CXXX is not set
   5.579  # CONFIG_SOUND_OSS is not set
   5.580  CONFIG_SOUND_TVMIXER=m
   5.581  
   5.582 @@ -2430,6 +2500,7 @@ CONFIG_SOUND_TVMIXER=m
   5.583  #
   5.584  CONFIG_USB_ARCH_HAS_HCD=y
   5.585  CONFIG_USB_ARCH_HAS_OHCI=y
   5.586 +CONFIG_USB_ARCH_HAS_EHCI=y
   5.587  CONFIG_USB=m
   5.588  # CONFIG_USB_DEBUG is not set
   5.589  
   5.590 @@ -2459,7 +2530,6 @@ CONFIG_USB_SL811_CS=m
   5.591  #
   5.592  # USB Device Class drivers
   5.593  #
   5.594 -# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
   5.595  CONFIG_USB_ACM=m
   5.596  CONFIG_USB_PRINTER=m
   5.597  
   5.598 @@ -2505,9 +2575,11 @@ CONFIG_USB_WACOM=m
   5.599  CONFIG_USB_ACECAD=m
   5.600  CONFIG_USB_KBTAB=m
   5.601  CONFIG_USB_POWERMATE=m
   5.602 -CONFIG_USB_MTOUCH=m
   5.603 -CONFIG_USB_ITMTOUCH=m
   5.604 -CONFIG_USB_EGALAX=m
   5.605 +CONFIG_USB_TOUCHSCREEN=m
   5.606 +CONFIG_USB_TOUCHSCREEN_EGALAX=y
   5.607 +CONFIG_USB_TOUCHSCREEN_PANJIT=y
   5.608 +CONFIG_USB_TOUCHSCREEN_3M=y
   5.609 +CONFIG_USB_TOUCHSCREEN_ITM=y
   5.610  CONFIG_USB_YEALINK=m
   5.611  CONFIG_USB_XPAD=m
   5.612  CONFIG_USB_ATI_REMOTE=m
   5.613 @@ -2522,22 +2594,6 @@ CONFIG_USB_MDC800=m
   5.614  CONFIG_USB_MICROTEK=m
   5.615  
   5.616  #
   5.617 -# USB Multimedia devices
   5.618 -#
   5.619 -CONFIG_USB_DABUSB=m
   5.620 -CONFIG_USB_VICAM=m
   5.621 -CONFIG_USB_DSBR=m
   5.622 -CONFIG_USB_ET61X251=m
   5.623 -CONFIG_USB_IBMCAM=m
   5.624 -CONFIG_USB_KONICAWC=m
   5.625 -CONFIG_USB_OV511=m
   5.626 -CONFIG_USB_SE401=m
   5.627 -CONFIG_USB_SN9C102=m
   5.628 -CONFIG_USB_STV680=m
   5.629 -CONFIG_USB_W9968CF=m
   5.630 -CONFIG_USB_PWC=m
   5.631 -
   5.632 -#
   5.633  # USB Network Adapters
   5.634  #
   5.635  CONFIG_USB_CATC=m
   5.636 @@ -2573,6 +2629,7 @@ CONFIG_USB_SERIAL=m
   5.637  CONFIG_USB_SERIAL_GENERIC=y
   5.638  CONFIG_USB_SERIAL_AIRPRIME=m
   5.639  CONFIG_USB_SERIAL_ANYDATA=m
   5.640 +CONFIG_USB_SERIAL_ARK3116=m
   5.641  CONFIG_USB_SERIAL_BELKIN=m
   5.642  CONFIG_USB_SERIAL_WHITEHEAT=m
   5.643  CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
   5.644 @@ -2580,6 +2637,7 @@ CONFIG_USB_SERIAL_CP2101=m
   5.645  CONFIG_USB_SERIAL_CYPRESS_M8=m
   5.646  CONFIG_USB_SERIAL_EMPEG=m
   5.647  CONFIG_USB_SERIAL_FTDI_SIO=m
   5.648 +CONFIG_USB_SERIAL_FUNSOFT=m
   5.649  CONFIG_USB_SERIAL_VISOR=m
   5.650  CONFIG_USB_SERIAL_IPAQ=m
   5.651  CONFIG_USB_SERIAL_IR=m
   5.652 @@ -2604,6 +2662,7 @@ CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
   5.653  CONFIG_USB_SERIAL_KLSI=m
   5.654  CONFIG_USB_SERIAL_KOBIL_SCT=m
   5.655  CONFIG_USB_SERIAL_MCT_U232=m
   5.656 +CONFIG_USB_SERIAL_NAVMAN=m
   5.657  CONFIG_USB_SERIAL_PL2303=m
   5.658  CONFIG_USB_SERIAL_HP4X=m
   5.659  CONFIG_USB_SERIAL_SAFE=m
   5.660 @@ -2655,6 +2714,7 @@ CONFIG_USB_NET2280=m
   5.661  # CONFIG_USB_GADGET_GOKU is not set
   5.662  # CONFIG_USB_GADGET_LH7A40X is not set
   5.663  # CONFIG_USB_GADGET_OMAP is not set
   5.664 +# CONFIG_USB_GADGET_AT91 is not set
   5.665  # CONFIG_USB_GADGET_DUMMY_HCD is not set
   5.666  CONFIG_USB_GADGET_DUALSPEED=y
   5.667  CONFIG_USB_ZERO=m
   5.668 @@ -2671,18 +2731,37 @@ CONFIG_USB_G_SERIAL=m
   5.669  CONFIG_MMC=m
   5.670  # CONFIG_MMC_DEBUG is not set
   5.671  CONFIG_MMC_BLOCK=m
   5.672 +CONFIG_MMC_SDHCI=m
   5.673  CONFIG_MMC_WBSD=m
   5.674  
   5.675  #
   5.676 +# LED devices
   5.677 +#
   5.678 +CONFIG_NEW_LEDS=y
   5.679 +CONFIG_LEDS_CLASS=m
   5.680 +
   5.681 +#
   5.682 +# LED drivers
   5.683 +#
   5.684 +
   5.685 +#
   5.686 +# LED Triggers
   5.687 +#
   5.688 +CONFIG_LEDS_TRIGGERS=y
   5.689 +CONFIG_LEDS_TRIGGER_TIMER=m
   5.690 +CONFIG_LEDS_TRIGGER_IDE_DISK=y
   5.691 +
   5.692 +#
   5.693  # InfiniBand support
   5.694  #
   5.695  CONFIG_INFINIBAND=m
   5.696  CONFIG_INFINIBAND_USER_MAD=m
   5.697  CONFIG_INFINIBAND_USER_ACCESS=m
   5.698  CONFIG_INFINIBAND_MTHCA=m
   5.699 -# CONFIG_INFINIBAND_MTHCA_DEBUG is not set
   5.700 +CONFIG_INFINIBAND_MTHCA_DEBUG=y
   5.701  CONFIG_INFINIBAND_IPOIB=m
   5.702 -# CONFIG_INFINIBAND_IPOIB_DEBUG is not set
   5.703 +CONFIG_INFINIBAND_IPOIB_DEBUG=y
   5.704 +# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
   5.705  CONFIG_INFINIBAND_SRP=m
   5.706  
   5.707  #
   5.708 @@ -2704,6 +2783,29 @@ CONFIG_EDAC_R82600=m
   5.709  CONFIG_EDAC_POLL=y
   5.710  
   5.711  #
   5.712 +# Real Time Clock
   5.713 +#
   5.714 +CONFIG_RTC_LIB=m
   5.715 +CONFIG_RTC_CLASS=m
   5.716 +
   5.717 +#
   5.718 +# RTC interfaces
   5.719 +#
   5.720 +CONFIG_RTC_INTF_SYSFS=m
   5.721 +CONFIG_RTC_INTF_PROC=m
   5.722 +CONFIG_RTC_INTF_DEV=m
   5.723 +
   5.724 +#
   5.725 +# RTC drivers
   5.726 +#
   5.727 +CONFIG_RTC_DRV_X1205=m
   5.728 +CONFIG_RTC_DRV_DS1672=m
   5.729 +CONFIG_RTC_DRV_PCF8563=m
   5.730 +CONFIG_RTC_DRV_RS5C372=m
   5.731 +CONFIG_RTC_DRV_M48T86=m
   5.732 +CONFIG_RTC_DRV_TEST=m
   5.733 +
   5.734 +#
   5.735  # File systems
   5.736  #
   5.737  CONFIG_EXT2_FS=y
   5.738 @@ -2777,12 +2879,10 @@ CONFIG_NTFS_FS=m
   5.739  #
   5.740  CONFIG_PROC_FS=y
   5.741  CONFIG_PROC_KCORE=y
   5.742 -# CONFIG_PROC_VMCORE is not set
   5.743  CONFIG_SYSFS=y
   5.744  CONFIG_TMPFS=y
   5.745  # CONFIG_HUGETLB_PAGE is not set
   5.746  CONFIG_RAMFS=y
   5.747 -CONFIG_RELAYFS_FS=m
   5.748  CONFIG_CONFIGFS_FS=m
   5.749  
   5.750  #
   5.751 @@ -2954,11 +3054,13 @@ CONFIG_DEBUG_BUGVERBOSE=y
   5.752  # CONFIG_DEBUG_FS is not set
   5.753  # CONFIG_DEBUG_VM is not set
   5.754  # CONFIG_FRAME_POINTER is not set
   5.755 +# CONFIG_UNWIND_INFO is not set
   5.756  CONFIG_FORCED_INLINING=y
   5.757  # CONFIG_RCU_TORTURE_TEST is not set
   5.758  CONFIG_EARLY_PRINTK=y
   5.759  CONFIG_DEBUG_STACKOVERFLOW=y
   5.760  # CONFIG_DEBUG_STACK_USAGE is not set
   5.761 +CONFIG_STACK_BACKTRACE_COLS=2
   5.762  # CONFIG_DEBUG_PAGEALLOC is not set
   5.763  # CONFIG_DEBUG_RODATA is not set
   5.764  # CONFIG_4KSTACKS is not set
   5.765 @@ -3013,24 +3115,26 @@ CONFIG_CRYPTO_TEST=m
   5.766  #
   5.767  # CONFIG_CRYPTO_DEV_PADLOCK is not set
   5.768  CONFIG_XEN=y
   5.769 -CONFIG_XEN_INTERFACE_VERSION=0x00030202
   5.770 +CONFIG_XEN_INTERFACE_VERSION=0x00030203
   5.771  
   5.772  #
   5.773  # XEN
   5.774  #
   5.775  CONFIG_XEN_PRIVILEGED_GUEST=y
   5.776  # CONFIG_XEN_UNPRIVILEGED_GUEST is not set
   5.777 +CONFIG_XEN_PRIVCMD=y
   5.778 +CONFIG_XEN_XENBUS_DEV=y
   5.779  CONFIG_XEN_BACKEND=y
   5.780 +CONFIG_XEN_BLKDEV_BACKEND=y
   5.781 +CONFIG_XEN_BLKDEV_TAP=y
   5.782 +CONFIG_XEN_NETDEV_BACKEND=y
   5.783 +# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
   5.784 +CONFIG_XEN_NETDEV_LOOPBACK=y
   5.785  CONFIG_XEN_PCIDEV_BACKEND=m
   5.786  CONFIG_XEN_PCIDEV_BACKEND_VPCI=y
   5.787  # CONFIG_XEN_PCIDEV_BACKEND_PASS is not set
   5.788  # CONFIG_XEN_PCIDEV_BACKEND_SLOT is not set
   5.789  # CONFIG_XEN_PCIDEV_BE_DEBUG is not set
   5.790 -CONFIG_XEN_BLKDEV_BACKEND=y
   5.791 -CONFIG_XEN_BLKDEV_TAP=y
   5.792 -CONFIG_XEN_NETDEV_BACKEND=y
   5.793 -# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
   5.794 -CONFIG_XEN_NETDEV_LOOPBACK=y
   5.795  # CONFIG_XEN_TPMDEV_BACKEND is not set
   5.796  CONFIG_XEN_BLKDEV_FRONTEND=y
   5.797  CONFIG_XEN_NETDEV_FRONTEND=y
   5.798 @@ -3044,7 +3148,14 @@ CONFIG_XEN_COMPAT_030002_AND_LATER=y
   5.799  CONFIG_XEN_COMPAT_030002=y
   5.800  CONFIG_HAVE_ARCH_ALLOC_SKB=y
   5.801  CONFIG_HAVE_ARCH_DEV_ALLOC_SKB=y
   5.802 +CONFIG_HAVE_IRQ_IGNORE_UNHANDLED=y
   5.803  CONFIG_NO_IDLE_HZ=y
   5.804 +CONFIG_XEN_UTIL=y
   5.805 +CONFIG_XEN_BALLOON=y
   5.806 +CONFIG_XEN_DEVMEM=y
   5.807 +CONFIG_XEN_SKBUFF=y
   5.808 +CONFIG_XEN_REBOOT=y
   5.809 +CONFIG_XEN_SMPBOOT=y
   5.810  
   5.811  #
   5.812  # Library routines
     6.1 --- a/buildconfigs/linux-defconfig_xen_x86_64	Tue Jan 09 10:50:46 2007 +0000
     6.2 +++ b/buildconfigs/linux-defconfig_xen_x86_64	Fri Jan 12 14:30:49 2007 +0000
     6.3 @@ -1,7 +1,7 @@
     6.4  #
     6.5  # Automatically generated make config: don't edit
     6.6 -# Linux kernel version: 2.6.16.13-xen
     6.7 -# Thu May 11 17:18:58 2006
     6.8 +# Linux kernel version: 2.6.17-xen
     6.9 +# Thu Jan 11 10:10:22 2007
    6.10  #
    6.11  CONFIG_X86_64=y
    6.12  CONFIG_64BIT=y
    6.13 @@ -9,6 +9,7 @@ CONFIG_X86=y
    6.14  CONFIG_SEMAPHORE_SLEEPERS=y
    6.15  CONFIG_MMU=y
    6.16  CONFIG_RWSEM_GENERIC_SPINLOCK=y
    6.17 +CONFIG_GENERIC_HWEIGHT=y
    6.18  CONFIG_GENERIC_CALIBRATE_DELAY=y
    6.19  CONFIG_X86_CMPXCHG=y
    6.20  CONFIG_EARLY_PRINTK=y
    6.21 @@ -40,6 +41,7 @@ CONFIG_AUDITSYSCALL=y
    6.22  CONFIG_IKCONFIG=y
    6.23  CONFIG_IKCONFIG_PROC=y
    6.24  CONFIG_CPUSETS=y
    6.25 +# CONFIG_RELAY is not set
    6.26  CONFIG_INITRAMFS_SOURCE=""
    6.27  CONFIG_UID16=y
    6.28  CONFIG_VM86=y
    6.29 @@ -56,10 +58,6 @@ CONFIG_BASE_FULL=y
    6.30  CONFIG_FUTEX=y
    6.31  CONFIG_EPOLL=y
    6.32  CONFIG_SHMEM=y
    6.33 -CONFIG_CC_ALIGN_FUNCTIONS=0
    6.34 -CONFIG_CC_ALIGN_LABELS=0
    6.35 -CONFIG_CC_ALIGN_LOOPS=0
    6.36 -CONFIG_CC_ALIGN_JUMPS=0
    6.37  CONFIG_SLAB=y
    6.38  # CONFIG_TINY_SHMEM is not set
    6.39  CONFIG_BASE_SMALL=0
    6.40 @@ -72,7 +70,6 @@ CONFIG_OBSOLETE_INTERMODULE=m
    6.41  CONFIG_MODULES=y
    6.42  CONFIG_MODULE_UNLOAD=y
    6.43  CONFIG_MODULE_FORCE_UNLOAD=y
    6.44 -CONFIG_OBSOLETE_MODPARM=y
    6.45  CONFIG_MODVERSIONS=y
    6.46  CONFIG_MODULE_SRCVERSION_ALL=y
    6.47  CONFIG_KMOD=y
    6.48 @@ -82,6 +79,8 @@ CONFIG_STOP_MACHINE=y
    6.49  # Block layer
    6.50  #
    6.51  CONFIG_LBD=y
    6.52 +# CONFIG_BLK_DEV_IO_TRACE is not set
    6.53 +CONFIG_LSF=y
    6.54  
    6.55  #
    6.56  # IO Schedulers
    6.57 @@ -109,6 +108,7 @@ CONFIG_X86_NO_TSS=y
    6.58  CONFIG_X86_NO_IDT=y
    6.59  CONFIG_X86_L1_CACHE_BYTES=128
    6.60  CONFIG_X86_L1_CACHE_SHIFT=7
    6.61 +CONFIG_X86_INTERNODE_CACHE_BYTES=128
    6.62  CONFIG_X86_GOOD_APIC=y
    6.63  CONFIG_MICROCODE=y
    6.64  CONFIG_X86_MSR=m
    6.65 @@ -118,11 +118,11 @@ CONFIG_X86_XEN_GENAPIC=y
    6.66  CONFIG_X86_LOCAL_APIC=y
    6.67  CONFIG_MTRR=y
    6.68  CONFIG_SMP=y
    6.69 +# CONFIG_SCHED_MC is not set
    6.70  # CONFIG_PREEMPT_NONE is not set
    6.71  CONFIG_PREEMPT_VOLUNTARY=y
    6.72  # CONFIG_PREEMPT is not set
    6.73  CONFIG_PREEMPT_BKL=y
    6.74 -CONFIG_ARCH_SPARSEMEM_ENABLE=y
    6.75  CONFIG_ARCH_FLATMEM_ENABLE=y
    6.76  CONFIG_SELECT_MEMORY_MODEL=y
    6.77  CONFIG_FLATMEM_MANUAL=y
    6.78 @@ -135,14 +135,15 @@ CONFIG_SPLIT_PTLOCK_CPUS=4096
    6.79  CONFIG_NR_CPUS=32
    6.80  CONFIG_HOTPLUG_CPU=y
    6.81  CONFIG_SWIOTLB=y
    6.82 +CONFIG_KEXEC=y
    6.83  # CONFIG_CRASH_DUMP is not set
    6.84 -CONFIG_PHYSICAL_START=0x100000
    6.85 +CONFIG_PHYSICAL_START=0x200000
    6.86  CONFIG_SECCOMP=y
    6.87  CONFIG_HZ_100=y
    6.88 -CONFIG_KEXEC=y
    6.89  # CONFIG_HZ_250 is not set
    6.90  # CONFIG_HZ_1000 is not set
    6.91  CONFIG_HZ=100
    6.92 +# CONFIG_REORDER is not set
    6.93  CONFIG_GENERIC_HARDIRQS=y
    6.94  CONFIG_GENERIC_IRQ_PROBE=y
    6.95  CONFIG_ISA_DMA_API=y
    6.96 @@ -168,6 +169,7 @@ CONFIG_ACPI_HOTPLUG_CPU=y
    6.97  CONFIG_ACPI_THERMAL=m
    6.98  CONFIG_ACPI_ASUS=m
    6.99  CONFIG_ACPI_IBM=m
   6.100 +# CONFIG_ACPI_IBM_DOCK is not set
   6.101  CONFIG_ACPI_TOSHIBA=m
   6.102  CONFIG_ACPI_BLACKLIST_YEAR=0
   6.103  # CONFIG_ACPI_DEBUG is not set
   6.104 @@ -175,6 +177,7 @@ CONFIG_ACPI_EC=y
   6.105  CONFIG_ACPI_POWER=y
   6.106  CONFIG_ACPI_SYSTEM=y
   6.107  CONFIG_ACPI_CONTAINER=m
   6.108 +CONFIG_ACPI_HOTPLUG_MEMORY=m
   6.109  
   6.110  #
   6.111  # CPU Frequency scaling
   6.112 @@ -189,9 +192,7 @@ CONFIG_PCI_DIRECT=y
   6.113  # CONFIG_PCI_MMCONFIG is not set
   6.114  CONFIG_XEN_PCIDEV_FRONTEND=y
   6.115  # CONFIG_XEN_PCIDEV_FE_DEBUG is not set
   6.116 -# CONFIG_UNORDERED_IO is not set
   6.117  # CONFIG_PCIEPORTBUS is not set
   6.118 -# CONFIG_PCI_LEGACY_PROC is not set
   6.119  # CONFIG_PCI_DEBUG is not set
   6.120  
   6.121  #
   6.122 @@ -277,6 +278,7 @@ CONFIG_SYN_COOKIES=y
   6.123  CONFIG_INET_AH=m
   6.124  CONFIG_INET_ESP=m
   6.125  CONFIG_INET_IPCOMP=m
   6.126 +CONFIG_INET_XFRM_TUNNEL=m
   6.127  CONFIG_INET_TUNNEL=m
   6.128  CONFIG_INET_DIAG=m
   6.129  CONFIG_INET_TCP_DIAG=m
   6.130 @@ -329,9 +331,11 @@ CONFIG_IP_VS_NQ=m
   6.131  CONFIG_IP_VS_FTP=m
   6.132  CONFIG_IPV6=m
   6.133  CONFIG_IPV6_PRIVACY=y
   6.134 +# CONFIG_IPV6_ROUTER_PREF is not set
   6.135  CONFIG_INET6_AH=m
   6.136  CONFIG_INET6_ESP=m
   6.137  CONFIG_INET6_IPCOMP=m
   6.138 +CONFIG_INET6_XFRM_TUNNEL=m
   6.139  CONFIG_INET6_TUNNEL=m
   6.140  CONFIG_IPV6_TUNNEL=m
   6.141  CONFIG_NETFILTER=y
   6.142 @@ -355,11 +359,14 @@ CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
   6.143  CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
   6.144  CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
   6.145  CONFIG_NETFILTER_XT_MATCH_DCCP=m
   6.146 +CONFIG_NETFILTER_XT_MATCH_ESP=m
   6.147  CONFIG_NETFILTER_XT_MATCH_HELPER=m
   6.148  CONFIG_NETFILTER_XT_MATCH_LENGTH=m
   6.149  CONFIG_NETFILTER_XT_MATCH_LIMIT=m
   6.150  CONFIG_NETFILTER_XT_MATCH_MAC=m
   6.151  CONFIG_NETFILTER_XT_MATCH_MARK=m
   6.152 +CONFIG_NETFILTER_XT_MATCH_POLICY=m
   6.153 +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
   6.154  CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
   6.155  CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
   6.156  CONFIG_NETFILTER_XT_MATCH_REALM=m
   6.157 @@ -383,20 +390,19 @@ CONFIG_IP_NF_NETBIOS_NS=m
   6.158  CONFIG_IP_NF_TFTP=m
   6.159  CONFIG_IP_NF_AMANDA=m
   6.160  CONFIG_IP_NF_PPTP=m
   6.161 +CONFIG_IP_NF_H323=m
   6.162  CONFIG_IP_NF_QUEUE=m
   6.163  CONFIG_IP_NF_IPTABLES=m
   6.164  CONFIG_IP_NF_MATCH_IPRANGE=m
   6.165 -CONFIG_IP_NF_MATCH_MULTIPORT=m
   6.166  CONFIG_IP_NF_MATCH_TOS=m
   6.167  CONFIG_IP_NF_MATCH_RECENT=m
   6.168  CONFIG_IP_NF_MATCH_ECN=m
   6.169  CONFIG_IP_NF_MATCH_DSCP=m
   6.170 -CONFIG_IP_NF_MATCH_AH_ESP=m
   6.171 +CONFIG_IP_NF_MATCH_AH=m
   6.172  CONFIG_IP_NF_MATCH_TTL=m
   6.173  CONFIG_IP_NF_MATCH_OWNER=m
   6.174  CONFIG_IP_NF_MATCH_ADDRTYPE=m
   6.175  CONFIG_IP_NF_MATCH_HASHLIMIT=m
   6.176 -CONFIG_IP_NF_MATCH_POLICY=m
   6.177  CONFIG_IP_NF_FILTER=m
   6.178  CONFIG_IP_NF_TARGET_REJECT=m
   6.179  CONFIG_IP_NF_TARGET_LOG=m
   6.180 @@ -414,6 +420,7 @@ CONFIG_IP_NF_NAT_FTP=m
   6.181  CONFIG_IP_NF_NAT_TFTP=m
   6.182  CONFIG_IP_NF_NAT_AMANDA=m
   6.183  CONFIG_IP_NF_NAT_PPTP=m
   6.184 +CONFIG_IP_NF_NAT_H323=m
   6.185  CONFIG_IP_NF_MANGLE=m
   6.186  CONFIG_IP_NF_TARGET_TOS=m
   6.187  CONFIG_IP_NF_TARGET_ECN=m
   6.188 @@ -434,12 +441,10 @@ CONFIG_IP6_NF_MATCH_RT=m
   6.189  CONFIG_IP6_NF_MATCH_OPTS=m
   6.190  CONFIG_IP6_NF_MATCH_FRAG=m
   6.191  CONFIG_IP6_NF_MATCH_HL=m
   6.192 -CONFIG_IP6_NF_MATCH_MULTIPORT=m
   6.193  CONFIG_IP6_NF_MATCH_OWNER=m
   6.194  CONFIG_IP6_NF_MATCH_IPV6HEADER=m
   6.195 -CONFIG_IP6_NF_MATCH_AHESP=m
   6.196 +CONFIG_IP6_NF_MATCH_AH=m
   6.197  CONFIG_IP6_NF_MATCH_EUI64=m
   6.198 -CONFIG_IP6_NF_MATCH_POLICY=m
   6.199  CONFIG_IP6_NF_FILTER=m
   6.200  CONFIG_IP6_NF_TARGET_LOG=m
   6.201  CONFIG_IP6_NF_TARGET_REJECT=m
   6.202 @@ -481,10 +486,12 @@ CONFIG_BRIDGE_EBT_ULOG=m
   6.203  #
   6.204  CONFIG_IP_DCCP=m
   6.205  CONFIG_INET_DCCP_DIAG=m
   6.206 +CONFIG_IP_DCCP_ACKVEC=y
   6.207  
   6.208  #
   6.209  # DCCP CCIDs Configuration (EXPERIMENTAL)
   6.210  #
   6.211 +CONFIG_IP_DCCP_CCID2=m
   6.212  CONFIG_IP_DCCP_CCID3=m
   6.213  CONFIG_IP_DCCP_TFRC_LIB=m
   6.214  
   6.215 @@ -492,7 +499,6 @@ CONFIG_IP_DCCP_TFRC_LIB=m
   6.216  # DCCP Kernel Hacking
   6.217  #
   6.218  # CONFIG_IP_DCCP_DEBUG is not set
   6.219 -# CONFIG_IP_DCCP_UNLOAD_HACK is not set
   6.220  
   6.221  #
   6.222  # SCTP Configuration (EXPERIMENTAL)
   6.223 @@ -646,6 +652,7 @@ CONFIG_DONGLE=y
   6.224  CONFIG_ESI_DONGLE=m
   6.225  CONFIG_ACTISYS_DONGLE=m
   6.226  CONFIG_TEKRAM_DONGLE=m
   6.227 +CONFIG_TOIM3232_DONGLE=m
   6.228  CONFIG_LITELINK_DONGLE=m
   6.229  CONFIG_MA600_DONGLE=m
   6.230  CONFIG_GIRBIL_DONGLE=m
   6.231 @@ -704,6 +711,9 @@ CONFIG_IEEE80211=m
   6.232  CONFIG_IEEE80211_CRYPT_WEP=m
   6.233  CONFIG_IEEE80211_CRYPT_CCMP=m
   6.234  CONFIG_IEEE80211_CRYPT_TKIP=m
   6.235 +CONFIG_IEEE80211_SOFTMAC=m
   6.236 +# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
   6.237 +CONFIG_WIRELESS_EXT=y
   6.238  
   6.239  #
   6.240  # Device Drivers
   6.241 @@ -772,7 +782,6 @@ CONFIG_MTD_CFI_I2=y
   6.242  # CONFIG_MTD_OTP is not set
   6.243  CONFIG_MTD_CFI_INTELEXT=m
   6.244  CONFIG_MTD_CFI_AMDSTD=m
   6.245 -CONFIG_MTD_CFI_AMDSTD_RETRY=3
   6.246  CONFIG_MTD_CFI_STAA=m
   6.247  CONFIG_MTD_CFI_UTIL=m
   6.248  CONFIG_MTD_RAM=m
   6.249 @@ -815,7 +824,6 @@ CONFIG_MTD_M25P80=m
   6.250  CONFIG_MTD_MTDRAM=m
   6.251  CONFIG_MTDRAM_TOTAL_SIZE=4096
   6.252  CONFIG_MTDRAM_ERASE_SIZE=128
   6.253 -# CONFIG_MTD_BLKMTD is not set
   6.254  CONFIG_MTD_BLOCK2MTD=m
   6.255  
   6.256  #
   6.257 @@ -1092,10 +1100,8 @@ CONFIG_SCSI_SYM53C8XX_2=m
   6.258  CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
   6.259  CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
   6.260  CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
   6.261 -# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
   6.262 +CONFIG_SCSI_SYM53C8XX_MMIO=y
   6.263  # CONFIG_SCSI_IPR is not set
   6.264 -CONFIG_SCSI_QLOGIC_FC=m
   6.265 -CONFIG_SCSI_QLOGIC_FC_FIRMWARE=y
   6.266  CONFIG_SCSI_QLOGIC_1280=m
   6.267  CONFIG_SCSI_QLA_FC=m
   6.268  # CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE is not set
   6.269 @@ -1121,6 +1127,7 @@ CONFIG_MD_RAID0=m
   6.270  CONFIG_MD_RAID1=m
   6.271  CONFIG_MD_RAID10=m
   6.272  CONFIG_MD_RAID5=m
   6.273 +CONFIG_MD_RAID5_RESHAPE=y
   6.274  CONFIG_MD_RAID6=m
   6.275  CONFIG_MD_MULTIPATH=m
   6.276  CONFIG_MD_FAULTY=m
   6.277 @@ -1326,6 +1333,7 @@ CONFIG_ABYSS=m
   6.278  # Wireless LAN (non-hamradio)
   6.279  #
   6.280  CONFIG_NET_RADIO=y
   6.281 +CONFIG_NET_WIRELESS_RTNETLINK=y
   6.282  
   6.283  #
   6.284  # Obsolete Wireless cards support (pre-802.11)
   6.285 @@ -1346,6 +1354,8 @@ CONFIG_IPW2100=m
   6.286  CONFIG_IPW2100_MONITOR=y
   6.287  # CONFIG_IPW2100_DEBUG is not set
   6.288  CONFIG_IPW2200=m
   6.289 +CONFIG_IPW2200_MONITOR=y
   6.290 +CONFIG_IPW_QOS=y
   6.291  # CONFIG_IPW2200_DEBUG is not set
   6.292  CONFIG_AIRO=m
   6.293  CONFIG_HERMES=m
   6.294 @@ -1375,6 +1385,13 @@ CONFIG_HOSTAP_FIRMWARE_NVRAM=y
   6.295  CONFIG_HOSTAP_PLX=m
   6.296  CONFIG_HOSTAP_PCI=m
   6.297  # CONFIG_HOSTAP_CS is not set
   6.298 +CONFIG_BCM43XX=m
   6.299 +CONFIG_BCM43XX_DEBUG=y
   6.300 +CONFIG_BCM43XX_DMA=y
   6.301 +CONFIG_BCM43XX_PIO=y
   6.302 +CONFIG_BCM43XX_DMA_AND_PIO_MODE=y
   6.303 +# CONFIG_BCM43XX_DMA_MODE is not set
   6.304 +# CONFIG_BCM43XX_PIO_MODE is not set
   6.305  CONFIG_NET_WIRELESS=y
   6.306  
   6.307  #
   6.308 @@ -1528,6 +1545,15 @@ CONFIG_HISAX_HDLC=y
   6.309  #
   6.310  
   6.311  #
   6.312 +# Siemens Gigaset
   6.313 +#
   6.314 +CONFIG_ISDN_DRV_GIGASET=m
   6.315 +CONFIG_GIGASET_BASE=m
   6.316 +CONFIG_GIGASET_M105=m
   6.317 +# CONFIG_GIGASET_DEBUG is not set
   6.318 +# CONFIG_GIGASET_UNDOCREQ is not set
   6.319 +
   6.320 +#
   6.321  # CAPI subsystem
   6.322  #
   6.323  CONFIG_ISDN_CAPI=m
   6.324 @@ -1739,6 +1765,8 @@ CONFIG_APPLICOM=m
   6.325  CONFIG_AGP=m
   6.326  CONFIG_AGP_AMD64=m
   6.327  CONFIG_AGP_INTEL=m
   6.328 +CONFIG_AGP_SIS=m
   6.329 +CONFIG_AGP_VIA=m
   6.330  CONFIG_DRM=m
   6.331  CONFIG_DRM_TDFX=m
   6.332  CONFIG_DRM_R128=m
   6.333 @@ -1804,7 +1832,6 @@ CONFIG_I2C_PARPORT=m
   6.334  CONFIG_I2C_PARPORT_LIGHT=m
   6.335  CONFIG_I2C_PROSAVAGE=m
   6.336  CONFIG_I2C_SAVAGE4=m
   6.337 -CONFIG_SCx200_ACB=m
   6.338  CONFIG_I2C_SIS5595=m
   6.339  CONFIG_I2C_SIS630=m
   6.340  CONFIG_I2C_SIS96X=m
   6.341 @@ -1823,9 +1850,7 @@ CONFIG_SENSORS_EEPROM=m
   6.342  CONFIG_SENSORS_PCF8574=m
   6.343  CONFIG_SENSORS_PCA9539=m
   6.344  CONFIG_SENSORS_PCF8591=m
   6.345 -CONFIG_SENSORS_RTC8564=m
   6.346  CONFIG_SENSORS_MAX6875=m
   6.347 -CONFIG_RTC_X1205_I2C=m
   6.348  # CONFIG_I2C_DEBUG_CORE is not set
   6.349  # CONFIG_I2C_DEBUG_ALGO is not set
   6.350  # CONFIG_I2C_DEBUG_BUS is not set
   6.351 @@ -1852,13 +1877,21 @@ CONFIG_SPI_BUTTERFLY=m
   6.352  # Dallas's 1-wire bus
   6.353  #
   6.354  CONFIG_W1=m
   6.355 -CONFIG_W1_MATROX=m
   6.356 -CONFIG_W1_DS9490=m
   6.357 -CONFIG_W1_DS9490_BRIDGE=m
   6.358 -CONFIG_W1_THERM=m
   6.359 -CONFIG_W1_SMEM=m
   6.360 -CONFIG_W1_DS2433=m
   6.361 -CONFIG_W1_DS2433_CRC=y
   6.362 +
   6.363 +#
   6.364 +# 1-wire Bus Masters
   6.365 +#
   6.366 +CONFIG_W1_MASTER_MATROX=m
   6.367 +CONFIG_W1_MASTER_DS9490=m
   6.368 +CONFIG_W1_MASTER_DS9490_BRIDGE=m
   6.369 +CONFIG_W1_MASTER_DS2482=m
   6.370 +
   6.371 +#
   6.372 +# 1-wire Slaves
   6.373 +#
   6.374 +CONFIG_W1_SLAVE_THERM=m
   6.375 +CONFIG_W1_SLAVE_SMEM=m
   6.376 +CONFIG_W1_SLAVE_DS2433=m
   6.377  
   6.378  #
   6.379  # Hardware Monitoring support
   6.380 @@ -1910,22 +1943,22 @@ CONFIG_SENSORS_HDAPS=m
   6.381  CONFIG_IBM_ASM=m
   6.382  
   6.383  #
   6.384 -# Multimedia Capabilities Port drivers
   6.385 -#
   6.386 -
   6.387 -#
   6.388  # Multimedia devices
   6.389  #
   6.390  CONFIG_VIDEO_DEV=m
   6.391 +CONFIG_VIDEO_V4L1=y
   6.392 +CONFIG_VIDEO_V4L1_COMPAT=y
   6.393 +CONFIG_VIDEO_V4L2=m
   6.394  
   6.395  #
   6.396 -# Video For Linux
   6.397 +# Video Capture Adapters
   6.398  #
   6.399  
   6.400  #
   6.401 -# Video Adapters
   6.402 +# Video Capture Adapters
   6.403  #
   6.404  # CONFIG_VIDEO_ADV_DEBUG is not set
   6.405 +CONFIG_VIDEO_VIVI=m
   6.406  CONFIG_VIDEO_BT848=m
   6.407  CONFIG_VIDEO_BT848_DVB=y
   6.408  CONFIG_VIDEO_SAA6588=m
   6.409 @@ -1935,6 +1968,7 @@ CONFIG_VIDEO_W9966=m
   6.410  CONFIG_VIDEO_CPIA=m
   6.411  CONFIG_VIDEO_CPIA_PP=m
   6.412  CONFIG_VIDEO_CPIA_USB=m
   6.413 +CONFIG_VIDEO_CPIA2=m
   6.414  CONFIG_VIDEO_SAA5246A=m
   6.415  CONFIG_VIDEO_SAA5249=m
   6.416  CONFIG_TUNER_3036=m
   6.417 @@ -1953,15 +1987,43 @@ CONFIG_VIDEO_MXB=m
   6.418  CONFIG_VIDEO_DPC=m
   6.419  CONFIG_VIDEO_HEXIUM_ORION=m
   6.420  CONFIG_VIDEO_HEXIUM_GEMINI=m
   6.421 +CONFIG_VIDEO_CX88_VP3054=m
   6.422  CONFIG_VIDEO_CX88=m
   6.423  CONFIG_VIDEO_CX88_ALSA=m
   6.424  CONFIG_VIDEO_CX88_DVB=m
   6.425  CONFIG_VIDEO_CX88_DVB_ALL_FRONTENDS=y
   6.426 -CONFIG_VIDEO_CX88_VP3054=m
   6.427 +CONFIG_VIDEO_OVCAMCHIP=m
   6.428 +
   6.429 +#
   6.430 +# Encoders and Decoders
   6.431 +#
   6.432 +CONFIG_VIDEO_MSP3400=m
   6.433 +CONFIG_VIDEO_CS53L32A=m
   6.434 +CONFIG_VIDEO_WM8775=m
   6.435 +CONFIG_VIDEO_WM8739=m
   6.436 +CONFIG_VIDEO_CX25840=m
   6.437 +CONFIG_VIDEO_SAA711X=m
   6.438 +CONFIG_VIDEO_SAA7127=m
   6.439 +CONFIG_VIDEO_UPD64031A=m
   6.440 +CONFIG_VIDEO_UPD64083=m
   6.441 +
   6.442 +#
   6.443 +# V4L USB devices
   6.444 +#
   6.445  CONFIG_VIDEO_EM28XX=m
   6.446 -CONFIG_VIDEO_OVCAMCHIP=m
   6.447 -CONFIG_VIDEO_AUDIO_DECODER=m
   6.448 -CONFIG_VIDEO_DECODER=m
   6.449 +CONFIG_USB_DSBR=m
   6.450 +CONFIG_VIDEO_USBVIDEO=m
   6.451 +CONFIG_USB_VICAM=m
   6.452 +CONFIG_USB_IBMCAM=m
   6.453 +CONFIG_USB_KONICAWC=m
   6.454 +CONFIG_USB_ET61X251=m
   6.455 +CONFIG_USB_OV511=m
   6.456 +CONFIG_USB_SE401=m
   6.457 +CONFIG_USB_SN9C102=m
   6.458 +CONFIG_USB_STV680=m
   6.459 +CONFIG_USB_W9968CF=m
   6.460 +CONFIG_USB_ZC0301=m
   6.461 +CONFIG_USB_PWC=m
   6.462  
   6.463  #
   6.464  # Radio Adapters
   6.465 @@ -2060,6 +2122,7 @@ CONFIG_DVB_L64781=m
   6.466  CONFIG_DVB_TDA1004X=m
   6.467  CONFIG_DVB_NXT6000=m
   6.468  CONFIG_DVB_MT352=m
   6.469 +CONFIG_DVB_ZL10353=m
   6.470  CONFIG_DVB_DIB3000MB=m
   6.471  CONFIG_DVB_DIB3000MC=m
   6.472  
   6.473 @@ -2087,6 +2150,7 @@ CONFIG_VIDEO_BUF_DVB=m
   6.474  CONFIG_VIDEO_BTCX=m
   6.475  CONFIG_VIDEO_IR=m
   6.476  CONFIG_VIDEO_TVEEPROM=m
   6.477 +CONFIG_USB_DABUSB=m
   6.478  
   6.479  #
   6.480  # Graphics support
   6.481 @@ -2096,6 +2160,7 @@ CONFIG_FB_CFB_FILLRECT=y
   6.482  CONFIG_FB_CFB_COPYAREA=y
   6.483  CONFIG_FB_CFB_IMAGEBLIT=y
   6.484  # CONFIG_FB_MACMODES is not set
   6.485 +CONFIG_FB_FIRMWARE_EDID=y
   6.486  CONFIG_FB_MODE_HELPERS=y
   6.487  CONFIG_FB_TILEBLITTING=y
   6.488  CONFIG_FB_CIRRUS=m
   6.489 @@ -2122,7 +2187,6 @@ CONFIG_FB_MATROX_G=y
   6.490  CONFIG_FB_MATROX_I2C=m
   6.491  CONFIG_FB_MATROX_MAVEN=m
   6.492  CONFIG_FB_MATROX_MULTIHEAD=y
   6.493 -# CONFIG_FB_RADEON_OLD is not set
   6.494  CONFIG_FB_RADEON=m
   6.495  CONFIG_FB_RADEON_I2C=y
   6.496  # CONFIG_FB_RADEON_DEBUG is not set
   6.497 @@ -2145,6 +2209,7 @@ CONFIG_FB_VOODOO1=m
   6.498  CONFIG_FB_TRIDENT=m
   6.499  CONFIG_FB_TRIDENT_ACCEL=y
   6.500  CONFIG_FB_GEODE=y
   6.501 +CONFIG_FB_GEODE_GX=m
   6.502  CONFIG_FB_GEODE_GX1=m
   6.503  CONFIG_FB_VIRTUAL=m
   6.504  
   6.505 @@ -2152,6 +2217,7 @@ CONFIG_FB_VIRTUAL=m
   6.506  # Console display driver support
   6.507  #
   6.508  CONFIG_VGA_CONSOLE=y
   6.509 +# CONFIG_VGACON_SOFT_SCROLLBACK is not set
   6.510  CONFIG_DUMMY_CONSOLE=y
   6.511  CONFIG_FRAMEBUFFER_CONSOLE=y
   6.512  CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
   6.513 @@ -2190,11 +2256,13 @@ CONFIG_SND_SEQ_DUMMY=m
   6.514  CONFIG_SND_OSSEMUL=y
   6.515  CONFIG_SND_MIXER_OSS=m
   6.516  CONFIG_SND_PCM_OSS=m
   6.517 +CONFIG_SND_PCM_OSS_PLUGINS=y
   6.518  CONFIG_SND_SEQUENCER_OSS=y
   6.519  CONFIG_SND_RTCTIMER=m
   6.520  CONFIG_SND_SEQ_RTCTIMER_DEFAULT=y
   6.521  CONFIG_SND_DYNAMIC_MINORS=y
   6.522  CONFIG_SND_SUPPORT_OLD_API=y
   6.523 +CONFIG_SND_VERBOSE_PROCFS=y
   6.524  # CONFIG_SND_VERBOSE_PRINTK is not set
   6.525  # CONFIG_SND_DEBUG is not set
   6.526  
   6.527 @@ -2216,6 +2284,7 @@ CONFIG_SND_MPU401=m
   6.528  # PCI devices
   6.529  #
   6.530  CONFIG_SND_AD1889=m
   6.531 +CONFIG_SND_ALS300=m
   6.532  CONFIG_SND_ALS4000=m
   6.533  CONFIG_SND_ALI5451=m
   6.534  CONFIG_SND_ATIIXP=m
   6.535 @@ -2238,7 +2307,6 @@ CONFIG_SND_ENS1371=m
   6.536  CONFIG_SND_ES1938=m
   6.537  CONFIG_SND_ES1968=m
   6.538  CONFIG_SND_FM801=m
   6.539 -# CONFIG_SND_FM801_TEA575X_BOOL is not set
   6.540  CONFIG_SND_FM801_TEA575X=m
   6.541  CONFIG_SND_HDA_INTEL=m
   6.542  CONFIG_SND_HDSP=m
   6.543 @@ -2252,6 +2320,7 @@ CONFIG_SND_MAESTRO3=m
   6.544  CONFIG_SND_MIXART=m
   6.545  CONFIG_SND_NM256=m
   6.546  CONFIG_SND_PCXHR=m
   6.547 +CONFIG_SND_RIPTIDE=m
   6.548  CONFIG_SND_RME32=m
   6.549  CONFIG_SND_RME96=m
   6.550  CONFIG_SND_RME9652=m
   6.551 @@ -2271,6 +2340,8 @@ CONFIG_SND_USB_USX2Y=m
   6.552  #
   6.553  # PCMCIA devices
   6.554  #
   6.555 +CONFIG_SND_VXPOCKET=m
   6.556 +CONFIG_SND_PDAUDIOCF=m
   6.557  
   6.558  #
   6.559  # Open Sound System
   6.560 @@ -2282,6 +2353,7 @@ CONFIG_SND_USB_USX2Y=m
   6.561  #
   6.562  CONFIG_USB_ARCH_HAS_HCD=y
   6.563  CONFIG_USB_ARCH_HAS_OHCI=y
   6.564 +CONFIG_USB_ARCH_HAS_EHCI=y
   6.565  CONFIG_USB=m
   6.566  # CONFIG_USB_DEBUG is not set
   6.567  
   6.568 @@ -2311,7 +2383,6 @@ CONFIG_USB_SL811_HCD=m
   6.569  #
   6.570  # USB Device Class drivers
   6.571  #
   6.572 -# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
   6.573  CONFIG_USB_ACM=m
   6.574  CONFIG_USB_PRINTER=m
   6.575  
   6.576 @@ -2357,9 +2428,11 @@ CONFIG_USB_WACOM=m
   6.577  CONFIG_USB_ACECAD=m
   6.578  CONFIG_USB_KBTAB=m
   6.579  CONFIG_USB_POWERMATE=m
   6.580 -CONFIG_USB_MTOUCH=m
   6.581 -CONFIG_USB_ITMTOUCH=m
   6.582 -CONFIG_USB_EGALAX=m
   6.583 +CONFIG_USB_TOUCHSCREEN=m
   6.584 +CONFIG_USB_TOUCHSCREEN_EGALAX=y
   6.585 +CONFIG_USB_TOUCHSCREEN_PANJIT=y
   6.586 +CONFIG_USB_TOUCHSCREEN_3M=y
   6.587 +CONFIG_USB_TOUCHSCREEN_ITM=y
   6.588  CONFIG_USB_YEALINK=m
   6.589  CONFIG_USB_XPAD=m
   6.590  CONFIG_USB_ATI_REMOTE=m
   6.591 @@ -2374,22 +2447,6 @@ CONFIG_USB_MDC800=m
   6.592  CONFIG_USB_MICROTEK=m
   6.593  
   6.594  #
   6.595 -# USB Multimedia devices
   6.596 -#
   6.597 -CONFIG_USB_DABUSB=m
   6.598 -CONFIG_USB_VICAM=m
   6.599 -CONFIG_USB_DSBR=m
   6.600 -CONFIG_USB_ET61X251=m
   6.601 -CONFIG_USB_IBMCAM=m
   6.602 -CONFIG_USB_KONICAWC=m
   6.603 -CONFIG_USB_OV511=m
   6.604 -CONFIG_USB_SE401=m
   6.605 -CONFIG_USB_SN9C102=m
   6.606 -CONFIG_USB_STV680=m
   6.607 -CONFIG_USB_W9968CF=m
   6.608 -CONFIG_USB_PWC=m
   6.609 -
   6.610 -#
   6.611  # USB Network Adapters
   6.612  #
   6.613  CONFIG_USB_CATC=m
   6.614 @@ -2425,6 +2482,7 @@ CONFIG_USB_SERIAL=m
   6.615  CONFIG_USB_SERIAL_GENERIC=y
   6.616  CONFIG_USB_SERIAL_AIRPRIME=m
   6.617  CONFIG_USB_SERIAL_ANYDATA=m
   6.618 +CONFIG_USB_SERIAL_ARK3116=m
   6.619  CONFIG_USB_SERIAL_BELKIN=m
   6.620  CONFIG_USB_SERIAL_WHITEHEAT=m
   6.621  CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
   6.622 @@ -2432,6 +2490,7 @@ CONFIG_USB_SERIAL_CP2101=m
   6.623  CONFIG_USB_SERIAL_CYPRESS_M8=m
   6.624  CONFIG_USB_SERIAL_EMPEG=m
   6.625  CONFIG_USB_SERIAL_FTDI_SIO=m
   6.626 +CONFIG_USB_SERIAL_FUNSOFT=m
   6.627  CONFIG_USB_SERIAL_VISOR=m
   6.628  CONFIG_USB_SERIAL_IPAQ=m
   6.629  CONFIG_USB_SERIAL_IR=m
   6.630 @@ -2456,6 +2515,7 @@ CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
   6.631  CONFIG_USB_SERIAL_KLSI=m
   6.632  CONFIG_USB_SERIAL_KOBIL_SCT=m
   6.633  CONFIG_USB_SERIAL_MCT_U232=m
   6.634 +CONFIG_USB_SERIAL_NAVMAN=m
   6.635  CONFIG_USB_SERIAL_PL2303=m
   6.636  CONFIG_USB_SERIAL_HP4X=m
   6.637  CONFIG_USB_SERIAL_SAFE=m
   6.638 @@ -2506,18 +2566,37 @@ CONFIG_USB_XUSBATM=m
   6.639  CONFIG_MMC=m
   6.640  # CONFIG_MMC_DEBUG is not set
   6.641  CONFIG_MMC_BLOCK=m
   6.642 +CONFIG_MMC_SDHCI=m
   6.643  CONFIG_MMC_WBSD=m
   6.644  
   6.645  #
   6.646 +# LED devices
   6.647 +#
   6.648 +CONFIG_NEW_LEDS=y
   6.649 +CONFIG_LEDS_CLASS=m
   6.650 +
   6.651 +#
   6.652 +# LED drivers
   6.653 +#
   6.654 +
   6.655 +#
   6.656 +# LED Triggers
   6.657 +#
   6.658 +CONFIG_LEDS_TRIGGERS=y
   6.659 +CONFIG_LEDS_TRIGGER_TIMER=m
   6.660 +CONFIG_LEDS_TRIGGER_IDE_DISK=y
   6.661 +
   6.662 +#
   6.663  # InfiniBand support
   6.664  #
   6.665  CONFIG_INFINIBAND=m
   6.666  CONFIG_INFINIBAND_USER_MAD=m
   6.667  CONFIG_INFINIBAND_USER_ACCESS=m
   6.668  CONFIG_INFINIBAND_MTHCA=m
   6.669 -# CONFIG_INFINIBAND_MTHCA_DEBUG is not set
   6.670 +CONFIG_INFINIBAND_MTHCA_DEBUG=y
   6.671  CONFIG_INFINIBAND_IPOIB=m
   6.672 -# CONFIG_INFINIBAND_IPOIB_DEBUG is not set
   6.673 +CONFIG_INFINIBAND_IPOIB_DEBUG=y
   6.674 +# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
   6.675  CONFIG_INFINIBAND_SRP=m
   6.676  
   6.677  #
   6.678 @@ -2530,14 +2609,33 @@ CONFIG_EDAC=m
   6.679  #
   6.680  # CONFIG_EDAC_DEBUG is not set
   6.681  CONFIG_EDAC_MM_EDAC=m
   6.682 -CONFIG_EDAC_E7XXX=m
   6.683  CONFIG_EDAC_E752X=m
   6.684 -CONFIG_EDAC_I82875P=m
   6.685 -CONFIG_EDAC_I82860=m
   6.686 -CONFIG_EDAC_R82600=m
   6.687  CONFIG_EDAC_POLL=y
   6.688  
   6.689  #
   6.690 +# Real Time Clock
   6.691 +#
   6.692 +CONFIG_RTC_LIB=m
   6.693 +CONFIG_RTC_CLASS=m
   6.694 +
   6.695 +#
   6.696 +# RTC interfaces
   6.697 +#
   6.698 +CONFIG_RTC_INTF_SYSFS=m
   6.699 +CONFIG_RTC_INTF_PROC=m
   6.700 +CONFIG_RTC_INTF_DEV=m
   6.701 +
   6.702 +#
   6.703 +# RTC drivers
   6.704 +#
   6.705 +CONFIG_RTC_DRV_X1205=m
   6.706 +CONFIG_RTC_DRV_DS1672=m
   6.707 +CONFIG_RTC_DRV_PCF8563=m
   6.708 +CONFIG_RTC_DRV_RS5C372=m
   6.709 +CONFIG_RTC_DRV_M48T86=m
   6.710 +CONFIG_RTC_DRV_TEST=m
   6.711 +
   6.712 +#
   6.713  # Firmware Drivers
   6.714  #
   6.715  CONFIG_DELL_RBU=m
   6.716 @@ -2621,7 +2719,6 @@ CONFIG_SYSFS=y
   6.717  CONFIG_TMPFS=y
   6.718  # CONFIG_HUGETLB_PAGE is not set
   6.719  CONFIG_RAMFS=y
   6.720 -CONFIG_RELAYFS_FS=m
   6.721  CONFIG_CONFIGFS_FS=m
   6.722  
   6.723  #
   6.724 @@ -2793,6 +2890,7 @@ CONFIG_DETECT_SOFTLOCKUP=y
   6.725  # CONFIG_DEBUG_FS is not set
   6.726  # CONFIG_DEBUG_VM is not set
   6.727  # CONFIG_FRAME_POINTER is not set
   6.728 +# CONFIG_UNWIND_INFO is not set
   6.729  CONFIG_FORCED_INLINING=y
   6.730  # CONFIG_RCU_TORTURE_TEST is not set
   6.731  # CONFIG_DEBUG_RODATA is not set
   6.732 @@ -2844,26 +2942,27 @@ CONFIG_CRYPTO_TEST=m
   6.733  # Hardware crypto devices
   6.734  #
   6.735  CONFIG_XEN=y
   6.736 -CONFIG_XEN_INTERFACE_VERSION=0x00030202
   6.737 +CONFIG_XEN_INTERFACE_VERSION=0x00030203
   6.738  
   6.739  #
   6.740  # XEN
   6.741  #
   6.742  CONFIG_XEN_PRIVILEGED_GUEST=y
   6.743  # CONFIG_XEN_UNPRIVILEGED_GUEST is not set
   6.744 +CONFIG_XEN_PRIVCMD=y
   6.745 +CONFIG_XEN_XENBUS_DEV=y
   6.746  CONFIG_XEN_BACKEND=y
   6.747 +CONFIG_XEN_BLKDEV_BACKEND=y
   6.748 +CONFIG_XEN_BLKDEV_TAP=y
   6.749 +CONFIG_XEN_NETDEV_BACKEND=y
   6.750 +# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
   6.751 +CONFIG_XEN_NETDEV_LOOPBACK=y
   6.752  CONFIG_XEN_PCIDEV_BACKEND=m
   6.753  # CONFIG_XEN_PCIDEV_BACKEND_VPCI is not set
   6.754  CONFIG_XEN_PCIDEV_BACKEND_PASS=y
   6.755  # CONFIG_XEN_PCIDEV_BACKEND_SLOT is not set
   6.756  # CONFIG_XEN_PCIDEV_BE_DEBUG is not set
   6.757 -CONFIG_XEN_BLKDEV_BACKEND=y
   6.758 -CONFIG_XEN_BLKDEV_TAP=y
   6.759 -CONFIG_XEN_NETDEV_BACKEND=y
   6.760 -# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
   6.761 -CONFIG_XEN_NETDEV_LOOPBACK=y
   6.762  CONFIG_XEN_TPMDEV_BACKEND=m
   6.763 -# CONFIG_XEN_TPMDEV_CLOSE_IF_VTPM_FAILS is not set
   6.764  CONFIG_XEN_BLKDEV_FRONTEND=y
   6.765  CONFIG_XEN_NETDEV_FRONTEND=y
   6.766  CONFIG_XEN_FRAMEBUFFER=y
   6.767 @@ -2876,7 +2975,14 @@ CONFIG_XEN_COMPAT_030002_AND_LATER=y
   6.768  CONFIG_XEN_COMPAT_030002=y
   6.769  CONFIG_HAVE_ARCH_ALLOC_SKB=y
   6.770  CONFIG_HAVE_ARCH_DEV_ALLOC_SKB=y
   6.771 +CONFIG_HAVE_IRQ_IGNORE_UNHANDLED=y
   6.772  CONFIG_NO_IDLE_HZ=y
   6.773 +CONFIG_XEN_UTIL=y
   6.774 +CONFIG_XEN_BALLOON=y
   6.775 +CONFIG_XEN_DEVMEM=y
   6.776 +CONFIG_XEN_SKBUFF=y
   6.777 +CONFIG_XEN_REBOOT=y
   6.778 +CONFIG_XEN_SMPBOOT=y
   6.779  
   6.780  #
   6.781  # Library routines
     7.1 --- a/buildconfigs/mk.linux-2.6-xen	Tue Jan 09 10:50:46 2007 +0000
     7.2 +++ b/buildconfigs/mk.linux-2.6-xen	Fri Jan 12 14:30:49 2007 +0000
     7.3 @@ -1,5 +1,5 @@
     7.4  LINUX_SERIES = 2.6
     7.5 -LINUX_VER    = 2.6.16.33
     7.6 +LINUX_VER    = 2.6.17
     7.7  
     7.8  EXTRAVERSION ?= xen
     7.9  
     8.1 --- a/linux-2.6-xen-sparse/arch/i386/Kconfig	Tue Jan 09 10:50:46 2007 +0000
     8.2 +++ b/linux-2.6-xen-sparse/arch/i386/Kconfig	Fri Jan 12 14:30:49 2007 +0000
     8.3 @@ -37,6 +37,10 @@ config GENERIC_IOMAP
     8.4  	bool
     8.5  	default y
     8.6  
     8.7 +config GENERIC_HWEIGHT
     8.8 +	bool
     8.9 +	default y
    8.10 +
    8.11  config ARCH_MAY_HAVE_PC_FDC
    8.12  	bool
    8.13  	default y
    8.14 @@ -49,6 +53,35 @@ source "init/Kconfig"
    8.15  
    8.16  menu "Processor type and features"
    8.17  
    8.18 +config SMP
    8.19 +	bool "Symmetric multi-processing support"
    8.20 +	---help---
    8.21 +	  This enables support for systems with more than one CPU. If you have
    8.22 +	  a system with only one CPU, like most personal computers, say N. If
    8.23 +	  you have a system with more than one CPU, say Y.
    8.24 +
    8.25 +	  If you say N here, the kernel will run on single and multiprocessor
    8.26 +	  machines, but will use only one CPU of a multiprocessor machine. If
    8.27 +	  you say Y here, the kernel will run on many, but not all,
    8.28 +	  singleprocessor machines. On a singleprocessor machine, the kernel
    8.29 +	  will run faster if you say N here.
    8.30 +
    8.31 +	  Note that if you say Y here and choose architecture "586" or
    8.32 +	  "Pentium" under "Processor family", the kernel will not work on 486
    8.33 +	  architectures. Similarly, multiprocessor kernels for the "PPro"
    8.34 +	  architecture may not work on all Pentium based boards.
    8.35 +
    8.36 +	  People using multiprocessor machines who say Y here should also say
    8.37 +	  Y to "Enhanced Real Time Clock Support", below. The "Advanced Power
    8.38 +	  Management" code will be disabled if you say Y here.
    8.39 +
    8.40 +	  See also the <file:Documentation/smp.txt>,
    8.41 +	  <file:Documentation/i386/IO-APIC.txt>,
    8.42 +	  <file:Documentation/nmi_watchdog.txt> and the SMP-HOWTO available at
    8.43 +	  <http://www.tldp.org/docs.html#howto>.
    8.44 +
    8.45 +	  If you don't know what to do here, say N.
    8.46 +
    8.47  choice
    8.48  	prompt "Subarchitecture Type"
    8.49  	default X86_PC
    8.50 @@ -89,6 +122,7 @@ config X86_VOYAGER
    8.51  
    8.52  config X86_NUMAQ
    8.53  	bool "NUMAQ (IBM/Sequent)"
    8.54 +	select SMP
    8.55  	select NUMA
    8.56  	help
    8.57  	  This option is used for getting Linux to run on a (IBM/Sequent) NUMA
    8.58 @@ -183,48 +217,6 @@ config HPET_EMULATE_RTC
    8.59  	depends on HPET_TIMER && RTC=y
    8.60  	default y
    8.61  
    8.62 -config SMP
    8.63 -	bool "Symmetric multi-processing support"
    8.64 -	---help---
    8.65 -	  This enables support for systems with more than one CPU. If you have
    8.66 -	  a system with only one CPU, like most personal computers, say N. If
    8.67 -	  you have a system with more than one CPU, say Y.
    8.68 -
    8.69 -	  If you say N here, the kernel will run on single and multiprocessor
    8.70 -	  machines, but will use only one CPU of a multiprocessor machine. If
    8.71 -	  you say Y here, the kernel will run on many, but not all,
    8.72 -	  singleprocessor machines. On a singleprocessor machine, the kernel
    8.73 -	  will run faster if you say N here.
    8.74 -
    8.75 -	  Note that if you say Y here and choose architecture "586" or
    8.76 -	  "Pentium" under "Processor family", the kernel will not work on 486
    8.77 -	  architectures. Similarly, multiprocessor kernels for the "PPro"
    8.78 -	  architecture may not work on all Pentium based boards.
    8.79 -
    8.80 -	  People using multiprocessor machines who say Y here should also say
    8.81 -	  Y to "Enhanced Real Time Clock Support", below. The "Advanced Power
    8.82 -	  Management" code will be disabled if you say Y here.
    8.83 -
    8.84 -	  See also the <file:Documentation/smp.txt>,
    8.85 -	  <file:Documentation/i386/IO-APIC.txt>,
    8.86 -	  <file:Documentation/nmi_watchdog.txt> and the SMP-HOWTO available at
    8.87 -	  <http://www.tldp.org/docs.html#howto>.
    8.88 -
    8.89 -	  If you don't know what to do here, say N.
    8.90 -
    8.91 -config SMP_ALTERNATIVES
    8.92 -	bool "SMP alternatives support (EXPERIMENTAL)"
    8.93 -	depends on SMP && EXPERIMENTAL
    8.94 -	help
    8.95 -	  Try to reduce the overhead of running an SMP kernel on a uniprocessor
    8.96 -	  host slightly by replacing certain key instruction sequences
    8.97 -	  according to whether we currently have more than one CPU available.
    8.98 -	  This should provide a noticeable boost to performance when
    8.99 -	  running SMP kernels on UP machines, and have negligible impact
   8.100 -	  when running on an true SMP host.
   8.101 -
   8.102 -          If unsure, say N.
   8.103 -	  
   8.104  config NR_CPUS
   8.105  	int "Maximum number of CPUs (2-255)"
   8.106  	range 2 255
   8.107 @@ -249,6 +241,15 @@ config SCHED_SMT
   8.108  	  cost of slightly increased overhead in some places. If unsure say
   8.109  	  N here.
   8.110  
   8.111 +config SCHED_MC
   8.112 +	bool "Multi-core scheduler support"
   8.113 +	depends on SMP
   8.114 +	default y
   8.115 +	help
   8.116 +	  Multi-core scheduler support improves the CPU scheduler's decision
   8.117 +	  making when dealing with multi-core CPU chips at a cost of slightly
   8.118 +	  increased overhead in some places. If unsure say N here.
   8.119 +
   8.120  source "kernel/Kconfig.preempt"
   8.121  
   8.122  config X86_UP_APIC
   8.123 @@ -434,6 +435,7 @@ choice
   8.124  
   8.125  config NOHIGHMEM
   8.126  	bool "off"
   8.127 +	depends on !X86_NUMAQ
   8.128  	---help---
   8.129  	  Linux can use up to 64 Gigabytes of physical memory on x86 systems.
   8.130  	  However, the address space of 32-bit x86 processors is only 4
   8.131 @@ -470,6 +472,7 @@ config NOHIGHMEM
   8.132  
   8.133  config HIGHMEM4G
   8.134  	bool "4GB"
   8.135 +	depends on !X86_NUMAQ
   8.136  	help
   8.137  	  Select this if you have a 32-bit processor and between 1 and 4
   8.138  	  gigabytes of physical RAM.
   8.139 @@ -485,7 +488,7 @@ endchoice
   8.140  
   8.141  choice
   8.142  	depends on EXPERIMENTAL && !X86_PAE
   8.143 -	prompt "Memory split"
   8.144 +	prompt "Memory split" if EMBEDDED
   8.145  	default VMSPLIT_3G
   8.146  	help
   8.147  	  Select the desired split between kernel and user memory.
   8.148 @@ -537,13 +540,15 @@ config NUMA
   8.149  	default n if X86_PC
   8.150  	default y if (X86_NUMAQ || X86_SUMMIT)
   8.151  
   8.152 -# Need comments to help the hapless user trying to turn on NUMA support
   8.153 -comment "NUMA (NUMA-Q) requires SMP, 64GB highmem support"
   8.154 -	depends on X86_NUMAQ && (!HIGHMEM64G || !SMP)
   8.155 -
   8.156  comment "NUMA (Summit) requires SMP, 64GB highmem support, ACPI"
   8.157  	depends on X86_SUMMIT && (!HIGHMEM64G || !ACPI)
   8.158  
   8.159 +config NODES_SHIFT
   8.160 +	int
   8.161 +	default "4" if X86_NUMAQ
   8.162 +	default "3"
   8.163 +	depends on NEED_MULTIPLE_NODES
   8.164 +
   8.165  config HAVE_ARCH_BOOTMEM_NODE
   8.166  	bool
   8.167  	depends on NUMA
   8.168 @@ -697,13 +702,18 @@ config BOOT_IOREMAP
   8.169  	default y
   8.170  
   8.171  config REGPARM
   8.172 -	bool "Use register arguments (EXPERIMENTAL)"
   8.173 -	depends on EXPERIMENTAL
   8.174 -	default n
   8.175 +	bool "Use register arguments"
   8.176 +	default y
   8.177  	help
   8.178 -	Compile the kernel with -mregparm=3. This uses a different ABI
   8.179 -	and passes the first three arguments of a function call in registers.
   8.180 -	This will probably break binary only modules.
   8.181 +	Compile the kernel with -mregparm=3. This instructs gcc to use
   8.182 +	a more efficient function call ABI which passes the first three
   8.183 +	arguments of a function call via registers, which results in denser
   8.184 +	and faster code.
   8.185 +
   8.186 +	If this option is disabled, then the default ABI of passing
   8.187 +	arguments via the stack is used.
   8.188 +
   8.189 +	If unsure, say Y.
   8.190  
   8.191  config SECCOMP
   8.192  	bool "Enable seccomp to safely compute untrusted bytecode"
   8.193 @@ -772,26 +782,12 @@ config HOTPLUG_CPU
   8.194  	bool "Support for hot-pluggable CPUs (EXPERIMENTAL)"
   8.195  	depends on SMP && HOTPLUG && EXPERIMENTAL && !X86_VOYAGER
   8.196  	---help---
   8.197 -	  Say Y here to experiment with turning CPUs off and on.  CPUs
   8.198 -	  can be controlled through /sys/devices/system/cpu.
   8.199 -
   8.200 -	  Say N.
   8.201 -
   8.202 -config DOUBLEFAULT
   8.203 -	default y
   8.204 -	bool "Enable doublefault exception handler" if EMBEDDED
   8.205 -	depends on !X86_NO_TSS
   8.206 -	help
   8.207 -          This option allows trapping of rare doublefault exceptions that
   8.208 -          would otherwise cause a system to silently reboot. Disabling this
   8.209 -          option saves about 4k and might cause you much additional grey
   8.210 -          hair.
   8.211 +	  Say Y here to experiment with turning CPUs off and on, and to
   8.212 +	  enable suspend on SMP systems. CPUs can be controlled through
   8.213 +	  /sys/devices/system/cpu.
   8.214  
   8.215  endmenu
   8.216  
   8.217 -config ARCH_ENABLE_MEMORY_HOTPLUG
   8.218 -	def_bool y
   8.219 -	depends on HIGHMEM
   8.220  
   8.221  menu "Power management options (ACPI, APM)"
   8.222  	depends on !(X86_VOYAGER || XEN_UNPRIVILEGED_GUEST)
     9.1 --- a/linux-2.6-xen-sparse/arch/i386/Kconfig.cpu	Tue Jan 09 10:50:46 2007 +0000
     9.2 +++ b/linux-2.6-xen-sparse/arch/i386/Kconfig.cpu	Fri Jan 12 14:30:49 2007 +0000
     9.3 @@ -311,5 +311,5 @@ config X86_OOSTORE
     9.4  
     9.5  config X86_TSC
     9.6  	bool
     9.7 -	depends on (MWINCHIP3D || MWINCHIP2 || MCRUSOE || MEFFICEON || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || MK8 || MVIAC3_2 || MGEODEGX1) && !X86_NUMAQ
     9.8 +	depends on (MWINCHIP3D || MWINCHIP2 || MCRUSOE || MEFFICEON || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || MK8 || MVIAC3_2 || MGEODEGX1 || MGEODE_LX) && !X86_NUMAQ
     9.9  	default y
    10.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2 +++ b/linux-2.6-xen-sparse/arch/i386/Kconfig.debug	Fri Jan 12 14:30:49 2007 +0000
    10.3 @@ -0,0 +1,94 @@
    10.4 +menu "Kernel hacking"
    10.5 +
    10.6 +source "lib/Kconfig.debug"
    10.7 +
    10.8 +config EARLY_PRINTK
    10.9 +	bool "Early printk" if EMBEDDED && DEBUG_KERNEL
   10.10 +	default y
   10.11 +	help
   10.12 +	  Write kernel log output directly into the VGA buffer or to a serial
   10.13 +	  port.
   10.14 +
   10.15 +	  This is useful for kernel debugging when your machine crashes very
   10.16 +	  early before the console code is initialized. For normal operation
   10.17 +	  it is not recommended because it looks ugly and doesn't cooperate
   10.18 +	  with klogd/syslogd or the X server. You should normally N here,
   10.19 +	  unless you want to debug such a crash.
   10.20 +
   10.21 +config DEBUG_STACKOVERFLOW
   10.22 +	bool "Check for stack overflows"
   10.23 +	depends on DEBUG_KERNEL
   10.24 +	help
   10.25 +	  This option will cause messages to be printed if free stack space
   10.26 +	  drops below a certain limit.
   10.27 +
   10.28 +config DEBUG_STACK_USAGE
   10.29 +	bool "Stack utilization instrumentation"
   10.30 +	depends on DEBUG_KERNEL
   10.31 +	help
   10.32 +	  Enables the display of the minimum amount of free stack which each
   10.33 +	  task has ever had available in the sysrq-T and sysrq-P debug output.
   10.34 +
   10.35 +	  This option will slow down process creation somewhat.
   10.36 +
   10.37 +config STACK_BACKTRACE_COLS
   10.38 +	int "Stack backtraces per line" if DEBUG_KERNEL
   10.39 +	range 1 3
   10.40 +	default 2
   10.41 +	help
   10.42 +	  Selects how many stack backtrace entries per line to display.
   10.43 +
   10.44 +	  This can save screen space when displaying traces.
   10.45 +
   10.46 +comment "Page alloc debug is incompatible with Software Suspend on i386"
   10.47 +	depends on DEBUG_KERNEL && SOFTWARE_SUSPEND
   10.48 +
   10.49 +config DEBUG_PAGEALLOC
   10.50 +	bool "Debug page memory allocations"
   10.51 +	depends on DEBUG_KERNEL && !SOFTWARE_SUSPEND && !HUGETLBFS
   10.52 +	help
   10.53 +	  Unmap pages from the kernel linear mapping after free_pages().
   10.54 +	  This results in a large slowdown, but helps to find certain types
   10.55 +	  of memory corruptions.
   10.56 +
   10.57 +config DEBUG_RODATA
   10.58 +	bool "Write protect kernel read-only data structures"
   10.59 +	depends on DEBUG_KERNEL
   10.60 +	help
   10.61 +	  Mark the kernel read-only data as write-protected in the pagetables,
   10.62 +	  in order to catch accidental (and incorrect) writes to such const
   10.63 +	  data. This option may have a slight performance impact because a
   10.64 +	  portion of the kernel code won't be covered by a 2MB TLB anymore.
   10.65 +	  If in doubt, say "N".
   10.66 +
   10.67 +config 4KSTACKS
   10.68 +	bool "Use 4Kb for kernel stacks instead of 8Kb"
   10.69 +	depends on DEBUG_KERNEL
   10.70 +	help
   10.71 +	  If you say Y here the kernel will use a 4Kb stacksize for the
   10.72 +	  kernel stack attached to each process/thread. This facilitates
   10.73 +	  running more threads on a system and also reduces the pressure
   10.74 +	  on the VM subsystem for higher order allocations. This option
   10.75 +	  will also use IRQ stacks to compensate for the reduced stackspace.
   10.76 +
   10.77 +config X86_FIND_SMP_CONFIG
   10.78 +	bool
   10.79 +	depends on X86_LOCAL_APIC || X86_VOYAGER
   10.80 +	default y
   10.81 +
   10.82 +config X86_MPPARSE
   10.83 +	bool
   10.84 +	depends on X86_LOCAL_APIC && !X86_VISWS
   10.85 +	default y
   10.86 +
   10.87 +config DOUBLEFAULT
   10.88 +	default y
   10.89 +	bool "Enable doublefault exception handler" if EMBEDDED
   10.90 +	depends on !X86_NO_TSS
   10.91 +	help
   10.92 +          This option allows trapping of rare doublefault exceptions that
   10.93 +          would otherwise cause a system to silently reboot. Disabling this
   10.94 +          option saves about 4k and might cause you much additional grey
   10.95 +          hair.
   10.96 +
   10.97 +endmenu
    11.1 --- a/linux-2.6-xen-sparse/arch/i386/Makefile	Tue Jan 09 10:50:46 2007 +0000
    11.2 +++ b/linux-2.6-xen-sparse/arch/i386/Makefile	Fri Jan 12 14:30:49 2007 +0000
    11.3 @@ -39,6 +39,9 @@ include $(srctree)/arch/i386/Makefile.cp
    11.4  
    11.5  cflags-$(CONFIG_REGPARM) += -mregparm=3
    11.6  
    11.7 +# temporary until string.h is fixed
    11.8 +cflags-y += -ffreestanding
    11.9 +
   11.10  # Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use
   11.11  # a lot more stack due to the lack of sharing of stacklots:
   11.12  CFLAGS				+= $(shell if [ $(call cc-version) -lt 0400 ] ; then echo $(call cc-option,-fno-unit-at-a-time); fi ;)
   11.13 @@ -108,8 +111,8 @@ AFLAGS += $(mflags-y)
   11.14  
   11.15  boot := arch/i386/boot
   11.16  
   11.17 -.PHONY: zImage bzImage compressed zlilo bzlilo \
   11.18 -	zdisk bzdisk fdimage fdimage144 fdimage288 install
   11.19 +PHONY += zImage bzImage compressed zlilo bzlilo \
   11.20 +         zdisk bzdisk fdimage fdimage144 fdimage288 isoimage install
   11.21  
   11.22  ifdef CONFIG_XEN
   11.23  CPPFLAGS := -Iinclude$(if $(KBUILD_SRC),2)/asm/mach-xen $(CPPFLAGS)
   11.24 @@ -141,7 +144,7 @@ zlilo bzlilo: vmlinux
   11.25  zdisk bzdisk: vmlinux
   11.26  	$(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) zdisk
   11.27  
   11.28 -fdimage fdimage144 fdimage288: vmlinux
   11.29 +fdimage fdimage144 fdimage288 isoimage: vmlinux
   11.30  	$(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@
   11.31  
   11.32  install:
   11.33 @@ -159,7 +162,10 @@ define archhelp
   11.34    echo  '		   install to $$(INSTALL_PATH) and run lilo'
   11.35    echo  '  bzdisk       - Create a boot floppy in /dev/fd0'
   11.36    echo  '  fdimage      - Create a boot floppy image'
   11.37 +  echo  '  isoimage     - Create a boot CD-ROM image'
   11.38  endef
   11.39  
   11.40 -CLEAN_FILES += arch/$(ARCH)/boot/fdimage arch/$(ARCH)/boot/mtools.conf
   11.41 +CLEAN_FILES += arch/$(ARCH)/boot/fdimage \
   11.42 +	       arch/$(ARCH)/boot/image.iso \
   11.43 +	       arch/$(ARCH)/boot/mtools.conf
   11.44  CLEAN_FILES += vmlinuz vmlinux-stripped
    12.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/Makefile	Tue Jan 09 10:50:46 2007 +0000
    12.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/Makefile	Fri Jan 12 14:30:49 2007 +0000
    12.3 @@ -6,8 +6,8 @@ extra-y := head.o init_task.o vmlinux.ld
    12.4  
    12.5  obj-y	:= process.o semaphore.o signal.o entry.o traps.o irq.o \
    12.6  		ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_i386.o \
    12.7 -		pci-dma.o i386_ksyms.o i387.o dmi_scan.o bootflag.o \
    12.8 -		quirks.o i8237.o topology.o
    12.9 +		pci-dma.o i386_ksyms.o i387.o bootflag.o \
   12.10 +		quirks.o i8237.o topology.o alternative.o
   12.11  
   12.12  obj-y				+= cpu/
   12.13  obj-y				+= timers/
   12.14 @@ -37,7 +37,6 @@ obj-$(CONFIG_EFI) 		+= efi.o efi_stub.o
   12.15  obj-$(CONFIG_DOUBLEFAULT) 	+= doublefault.o
   12.16  obj-$(CONFIG_VM86)		+= vm86.o
   12.17  obj-$(CONFIG_EARLY_PRINTK)	+= early_printk.o
   12.18 -obj-$(CONFIG_SMP_ALTERNATIVES)	+= smpalts.o
   12.19  
   12.20  EXTRA_AFLAGS   := -traditional
   12.21  
    13.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/acpi/boot-xen.c	Tue Jan 09 10:50:46 2007 +0000
    13.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/acpi/boot-xen.c	Fri Jan 12 14:30:49 2007 +0000
    13.3 @@ -671,10 +671,10 @@ unsigned long __init acpi_find_rsdp(void
    13.4  	unsigned long rsdp_phys = 0;
    13.5  
    13.6  	if (efi_enabled) {
    13.7 -		if (efi.acpi20)
    13.8 -			return __pa(efi.acpi20);
    13.9 -		else if (efi.acpi)
   13.10 -			return __pa(efi.acpi);
   13.11 +		if (efi.acpi20 != EFI_INVALID_TABLE_ADDR)
   13.12 +			return efi.acpi20;
   13.13 +		else if (efi.acpi != EFI_INVALID_TABLE_ADDR)
   13.14 +			return efi.acpi;
   13.15  	}
   13.16  	/*
   13.17  	 * Scan memory looking for the RSDP signature. First search EBDA (low
   13.18 @@ -696,6 +696,9 @@ static int __init acpi_parse_madt_lapic_
   13.19  {
   13.20  	int count;
   13.21  
   13.22 +	if (!cpu_has_apic)
   13.23 +		return -ENODEV;
   13.24 +
   13.25  	/* 
   13.26  	 * Note that the LAPIC address is obtained from the MADT (32-bit value)
   13.27  	 * and (optionally) overriden by a LAPIC_ADDR_OVR entry (64-bit value).
   13.28 @@ -754,6 +757,9 @@ static int __init acpi_parse_madt_ioapic
   13.29  		return -ENODEV;
   13.30  	}
   13.31  
   13.32 +	if (!cpu_has_apic)
   13.33 +		return -ENODEV;
   13.34 +
   13.35  	/*
   13.36  	 * if "noapic" boot option, don't look for IO-APICs
   13.37  	 */
    14.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/apic-xen.c	Tue Jan 09 10:50:46 2007 +0000
    14.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/apic-xen.c	Fri Jan 12 14:30:49 2007 +0000
    14.3 @@ -38,6 +38,7 @@
    14.4  #include <asm/i8253.h>
    14.5  
    14.6  #include <mach_apic.h>
    14.7 +#include <mach_apicdef.h>
    14.8  #include <mach_ipi.h>
    14.9  
   14.10  #include "io_ports.h"
   14.11 @@ -60,6 +61,18 @@ int enable_local_apic __initdata = 0; /*
   14.12   */
   14.13  int apic_verbosity;
   14.14  
   14.15 +int modern_apic(void)
   14.16 +{
   14.17 +	unsigned int lvr, version;
   14.18 +	/* AMD systems use old APIC versions, so check the CPU */
   14.19 +	if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD &&
   14.20 +		boot_cpu_data.x86 >= 0xf)
   14.21 +		return 1;
   14.22 +	lvr = apic_read(APIC_LVR);
   14.23 +	version = GET_APIC_VERSION(lvr);
   14.24 +	return version >= 0x14;
   14.25 +}
   14.26 +
   14.27  /*
   14.28   * 'what should we do if we get a hw irq event on an illegal vector'.
   14.29   * each architecture has to answer this themselves.
    15.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/cpu/common-xen.c	Tue Jan 09 10:50:46 2007 +0000
    15.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/cpu/common-xen.c	Fri Jan 12 14:30:49 2007 +0000
    15.3 @@ -15,6 +15,10 @@
    15.4  #include <asm/mpspec.h>
    15.5  #include <asm/apic.h>
    15.6  #include <mach_apic.h>
    15.7 +#else
    15.8 +#ifdef CONFIG_XEN
    15.9 +#define phys_pkg_id(a,b) a
   15.10 +#endif
   15.11  #endif
   15.12  #include <asm/hypervisor.h>
   15.13  
   15.14 @@ -28,9 +32,10 @@ DEFINE_PER_CPU(unsigned char, cpu_16bit_
   15.15  EXPORT_PER_CPU_SYMBOL(cpu_16bit_stack);
   15.16  #endif
   15.17  
   15.18 -static int cachesize_override __devinitdata = -1;
   15.19 -static int disable_x86_fxsr __devinitdata = 0;
   15.20 -static int disable_x86_serial_nr __devinitdata = 1;
   15.21 +static int cachesize_override __cpuinitdata = -1;
   15.22 +static int disable_x86_fxsr __cpuinitdata;
   15.23 +static int disable_x86_serial_nr __cpuinitdata = 1;
   15.24 +static int disable_x86_sep __cpuinitdata;
   15.25  
   15.26  struct cpu_dev * cpu_devs[X86_VENDOR_NUM] = {};
   15.27  
   15.28 @@ -62,7 +67,7 @@ static int __init cachesize_setup(char *
   15.29  }
   15.30  __setup("cachesize=", cachesize_setup);
   15.31  
   15.32 -int __devinit get_model_name(struct cpuinfo_x86 *c)
   15.33 +int __cpuinit get_model_name(struct cpuinfo_x86 *c)
   15.34  {
   15.35  	unsigned int *v;
   15.36  	char *p, *q;
   15.37 @@ -92,7 +97,7 @@ int __devinit get_model_name(struct cpui
   15.38  }
   15.39  
   15.40  
   15.41 -void __devinit display_cacheinfo(struct cpuinfo_x86 *c)
   15.42 +void __cpuinit display_cacheinfo(struct cpuinfo_x86 *c)
   15.43  {
   15.44  	unsigned int n, dummy, ecx, edx, l2size;
   15.45  
   15.46 @@ -133,7 +138,7 @@ void __devinit display_cacheinfo(struct 
   15.47  /* in particular, if CPUID levels 0x80000002..4 are supported, this isn't used */
   15.48  
   15.49  /* Look up CPU names by table lookup. */
   15.50 -static char __devinit *table_lookup_model(struct cpuinfo_x86 *c)
   15.51 +static char __cpuinit *table_lookup_model(struct cpuinfo_x86 *c)
   15.52  {
   15.53  	struct cpu_model_info *info;
   15.54  
   15.55 @@ -154,7 +159,7 @@ static char __devinit *table_lookup_mode
   15.56  }
   15.57  
   15.58  
   15.59 -static void __devinit get_cpu_vendor(struct cpuinfo_x86 *c, int early)
   15.60 +static void __cpuinit get_cpu_vendor(struct cpuinfo_x86 *c, int early)
   15.61  {
   15.62  	char *v = c->x86_vendor_id;
   15.63  	int i;
   15.64 @@ -190,6 +195,14 @@ static int __init x86_fxsr_setup(char * 
   15.65  __setup("nofxsr", x86_fxsr_setup);
   15.66  
   15.67  
   15.68 +static int __init x86_sep_setup(char * s)
   15.69 +{
   15.70 +	disable_x86_sep = 1;
   15.71 +	return 1;
   15.72 +}
   15.73 +__setup("nosep", x86_sep_setup);
   15.74 +
   15.75 +
   15.76  /* Standard macro to see if a specific flag is changeable */
   15.77  static inline int flag_is_changeable_p(u32 flag)
   15.78  {
   15.79 @@ -213,7 +226,7 @@ static inline int flag_is_changeable_p(u
   15.80  
   15.81  
   15.82  /* Probe for the CPUID instruction */
   15.83 -static int __devinit have_cpuid_p(void)
   15.84 +static int __cpuinit have_cpuid_p(void)
   15.85  {
   15.86  	return flag_is_changeable_p(X86_EFLAGS_ID);
   15.87  }
   15.88 @@ -257,10 +270,10 @@ static void __init early_cpu_detect(void
   15.89  	}
   15.90  }
   15.91  
   15.92 -void __devinit generic_identify(struct cpuinfo_x86 * c)
   15.93 +void __cpuinit generic_identify(struct cpuinfo_x86 * c)
   15.94  {
   15.95  	u32 tfms, xlvl;
   15.96 -	int junk;
   15.97 +	int ebx;
   15.98  
   15.99  	if (have_cpuid_p()) {
  15.100  		/* Get vendor name */
  15.101 @@ -276,7 +289,7 @@ void __devinit generic_identify(struct c
  15.102  		/* Intel-defined flags: level 0x00000001 */
  15.103  		if ( c->cpuid_level >= 0x00000001 ) {
  15.104  			u32 capability, excap;
  15.105 -			cpuid(0x00000001, &tfms, &junk, &excap, &capability);
  15.106 +			cpuid(0x00000001, &tfms, &ebx, &excap, &capability);
  15.107  			c->x86_capability[0] = capability;
  15.108  			c->x86_capability[4] = excap;
  15.109  			c->x86 = (tfms >> 8) & 15;
  15.110 @@ -286,6 +299,11 @@ void __devinit generic_identify(struct c
  15.111  			if (c->x86 >= 0x6)
  15.112  				c->x86_model += ((tfms >> 16) & 0xF) << 4;
  15.113  			c->x86_mask = tfms & 15;
  15.114 +#ifdef CONFIG_SMP
  15.115 +			c->apicid = phys_pkg_id((ebx >> 24) & 0xFF, 0);
  15.116 +#else
  15.117 +			c->apicid = (ebx >> 24) & 0xFF;
  15.118 +#endif
  15.119  		} else {
  15.120  			/* Have CPUID level 0 only - unheard of */
  15.121  			c->x86 = 4;
  15.122 @@ -310,7 +328,7 @@ void __devinit generic_identify(struct c
  15.123  #endif
  15.124  }
  15.125  
  15.126 -static void __devinit squash_the_stupid_serial_number(struct cpuinfo_x86 *c)
  15.127 +static void __cpuinit squash_the_stupid_serial_number(struct cpuinfo_x86 *c)
  15.128  {
  15.129  	if (cpu_has(c, X86_FEATURE_PN) && disable_x86_serial_nr ) {
  15.130  		/* Disable processor serial number */
  15.131 @@ -338,7 +356,7 @@ static int __init x86_serial_nr_setup(ch
  15.132  /*
  15.133   * This does the hard work of actually picking apart the CPU stuff...
  15.134   */
  15.135 -void __devinit identify_cpu(struct cpuinfo_x86 *c)
  15.136 +void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
  15.137  {
  15.138  	int i;
  15.139  
  15.140 @@ -408,6 +426,10 @@ void __devinit identify_cpu(struct cpuin
  15.141  		clear_bit(X86_FEATURE_XMM, c->x86_capability);
  15.142  	}
  15.143  
  15.144 +	/* SEP disabled? */
  15.145 +	if (disable_x86_sep)
  15.146 +		clear_bit(X86_FEATURE_SEP, c->x86_capability);
  15.147 +
  15.148  	if (disable_pse)
  15.149  		clear_bit(X86_FEATURE_PSE, c->x86_capability);
  15.150  
  15.151 @@ -420,7 +442,7 @@ void __devinit identify_cpu(struct cpuin
  15.152  		else
  15.153  			/* Last resort... */
  15.154  			sprintf(c->x86_model_id, "%02x/%02x",
  15.155 -				c->x86_vendor, c->x86_model);
  15.156 +				c->x86, c->x86_model);
  15.157  	}
  15.158  
  15.159  	/* Now the feature flags better reflect actual CPU features! */
  15.160 @@ -456,7 +478,7 @@ void __devinit identify_cpu(struct cpuin
  15.161  }
  15.162  
  15.163  #ifdef CONFIG_X86_HT
  15.164 -void __devinit detect_ht(struct cpuinfo_x86 *c)
  15.165 +void __cpuinit detect_ht(struct cpuinfo_x86 *c)
  15.166  {
  15.167  	u32 	eax, ebx, ecx, edx;
  15.168  	int 	index_msb, core_bits;
  15.169 @@ -464,7 +486,6 @@ void __devinit detect_ht(struct cpuinfo_
  15.170  
  15.171  	cpuid(1, &eax, &ebx, &ecx, &edx);
  15.172  
  15.173 -	c->apicid = phys_pkg_id((ebx >> 24) & 0xFF, 0);
  15.174  
  15.175  	if (!cpu_has(c, X86_FEATURE_HT) || cpu_has(c, X86_FEATURE_CMP_LEGACY))
  15.176  		return;
  15.177 @@ -503,7 +524,7 @@ void __devinit detect_ht(struct cpuinfo_
  15.178  }
  15.179  #endif
  15.180  
  15.181 -void __devinit print_cpu_info(struct cpuinfo_x86 *c)
  15.182 +void __cpuinit print_cpu_info(struct cpuinfo_x86 *c)
  15.183  {
  15.184  	char *vendor = NULL;
  15.185  
  15.186 @@ -703,7 +724,7 @@ void __cpuinit cpu_init(void)
  15.187  }
  15.188  
  15.189  #ifdef CONFIG_HOTPLUG_CPU
  15.190 -void __devinit cpu_uninit(void)
  15.191 +void __cpuinit cpu_uninit(void)
  15.192  {
  15.193  	int cpu = raw_smp_processor_id();
  15.194  	cpu_clear(cpu, cpu_initialized);
    16.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    16.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/cpu/intel_cacheinfo-xen.c	Fri Jan 12 14:30:49 2007 +0000
    16.3 @@ -0,0 +1,693 @@
    16.4 +/*
    16.5 + *      Routines to indentify caches on Intel CPU.
    16.6 + *
    16.7 + *      Changes:
    16.8 + *      Venkatesh Pallipadi	: Adding cache identification through cpuid(4)
    16.9 + *		Ashok Raj <ashok.raj@intel.com>: Work with CPU hotplug infrastructure.
   16.10 + */
   16.11 +
   16.12 +#include <linux/init.h>
   16.13 +#include <linux/slab.h>
   16.14 +#include <linux/device.h>
   16.15 +#include <linux/compiler.h>
   16.16 +#include <linux/cpu.h>
   16.17 +#include <linux/sched.h>
   16.18 +
   16.19 +#include <asm/processor.h>
   16.20 +#include <asm/smp.h>
   16.21 +
   16.22 +#define LVL_1_INST	1
   16.23 +#define LVL_1_DATA	2
   16.24 +#define LVL_2		3
   16.25 +#define LVL_3		4
   16.26 +#define LVL_TRACE	5
   16.27 +
   16.28 +struct _cache_table
   16.29 +{
   16.30 +	unsigned char descriptor;
   16.31 +	char cache_type;
   16.32 +	short size;
   16.33 +};
   16.34 +
   16.35 +/* all the cache descriptor types we care about (no TLB or trace cache entries) */
   16.36 +static struct _cache_table cache_table[] __cpuinitdata =
   16.37 +{
   16.38 +	{ 0x06, LVL_1_INST, 8 },	/* 4-way set assoc, 32 byte line size */
   16.39 +	{ 0x08, LVL_1_INST, 16 },	/* 4-way set assoc, 32 byte line size */
   16.40 +	{ 0x0a, LVL_1_DATA, 8 },	/* 2 way set assoc, 32 byte line size */
   16.41 +	{ 0x0c, LVL_1_DATA, 16 },	/* 4-way set assoc, 32 byte line size */
   16.42 +	{ 0x22, LVL_3,      512 },	/* 4-way set assoc, sectored cache, 64 byte line size */
   16.43 +	{ 0x23, LVL_3,      1024 },	/* 8-way set assoc, sectored cache, 64 byte line size */
   16.44 +	{ 0x25, LVL_3,      2048 },	/* 8-way set assoc, sectored cache, 64 byte line size */
   16.45 +	{ 0x29, LVL_3,      4096 },	/* 8-way set assoc, sectored cache, 64 byte line size */
   16.46 +	{ 0x2c, LVL_1_DATA, 32 },	/* 8-way set assoc, 64 byte line size */
   16.47 +	{ 0x30, LVL_1_INST, 32 },	/* 8-way set assoc, 64 byte line size */
   16.48 +	{ 0x39, LVL_2,      128 },	/* 4-way set assoc, sectored cache, 64 byte line size */
   16.49 +	{ 0x3a, LVL_2,      192 },	/* 6-way set assoc, sectored cache, 64 byte line size */
   16.50 +	{ 0x3b, LVL_2,      128 },	/* 2-way set assoc, sectored cache, 64 byte line size */
   16.51 +	{ 0x3c, LVL_2,      256 },	/* 4-way set assoc, sectored cache, 64 byte line size */
   16.52 +	{ 0x3d, LVL_2,      384 },	/* 6-way set assoc, sectored cache, 64 byte line size */
   16.53 +	{ 0x3e, LVL_2,      512 },	/* 4-way set assoc, sectored cache, 64 byte line size */
   16.54 +	{ 0x41, LVL_2,      128 },	/* 4-way set assoc, 32 byte line size */
   16.55 +	{ 0x42, LVL_2,      256 },	/* 4-way set assoc, 32 byte line size */
   16.56 +	{ 0x43, LVL_2,      512 },	/* 4-way set assoc, 32 byte line size */
   16.57 +	{ 0x44, LVL_2,      1024 },	/* 4-way set assoc, 32 byte line size */
   16.58 +	{ 0x45, LVL_2,      2048 },	/* 4-way set assoc, 32 byte line size */
   16.59 +	{ 0x46, LVL_3,      4096 },	/* 4-way set assoc, 64 byte line size */
   16.60 +	{ 0x47, LVL_3,      8192 },	/* 8-way set assoc, 64 byte line size */
   16.61 +	{ 0x49, LVL_3,      4096 },	/* 16-way set assoc, 64 byte line size */
   16.62 +	{ 0x4a, LVL_3,      6144 },	/* 12-way set assoc, 64 byte line size */
   16.63 +	{ 0x4b, LVL_3,      8192 },	/* 16-way set assoc, 64 byte line size */
   16.64 +	{ 0x4c, LVL_3,     12288 },	/* 12-way set assoc, 64 byte line size */
   16.65 +	{ 0x4d, LVL_3,     16384 },	/* 16-way set assoc, 64 byte line size */
   16.66 +	{ 0x60, LVL_1_DATA, 16 },	/* 8-way set assoc, sectored cache, 64 byte line size */
   16.67 +	{ 0x66, LVL_1_DATA, 8 },	/* 4-way set assoc, sectored cache, 64 byte line size */
   16.68 +	{ 0x67, LVL_1_DATA, 16 },	/* 4-way set assoc, sectored cache, 64 byte line size */
   16.69 +	{ 0x68, LVL_1_DATA, 32 },	/* 4-way set assoc, sectored cache, 64 byte line size */
   16.70 +	{ 0x70, LVL_TRACE,  12 },	/* 8-way set assoc */
   16.71 +	{ 0x71, LVL_TRACE,  16 },	/* 8-way set assoc */
   16.72 +	{ 0x72, LVL_TRACE,  32 },	/* 8-way set assoc */
   16.73 +	{ 0x73, LVL_TRACE,  64 },	/* 8-way set assoc */
   16.74 +	{ 0x78, LVL_2,    1024 },	/* 4-way set assoc, 64 byte line size */
   16.75 +	{ 0x79, LVL_2,     128 },	/* 8-way set assoc, sectored cache, 64 byte line size */
   16.76 +	{ 0x7a, LVL_2,     256 },	/* 8-way set assoc, sectored cache, 64 byte line size */
   16.77 +	{ 0x7b, LVL_2,     512 },	/* 8-way set assoc, sectored cache, 64 byte line size */
   16.78 +	{ 0x7c, LVL_2,    1024 },	/* 8-way set assoc, sectored cache, 64 byte line size */
   16.79 +	{ 0x7d, LVL_2,    2048 },	/* 8-way set assoc, 64 byte line size */
   16.80 +	{ 0x7f, LVL_2,     512 },	/* 2-way set assoc, 64 byte line size */
   16.81 +	{ 0x82, LVL_2,     256 },	/* 8-way set assoc, 32 byte line size */
   16.82 +	{ 0x83, LVL_2,     512 },	/* 8-way set assoc, 32 byte line size */
   16.83 +	{ 0x84, LVL_2,    1024 },	/* 8-way set assoc, 32 byte line size */
   16.84 +	{ 0x85, LVL_2,    2048 },	/* 8-way set assoc, 32 byte line size */
   16.85 +	{ 0x86, LVL_2,     512 },	/* 4-way set assoc, 64 byte line size */
   16.86 +	{ 0x87, LVL_2,    1024 },	/* 8-way set assoc, 64 byte line size */
   16.87 +	{ 0x00, 0, 0}
   16.88 +};
   16.89 +
   16.90 +
   16.91 +enum _cache_type
   16.92 +{
   16.93 +	CACHE_TYPE_NULL	= 0,
   16.94 +	CACHE_TYPE_DATA = 1,
   16.95 +	CACHE_TYPE_INST = 2,
   16.96 +	CACHE_TYPE_UNIFIED = 3
   16.97 +};
   16.98 +
   16.99 +union _cpuid4_leaf_eax {
  16.100 +	struct {
  16.101 +		enum _cache_type	type:5;
  16.102 +		unsigned int		level:3;
  16.103 +		unsigned int		is_self_initializing:1;
  16.104 +		unsigned int		is_fully_associative:1;
  16.105 +		unsigned int		reserved:4;
  16.106 +		unsigned int		num_threads_sharing:12;
  16.107 +		unsigned int		num_cores_on_die:6;
  16.108 +	} split;
  16.109 +	u32 full;
  16.110 +};
  16.111 +
  16.112 +union _cpuid4_leaf_ebx {
  16.113 +	struct {
  16.114 +		unsigned int		coherency_line_size:12;
  16.115 +		unsigned int		physical_line_partition:10;
  16.116 +		unsigned int		ways_of_associativity:10;
  16.117 +	} split;
  16.118 +	u32 full;
  16.119 +};
  16.120 +
  16.121 +union _cpuid4_leaf_ecx {
  16.122 +	struct {
  16.123 +		unsigned int		number_of_sets:32;
  16.124 +	} split;
  16.125 +	u32 full;
  16.126 +};
  16.127 +
  16.128 +struct _cpuid4_info {
  16.129 +	union _cpuid4_leaf_eax eax;
  16.130 +	union _cpuid4_leaf_ebx ebx;
  16.131 +	union _cpuid4_leaf_ecx ecx;
  16.132 +	unsigned long size;
  16.133 +	cpumask_t shared_cpu_map;
  16.134 +};
  16.135 +
  16.136 +static unsigned short			num_cache_leaves;
  16.137 +
  16.138 +static int __cpuinit cpuid4_cache_lookup(int index, struct _cpuid4_info *this_leaf)
  16.139 +{
  16.140 +	unsigned int		eax, ebx, ecx, edx;
  16.141 +	union _cpuid4_leaf_eax	cache_eax;
  16.142 +
  16.143 +	cpuid_count(4, index, &eax, &ebx, &ecx, &edx);
  16.144 +	cache_eax.full = eax;
  16.145 +	if (cache_eax.split.type == CACHE_TYPE_NULL)
  16.146 +		return -EIO; /* better error ? */
  16.147 +
  16.148 +	this_leaf->eax.full = eax;
  16.149 +	this_leaf->ebx.full = ebx;
  16.150 +	this_leaf->ecx.full = ecx;
  16.151 +	this_leaf->size = (this_leaf->ecx.split.number_of_sets + 1) *
  16.152 +		(this_leaf->ebx.split.coherency_line_size + 1) *
  16.153 +		(this_leaf->ebx.split.physical_line_partition + 1) *
  16.154 +		(this_leaf->ebx.split.ways_of_associativity + 1);
  16.155 +	return 0;
  16.156 +}
  16.157 +
  16.158 +/* will only be called once; __init is safe here */
  16.159 +static int __init find_num_cache_leaves(void)
  16.160 +{
  16.161 +	unsigned int		eax, ebx, ecx, edx;
  16.162 +	union _cpuid4_leaf_eax	cache_eax;
  16.163 +	int 			i = -1;
  16.164 +
  16.165 +	do {
  16.166 +		++i;
  16.167 +		/* Do cpuid(4) loop to find out num_cache_leaves */
  16.168 +		cpuid_count(4, i, &eax, &ebx, &ecx, &edx);
  16.169 +		cache_eax.full = eax;
  16.170 +	} while (cache_eax.split.type != CACHE_TYPE_NULL);
  16.171 +	return i;
  16.172 +}
  16.173 +
  16.174 +unsigned int __cpuinit init_intel_cacheinfo(struct cpuinfo_x86 *c)
  16.175 +{
  16.176 +	unsigned int trace = 0, l1i = 0, l1d = 0, l2 = 0, l3 = 0; /* Cache sizes */
  16.177 +	unsigned int new_l1d = 0, new_l1i = 0; /* Cache sizes from cpuid(4) */
  16.178 +	unsigned int new_l2 = 0, new_l3 = 0, i; /* Cache sizes from cpuid(4) */
  16.179 +	unsigned int l2_id = 0, l3_id = 0, num_threads_sharing, index_msb;
  16.180 +#ifdef CONFIG_SMP
  16.181 +#ifndef CONFIG_XEN
  16.182 +	unsigned int cpu = (c == &boot_cpu_data) ? 0 : (c - cpu_data);
  16.183 +#endif
  16.184 +#endif
  16.185 +
  16.186 +	if (c->cpuid_level > 3) {
  16.187 +		static int is_initialized;
  16.188 +
  16.189 +		if (is_initialized == 0) {
  16.190 +			/* Init num_cache_leaves from boot CPU */
  16.191 +			num_cache_leaves = find_num_cache_leaves();
  16.192 +			is_initialized++;
  16.193 +		}
  16.194 +
  16.195 +		/*
  16.196 +		 * Whenever possible use cpuid(4), deterministic cache
  16.197 +		 * parameters cpuid leaf to find the cache details
  16.198 +		 */
  16.199 +		for (i = 0; i < num_cache_leaves; i++) {
  16.200 +			struct _cpuid4_info this_leaf;
  16.201 +
  16.202 +			int retval;
  16.203 +
  16.204 +			retval = cpuid4_cache_lookup(i, &this_leaf);
  16.205 +			if (retval >= 0) {
  16.206 +				switch(this_leaf.eax.split.level) {
  16.207 +				    case 1:
  16.208 +					if (this_leaf.eax.split.type ==
  16.209 +							CACHE_TYPE_DATA)
  16.210 +						new_l1d = this_leaf.size/1024;
  16.211 +					else if (this_leaf.eax.split.type ==
  16.212 +							CACHE_TYPE_INST)
  16.213 +						new_l1i = this_leaf.size/1024;
  16.214 +					break;
  16.215 +				    case 2:
  16.216 +					new_l2 = this_leaf.size/1024;
  16.217 +					num_threads_sharing = 1 + this_leaf.eax.split.num_threads_sharing;
  16.218 +					index_msb = get_count_order(num_threads_sharing);
  16.219 +					l2_id = c->apicid >> index_msb;
  16.220 +					break;
  16.221 +				    case 3:
  16.222 +					new_l3 = this_leaf.size/1024;
  16.223 +					num_threads_sharing = 1 + this_leaf.eax.split.num_threads_sharing;
  16.224 +					index_msb = get_count_order(num_threads_sharing);
  16.225 +					l3_id = c->apicid >> index_msb;
  16.226 +					break;
  16.227 +				    default:
  16.228 +					break;
  16.229 +				}
  16.230 +			}
  16.231 +		}
  16.232 +	}
  16.233 +	/*
  16.234 +	 * Don't use cpuid2 if cpuid4 is supported. For P4, we use cpuid2 for
  16.235 +	 * trace cache
  16.236 +	 */
  16.237 +	if ((num_cache_leaves == 0 || c->x86 == 15) && c->cpuid_level > 1) {
  16.238 +		/* supports eax=2  call */
  16.239 +		int i, j, n;
  16.240 +		int regs[4];
  16.241 +		unsigned char *dp = (unsigned char *)regs;
  16.242 +		int only_trace = 0;
  16.243 +
  16.244 +		if (num_cache_leaves != 0 && c->x86 == 15)
  16.245 +			only_trace = 1;
  16.246 +
  16.247 +		/* Number of times to iterate */
  16.248 +		n = cpuid_eax(2) & 0xFF;
  16.249 +
  16.250 +		for ( i = 0 ; i < n ; i++ ) {
  16.251 +			cpuid(2, &regs[0], &regs[1], &regs[2], &regs[3]);
  16.252 +
  16.253 +			/* If bit 31 is set, this is an unknown format */
  16.254 +			for ( j = 0 ; j < 3 ; j++ ) {
  16.255 +				if ( regs[j] < 0 ) regs[j] = 0;
  16.256 +			}
  16.257 +
  16.258 +			/* Byte 0 is level count, not a descriptor */
  16.259 +			for ( j = 1 ; j < 16 ; j++ ) {
  16.260 +				unsigned char des = dp[j];
  16.261 +				unsigned char k = 0;
  16.262 +
  16.263 +				/* look up this descriptor in the table */
  16.264 +				while (cache_table[k].descriptor != 0)
  16.265 +				{
  16.266 +					if (cache_table[k].descriptor == des) {
  16.267 +						if (only_trace && cache_table[k].cache_type != LVL_TRACE)
  16.268 +							break;
  16.269 +						switch (cache_table[k].cache_type) {
  16.270 +						case LVL_1_INST:
  16.271 +							l1i += cache_table[k].size;
  16.272 +							break;
  16.273 +						case LVL_1_DATA:
  16.274 +							l1d += cache_table[k].size;
  16.275 +							break;
  16.276 +						case LVL_2:
  16.277 +							l2 += cache_table[k].size;
  16.278 +							break;
  16.279 +						case LVL_3:
  16.280 +							l3 += cache_table[k].size;
  16.281 +							break;
  16.282 +						case LVL_TRACE:
  16.283 +							trace += cache_table[k].size;
  16.284 +							break;
  16.285 +						}
  16.286 +
  16.287 +						break;
  16.288 +					}
  16.289 +
  16.290 +					k++;
  16.291 +				}
  16.292 +			}
  16.293 +		}
  16.294 +	}
  16.295 +
  16.296 +	if (new_l1d)
  16.297 +		l1d = new_l1d;
  16.298 +
  16.299 +	if (new_l1i)
  16.300 +		l1i = new_l1i;
  16.301 +
  16.302 +	if (new_l2) {
  16.303 +		l2 = new_l2;
  16.304 +#ifdef CONFIG_SMP
  16.305 +#ifndef CONFIG_XEN
  16.306 +		cpu_llc_id[cpu] = l2_id;
  16.307 +#endif
  16.308 +#endif
  16.309 +	}
  16.310 +
  16.311 +	if (new_l3) {
  16.312 +		l3 = new_l3;
  16.313 +#ifdef CONFIG_SMP
  16.314 +#ifndef CONFIG_XEN
  16.315 +		cpu_llc_id[cpu] = l3_id;
  16.316 +#endif
  16.317 +#endif
  16.318 +	}
  16.319 +
  16.320 +	if (trace)
  16.321 +		printk (KERN_INFO "CPU: Trace cache: %dK uops", trace);
  16.322 +	else if ( l1i )
  16.323 +		printk (KERN_INFO "CPU: L1 I cache: %dK", l1i);
  16.324 +
  16.325 +	if (l1d)
  16.326 +		printk(", L1 D cache: %dK\n", l1d);
  16.327 +	else
  16.328 +		printk("\n");
  16.329 +
  16.330 +	if (l2)
  16.331 +		printk(KERN_INFO "CPU: L2 cache: %dK\n", l2);
  16.332 +
  16.333 +	if (l3)
  16.334 +		printk(KERN_INFO "CPU: L3 cache: %dK\n", l3);
  16.335 +
  16.336 +	c->x86_cache_size = l3 ? l3 : (l2 ? l2 : (l1i+l1d));
  16.337 +
  16.338 +	return l2;
  16.339 +}
  16.340 +
  16.341 +/* pointer to _cpuid4_info array (for each cache leaf) */
  16.342 +static struct _cpuid4_info *cpuid4_info[NR_CPUS];
  16.343 +#define CPUID4_INFO_IDX(x,y)    (&((cpuid4_info[x])[y]))
  16.344 +
  16.345 +#ifdef CONFIG_SMP
  16.346 +static void __cpuinit cache_shared_cpu_map_setup(unsigned int cpu, int index)
  16.347 +{
  16.348 +	struct _cpuid4_info	*this_leaf, *sibling_leaf;
  16.349 +	unsigned long num_threads_sharing;
  16.350 +	int index_msb, i;
  16.351 +	struct cpuinfo_x86 *c = cpu_data;
  16.352 +
  16.353 +	this_leaf = CPUID4_INFO_IDX(cpu, index);
  16.354 +	num_threads_sharing = 1 + this_leaf->eax.split.num_threads_sharing;
  16.355 +
  16.356 +	if (num_threads_sharing == 1)
  16.357 +		cpu_set(cpu, this_leaf->shared_cpu_map);
  16.358 +	else {
  16.359 +		index_msb = get_count_order(num_threads_sharing);
  16.360 +
  16.361 +		for_each_online_cpu(i) {
  16.362 +			if (c[i].apicid >> index_msb ==
  16.363 +			    c[cpu].apicid >> index_msb) {
  16.364 +				cpu_set(i, this_leaf->shared_cpu_map);
  16.365 +				if (i != cpu && cpuid4_info[i])  {
  16.366 +					sibling_leaf = CPUID4_INFO_IDX(i, index);
  16.367 +					cpu_set(cpu, sibling_leaf->shared_cpu_map);
  16.368 +				}
  16.369 +			}
  16.370 +		}
  16.371 +	}
  16.372 +}
  16.373 +static void __cpuinit cache_remove_shared_cpu_map(unsigned int cpu, int index)
  16.374 +{
  16.375 +	struct _cpuid4_info	*this_leaf, *sibling_leaf;
  16.376 +	int sibling;
  16.377 +
  16.378 +	this_leaf = CPUID4_INFO_IDX(cpu, index);
  16.379 +	for_each_cpu_mask(sibling, this_leaf->shared_cpu_map) {
  16.380 +		sibling_leaf = CPUID4_INFO_IDX(sibling, index);	
  16.381 +		cpu_clear(cpu, sibling_leaf->shared_cpu_map);
  16.382 +	}
  16.383 +}
  16.384 +#else
  16.385 +static void __init cache_shared_cpu_map_setup(unsigned int cpu, int index) {}
  16.386 +static void __init cache_remove_shared_cpu_map(unsigned int cpu, int index) {}
  16.387 +#endif
  16.388 +
  16.389 +static void free_cache_attributes(unsigned int cpu)
  16.390 +{
  16.391 +	kfree(cpuid4_info[cpu]);
  16.392 +	cpuid4_info[cpu] = NULL;
  16.393 +}
  16.394 +
  16.395 +static int __cpuinit detect_cache_attributes(unsigned int cpu)
  16.396 +{
  16.397 +	struct _cpuid4_info	*this_leaf;
  16.398 +	unsigned long 		j;
  16.399 +	int 			retval;
  16.400 +	cpumask_t		oldmask;
  16.401 +
  16.402 +	if (num_cache_leaves == 0)
  16.403 +		return -ENOENT;
  16.404 +
  16.405 +	cpuid4_info[cpu] = kmalloc(
  16.406 +	    sizeof(struct _cpuid4_info) * num_cache_leaves, GFP_KERNEL);
  16.407 +	if (unlikely(cpuid4_info[cpu] == NULL))
  16.408 +		return -ENOMEM;
  16.409 +	memset(cpuid4_info[cpu], 0,
  16.410 +	    sizeof(struct _cpuid4_info) * num_cache_leaves);
  16.411 +
  16.412 +	oldmask = current->cpus_allowed;
  16.413 +	retval = set_cpus_allowed(current, cpumask_of_cpu(cpu));
  16.414 +	if (retval)
  16.415 +		goto out;
  16.416 +
  16.417 +	/* Do cpuid and store the results */
  16.418 +	retval = 0;
  16.419 +	for (j = 0; j < num_cache_leaves; j++) {
  16.420 +		this_leaf = CPUID4_INFO_IDX(cpu, j);
  16.421 +		retval = cpuid4_cache_lookup(j, this_leaf);
  16.422 +		if (unlikely(retval < 0))
  16.423 +			break;
  16.424 +		cache_shared_cpu_map_setup(cpu, j);
  16.425 +	}
  16.426 +	set_cpus_allowed(current, oldmask);
  16.427 +
  16.428 +out:
  16.429 +	if (retval)
  16.430 +		free_cache_attributes(cpu);
  16.431 +	return retval;
  16.432 +}
  16.433 +
  16.434 +#ifdef CONFIG_SYSFS
  16.435 +
  16.436 +#include <linux/kobject.h>
  16.437 +#include <linux/sysfs.h>
  16.438 +
  16.439 +extern struct sysdev_class cpu_sysdev_class; /* from drivers/base/cpu.c */
  16.440 +
  16.441 +/* pointer to kobject for cpuX/cache */
  16.442 +static struct kobject * cache_kobject[NR_CPUS];
  16.443 +
  16.444 +struct _index_kobject {
  16.445 +	struct kobject kobj;
  16.446 +	unsigned int cpu;
  16.447 +	unsigned short index;
  16.448 +};
  16.449 +
  16.450 +/* pointer to array of kobjects for cpuX/cache/indexY */
  16.451 +static struct _index_kobject *index_kobject[NR_CPUS];
  16.452 +#define INDEX_KOBJECT_PTR(x,y)    (&((index_kobject[x])[y]))
  16.453 +
  16.454 +#define show_one_plus(file_name, object, val)				\
  16.455 +static ssize_t show_##file_name						\
  16.456 +			(struct _cpuid4_info *this_leaf, char *buf)	\
  16.457 +{									\
  16.458 +	return sprintf (buf, "%lu\n", (unsigned long)this_leaf->object + val); \
  16.459 +}
  16.460 +
  16.461 +show_one_plus(level, eax.split.level, 0);
  16.462 +show_one_plus(coherency_line_size, ebx.split.coherency_line_size, 1);
  16.463 +show_one_plus(physical_line_partition, ebx.split.physical_line_partition, 1);
  16.464 +show_one_plus(ways_of_associativity, ebx.split.ways_of_associativity, 1);
  16.465 +show_one_plus(number_of_sets, ecx.split.number_of_sets, 1);
  16.466 +
  16.467 +static ssize_t show_size(struct _cpuid4_info *this_leaf, char *buf)
  16.468 +{
  16.469 +	return sprintf (buf, "%luK\n", this_leaf->size / 1024);
  16.470 +}
  16.471 +
  16.472 +static ssize_t show_shared_cpu_map(struct _cpuid4_info *this_leaf, char *buf)
  16.473 +{
  16.474 +	char mask_str[NR_CPUS];
  16.475 +	cpumask_scnprintf(mask_str, NR_CPUS, this_leaf->shared_cpu_map);
  16.476 +	return sprintf(buf, "%s\n", mask_str);
  16.477 +}
  16.478 +
  16.479 +static ssize_t show_type(struct _cpuid4_info *this_leaf, char *buf) {
  16.480 +	switch(this_leaf->eax.split.type) {
  16.481 +	    case CACHE_TYPE_DATA:
  16.482 +		return sprintf(buf, "Data\n");
  16.483 +		break;
  16.484 +	    case CACHE_TYPE_INST:
  16.485 +		return sprintf(buf, "Instruction\n");
  16.486 +		break;
  16.487 +	    case CACHE_TYPE_UNIFIED:
  16.488 +		return sprintf(buf, "Unified\n");
  16.489 +		break;
  16.490 +	    default:
  16.491 +		return sprintf(buf, "Unknown\n");
  16.492 +		break;
  16.493 +	}
  16.494 +}
  16.495 +
  16.496 +struct _cache_attr {
  16.497 +	struct attribute attr;
  16.498 +	ssize_t (*show)(struct _cpuid4_info *, char *);
  16.499 +	ssize_t (*store)(struct _cpuid4_info *, const char *, size_t count);
  16.500 +};
  16.501 +
  16.502 +#define define_one_ro(_name) \
  16.503 +static struct _cache_attr _name = \
  16.504 +	__ATTR(_name, 0444, show_##_name, NULL)
  16.505 +
  16.506 +define_one_ro(level);
  16.507 +define_one_ro(type);
  16.508 +define_one_ro(coherency_line_size);
  16.509 +define_one_ro(physical_line_partition);
  16.510 +define_one_ro(ways_of_associativity);
  16.511 +define_one_ro(number_of_sets);
  16.512 +define_one_ro(size);
  16.513 +define_one_ro(shared_cpu_map);
  16.514 +
  16.515 +static struct attribute * default_attrs[] = {
  16.516 +	&type.attr,
  16.517 +	&level.attr,
  16.518 +	&coherency_line_size.attr,
  16.519 +	&physical_line_partition.attr,
  16.520 +	&ways_of_associativity.attr,
  16.521 +	&number_of_sets.attr,
  16.522 +	&size.attr,
  16.523 +	&shared_cpu_map.attr,
  16.524 +	NULL
  16.525 +};
  16.526 +
  16.527 +#define to_object(k) container_of(k, struct _index_kobject, kobj)
  16.528 +#define to_attr(a) container_of(a, struct _cache_attr, attr)
  16.529 +
  16.530 +static ssize_t show(struct kobject * kobj, struct attribute * attr, char * buf)
  16.531 +{
  16.532 +	struct _cache_attr *fattr = to_attr(attr);
  16.533 +	struct _index_kobject *this_leaf = to_object(kobj);
  16.534 +	ssize_t ret;
  16.535 +
  16.536 +	ret = fattr->show ?
  16.537 +		fattr->show(CPUID4_INFO_IDX(this_leaf->cpu, this_leaf->index),
  16.538 +			buf) :
  16.539 +	       	0;
  16.540 +	return ret;
  16.541 +}
  16.542 +
  16.543 +static ssize_t store(struct kobject * kobj, struct attribute * attr,
  16.544 +		     const char * buf, size_t count)
  16.545 +{
  16.546 +	return 0;
  16.547 +}
  16.548 +
  16.549 +static struct sysfs_ops sysfs_ops = {
  16.550 +	.show   = show,
  16.551 +	.store  = store,
  16.552 +};
  16.553 +
  16.554 +static struct kobj_type ktype_cache = {
  16.555 +	.sysfs_ops	= &sysfs_ops,
  16.556 +	.default_attrs	= default_attrs,
  16.557 +};
  16.558 +
  16.559 +static struct kobj_type ktype_percpu_entry = {
  16.560 +	.sysfs_ops	= &sysfs_ops,
  16.561 +};
  16.562 +
  16.563 +static void cpuid4_cache_sysfs_exit(unsigned int cpu)
  16.564 +{
  16.565 +	kfree(cache_kobject[cpu]);
  16.566 +	kfree(index_kobject[cpu]);
  16.567 +	cache_kobject[cpu] = NULL;
  16.568 +	index_kobject[cpu] = NULL;
  16.569 +	free_cache_attributes(cpu);
  16.570 +}
  16.571 +
  16.572 +static int __cpuinit cpuid4_cache_sysfs_init(unsigned int cpu)
  16.573 +{
  16.574 +
  16.575 +	if (num_cache_leaves == 0)
  16.576 +		return -ENOENT;
  16.577 +
  16.578 +	detect_cache_attributes(cpu);
  16.579 +	if (cpuid4_info[cpu] == NULL)
  16.580 +		return -ENOENT;
  16.581 +
  16.582 +	/* Allocate all required memory */
  16.583 +	cache_kobject[cpu] = kmalloc(sizeof(struct kobject), GFP_KERNEL);
  16.584 +	if (unlikely(cache_kobject[cpu] == NULL))
  16.585 +		goto err_out;
  16.586 +	memset(cache_kobject[cpu], 0, sizeof(struct kobject));
  16.587 +
  16.588 +	index_kobject[cpu] = kmalloc(
  16.589 +	    sizeof(struct _index_kobject ) * num_cache_leaves, GFP_KERNEL);
  16.590 +	if (unlikely(index_kobject[cpu] == NULL))
  16.591 +		goto err_out;
  16.592 +	memset(index_kobject[cpu], 0,
  16.593 +	    sizeof(struct _index_kobject) * num_cache_leaves);
  16.594 +
  16.595 +	return 0;
  16.596 +
  16.597 +err_out:
  16.598 +	cpuid4_cache_sysfs_exit(cpu);
  16.599 +	return -ENOMEM;
  16.600 +}
  16.601 +
  16.602 +/* Add/Remove cache interface for CPU device */
  16.603 +static int __cpuinit cache_add_dev(struct sys_device * sys_dev)
  16.604 +{
  16.605 +	unsigned int cpu = sys_dev->id;
  16.606 +	unsigned long i, j;
  16.607 +	struct _index_kobject *this_object;
  16.608 +	int retval = 0;
  16.609 +
  16.610 +	retval = cpuid4_cache_sysfs_init(cpu);
  16.611 +	if (unlikely(retval < 0))
  16.612 +		return retval;
  16.613 +
  16.614 +	cache_kobject[cpu]->parent = &sys_dev->kobj;
  16.615 +	kobject_set_name(cache_kobject[cpu], "%s", "cache");
  16.616 +	cache_kobject[cpu]->ktype = &ktype_percpu_entry;
  16.617 +	retval = kobject_register(cache_kobject[cpu]);
  16.618 +
  16.619 +	for (i = 0; i < num_cache_leaves; i++) {
  16.620 +		this_object = INDEX_KOBJECT_PTR(cpu,i);
  16.621 +		this_object->cpu = cpu;
  16.622 +		this_object->index = i;
  16.623 +		this_object->kobj.parent = cache_kobject[cpu];
  16.624 +		kobject_set_name(&(this_object->kobj), "index%1lu", i);
  16.625 +		this_object->kobj.ktype = &ktype_cache;
  16.626 +		retval = kobject_register(&(this_object->kobj));
  16.627 +		if (unlikely(retval)) {
  16.628 +			for (j = 0; j < i; j++) {
  16.629 +				kobject_unregister(
  16.630 +					&(INDEX_KOBJECT_PTR(cpu,j)->kobj));
  16.631 +			}
  16.632 +			kobject_unregister(cache_kobject[cpu]);
  16.633 +			cpuid4_cache_sysfs_exit(cpu);
  16.634 +			break;
  16.635 +		}
  16.636 +	}
  16.637 +	return retval;
  16.638 +}
  16.639 +
  16.640 +static void __cpuexit cache_remove_dev(struct sys_device * sys_dev)
  16.641 +{
  16.642 +	unsigned int cpu = sys_dev->id;
  16.643 +	unsigned long i;
  16.644 +
  16.645 +	for (i = 0; i < num_cache_leaves; i++) {
  16.646 +		cache_remove_shared_cpu_map(cpu, i);
  16.647 +		kobject_unregister(&(INDEX_KOBJECT_PTR(cpu,i)->kobj));
  16.648 +	}
  16.649 +	kobject_unregister(cache_kobject[cpu]);
  16.650 +	cpuid4_cache_sysfs_exit(cpu);
  16.651 +	return;
  16.652 +}
  16.653 +
  16.654 +static int cacheinfo_cpu_callback(struct notifier_block *nfb,
  16.655 +					unsigned long action, void *hcpu)
  16.656 +{
  16.657 +	unsigned int cpu = (unsigned long)hcpu;
  16.658 +	struct sys_device *sys_dev;
  16.659 +
  16.660 +	sys_dev = get_cpu_sysdev(cpu);
  16.661 +	switch (action) {
  16.662 +	case CPU_ONLINE:
  16.663 +		cache_add_dev(sys_dev);
  16.664 +		break;
  16.665 +	case CPU_DEAD:
  16.666 +		cache_remove_dev(sys_dev);
  16.667 +		break;
  16.668 +	}
  16.669 +	return NOTIFY_OK;
  16.670 +}
  16.671 +
  16.672 +static struct notifier_block cacheinfo_cpu_notifier =
  16.673 +{
  16.674 +    .notifier_call = cacheinfo_cpu_callback,
  16.675 +};
  16.676 +
  16.677 +static int __cpuinit cache_sysfs_init(void)
  16.678 +{
  16.679 +	int i;
  16.680 +
  16.681 +	if (num_cache_leaves == 0)
  16.682 +		return 0;
  16.683 +
  16.684 +	register_cpu_notifier(&cacheinfo_cpu_notifier);
  16.685 +
  16.686 +	for_each_online_cpu(i) {
  16.687 +		cacheinfo_cpu_callback(&cacheinfo_cpu_notifier, CPU_ONLINE,
  16.688 +			(void *)(long)i);
  16.689 +	}
  16.690 +
  16.691 +	return 0;
  16.692 +}
  16.693 +
  16.694 +device_initcall(cache_sysfs_init);
  16.695 +
  16.696 +#endif
    17.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/cpu/mtrr/main-xen.c	Tue Jan 09 10:50:46 2007 +0000
    17.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/cpu/mtrr/main-xen.c	Fri Jan 12 14:30:49 2007 +0000
    17.3 @@ -4,11 +4,12 @@
    17.4  #include <linux/module.h>
    17.5  #include <linux/seq_file.h>
    17.6  #include <asm/uaccess.h>
    17.7 +#include <linux/mutex.h>
    17.8  
    17.9  #include <asm/mtrr.h>
   17.10  #include "mtrr.h"
   17.11  
   17.12 -static DECLARE_MUTEX(mtrr_sem);
   17.13 +static DEFINE_MUTEX(mtrr_mutex);
   17.14  
   17.15  void generic_get_mtrr(unsigned int reg, unsigned long *base,
   17.16  		      unsigned int *size, mtrr_type * type)
   17.17 @@ -65,7 +66,7 @@ int mtrr_add_page(unsigned long base, un
   17.18  	int error;
   17.19  	dom0_op_t op;
   17.20  
   17.21 -	down(&mtrr_sem);
   17.22 +	mutex_lock(&mtrr_mutex);
   17.23  
   17.24  	op.cmd = DOM0_ADD_MEMTYPE;
   17.25  	op.u.add_memtype.mfn     = base;
   17.26 @@ -73,7 +74,7 @@ int mtrr_add_page(unsigned long base, un
   17.27  	op.u.add_memtype.type    = type;
   17.28  	error = HYPERVISOR_dom0_op(&op);
   17.29  	if (error) {
   17.30 -		up(&mtrr_sem);
   17.31 +		mutex_unlock(&mtrr_mutex);
   17.32  		BUG_ON(error > 0);
   17.33  		return error;
   17.34  	}
   17.35 @@ -81,7 +82,7 @@ int mtrr_add_page(unsigned long base, un
   17.36  	if (increment)
   17.37  		++usage_table[op.u.add_memtype.reg];
   17.38  
   17.39 -	up(&mtrr_sem);
   17.40 +	mutex_unlock(&mtrr_mutex);
   17.41  
   17.42  	return op.u.add_memtype.reg;
   17.43  }
   17.44 @@ -118,7 +119,7 @@ int mtrr_del_page(int reg, unsigned long
   17.45  	int error = -EINVAL;
   17.46  	dom0_op_t op;
   17.47  
   17.48 -	down(&mtrr_sem);
   17.49 +	mutex_lock(&mtrr_mutex);
   17.50  
   17.51  	if (reg < 0) {
   17.52  		/*  Search for existing MTRR  */
   17.53 @@ -151,7 +152,7 @@ int mtrr_del_page(int reg, unsigned long
   17.54  	}
   17.55  	error = reg;
   17.56   out:
   17.57 -	up(&mtrr_sem);
   17.58 +	mutex_unlock(&mtrr_mutex);
   17.59  	return error;
   17.60  }
   17.61  
    18.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/crash.c	Tue Jan 09 10:50:46 2007 +0000
    18.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/crash.c	Fri Jan 12 14:30:49 2007 +0000
    18.3 @@ -69,7 +69,7 @@ static void crash_save_this_cpu(struct p
    18.4  	 * for the data I pass, and I need tags
    18.5  	 * on the data to indicate what information I have
    18.6  	 * squirrelled away.  ELF notes happen to provide
    18.7 -	 * all of that that no need to invent something new.
    18.8 +	 * all of that, so there is no need to invent something new.
    18.9  	 */
   18.10  	buf = (u32*)per_cpu_ptr(crash_notes, cpu);
   18.11  	if (!buf)
   18.12 @@ -106,7 +106,7 @@ static int crash_nmi_callback(struct pt_
   18.13  		return 1;
   18.14  	local_irq_disable();
   18.15  
   18.16 -	if (!user_mode(regs)) {
   18.17 +	if (!user_mode_vm(regs)) {
   18.18  		crash_fixup_ss_esp(&fixed_regs, regs);
   18.19  		regs = &fixed_regs;
   18.20  	}
    19.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/entry-xen.S	Tue Jan 09 10:50:46 2007 +0000
    19.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/entry-xen.S	Fri Jan 12 14:30:49 2007 +0000
    19.3 @@ -271,6 +271,10 @@ ENTRY(system_call)
    19.4  	pushl %eax			# save orig_eax
    19.5  	SAVE_ALL
    19.6  	GET_THREAD_INFO(%ebp)
    19.7 +	testl $TF_MASK,EFLAGS(%esp)
    19.8 +	jz no_singlestep
    19.9 +	orl $_TIF_SINGLESTEP,TI_flags(%ebp)
   19.10 +no_singlestep:
   19.11  					# system call tracing in operation / emulation
   19.12  	/* Note, _TIF_SECCOMP is bit number 8, and so it needs testw and not testb */
   19.13  	testw $(_TIF_SYSCALL_EMU|_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT),TI_flags(%ebp)
    20.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/head-xen.S	Tue Jan 09 10:50:46 2007 +0000
    20.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/head-xen.S	Fri Jan 12 14:30:49 2007 +0000
    20.3 @@ -7,6 +7,7 @@
    20.4  #include <linux/linkage.h>
    20.5  #include <asm/segment.h>
    20.6  #include <asm/page.h>
    20.7 +#include <asm/cache.h>
    20.8  #include <asm/thread_info.h>
    20.9  #include <asm/asm-offsets.h>
   20.10  #include <xen/interface/xen.h>
   20.11 @@ -92,6 +93,7 @@ ENTRY(empty_zero_page)
   20.12  /*
   20.13   * The Global Descriptor Table contains 28 quadwords, per-CPU.
   20.14   */
   20.15 +	.align L1_CACHE_BYTES
   20.16  ENTRY(cpu_gdt_table)
   20.17  	.quad 0x0000000000000000	/* NULL descriptor */
   20.18  	.quad 0x0000000000000000	/* 0x0b reserved */
    21.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/io_apic-xen.c	Tue Jan 09 10:50:46 2007 +0000
    21.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/io_apic-xen.c	Fri Jan 12 14:30:49 2007 +0000
    21.3 @@ -394,8 +394,8 @@ static inline void rotate_irqs_among_cpu
    21.4  {
    21.5  	int i, j;
    21.6  	Dprintk("Rotating IRQs among CPUs.\n");
    21.7 -	for (i = 0; i < NR_CPUS; i++) {
    21.8 -		for (j = 0; cpu_online(i) && (j < NR_IRQS); j++) {
    21.9 +	for_each_online_cpu(i) {
   21.10 +		for (j = 0; j < NR_IRQS; j++) {
   21.11  			if (!irq_desc[j].action)
   21.12  				continue;
   21.13  			/* Is it a significant load ?  */
   21.14 @@ -424,7 +424,7 @@ static void do_irq_balance(void)
   21.15  	unsigned long imbalance = 0;
   21.16  	cpumask_t allowed_mask, target_cpu_mask, tmp;
   21.17  
   21.18 -	for (i = 0; i < NR_CPUS; i++) {
   21.19 +	for_each_possible_cpu(i) {
   21.20  		int package_index;
   21.21  		CPU_IRQ(i) = 0;
   21.22  		if (!cpu_online(i))
   21.23 @@ -465,9 +465,7 @@ static void do_irq_balance(void)
   21.24  		}
   21.25  	}
   21.26  	/* Find the least loaded processor package */
   21.27 -	for (i = 0; i < NR_CPUS; i++) {
   21.28 -		if (!cpu_online(i))
   21.29 -			continue;
   21.30 +	for_each_online_cpu(i) {
   21.31  		if (i != CPU_TO_PACKAGEINDEX(i))
   21.32  			continue;
   21.33  		if (min_cpu_irq > CPU_IRQ(i)) {
   21.34 @@ -484,9 +482,7 @@ tryanothercpu:
   21.35  	 */
   21.36  	tmp_cpu_irq = 0;
   21.37  	tmp_loaded = -1;
   21.38 -	for (i = 0; i < NR_CPUS; i++) {
   21.39 -		if (!cpu_online(i))
   21.40 -			continue;
   21.41 +	for_each_online_cpu(i) {
   21.42  		if (i != CPU_TO_PACKAGEINDEX(i))
   21.43  			continue;
   21.44  		if (max_cpu_irq <= CPU_IRQ(i)) 
   21.45 @@ -662,9 +658,7 @@ static int __init balanced_irq_init(void
   21.46  	if (smp_num_siblings > 1 && !cpus_empty(tmp))
   21.47  		physical_balance = 1;
   21.48  
   21.49 -	for (i = 0; i < NR_CPUS; i++) {
   21.50 -		if (!cpu_online(i))
   21.51 -			continue;
   21.52 +	for_each_online_cpu(i) {
   21.53  		irq_cpu_data[i].irq_delta = kmalloc(sizeof(unsigned long) * NR_IRQS, GFP_KERNEL);
   21.54  		irq_cpu_data[i].last_irq = kmalloc(sizeof(unsigned long) * NR_IRQS, GFP_KERNEL);
   21.55  		if (irq_cpu_data[i].irq_delta == NULL || irq_cpu_data[i].last_irq == NULL) {
   21.56 @@ -681,9 +675,11 @@ static int __init balanced_irq_init(void
   21.57  	else 
   21.58  		printk(KERN_ERR "balanced_irq_init: failed to spawn balanced_irq");
   21.59  failed:
   21.60 -	for (i = 0; i < NR_CPUS; i++) {
   21.61 +	for_each_possible_cpu(i) {
   21.62  		kfree(irq_cpu_data[i].irq_delta);
   21.63 +		irq_cpu_data[i].irq_delta = NULL;
   21.64  		kfree(irq_cpu_data[i].last_irq);
   21.65 +		irq_cpu_data[i].last_irq = NULL;
   21.66  	}
   21.67  	return 0;
   21.68  }
   21.69 @@ -691,7 +687,7 @@ failed:
   21.70  int __init irqbalance_disable(char *str)
   21.71  {
   21.72  	irqbalance_disabled = 1;
   21.73 -	return 0;
   21.74 +	return 1;
   21.75  }
   21.76  
   21.77  __setup("noirqbalance", irqbalance_disable);
   21.78 @@ -1813,7 +1809,8 @@ static void __init setup_ioapic_ids_from
   21.79  	 * Don't check I/O APIC IDs for xAPIC systems.  They have
   21.80  	 * no meaning without the serial APIC bus.
   21.81  	 */
   21.82 -	if (!(boot_cpu_data.x86_vendor == X86_VENDOR_INTEL && boot_cpu_data.x86 < 15))
   21.83 +	if (!(boot_cpu_data.x86_vendor == X86_VENDOR_INTEL)
   21.84 +		|| APIC_XAPIC(apic_version[boot_cpu_physical_apicid]))
   21.85  		return;
   21.86  	/*
   21.87  	 * This is broken; anything with a real cpu count has to
   21.88 @@ -2298,6 +2295,8 @@ static inline void unlock_ExtINT_logic(v
   21.89  	spin_unlock_irqrestore(&ioapic_lock, flags);
   21.90  }
   21.91  
   21.92 +int timer_uses_ioapic_pin_0;
   21.93 +
   21.94  /*
   21.95   * This code may look a bit paranoid, but it's supposed to cooperate with
   21.96   * a wide range of boards and BIOS bugs.  Fortunately only the timer IRQ
   21.97 @@ -2334,6 +2333,9 @@ static inline void check_timer(void)
   21.98  	pin2  = ioapic_i8259.pin;
   21.99  	apic2 = ioapic_i8259.apic;
  21.100  
  21.101 +	if (pin1 == 0)
  21.102 +		timer_uses_ioapic_pin_0 = 1;
  21.103 +
  21.104  	printk(KERN_INFO "..TIMER: vector=0x%02X apic1=%d pin1=%d apic2=%d pin2=%d\n",
  21.105  		vector, apic1, pin1, apic2, pin2);
  21.106  
  21.107 @@ -2419,6 +2421,7 @@ static inline void check_timer(void)
  21.108  		"report.  Then try booting with the 'noapic' option");
  21.109  }
  21.110  #else
  21.111 +int timer_uses_ioapic_pin_0 = 0;
  21.112  #define check_timer() ((void)0)
  21.113  #endif
  21.114  
    22.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/microcode-xen.c	Tue Jan 09 10:50:46 2007 +0000
    22.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/microcode-xen.c	Fri Jan 12 14:30:49 2007 +0000
    22.3 @@ -32,6 +32,7 @@
    22.4  #include <linux/miscdevice.h>
    22.5  #include <linux/spinlock.h>
    22.6  #include <linux/mm.h>
    22.7 +#include <linux/mutex.h>
    22.8  #include <linux/syscalls.h>
    22.9  
   22.10  #include <asm/msr.h>
   22.11 @@ -49,7 +50,7 @@ MODULE_LICENSE("GPL");
   22.12  #define DEFAULT_UCODE_TOTALSIZE (DEFAULT_UCODE_DATASIZE + MC_HEADER_SIZE) /* 2048 bytes */
   22.13  
   22.14  /* no concurrent ->write()s are allowed on /dev/cpu/microcode */
   22.15 -static DECLARE_MUTEX(microcode_sem);
   22.16 +static DEFINE_MUTEX(microcode_mutex);
   22.17  				
   22.18  static int microcode_open (struct inode *unused1, struct file *unused2)
   22.19  {
   22.20 @@ -90,37 +91,20 @@ static ssize_t microcode_write (struct f
   22.21  		return -EINVAL;
   22.22  	}
   22.23  
   22.24 -	down(&microcode_sem);
   22.25 +	mutex_lock(&microcode_mutex);
   22.26  
   22.27  	ret = do_microcode_update(buf, len);
   22.28  	if (!ret)
   22.29  		ret = (ssize_t)len;
   22.30  
   22.31 -	up(&microcode_sem);
   22.32 +	mutex_unlock(&microcode_mutex);
   22.33  
   22.34  	return ret;
   22.35  }
   22.36  
   22.37 -static int microcode_ioctl (struct inode *inode, struct file *file, 
   22.38 -		unsigned int cmd, unsigned long arg)
   22.39 -{
   22.40 -	switch (cmd) {
   22.41 -		/* 
   22.42 -		 *  XXX: will be removed after microcode_ctl 
   22.43 -		 *  is updated to ignore failure of this ioctl()
   22.44 -		 */
   22.45 -		case MICROCODE_IOCFREE:
   22.46 -			return 0;
   22.47 -		default:
   22.48 -			return -EINVAL;
   22.49 -	}
   22.50 -	return -EINVAL;
   22.51 -}
   22.52 -
   22.53  static struct file_operations microcode_fops = {
   22.54  	.owner		= THIS_MODULE,
   22.55  	.write		= microcode_write,
   22.56 -	.ioctl		= microcode_ioctl,
   22.57  	.open		= microcode_open,
   22.58  };
   22.59  
   22.60 @@ -151,7 +135,6 @@ static int __init microcode_init (void)
   22.61  static void __exit microcode_exit (void)
   22.62  {
   22.63  	misc_deregister(&microcode_dev);
   22.64 -	printk(KERN_INFO "IA-32 Microcode Update Driver v" MICROCODE_VERSION " unregistered\n");
   22.65  }
   22.66  
   22.67  module_init(microcode_init)
    23.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/mpparse-xen.c	Tue Jan 09 10:50:46 2007 +0000
    23.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/mpparse-xen.c	Fri Jan 12 14:30:49 2007 +0000
    23.3 @@ -38,12 +38,6 @@
    23.4  int smp_found_config;
    23.5  unsigned int __initdata maxcpus = NR_CPUS;
    23.6  
    23.7 -#ifdef CONFIG_HOTPLUG_CPU
    23.8 -#define CPU_HOTPLUG_ENABLED	(1)
    23.9 -#else
   23.10 -#define CPU_HOTPLUG_ENABLED	(0)
   23.11 -#endif
   23.12 -
   23.13  /*
   23.14   * Various Linux-internal data structures created from the
   23.15   * MP-table.
   23.16 @@ -110,21 +104,6 @@ static int __init mpf_checksum(unsigned 
   23.17  static int mpc_record; 
   23.18  static struct mpc_config_translation *translation_table[MAX_MPC_ENTRY] __initdata;
   23.19  
   23.20 -#ifdef CONFIG_X86_NUMAQ
   23.21 -static int MP_valid_apicid(int apicid, int version)
   23.22 -{
   23.23 -	return hweight_long(apicid & 0xf) == 1 && (apicid >> 4) != 0xf;
   23.24 -}
   23.25 -#elif !defined(CONFIG_XEN)
   23.26 -static int MP_valid_apicid(int apicid, int version)
   23.27 -{
   23.28 -	if (version >= 0x14)
   23.29 -		return apicid < 0xff;
   23.30 -	else
   23.31 -		return apicid < 0xf;
   23.32 -}
   23.33 -#endif
   23.34 -
   23.35  #ifndef CONFIG_XEN
   23.36  static void __devinit MP_processor_info (struct mpc_config_processor *m)
   23.37  {
   23.38 @@ -191,12 +170,6 @@ static void __devinit MP_processor_info 
   23.39  
   23.40  	ver = m->mpc_apicver;
   23.41  
   23.42 -	if (!MP_valid_apicid(apicid, ver)) {
   23.43 -		printk(KERN_WARNING "Processor #%d INVALID. (Max ID: %d).\n",
   23.44 -			m->mpc_apicid, MAX_APICS);
   23.45 -		return;
   23.46 -	}
   23.47 -
   23.48  	/*
   23.49  	 * Validate version
   23.50  	 */
   23.51 @@ -226,7 +199,14 @@ static void __devinit MP_processor_info 
   23.52  	cpu_set(num_processors, cpu_possible_map);
   23.53  	num_processors++;
   23.54  
   23.55 -	if (CPU_HOTPLUG_ENABLED || (num_processors > 8)) {
   23.56 +	/*
   23.57 +	 * Would be preferable to switch to bigsmp when CONFIG_HOTPLUG_CPU=y
   23.58 +	 * but we need to work other dependencies like SMP_SUSPEND etc
   23.59 +	 * before this can be done without some confusion.
   23.60 +	 * if (CPU_HOTPLUG_ENABLED || num_processors > 8)
   23.61 +	 *       - Ashok Raj <ashok.raj@intel.com>
   23.62 +	 */
   23.63 +	if (num_processors > 8) {
   23.64  		switch (boot_cpu_data.x86_vendor) {
   23.65  		case X86_VENDOR_INTEL:
   23.66  			if (!APIC_XAPIC(ver)) {
   23.67 @@ -256,6 +236,13 @@ static void __init MP_bus_info (struct m
   23.68  
   23.69  	mpc_oem_bus_info(m, str, translation_table[mpc_record]);
   23.70  
   23.71 +	if (m->mpc_busid >= MAX_MP_BUSSES) {
   23.72 +		printk(KERN_WARNING "MP table busid value (%d) for bustype %s "
   23.73 +			" is too large, max. supported is %d\n",
   23.74 +			m->mpc_busid, str, MAX_MP_BUSSES - 1);
   23.75 +		return;
   23.76 +	}
   23.77 +
   23.78  	if (strncmp(str, BUSTYPE_ISA, sizeof(BUSTYPE_ISA)-1) == 0) {
   23.79  		mp_bus_id_to_type[m->mpc_busid] = MP_BUS_ISA;
   23.80  	} else if (strncmp(str, BUSTYPE_EISA, sizeof(BUSTYPE_EISA)-1) == 0) {
   23.81 @@ -844,6 +831,8 @@ void __init find_smp_config (void)
   23.82  #endif
   23.83  }
   23.84  
   23.85 +int es7000_plat;
   23.86 +
   23.87  /* --------------------------------------------------------------------------
   23.88                              ACPI-based MP Configuration
   23.89     -------------------------------------------------------------------------- */
   23.90 @@ -957,7 +946,8 @@ void __init mp_register_ioapic (
   23.91  #ifndef CONFIG_XEN
   23.92  	set_fixmap_nocache(FIX_IO_APIC_BASE_0 + idx, address);
   23.93  #endif
   23.94 -	if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) && (boot_cpu_data.x86 < 15))
   23.95 +	if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL)
   23.96 +		&& !APIC_XAPIC(apic_version[boot_cpu_physical_apicid]))
   23.97  		tmpid = io_apic_get_unique_id(idx, id);
   23.98  	else
   23.99  		tmpid = id;
  23.100 @@ -1033,8 +1023,6 @@ void __init mp_override_legacy_irq (
  23.101  	return;
  23.102  }
  23.103  
  23.104 -int es7000_plat;
  23.105 -
  23.106  void __init mp_config_acpi_legacy_irqs (void)
  23.107  {
  23.108  	struct mpc_config_intsrc intsrc;
  23.109 @@ -1164,7 +1152,17 @@ int mp_register_gsi (u32 gsi, int trigge
  23.110  		 */
  23.111  		int irq = gsi;
  23.112  		if (gsi < MAX_GSI_NUM) {
  23.113 -			if (gsi > 15)
  23.114 +			/*
  23.115 +			 * Retain the VIA chipset work-around (gsi > 15), but
  23.116 +			 * avoid a problem where the 8254 timer (IRQ0) is setup
  23.117 +			 * via an override (so it's not on pin 0 of the ioapic),
  23.118 +			 * and at the same time, the pin 0 interrupt is a PCI
  23.119 +			 * type.  The gsi > 15 test could cause these two pins
  23.120 +			 * to be shared as IRQ0, and they are not shareable.
  23.121 +			 * So test for this condition, and if necessary, avoid
  23.122 +			 * the pin collision.
  23.123 +			 */
  23.124 +			if (gsi > 15 || (gsi == 0 && !timer_uses_ioapic_pin_0))
  23.125  				gsi = pci_irq++;
  23.126  			/*
  23.127  			 * Don't assign IRQ used by ACPI SCI
    24.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/process-xen.c	Tue Jan 09 10:50:46 2007 +0000
    24.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/process-xen.c	Fri Jan 12 14:30:49 2007 +0000
    24.3 @@ -38,7 +38,6 @@
    24.4  #include <linux/kallsyms.h>
    24.5  #include <linux/ptrace.h>
    24.6  #include <linux/random.h>
    24.7 -#include <linux/kprobes.h>
    24.8  
    24.9  #include <asm/uaccess.h>
   24.10  #include <asm/pgtable.h>
   24.11 @@ -245,7 +244,7 @@ void show_regs(struct pt_regs * regs)
   24.12  	printk("EIP: %04x:[<%08lx>] CPU: %d\n",0xffff & regs->xcs,regs->eip, smp_processor_id());
   24.13  	print_symbol("EIP is at %s\n", regs->eip);
   24.14  
   24.15 -	if (user_mode(regs))
   24.16 +	if (user_mode_vm(regs))
   24.17  		printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp);
   24.18  	printk(" EFLAGS: %08lx    %s  (%s %.*s)\n",
   24.19  	       regs->eflags, print_tainted(), system_utsname.release,
   24.20 @@ -314,13 +313,6 @@ void exit_thread(void)
   24.21  	struct task_struct *tsk = current;
   24.22  	struct thread_struct *t = &tsk->thread;
   24.23  
   24.24 -	/*
   24.25 -	 * Remove function-return probe instances associated with this task
   24.26 -	 * and put them back on the free list. Do not insert an exit probe for
   24.27 -	 * this function, it will be disabled by kprobe_flush_task if you do.
   24.28 -	 */
   24.29 -	kprobe_flush_task(tsk);
   24.30 -
   24.31  	/* The process may have allocated an io port bitmap... nuke it. */
   24.32  	if (unlikely(NULL != t->io_bitmap_ptr)) {
   24.33  		struct physdev_set_iobitmap set_iobitmap = { 0 };
   24.34 @@ -731,7 +723,6 @@ unsigned long get_wchan(struct task_stru
   24.35  	} while (count++ < 16);
   24.36  	return 0;
   24.37  }
   24.38 -EXPORT_SYMBOL(get_wchan);
   24.39  
   24.40  /*
   24.41   * sys_alloc_thread_area: get a yet unused TLS descriptor index.
    25.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c	Tue Jan 09 10:50:46 2007 +0000
    25.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c	Fri Jan 12 14:30:49 2007 +0000
    25.3 @@ -34,6 +34,7 @@
    25.4  #include <linux/initrd.h>
    25.5  #include <linux/bootmem.h>
    25.6  #include <linux/seq_file.h>
    25.7 +#include <linux/platform_device.h>
    25.8  #include <linux/console.h>
    25.9  #include <linux/mca.h>
   25.10  #include <linux/root_dev.h>
   25.11 @@ -49,6 +50,7 @@
   25.12  #include <linux/kexec.h>
   25.13  #include <linux/crash_dump.h>
   25.14  #include <linux/dmi.h>
   25.15 +#include <linux/pfn.h>
   25.16  
   25.17  #include <video/edid.h>
   25.18  
   25.19 @@ -1027,6 +1029,38 @@ efi_memory_present_wrapper(unsigned long
   25.20  	return 0;
   25.21  }
   25.22  
   25.23 + /*
   25.24 +  * This function checks if the entire range <start,end> is mapped with type.
   25.25 +  *
   25.26 +  * Note: this function only works correct if the e820 table is sorted and
   25.27 +  * not-overlapping, which is the case
   25.28 +  */
   25.29 +int __init
   25.30 +e820_all_mapped(unsigned long s, unsigned long e, unsigned type)
   25.31 +{
   25.32 +	u64 start = s;
   25.33 +	u64 end = e;
   25.34 +	int i;
   25.35 +	for (i = 0; i < e820.nr_map; i++) {
   25.36 +		struct e820entry *ei = &e820.map[i];
   25.37 +		if (type && ei->type != type)
   25.38 +			continue;
   25.39 +		/* is the region (part) in overlap with the current region ?*/
   25.40 +		if (ei->addr >= end || ei->addr + ei->size <= start)
   25.41 +			continue;
   25.42 +		/* if the region is at the beginning of <start,end> we move
   25.43 +		 * start to the end of the region since it's ok until there
   25.44 +		 */
   25.45 +		if (ei->addr <= start)
   25.46 +			start = ei->addr + ei->size;
   25.47 +		/* if start is now at or beyond end, we're done, full
   25.48 +		 * coverage */
   25.49 +		if (start >= end)
   25.50 +			return 1; /* we're done */
   25.51 +	}
   25.52 +	return 0;
   25.53 +}
   25.54 +
   25.55  /*
   25.56   * Find the highest page frame number we have available
   25.57   */
   25.58 @@ -1124,10 +1158,10 @@ static int __init
   25.59  free_available_memory(unsigned long start, unsigned long end, void *arg)
   25.60  {
   25.61  	/* check max_low_pfn */
   25.62 -	if (start >= ((max_low_pfn + 1) << PAGE_SHIFT))
   25.63 +	if (start >= (max_low_pfn << PAGE_SHIFT))
   25.64  		return 0;
   25.65 -	if (end >= ((max_low_pfn + 1) << PAGE_SHIFT))
   25.66 -		end = (max_low_pfn + 1) << PAGE_SHIFT;
   25.67 +	if (end >= (max_low_pfn << PAGE_SHIFT))
   25.68 +		end = max_low_pfn << PAGE_SHIFT;
   25.69  	if (start < end)
   25.70  		free_bootmem(start, end - start);
   25.71  
   25.72 @@ -1380,7 +1414,7 @@ legacy_init_iomem_resources(struct e820e
   25.73  		struct resource *res;
   25.74  		if (e820[i].addr + e820[i].size > 0x100000000ULL)
   25.75  			continue;
   25.76 -		res = alloc_bootmem_low(sizeof(struct resource));
   25.77 +		res = kzalloc(sizeof(struct resource), GFP_ATOMIC);
   25.78  		switch (e820[i].type) {
   25.79  		case E820_RAM:	res->name = "System RAM"; break;
   25.80  		case E820_ACPI:	res->name = "ACPI Tables"; break;
   25.81 @@ -1467,8 +1501,11 @@ e820_setup_gap(struct e820entry *e820, i
   25.82  
   25.83  /*
   25.84   * Request address space for all standard resources
   25.85 + *
   25.86 + * This is called just before pcibios_init(), which is also a
   25.87 + * subsys_initcall, but is linked in later (in arch/i386/pci/common.c).
   25.88   */
   25.89 -static void __init register_memory(void)
   25.90 +static int __init request_standard_resources(void)
   25.91  {
   25.92  #ifdef CONFIG_XEN
   25.93  	struct xen_memory_map memmap;
   25.94 @@ -1477,8 +1514,9 @@ static void __init register_memory(void)
   25.95  
   25.96  	/* Nothing to do if not running in dom0. */
   25.97  	if (!is_initial_xendomain())
   25.98 -		return;
   25.99 +		return 0;
  25.100  
  25.101 +	printk("Setting up standard PCI resources\n");
  25.102  #ifdef CONFIG_XEN
  25.103  	memmap.nr_entries = E820MAX;
  25.104  	set_xen_guest_handle(memmap.buffer, machine_e820.map);
  25.105 @@ -1503,6 +1541,13 @@ static void __init register_memory(void)
  25.106  	/* request I/O space for devices used on all i[345]86 PCs */
  25.107  	for (i = 0; i < STANDARD_IO_RESOURCES; i++)
  25.108  		request_resource(&ioport_resource, &standard_io_resources[i]);
  25.109 +	return 0;
  25.110 +}
  25.111 +
  25.112 +subsys_initcall(request_standard_resources);
  25.113 +
  25.114 +static void __init register_memory(void)
  25.115 +{
  25.116  
  25.117  #ifdef CONFIG_XEN
  25.118  	e820_setup_gap(machine_e820.map, machine_e820.nr_map);
  25.119 @@ -1511,101 +1556,6 @@ static void __init register_memory(void)
  25.120  #endif
  25.121  }
  25.122  
  25.123 -/* Use inline assembly to define this because the nops are defined 
  25.124 -   as inline assembly strings in the include files and we cannot 
  25.125 -   get them easily into strings. */
  25.126 -asm("\t.data\nintelnops: " 
  25.127 -    GENERIC_NOP1 GENERIC_NOP2 GENERIC_NOP3 GENERIC_NOP4 GENERIC_NOP5 GENERIC_NOP6
  25.128 -    GENERIC_NOP7 GENERIC_NOP8); 
  25.129 -asm("\t.data\nk8nops: " 
  25.130 -    K8_NOP1 K8_NOP2 K8_NOP3 K8_NOP4 K8_NOP5 K8_NOP6
  25.131 -    K8_NOP7 K8_NOP8); 
  25.132 -asm("\t.data\nk7nops: " 
  25.133 -    K7_NOP1 K7_NOP2 K7_NOP3 K7_NOP4 K7_NOP5 K7_NOP6
  25.134 -    K7_NOP7 K7_NOP8); 
  25.135 -    
  25.136 -extern unsigned char intelnops[], k8nops[], k7nops[];
  25.137 -static unsigned char *intel_nops[ASM_NOP_MAX+1] = { 
  25.138 -     NULL,
  25.139 -     intelnops,
  25.140 -     intelnops + 1,
  25.141 -     intelnops + 1 + 2,
  25.142 -     intelnops + 1 + 2 + 3,
  25.143 -     intelnops + 1 + 2 + 3 + 4,
  25.144 -     intelnops + 1 + 2 + 3 + 4 + 5,
  25.145 -     intelnops + 1 + 2 + 3 + 4 + 5 + 6,
  25.146 -     intelnops + 1 + 2 + 3 + 4 + 5 + 6 + 7,
  25.147 -}; 
  25.148 -static unsigned char *k8_nops[ASM_NOP_MAX+1] = { 
  25.149 -     NULL,
  25.150 -     k8nops,
  25.151 -     k8nops + 1,
  25.152 -     k8nops + 1 + 2,
  25.153 -     k8nops + 1 + 2 + 3,
  25.154 -     k8nops + 1 + 2 + 3 + 4,
  25.155 -     k8nops + 1 + 2 + 3 + 4 + 5,
  25.156 -     k8nops + 1 + 2 + 3 + 4 + 5 + 6,
  25.157 -     k8nops + 1 + 2 + 3 + 4 + 5 + 6 + 7,
  25.158 -}; 
  25.159 -static unsigned char *k7_nops[ASM_NOP_MAX+1] = { 
  25.160 -     NULL,
  25.161 -     k7nops,
  25.162 -     k7nops + 1,
  25.163 -     k7nops + 1 + 2,
  25.164 -     k7nops + 1 + 2 + 3,
  25.165 -     k7nops + 1 + 2 + 3 + 4,
  25.166 -     k7nops + 1 + 2 + 3 + 4 + 5,
  25.167 -     k7nops + 1 + 2 + 3 + 4 + 5 + 6,
  25.168 -     k7nops + 1 + 2 + 3 + 4 + 5 + 6 + 7,
  25.169 -}; 
  25.170 -static struct nop { 
  25.171 -     int cpuid; 
  25.172 -     unsigned char **noptable; 
  25.173 -} noptypes[] = { 
  25.174 -     { X86_FEATURE_K8, k8_nops }, 
  25.175 -     { X86_FEATURE_K7, k7_nops }, 
  25.176 -     { -1, NULL }
  25.177 -}; 
  25.178 -
  25.179 -/* Replace instructions with better alternatives for this CPU type.
  25.180 -
  25.181 -   This runs before SMP is initialized to avoid SMP problems with
  25.182 -   self modifying code. This implies that assymetric systems where
  25.183 -   APs have less capabilities than the boot processor are not handled. 
  25.184 -   Tough. Make sure you disable such features by hand. */ 
  25.185 -void apply_alternatives(void *start, void *end) 
  25.186 -{ 
  25.187 -	struct alt_instr *a; 
  25.188 -	int diff, i, k;
  25.189 -        unsigned char **noptable = intel_nops; 
  25.190 -	for (i = 0; noptypes[i].cpuid >= 0; i++) { 
  25.191 -		if (boot_cpu_has(noptypes[i].cpuid)) { 
  25.192 -			noptable = noptypes[i].noptable;
  25.193 -			break;
  25.194 -		}
  25.195 -	} 
  25.196 -	for (a = start; (void *)a < end; a++) { 
  25.197 -		if (!boot_cpu_has(a->cpuid))
  25.198 -			continue;
  25.199 -		BUG_ON(a->replacementlen > a->instrlen); 
  25.200 -		memcpy(a->instr, a->replacement, a->replacementlen); 
  25.201 -		diff = a->instrlen - a->replacementlen; 
  25.202 -		/* Pad the rest with nops */
  25.203 -		for (i = a->replacementlen; diff > 0; diff -= k, i += k) {
  25.204 -			k = diff;
  25.205 -			if (k > ASM_NOP_MAX)
  25.206 -				k = ASM_NOP_MAX;
  25.207 -			memcpy(a->instr + i, noptable[k], k); 
  25.208 -		} 
  25.209 -	}
  25.210 -} 
  25.211 -
  25.212 -void __init alternative_instructions(void)
  25.213 -{
  25.214 -	extern struct alt_instr __alt_instructions[], __alt_instructions_end[];
  25.215 -	apply_alternatives(__alt_instructions, __alt_instructions_end);
  25.216 -}
  25.217 -
  25.218  static char * __init machine_specific_memory_setup(void);
  25.219  
  25.220  #ifdef CONFIG_MCA
  25.221 @@ -1636,7 +1586,7 @@ void __init setup_arch(char **cmdline_p)
  25.222  		panic_timeout = 1;
  25.223  
  25.224  	/* Register a call for panic conditions. */
  25.225 -	notifier_chain_register(&panic_notifier_list, &xen_panic_block);
  25.226 +	atomic_notifier_chain_register(&panic_notifier_list, &xen_panic_block);
  25.227  
  25.228  	HYPERVISOR_vm_assist(VMASST_CMD_enable, VMASST_TYPE_4gb_segments);
  25.229  	HYPERVISOR_vm_assist(VMASST_CMD_enable,
  25.230 @@ -1644,6 +1594,9 @@ void __init setup_arch(char **cmdline_p)
  25.231  
  25.232  	memcpy(&boot_cpu_data, &new_cpu_data, sizeof(new_cpu_data));
  25.233  	early_cpu_init();
  25.234 +#ifdef CONFIG_SMP
  25.235 +	prefill_possible_map();
  25.236 +#endif
  25.237  
  25.238  	/*
  25.239  	 * FIXME: This isn't an official loader_type right
  25.240 @@ -1731,6 +1684,16 @@ void __init setup_arch(char **cmdline_p)
  25.241  
  25.242  	parse_cmdline_early(cmdline_p);
  25.243  
  25.244 +#ifdef CONFIG_EARLY_PRINTK
  25.245 +	{
  25.246 +		char *s = strstr(*cmdline_p, "earlyprintk=");
  25.247 +		if (s) {
  25.248 +			setup_early_printk(strchr(s, '=') + 1);
  25.249 +			printk("early console enabled\n");
  25.250 +		}
  25.251 +	}
  25.252 +#endif
  25.253 +
  25.254  	max_low_pfn = setup_memory();
  25.255  
  25.256  	/*
  25.257 @@ -1801,18 +1764,6 @@ void __init setup_arch(char **cmdline_p)
  25.258  	 * NOTE: at this point the bootmem allocator is fully available.
  25.259  	 */
  25.260  
  25.261 -#ifdef CONFIG_EARLY_PRINTK
  25.262 -	{
  25.263 -		char *s = strstr(*cmdline_p, "earlyprintk=");
  25.264 -		if (s) {
  25.265 -			extern void setup_early_printk(char *);
  25.266 -
  25.267 -			setup_early_printk(strchr(s, '=') + 1);
  25.268 -			printk("early console enabled\n");
  25.269 -		}
  25.270 -	}
  25.271 -#endif
  25.272 -
  25.273  	if (is_initial_xendomain())
  25.274  		dmi_scan_machine();
  25.275  
  25.276 @@ -1825,10 +1776,6 @@ void __init setup_arch(char **cmdline_p)
  25.277  	set_iopl.iopl = 1;
  25.278  	HYPERVISOR_physdev_op(PHYSDEVOP_set_iopl, &set_iopl);
  25.279  
  25.280 -#ifdef CONFIG_X86_IO_APIC
  25.281 -	check_acpi_pci();	/* Checks more than just ACPI actually */
  25.282 -#endif
  25.283 -
  25.284  #ifdef CONFIG_ACPI
  25.285  	if (!is_initial_xendomain()) {
  25.286  		printk(KERN_INFO "ACPI in unprivileged domain disabled\n");
  25.287 @@ -1840,6 +1787,13 @@ void __init setup_arch(char **cmdline_p)
  25.288  	 * Parse the ACPI tables for possible boot-time SMP configuration.
  25.289  	 */
  25.290  	acpi_boot_table_init();
  25.291 +#endif
  25.292 +
  25.293 +#ifdef CONFIG_X86_IO_APIC
  25.294 +	check_acpi_pci();	/* Checks more than just ACPI actually */
  25.295 +#endif
  25.296 +
  25.297 +#ifdef CONFIG_ACPI
  25.298  	acpi_boot_init();
  25.299  
  25.300  #if defined(CONFIG_SMP) && defined(CONFIG_X86_PC)
  25.301 @@ -1882,6 +1836,23 @@ xen_panic_event(struct notifier_block *t
  25.302  	return NOTIFY_DONE;
  25.303  }
  25.304  
  25.305 +static __init int add_pcspkr(void)
  25.306 +{
  25.307 +	struct platform_device *pd;
  25.308 +	int ret;
  25.309 +
  25.310 +	pd = platform_device_alloc("pcspkr", -1);
  25.311 +	if (!pd)
  25.312 +		return -ENOMEM;
  25.313 +
  25.314 +	ret = platform_device_add(pd);
  25.315 +	if (ret)
  25.316 +		platform_device_put(pd);
  25.317 +
  25.318 +	return ret;
  25.319 +}
  25.320 +device_initcall(add_pcspkr);
  25.321 +
  25.322  #include "setup_arch_post.h"
  25.323  /*
  25.324   * Local Variables:
    26.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/smp-xen.c	Tue Jan 09 10:50:46 2007 +0000
    26.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/smp-xen.c	Fri Jan 12 14:30:49 2007 +0000
    26.3 @@ -483,27 +483,23 @@ void unlock_ipi_call_lock(void)
    26.4  	spin_unlock_irq(&call_lock);
    26.5  }
    26.6  
    26.7 -static struct call_data_struct * call_data;
    26.8 -
    26.9 -/*
   26.10 - * this function sends a 'generic call function' IPI to all other CPUs
   26.11 - * in the system.
   26.12 - */
   26.13 +static struct call_data_struct *call_data;
   26.14  
   26.15 -int smp_call_function (void (*func) (void *info), void *info, int nonatomic,
   26.16 -			int wait)
   26.17 -/*
   26.18 - * [SUMMARY] Run a function on all other CPUs.
   26.19 - * <func> The function to run. This must be fast and non-blocking.
   26.20 - * <info> An arbitrary pointer to pass to the function.
   26.21 - * <nonatomic> currently unused.
   26.22 - * <wait> If true, wait (atomically) until function has completed on other CPUs.
   26.23 - * [RETURNS] 0 on success, else a negative status code. Does not return until
   26.24 +/**
   26.25 + * smp_call_function(): Run a function on all other CPUs.
   26.26 + * @func: The function to run. This must be fast and non-blocking.
   26.27 + * @info: An arbitrary pointer to pass to the function.
   26.28 + * @nonatomic: currently unused.
   26.29 + * @wait: If true, wait (atomically) until function has completed on other CPUs.
   26.30 + *
   26.31 + * Returns 0 on success, else a negative status code. Does not return until
   26.32   * remote CPUs are nearly ready to execute <<func>> or are or have executed.
   26.33   *
   26.34   * You must not call this function with disabled interrupts or from a
   26.35   * hardware interrupt handler or from a bottom half handler.
   26.36   */
   26.37 +int smp_call_function (void (*func) (void *info), void *info, int nonatomic,
   26.38 +			int wait)
   26.39  {
   26.40  	struct call_data_struct data;
   26.41  	int cpus;
    27.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/smpalts.c	Tue Jan 09 10:50:46 2007 +0000
    27.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    27.3 @@ -1,85 +0,0 @@
    27.4 -#include <linux/kernel.h>
    27.5 -#include <asm/system.h>
    27.6 -#include <asm/smp_alt.h>
    27.7 -#include <asm/processor.h>
    27.8 -#include <asm/string.h>
    27.9 -
   27.10 -struct smp_replacement_record {
   27.11 -	unsigned char targ_size;
   27.12 -	unsigned char smp1_size;
   27.13 -	unsigned char smp2_size;
   27.14 -	unsigned char up_size;
   27.15 -	unsigned char feature;
   27.16 -	unsigned char data[0];
   27.17 -};
   27.18 -
   27.19 -struct smp_alternative_record {
   27.20 -	void *targ_start;
   27.21 -	struct smp_replacement_record *repl;
   27.22 -};
   27.23 -
   27.24 -extern struct smp_alternative_record __start_smp_alternatives_table,
   27.25 -  __stop_smp_alternatives_table;
   27.26 -extern unsigned long __init_begin, __init_end;
   27.27 -
   27.28 -void prepare_for_smp(void)
   27.29 -{
   27.30 -	struct smp_alternative_record *r;
   27.31 -	printk(KERN_INFO "Enabling SMP...\n");
   27.32 -	for (r = &__start_smp_alternatives_table;
   27.33 -	     r != &__stop_smp_alternatives_table;
   27.34 -	     r++) {
   27.35 -		BUG_ON(r->repl->targ_size < r->repl->smp1_size);
   27.36 -		BUG_ON(r->repl->targ_size < r->repl->smp2_size);
   27.37 -		BUG_ON(r->repl->targ_size < r->repl->up_size);
   27.38 -               if (system_state == SYSTEM_RUNNING &&
   27.39 -                   r->targ_start >= (void *)&__init_begin &&
   27.40 -                   r->targ_start < (void *)&__init_end)
   27.41 -                       continue;
   27.42 -		if (r->repl->feature != (unsigned char)-1 &&
   27.43 -		    boot_cpu_has(r->repl->feature)) {
   27.44 -			memcpy(r->targ_start,
   27.45 -			       r->repl->data + r->repl->smp1_size,
   27.46 -			       r->repl->smp2_size);
   27.47 -			memset(r->targ_start + r->repl->smp2_size,
   27.48 -			       0x90,
   27.49 -			       r->repl->targ_size - r->repl->smp2_size);
   27.50 -		} else {
   27.51 -			memcpy(r->targ_start,
   27.52 -			       r->repl->data,
   27.53 -			       r->repl->smp1_size);
   27.54 -			memset(r->targ_start + r->repl->smp1_size,
   27.55 -			       0x90,
   27.56 -			       r->repl->targ_size - r->repl->smp1_size);
   27.57 -		}
   27.58 -	}
   27.59 -	/* Paranoia */
   27.60 -	asm volatile ("jmp 1f\n1:");
   27.61 -	mb();
   27.62 -}
   27.63 -
   27.64 -void unprepare_for_smp(void)
   27.65 -{
   27.66 -	struct smp_alternative_record *r;
   27.67 -	printk(KERN_INFO "Disabling SMP...\n");
   27.68 -	for (r = &__start_smp_alternatives_table;
   27.69 -	     r != &__stop_smp_alternatives_table;
   27.70 -	     r++) {
   27.71 -		BUG_ON(r->repl->targ_size < r->repl->smp1_size);
   27.72 -		BUG_ON(r->repl->targ_size < r->repl->smp2_size);
   27.73 -		BUG_ON(r->repl->targ_size < r->repl->up_size);
   27.74 -               if (system_state == SYSTEM_RUNNING &&
   27.75 -                   r->targ_start >= (void *)&__init_begin &&
   27.76 -                   r->targ_start < (void *)&__init_end)
   27.77 -                       continue;
   27.78 -		memcpy(r->targ_start,
   27.79 -		       r->repl->data + r->repl->smp1_size + r->repl->smp2_size,
   27.80 -		       r->repl->up_size);
   27.81 -		memset(r->targ_start + r->repl->up_size,
   27.82 -		       0x90,
   27.83 -		       r->repl->targ_size - r->repl->up_size);
   27.84 -	}
   27.85 -	/* Paranoia */
   27.86 -	asm volatile ("jmp 1f\n1:");
   27.87 -	mb();
   27.88 -}
    28.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/smpboot.c	Tue Jan 09 10:50:46 2007 +0000
    28.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/smpboot.c	Fri Jan 12 14:30:49 2007 +0000
    28.3 @@ -72,6 +72,9 @@ int phys_proc_id[NR_CPUS] __read_mostly 
    28.4  /* Core ID of each logical CPU */
    28.5  int cpu_core_id[NR_CPUS] __read_mostly = {[0 ... NR_CPUS-1] = BAD_APICID};
    28.6  
    28.7 +/* Last level cache ID of each logical CPU */
    28.8 +int cpu_llc_id[NR_CPUS] __cpuinitdata = {[0 ... NR_CPUS-1] = BAD_APICID};
    28.9 +
   28.10  /* representing HT siblings of each logical CPU */
   28.11  cpumask_t cpu_sibling_map[NR_CPUS] __read_mostly;
   28.12  EXPORT_SYMBOL(cpu_sibling_map);
   28.13 @@ -310,7 +313,9 @@ static void __init synchronize_tsc_bp (v
   28.14  			if (tsc_values[i] < avg)
   28.15  				realdelta = -realdelta;
   28.16  
   28.17 -			printk(KERN_INFO "CPU#%d had %ld usecs TSC skew, fixed it up.\n", i, realdelta);
   28.18 +			if (realdelta > 0)
   28.19 +				printk(KERN_INFO "CPU#%d had %ld usecs TSC "
   28.20 +					"skew, fixed it up.\n", i, realdelta);
   28.21  		}
   28.22  
   28.23  		sum += delta;
   28.24 @@ -440,6 +445,18 @@ static void __devinit smp_callin(void)
   28.25  
   28.26  static int cpucount;
   28.27  
   28.28 +/* maps the cpu to the sched domain representing multi-core */
   28.29 +cpumask_t cpu_coregroup_map(int cpu)
   28.30 +{
   28.31 +	struct cpuinfo_x86 *c = cpu_data + cpu;
   28.32 +	/*
   28.33 +	 * For perf, we return last level cache shared map.
   28.34 +	 * TBD: when power saving sched policy is added, we will return
   28.35 +	 *      cpu_core_map when power saving policy is enabled
   28.36 +	 */
   28.37 +	return c->llc_shared_map;
   28.38 +}
   28.39 +
   28.40  /* representing cpus for which sibling maps can be computed */
   28.41  static cpumask_t cpu_sibling_setup_map;
   28.42  
   28.43 @@ -459,12 +476,16 @@ set_cpu_sibling_map(int cpu)
   28.44  				cpu_set(cpu, cpu_sibling_map[i]);
   28.45  				cpu_set(i, cpu_core_map[cpu]);
   28.46  				cpu_set(cpu, cpu_core_map[i]);
   28.47 +				cpu_set(i, c[cpu].llc_shared_map);
   28.48 +				cpu_set(cpu, c[i].llc_shared_map);
   28.49  			}
   28.50  		}
   28.51  	} else {
   28.52  		cpu_set(cpu, cpu_sibling_map[cpu]);
   28.53  	}
   28.54  
   28.55 +	cpu_set(cpu, c[cpu].llc_shared_map);
   28.56 +
   28.57  	if (current_cpu_data.x86_max_cores == 1) {
   28.58  		cpu_core_map[cpu] = cpu_sibling_map[cpu];
   28.59  		c[cpu].booted_cores = 1;
   28.60 @@ -472,6 +493,11 @@ set_cpu_sibling_map(int cpu)
   28.61  	}
   28.62  
   28.63  	for_each_cpu_mask(i, cpu_sibling_setup_map) {
   28.64 +		if (cpu_llc_id[cpu] != BAD_APICID &&
   28.65 +		    cpu_llc_id[cpu] == cpu_llc_id[i]) {
   28.66 +			cpu_set(i, c[cpu].llc_shared_map);
   28.67 +			cpu_set(cpu, c[i].llc_shared_map);
   28.68 +		}
   28.69  		if (phys_proc_id[cpu] == phys_proc_id[i]) {
   28.70  			cpu_set(i, cpu_core_map[cpu]);
   28.71  			cpu_set(cpu, cpu_core_map[i]);
   28.72 @@ -899,6 +925,7 @@ static int __devinit do_boot_cpu(int api
   28.73  	unsigned short nmi_high = 0, nmi_low = 0;
   28.74  
   28.75  	++cpucount;
   28.76 +	alternatives_smp_switch(1);
   28.77  
   28.78  	/*
   28.79  	 * We can't use kernel_thread since we must avoid to
   28.80 @@ -1002,7 +1029,6 @@ void cpu_exit_clear(void)
   28.81  
   28.82  	cpu_clear(cpu, cpu_callout_map);
   28.83  	cpu_clear(cpu, cpu_callin_map);
   28.84 -	cpu_clear(cpu, cpu_present_map);
   28.85  
   28.86  	cpu_clear(cpu, smp_commenced_mask);
   28.87  	unmap_cpu_to_logical_apicid(cpu);
   28.88 @@ -1014,31 +1040,20 @@ struct warm_boot_cpu_info {
   28.89  	int cpu;
   28.90  };
   28.91  
   28.92 -static void __devinit do_warm_boot_cpu(void *p)
   28.93 +static void __cpuinit do_warm_boot_cpu(void *p)
   28.94  {
   28.95  	struct warm_boot_cpu_info *info = p;
   28.96  	do_boot_cpu(info->apicid, info->cpu);
   28.97  	complete(info->complete);
   28.98  }
   28.99  
  28.100 -int __devinit smp_prepare_cpu(int cpu)
  28.101 +static int __cpuinit __smp_prepare_cpu(int cpu)
  28.102  {
  28.103  	DECLARE_COMPLETION(done);
  28.104  	struct warm_boot_cpu_info info;
  28.105  	struct work_struct task;
  28.106  	int	apicid, ret;
  28.107  
  28.108 -	lock_cpu_hotplug();
  28.109 -
  28.110 -	/*
  28.111 -	 * On x86, CPU0 is never offlined.  Trying to bring up an
  28.112 -	 * already-booted CPU will hang.  So check for that case.
  28.113 -	 */
  28.114 -	if (cpu_online(cpu)) {
  28.115 -		ret = -EINVAL;
  28.116 -		goto exit;
  28.117 -	}
  28.118 -
  28.119  	apicid = x86_cpu_to_apicid[cpu];
  28.120  	if (apicid == BAD_APICID) {
  28.121  		ret = -ENODEV;
  28.122 @@ -1063,7 +1078,6 @@ int __devinit smp_prepare_cpu(int cpu)
  28.123  	zap_low_mappings();
  28.124  	ret = 0;
  28.125  exit:
  28.126 -	unlock_cpu_hotplug();
  28.127  	return ret;
  28.128  }
  28.129  #endif
  28.130 @@ -1218,11 +1232,6 @@ static void __init smp_boot_cpus(unsigne
  28.131  		if (max_cpus <= cpucount+1)
  28.132  			continue;
  28.133  
  28.134 -#ifdef CONFIG_SMP_ALTERNATIVES
  28.135 -		if (kicked == 1)
  28.136 -			prepare_for_smp();
  28.137 -#endif
  28.138 -
  28.139  		if (((cpu = alloc_cpu_id()) <= 0) || do_boot_cpu(apicid, cpu))
  28.140  			printk("CPU #%d not responding - cannot use it.\n",
  28.141  								apicid);
  28.142 @@ -1373,6 +1382,8 @@ void __cpu_die(unsigned int cpu)
  28.143  		/* They ack this in play_dead by setting CPU_DEAD */
  28.144  		if (per_cpu(cpu_state, cpu) == CPU_DEAD) {
  28.145  			printk ("CPU %d is now offline\n", cpu);
  28.146 +			if (1 == num_online_cpus())
  28.147 +				alternatives_smp_switch(0);
  28.148  			return;
  28.149  		}
  28.150  		msleep(100);
  28.151 @@ -1394,6 +1405,22 @@ void __cpu_die(unsigned int cpu)
  28.152  
  28.153  int __devinit __cpu_up(unsigned int cpu)
  28.154  {
  28.155 +#ifdef CONFIG_HOTPLUG_CPU
  28.156 +	int ret=0;
  28.157 +
  28.158 +	/*
  28.159 +	 * We do warm boot only on cpus that had booted earlier
  28.160 +	 * Otherwise cold boot is all handled from smp_boot_cpus().
  28.161 +	 * cpu_callin_map is set during AP kickstart process. Its reset
  28.162 +	 * when a cpu is taken offline from cpu_exit_clear().
  28.163 +	 */
  28.164 +	if (!cpu_isset(cpu, cpu_callin_map))
  28.165 +		ret = __smp_prepare_cpu(cpu);
  28.166 +
  28.167 +	if (ret)
  28.168 +		return -EIO;
  28.169 +#endif
  28.170 +
  28.171  	/* In case one didn't come up */
  28.172  	if (!cpu_isset(cpu, cpu_callin_map)) {
  28.173  		printk(KERN_DEBUG "skipping cpu%d, didn't come online\n", cpu);
  28.174 @@ -1401,11 +1428,6 @@ int __devinit __cpu_up(unsigned int cpu)
  28.175  		return -EIO;
  28.176  	}
  28.177  
  28.178 -#ifdef CONFIG_SMP_ALTERNATIVES
  28.179 -	if (num_online_cpus() == 1)
  28.180 -		prepare_for_smp();
  28.181 -#endif
  28.182 -
  28.183  	local_irq_enable();
  28.184  	per_cpu(cpu_state, cpu) = CPU_UP_PREPARE;
  28.185  	/* Unleash the CPU! */
    29.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/traps-xen.c	Tue Jan 09 10:50:46 2007 +0000
    29.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/traps-xen.c	Fri Jan 12 14:30:49 2007 +0000
    29.3 @@ -98,32 +98,50 @@ asmlinkage void fixup_4gb_segment(void);
    29.4  asmlinkage void machine_check(void);
    29.5  
    29.6  static int kstack_depth_to_print = 24;
    29.7 -struct notifier_block *i386die_chain;
    29.8 -static DEFINE_SPINLOCK(die_notifier_lock);
    29.9 +ATOMIC_NOTIFIER_HEAD(i386die_chain);
   29.10  
   29.11  int register_die_notifier(struct notifier_block *nb)
   29.12  {
   29.13 -	int err = 0;
   29.14 -	unsigned long flags;
   29.15 -	spin_lock_irqsave(&die_notifier_lock, flags);
   29.16 -	err = notifier_chain_register(&i386die_chain, nb);
   29.17 -	spin_unlock_irqrestore(&die_notifier_lock, flags);
   29.18 -	return err;
   29.19 +	vmalloc_sync_all();
   29.20 +	return atomic_notifier_chain_register(&i386die_chain, nb);
   29.21  }
   29.22  EXPORT_SYMBOL(register_die_notifier);
   29.23  
   29.24 +int unregister_die_notifier(struct notifier_block *nb)
   29.25 +{
   29.26 +	return atomic_notifier_chain_unregister(&i386die_chain, nb);
   29.27 +}
   29.28 +EXPORT_SYMBOL(unregister_die_notifier);
   29.29 +
   29.30  static inline int valid_stack_ptr(struct thread_info *tinfo, void *p)
   29.31  {
   29.32  	return	p > (void *)tinfo &&
   29.33  		p < (void *)tinfo + THREAD_SIZE - 3;
   29.34  }
   29.35  
   29.36 -static void print_addr_and_symbol(unsigned long addr, char *log_lvl)
   29.37 +/*
   29.38 + * Print CONFIG_STACK_BACKTRACE_COLS address/symbol entries per line.
   29.39 + */
   29.40 +static inline int print_addr_and_symbol(unsigned long addr, char *log_lvl,
   29.41 +					int printed)
   29.42  {
   29.43 -	printk(log_lvl);
   29.44 +	if (!printed)
   29.45 +		printk(log_lvl);
   29.46 +
   29.47 +#if CONFIG_STACK_BACKTRACE_COLS == 1
   29.48  	printk(" [<%08lx>] ", addr);
   29.49 +#else
   29.50 +	printk(" <%08lx> ", addr);
   29.51 +#endif
   29.52  	print_symbol("%s", addr);
   29.53 -	printk("\n");
   29.54 +
   29.55 +	printed = (printed + 1) % CONFIG_STACK_BACKTRACE_COLS;
   29.56 +	if (printed)
   29.57 +		printk(" ");
   29.58 +	else
   29.59 +		printk("\n");
   29.60 +
   29.61 +	return printed;
   29.62  }
   29.63  
   29.64  static inline unsigned long print_context_stack(struct thread_info *tinfo,
   29.65 @@ -131,20 +149,24 @@ static inline unsigned long print_contex
   29.66  				char *log_lvl)
   29.67  {
   29.68  	unsigned long addr;
   29.69 +	int printed = 0; /* nr of entries already printed on current line */
   29.70  
   29.71  #ifdef	CONFIG_FRAME_POINTER
   29.72  	while (valid_stack_ptr(tinfo, (void *)ebp)) {
   29.73  		addr = *(unsigned long *)(ebp + 4);
   29.74 -		print_addr_and_symbol(addr, log_lvl);
   29.75 +		printed = print_addr_and_symbol(addr, log_lvl, printed);
   29.76  		ebp = *(unsigned long *)ebp;
   29.77  	}
   29.78  #else
   29.79  	while (valid_stack_ptr(tinfo, stack)) {
   29.80  		addr = *stack++;
   29.81  		if (__kernel_text_address(addr))
   29.82 -			print_addr_and_symbol(addr, log_lvl);
   29.83 +			printed = print_addr_and_symbol(addr, log_lvl, printed);
   29.84  	}
   29.85  #endif
   29.86 +	if (printed)
   29.87 +		printk("\n");
   29.88 +
   29.89  	return ebp;
   29.90  }
   29.91  
   29.92 @@ -172,8 +194,7 @@ static void show_trace_log_lvl(struct ta
   29.93  		stack = (unsigned long*)context->previous_esp;
   29.94  		if (!stack)
   29.95  			break;
   29.96 -		printk(log_lvl);
   29.97 -		printk(" =======================\n");
   29.98 +		printk("%s =======================\n", log_lvl);
   29.99  	}
  29.100  }
  29.101  
  29.102 @@ -196,25 +217,20 @@ static void show_stack_log_lvl(struct ta
  29.103  	}
  29.104  
  29.105  	stack = esp;
  29.106 -	printk(log_lvl);
  29.107  	for(i = 0; i < kstack_depth_to_print; i++) {
  29.108  		if (kstack_end(stack))
  29.109  			break;
  29.110 -		if (i && ((i % 8) == 0)) {
  29.111 -			printk("\n");
  29.112 -			printk(log_lvl);
  29.113 -			printk("       ");
  29.114 -		}
  29.115 +		if (i && ((i % 8) == 0))
  29.116 +			printk("\n%s       ", log_lvl);
  29.117  		printk("%08lx ", *stack++);
  29.118  	}
  29.119 -	printk("\n");
  29.120 -	printk(log_lvl);
  29.121 -	printk("Call Trace:\n");
  29.122 +	printk("\n%sCall Trace:\n", log_lvl);
  29.123  	show_trace_log_lvl(task, esp, log_lvl);
  29.124  }
  29.125  
  29.126  void show_stack(struct task_struct *task, unsigned long *esp)
  29.127  {
  29.128 +	printk("       ");
  29.129  	show_stack_log_lvl(task, esp, "");
  29.130  }
  29.131  
  29.132 @@ -239,7 +255,7 @@ void show_registers(struct pt_regs *regs
  29.133  
  29.134  	esp = (unsigned long) (&regs->esp);
  29.135  	savesegment(ss, ss);
  29.136 -	if (user_mode(regs)) {
  29.137 +	if (user_mode_vm(regs)) {
  29.138  		in_kernel = 0;
  29.139  		esp = regs->esp;
  29.140  		ss = regs->xss & 0xffff;
  29.141 @@ -339,6 +355,8 @@ void die(const char * str, struct pt_reg
  29.142  	static int die_counter;
  29.143  	unsigned long flags;
  29.144  
  29.145 +	oops_enter();
  29.146 +
  29.147  	if (die.lock_owner != raw_smp_processor_id()) {
  29.148  		console_verbose();
  29.149  		spin_lock_irqsave(&die.lock, flags);
  29.150 @@ -351,6 +369,9 @@ void die(const char * str, struct pt_reg
  29.151  
  29.152  	if (++die.lock_owner_depth < 3) {
  29.153  		int nl = 0;
  29.154 +		unsigned long esp;
  29.155 +		unsigned short ss;
  29.156 +
  29.157  		handle_BUG(regs);
  29.158  		printk(KERN_EMERG "%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter);
  29.159  #ifdef CONFIG_PREEMPT
  29.160 @@ -371,8 +392,23 @@ void die(const char * str, struct pt_reg
  29.161  #endif
  29.162  		if (nl)
  29.163  			printk("\n");
  29.164 -	notify_die(DIE_OOPS, (char *)str, regs, err, 255, SIGSEGV);
  29.165 -		show_registers(regs);
  29.166 +		if (notify_die(DIE_OOPS, str, regs, err,
  29.167 +					current->thread.trap_no, SIGSEGV) !=
  29.168 +				NOTIFY_STOP) {
  29.169 +			show_registers(regs);
  29.170 +			/* Executive summary in case the oops scrolled away */
  29.171 +			esp = (unsigned long) (&regs->esp);
  29.172 +			savesegment(ss, ss);
  29.173 +			if (user_mode(regs)) {
  29.174 +				esp = regs->esp;
  29.175 +				ss = regs->xss & 0xffff;
  29.176 +			}
  29.177 +			printk(KERN_EMERG "EIP: [<%08lx>] ", regs->eip);
  29.178 +			print_symbol("%s", regs->eip);
  29.179 +			printk(" SS:ESP %04x:%08lx\n", ss, esp);
  29.180 +		}
  29.181 +		else
  29.182 +			regs = NULL;
  29.183    	} else
  29.184  		printk(KERN_EMERG "Recursive die() failure, output suppressed\n");
  29.185  
  29.186 @@ -380,6 +416,9 @@ void die(const char * str, struct pt_reg
  29.187  	die.lock_owner = -1;
  29.188  	spin_unlock_irqrestore(&die.lock, flags);
  29.189  
  29.190 +	if (!regs)
  29.191 +		return;
  29.192 +
  29.193  	if (kexec_should_crash(current))
  29.194  		crash_kexec(regs);
  29.195  
  29.196 @@ -391,6 +430,7 @@ void die(const char * str, struct pt_reg
  29.197  		ssleep(5);
  29.198  		panic("Fatal exception");
  29.199  	}
  29.200 +	oops_exit();
  29.201  	do_exit(SIGSEGV);
  29.202  }
  29.203  
  29.204 @@ -569,7 +609,7 @@ static DEFINE_SPINLOCK(nmi_print_lock);
  29.205  
  29.206  void die_nmi (struct pt_regs *regs, const char *msg)
  29.207  {
  29.208 -	if (notify_die(DIE_NMIWATCHDOG, msg, regs, 0, 0, SIGINT) ==
  29.209 +	if (notify_die(DIE_NMIWATCHDOG, msg, regs, 0, 2, SIGINT) ==
  29.210  	    NOTIFY_STOP)
  29.211  		return;
  29.212  
  29.213 @@ -591,7 +631,7 @@ void die_nmi (struct pt_regs *regs, cons
  29.214  	/* If we are in kernel we are probably nested up pretty bad
  29.215  	 * and might aswell get out now while we still can.
  29.216  	*/
  29.217 -	if (!user_mode(regs)) {
  29.218 +	if (!user_mode_vm(regs)) {
  29.219  		current->thread.trap_no = 2;
  29.220  		crash_kexec(regs);
  29.221  	}
  29.222 @@ -608,7 +648,7 @@ static void default_do_nmi(struct pt_reg
  29.223  		reason = get_nmi_reason();
  29.224   
  29.225  	if (!(reason & 0xc0)) {
  29.226 -		if (notify_die(DIE_NMI_IPI, "nmi_ipi", regs, reason, 0, SIGINT)
  29.227 +		if (notify_die(DIE_NMI_IPI, "nmi_ipi", regs, reason, 2, SIGINT)
  29.228  							== NOTIFY_STOP)
  29.229  			return;
  29.230  #ifdef CONFIG_X86_LOCAL_APIC
  29.231 @@ -624,7 +664,7 @@ static void default_do_nmi(struct pt_reg
  29.232  		unknown_nmi_error(reason, regs);
  29.233  		return;
  29.234  	}
  29.235 -	if (notify_die(DIE_NMI, "nmi", regs, reason, 0, SIGINT) == NOTIFY_STOP)
  29.236 +	if (notify_die(DIE_NMI, "nmi", regs, reason, 2, SIGINT) == NOTIFY_STOP)
  29.237  		return;
  29.238  	if (reason & 0x80)
  29.239  		mem_parity_error(reason, regs);
  29.240 @@ -662,6 +702,7 @@ fastcall void do_nmi(struct pt_regs * re
  29.241  
  29.242  void set_nmi_callback(nmi_callback_t callback)
  29.243  {
  29.244 +	vmalloc_sync_all();
  29.245  	rcu_assign_pointer(nmi_callback, callback);
  29.246  }
  29.247  EXPORT_SYMBOL_GPL(set_nmi_callback);
  29.248 @@ -1089,6 +1130,6 @@ void smp_trap_init(trap_info_t *trap_ctx
  29.249  static int __init kstack_setup(char *s)
  29.250  {
  29.251  	kstack_depth_to_print = simple_strtoul(s, NULL, 0);
  29.252 -	return 0;
  29.253 +	return 1;
  29.254  }
  29.255  __setup("kstack=", kstack_setup);
    30.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/traps.c	Tue Jan 09 10:50:46 2007 +0000
    30.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/traps.c	Fri Jan 12 14:30:49 2007 +0000
    30.3 @@ -92,32 +92,50 @@ asmlinkage void spurious_interrupt_bug(v
    30.4  asmlinkage void machine_check(void);
    30.5  
    30.6  static int kstack_depth_to_print = 24;
    30.7 -struct notifier_block *i386die_chain;
    30.8 -static DEFINE_SPINLOCK(die_notifier_lock);
    30.9 +ATOMIC_NOTIFIER_HEAD(i386die_chain);
   30.10  
   30.11  int register_die_notifier(struct notifier_block *nb)
   30.12  {
   30.13 -	int err = 0;
   30.14 -	unsigned long flags;
   30.15 -	spin_lock_irqsave(&die_notifier_lock, flags);
   30.16 -	err = notifier_chain_register(&i386die_chain, nb);
   30.17 -	spin_unlock_irqrestore(&die_notifier_lock, flags);
   30.18 -	return err;
   30.19 +	vmalloc_sync_all();
   30.20 +	return atomic_notifier_chain_register(&i386die_chain, nb);
   30.21  }
   30.22  EXPORT_SYMBOL(register_die_notifier);
   30.23  
   30.24 +int unregister_die_notifier(struct notifier_block *nb)
   30.25 +{
   30.26 +	return atomic_notifier_chain_unregister(&i386die_chain, nb);
   30.27 +}
   30.28 +EXPORT_SYMBOL(unregister_die_notifier);
   30.29 +
   30.30  static inline int valid_stack_ptr(struct thread_info *tinfo, void *p)
   30.31  {
   30.32  	return	p > (void *)tinfo &&
   30.33  		p < (void *)tinfo + THREAD_SIZE - 3;
   30.34  }
   30.35  
   30.36 -static void print_addr_and_symbol(unsigned long addr, char *log_lvl)
   30.37 +/*
   30.38 + * Print CONFIG_STACK_BACKTRACE_COLS address/symbol entries per line.
   30.39 + */
   30.40 +static inline int print_addr_and_symbol(unsigned long addr, char *log_lvl,
   30.41 +					int printed)
   30.42  {
   30.43 -	printk(log_lvl);
   30.44 +	if (!printed)
   30.45 +		printk(log_lvl);
   30.46 +
   30.47 +#if CONFIG_STACK_BACKTRACE_COLS == 1
   30.48  	printk(" [<%08lx>] ", addr);
   30.49 +#else
   30.50 +	printk(" <%08lx> ", addr);
   30.51 +#endif
   30.52  	print_symbol("%s", addr);
   30.53 -	printk("\n");
   30.54 +
   30.55 +	printed = (printed + 1) % CONFIG_STACK_BACKTRACE_COLS;
   30.56 +	if (printed)
   30.57 +		printk(" ");
   30.58 +	else
   30.59 +		printk("\n");
   30.60 +
   30.61 +	return printed;
   30.62  }
   30.63  
   30.64  static inline unsigned long print_context_stack(struct thread_info *tinfo,
   30.65 @@ -125,20 +143,24 @@ static inline unsigned long print_contex
   30.66  				char *log_lvl)
   30.67  {
   30.68  	unsigned long addr;
   30.69 +	int printed = 0; /* nr of entries already printed on current line */
   30.70  
   30.71  #ifdef	CONFIG_FRAME_POINTER
   30.72  	while (valid_stack_ptr(tinfo, (void *)ebp)) {
   30.73  		addr = *(unsigned long *)(ebp + 4);
   30.74 -		print_addr_and_symbol(addr, log_lvl);
   30.75 +		printed = print_addr_and_symbol(addr, log_lvl, printed);
   30.76  		ebp = *(unsigned long *)ebp;
   30.77  	}
   30.78  #else
   30.79  	while (valid_stack_ptr(tinfo, stack)) {
   30.80  		addr = *stack++;
   30.81  		if (__kernel_text_address(addr))
   30.82 -			print_addr_and_symbol(addr, log_lvl);
   30.83 +			printed = print_addr_and_symbol(addr, log_lvl, printed);
   30.84  	}
   30.85  #endif
   30.86 +	if (printed)
   30.87 +		printk("\n");
   30.88 +
   30.89  	return ebp;
   30.90  }
   30.91  
   30.92 @@ -166,8 +188,7 @@ static void show_trace_log_lvl(struct ta
   30.93  		stack = (unsigned long*)context->previous_esp;
   30.94  		if (!stack)
   30.95  			break;
   30.96 -		printk(log_lvl);
   30.97 -		printk(" =======================\n");
   30.98 +		printk("%s =======================\n", log_lvl);
   30.99  	}
  30.100  }
  30.101  
  30.102 @@ -190,25 +211,20 @@ static void show_stack_log_lvl(struct ta
  30.103  	}
  30.104  
  30.105  	stack = esp;
  30.106 -	printk(log_lvl);
  30.107  	for(i = 0; i < kstack_depth_to_print; i++) {
  30.108  		if (kstack_end(stack))
  30.109  			break;
  30.110 -		if (i && ((i % 8) == 0)) {
  30.111 -			printk("\n");
  30.112 -			printk(log_lvl);
  30.113 -			printk("       ");
  30.114 -		}
  30.115 +		if (i && ((i % 8) == 0))
  30.116 +			printk("\n%s       ", log_lvl);
  30.117  		printk("%08lx ", *stack++);
  30.118  	}
  30.119 -	printk("\n");
  30.120 -	printk(log_lvl);
  30.121 -	printk("Call Trace:\n");
  30.122 +	printk("\n%sCall Trace:\n", log_lvl);
  30.123  	show_trace_log_lvl(task, esp, log_lvl);
  30.124  }
  30.125  
  30.126  void show_stack(struct task_struct *task, unsigned long *esp)
  30.127  {
  30.128 +	printk("       ");
  30.129  	show_stack_log_lvl(task, esp, "");
  30.130  }
  30.131  
  30.132 @@ -233,7 +249,7 @@ void show_registers(struct pt_regs *regs
  30.133  
  30.134  	esp = (unsigned long) (&regs->esp);
  30.135  	savesegment(ss, ss);
  30.136 -	if (user_mode(regs)) {
  30.137 +	if (user_mode_vm(regs)) {
  30.138  		in_kernel = 0;
  30.139  		esp = regs->esp;
  30.140  		ss = regs->xss & 0xffff;
  30.141 @@ -333,6 +349,8 @@ void die(const char * str, struct pt_reg
  30.142  	static int die_counter;
  30.143  	unsigned long flags;
  30.144  
  30.145 +	oops_enter();
  30.146 +
  30.147  	if (die.lock_owner != raw_smp_processor_id()) {
  30.148  		console_verbose();
  30.149  		spin_lock_irqsave(&die.lock, flags);
  30.150 @@ -345,6 +363,9 @@ void die(const char * str, struct pt_reg
  30.151  
  30.152  	if (++die.lock_owner_depth < 3) {
  30.153  		int nl = 0;
  30.154 +		unsigned long esp;
  30.155 +		unsigned short ss;
  30.156 +
  30.157  		handle_BUG(regs);
  30.158  		printk(KERN_EMERG "%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter);
  30.159  #ifdef CONFIG_PREEMPT
  30.160 @@ -365,8 +386,23 @@ void die(const char * str, struct pt_reg
  30.161  #endif
  30.162  		if (nl)
  30.163  			printk("\n");
  30.164 -	notify_die(DIE_OOPS, (char *)str, regs, err, 255, SIGSEGV);
  30.165 -		show_registers(regs);
  30.166 +		if (notify_die(DIE_OOPS, str, regs, err,
  30.167 +					current->thread.trap_no, SIGSEGV) !=
  30.168 +				NOTIFY_STOP) {
  30.169 +			show_registers(regs);
  30.170 +			/* Executive summary in case the oops scrolled away */
  30.171 +			esp = (unsigned long) (&regs->esp);
  30.172 +			savesegment(ss, ss);
  30.173 +			if (user_mode(regs)) {
  30.174 +				esp = regs->esp;
  30.175 +				ss = regs->xss & 0xffff;
  30.176 +			}
  30.177 +			printk(KERN_EMERG "EIP: [<%08lx>] ", regs->eip);
  30.178 +			print_symbol("%s", regs->eip);
  30.179 +			printk(" SS:ESP %04x:%08lx\n", ss, esp);
  30.180 +		}
  30.181 +		else
  30.182 +			regs = NULL;
  30.183    	} else
  30.184  		printk(KERN_EMERG "Recursive die() failure, output suppressed\n");
  30.185  
  30.186 @@ -374,6 +410,9 @@ void die(const char * str, struct pt_reg
  30.187  	die.lock_owner = -1;
  30.188  	spin_unlock_irqrestore(&die.lock, flags);
  30.189  
  30.190 +	if (!regs)
  30.191 +		return;
  30.192 +
  30.193  	if (kexec_should_crash(current))
  30.194  		crash_kexec(regs);
  30.195  
  30.196 @@ -385,6 +424,7 @@ void die(const char * str, struct pt_reg
  30.197  		ssleep(5);
  30.198  		panic("Fatal exception");
  30.199  	}
  30.200 +	oops_exit();
  30.201  	do_exit(SIGSEGV);
  30.202  }
  30.203  
  30.204 @@ -594,7 +634,7 @@ static DEFINE_SPINLOCK(nmi_print_lock);
  30.205  
  30.206  void die_nmi (struct pt_regs *regs, const char *msg)
  30.207  {
  30.208 -	if (notify_die(DIE_NMIWATCHDOG, msg, regs, 0, 0, SIGINT) ==
  30.209 +	if (notify_die(DIE_NMIWATCHDOG, msg, regs, 0, 2, SIGINT) ==
  30.210  	    NOTIFY_STOP)
  30.211  		return;
  30.212  
  30.213 @@ -616,7 +656,7 @@ void die_nmi (struct pt_regs *regs, cons
  30.214  	/* If we are in kernel we are probably nested up pretty bad
  30.215  	 * and might aswell get out now while we still can.
  30.216  	*/
  30.217 -	if (!user_mode(regs)) {
  30.218 +	if (!user_mode_vm(regs)) {
  30.219  		current->thread.trap_no = 2;
  30.220  		crash_kexec(regs);
  30.221  	}
  30.222 @@ -633,7 +673,7 @@ static void default_do_nmi(struct pt_reg
  30.223  		reason = get_nmi_reason();
  30.224   
  30.225  	if (!(reason & 0xc0)) {
  30.226 -		if (notify_die(DIE_NMI_IPI, "nmi_ipi", regs, reason, 0, SIGINT)
  30.227 +		if (notify_die(DIE_NMI_IPI, "nmi_ipi", regs, reason, 2, SIGINT)
  30.228  							== NOTIFY_STOP)
  30.229  			return;
  30.230  #ifdef CONFIG_X86_LOCAL_APIC
  30.231 @@ -649,7 +689,7 @@ static void default_do_nmi(struct pt_reg
  30.232  		unknown_nmi_error(reason, regs);
  30.233  		return;
  30.234  	}
  30.235 -	if (notify_die(DIE_NMI, "nmi", regs, reason, 0, SIGINT) == NOTIFY_STOP)
  30.236 +	if (notify_die(DIE_NMI, "nmi", regs, reason, 2, SIGINT) == NOTIFY_STOP)
  30.237  		return;
  30.238  	if (reason & 0x80)
  30.239  		mem_parity_error(reason, regs);
  30.240 @@ -687,6 +727,7 @@ fastcall void do_nmi(struct pt_regs * re
  30.241  
  30.242  void set_nmi_callback(nmi_callback_t callback)
  30.243  {
  30.244 +	vmalloc_sync_all();
  30.245  	rcu_assign_pointer(nmi_callback, callback);
  30.246  }
  30.247  EXPORT_SYMBOL_GPL(set_nmi_callback);
  30.248 @@ -1157,6 +1198,6 @@ void __init trap_init(void)
  30.249  static int __init kstack_setup(char *s)
  30.250  {
  30.251  	kstack_depth_to_print = simple_strtoul(s, NULL, 0);
  30.252 -	return 0;
  30.253 +	return 1;
  30.254  }
  30.255  __setup("kstack=", kstack_setup);
    31.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/vm86.c	Tue Jan 09 10:50:46 2007 +0000
    31.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/vm86.c	Fri Jan 12 14:30:49 2007 +0000
    31.3 @@ -324,7 +324,7 @@ static void do_sys_vm86(struct kernel_vm
    31.4  
    31.5  	/*call audit_syscall_exit since we do not exit via the normal paths */
    31.6  	if (unlikely(current->audit_context))
    31.7 -		audit_syscall_exit(current, AUDITSC_RESULT(eax), eax);
    31.8 +		audit_syscall_exit(AUDITSC_RESULT(eax), eax);
    31.9  
   31.10  	__asm__ __volatile__(
   31.11  		"movl %0,%%esp\n\t"
    32.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/vmlinux.lds.S	Tue Jan 09 10:50:46 2007 +0000
    32.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/vmlinux.lds.S	Fri Jan 12 14:30:49 2007 +0000
    32.3 @@ -7,6 +7,7 @@
    32.4  #include <asm-generic/vmlinux.lds.h>
    32.5  #include <asm/thread_info.h>
    32.6  #include <asm/page.h>
    32.7 +#include <asm/cache.h>
    32.8  
    32.9  OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
   32.10  OUTPUT_ARCH(i386)
   32.11 @@ -40,13 +41,6 @@ SECTIONS
   32.12    __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) { *(__ex_table) }
   32.13    __stop___ex_table = .;
   32.14  
   32.15 -  . = ALIGN(16);
   32.16 -  __start_smp_alternatives_table = .;
   32.17 -  __smp_alternatives : AT(ADDR(__smp_alternatives) - LOAD_OFFSET) { *(__smp_alternatives) }
   32.18 -  __stop_smp_alternatives_table = .;
   32.19 -
   32.20 -  __smp_replacements : AT(ADDR(__smp_replacements) - LOAD_OFFSET) { *(__smp_replacements) }
   32.21 -
   32.22    RODATA
   32.23  
   32.24    /* writeable */
   32.25 @@ -81,6 +75,26 @@ SECTIONS
   32.26  	*(.data.init_task)
   32.27    }
   32.28  
   32.29 +  /* might get freed after init */
   32.30 +  . = ALIGN(4096);
   32.31 +  __smp_alt_begin = .;
   32.32 +  __smp_alt_instructions = .;
   32.33 +  .smp_altinstructions : AT(ADDR(.smp_altinstructions) - LOAD_OFFSET) {
   32.34 +	*(.smp_altinstructions)
   32.35 +  }
   32.36 +  __smp_alt_instructions_end = .;
   32.37 +  . = ALIGN(4);
   32.38 +  __smp_locks = .;
   32.39 +  .smp_locks : AT(ADDR(.smp_locks) - LOAD_OFFSET) {
   32.40 +	*(.smp_locks)
   32.41 +  }
   32.42 +  __smp_locks_end = .;
   32.43 +  .smp_altinstr_replacement : AT(ADDR(.smp_altinstr_replacement) - LOAD_OFFSET) {
   32.44 +	*(.smp_altinstr_replacement)
   32.45 +  }
   32.46 +  . = ALIGN(4096);
   32.47 +  __smp_alt_end = .;
   32.48 +
   32.49    /* will be freed after init */
   32.50    . = ALIGN(4096);		/* Init code and data */
   32.51    __init_begin = .;
   32.52 @@ -128,7 +142,7 @@ SECTIONS
   32.53    __initramfs_start = .;
   32.54    .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { *(.init.ramfs) }
   32.55    __initramfs_end = .;
   32.56 -  . = ALIGN(32);
   32.57 +  . = ALIGN(L1_CACHE_BYTES);
   32.58    __per_cpu_start = .;
   32.59    .data.percpu  : AT(ADDR(.data.percpu) - LOAD_OFFSET) { *(.data.percpu) }
   32.60    __per_cpu_end = .;
    33.1 --- a/linux-2.6-xen-sparse/arch/i386/mm/fault-xen.c	Tue Jan 09 10:50:46 2007 +0000
    33.2 +++ b/linux-2.6-xen-sparse/arch/i386/mm/fault-xen.c	Fri Jan 12 14:30:49 2007 +0000
    33.3 @@ -252,8 +252,9 @@ static void dump_fault_path(unsigned lon
    33.4  
    33.5  	page = read_cr3();
    33.6  	page = ((unsigned long *) __va(page))[address >> 22];
    33.7 -	printk(KERN_ALERT "*pde = ma %08lx pa %08lx\n", page,
    33.8 -	       machine_to_phys(page));
    33.9 +	if (oops_may_print())
   33.10 +		printk(KERN_ALERT "*pde = ma %08lx pa %08lx\n", page,
   33.11 +		       machine_to_phys(page));
   33.12  	/*
   33.13  	 * We must not directly access the pte in the highpte
   33.14  	 * case, the page table might be allocated in highmem.
   33.15 @@ -261,7 +262,7 @@ static void dump_fault_path(unsigned lon
   33.16  	 * it's allocated already.
   33.17  	 */
   33.18  #ifndef CONFIG_HIGHPTE
   33.19 -	if (page & 1) {
   33.20 +	if ((page & 1) && oops_may_print()) {
   33.21  		page &= PAGE_MASK;
   33.22  		address &= 0x003ff000;
   33.23  		page = machine_to_phys(page);
   33.24 @@ -311,6 +312,76 @@ static int spurious_fault(struct pt_regs
   33.25  	return 1;
   33.26  }
   33.27  
   33.28 +static inline pmd_t *vmalloc_sync_one(pgd_t *pgd, unsigned long address)
   33.29 +{
   33.30 +	unsigned index = pgd_index(address);
   33.31 +	pgd_t *pgd_k;
   33.32 +	pud_t *pud, *pud_k;
   33.33 +	pmd_t *pmd, *pmd_k;
   33.34 +
   33.35 +	pgd += index;
   33.36 +	pgd_k = init_mm.pgd + index;
   33.37 +
   33.38 +	if (!pgd_present(*pgd_k))
   33.39 +		return NULL;
   33.40 +
   33.41 +	/*
   33.42 +	 * set_pgd(pgd, *pgd_k); here would be useless on PAE
   33.43 +	 * and redundant with the set_pmd() on non-PAE. As would
   33.44 +	 * set_pud.
   33.45 +	 */
   33.46 +
   33.47 +	pud = pud_offset(pgd, address);
   33.48 +	pud_k = pud_offset(pgd_k, address);
   33.49 +	if (!pud_present(*pud_k))
   33.50 +		return NULL;
   33.51 +
   33.52 +	pmd = pmd_offset(pud, address);
   33.53 +	pmd_k = pmd_offset(pud_k, address);
   33.54 +	if (!pmd_present(*pmd_k))
   33.55 +		return NULL;
   33.56 +	if (!pmd_present(*pmd))
   33.57 +#ifndef CONFIG_XEN
   33.58 +		set_pmd(pmd, *pmd_k);
   33.59 +#else
   33.60 +		/*
   33.61 +		 * When running on Xen we must launder *pmd_k through
   33.62 +		 * pmd_val() to ensure that _PAGE_PRESENT is correctly set.
   33.63 +		 */
   33.64 +		set_pmd(pmd, __pmd(pmd_val(*pmd_k)));
   33.65 +#endif
   33.66 +	else
   33.67 +		BUG_ON(pmd_page(*pmd) != pmd_page(*pmd_k));
   33.68 +	return pmd_k;
   33.69 +}
   33.70 +
   33.71 +/*
   33.72 + * Handle a fault on the vmalloc or module mapping area
   33.73 + *
   33.74 + * This assumes no large pages in there.
   33.75 + */
   33.76 +static inline int vmalloc_fault(unsigned long address)
   33.77 +{
   33.78 +	unsigned long pgd_paddr;
   33.79 +	pmd_t *pmd_k;
   33.80 +	pte_t *pte_k;
   33.81 +	/*
   33.82 +	 * Synchronize this task's top level page-table
   33.83 +	 * with the 'reference' page table.
   33.84 +	 *
   33.85 +	 * Do _not_ use "current" here. We might be inside
   33.86 +	 * an interrupt in the middle of a task switch..
   33.87 +	 */
   33.88 +	pgd_paddr = read_cr3();
   33.89 +	pmd_k = vmalloc_sync_one(__va(pgd_paddr), address);
   33.90 +	if (!pmd_k)
   33.91 +		return -1;
   33.92 +	pte_k = pte_offset_kernel(pmd_k, address);
   33.93 +	if (!pte_present(*pte_k))
   33.94 +		return -1;
   33.95 +	return 0;
   33.96 +}
   33.97 +
   33.98  /*
   33.99   * This routine handles page faults.  It determines the address,
  33.100   * and the problem, and then passes it off to one of the appropriate
  33.101 @@ -320,6 +391,8 @@ static int spurious_fault(struct pt_regs
  33.102   *	bit 0 == 0 means no page found, 1 means protection fault
  33.103   *	bit 1 == 0 means read, 1 means write
  33.104   *	bit 2 == 0 means kernel, 1 means user-mode
  33.105 + *	bit 3 == 1 means use of reserved bit detected
  33.106 + *	bit 4 == 1 means fault was an instruction fetch
  33.107   */
  33.108  fastcall void __kprobes do_page_fault(struct pt_regs *regs,
  33.109  				      unsigned long error_code)
  33.110 @@ -339,13 +412,6 @@ fastcall void __kprobes do_page_fault(st
  33.111  	if (regs->eflags & X86_EFLAGS_VM)
  33.112  		error_code |= 4;
  33.113  
  33.114 -	if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
  33.115 -					SIGSEGV) == NOTIFY_STOP)
  33.116 -		return;
  33.117 -	/* It's safe to allow irq's after cr2 has been saved */
  33.118 -	if (regs->eflags & (X86_EFLAGS_IF|VM_MASK))
  33.119 -		local_irq_enable();
  33.120 -
  33.121  	tsk = current;
  33.122  
  33.123  	si_code = SEGV_MAPERR;
  33.124 @@ -361,25 +427,37 @@ fastcall void __kprobes do_page_fault(st
  33.125  	 *
  33.126  	 * This verifies that the fault happens in kernel space
  33.127  	 * (error_code & 4) == 0, and that the fault was not a
  33.128 -	 * protection error (error_code & 1) == 0.
  33.129 +	 * protection error (error_code & 9) == 0.
  33.130  	 */
  33.131 -	if (unlikely(address >= TASK_SIZE)) { 
  33.132 +	if (unlikely(address >= TASK_SIZE)) {
  33.133  #ifdef CONFIG_XEN
  33.134  		/* Faults in hypervisor area can never be patched up. */
  33.135  		if (address >= hypervisor_virt_start)
  33.136  			goto bad_area_nosemaphore;
  33.137  #endif
  33.138 -		if (!(error_code & 5))
  33.139 -			goto vmalloc_fault;
  33.140 +		if (!(error_code & 0x0000000d) && vmalloc_fault(address) >= 0)
  33.141 +			return;
  33.142  		/* Can take a spurious fault if mapping changes R/O -> R/W. */
  33.143  		if (spurious_fault(regs, address, error_code))
  33.144  			return;
  33.145 +		if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
  33.146 +						SIGSEGV) == NOTIFY_STOP)
  33.147 +			return;
  33.148  		/* 
  33.149  		 * Don't take the mm semaphore here. If we fixup a prefetch
  33.150  		 * fault we could otherwise deadlock.
  33.151  		 */
  33.152  		goto bad_area_nosemaphore;
  33.153 -	} 
  33.154 +	}
  33.155 +
  33.156 +	if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
  33.157 +					SIGSEGV) == NOTIFY_STOP)
  33.158 +		return;
  33.159 +
  33.160 +	/* It's safe to allow irq's after cr2 has been saved and the vmalloc
  33.161 +	   fault has been handled. */
  33.162 +	if (regs->eflags & (X86_EFLAGS_IF|VM_MASK))
  33.163 +		local_irq_enable();
  33.164  
  33.165  	mm = tsk->mm;
  33.166  
  33.167 @@ -550,21 +628,27 @@ no_context:
  33.168  
  33.169  	bust_spinlocks(1);
  33.170  
  33.171 -#ifdef CONFIG_X86_PAE
  33.172 -	if (error_code & 16) {
  33.173 -		pte_t *pte = lookup_address(address);
  33.174 +	if (oops_may_print()) {
  33.175 +	#ifdef CONFIG_X86_PAE
  33.176 +		if (error_code & 16) {
  33.177 +			pte_t *pte = lookup_address(address);
  33.178  
  33.179 -		if (pte && pte_present(*pte) && !pte_exec_kernel(*pte))
  33.180 -			printk(KERN_CRIT "kernel tried to execute NX-protected page - exploit attempt? (uid: %d)\n", current->uid);
  33.181 +			if (pte && pte_present(*pte) && !pte_exec_kernel(*pte))
  33.182 +				printk(KERN_CRIT "kernel tried to execute "
  33.183 +					"NX-protected page - exploit attempt? "
  33.184 +					"(uid: %d)\n", current->uid);
  33.185 +		}
  33.186 +	#endif
  33.187 +		if (address < PAGE_SIZE)
  33.188 +			printk(KERN_ALERT "BUG: unable to handle kernel NULL "
  33.189 +					"pointer dereference");
  33.190 +		else
  33.191 +			printk(KERN_ALERT "BUG: unable to handle kernel paging"
  33.192 +					" request");
  33.193 +		printk(" at virtual address %08lx\n",address);
  33.194 +		printk(KERN_ALERT " printing eip:\n");
  33.195 +		printk("%08lx\n", regs->eip);
  33.196  	}
  33.197 -#endif
  33.198 -	if (address < PAGE_SIZE)
  33.199 -		printk(KERN_ALERT "Unable to handle kernel NULL pointer dereference");
  33.200 -	else
  33.201 -		printk(KERN_ALERT "Unable to handle kernel paging request");
  33.202 -	printk(" at virtual address %08lx\n",address);
  33.203 -	printk(KERN_ALERT " printing eip:\n");
  33.204 -	printk("%08lx\n", regs->eip);
  33.205  	dump_fault_path(address);
  33.206  	tsk->thread.cr2 = address;
  33.207  	tsk->thread.trap_no = 14;
  33.208 @@ -604,59 +688,41 @@ do_sigbus:
  33.209  	tsk->thread.error_code = error_code;
  33.210  	tsk->thread.trap_no = 14;
  33.211  	force_sig_info_fault(SIGBUS, BUS_ADRERR, address, tsk);
  33.212 -	return;
  33.213 +}
  33.214  
  33.215 -vmalloc_fault:
  33.216 -	{
  33.217 -		/*
  33.218 -		 * Synchronize this task's top level page-table
  33.219 -		 * with the 'reference' page table.
  33.220 -		 *
  33.221 -		 * Do _not_ use "tsk" here. We might be inside
  33.222 -		 * an interrupt in the middle of a task switch..
  33.223 -		 */
  33.224 -		int index = pgd_index(address);
  33.225 -		unsigned long pgd_paddr;
  33.226 -		pgd_t *pgd, *pgd_k;
  33.227 -		pud_t *pud, *pud_k;
  33.228 -		pmd_t *pmd, *pmd_k;
  33.229 -		pte_t *pte_k;
  33.230 -
  33.231 -		pgd_paddr = read_cr3();
  33.232 -		pgd = index + (pgd_t *)__va(pgd_paddr);
  33.233 -		pgd_k = init_mm.pgd + index;
  33.234 -
  33.235 -		if (!pgd_present(*pgd_k))
  33.236 -			goto no_context;
  33.237 +#ifndef CONFIG_X86_PAE
  33.238 +void vmalloc_sync_all(void)
  33.239 +{
  33.240 +	/*
  33.241 +	 * Note that races in the updates of insync and start aren't
  33.242 +	 * problematic: insync can only get set bits added, and updates to
  33.243 +	 * start are only improving performance (without affecting correctness
  33.244 +	 * if undone).
  33.245 +	 */
  33.246 +	static DECLARE_BITMAP(insync, PTRS_PER_PGD);
  33.247 +	static unsigned long start = TASK_SIZE;
  33.248 +	unsigned long address;
  33.249  
  33.250 -		/*
  33.251 -		 * set_pgd(pgd, *pgd_k); here would be useless on PAE
  33.252 -		 * and redundant with the set_pmd() on non-PAE. As would
  33.253 -		 * set_pud.
  33.254 -		 */
  33.255 +	BUILD_BUG_ON(TASK_SIZE & ~PGDIR_MASK);
  33.256 +	for (address = start; address >= TASK_SIZE; address += PGDIR_SIZE) {
  33.257 +		if (!test_bit(pgd_index(address), insync)) {
  33.258 +			unsigned long flags;
  33.259 +			struct page *page;
  33.260  
  33.261 -		pud = pud_offset(pgd, address);
  33.262 -		pud_k = pud_offset(pgd_k, address);
  33.263 -		if (!pud_present(*pud_k))
  33.264 -			goto no_context;
  33.265 -		
  33.266 -		pmd = pmd_offset(pud, address);
  33.267 -		pmd_k = pmd_offset(pud_k, address);
  33.268 -		if (!pmd_present(*pmd_k))
  33.269 -			goto no_context;
  33.270 -#ifndef CONFIG_XEN
  33.271 -		set_pmd(pmd, *pmd_k);
  33.272 -#else
  33.273 -		/*
  33.274 -		 * When running on Xen we must launder *pmd_k through
  33.275 -		 * pmd_val() to ensure that _PAGE_PRESENT is correctly set.
  33.276 -		 */
  33.277 -		set_pmd(pmd, __pmd(pmd_val(*pmd_k)));
  33.278 -#endif
  33.279 -
  33.280 -		pte_k = pte_offset_kernel(pmd_k, address);
  33.281 -		if (!pte_present(*pte_k))
  33.282 -			goto no_context;
  33.283 -		return;
  33.284 +			spin_lock_irqsave(&pgd_lock, flags);
  33.285 +			for (page = pgd_list; page; page =
  33.286 +					(struct page *)page->index)
  33.287 +				if (!vmalloc_sync_one(page_address(page),
  33.288 +								address)) {
  33.289 +					BUG_ON(page != pgd_list);
  33.290 +					break;
  33.291 +				}
  33.292 +			spin_unlock_irqrestore(&pgd_lock, flags);
  33.293 +			if (!page)
  33.294 +				set_bit(pgd_index(address), insync);
  33.295 +		}
  33.296 +		if (address == start && test_bit(pgd_index(address), insync))
  33.297 +			start = address + PGDIR_SIZE;
  33.298  	}
  33.299  }
  33.300 +#endif
    34.1 --- a/linux-2.6-xen-sparse/arch/i386/mm/init-xen.c	Tue Jan 09 10:50:46 2007 +0000
    34.2 +++ b/linux-2.6-xen-sparse/arch/i386/mm/init-xen.c	Fri Jan 12 14:30:49 2007 +0000
    34.3 @@ -313,7 +313,7 @@ static void __init permanent_kmaps_init(
    34.4  
    34.5  static void __meminit free_new_highpage(struct page *page, int pfn)
    34.6  {
    34.7 -	set_page_count(page, 1);
    34.8 +	init_page_count(page);
    34.9  	if (pfn < xen_start_info->nr_pages)
   34.10  		__free_page(page);
   34.11  	totalhigh_pages++;
   34.12 @@ -664,7 +664,7 @@ void __init mem_init(void)
   34.13  	/* XEN: init and count low-mem pages outside initial allocation. */
   34.14  	for (pfn = xen_start_info->nr_pages; pfn < max_low_pfn; pfn++) {
   34.15  		ClearPageReserved(pfn_to_page(pfn));
   34.16 -		set_page_count(pfn_to_page(pfn), 1);
   34.17 +		init_page_count(pfn_to_page(pfn));
   34.18  		totalram_pages++;
   34.19  	}
   34.20  
   34.21 @@ -721,6 +721,7 @@ void __init mem_init(void)
   34.22   * Specifically, in the case of x86, we will always add
   34.23   * memory to the highmem for now.
   34.24   */
   34.25 +#ifdef CONFIG_MEMORY_HOTPLUG
   34.26  #ifndef CONFIG_NEED_MULTIPLE_NODES
   34.27  int add_memory(u64 start, u64 size)
   34.28  {
   34.29 @@ -737,6 +738,7 @@ int remove_memory(u64 start, u64 size)
   34.30  	return -EINVAL;
   34.31  }
   34.32  #endif
   34.33 +#endif
   34.34  
   34.35  kmem_cache_t *pgd_cache;
   34.36  kmem_cache_t *pmd_cache;
   34.37 @@ -795,21 +797,6 @@ static int noinline do_test_wp_bit(void)
   34.38  	return flag;
   34.39  }
   34.40  
   34.41 -void free_initmem(void)
   34.42 -{
   34.43 -	unsigned long addr;
   34.44 -
   34.45 -	addr = (unsigned long)(&__init_begin);
   34.46 -	for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) {
   34.47 -		ClearPageReserved(virt_to_page(addr));
   34.48 -		set_page_count(virt_to_page(addr), 1);
   34.49 -		memset((void *)addr, 0xcc, PAGE_SIZE);
   34.50 -		free_page(addr);
   34.51 -		totalram_pages++;
   34.52 -	}
   34.53 -	printk (KERN_INFO "Freeing unused kernel memory: %dk freed\n", (__init_end - __init_begin) >> 10);
   34.54 -}
   34.55 -
   34.56  #ifdef CONFIG_DEBUG_RODATA
   34.57  
   34.58  extern char __start_rodata, __end_rodata;
   34.59 @@ -833,17 +820,31 @@ void mark_rodata_ro(void)
   34.60  }
   34.61  #endif
   34.62  
   34.63 +void free_init_pages(char *what, unsigned long begin, unsigned long end)
   34.64 +{
   34.65 +	unsigned long addr;
   34.66 +
   34.67 +	for (addr = begin; addr < end; addr += PAGE_SIZE) {
   34.68 +		ClearPageReserved(virt_to_page(addr));
   34.69 +		init_page_count(virt_to_page(addr));
   34.70 +		memset((void *)addr, 0xcc, PAGE_SIZE);
   34.71 +		free_page(addr);
   34.72 +		totalram_pages++;
   34.73 +	}
   34.74 +	printk(KERN_INFO "Freeing %s: %ldk freed\n", what, (end - begin) >> 10);
   34.75 +}
   34.76 +
   34.77 +void free_initmem(void)
   34.78 +{
   34.79 +	free_init_pages("unused kernel memory",
   34.80 +			(unsigned long)(&__init_begin),
   34.81 +			(unsigned long)(&__init_end));
   34.82 +}
   34.83  
   34.84  #ifdef CONFIG_BLK_DEV_INITRD
   34.85  void free_initrd_mem(unsigned long start, unsigned long end)
   34.86  {
   34.87 -	if (start < end)
   34.88 -		printk (KERN_INFO "Freeing initrd memory: %ldk freed\n", (end - start) >> 10);
   34.89 -	for (; start < end; start += PAGE_SIZE) {
   34.90 -		ClearPageReserved(virt_to_page(start));
   34.91 -		set_page_count(virt_to_page(start), 1);
   34.92 -		free_page(start);
   34.93 -		totalram_pages++;
   34.94 -	}
   34.95 +	free_init_pages("initrd memory", start, end);
   34.96  }
   34.97  #endif
   34.98 +
    35.1 --- a/linux-2.6-xen-sparse/arch/i386/mm/pgtable-xen.c	Tue Jan 09 10:50:46 2007 +0000
    35.2 +++ b/linux-2.6-xen-sparse/arch/i386/mm/pgtable-xen.c	Fri Jan 12 14:30:49 2007 +0000
    35.3 @@ -45,7 +45,7 @@ void show_mem(void)
    35.4  	printk(KERN_INFO "Mem-info:\n");
    35.5  	show_free_areas();
    35.6  	printk(KERN_INFO "Free swap:       %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10));
    35.7 -	for_each_pgdat(pgdat) {
    35.8 +	for_each_online_pgdat(pgdat) {
    35.9  		pgdat_resize_lock(pgdat, &flags);
   35.10  		for (i = 0; i < pgdat->node_spanned_pages; ++i) {
   35.11  			page = pgdat_page_nr(pgdat, i);
   35.12 @@ -242,7 +242,7 @@ struct page *pte_alloc_one(struct mm_str
   35.13  	pte = alloc_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO, 0);
   35.14  	if (pte) {
   35.15  		SetPageForeign(pte, pte_free);
   35.16 -		set_page_count(pte, 1);
   35.17 +		init_page_count(pte);
   35.18  	}
   35.19  #endif
   35.20  	return pte;
   35.21 @@ -257,7 +257,7 @@ void pte_free(struct page *pte)
   35.22  			va, pfn_pte(page_to_pfn(pte), PAGE_KERNEL), 0));
   35.23  
   35.24  	ClearPageForeign(pte);
   35.25 -	set_page_count(pte, 1);
   35.26 +	init_page_count(pte);
   35.27  
   35.28  	__free_page(pte);
   35.29  }
    36.1 --- a/linux-2.6-xen-sparse/arch/i386/mm/pgtable.c	Tue Jan 09 10:50:46 2007 +0000
    36.2 +++ b/linux-2.6-xen-sparse/arch/i386/mm/pgtable.c	Fri Jan 12 14:30:49 2007 +0000
    36.3 @@ -37,7 +37,7 @@ void show_mem(void)
    36.4  	printk(KERN_INFO "Mem-info:\n");
    36.5  	show_free_areas();
    36.6  	printk(KERN_INFO "Free swap:       %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10));
    36.7 -	for_each_pgdat(pgdat) {
    36.8 +	for_each_online_pgdat(pgdat) {
    36.9  		pgdat_resize_lock(pgdat, &flags);
   36.10  		for (i = 0; i < pgdat->node_spanned_pages; ++i) {
   36.11  			page = pgdat_page_nr(pgdat, i);
    37.1 --- a/linux-2.6-xen-sparse/arch/i386/pci/Makefile	Tue Jan 09 10:50:46 2007 +0000
    37.2 +++ b/linux-2.6-xen-sparse/arch/i386/pci/Makefile	Fri Jan 12 14:30:49 2007 +0000
    37.3 @@ -1,4 +1,4 @@
    37.4 -obj-y				:= i386.o
    37.5 +obj-y				:= i386.o init.o
    37.6  
    37.7  obj-$(CONFIG_PCI_BIOS)		+= pcbios.o
    37.8  obj-$(CONFIG_PCI_MMCONFIG)	+= mmconfig.o direct.o
    38.1 --- a/linux-2.6-xen-sparse/arch/i386/pci/irq-xen.c	Tue Jan 09 10:50:46 2007 +0000
    38.2 +++ b/linux-2.6-xen-sparse/arch/i386/pci/irq-xen.c	Fri Jan 12 14:30:49 2007 +0000
    38.3 @@ -260,13 +260,13 @@ static int pirq_via_set(struct pci_dev *
    38.4   */
    38.5  static int pirq_via586_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
    38.6  {
    38.7 -	static unsigned int pirqmap[5] = { 3, 2, 5, 1, 1 };
    38.8 +	static unsigned int pirqmap[4] = { 3, 2, 5, 1 };
    38.9  	return read_config_nybble(router, 0x55, pirqmap[pirq-1]);
   38.10  }
   38.11  
   38.12  static int pirq_via586_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
   38.13  {
   38.14 -	static unsigned int pirqmap[5] = { 3, 2, 5, 1, 1 };
   38.15 +	static unsigned int pirqmap[4] = { 3, 2, 5, 1 };
   38.16  	write_config_nybble(router, 0x55, pirqmap[pirq-1], irq);
   38.17  	return 1;
   38.18  }
   38.19 @@ -592,7 +592,9 @@ static __init int via_router_probe(struc
   38.20  	case PCI_DEVICE_ID_VIA_82C596:
   38.21  	case PCI_DEVICE_ID_VIA_82C686:
   38.22  	case PCI_DEVICE_ID_VIA_8231:
   38.23 +	case PCI_DEVICE_ID_VIA_8233A:
   38.24  	case PCI_DEVICE_ID_VIA_8235:
   38.25 +	case PCI_DEVICE_ID_VIA_8237:
   38.26  		/* FIXME: add new ones for 8233/5 */
   38.27  		r->name = "VIA";
   38.28  		r->get = pirq_via_get;
    39.1 --- a/linux-2.6-xen-sparse/arch/ia64/Kconfig	Tue Jan 09 10:50:46 2007 +0000
    39.2 +++ b/linux-2.6-xen-sparse/arch/ia64/Kconfig	Fri Jan 12 14:30:49 2007 +0000
    39.3 @@ -34,6 +34,10 @@ config RWSEM_XCHGADD_ALGORITHM
    39.4  	bool
    39.5  	default y
    39.6  
    39.7 +config GENERIC_FIND_NEXT_BIT
    39.8 +	bool
    39.9 +	default y
   39.10 +
   39.11  config GENERIC_CALIBRATE_DELAY
   39.12  	bool
   39.13  	default y
   39.14 @@ -42,6 +46,10 @@ config TIME_INTERPOLATION
   39.15  	bool
   39.16  	default y
   39.17  
   39.18 +config DMI
   39.19 +	bool
   39.20 +	default y
   39.21 +
   39.22  config EFI
   39.23  	bool
   39.24  	default y
   39.25 @@ -290,9 +298,6 @@ config HOTPLUG_CPU
   39.26  	  can be controlled through /sys/devices/system/cpu/cpu#.
   39.27  	  Say N if you want to disable CPU hotplug.
   39.28  
   39.29 -config ARCH_ENABLE_MEMORY_HOTPLUG
   39.30 -	def_bool y
   39.31 -
   39.32  config SCHED_SMT
   39.33  	bool "SMT scheduler support"
   39.34  	depends on SMP
   39.35 @@ -302,6 +307,25 @@ config SCHED_SMT
   39.36  	  Intel IA64 chips with MultiThreading at a cost of slightly increased
   39.37  	  overhead in some places. If unsure say N here.
   39.38  
   39.39 +config PERMIT_BSP_REMOVE
   39.40 +	bool "Support removal of Bootstrap Processor"
   39.41 +	depends on HOTPLUG_CPU
   39.42 +	default n
   39.43 +	---help---
   39.44 +	Say Y here if your platform SAL will support removal of BSP with HOTPLUG_CPU
   39.45 +	support. 
   39.46 +
   39.47 +config FORCE_CPEI_RETARGET
   39.48 +	bool "Force assumption that CPEI can be re-targetted"
   39.49 +	depends on PERMIT_BSP_REMOVE
   39.50 +	default n
   39.51 +	---help---
   39.52 +	Say Y if you need to force the assumption that CPEI can be re-targetted to
   39.53 +	any cpu in the system. This hint is available via ACPI 3.0 specifications.
   39.54 +	Tiger4 systems are capable of re-directing CPEI to any CPU other than BSP.
   39.55 +	This option it useful to enable this feature on older BIOS's as well.
   39.56 +	You can also enable this by using boot command line option force_cpei=1.
   39.57 +
   39.58  config PREEMPT
   39.59  	bool "Preemptible Kernel"
   39.60          help
   39.61 @@ -347,6 +371,16 @@ config NUMA
   39.62  	  Access).  This option is for configuring high-end multiprocessor
   39.63  	  server systems.  If in doubt, say N.
   39.64  
   39.65 +config NODES_SHIFT
   39.66 +	int "Max num nodes shift(3-10)"
   39.67 +	range 3 10
   39.68 +	default "8"
   39.69 +	depends on NEED_MULTIPLE_NODES
   39.70 +	help
   39.71 +	  This option specifies the maximum number of nodes in your SSI system.
   39.72 +	  MAX_NUMNODES will be 2^(This value).
   39.73 +	  If in doubt, use the default.
   39.74 +
   39.75  # VIRTUAL_MEM_MAP and FLAT_NODE_MEM_MAP are functionally equivalent.
   39.76  # VIRTUAL_MEM_MAP has been retained for historical reasons.
   39.77  config VIRTUAL_MEM_MAP
   39.78 @@ -407,6 +441,8 @@ config IA64_PALINFO
   39.79  config SGI_SN
   39.80  	def_bool y if (IA64_SGI_SN2 || IA64_GENERIC)
   39.81  
   39.82 +source "drivers/sn/Kconfig"
   39.83 +
   39.84  source "drivers/firmware/Kconfig"
   39.85  
   39.86  source "fs/Kconfig.binfmt"
    40.1 --- a/linux-2.6-xen-sparse/arch/ia64/Makefile	Tue Jan 09 10:50:46 2007 +0000
    40.2 +++ b/linux-2.6-xen-sparse/arch/ia64/Makefile	Fri Jan 12 14:30:49 2007 +0000
    40.3 @@ -1,6 +1,9 @@
    40.4  #
    40.5  # ia64/Makefile
    40.6  #
    40.7 +# This file is included by the global makefile so that you can add your own
    40.8 +# architecture-specific flags and dependencies.
    40.9 +#
   40.10  # This file is subject to the terms and conditions of the GNU General Public
   40.11  # License.  See the file "COPYING" in the main directory of this archive
   40.12  # for more details.
   40.13 @@ -74,7 +77,7 @@ drivers-$(CONFIG_OPROFILE)	+= arch/ia64/
   40.14  
   40.15  boot := arch/ia64/hp/sim/boot
   40.16  
   40.17 -.PHONY: boot compressed check
   40.18 +PHONY += boot compressed check
   40.19  
   40.20  all: compressed unwcheck
   40.21  
    41.1 --- a/linux-2.6-xen-sparse/arch/ia64/dig/setup.c	Tue Jan 09 10:50:46 2007 +0000
    41.2 +++ b/linux-2.6-xen-sparse/arch/ia64/dig/setup.c	Fri Jan 12 14:30:49 2007 +0000
    41.3 @@ -86,8 +86,3 @@ dig_setup (char **cmdline_p)
    41.4  	xen_start_info->console.domU.evtchn = 0;
    41.5  #endif
    41.6  }
    41.7 -
    41.8 -void __init
    41.9 -dig_irq_init (void)
   41.10 -{
   41.11 -}
    42.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/entry.S	Tue Jan 09 10:50:46 2007 +0000
    42.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/entry.S	Fri Jan 12 14:30:49 2007 +0000
    42.3 @@ -1108,9 +1108,6 @@ skip_rbs_switch:
    42.4  	st8 [r2]=r8
    42.5  	st8 [r3]=r10
    42.6  .work_pending:
    42.7 -	tbit.nz p6,p0=r31,TIF_SIGDELAYED		// signal delayed from  MCA/INIT/NMI/PMI context?
    42.8 -(p6)	br.cond.sptk.few .sigdelayed
    42.9 -	;;
   42.10  	tbit.z p6,p0=r31,TIF_NEED_RESCHED		// current_thread_info()->need_resched==0?
   42.11  (p6)	br.cond.sptk.few .notify
   42.12  #ifdef CONFIG_PREEMPT
   42.13 @@ -1137,17 +1134,6 @@ skip_rbs_switch:
   42.14  (pLvSys)br.cond.sptk.few  .work_pending_syscall_end
   42.15  	br.cond.sptk.many .work_processed_kernel	// don't re-check
   42.16  
   42.17 -// There is a delayed signal that was detected in MCA/INIT/NMI/PMI context where
   42.18 -// it could not be delivered.  Deliver it now.  The signal might be for us and
   42.19 -// may set TIF_SIGPENDING, so redrive ia64_leave_* after processing the delayed
   42.20 -// signal.
   42.21 -
   42.22 -.sigdelayed:
   42.23 -	br.call.sptk.many rp=do_sigdelayed
   42.24 -	cmp.eq p6,p0=r0,r0				// p6 <- 1, always re-check
   42.25 -(pLvSys)br.cond.sptk.few  .work_pending_syscall_end
   42.26 -	br.cond.sptk.many .work_processed_kernel	// re-check
   42.27 -
   42.28  .work_pending_syscall_end:
   42.29  	adds r2=PT(R8)+16,r12
   42.30  	adds r3=PT(R10)+16,r12
   42.31 @@ -1625,5 +1611,11 @@ sys_call_table:
   42.32  	data8 sys_ni_syscall			// reserved for pselect
   42.33  	data8 sys_ni_syscall			// 1295 reserved for ppoll
   42.34  	data8 sys_unshare
   42.35 +	data8 sys_splice
   42.36 +	data8 sys_set_robust_list
   42.37 +	data8 sys_get_robust_list
   42.38 +	data8 sys_sync_file_range		// 1300
   42.39 +	data8 sys_tee
   42.40 +	data8 sys_vmsplice
   42.41  
   42.42  	.org sys_call_table + 8*NR_syscalls	// guard against failures to increase NR_syscalls
    43.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/gate.lds.S	Tue Jan 09 10:50:46 2007 +0000
    43.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/gate.lds.S	Fri Jan 12 14:30:49 2007 +0000
    43.3 @@ -82,6 +82,7 @@ SECTIONS
    43.4  	*(.dynbss)
    43.5  	*(.bss .bss.* .gnu.linkonce.b.*)
    43.6  	*(__ex_table)
    43.7 +	*(__mca_table)
    43.8    }
    43.9  }
   43.10  
    44.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/iosapic.c	Tue Jan 09 10:50:46 2007 +0000
    44.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/iosapic.c	Fri Jan 12 14:30:49 2007 +0000
    44.3 @@ -9,54 +9,65 @@
    44.4   * Copyright (C) 1999 VA Linux Systems
    44.5   * Copyright (C) 1999,2000 Walt Drummond <drummond@valinux.com>
    44.6   *
    44.7 - * 00/04/19	D. Mosberger	Rewritten to mirror more closely the x86 I/O APIC code.
    44.8 - *				In particular, we now have separate handlers for edge
    44.9 - *				and level triggered interrupts.
   44.10 - * 00/10/27	Asit Mallick, Goutham Rao <goutham.rao@intel.com> IRQ vector allocation
   44.11 - *				PCI to vector mapping, shared PCI interrupts.
   44.12 - * 00/10/27	D. Mosberger	Document things a bit more to make them more understandable.
   44.13 - *				Clean up much of the old IOSAPIC cruft.
   44.14 - * 01/07/27	J.I. Lee	PCI irq routing, Platform/Legacy interrupts and fixes for
   44.15 - *				ACPI S5(SoftOff) support.
   44.16 + * 00/04/19	D. Mosberger	Rewritten to mirror more closely the x86 I/O
   44.17 + *				APIC code.  In particular, we now have separate
   44.18 + *				handlers for edge and level triggered
   44.19 + *				interrupts.
   44.20 + * 00/10/27	Asit Mallick, Goutham Rao <goutham.rao@intel.com> IRQ vector
   44.21 + *				allocation PCI to vector mapping, shared PCI
   44.22 + *				interrupts.
   44.23 + * 00/10/27	D. Mosberger	Document things a bit more to make them more
   44.24 + *				understandable.  Clean up much of the old
   44.25 + *				IOSAPIC cruft.
   44.26 + * 01/07/27	J.I. Lee	PCI irq routing, Platform/Legacy interrupts
   44.27 + *				and fixes for ACPI S5(SoftOff) support.
   44.28   * 02/01/23	J.I. Lee	iosapic pgm fixes for PCI irq routing from _PRT
   44.29 - * 02/01/07     E. Focht        <efocht@ess.nec.de> Redirectable interrupt vectors in
   44.30 - *                              iosapic_set_affinity(), initializations for
   44.31 - *                              /proc/irq/#/smp_affinity
   44.32 + * 02/01/07     E. Focht        <efocht@ess.nec.de> Redirectable interrupt
   44.33 + *				vectors in iosapic_set_affinity(),
   44.34 + *				initializations for /proc/irq/#/smp_affinity
   44.35   * 02/04/02	P. Diefenbaugh	Cleaned up ACPI PCI IRQ routing.
   44.36   * 02/04/18	J.I. Lee	bug fix in iosapic_init_pci_irq
   44.37 - * 02/04/30	J.I. Lee	bug fix in find_iosapic to fix ACPI PCI IRQ to IOSAPIC mapping
   44.38 - *				error
   44.39 + * 02/04/30	J.I. Lee	bug fix in find_iosapic to fix ACPI PCI IRQ to
   44.40 + *				IOSAPIC mapping error
   44.41   * 02/07/29	T. Kochi	Allocate interrupt vectors dynamically
   44.42 - * 02/08/04	T. Kochi	Cleaned up terminology (irq, global system interrupt, vector, etc.)
   44.43 - * 02/09/20	D. Mosberger	Simplified by taking advantage of ACPI's pci_irq code.
   44.44 + * 02/08/04	T. Kochi	Cleaned up terminology (irq, global system
   44.45 + *				interrupt, vector, etc.)
   44.46 + * 02/09/20	D. Mosberger	Simplified by taking advantage of ACPI's
   44.47 + *				pci_irq code.
   44.48   * 03/02/19	B. Helgaas	Make pcat_compat system-wide, not per-IOSAPIC.
   44.49 - *				Remove iosapic_address & gsi_base from external interfaces.
   44.50 - *				Rationalize __init/__devinit attributes.
   44.51 + *				Remove iosapic_address & gsi_base from
   44.52 + *				external interfaces.  Rationalize
   44.53 + *				__init/__devinit attributes.
   44.54   * 04/12/04 Ashok Raj	<ashok.raj@intel.com> Intel Corporation 2004
   44.55 - *				Updated to work with irq migration necessary for CPU Hotplug
   44.56 + *				Updated to work with irq migration necessary
   44.57 + *				for CPU Hotplug
   44.58   */
   44.59  /*
   44.60 - * Here is what the interrupt logic between a PCI device and the kernel looks like:
   44.61 + * Here is what the interrupt logic between a PCI device and the kernel looks
   44.62 + * like:
   44.63   *
   44.64 - * (1) A PCI device raises one of the four interrupt pins (INTA, INTB, INTC, INTD).  The
   44.65 - *     device is uniquely identified by its bus--, and slot-number (the function
   44.66 - *     number does not matter here because all functions share the same interrupt
   44.67 - *     lines).
   44.68 + * (1) A PCI device raises one of the four interrupt pins (INTA, INTB, INTC,
   44.69 + *     INTD).  The device is uniquely identified by its bus-, and slot-number
   44.70 + *     (the function number does not matter here because all functions share
   44.71 + *     the same interrupt lines).
   44.72   *
   44.73 - * (2) The motherboard routes the interrupt line to a pin on a IOSAPIC controller.
   44.74 - *     Multiple interrupt lines may have to share the same IOSAPIC pin (if they're level
   44.75 - *     triggered and use the same polarity).  Each interrupt line has a unique Global
   44.76 - *     System Interrupt (GSI) number which can be calculated as the sum of the controller's
   44.77 - *     base GSI number and the IOSAPIC pin number to which the line connects.
   44.78 + * (2) The motherboard routes the interrupt line to a pin on a IOSAPIC
   44.79 + *     controller.  Multiple interrupt lines may have to share the same
   44.80 + *     IOSAPIC pin (if they're level triggered and use the same polarity).
   44.81 + *     Each interrupt line has a unique Global System Interrupt (GSI) number
   44.82 + *     which can be calculated as the sum of the controller's base GSI number
   44.83 + *     and the IOSAPIC pin number to which the line connects.
   44.84   *
   44.85 - * (3) The IOSAPIC uses an internal routing table entries (RTEs) to map the IOSAPIC pin
   44.86 - *     into the IA-64 interrupt vector.  This interrupt vector is then sent to the CPU.
   44.87 + * (3) The IOSAPIC uses an internal routing table entries (RTEs) to map the
   44.88 + * IOSAPIC pin into the IA-64 interrupt vector.  This interrupt vector is then
   44.89 + * sent to the CPU.
   44.90   *
   44.91 - * (4) The kernel recognizes an interrupt as an IRQ.  The IRQ interface is used as
   44.92 - *     architecture-independent interrupt handling mechanism in Linux.  As an
   44.93 - *     IRQ is a number, we have to have IA-64 interrupt vector number <-> IRQ number
   44.94 - *     mapping.  On smaller systems, we use one-to-one mapping between IA-64 vector and
   44.95 - *     IRQ.  A platform can implement platform_irq_to_vector(irq) and
   44.96 + * (4) The kernel recognizes an interrupt as an IRQ.  The IRQ interface is
   44.97 + *     used as architecture-independent interrupt handling mechanism in Linux.
   44.98 + *     As an IRQ is a number, we have to have
   44.99 + *     IA-64 interrupt vector number <-> IRQ number mapping.  On smaller
  44.100 + *     systems, we use one-to-one mapping between IA-64 vector and IRQ.  A
  44.101 + *     platform can implement platform_irq_to_vector(irq) and
  44.102   *     platform_local_vector_to_irq(vector) APIs to differentiate the mapping.
  44.103   *     Please see also include/asm-ia64/hw_irq.h for those APIs.
  44.104   *
  44.105 @@ -64,9 +75,9 @@
  44.106   *
  44.107   *	PCI pin -> global system interrupt (GSI) -> IA-64 vector <-> IRQ
  44.108   *
  44.109 - * Note: The term "IRQ" is loosely used everywhere in Linux kernel to describe interrupts.
  44.110 - * Now we use "IRQ" only for Linux IRQ's.  ISA IRQ (isa_irq) is the only exception in this
  44.111 - * source code.
  44.112 + * Note: The term "IRQ" is loosely used everywhere in Linux kernel to
  44.113 + * describeinterrupts.  Now we use "IRQ" only for Linux IRQ's.  ISA IRQ
  44.114 + * (isa_irq) is the only exception in this source code.
  44.115   */
  44.116  #include <linux/config.h>
  44.117  
  44.118 @@ -90,7 +101,6 @@
  44.119  #include <asm/ptrace.h>
  44.120  #include <asm/system.h>
  44.121  
  44.122 -
  44.123  #undef DEBUG_INTERRUPT_ROUTING
  44.124  
  44.125  #ifdef DEBUG_INTERRUPT_ROUTING
  44.126 @@ -99,36 +109,46 @@
  44.127  #define DBG(fmt...)
  44.128  #endif
  44.129  
  44.130 -#define NR_PREALLOCATE_RTE_ENTRIES	(PAGE_SIZE / sizeof(struct iosapic_rte_info))
  44.131 +#define NR_PREALLOCATE_RTE_ENTRIES \
  44.132 +	(PAGE_SIZE / sizeof(struct iosapic_rte_info))
  44.133  #define RTE_PREALLOCATED	(1)
  44.134  
  44.135  static DEFINE_SPINLOCK(iosapic_lock);
  44.136  
  44.137 -/* These tables map IA-64 vectors to the IOSAPIC pin that generates this vector. */
  44.138 +/*
  44.139 + * These tables map IA-64 vectors to the IOSAPIC pin that generates this
  44.140 + * vector.
  44.141 + */
  44.142  
  44.143  struct iosapic_rte_info {
  44.144 -	struct list_head rte_list;	/* node in list of RTEs sharing the same vector */
  44.145 +	struct list_head rte_list;	/* node in list of RTEs sharing the
  44.146 +					 * same vector */
  44.147  	char __iomem	*addr;		/* base address of IOSAPIC */
  44.148 -	unsigned int	gsi_base;	/* first GSI assigned to this IOSAPIC */
  44.149 +	unsigned int	gsi_base;	/* first GSI assigned to this
  44.150 +					 * IOSAPIC */
  44.151  	char		rte_index;	/* IOSAPIC RTE index */
  44.152  	int		refcnt;		/* reference counter */
  44.153  	unsigned int	flags;		/* flags */
  44.154  } ____cacheline_aligned;
  44.155  
  44.156  static struct iosapic_intr_info {
  44.157 -	struct list_head rtes;		/* RTEs using this vector (empty => not an IOSAPIC interrupt) */
  44.158 +	struct list_head rtes;		/* RTEs using this vector (empty =>
  44.159 +					 * not an IOSAPIC interrupt) */
  44.160  	int		count;		/* # of RTEs that shares this vector */
  44.161 -	u32		low32;		/* current value of low word of Redirection table entry */
  44.162 +	u32		low32;		/* current value of low word of
  44.163 +					 * Redirection table entry */
  44.164  	unsigned int	dest;		/* destination CPU physical ID */
  44.165  	unsigned char	dmode	: 3;	/* delivery mode (see iosapic.h) */
  44.166 -	unsigned char 	polarity: 1;	/* interrupt polarity (see iosapic.h) */
  44.167 +	unsigned char 	polarity: 1;	/* interrupt polarity
  44.168 +					 * (see iosapic.h) */
  44.169  	unsigned char	trigger	: 1;	/* trigger mode (see iosapic.h) */
  44.170  } iosapic_intr_info[IA64_NUM_VECTORS];
  44.171  
  44.172  static struct iosapic {
  44.173  	char __iomem	*addr;		/* base address of IOSAPIC */
  44.174 -	unsigned int 	gsi_base;	/* first GSI assigned to this IOSAPIC */
  44.175 -	unsigned short 	num_rte;	/* number of RTE in this IOSAPIC */
  44.176 +	unsigned int 	gsi_base;	/* first GSI assigned to this
  44.177 +					 * IOSAPIC */
  44.178 +	unsigned short 	num_rte;	/* # of RTEs on this IOSAPIC */
  44.179  	int		rtes_inuse;	/* # of RTEs in use on this IOSAPIC */
  44.180  #ifdef CONFIG_NUMA
  44.181  	unsigned short	node;		/* numa node association via pxm */
  44.182 @@ -218,7 +238,8 @@ find_iosapic (unsigned int gsi)
  44.183  	int i;
  44.184  
  44.185  	for (i = 0; i < NR_IOSAPICS; i++) {
  44.186 -		if ((unsigned) (gsi - iosapic_lists[i].gsi_base) < iosapic_lists[i].num_rte)
  44.187 +		if ((unsigned) (gsi - iosapic_lists[i].gsi_base) <
  44.188 +		    iosapic_lists[i].num_rte)
  44.189  			return i;
  44.190  	}
  44.191  
  44.192 @@ -231,7 +252,8 @@ static inline int
  44.193  	struct iosapic_intr_info *info;
  44.194  	struct iosapic_rte_info *rte;
  44.195  
  44.196 -	for (info = iosapic_intr_info; info < iosapic_intr_info + IA64_NUM_VECTORS; ++info)
  44.197 +	for (info = iosapic_intr_info; info <
  44.198 +		     iosapic_intr_info + IA64_NUM_VECTORS; ++info)
  44.199  		list_for_each_entry(rte, &info->rtes, rte_list)
  44.200  			if (rte->gsi_base + rte->rte_index == gsi)
  44.201  				return info - iosapic_intr_info;
  44.202 @@ -254,8 +276,8 @@ gsi_to_irq (unsigned int gsi)
  44.203  	unsigned long flags;
  44.204  	int irq;
  44.205  	/*
  44.206 -	 * XXX fix me: this assumes an identity mapping vetween IA-64 vector and Linux irq
  44.207 -	 * numbers...
  44.208 +	 * XXX fix me: this assumes an identity mapping between IA-64 vector
  44.209 +	 * and Linux irq numbers...
  44.210  	 */
  44.211  	spin_lock_irqsave(&iosapic_lock, flags);
  44.212  	{
  44.213 @@ -266,7 +288,8 @@ gsi_to_irq (unsigned int gsi)
  44.214  	return irq;
  44.215  }
  44.216  
  44.217 -static struct iosapic_rte_info *gsi_vector_to_rte(unsigned int gsi, unsigned int vec)
  44.218 +static struct iosapic_rte_info *gsi_vector_to_rte(unsigned int gsi,
  44.219 +						  unsigned int vec)
  44.220  {
  44.221  	struct iosapic_rte_info *rte;
  44.222  
  44.223 @@ -306,7 +329,9 @@ set_rte (unsigned int gsi, unsigned int 
  44.224  
  44.225  		for (irq = 0; irq < NR_IRQS; ++irq)
  44.226  			if (irq_to_vector(irq) == vector) {
  44.227 -				set_irq_affinity_info(irq, (int)(dest & 0xffff), redir);
  44.228 +				set_irq_affinity_info(irq,
  44.229 +						      (int)(dest & 0xffff),
  44.230 +						      redir);
  44.231  				break;
  44.232  			}
  44.233  	}
  44.234 @@ -328,7 +353,7 @@ set_rte (unsigned int gsi, unsigned int 
  44.235  }
  44.236  
  44.237  static void
  44.238 -nop (unsigned int vector)
  44.239 +nop (unsigned int irq)
  44.240  {
  44.241  	/* do nothing... */
  44.242  }
  44.243 @@ -350,7 +375,8 @@ mask_irq (unsigned int irq)
  44.244  	{
  44.245  		/* set only the mask bit */
  44.246  		low32 = iosapic_intr_info[vec].low32 |= IOSAPIC_MASK;
  44.247 -		list_for_each_entry(rte, &iosapic_intr_info[vec].rtes, rte_list) {
  44.248 +		list_for_each_entry(rte, &iosapic_intr_info[vec].rtes,
  44.249 +				    rte_list) {
  44.250  			addr = rte->addr;
  44.251  			rte_index = rte->rte_index;
  44.252  			iosapic_write(addr, IOSAPIC_RTE_LOW(rte_index), low32);
  44.253 @@ -375,7 +401,8 @@ unmask_irq (unsigned int irq)
  44.254  	spin_lock_irqsave(&iosapic_lock, flags);
  44.255  	{
  44.256  		low32 = iosapic_intr_info[vec].low32 &= ~IOSAPIC_MASK;
  44.257 -		list_for_each_entry(rte, &iosapic_intr_info[vec].rtes, rte_list) {
  44.258 +		list_for_each_entry(rte, &iosapic_intr_info[vec].rtes,
  44.259 +				    rte_list) {
  44.260  			addr = rte->addr;
  44.261  			rte_index = rte->rte_index;
  44.262  			iosapic_write(addr, IOSAPIC_RTE_LOW(rte_index), low32);
  44.263 @@ -415,21 +442,25 @@ iosapic_set_affinity (unsigned int irq, 
  44.264  
  44.265  	spin_lock_irqsave(&iosapic_lock, flags);
  44.266  	{
  44.267 -		low32 = iosapic_intr_info[vec].low32 & ~(7 << IOSAPIC_DELIVERY_SHIFT);
  44.268 +		low32 = iosapic_intr_info[vec].low32 &
  44.269 +			~(7 << IOSAPIC_DELIVERY_SHIFT);
  44.270  
  44.271  		if (redir)
  44.272  		        /* change delivery mode to lowest priority */
  44.273 -			low32 |= (IOSAPIC_LOWEST_PRIORITY << IOSAPIC_DELIVERY_SHIFT);
  44.274 +			low32 |= (IOSAPIC_LOWEST_PRIORITY <<
  44.275 +				  IOSAPIC_DELIVERY_SHIFT);
  44.276  		else
  44.277  		        /* change delivery mode to fixed */
  44.278  			low32 |= (IOSAPIC_FIXED << IOSAPIC_DELIVERY_SHIFT);
  44.279  
  44.280  		iosapic_intr_info[vec].low32 = low32;
  44.281  		iosapic_intr_info[vec].dest = dest;
  44.282 -		list_for_each_entry(rte, &iosapic_intr_info[vec].rtes, rte_list) {
  44.283 +		list_for_each_entry(rte, &iosapic_intr_info[vec].rtes,
  44.284 +				    rte_list) {
  44.285  			addr = rte->addr;
  44.286  			rte_index = rte->rte_index;
  44.287 -			iosapic_write(addr, IOSAPIC_RTE_HIGH(rte_index), high32);
  44.288 +			iosapic_write(addr, IOSAPIC_RTE_HIGH(rte_index),
  44.289 +				      high32);
  44.290  			iosapic_write(addr, IOSAPIC_RTE_LOW(rte_index), low32);
  44.291  		}
  44.292  	}
  44.293 @@ -454,7 +485,7 @@ iosapic_end_level_irq (unsigned int irq)
  44.294  	ia64_vector vec = irq_to_vector(irq);
  44.295  	struct iosapic_rte_info *rte;
  44.296  
  44.297 -	move_irq(irq);
  44.298 +	move_native_irq(irq);
  44.299  	list_for_each_entry(rte, &iosapic_intr_info[vec].rtes, rte_list)
  44.300  		iosapic_eoi(rte->addr, vec);
  44.301  }
  44.302 @@ -496,13 +527,14 @@ iosapic_ack_edge_irq (unsigned int irq)
  44.303  {
  44.304  	irq_desc_t *idesc = irq_descp(irq);
  44.305  
  44.306 -	move_irq(irq);
  44.307 +	move_native_irq(irq);
  44.308  	/*
  44.309  	 * Once we have recorded IRQ_PENDING already, we can mask the
  44.310  	 * interrupt for real. This prevents IRQ storms from unhandled
  44.311  	 * devices.
  44.312  	 */
  44.313 -	if ((idesc->status & (IRQ_PENDING|IRQ_DISABLED)) == (IRQ_PENDING|IRQ_DISABLED))
  44.314 +	if ((idesc->status & (IRQ_PENDING|IRQ_DISABLED)) ==
  44.315 +	    (IRQ_PENDING|IRQ_DISABLED))
  44.316  		mask_irq(irq);
  44.317  }
  44.318  
  44.319 @@ -536,7 +568,8 @@ iosapic_version (char __iomem *addr)
  44.320  	return iosapic_read(addr, IOSAPIC_VERSION);
  44.321  }
  44.322  
  44.323 -static int iosapic_find_sharable_vector (unsigned long trigger, unsigned long pol)
  44.324 +static int iosapic_find_sharable_vector (unsigned long trigger,
  44.325 +					 unsigned long pol)
  44.326  {
  44.327  	int i, vector = -1, min_count = -1;
  44.328  	struct iosapic_intr_info *info;
  44.329 @@ -551,7 +584,8 @@ static int iosapic_find_sharable_vector 
  44.330  	for (i = IA64_FIRST_DEVICE_VECTOR; i <= IA64_LAST_DEVICE_VECTOR; i++) {
  44.331  		info = &iosapic_intr_info[i];
  44.332  		if (info->trigger == trigger && info->polarity == pol &&
  44.333 -		    (info->dmode == IOSAPIC_FIXED || info->dmode == IOSAPIC_LOWEST_PRIORITY)) {
  44.334 +		    (info->dmode == IOSAPIC_FIXED || info->dmode ==
  44.335 +		     IOSAPIC_LOWEST_PRIORITY)) {
  44.336  			if (min_count == -1 || info->count < min_count) {
  44.337  				vector = i;
  44.338  				min_count = info->count;
  44.339 @@ -575,12 +609,15 @@ iosapic_reassign_vector (int vector)
  44.340  		new_vector = assign_irq_vector(AUTO_ASSIGN);
  44.341  		if (new_vector < 0)
  44.342  			panic("%s: out of interrupt vectors!\n", __FUNCTION__);
  44.343 -		printk(KERN_INFO "Reassigning vector %d to %d\n", vector, new_vector);
  44.344 +		printk(KERN_INFO "Reassigning vector %d to %d\n",
  44.345 +		       vector, new_vector);
  44.346  		memcpy(&iosapic_intr_info[new_vector], &iosapic_intr_info[vector],
  44.347  		       sizeof(struct iosapic_intr_info));
  44.348  		INIT_LIST_HEAD(&iosapic_intr_info[new_vector].rtes);
  44.349 -		list_move(iosapic_intr_info[vector].rtes.next, &iosapic_intr_info[new_vector].rtes);
  44.350 -		memset(&iosapic_intr_info[vector], 0, sizeof(struct iosapic_intr_info));
  44.351 +		list_move(iosapic_intr_info[vector].rtes.next,
  44.352 +			  &iosapic_intr_info[new_vector].rtes);
  44.353 +		memset(&iosapic_intr_info[vector], 0,
  44.354 +		       sizeof(struct iosapic_intr_info));
  44.355  		iosapic_intr_info[vector].low32 = IOSAPIC_MASK;
  44.356  		INIT_LIST_HEAD(&iosapic_intr_info[vector].rtes);
  44.357  	}
  44.358 @@ -593,7 +630,8 @@ static struct iosapic_rte_info *iosapic_
  44.359  	int preallocated = 0;
  44.360  
  44.361  	if (!iosapic_kmalloc_ok && list_empty(&free_rte_list)) {
  44.362 -		rte = alloc_bootmem(sizeof(struct iosapic_rte_info) * NR_PREALLOCATE_RTE_ENTRIES);
  44.363 +		rte = alloc_bootmem(sizeof(struct iosapic_rte_info) *
  44.364 +				    NR_PREALLOCATE_RTE_ENTRIES);
  44.365  		if (!rte)
  44.366  			return NULL;
  44.367  		for (i = 0; i < NR_PREALLOCATE_RTE_ENTRIES; i++, rte++)
  44.368 @@ -601,7 +639,8 @@ static struct iosapic_rte_info *iosapic_
  44.369  	}
  44.370  
  44.371  	if (!list_empty(&free_rte_list)) {
  44.372 -		rte = list_entry(free_rte_list.next, struct iosapic_rte_info, rte_list);
  44.373 +		rte = list_entry(free_rte_list.next, struct iosapic_rte_info,
  44.374 +				 rte_list);
  44.375  		list_del(&rte->rte_list);
  44.376  		preallocated++;
  44.377  	} else {
  44.378 @@ -644,7 +683,8 @@ register_intr (unsigned int gsi, int vec
  44.379  
  44.380  	index = find_iosapic(gsi);
  44.381  	if (index < 0) {
  44.382 -		printk(KERN_WARNING "%s: No IOSAPIC for GSI %u\n", __FUNCTION__, gsi);
  44.383 +		printk(KERN_WARNING "%s: No IOSAPIC for GSI %u\n",
  44.384 +		       __FUNCTION__, gsi);
  44.385  		return -ENODEV;
  44.386  	}
  44.387  
  44.388 @@ -655,7 +695,8 @@ register_intr (unsigned int gsi, int vec
  44.389  	if (!rte) {
  44.390  		rte = iosapic_alloc_rte();
  44.391  		if (!rte) {
  44.392 -			printk(KERN_WARNING "%s: cannot allocate memory\n", __FUNCTION__);
  44.393 +			printk(KERN_WARNING "%s: cannot allocate memory\n",
  44.394 +			       __FUNCTION__);
  44.395  			return -ENOMEM;
  44.396  		}
  44.397  
  44.398 @@ -671,7 +712,9 @@ register_intr (unsigned int gsi, int vec
  44.399  	else if (vector_is_shared(vector)) {
  44.400  		struct iosapic_intr_info *info = &iosapic_intr_info[vector];
  44.401  		if (info->trigger != trigger || info->polarity != polarity) {
  44.402 -			printk (KERN_WARNING "%s: cannot override the interrupt\n", __FUNCTION__);
  44.403 +			printk (KERN_WARNING
  44.404 +				"%s: cannot override the interrupt\n",
  44.405 +				__FUNCTION__);
  44.406  			return -EINVAL;
  44.407  		}
  44.408  	}
  44.409 @@ -691,8 +734,10 @@ register_intr (unsigned int gsi, int vec
  44.410  	idesc = irq_descp(vector);
  44.411  	if (idesc->handler != irq_type) {
  44.412  		if (idesc->handler != &no_irq_type)
  44.413 -			printk(KERN_WARNING "%s: changing vector %d from %s to %s\n",
  44.414 -			       __FUNCTION__, vector, idesc->handler->typename, irq_type->typename);
  44.415 +			printk(KERN_WARNING
  44.416 +			       "%s: changing vector %d from %s to %s\n",
  44.417 +			       __FUNCTION__, vector,
  44.418 +			       idesc->handler->typename, irq_type->typename);
  44.419  		idesc->handler = irq_type;
  44.420  	}
  44.421  	return 0;
  44.422 @@ -703,6 +748,7 @@ get_target_cpu (unsigned int gsi, int ve
  44.423  {
  44.424  #ifdef CONFIG_SMP
  44.425  	static int cpu = -1;
  44.426 +	extern int cpe_vector;
  44.427  
  44.428  	/*
  44.429  	 * In case of vector shared by multiple RTEs, all RTEs that
  44.430 @@ -725,6 +771,11 @@ get_target_cpu (unsigned int gsi, int ve
  44.431  	if (!cpu_online(smp_processor_id()))
  44.432  		return cpu_physical_id(smp_processor_id());
  44.433  
  44.434 +#ifdef CONFIG_ACPI
  44.435 +	if (cpe_vector > 0 && vector == IA64_CPEP_VECTOR)
  44.436 +		return get_cpei_target_cpu();
  44.437 +#endif
  44.438 +
  44.439  #ifdef CONFIG_NUMA
  44.440  	{
  44.441  		int num_cpus, cpu_index, iosapic_index, numa_cpu, i = 0;
  44.442 @@ -747,7 +798,7 @@ get_target_cpu (unsigned int gsi, int ve
  44.443  		if (!num_cpus)
  44.444  			goto skip_numa_setup;
  44.445  
  44.446 -		/* Use vector assigment to distribute across cpus in node */
  44.447 +		/* Use vector assignment to distribute across cpus in node */
  44.448  		cpu_index = vector % num_cpus;
  44.449  
  44.450  		for (numa_cpu = first_cpu(cpu_mask) ; i < cpu_index ; i++)
  44.451 @@ -769,7 +820,7 @@ skip_numa_setup:
  44.452  	} while (!cpu_online(cpu));
  44.453  
  44.454  	return cpu_physical_id(cpu);
  44.455 -#else
  44.456 +#else  /* CONFIG_SMP */
  44.457  	return cpu_physical_id(smp_processor_id());
  44.458  #endif
  44.459  }
  44.460 @@ -821,7 +872,8 @@ again:
  44.461  			if (list_empty(&iosapic_intr_info[vector].rtes))
  44.462  				free_irq_vector(vector);
  44.463  			spin_unlock(&iosapic_lock);
  44.464 -			spin_unlock_irqrestore(&irq_descp(vector)->lock, flags);
  44.465 +			spin_unlock_irqrestore(&irq_descp(vector)->lock,
  44.466 +					       flags);
  44.467  			goto again;
  44.468  		}
  44.469  
  44.470 @@ -830,7 +882,8 @@ again:
  44.471  			      polarity, trigger);
  44.472  		if (err < 0) {
  44.473  			spin_unlock(&iosapic_lock);
  44.474 -			spin_unlock_irqrestore(&irq_descp(vector)->lock, flags);
  44.475 +			spin_unlock_irqrestore(&irq_descp(vector)->lock,
  44.476 +					       flags);
  44.477  			return err;
  44.478  		}
  44.479  
  44.480 @@ -872,7 +925,8 @@ iosapic_unregister_intr (unsigned int gs
  44.481  	 */
  44.482  	irq = gsi_to_irq(gsi);
  44.483  	if (irq < 0) {
  44.484 -		printk(KERN_ERR "iosapic_unregister_intr(%u) unbalanced\n", gsi);
  44.485 +		printk(KERN_ERR "iosapic_unregister_intr(%u) unbalanced\n",
  44.486 +		       gsi);
  44.487  		WARN_ON(1);
  44.488  		return;
  44.489  	}
  44.490 @@ -883,7 +937,9 @@ iosapic_unregister_intr (unsigned int gs
  44.491  	spin_lock(&iosapic_lock);
  44.492  	{
  44.493  		if ((rte = gsi_vector_to_rte(gsi, vector)) == NULL) {
  44.494 -			printk(KERN_ERR "iosapic_unregister_intr(%u) unbalanced\n", gsi);
  44.495 +			printk(KERN_ERR
  44.496 +			       "iosapic_unregister_intr(%u) unbalanced\n",
  44.497 +			       gsi);
  44.498  			WARN_ON(1);
  44.499  			goto out;
  44.500  		}
  44.501 @@ -893,7 +949,8 @@ iosapic_unregister_intr (unsigned int gs
  44.502  
  44.503  		/* Mask the interrupt */
  44.504  		low32 = iosapic_intr_info[vector].low32 | IOSAPIC_MASK;
  44.505 -		iosapic_write(rte->addr, IOSAPIC_RTE_LOW(rte->rte_index), low32);
  44.506 +		iosapic_write(rte->addr, IOSAPIC_RTE_LOW(rte->rte_index),
  44.507 +			      low32);
  44.508  
  44.509  		/* Remove the rte entry from the list */
  44.510  		list_del(&rte->rte_list);
  44.511 @@ -906,7 +963,9 @@ iosapic_unregister_intr (unsigned int gs
  44.512  		trigger	 = iosapic_intr_info[vector].trigger;
  44.513  		polarity = iosapic_intr_info[vector].polarity;
  44.514  		dest     = iosapic_intr_info[vector].dest;
  44.515 -		printk(KERN_INFO "GSI %u (%s, %s) -> CPU %d (0x%04x) vector %d unregistered\n",
  44.516 +		printk(KERN_INFO
  44.517 +		       "GSI %u (%s, %s) -> CPU %d (0x%04x)"
  44.518 +		       " vector %d unregistered\n",
  44.519  		       gsi, (trigger == IOSAPIC_EDGE ? "edge" : "level"),
  44.520  		       (polarity == IOSAPIC_POL_HIGH ? "high" : "low"),
  44.521  		       cpu_logical_id(dest), dest, vector);
  44.522 @@ -919,12 +978,15 @@ iosapic_unregister_intr (unsigned int gs
  44.523  			idesc->handler = &no_irq_type;
  44.524  
  44.525  			/* Clear the interrupt information */
  44.526 -			memset(&iosapic_intr_info[vector], 0, sizeof(struct iosapic_intr_info));
  44.527 +			memset(&iosapic_intr_info[vector], 0,
  44.528 +			       sizeof(struct iosapic_intr_info));
  44.529  			iosapic_intr_info[vector].low32 |= IOSAPIC_MASK;
  44.530  			INIT_LIST_HEAD(&iosapic_intr_info[vector].rtes);
  44.531  
  44.532  			if (idesc->action) {
  44.533 -				printk(KERN_ERR "interrupt handlers still exist on IRQ %u\n", irq);
  44.534 +				printk(KERN_ERR
  44.535 +				       "interrupt handlers still exist on"
  44.536 +				       "IRQ %u\n", irq);
  44.537  				WARN_ON(1);
  44.538  			}
  44.539  
  44.540 @@ -939,7 +1001,6 @@ iosapic_unregister_intr (unsigned int gs
  44.541  
  44.542  /*
  44.543   * ACPI calls this when it finds an entry for a platform interrupt.
  44.544 - * Note that the irq_base and IOSAPIC address must be set in iosapic_init().
  44.545   */
  44.546  int __init
  44.547  iosapic_register_platform_intr (u32 int_type, unsigned int gsi,
  44.548 @@ -973,13 +1034,16 @@ iosapic_register_platform_intr (u32 int_
  44.549  		mask = 1;
  44.550  		break;
  44.551  	      default:
  44.552 -		printk(KERN_ERR "iosapic_register_platform_irq(): invalid int type 0x%x\n", int_type);
  44.553 +		printk(KERN_ERR "%s: invalid int type 0x%x\n", __FUNCTION__,
  44.554 +		       int_type);
  44.555  		return -1;
  44.556  	}
  44.557  
  44.558  	register_intr(gsi, vector, delivery, polarity, trigger);
  44.559  
  44.560 -	printk(KERN_INFO "PLATFORM int %s (0x%x): GSI %u (%s, %s) -> CPU %d (0x%04x) vector %d\n",
  44.561 +	printk(KERN_INFO
  44.562 +	       "PLATFORM int %s (0x%x): GSI %u (%s, %s) -> CPU %d (0x%04x)"
  44.563 +	       " vector %d\n",
  44.564  	       int_type < ARRAY_SIZE(name) ? name[int_type] : "unknown",
  44.565  	       int_type, gsi, (trigger == IOSAPIC_EDGE ? "edge" : "level"),
  44.566  	       (polarity == IOSAPIC_POL_HIGH ? "high" : "low"),
  44.567 @@ -989,10 +1053,8 @@ iosapic_register_platform_intr (u32 int_
  44.568  	return vector;
  44.569  }
  44.570  
  44.571 -
  44.572  /*
  44.573   * ACPI calls this when it finds an entry for a legacy ISA IRQ override.
  44.574 - * Note that the gsi_base and IOSAPIC address must be set in iosapic_init().
  44.575   */
  44.576  void __init
  44.577  iosapic_override_isa_irq (unsigned int isa_irq, unsigned int gsi,
  44.578 @@ -1021,7 +1083,8 @@ iosapic_system_init (int system_pcat_com
  44.579  
  44.580  	for (vector = 0; vector < IA64_NUM_VECTORS; ++vector) {
  44.581  		iosapic_intr_info[vector].low32 = IOSAPIC_MASK;
  44.582 -		INIT_LIST_HEAD(&iosapic_intr_info[vector].rtes);	/* mark as unused */
  44.583 +		/* mark as unused */
  44.584 +		INIT_LIST_HEAD(&iosapic_intr_info[vector].rtes);
  44.585  	}
  44.586  
  44.587  	pcat_compat = system_pcat_compat;
  44.588 @@ -1030,10 +1093,12 @@ iosapic_system_init (int system_pcat_com
  44.589  
  44.590  	if (pcat_compat) {
  44.591  		/*
  44.592 -		 * Disable the compatibility mode interrupts (8259 style), needs IN/OUT support
  44.593 -		 * enabled.
  44.594 +		 * Disable the compatibility mode interrupts (8259 style),
  44.595 +		 * needs IN/OUT support enabled.
  44.596  		 */
  44.597 -		printk(KERN_INFO "%s: Disabling PC-AT compatible 8259 interrupts\n", __FUNCTION__);
  44.598 +		printk(KERN_INFO
  44.599 +		       "%s: Disabling PC-AT compatible 8259 interrupts\n",
  44.600 +		       __FUNCTION__);
  44.601  		outb(0xff, 0xA1);
  44.602  		outb(0xff, 0x21);
  44.603  	}
  44.604 @@ -1073,10 +1138,7 @@ iosapic_check_gsi_range (unsigned int gs
  44.605  		base = iosapic_lists[index].gsi_base;
  44.606  		end  = base + iosapic_lists[index].num_rte - 1;
  44.607  
  44.608 -		if (gsi_base < base && gsi_end < base)
  44.609 -			continue;/* OK */
  44.610 -
  44.611 -		if (gsi_base > end && gsi_end > end)
  44.612 +		if (gsi_end < base || end < gsi_base)
  44.613  			continue; /* OK */
  44.614  
  44.615  		return -EBUSY;
  44.616 @@ -1122,12 +1184,14 @@ iosapic_init (unsigned long phys_addr, u
  44.617  
  44.618  	if ((gsi_base == 0) && pcat_compat) {
  44.619  		/*
  44.620 -		 * Map the legacy ISA devices into the IOSAPIC data.  Some of these may
  44.621 -		 * get reprogrammed later on with data from the ACPI Interrupt Source
  44.622 -		 * Override table.
  44.623 +		 * Map the legacy ISA devices into the IOSAPIC data.  Some of
  44.624 +		 * these may get reprogrammed later on with data from the ACPI
  44.625 +		 * Interrupt Source Override table.
  44.626  		 */
  44.627  		for (isa_irq = 0; isa_irq < 16; ++isa_irq)
  44.628 -			iosapic_override_isa_irq(isa_irq, isa_irq, IOSAPIC_POL_HIGH, IOSAPIC_EDGE);
  44.629 +			iosapic_override_isa_irq(isa_irq, isa_irq,
  44.630 +						 IOSAPIC_POL_HIGH,
  44.631 +						 IOSAPIC_EDGE);
  44.632  	}
  44.633  	return 0;
  44.634  }
  44.635 @@ -1150,7 +1214,8 @@ iosapic_remove (unsigned int gsi_base)
  44.636  
  44.637  		if (iosapic_lists[index].rtes_inuse) {
  44.638  			err = -EBUSY;
  44.639 -			printk(KERN_WARNING "%s: IOSAPIC for GSI base %u is busy\n",
  44.640 +			printk(KERN_WARNING
  44.641 +			       "%s: IOSAPIC for GSI base %u is busy\n",
  44.642  			       __FUNCTION__, gsi_base);
  44.643  			goto out;
  44.644  		}
    45.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/patch.c	Tue Jan 09 10:50:46 2007 +0000
    45.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/patch.c	Fri Jan 12 14:30:49 2007 +0000
    45.3 @@ -115,7 +115,7 @@ ia64_patch_vtop (unsigned long start, un
    45.4  	ia64_srlz_i();
    45.5  }
    45.6  
    45.7 -void
    45.8 +void __init
    45.9  ia64_patch_mckinley_e9 (unsigned long start, unsigned long end)
   45.10  {
   45.11  	static int first_time = 1;
   45.12 @@ -149,7 +149,7 @@ ia64_patch_mckinley_e9 (unsigned long st
   45.13  	ia64_srlz_i();
   45.14  }
   45.15  
   45.16 -static void
   45.17 +static void __init
   45.18  patch_fsyscall_table (unsigned long start, unsigned long end)
   45.19  {
   45.20  	extern unsigned long fsyscall_table[NR_syscalls];
   45.21 @@ -166,7 +166,7 @@ patch_fsyscall_table (unsigned long star
   45.22  	ia64_srlz_i();
   45.23  }
   45.24  
   45.25 -static void
   45.26 +static void __init
   45.27  patch_brl_fsys_bubble_down (unsigned long start, unsigned long end)
   45.28  {
   45.29  	extern char fsys_bubble_down[];
   45.30 @@ -251,7 +251,7 @@ patch_brl_in_vdso(void)
   45.31  #define patch_brl_in_vdso()			do { } while (0)
   45.32  #endif
   45.33  
   45.34 -void
   45.35 +void __init
   45.36  ia64_patch_gate (void)
   45.37  {
   45.38  #	define START(name)	((unsigned long) __start_gate_##name##_patchlist)
    46.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/perfmon.c	Tue Jan 09 10:50:46 2007 +0000
    46.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/perfmon.c	Fri Jan 12 14:30:49 2007 +0000
    46.3 @@ -5026,15 +5026,13 @@ abort_locked:
    46.4  	if (likely(ctx)) {
    46.5  		DPRINT(("context unlocked\n"));
    46.6  		UNPROTECT_CTX(ctx, flags);
    46.7 +		fput(file);
    46.8  	}
    46.9  
   46.10  	/* copy argument back to user, if needed */
   46.11  	if (call_made && PFM_CMD_RW_ARG(cmd) && copy_to_user(arg, args_k, base_sz*count)) ret = -EFAULT;
   46.12  
   46.13  error_args:
   46.14 -	if (file)
   46.15 -		fput(file);
   46.16 -
   46.17  	kfree(args_k);
   46.18  
   46.19  	DPRINT(("cmd=%s ret=%ld\n", PFM_CMD_NAME(cmd), ret));
   46.20 @@ -6813,6 +6811,7 @@ pfm_init(void)
   46.21  void
   46.22  pfm_init_percpu (void)
   46.23  {
   46.24 +	static int first_time=1;
   46.25  	/*
   46.26  	 * make sure no measurement is active
   46.27  	 * (may inherit programmed PMCs from EFI).
   46.28 @@ -6825,8 +6824,10 @@ pfm_init_percpu (void)
   46.29  	 */
   46.30  	pfm_unfreeze_pmu();
   46.31  
   46.32 -	if (smp_processor_id() == 0)
   46.33 +	if (first_time) {
   46.34  		register_percpu_irq(IA64_PERFMON_VECTOR, &perfmon_irqaction);
   46.35 +		first_time=0;
   46.36 +	}
   46.37  
   46.38  	ia64_setreg(_IA64_REG_CR_PMV, IA64_PERFMON_VECTOR);
   46.39  	ia64_srlz_d();
    47.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c	Tue Jan 09 10:50:46 2007 +0000
    47.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c	Fri Jan 12 14:30:49 2007 +0000
    47.3 @@ -37,11 +37,11 @@
    47.4  #include <linux/string.h>
    47.5  #include <linux/threads.h>
    47.6  #include <linux/tty.h>
    47.7 +#include <linux/dmi.h>
    47.8  #include <linux/serial.h>
    47.9  #include <linux/serial_core.h>
   47.10  #include <linux/efi.h>
   47.11  #include <linux/initrd.h>
   47.12 -#include <linux/platform.h>
   47.13  #include <linux/pm.h>
   47.14  #include <linux/cpufreq.h>
   47.15  
   47.16 @@ -150,8 +150,8 @@ EXPORT_SYMBOL(ia64_max_iommu_merge_mask)
   47.17  /*
   47.18   * We use a special marker for the end of memory and it uses the extra (+1) slot
   47.19   */
   47.20 -struct rsvd_region rsvd_region[IA64_MAX_RSVD_REGIONS + 1];
   47.21 -int num_rsvd_regions;
   47.22 +struct rsvd_region rsvd_region[IA64_MAX_RSVD_REGIONS + 1] __initdata;
   47.23 +int num_rsvd_regions __initdata;
   47.24  
   47.25  
   47.26  /*
   47.27 @@ -160,7 +160,7 @@ int num_rsvd_regions;
   47.28   * caller-specified function is called with the memory ranges that remain after filtering.
   47.29   * This routine does not assume the incoming segments are sorted.
   47.30   */
   47.31 -int
   47.32 +int __init
   47.33  filter_rsvd_memory (unsigned long start, unsigned long end, void *arg)
   47.34  {
   47.35  	unsigned long range_start, range_end, prev_start;
   47.36 @@ -196,7 +196,7 @@ filter_rsvd_memory (unsigned long start,
   47.37  	return 0;
   47.38  }
   47.39  
   47.40 -static void
   47.41 +static void __init
   47.42  sort_regions (struct rsvd_region *rsvd_region, int max)
   47.43  {
   47.44  	int j;
   47.45 @@ -237,7 +237,7 @@ static int __init register_memory(void)
   47.46   * initrd, etc.  There are currently %IA64_MAX_RSVD_REGIONS defined,
   47.47   * see include/asm-ia64/meminit.h if you need to define more.
   47.48   */
   47.49 -void
   47.50 +void __init
   47.51  reserve_memory (void)
   47.52  {
   47.53  	int n = 0;
   47.54 @@ -298,7 +298,7 @@ reserve_memory (void)
   47.55   * Grab the initrd start and end from the boot parameter struct given us by
   47.56   * the boot loader.
   47.57   */
   47.58 -void
   47.59 +void __init
   47.60  find_initrd (void)
   47.61  {
   47.62  #ifdef CONFIG_BLK_DEV_INITRD
   47.63 @@ -400,7 +400,7 @@ mark_bsp_online (void)
   47.64  }
   47.65  
   47.66  #ifdef CONFIG_SMP
   47.67 -static void
   47.68 +static void __init
   47.69  check_for_logical_procs (void)
   47.70  {
   47.71  	pal_logical_to_physical_t info;
   47.72 @@ -427,6 +427,14 @@ check_for_logical_procs (void)
   47.73  }
   47.74  #endif
   47.75  
   47.76 +static __initdata int nomca;
   47.77 +static __init int setup_nomca(char *s)
   47.78 +{
   47.79 +	nomca = 1;
   47.80 +	return 0;
   47.81 +}
   47.82 +early_param("nomca", setup_nomca);
   47.83 +
   47.84  void __init
   47.85  setup_arch (char **cmdline_p)
   47.86  {
   47.87 @@ -451,35 +459,15 @@ setup_arch (char **cmdline_p)
   47.88  	efi_init();
   47.89  	io_port_init();
   47.90  
   47.91 -#ifdef CONFIG_IA64_GENERIC
   47.92 -	{
   47.93 -		const char *mvec_name = strstr (*cmdline_p, "machvec=");
   47.94 -		char str[64];
   47.95 -
   47.96 -		if (mvec_name) {
   47.97 -			const char *end;
   47.98 -			size_t len;
   47.99 +	parse_early_param();
  47.100  
  47.101 -			mvec_name += 8;
  47.102 -			end = strchr (mvec_name, ' ');
  47.103 -			if (end)
  47.104 -				len = end - mvec_name;
  47.105 -			else
  47.106 -				len = strlen (mvec_name);
  47.107 -			len = min(len, sizeof (str) - 1);
  47.108 -			strncpy (str, mvec_name, len);
  47.109 -			str[len] = '\0';
  47.110 -			mvec_name = str;
  47.111 -		} else
  47.112 -			mvec_name = acpi_get_sysname();
  47.113 -		machvec_init(mvec_name);
  47.114 -	}
  47.115 +#ifdef CONFIG_IA64_GENERIC
  47.116 +	machvec_init(NULL);
  47.117  #endif
  47.118  
  47.119  	if (early_console_setup(*cmdline_p) == 0)
  47.120  		mark_bsp_online();
  47.121  
  47.122 -	parse_early_param();
  47.123  #ifdef CONFIG_ACPI
  47.124  	/* Initialize the ACPI boot-time table parser */
  47.125  	acpi_table_init();
  47.126 @@ -495,7 +483,7 @@ setup_arch (char **cmdline_p)
  47.127  	find_memory();
  47.128  
  47.129  	/* process SAL system table: */
  47.130 -	ia64_sal_init(efi.sal_systab);
  47.131 +	ia64_sal_init(__va(efi.sal_systab));
  47.132  
  47.133  	ia64_setup_printk_clock();
  47.134  
  47.135 @@ -561,7 +549,7 @@ setup_arch (char **cmdline_p)
  47.136  
  47.137  
  47.138  	/* enable IA-64 Machine Check Abort Handling unless disabled */
  47.139 -	if (!strstr(saved_command_line, "nomca"))
  47.140 +	if (!nomca)
  47.141  		ia64_mca_init();
  47.142  
  47.143  	platform_setup(cmdline_p);
  47.144 @@ -694,7 +682,7 @@ struct seq_operations cpuinfo_op = {
  47.145  	.show =		show_cpuinfo
  47.146  };
  47.147  
  47.148 -void
  47.149 +static void __cpuinit
  47.150  identify_cpu (struct cpuinfo_ia64 *c)
  47.151  {
  47.152  	union {
  47.153 @@ -771,7 +759,7 @@ setup_per_cpu_areas (void)
  47.154   * In addition, the minimum of the i-cache stride sizes is calculated for
  47.155   * "flush_icache_range()".
  47.156   */
  47.157 -static void
  47.158 +static void __cpuinit
  47.159  get_max_cacheline_size (void)
  47.160  {
  47.161  	unsigned long line_size, max = 1;
  47.162 @@ -834,10 +822,10 @@ get_max_cacheline_size (void)
  47.163   * cpu_init() initializes state that is per-CPU.  This function acts
  47.164   * as a 'CPU state barrier', nothing should get across.
  47.165   */
  47.166 -void
  47.167 +void __cpuinit
  47.168  cpu_init (void)
  47.169  {
  47.170 -	extern void __devinit ia64_mmu_init (void *);
  47.171 +	extern void __cpuinit ia64_mmu_init (void *);
  47.172  	unsigned long num_phys_stacked;
  47.173  	pal_vm_info_2_u_t vmi;
  47.174  	unsigned int max_ctx;
  47.175 @@ -974,9 +962,16 @@ void sched_cacheflush(void)
  47.176  	ia64_sal_cache_flush(3);
  47.177  }
  47.178  
  47.179 -void
  47.180 +void __init
  47.181  check_bugs (void)
  47.182  {
  47.183  	ia64_patch_mckinley_e9((unsigned long) __start___mckinley_e9_bundles,
  47.184  			       (unsigned long) __end___mckinley_e9_bundles);
  47.185  }
  47.186 +
  47.187 +static int __init run_dmi_scan(void)
  47.188 +{
  47.189 +	dmi_scan_machine();
  47.190 +	return 0;
  47.191 +}
  47.192 +core_initcall(run_dmi_scan);
    48.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    48.2 +++ b/linux-2.6-xen-sparse/arch/ia64/mm/ioremap.c	Fri Jan 12 14:30:49 2007 +0000
    48.3 @@ -0,0 +1,46 @@
    48.4 +/*
    48.5 + * (c) Copyright 2006 Hewlett-Packard Development Company, L.P.
    48.6 + *	Bjorn Helgaas <bjorn.helgaas@hp.com>
    48.7 + *
    48.8 + * This program is free software; you can redistribute it and/or modify
    48.9 + * it under the terms of the GNU General Public License version 2 as
   48.10 + * published by the Free Software Foundation.
   48.11 + */
   48.12 +
   48.13 +#include <linux/compiler.h>
   48.14 +#include <linux/module.h>
   48.15 +#include <linux/efi.h>
   48.16 +#include <asm/io.h>
   48.17 +
   48.18 +static inline void __iomem *
   48.19 +__ioremap (unsigned long offset, unsigned long size)
   48.20 +{
   48.21 +	offset = HYPERVISOR_ioremap(offset, size);
   48.22 +	if (IS_ERR_VALUE(offset))
   48.23 +		return (void __iomem*)offset;
   48.24 +	return (void __iomem *) (__IA64_UNCACHED_OFFSET | offset);
   48.25 +}
   48.26 +
   48.27 +void __iomem *
   48.28 +ioremap (unsigned long offset, unsigned long size)
   48.29 +{
   48.30 +	if (efi_mem_attribute_range(offset, size, EFI_MEMORY_WB))
   48.31 +		return phys_to_virt(offset);
   48.32 +
   48.33 +	if (efi_mem_attribute_range(offset, size, EFI_MEMORY_UC))
   48.34 +		return __ioremap(offset, size);
   48.35 +
   48.36 +	/*
   48.37 +	 * Someday this should check ACPI resources so we
   48.38 +	 * can do the right thing for hot-plugged regions.
   48.39 +	 */
   48.40 +	return __ioremap(offset, size);
   48.41 +}
   48.42 +EXPORT_SYMBOL(ioremap);
   48.43 +
   48.44 +void __iomem *
   48.45 +ioremap_nocache (unsigned long offset, unsigned long size)
   48.46 +{
   48.47 +	return __ioremap(offset, size);
   48.48 +}
   48.49 +EXPORT_SYMBOL(ioremap_nocache);
    49.1 --- a/linux-2.6-xen-sparse/arch/um/kernel/physmem.c	Tue Jan 09 10:50:46 2007 +0000
    49.2 +++ b/linux-2.6-xen-sparse/arch/um/kernel/physmem.c	Fri Jan 12 14:30:49 2007 +0000
    49.3 @@ -9,6 +9,7 @@
    49.4  #include "linux/vmalloc.h"
    49.5  #include "linux/bootmem.h"
    49.6  #include "linux/module.h"
    49.7 +#include "linux/pfn.h"
    49.8  #include "asm/types.h"
    49.9  #include "asm/pgtable.h"
   49.10  #include "kern_util.h"
   49.11 @@ -281,7 +282,7 @@ int init_maps(unsigned long physmem, uns
   49.12  
   49.13  	for(i = 0; i < total_pages; i++){
   49.14  		p = &map[i];
   49.15 -		set_page_count(p, 0);
   49.16 +		memset(p, 0, sizeof(struct page));
   49.17  		SetPageReserved(p);
   49.18  		INIT_LIST_HEAD(&p->lru);
   49.19  	}
   49.20 @@ -318,8 +319,6 @@ void map_memory(unsigned long virt, unsi
   49.21  	}
   49.22  }
   49.23  
   49.24 -#define PFN_UP(x) (((x) + PAGE_SIZE-1) >> PAGE_SHIFT)
   49.25 -
   49.26  extern int __syscall_stub_start, __binary_start;
   49.27  
   49.28  void setup_physmem(unsigned long start, unsigned long reserve_end,
   49.29 @@ -410,6 +409,8 @@ unsigned long find_iomem(char *driver, u
   49.30  			*len_out = region->size;
   49.31  			return(region->virt);
   49.32  		}
   49.33 +
   49.34 +		region = region->next;
   49.35  	}
   49.36  
   49.37  	return(0);
    50.1 --- a/linux-2.6-xen-sparse/arch/x86_64/Kconfig	Tue Jan 09 10:50:46 2007 +0000
    50.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/Kconfig	Fri Jan 12 14:30:49 2007 +0000
    50.3 @@ -45,6 +45,10 @@ config RWSEM_GENERIC_SPINLOCK
    50.4  config RWSEM_XCHGADD_ALGORITHM
    50.5  	bool
    50.6  
    50.7 +config GENERIC_HWEIGHT
    50.8 +	bool
    50.9 +	default y
   50.10 +
   50.11  config GENERIC_CALIBRATE_DELAY
   50.12  	bool
   50.13  	default y
   50.14 @@ -148,6 +152,11 @@ config X86_L1_CACHE_SHIFT
   50.15  	default "7" if GENERIC_CPU || MPSC
   50.16  	default "6" if MK8
   50.17  
   50.18 +config X86_INTERNODE_CACHE_BYTES
   50.19 +	int
   50.20 +	default "4096" if X86_VSMP
   50.21 +	default X86_L1_CACHE_BYTES if !X86_VSMP
   50.22 +
   50.23  config X86_TSC
   50.24  	bool
   50.25  	depends on !X86_64_XEN
   50.26 @@ -271,6 +280,15 @@ config SCHED_SMT
   50.27  	  cost of slightly increased overhead in some places. If unsure say
   50.28  	  N here.
   50.29  
   50.30 +config SCHED_MC
   50.31 +	bool "Multi-core scheduler support"
   50.32 +	depends on SMP
   50.33 +	default y
   50.34 +	help
   50.35 +	  Multi-core scheduler support improves the CPU scheduler's decision
   50.36 +	  making when dealing with multi-core CPU chips at a cost of slightly
   50.37 +	  increased overhead in some places. If unsure say N here.
   50.38 +
   50.39  source "kernel/Kconfig.preempt"
   50.40  
   50.41  config NUMA
   50.42 @@ -295,6 +313,11 @@ config K8_NUMA
   50.43  	 Northbridge of Opteron. It is recommended to use X86_64_ACPI_NUMA
   50.44  	 instead, which also takes priority if both are compiled in.   
   50.45  
   50.46 +config NODES_SHIFT
   50.47 +	int
   50.48 +	default "6"
   50.49 +	depends on NEED_MULTIPLE_NODES
   50.50 +
   50.51  # Dummy CONFIG option to select ACPI_NUMA from drivers/acpi/Kconfig.
   50.52  
   50.53  config X86_64_ACPI_NUMA
   50.54 @@ -346,9 +369,13 @@ config HAVE_ARCH_EARLY_PFN_TO_NID
   50.55  	def_bool y
   50.56  	depends on NUMA
   50.57  
   50.58 +config OUT_OF_LINE_PFN_TO_PAGE
   50.59 +	def_bool y
   50.60 +	depends on DISCONTIGMEM
   50.61 +
   50.62  config NR_CPUS
   50.63  	int "Maximum number of CPUs (2-256)"
   50.64 -	range 2 256
   50.65 +	range 2 255
   50.66  	depends on SMP
   50.67  	default "16" if X86_64_XEN
   50.68  	default "8"
   50.69 @@ -368,8 +395,6 @@ config HOTPLUG_CPU
   50.70  		can be controlled through /sys/devices/system/cpu/cpu#.
   50.71  		Say N if you want to disable CPU hotplug.
   50.72  
   50.73 -config ARCH_ENABLE_MEMORY_HOTPLUG
   50.74 -	def_bool y
   50.75  
   50.76  config HPET_TIMER
   50.77  	bool
   50.78 @@ -393,13 +418,15 @@ config GART_IOMMU
   50.79  	select SWIOTLB
   50.80  	depends on PCI && !X86_64_XEN
   50.81  	help
   50.82 -	  Support the IOMMU. Needed to run systems with more than 3GB of memory
   50.83 -	  properly with 32-bit PCI devices that do not support DAC (Double Address
   50.84 -	  Cycle). The IOMMU can be turned off at runtime with the iommu=off parameter.
   50.85 -	  Normally the kernel will take the right choice by itself.
   50.86 -	  This option includes a driver for the AMD Opteron/Athlon64 northbridge IOMMU
   50.87 -	  and a software emulation used on other systems.
   50.88 -	  If unsure, say Y.
   50.89 +	  Support for hardware IOMMU in AMD's Opteron/Athlon64 Processors
   50.90 +	  and for the bounce buffering software IOMMU.
   50.91 +	  Needed to run systems with more than 3GB of memory properly with
   50.92 +	  32-bit PCI devices that do not support DAC (Double Address Cycle).
   50.93 +	  The IOMMU can be turned off at runtime with the iommu=off parameter.
   50.94 +  	  Normally the kernel will take the right choice by itself.
   50.95 +  	  This option includes a driver for the AMD Opteron/Athlon64 IOMMU
   50.96 +  	  northbridge and a software emulation used on other systems without
   50.97 +	  hardware IOMMU.  If unsure, say Y.
   50.98  
   50.99  # need this always enabled with GART_IOMMU for the VIA workaround
  50.100  config SWIOTLB
  50.101 @@ -459,10 +486,10 @@ config CRASH_DUMP
  50.102  config PHYSICAL_START
  50.103  	hex "Physical address where the kernel is loaded" if (EMBEDDED || CRASH_DUMP)
  50.104  	default "0x1000000" if CRASH_DUMP
  50.105 -	default "0x100000"
  50.106 +	default "0x200000"
  50.107  	help
  50.108  	  This gives the physical address where the kernel is loaded. Normally
  50.109 -	  for regular kernels this value is 0x100000 (1MB). But in the case
  50.110 +	  for regular kernels this value is 0x200000 (2MB). But in the case
  50.111  	  of kexec on panic the fail safe kernel needs to run at a different
  50.112  	  address than the panic-ed kernel. This option is used to set the load
  50.113  	  address for kernels used to capture crash dump on being kexec'ed
  50.114 @@ -494,6 +521,14 @@ config SECCOMP
  50.115  
  50.116  source kernel/Kconfig.hz
  50.117  
  50.118 +config REORDER
  50.119 +	bool "Function reordering"
  50.120 +	default n
  50.121 +	help
  50.122 +         This option enables the toolchain to reorder functions for a more 
  50.123 +         optimal TLB usage. If you have pretty much any version of binutils, 
  50.124 +	 this can increase your kernel build time by roughly one minute.
  50.125 +
  50.126  endmenu
  50.127  
  50.128  #
  50.129 @@ -560,16 +595,6 @@ config XEN_PCIDEV_FE_DEBUG
  50.130  	help
  50.131  	  Enables some debug statements within the PCI Frontend.
  50.132  
  50.133 -config UNORDERED_IO
  50.134 -       bool "Unordered IO mapping access"
  50.135 -       depends on EXPERIMENTAL
  50.136 -       help
  50.137 -         Use unordered stores to access IO memory mappings in device drivers.
  50.138 -	 Still very experimental. When a driver works on IA64/ppc64/pa-risc it should
  50.139 -	 work with this option, but it makes the drivers behave differently
  50.140 -	 from i386. Requires that the driver writer used memory barriers
  50.141 -	 properly.
  50.142 -
  50.143  source "drivers/pci/pcie/Kconfig"
  50.144  
  50.145  source "drivers/pci/Kconfig"
    51.1 --- a/linux-2.6-xen-sparse/arch/x86_64/Makefile	Tue Jan 09 10:50:46 2007 +0000
    51.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/Makefile	Fri Jan 12 14:30:49 2007 +0000
    51.3 @@ -24,39 +24,41 @@
    51.4  LDFLAGS		:= -m elf_x86_64
    51.5  OBJCOPYFLAGS	:= -O binary -R .note -R .comment -S
    51.6  LDFLAGS_vmlinux :=
    51.7 -
    51.8  CHECKFLAGS      += -D__x86_64__ -m64
    51.9  
   51.10 +cflags-y	:=
   51.11  cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8)
   51.12  cflags-$(CONFIG_MPSC) += $(call cc-option,-march=nocona)
   51.13 -CFLAGS += $(cflags-y)
   51.14 +cflags-$(CONFIG_GENERIC_CPU) += $(call cc-option,-mtune=generic)
   51.15  
   51.16  cppflags-$(CONFIG_XEN) += \
   51.17  	-D__XEN_INTERFACE_VERSION__=$(CONFIG_XEN_INTERFACE_VERSION)
   51.18  CPPFLAGS += $(cppflags-y)
   51.19  
   51.20 -CFLAGS += -m64
   51.21 -CFLAGS += -mno-red-zone
   51.22 -CFLAGS += -mcmodel=kernel
   51.23 -CFLAGS += -pipe
   51.24 +cflags-y += -m64
   51.25 +cflags-y += -mno-red-zone
   51.26 +cflags-y += -mcmodel=kernel
   51.27 +cflags-y += -pipe
   51.28 +cflags-$(CONFIG_REORDER) += -ffunction-sections
   51.29  # this makes reading assembly source easier, but produces worse code
   51.30  # actually it makes the kernel smaller too.
   51.31 -CFLAGS += -fno-reorder-blocks	
   51.32 -CFLAGS += -Wno-sign-compare
   51.33 +cflags-y += -fno-reorder-blocks
   51.34 +cflags-y += -Wno-sign-compare
   51.35  ifneq ($(CONFIG_UNWIND_INFO),y)
   51.36 -CFLAGS += -fno-asynchronous-unwind-tables
   51.37 +cflags-y += -fno-asynchronous-unwind-tables
   51.38  endif
   51.39  ifneq ($(CONFIG_DEBUG_INFO),y)
   51.40  # -fweb shrinks the kernel a bit, but the difference is very small
   51.41  # it also messes up debugging, so don't use it for now.
   51.42 -#CFLAGS += $(call cc-option,-fweb)
   51.43 +#cflags-y += $(call cc-option,-fweb)
   51.44  endif
   51.45  # -funit-at-a-time shrinks the kernel .text considerably
   51.46  # unfortunately it makes reading oopses harder.
   51.47 -CFLAGS += $(call cc-option,-funit-at-a-time)
   51.48 +cflags-y += $(call cc-option,-funit-at-a-time)
   51.49  # prevent gcc from generating any FP code by mistake
   51.50 -CFLAGS += $(call cc-option,-mno-sse -mno-mmx -mno-sse2 -mno-3dnow,)
   51.51 +cflags-y += $(call cc-option,-mno-sse -mno-mmx -mno-sse2 -mno-3dnow,)
   51.52  
   51.53 +CFLAGS += $(cflags-y)
   51.54  AFLAGS += -m64
   51.55  
   51.56  head-y := arch/x86_64/kernel/head.o arch/x86_64/kernel/head64.o arch/x86_64/kernel/init_task.o
   51.57 @@ -71,8 +73,8 @@ drivers-$(CONFIG_OPROFILE)		+= arch/x86_
   51.58  
   51.59  boot := arch/x86_64/boot
   51.60  
   51.61 -.PHONY: bzImage bzlilo install archmrproper \
   51.62 -	fdimage fdimage144 fdimage288 archclean
   51.63 +PHONY += bzImage bzlilo install archmrproper \
   51.64 +	 fdimage fdimage144 fdimage288 isoimage archclean
   51.65  
   51.66  ifdef CONFIG_XEN
   51.67  CPPFLAGS := -Iinclude$(if $(KBUILD_SRC),2)/asm/mach-xen $(CPPFLAGS)
   51.68 @@ -104,7 +106,7 @@ bzlilo: vmlinux
   51.69  bzdisk: vmlinux
   51.70  	$(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) zdisk
   51.71  
   51.72 -fdimage fdimage144 fdimage288: vmlinux
   51.73 +fdimage fdimage144 fdimage288 isoimage: vmlinux
   51.74  	$(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) $@
   51.75  
   51.76  install:
   51.77 @@ -117,11 +119,16 @@ archclean:
   51.78  define archhelp
   51.79    echo  '* bzImage	- Compressed kernel image (arch/$(ARCH)/boot/bzImage)'
   51.80    echo  '  install	- Install kernel using'
   51.81 -  echo  '                  (your) ~/bin/installkernel or'
   51.82 -  echo  '                  (distribution) /sbin/installkernel or'
   51.83 -  echo  '        	  install to $$(INSTALL_PATH) and run lilo'
   51.84 +  echo  '		   (your) ~/bin/installkernel or'
   51.85 +  echo  '		   (distribution) /sbin/installkernel or'
   51.86 +  echo  '		   install to $$(INSTALL_PATH) and run lilo'
   51.87 +  echo  '  bzdisk       - Create a boot floppy in /dev/fd0'
   51.88 +  echo  '  fdimage      - Create a boot floppy image'
   51.89 +  echo  '  isoimage     - Create a boot CD-ROM image'
   51.90  endef
   51.91  
   51.92 -CLEAN_FILES += arch/$(ARCH)/boot/fdimage arch/$(ARCH)/boot/mtools.conf
   51.93 +CLEAN_FILES += arch/$(ARCH)/boot/fdimage \
   51.94 +	       arch/$(ARCH)/boot/image.iso \
   51.95 +	       arch/$(ARCH)/boot/mtools.conf
   51.96  
   51.97  
    52.1 --- a/linux-2.6-xen-sparse/arch/x86_64/ia32/ia32entry-xen.S	Tue Jan 09 10:50:46 2007 +0000
    52.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/ia32/ia32entry-xen.S	Fri Jan 12 14:30:49 2007 +0000
    52.3 @@ -16,7 +16,9 @@
    52.4  #include <linux/linkage.h>
    52.5  
    52.6  #define __XEN_X86_64 1
    52.7 -	
    52.8 +
    52.9 +#define IA32_NR_syscalls ((ia32_syscall_end - ia32_sys_call_table)/8)
   52.10 +
   52.11  	.macro IA32_ARG_FIXUP noebp=0
   52.12  	movl	%edi,%r8d
   52.13  	.if \noebp
   52.14 @@ -127,8 +129,8 @@ 1:	movl	(%rbp),%r9d
   52.15  	CFI_REMEMBER_STATE
   52.16  	jnz  sysenter_tracesys
   52.17  sysenter_do_call:	
   52.18 -	cmpl	$(IA32_NR_syscalls),%eax
   52.19 -	jae	ia32_badsys
   52.20 +	cmpl	$(IA32_NR_syscalls-1),%eax
   52.21 +	ja	ia32_badsys
   52.22  	IA32_ARG_FIXUP 1
   52.23  	call	*ia32_sys_call_table(,%rax,8)
   52.24  	movq	%rax,RAX-ARGOFFSET(%rsp)
   52.25 @@ -231,8 +233,8 @@ 1:	movl	(%r8),%r9d
   52.26  	CFI_REMEMBER_STATE
   52.27  	jnz   cstar_tracesys
   52.28  cstar_do_call:	
   52.29 -	cmpl $IA32_NR_syscalls,%eax
   52.30 -	jae  ia32_badsys
   52.31 +	cmpl $IA32_NR_syscalls-1,%eax
   52.32 +	ja  ia32_badsys
   52.33  	IA32_ARG_FIXUP 1
   52.34  	call *ia32_sys_call_table(,%rax,8)
   52.35  	movq %rax,RAX-ARGOFFSET(%rsp)
   52.36 @@ -323,8 +325,8 @@ ENTRY(ia32_syscall)
   52.37  	testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%r10)
   52.38  	jnz ia32_tracesys
   52.39  ia32_do_syscall:	
   52.40 -	cmpl $(IA32_NR_syscalls),%eax
   52.41 -	jae  ia32_badsys
   52.42 +	cmpl $(IA32_NR_syscalls-1),%eax
   52.43 +	ja  ia32_badsys
   52.44  	IA32_ARG_FIXUP
   52.45  	call *ia32_sys_call_table(,%rax,8) # xxx: rip relative
   52.46  ia32_sysret:
   52.47 @@ -528,7 +530,7 @@ ia32_sys_call_table:
   52.48  	.quad sys_setdomainname
   52.49  	.quad sys_uname
   52.50  	.quad sys_modify_ldt
   52.51 -	.quad sys32_adjtimex
   52.52 +	.quad compat_sys_adjtimex
   52.53  	.quad sys32_mprotect		/* 125 */
   52.54  	.quad compat_sys_sigprocmask
   52.55  	.quad quiet_ni_syscall		/* create_module */
   52.56 @@ -712,10 +714,13 @@ ia32_sys_call_table:
   52.57  	.quad sys_readlinkat		/* 305 */
   52.58  	.quad sys_fchmodat
   52.59  	.quad sys_faccessat
   52.60 -	.quad sys_ni_syscall		/* pselect6 for now */
   52.61 -	.quad sys_ni_syscall		/* ppoll for now */
   52.62 +	.quad quiet_ni_syscall		/* pselect6 for now */
   52.63 +	.quad quiet_ni_syscall		/* ppoll for now */
   52.64  	.quad sys_unshare		/* 310 */
   52.65 +	.quad compat_sys_set_robust_list
   52.66 +	.quad compat_sys_get_robust_list
   52.67 +	.quad sys_splice
   52.68 +	.quad sys_sync_file_range
   52.69 +	.quad sys_tee
   52.70 +	.quad compat_sys_vmsplice
   52.71  ia32_syscall_end:		
   52.72 -	.rept IA32_NR_syscalls-(ia32_syscall_end-ia32_sys_call_table)/8
   52.73 -		.quad ni_syscall
   52.74 -	.endr
    53.1 --- a/linux-2.6-xen-sparse/arch/x86_64/ia32/vsyscall-sigreturn.S	Tue Jan 09 10:50:46 2007 +0000
    53.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/ia32/vsyscall-sigreturn.S	Fri Jan 12 14:30:49 2007 +0000
    53.3 @@ -32,9 +32,28 @@
    53.4  	.size __kernel_rt_sigreturn,.-.LSTART_rt_sigreturn
    53.5  
    53.6  	.section .eh_frame,"a",@progbits
    53.7 +.LSTARTFRAMES:
    53.8 +        .long .LENDCIES-.LSTARTCIES
    53.9 +.LSTARTCIES:
   53.10 +	.long 0			/* CIE ID */
   53.11 +	.byte 1			/* Version number */
   53.12 +	.string "zRS"		/* NUL-terminated augmentation string */
   53.13 +	.uleb128 1		/* Code alignment factor */
   53.14 +	.sleb128 -4		/* Data alignment factor */
   53.15 +	.byte 8			/* Return address register column */
   53.16 +	.uleb128 1		/* Augmentation value length */
   53.17 +	.byte 0x1b		/* DW_EH_PE_pcrel|DW_EH_PE_sdata4. */
   53.18 +	.byte 0x0c		/* DW_CFA_def_cfa */
   53.19 +	.uleb128 4
   53.20 +	.uleb128 4
   53.21 +	.byte 0x88		/* DW_CFA_offset, column 0x8 */
   53.22 +	.uleb128 1
   53.23 +	.align 4
   53.24 +.LENDCIES:
   53.25 +
   53.26  	.long .LENDFDE2-.LSTARTFDE2	/* Length FDE */
   53.27  .LSTARTFDE2:
   53.28 -	.long .LSTARTFDE2-.LSTARTFRAME	/* CIE pointer */
   53.29 +	.long .LSTARTFDE2-.LSTARTFRAMES	/* CIE pointer */
   53.30  	/* HACK: The dwarf2 unwind routines will subtract 1 from the
   53.31  	   return address to get an address in the middle of the
   53.32  	   presumed call instruction.  Since we didn't get here via
   53.33 @@ -97,7 +116,7 @@ 1:
   53.34  
   53.35  	.long .LENDFDE3-.LSTARTFDE3	/* Length FDE */
   53.36  .LSTARTFDE3:
   53.37 -	.long .LSTARTFDE3-.LSTARTFRAME	/* CIE pointer */
   53.38 +	.long .LSTARTFDE3-.LSTARTFRAMES	/* CIE pointer */
   53.39  	/* HACK: See above wrt unwind library assumptions.  */
   53.40  	.long .LSTART_rt_sigreturn-1-.	/* PC-relative start address */
   53.41  	.long .LEND_rt_sigreturn-.LSTART_rt_sigreturn+1
    54.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/Makefile	Tue Jan 09 10:50:46 2007 +0000
    54.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/Makefile	Fri Jan 12 14:30:49 2007 +0000
    54.3 @@ -8,7 +8,7 @@ obj-y	:= process.o signal.o entry.o trap
    54.4  		ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_x86_64.o \
    54.5  		x8664_ksyms.o i387.o syscall.o vsyscall.o \
    54.6  		setup64.o bootflag.o e820.o reboot.o quirks.o i8237.o \
    54.7 -		dmi_scan.o pci-dma.o pci-nommu.o
    54.8 +		pci-dma.o pci-nommu.o
    54.9  
   54.10  obj-$(CONFIG_X86_MCE)         += mce.o
   54.11  obj-$(CONFIG_X86_MCE_INTEL)	+= mce_intel.o
   54.12 @@ -47,11 +47,10 @@ bootflag-y			+= ../../i386/kernel/bootfl
   54.13  cpuid-$(subst m,y,$(CONFIG_X86_CPUID))  += ../../i386/kernel/cpuid.o
   54.14  topology-y                     += ../../i386/kernel/topology.o
   54.15  microcode-$(subst m,y,$(CONFIG_MICROCODE))  += ../../i386/kernel/microcode.o
   54.16 -intel_cacheinfo-y		+= ../../i386/kernel/cpu/intel_cacheinfo.o
   54.17 +intel_cacheinfo-y		+= ../../i386/kernel/cpu/intel_cacheinfo-xen.o
   54.18  quirks-y			+= ../../i386/kernel/quirks.o
   54.19  i8237-y				+= ../../i386/kernel/i8237.o
   54.20  msr-$(subst m,y,$(CONFIG_X86_MSR))  += ../../i386/kernel/msr.o
   54.21 -dmi_scan-y			+= ../../i386/kernel/dmi_scan.o
   54.22  
   54.23  ifdef CONFIG_XEN
   54.24  time-y				+= ../../i386/kernel/time-xen.o
    55.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/acpi/Makefile	Tue Jan 09 10:50:46 2007 +0000
    55.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/acpi/Makefile	Fri Jan 12 14:30:49 2007 +0000
    55.3 @@ -4,7 +4,6 @@ obj-$(CONFIG_ACPI_SLEEP)	+= sleep.o wake
    55.4  
    55.5  ifneq ($(CONFIG_ACPI_PROCESSOR),)
    55.6  obj-y			+= processor.o
    55.7 -processor-y		:= ../../../i386/kernel/acpi/processor.o ../../../i386/kernel/acpi/cstate.o
    55.8  endif
    55.9  
   55.10  boot-$(CONFIG_XEN)		:= ../../../i386/kernel/acpi/boot-xen.o
    56.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/apic-xen.c	Tue Jan 09 10:50:46 2007 +0000
    56.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/apic-xen.c	Fri Jan 12 14:30:49 2007 +0000
    56.3 @@ -194,5 +194,5 @@ int __init APIC_init_uniprocessor (void)
    56.4  			setup_IO_APIC();
    56.5  #endif
    56.6  
    56.7 -	return 0;
    56.8 +	return 1;
    56.9  }
    57.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/e820-xen.c	Tue Jan 09 10:50:46 2007 +0000
    57.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/e820-xen.c	Fri Jan 12 14:30:49 2007 +0000
    57.3 @@ -78,6 +78,12 @@ static inline int bad_addr(unsigned long
    57.4  		*addrp = __pa_symbol(&_end);
    57.5  		return 1;
    57.6  	}
    57.7 +
    57.8 +	if (last >= ebda_addr && addr < ebda_addr + ebda_size) {
    57.9 +		*addrp = ebda_addr + ebda_size;
   57.10 +		return 1;
   57.11 +	}
   57.12 +
   57.13  	/* XXX ramdisk image here? */ 
   57.14  #else
   57.15  	if (last < (table_end<<PAGE_SHIFT)) {
   57.16 @@ -89,7 +95,12 @@ static inline int bad_addr(unsigned long
   57.17  } 
   57.18  
   57.19  #ifndef CONFIG_XEN
   57.20 -int __init e820_mapped(unsigned long start, unsigned long end, unsigned type) 
   57.21 +/*
   57.22 + * This function checks if any part of the range <start,end> is mapped
   57.23 + * with type.
   57.24 + */
   57.25 +int __meminit
   57.26 +e820_any_mapped(unsigned long start, unsigned long end, unsigned type)
   57.27  { 
   57.28  	int i;
   57.29  	for (i = 0; i < e820.nr_map; i++) { 
   57.30 @@ -104,6 +115,35 @@ int __init e820_mapped(unsigned long sta
   57.31  }
   57.32  #endif
   57.33  
   57.34 +/*
   57.35 + * This function checks if the entire range <start,end> is mapped with type.
   57.36 + *
   57.37 + * Note: this function only works correct if the e820 table is sorted and
   57.38 + * not-overlapping, which is the case
   57.39 + */
   57.40 +int __init e820_all_mapped(unsigned long start, unsigned long end, unsigned type)
   57.41 +{
   57.42 +	int i;
   57.43 +	for (i = 0; i < e820.nr_map; i++) {
   57.44 +		struct e820entry *ei = &e820.map[i];
   57.45 +		if (type && ei->type != type)
   57.46 +			continue;
   57.47 +		/* is the region (part) in overlap with the current region ?*/
   57.48 +		if (ei->addr >= end || ei->addr + ei->size <= start)
   57.49 +			continue;
   57.50 +
   57.51 +		/* if the region is at the beginning of <start,end> we move
   57.52 +		 * start to the end of the region since it's ok until there
   57.53 +		 */
   57.54 +		if (ei->addr <= start)
   57.55 +			start = ei->addr + ei->size;
   57.56 +		/* if start is now at or beyond end, we're done, full coverage */
   57.57 +		if (start >= end)
   57.58 +			return 1; /* we're done */
   57.59 +	}
   57.60 +	return 0;
   57.61 +}
   57.62 +
   57.63  /* 
   57.64   * Find a free area in a specific range. 
   57.65   */ 
   57.66 @@ -119,7 +159,7 @@ unsigned long __init find_e820_area(unsi
   57.67  			addr = start;
   57.68  		if (addr > ei->addr + ei->size) 
   57.69  			continue; 
   57.70 -		while (bad_addr(&addr, size) && addr+size < ei->addr + ei->size)
   57.71 +		while (bad_addr(&addr, size) && addr+size <= ei->addr+ei->size)
   57.72  			;
   57.73  		last = addr + size;
   57.74  		if (last > ei->addr + ei->size)
    58.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/early_printk-xen.c	Tue Jan 09 10:50:46 2007 +0000
    58.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/early_printk-xen.c	Fri Jan 12 14:30:49 2007 +0000
    58.3 @@ -18,13 +18,10 @@
    58.4  #define VGABASE		((void __iomem *)0xffffffff800b8000UL)
    58.5  #endif
    58.6  
    58.7 -#define MAX_YPOS	max_ypos
    58.8 -#define MAX_XPOS	max_xpos
    58.9 -
   58.10  static int max_ypos = 25, max_xpos = 80;
   58.11  
   58.12  #ifndef CONFIG_XEN
   58.13 -static int current_ypos = 1, current_xpos = 0; 
   58.14 +static int current_ypos = 25, current_xpos = 0; 
   58.15  
   58.16  static void early_vga_write(struct console *con, const char *str, unsigned n)
   58.17  {
   58.18 @@ -32,26 +29,26 @@ static void early_vga_write(struct conso
   58.19  	int  i, k, j;
   58.20  
   58.21  	while ((c = *str++) != '\0' && n-- > 0) {
   58.22 -		if (current_ypos >= MAX_YPOS) {
   58.23 +		if (current_ypos >= max_ypos) {
   58.24  			/* scroll 1 line up */
   58.25 -			for (k = 1, j = 0; k < MAX_YPOS; k++, j++) {
   58.26 -				for (i = 0; i < MAX_XPOS; i++) {
   58.27 -					writew(readw(VGABASE + 2*(MAX_XPOS*k + i)),
   58.28 -					       VGABASE + 2*(MAX_XPOS*j + i));
   58.29 +			for (k = 1, j = 0; k < max_ypos; k++, j++) {
   58.30 +				for (i = 0; i < max_xpos; i++) {
   58.31 +					writew(readw(VGABASE+2*(max_xpos*k+i)),
   58.32 +					       VGABASE + 2*(max_xpos*j + i));
   58.33  				}
   58.34  			}
   58.35 -			for (i = 0; i < MAX_XPOS; i++)
   58.36 -				writew(0x720, VGABASE + 2*(MAX_XPOS*j + i));
   58.37 -			current_ypos = MAX_YPOS-1;
   58.38 +			for (i = 0; i < max_xpos; i++)
   58.39 +				writew(0x720, VGABASE + 2*(max_xpos*j + i));
   58.40 +			current_ypos = max_ypos-1;
   58.41  		}
   58.42  		if (c == '\n') {
   58.43  			current_xpos = 0;
   58.44  			current_ypos++;
   58.45  		} else if (c != '\r')  {
   58.46  			writew(((0x7 << 8) | (unsigned short) c),
   58.47 -			       VGABASE + 2*(MAX_XPOS*current_ypos +
   58.48 +			       VGABASE + 2*(max_xpos*current_ypos +
   58.49  						current_xpos++));
   58.50 -			if (current_xpos >= MAX_XPOS) {
   58.51 +			if (current_xpos >= max_xpos) {
   58.52  				current_xpos = 0;
   58.53  				current_ypos++;
   58.54  			}
   58.55 @@ -66,7 +63,7 @@ static struct console early_vga_console 
   58.56  	.index =	-1,
   58.57  };
   58.58  
   58.59 -/* Serial functions loosely based on a similar package from Klaus P. Gerlicher */ 
   58.60 +/* Serial functions loosely based on a similar package from Klaus P. Gerlicher */
   58.61  
   58.62  static int early_serial_base = 0x3f8;  /* ttyS0 */
   58.63  
   58.64 @@ -86,30 +83,30 @@ static int early_serial_base = 0x3f8;  /
   58.65  #define DLL             0       /*  Divisor Latch Low         */
   58.66  #define DLH             1       /*  Divisor latch High        */
   58.67  
   58.68 -static int early_serial_putc(unsigned char ch) 
   58.69 -{ 
   58.70 -	unsigned timeout = 0xffff; 
   58.71 -	while ((inb(early_serial_base + LSR) & XMTRDY) == 0 && --timeout) 
   58.72 +static int early_serial_putc(unsigned char ch)
   58.73 +{
   58.74 +	unsigned timeout = 0xffff;
   58.75 +	while ((inb(early_serial_base + LSR) & XMTRDY) == 0 && --timeout)
   58.76  		cpu_relax();
   58.77  	outb(ch, early_serial_base + TXR);
   58.78  	return timeout ? 0 : -1;
   58.79 -} 
   58.80 +}
   58.81  
   58.82  static void early_serial_write(struct console *con, const char *s, unsigned n)
   58.83  {
   58.84 -	while (*s && n-- > 0) { 
   58.85 -		early_serial_putc(*s); 
   58.86 -		if (*s == '\n') 
   58.87 -			early_serial_putc('\r'); 
   58.88 -		s++; 
   58.89 -	} 
   58.90 -} 
   58.91 +	while (*s && n-- > 0) {
   58.92 +		early_serial_putc(*s);
   58.93 +		if (*s == '\n')
   58.94 +			early_serial_putc('\r');
   58.95 +		s++;
   58.96 +	}
   58.97 +}
   58.98  
   58.99  #define DEFAULT_BAUD 9600
  58.100  
  58.101  static __init void early_serial_init(char *s)
  58.102  {
  58.103 -	unsigned char c; 
  58.104 +	unsigned char c;
  58.105  	unsigned divisor;
  58.106  	unsigned baud = DEFAULT_BAUD;
  58.107  	char *e;
  58.108 @@ -118,7 +115,7 @@ static __init void early_serial_init(cha
  58.109  		++s;
  58.110  
  58.111  	if (*s) {
  58.112 -		unsigned port; 
  58.113 +		unsigned port;
  58.114  		if (!strncmp(s,"0x",2)) {
  58.115  			early_serial_base = simple_strtoul(s, &e, 16);
  58.116  		} else {
  58.117 @@ -142,16 +139,16 @@ static __init void early_serial_init(cha
  58.118  	outb(0x3, early_serial_base + MCR);	/* DTR + RTS */
  58.119  
  58.120  	if (*s) {
  58.121 -		baud = simple_strtoul(s, &e, 0); 
  58.122 -		if (baud == 0 || s == e) 
  58.123 +		baud = simple_strtoul(s, &e, 0);
  58.124 +		if (baud == 0 || s == e)
  58.125  			baud = DEFAULT_BAUD;
  58.126 -	} 
  58.127 -	
  58.128 -	divisor = 115200 / baud; 
  58.129 -	c = inb(early_serial_base + LCR); 
  58.130 -	outb(c | DLAB, early_serial_base + LCR); 
  58.131 -	outb(divisor & 0xff, early_serial_base + DLL); 
  58.132 -	outb((divisor >> 8) & 0xff, early_serial_base + DLH); 
  58.133 +	}
  58.134 +
  58.135 +	divisor = 115200 / baud;
  58.136 +	c = inb(early_serial_base + LCR);
  58.137 +	outb(c | DLAB, early_serial_base + LCR);
  58.138 +	outb(divisor & 0xff, early_serial_base + DLL);
  58.139 +	outb((divisor >> 8) & 0xff, early_serial_base + DLH);
  58.140  	outb(c & ~DLAB, early_serial_base + LCR);
  58.141  }
  58.142  
  58.143 @@ -240,67 +237,70 @@ struct console *early_console = &early_v
  58.144  static int early_console_initialized = 0;
  58.145  
  58.146  void early_printk(const char *fmt, ...)
  58.147 -{ 
  58.148 -	char buf[512]; 
  58.149 -	int n; 
  58.150 +{
  58.151 +	char buf[512];
  58.152 +	int n;
  58.153  	va_list ap;
  58.154  
  58.155 -	va_start(ap,fmt); 
  58.156 +	va_start(ap,fmt);
  58.157  	n = vscnprintf(buf,512,fmt,ap);
  58.158  	early_console->write(early_console,buf,n);
  58.159 -	va_end(ap); 
  58.160 -} 
  58.161 +	va_end(ap);
  58.162 +}
  58.163  
  58.164  static int __initdata keep_early;
  58.165  
  58.166 -int __init setup_early_printk(char *opt) 
  58.167 -{  
  58.168 +int __init setup_early_printk(char *opt)
  58.169 +{
  58.170  	char *space;
  58.171 -	char buf[256]; 
  58.172 +	char buf[256];
  58.173  
  58.174  	if (early_console_initialized)
  58.175 -		return -1;
  58.176 +		return 1;
  58.177  
  58.178 -	strlcpy(buf,opt,sizeof(buf)); 
  58.179 -	space = strchr(buf, ' '); 
  58.180 +	strlcpy(buf,opt,sizeof(buf));
  58.181 +	space = strchr(buf, ' ');
  58.182  	if (space)
  58.183 -		*space = 0; 
  58.184 +		*space = 0;
  58.185  
  58.186  	if (strstr(buf,"keep"))
  58.187 -		keep_early = 1; 
  58.188 +		keep_early = 1;
  58.189  
  58.190 -	if (!strncmp(buf, "serial", 6)) { 
  58.191 +	if (!strncmp(buf, "serial", 6)) {
  58.192  		early_serial_init(buf + 6);
  58.193  		early_console = &early_serial_console;
  58.194 -	} else if (!strncmp(buf, "ttyS", 4)) { 
  58.195 +	} else if (!strncmp(buf, "ttyS", 4)) {
  58.196  		early_serial_init(buf);
  58.197 -		early_console = &early_serial_console;		
  58.198 +		early_console = &early_serial_console;
  58.199  	} else if (!strncmp(buf, "vga", 3)
  58.200  	           && SCREEN_INFO.orig_video_isVGA == 1) {
  58.201  		max_xpos = SCREEN_INFO.orig_video_cols;
  58.202  		max_ypos = SCREEN_INFO.orig_video_lines;
  58.203 -		early_console = &early_vga_console; 
  58.204 +#ifndef CONFIG_XEN
  58.205 +		current_ypos = SCREEN_INFO.orig_y;
  58.206 +#endif
  58.207 +		early_console = &early_vga_console;
  58.208   	} else if (!strncmp(buf, "simnow", 6)) {
  58.209   		simnow_init(buf + 6);
  58.210   		early_console = &simnow_console;
  58.211   		keep_early = 1;
  58.212  	}
  58.213  	early_console_initialized = 1;
  58.214 -	register_console(early_console);       
  58.215 +	register_console(early_console);
  58.216  	return 0;
  58.217  }
  58.218  
  58.219  void __init disable_early_printk(void)
  58.220 -{ 
  58.221 +{
  58.222  	if (!early_console_initialized || !early_console)
  58.223  		return;
  58.224  	if (!keep_early) {
  58.225  		printk("disabling early console\n");
  58.226  		unregister_console(early_console);
  58.227  		early_console_initialized = 0;
  58.228 -	} else { 
  58.229 +	} else {
  58.230  		printk("keeping early console\n");
  58.231  	}
  58.232 -} 
  58.233 +}
  58.234  
  58.235  __setup("earlyprintk=", setup_early_printk);
    59.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/entry-xen.S	Tue Jan 09 10:50:46 2007 +0000
    59.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/entry-xen.S	Fri Jan 12 14:30:49 2007 +0000
    59.3 @@ -868,7 +868,7 @@ ENTRY(failsafe_callback)
    59.4  	movq (%rsp),%rcx
    59.5  	movq 8(%rsp),%r11
    59.6  	addq $0x30,%rsp
    59.7 -	movq $-9999,%rdi	/* better code? */
    59.8 +	movq $11,%rdi	/* SIGSEGV */
    59.9  	jmp do_exit			
   59.10  1:	/* Segment mismatch => Category 1 (Bad segment). Retry the IRET. */
   59.11  	movq (%rsp),%rcx
    60.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/head-xen.S	Tue Jan 09 10:50:46 2007 +0000
    60.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/head-xen.S	Fri Jan 12 14:30:49 2007 +0000
    60.3 @@ -79,9 +79,6 @@ NEXT_PAGE(level3_user_pgt)
    60.4  NEXT_PAGE(level2_kernel_pgt)
    60.5  	.fill	512,8,0
    60.6  
    60.7 -NEXT_PAGE(empty_zero_page)
    60.8 -	.skip PAGE_SIZE
    60.9 -
   60.10  NEXT_PAGE(hypercall_page)
   60.11  	.fill	512,8,0
   60.12  
   60.13 @@ -92,7 +89,7 @@ NEXT_PAGE(hypercall_page)
   60.14  	.align 16
   60.15  	.globl cpu_gdt_descr
   60.16  cpu_gdt_descr:
   60.17 -	.word	gdt_end-cpu_gdt_table
   60.18 +	.word	gdt_end-cpu_gdt_table-1
   60.19  gdt:
   60.20  	.quad	cpu_gdt_table
   60.21  #ifdef CONFIG_SMP
   60.22 @@ -134,6 +131,11 @@ gdt_end:
   60.23  	/* zero the remaining page */
   60.24  	.fill PAGE_SIZE / 8 - GDT_ENTRIES,8,0
   60.25  
   60.26 +	.section .bss.page_aligned, "aw", @nobits
   60.27 +	.align PAGE_SIZE
   60.28 +ENTRY(empty_zero_page)
   60.29 +	.skip PAGE_SIZE
   60.30 +
   60.31  #ifdef CONFIG_XEN_COMPAT_030002
   60.32  /*
   60.33   * __xen_guest information
    61.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/io_apic-xen.c	Tue Jan 09 10:50:46 2007 +0000
    61.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/io_apic-xen.c	Fri Jan 12 14:30:49 2007 +0000
    61.3 @@ -51,7 +51,7 @@ static int no_timer_check;
    61.4  int disable_timer_pin_1 __initdata;
    61.5  
    61.6  #ifndef CONFIG_XEN
    61.7 -int timer_over_8254 __initdata = 1;
    61.8 +int timer_over_8254 __initdata = 0;
    61.9  
   61.10  /* Where if anywhere is the i8259 connect in external int mode */
   61.11  static struct { int pin, apic; } ioapic_i8259 = { -1, -1 };
   61.12 @@ -321,6 +321,18 @@ static int __init setup_enable_8254_time
   61.13  #include <linux/pci_ids.h>
   61.14  #include <linux/pci.h>
   61.15  
   61.16 +
   61.17 +#ifdef CONFIG_ACPI
   61.18 +
   61.19 +static int nvidia_hpet_detected __initdata;
   61.20 +
   61.21 +static int __init nvidia_hpet_check(unsigned long phys, unsigned long size)
   61.22 +{
   61.23 +	nvidia_hpet_detected = 1;
   61.24 +	return 0;
   61.25 +}
   61.26 +#endif
   61.27 +
   61.28  /* Temporary Hack. Nvidia and VIA boards currently only work with IO-APIC
   61.29     off. Check for an Nvidia or VIA PCI bridge and turn it off.
   61.30     Use pci direct infrastructure because this runs before the PCI subsystem. 
   61.31 @@ -360,18 +372,26 @@ void __init check_ioapic(void)
   61.32  					     force_iommu) &&
   61.33  					    !iommu_aperture_allowed) {
   61.34  						printk(KERN_INFO
   61.35 -    "Looks like a VIA chipset. Disabling IOMMU. Overwrite with \"iommu=allowed\"\n");
   61.36 +    "Looks like a VIA chipset. Disabling IOMMU. Override with \"iommu=allowed\"\n");
   61.37  						iommu_aperture_disabled = 1;
   61.38  					}
   61.39  #endif
   61.40  					return;
   61.41  				case PCI_VENDOR_ID_NVIDIA:
   61.42  #ifdef CONFIG_ACPI
   61.43 -					/* All timer overrides on Nvidia
   61.44 -				           seem to be wrong. Skip them. */
   61.45 -					acpi_skip_timer_override = 1;
   61.46 -					printk(KERN_INFO 
   61.47 -	     "Nvidia board detected. Ignoring ACPI timer override.\n");
   61.48 +					/*
   61.49 +					 * All timer overrides on Nvidia are
   61.50 +					 * wrong unless HPET is enabled.
   61.51 +					 */
   61.52 +					nvidia_hpet_detected = 0;
   61.53 +					acpi_table_parse(ACPI_HPET,
   61.54 +							nvidia_hpet_check);
   61.55 +					if (nvidia_hpet_detected == 0) {
   61.56 +						acpi_skip_timer_override = 1;
   61.57 +						printk(KERN_INFO "Nvidia board "
   61.58 +						    "detected. Ignoring ACPI "
   61.59 +						    "timer override.\n");
   61.60 +					}
   61.61  #endif
   61.62  					/* RED-PEN skip them on mptables too? */
   61.63  					return;
   61.64 @@ -1849,6 +1869,8 @@ static inline void unlock_ExtINT_logic(v
   61.65  	spin_unlock_irqrestore(&ioapic_lock, flags);
   61.66  }
   61.67  
   61.68 +int timer_uses_ioapic_pin_0;
   61.69 +
   61.70  /*
   61.71   * This code may look a bit paranoid, but it's supposed to cooperate with
   61.72   * a wide range of boards and BIOS bugs.  Fortunately only the timer IRQ
   61.73 @@ -1886,6 +1908,9 @@ static inline void check_timer(void)
   61.74  	pin2  = ioapic_i8259.pin;
   61.75  	apic2 = ioapic_i8259.apic;
   61.76  
   61.77 +	if (pin1 == 0)
   61.78 +		timer_uses_ioapic_pin_0 = 1;
   61.79 +
   61.80  	apic_printk(APIC_VERBOSE,KERN_INFO "..TIMER: vector=0x%02X apic1=%d pin1=%d apic2=%d pin2=%d\n",
   61.81  		vector, apic1, pin1, apic2, pin2);
   61.82  
   61.83 @@ -1920,7 +1945,7 @@ static inline void check_timer(void)
   61.84  		 */
   61.85  		setup_ExtINT_IRQ0_pin(apic2, pin2, vector);
   61.86  		if (timer_irq_works()) {
   61.87 -			printk("works.\n");
   61.88 +			apic_printk(APIC_VERBOSE," works.\n");
   61.89  			nmi_watchdog_default();
   61.90  			if (nmi_watchdog == NMI_IO_APIC) {
   61.91  				setup_nmi();
   61.92 @@ -1932,7 +1957,7 @@ static inline void check_timer(void)
   61.93  		 */
   61.94  		clear_IO_APIC_pin(apic2, pin2);
   61.95  	}
   61.96 -	printk(" failed.\n");
   61.97 +	apic_printk(APIC_VERBOSE," failed.\n");
   61.98  
   61.99  	if (nmi_watchdog == NMI_IO_APIC) {
  61.100  		printk(KERN_WARNING "timer doesn't work through the IO-APIC - disabling NMI Watchdog!\n");
  61.101 @@ -1947,7 +1972,7 @@ static inline void check_timer(void)
  61.102  	enable_8259A_irq(0);
  61.103  
  61.104  	if (timer_irq_works()) {
  61.105 -		apic_printk(APIC_QUIET, " works.\n");
  61.106 +		apic_printk(APIC_VERBOSE," works.\n");
  61.107  		return;
  61.108  	}
  61.109  	apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_FIXED | vector);
  61.110 @@ -1970,6 +1995,7 @@ static inline void check_timer(void)
  61.111  }
  61.112  #else
  61.113  #define check_timer() ((void)0)
  61.114 +int timer_uses_ioapic_pin_0 = 0;
  61.115  #endif /* !CONFIG_XEN */
  61.116  
  61.117  static int __init notimercheck(char *s)
    62.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/irq-xen.c	Tue Jan 09 10:50:46 2007 +0000
    62.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/irq-xen.c	Fri Jan 12 14:30:49 2007 +0000
    62.3 @@ -38,9 +38,8 @@ int show_interrupts(struct seq_file *p, 
    62.4  
    62.5  	if (i == 0) {
    62.6  		seq_printf(p, "           ");
    62.7 -		for (j=0; j<NR_CPUS; j++)
    62.8 -			if (cpu_online(j))
    62.9 -				seq_printf(p, "CPU%d       ",j);
   62.10 +		for_each_online_cpu(j)
   62.11 +			seq_printf(p, "CPU%d       ",j);
   62.12  		seq_putc(p, '\n');
   62.13  	}
   62.14  
   62.15 @@ -53,10 +52,8 @@ int show_interrupts(struct seq_file *p, 
   62.16  #ifndef CONFIG_SMP
   62.17  		seq_printf(p, "%10u ", kstat_irqs(i));
   62.18  #else
   62.19 -		for (j=0; j<NR_CPUS; j++)
   62.20 -			if (cpu_online(j))
   62.21 -			seq_printf(p, "%10u ",
   62.22 -				kstat_cpu(j).irqs[i]);
   62.23 +		for_each_online_cpu(j)
   62.24 +			seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
   62.25  #endif
   62.26  		seq_printf(p, " %14s", irq_desc[i].handler->typename);
   62.27  
   62.28 @@ -68,15 +65,13 @@ skip:
   62.29  		spin_unlock_irqrestore(&irq_desc[i].lock, flags);
   62.30  	} else if (i == NR_IRQS) {
   62.31  		seq_printf(p, "NMI: ");
   62.32 -		for (j = 0; j < NR_CPUS; j++)
   62.33 -			if (cpu_online(j))
   62.34 -				seq_printf(p, "%10u ", cpu_pda(j)->__nmi_count);
   62.35 +		for_each_online_cpu(j)
   62.36 +			seq_printf(p, "%10u ", cpu_pda(j)->__nmi_count);
   62.37  		seq_putc(p, '\n');
   62.38  #ifdef CONFIG_X86_LOCAL_APIC
   62.39  		seq_printf(p, "LOC: ");
   62.40 -		for (j = 0; j < NR_CPUS; j++)
   62.41 -			if (cpu_online(j))
   62.42 -				seq_printf(p, "%10u ", cpu_pda(j)->apic_timer_irqs);
   62.43 +		for_each_online_cpu(j)
   62.44 +			seq_printf(p, "%10u ", cpu_pda(j)->apic_timer_irqs);
   62.45  		seq_putc(p, '\n');
   62.46  #endif
   62.47  		seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count));
    63.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/mpparse-xen.c	Tue Jan 09 10:50:46 2007 +0000
    63.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/mpparse-xen.c	Fri Jan 12 14:30:49 2007 +0000
    63.3 @@ -107,11 +107,11 @@ static int __init mpf_checksum(unsigned 
    63.4  }
    63.5  
    63.6  #ifndef CONFIG_XEN
    63.7 -static void __init MP_processor_info (struct mpc_config_processor *m)
    63.8 +static void __cpuinit MP_processor_info (struct mpc_config_processor *m)
    63.9  {
   63.10  	int cpu;
   63.11  	unsigned char ver;
   63.12 -	static int found_bsp=0;
   63.13 +	cpumask_t tmp_map;
   63.14  
   63.15  	if (!(m->mpc_cpuflag & CPU_ENABLED)) {
   63.16  		disabled_cpus++;
   63.17 @@ -134,8 +134,10 @@ static void __init MP_processor_info (st
   63.18  		return;
   63.19  	}
   63.20  
   63.21 -	cpu = num_processors++;
   63.22 -	
   63.23 +	num_processors++;
   63.24 +	cpus_complement(tmp_map, cpu_present_map);
   63.25 +	cpu = first_cpu(tmp_map);
   63.26 +
   63.27  #if MAX_APICS < 255	
   63.28  	if ((int)m->mpc_apicid > MAX_APICS) {
   63.29  		printk(KERN_ERR "Processor #%d INVALID. (Max ID: %d).\n",
   63.30 @@ -161,12 +163,7 @@ static void __init MP_processor_info (st
   63.31   		 * entry is BSP, and so on.
   63.32   		 */
   63.33  		cpu = 0;
   63.34 -
   63.35 - 		bios_cpu_apicid[0] = m->mpc_apicid;
   63.36 - 		x86_cpu_to_apicid[0] = m->mpc_apicid;
   63.37 - 		found_bsp = 1;
   63.38 - 	} else
   63.39 -		cpu = num_processors - found_bsp;
   63.40 + 	}
   63.41  	bios_cpu_apicid[cpu] = m->mpc_apicid;
   63.42  	x86_cpu_to_apicid[cpu] = m->mpc_apicid;
   63.43  
   63.44 @@ -697,7 +694,7 @@ void __init mp_register_lapic_address (
   63.45  }
   63.46  
   63.47  
   63.48 -void __init mp_register_lapic (
   63.49 +void __cpuinit mp_register_lapic (
   63.50  	u8			id, 
   63.51  	u8			enabled)
   63.52  {
   63.53 @@ -981,7 +978,17 @@ int mp_register_gsi(u32 gsi, int trigger
   63.54  		 */
   63.55  		int irq = gsi;
   63.56  		if (gsi < MAX_GSI_NUM) {
   63.57 -			if (gsi > 15)
   63.58 +			/*
   63.59 +			 * Retain the VIA chipset work-around (gsi > 15), but
   63.60 +			 * avoid a problem where the 8254 timer (IRQ0) is setup
   63.61 +			 * via an override (so it's not on pin 0 of the ioapic),
   63.62 +			 * and at the same time, the pin 0 interrupt is a PCI
   63.63 +			 * type.  The gsi > 15 test could cause these two pins
   63.64 +			 * to be shared as IRQ0, and they are not shareable.
   63.65 +			 * So test for this condition, and if necessary, avoid
   63.66 +			 * the pin collision.
   63.67 +			 */
   63.68 +			if (gsi > 15 || (gsi == 0 && !timer_uses_ioapic_pin_0))
   63.69  				gsi = pci_irq++;
   63.70  			/*
   63.71  			 * Don't assign IRQ used by ACPI SCI
    64.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/process-xen.c	Tue Jan 09 10:50:46 2007 +0000
    64.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/process-xen.c	Fri Jan 12 14:30:49 2007 +0000
    64.3 @@ -38,8 +38,8 @@
    64.4  #include <linux/ptrace.h>
    64.5  #include <linux/utsname.h>
    64.6  #include <linux/random.h>
    64.7 +#include <linux/notifier.h>
    64.8  #include <linux/kprobes.h>
    64.9 -#include <linux/notifier.h>
   64.10  
   64.11  #include <asm/uaccess.h>
   64.12  #include <asm/pgtable.h>
   64.13 @@ -75,24 +75,17 @@ EXPORT_SYMBOL(boot_option_idle_override)
   64.14  void (*pm_idle)(void);
   64.15  static DEFINE_PER_CPU(unsigned int, cpu_idle_state);
   64.16  
   64.17 -static struct notifier_block *idle_notifier;
   64.18 -static DEFINE_SPINLOCK(idle_notifier_lock);
   64.19 +static ATOMIC_NOTIFIER_HEAD(idle_notifier);
   64.20  
   64.21  void idle_notifier_register(struct notifier_block *n)
   64.22  {
   64.23 -	unsigned long flags;
   64.24 -	spin_lock_irqsave(&idle_notifier_lock, flags);
   64.25 -	notifier_chain_register(&idle_notifier, n);
   64.26 -	spin_unlock_irqrestore(&idle_notifier_lock, flags);
   64.27 +	atomic_notifier_chain_register(&idle_notifier, n);
   64.28  }
   64.29  EXPORT_SYMBOL_GPL(idle_notifier_register);
   64.30  
   64.31  void idle_notifier_unregister(struct notifier_block *n)
   64.32  {
   64.33 -	unsigned long flags;
   64.34 -	spin_lock_irqsave(&idle_notifier_lock, flags);
   64.35 -	notifier_chain_unregister(&idle_notifier, n);
   64.36 -	spin_unlock_irqrestore(&idle_notifier_lock, flags);
   64.37 +	atomic_notifier_chain_unregister(&idle_notifier, n);
   64.38  }
   64.39  EXPORT_SYMBOL(idle_notifier_unregister);
   64.40  
   64.41 @@ -102,13 +95,13 @@ static DEFINE_PER_CPU(enum idle_state, i
   64.42  void enter_idle(void)
   64.43  {
   64.44  	__get_cpu_var(idle_state) = CPU_IDLE;
   64.45 -	notifier_call_chain(&idle_notifier, IDLE_START, NULL);
   64.46 +	atomic_notifier_call_chain(&idle_notifier, IDLE_START, NULL);
   64.47  }
   64.48  
   64.49  static void __exit_idle(void)
   64.50  {
   64.51  	__get_cpu_var(idle_state) = CPU_NOT_IDLE;
   64.52 -	notifier_call_chain(&idle_notifier, IDLE_END, NULL);
   64.53 +	atomic_notifier_call_chain(&idle_notifier, IDLE_END, NULL);
   64.54  }
   64.55  
   64.56  /* Called from interrupts to signify idle end */
   64.57 @@ -309,13 +302,6 @@ void exit_thread(void)
   64.58  	struct task_struct *me = current;
   64.59  	struct thread_struct *t = &me->thread;
   64.60  
   64.61 -	/*
   64.62 -	 * Remove function-return probe instances associated with this task
   64.63 -	 * and put them back on the free list. Do not insert an exit probe for
   64.64 -	 * this function, it will be disabled by kprobe_flush_task if you do.
   64.65 -	 */
   64.66 -	kprobe_flush_task(me);
   64.67 -
   64.68  	if (me->thread.io_bitmap_ptr) { 
   64.69  #ifndef CONFIG_X86_NO_TSS
   64.70  		struct tss_struct *tss = &per_cpu(init_tss, get_cpu());
   64.71 @@ -512,7 +498,7 @@ static inline void __save_init_fpu( stru
   64.72  	 * multicall to indicate FPU task switch, rather than
   64.73  	 * synchronously trapping to Xen.
   64.74  	 * This must be here to ensure both math_state_restore() and
   64.75 -	 * kernel_fpu_begin() work consistently.
   64.76 +	 * kernel_fpu_begin() work consistently. 
   64.77  	 * The AMD workaround requires it to be after DS reload, or
   64.78  	 * after DS has been cleared, which we do in __prepare_arch_switch.
   64.79  	 */
   64.80 @@ -591,7 +577,7 @@ static inline void __save_init_fpu( stru
   64.81  		HYPERVISOR_set_segment_base(SEGBASE_GS_USER, next->gs); 
   64.82  
   64.83  	/* 
   64.84 -	 * Switch the PDA context.
   64.85 +	 * Switch the PDA and FPU contexts.
   64.86  	 */
   64.87  	prev->userrsp = read_pda(oldrsp); 
   64.88  	write_pda(oldrsp, next->userrsp); 
   64.89 @@ -781,10 +767,16 @@ long do_arch_prctl(struct task_struct *t
   64.90  	}
   64.91  	case ARCH_GET_GS: { 
   64.92  		unsigned long base;
   64.93 +		unsigned gsindex;
   64.94  		if (task->thread.gsindex == GS_TLS_SEL)
   64.95  			base = read_32bit_tls(task, GS_TLS);
   64.96 -		else if (doit)
   64.97 -			rdmsrl(MSR_KERNEL_GS_BASE, base);
   64.98 +		else if (doit) {
   64.99 + 			asm("movl %%gs,%0" : "=r" (gsindex));
  64.100 +			if (gsindex)
  64.101 +				rdmsrl(MSR_KERNEL_GS_BASE, base);
  64.102 +			else
  64.103 +				base = task->thread.gs;
  64.104 +		}
  64.105  		else
  64.106  			base = task->thread.gs;
  64.107  		ret = put_user(base, (unsigned long __user *)addr); 
    65.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c	Tue Jan 09 10:50:46 2007 +0000
    65.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c	Fri Jan 12 14:30:49 2007 +0000
    65.3 @@ -46,6 +46,7 @@
    65.4  #include <linux/cpufreq.h>
    65.5  #include <linux/dmi.h>
    65.6  #include <linux/dma-mapping.h>
    65.7 +#include <linux/ctype.h>
    65.8  
    65.9  #include <asm/mtrr.h>
   65.10  #include <asm/uaccess.h>
   65.11 @@ -67,6 +68,7 @@
   65.12  #include <asm/swiotlb.h>
   65.13  #include <asm/sections.h>
   65.14  #include <asm/gart-mapping.h>
   65.15 +#include <asm/dmi.h>
   65.16  #ifdef CONFIG_XEN
   65.17  #include <linux/percpu.h>
   65.18  #include <xen/interface/physdev.h>
   65.19 @@ -137,6 +139,12 @@ int bootloader_type;
   65.20  
   65.21  unsigned long saved_video_mode;
   65.22  
   65.23 +/* 
   65.24 + * Early DMI memory
   65.25 + */
   65.26 +int dmi_alloc_index;
   65.27 +char dmi_alloc_data[DMI_MAX_DATA];
   65.28 +
   65.29  /*
   65.30   * Setup options
   65.31   */
   65.32 @@ -325,6 +333,13 @@ static void __init probe_roms(void)
   65.33  	}
   65.34  }
   65.35  
   65.36 +/* Check for full argument with no trailing characters */
   65.37 +static int fullarg(char *p, char *arg)
   65.38 +{
   65.39 +	int l = strlen(arg);
   65.40 +	return !memcmp(p, arg, l) && (p[l] == 0 || isspace(p[l]));
   65.41 +}
   65.42 +
   65.43  static __init void parse_cmdline_early (char ** cmdline_p)
   65.44  {
   65.45  	char c = ' ', *to = command_line, *from = COMMAND_LINE;
   65.46 @@ -348,10 +363,10 @@ static __init void parse_cmdline_early (
   65.47  #endif
   65.48  #ifdef CONFIG_ACPI
   65.49  		/* "acpi=off" disables both ACPI table parsing and interpreter init */
   65.50 -		if (!memcmp(from, "acpi=off", 8))
   65.51 +		if (fullarg(from,"acpi=off"))
   65.52  			disable_acpi();
   65.53  
   65.54 -		if (!memcmp(from, "acpi=force", 10)) { 
   65.55 +		if (fullarg(from, "acpi=force")) { 
   65.56  			/* add later when we do DMI horrors: */
   65.57  			acpi_force = 1;
   65.58  			acpi_disabled = 0;
   65.59 @@ -359,48 +374,45 @@ static __init void parse_cmdline_early (
   65.60  
   65.61  		/* acpi=ht just means: do ACPI MADT parsing 
   65.62  		   at bootup, but don't enable the full ACPI interpreter */
   65.63 -		if (!memcmp(from, "acpi=ht", 7)) { 
   65.64 +		if (fullarg(from, "acpi=ht")) { 
   65.65  			if (!acpi_force)
   65.66  				disable_acpi();
   65.67  			acpi_ht = 1; 
   65.68  		}
   65.69 -                else if (!memcmp(from, "pci=noacpi", 10)) 
   65.70 +                else if (fullarg(from, "pci=noacpi")) 
   65.71  			acpi_disable_pci();
   65.72 -		else if (!memcmp(from, "acpi=noirq", 10))
   65.73 +		else if (fullarg(from, "acpi=noirq"))
   65.74  			acpi_noirq_set();
   65.75  
   65.76 -		else if (!memcmp(from, "acpi_sci=edge", 13))
   65.77 +		else if (fullarg(from, "acpi_sci=edge"))
   65.78  			acpi_sci_flags.trigger =  1;
   65.79 -		else if (!memcmp(from, "acpi_sci=level", 14))
   65.80 +		else if (fullarg(from, "acpi_sci=level"))
   65.81  			acpi_sci_flags.trigger = 3;
   65.82 -		else if (!memcmp(from, "acpi_sci=high", 13))
   65.83 +		else if (fullarg(from, "acpi_sci=high"))
   65.84  			acpi_sci_flags.polarity = 1;
   65.85 -		else if (!memcmp(from, "acpi_sci=low", 12))
   65.86 +		else if (fullarg(from, "acpi_sci=low"))
   65.87  			acpi_sci_flags.polarity = 3;
   65.88  
   65.89  		/* acpi=strict disables out-of-spec workarounds */
   65.90 -		else if (!memcmp(from, "acpi=strict", 11)) {
   65.91 +		else if (fullarg(from, "acpi=strict")) {
   65.92  			acpi_strict = 1;
   65.93  		}
   65.94  #ifdef CONFIG_X86_IO_APIC
   65.95 -		else if (!memcmp(from, "acpi_skip_timer_override", 24))
   65.96 +		else if (fullarg(from, "acpi_skip_timer_override"))
   65.97  			acpi_skip_timer_override = 1;
   65.98  #endif
   65.99  #endif
  65.100  
  65.101  #ifndef CONFIG_XEN
  65.102 -		if (!memcmp(from, "nolapic", 7) ||
  65.103 -		    !memcmp(from, "disableapic", 11))
  65.104 +		if (fullarg(from, "nolapic") || fullarg(from, "disableapic")) {
  65.105 +			clear_bit(X86_FEATURE_APIC, boot_cpu_data.x86_capability);
  65.106  			disable_apic = 1;
  65.107 +		}
  65.108  
  65.109 -		/* Don't confuse with noapictimer */
  65.110 -		if (!memcmp(from, "noapic", 6) &&
  65.111 -			(from[6] == ' ' || from[6] == 0))
  65.112 +		if (fullarg(from, "noapic"))
  65.113  			skip_ioapic_setup = 1;
  65.114  
  65.115 -		/* Make sure to not confuse with apic= */
  65.116 -		if (!memcmp(from, "apic", 4) &&
  65.117 -			(from[4] == ' ' || from[4] == 0)) {
  65.118 +		if (fullarg(from,"apic")) {
  65.119  			skip_ioapic_setup = 0;
  65.120  			ioapic_force = 1;
  65.121  		}
  65.122 @@ -440,7 +452,7 @@ static __init void parse_cmdline_early (
  65.123  			iommu_setup(from+6); 
  65.124  		}
  65.125  
  65.126 -		if (!memcmp(from,"oops=panic", 10))
  65.127 +		if (fullarg(from,"oops=panic"))
  65.128  			panic_on_oops = 1;
  65.129  
  65.130  		if (!memcmp(from, "noexec=", 7))
  65.131 @@ -591,7 +603,7 @@ void __init alternative_instructions(voi
  65.132  static int __init noreplacement_setup(char *s)
  65.133  { 
  65.134       no_replacement = 1; 
  65.135 -     return 0; 
  65.136 +     return 1;
  65.137  } 
  65.138  
  65.139  __setup("noreplacement", noreplacement_setup); 
  65.140 @@ -621,17 +633,28 @@ static inline void copy_edd(void)
  65.141  
  65.142  #ifndef CONFIG_XEN
  65.143  #define EBDA_ADDR_POINTER 0x40E
  65.144 -static void __init reserve_ebda_region(void)
  65.145 +
  65.146 +unsigned __initdata ebda_addr;
  65.147 +unsigned __initdata ebda_size;
  65.148 +
  65.149 +static void discover_ebda(void)
  65.150  {
  65.151 -	unsigned int addr;
  65.152 -	/** 
  65.153 +	/*
  65.154  	 * there is a real-mode segmented pointer pointing to the 
  65.155  	 * 4K EBDA area at 0x40E
  65.156  	 */
  65.157 -	addr = *(unsigned short *)phys_to_virt(EBDA_ADDR_POINTER);
  65.158 -	addr <<= 4;
  65.159 -	if (addr)
  65.160 -		reserve_bootmem_generic(addr, PAGE_SIZE);
  65.161 +	ebda_addr = *(unsigned short *)EBDA_ADDR_POINTER;
  65.162 +	ebda_addr <<= 4;
  65.163 +
  65.164 +	ebda_size = *(unsigned short *)(unsigned long)ebda_addr;
  65.165 +
  65.166 +	/* Round EBDA up to pages */
  65.167 +	if (ebda_size == 0)
  65.168 +		ebda_size = 1;
  65.169 +	ebda_size <<= 10;
  65.170 +	ebda_size = round_up(ebda_size + (ebda_addr & ~PAGE_MASK), PAGE_SIZE);
  65.171 +	if (ebda_size > 64*1024)
  65.172 +		ebda_size = 64*1024;
  65.173  }
  65.174  #endif
  65.175  
  65.176 @@ -642,7 +665,7 @@ void __init setup_arch(char **cmdline_p)
  65.177  
  65.178  #ifdef CONFIG_XEN
  65.179  	/* Register a call for panic conditions. */
  65.180 -	notifier_chain_register(&panic_notifier_list, &xen_panic_block);
  65.181 +	atomic_notifier_chain_register(&panic_notifier_list, &xen_panic_block);
  65.182  
  65.183   	ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); 
  65.184  	kernel_end = 0;		/* dummy */
  65.185 @@ -726,11 +749,18 @@ void __init setup_arch(char **cmdline_p)
  65.186  	 * we are rounding upwards:
  65.187  	 */
  65.188  	end_pfn = e820_end_of_ram();
  65.189 +	num_physpages = end_pfn;		/* for pfn_valid */
  65.190  
  65.191  	check_efer();
  65.192  
  65.193 +#ifndef CONFIG_XEN
  65.194 +	discover_ebda();
  65.195 +#endif
  65.196 +
  65.197  	init_memory_mapping(0, (end_pfn_map << PAGE_SHIFT));
  65.198  
  65.199 +	/* dmi_scan_machine(); */
  65.200 +
  65.201  #ifdef CONFIG_ACPI_NUMA
  65.202  	/*
  65.203  	 * Parse SRAT to discover nodes.
  65.204 @@ -763,7 +793,8 @@ void __init setup_arch(char **cmdline_p)
  65.205  	reserve_bootmem_generic(0, PAGE_SIZE);
  65.206  
  65.207  	/* reserve ebda region */
  65.208 -	reserve_ebda_region();
  65.209 +	if (ebda_addr)
  65.210 +		reserve_bootmem_generic(ebda_addr, ebda_size);
  65.211  #endif
  65.212  
  65.213  #ifdef CONFIG_SMP
  65.214 @@ -898,6 +929,12 @@ void __init setup_arch(char **cmdline_p)
  65.215  
  65.216  	zap_low_mappings(0);
  65.217  
  65.218 +	/*
  65.219 +	 * set this early, so we dont allocate cpu0
  65.220 +	 * if MADT list doesnt list BSP first
  65.221 +	 * mpparse.c/MP_processor_info() allocates logical cpu numbers.
  65.222 +	 */
  65.223 +	cpu_set(0, cpu_present_map);
  65.224  #ifdef CONFIG_ACPI
  65.225  	/*
  65.226  	 * Initialize the ACPI boot-time table parser (gets the RSDP and SDT).
  65.227 @@ -1092,7 +1129,7 @@ static void __init amd_detect_cmp(struct
  65.228  	unsigned bits;
  65.229  #ifdef CONFIG_NUMA
  65.230  	int node = 0;
  65.231 -	unsigned apicid = phys_proc_id[cpu];
  65.232 +	unsigned apicid = hard_smp_processor_id();
  65.233  #endif
  65.234  
  65.235  	bits = 0;
  65.236 @@ -1102,7 +1139,7 @@ static void __init amd_detect_cmp(struct
  65.237  	/* Low order bits define the core id (index of core in socket) */
  65.238  	cpu_core_id[cpu] = phys_proc_id[cpu] & ((1 << bits)-1);
  65.239  	/* Convert the APIC ID into the socket ID */
  65.240 -	phys_proc_id[cpu] >>= bits;
  65.241 +	phys_proc_id[cpu] = phys_pkg_id(bits);
  65.242  
  65.243  #ifdef CONFIG_NUMA
  65.244    	node = phys_proc_id[cpu];
  65.245 @@ -1128,8 +1165,8 @@ static void __init amd_detect_cmp(struct
  65.246   	}
  65.247  	numa_set_node(cpu, node);
  65.248  
  65.249 -  	printk(KERN_INFO "CPU %d(%d) -> Node %d -> Core %d\n",
  65.250 -  			cpu, c->x86_max_cores, node, cpu_core_id[cpu]);
  65.251 +  	printk(KERN_INFO "CPU %d/%x(%d) -> Node %d -> Core %d\n",
  65.252 +  			cpu, apicid, c->x86_max_cores, node, cpu_core_id[cpu]);
  65.253  #endif
  65.254  #endif
  65.255  }
  65.256 @@ -1187,8 +1224,6 @@ static int __init init_amd(struct cpuinf
  65.257  
  65.258  	if (c->extended_cpuid_level >= 0x80000008) {
  65.259  		c->x86_max_cores = (cpuid_ecx(0x80000008) & 0xff) + 1;
  65.260 -		if (c->x86_max_cores & (c->x86_max_cores - 1))
  65.261 -			c->x86_max_cores = 1;
  65.262  
  65.263  		amd_detect_cmp(c);
  65.264  	}
  65.265 @@ -1205,7 +1240,6 @@ static void __cpuinit detect_ht(struct c
  65.266  
  65.267  	cpuid(1, &eax, &ebx, &ecx, &edx);
  65.268  
  65.269 -	c->apicid = phys_pkg_id(0);
  65.270  
  65.271  	if (!cpu_has(c, X86_FEATURE_HT) || cpu_has(c, X86_FEATURE_CMP_LEGACY))
  65.272  		return;
  65.273 @@ -1275,7 +1309,7 @@ static void srat_detect_node(void)
  65.274  	   for now. */
  65.275  	node = apicid_to_node[hard_smp_processor_id()];
  65.276  	if (node == NUMA_NO_NODE)
  65.277 -		node = 0;
  65.278 +		node = first_node(node_online_map);
  65.279  	numa_set_node(cpu, node);
  65.280  
  65.281  	if (acpi_numa > 0)
  65.282 @@ -1414,6 +1448,10 @@ void __cpuinit identify_cpu(struct cpuin
  65.283  			c->x86_capability[2] = cpuid_edx(0x80860001);
  65.284  	}
  65.285  
  65.286 +#ifdef CONFIG_X86_XEN_GENAPIC
  65.287 +	c->apicid = phys_pkg_id(0);
  65.288 +#endif
  65.289 +
  65.290  	/*
  65.291  	 * Vendor-specific initialization.  In this section we
  65.292  	 * canonicalize the feature flags, meaning if there are
  65.293 @@ -1521,7 +1559,7 @@ static int show_cpuinfo(struct seq_file 
  65.294  		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
  65.295  
  65.296  		/* Intel-defined (#2) */
  65.297 -		"pni", NULL, NULL, "monitor", "ds_cpl", "vmx", NULL, "est",
  65.298 +		"pni", NULL, NULL, "monitor", "ds_cpl", "vmx", "smx", "est",
  65.299  		"tm2", NULL, "cid", NULL, NULL, "cx16", "xtpr", NULL,
  65.300  		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
  65.301  		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
  65.302 @@ -1604,8 +1642,7 @@ static int show_cpuinfo(struct seq_file 
  65.303  	{ 
  65.304  		int i; 
  65.305  		for ( i = 0 ; i < 32*NCAPINTS ; i++ )
  65.306 -			if ( test_bit(i, &c->x86_capability) &&
  65.307 -			     x86_cap_flags[i] != NULL )
  65.308 +			if (cpu_has(c, i) && x86_cap_flags[i] != NULL)
  65.309  				seq_printf(m, " %s", x86_cap_flags[i]);
  65.310  	}
  65.311  		
  65.312 @@ -1670,3 +1707,22 @@ static int __init run_dmi_scan(void)
  65.313  }
  65.314  core_initcall(run_dmi_scan);
  65.315  
  65.316 +#ifdef CONFIG_INPUT_PCSPKR
  65.317 +#include <linux/platform_device.h>
  65.318 +static __init int add_pcspkr(void)
  65.319 +{
  65.320 +	struct platform_device *pd;
  65.321 +	int ret;
  65.322 +
  65.323 +	pd = platform_device_alloc("pcspkr", -1);
  65.324 +	if (!pd)
  65.325 +		return -ENOMEM;
  65.326 +
  65.327 +	ret = platform_device_add(pd);
  65.328 +	if (ret)
  65.329 +		platform_device_put(pd);
  65.330 +
  65.331 +	return ret;
  65.332 +}
  65.333 +device_initcall(add_pcspkr);
  65.334 +#endif
    66.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/setup64-xen.c	Tue Jan 09 10:50:46 2007 +0000
    66.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/setup64-xen.c	Fri Jan 12 14:30:49 2007 +0000
    66.3 @@ -41,7 +41,7 @@ struct x8664_pda *_cpu_pda[NR_CPUS] __re
    66.4  struct x8664_pda boot_cpu_pda[NR_CPUS] __cacheline_aligned;
    66.5  
    66.6  #ifndef CONFIG_X86_NO_IDT
    66.7 -struct desc_ptr idt_descr = { 256 * 16, (unsigned long) idt_table }; 
    66.8 +struct desc_ptr idt_descr = { 256 * 16 - 1, (unsigned long) idt_table }; 
    66.9  #endif
   66.10  
   66.11  char boot_cpu_stack[IRQSTACKSIZE] __attribute__((section(".bss.page_aligned")));
   66.12 @@ -64,11 +64,11 @@ int __init nonx_setup(char *str)
   66.13  		do_not_nx = 1;
   66.14  		__supported_pte_mask &= ~_PAGE_NX;
   66.15          }
   66.16 -	return 0;
   66.17 +	return 1;
   66.18  } 
   66.19  __setup("noexec=", nonx_setup);	/* parsed early actually */
   66.20  
   66.21 -int force_personality32 = READ_IMPLIES_EXEC;
   66.22 +int force_personality32 = 0; 
   66.23  
   66.24  /* noexec32=on|off
   66.25  Control non executable heap for 32bit processes.
   66.26 @@ -83,7 +83,7 @@ static int __init nonx32_setup(char *str
   66.27  		force_personality32 &= ~READ_IMPLIES_EXEC;
   66.28  	else if (!strcmp(str, "off"))
   66.29  		force_personality32 |= READ_IMPLIES_EXEC;
   66.30 -	return 0;
   66.31 +	return 1;
   66.32  }
   66.33  __setup("noexec32=", nonx32_setup);
   66.34  
   66.35 @@ -311,7 +311,7 @@ void __cpuinit cpu_init (void)
   66.36  		switch (v + 1) {
   66.37  #if DEBUG_STKSZ > EXCEPTION_STKSZ
   66.38  		case DEBUG_STACK:
   66.39 -			cpu_pda[cpu].debugstack = (unsigned long)estacks;
   66.40 +			cpu_pda(cpu)->debugstack = (unsigned long)estacks;
   66.41  			estacks += DEBUG_STKSZ;
   66.42  			break;
   66.43  #endif
   66.44 @@ -349,12 +349,12 @@ void __cpuinit cpu_init (void)
   66.45  	 * Clear all 6 debug registers:
   66.46  	 */
   66.47  
   66.48 -	set_debug(0UL, 0);
   66.49 -	set_debug(0UL, 1);
   66.50 -	set_debug(0UL, 2);
   66.51 -	set_debug(0UL, 3);
   66.52 -	set_debug(0UL, 6);
   66.53 -	set_debug(0UL, 7);
   66.54 +	set_debugreg(0UL, 0);
   66.55 +	set_debugreg(0UL, 1);
   66.56 +	set_debugreg(0UL, 2);
   66.57 +	set_debugreg(0UL, 3);
   66.58 +	set_debugreg(0UL, 6);
   66.59 +	set_debugreg(0UL, 7);
   66.60  
   66.61  	fpu_init(); 
   66.62  }
    67.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/smp-xen.c	Tue Jan 09 10:50:46 2007 +0000
    67.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/smp-xen.c	Fri Jan 12 14:30:49 2007 +0000
    67.3 @@ -80,7 +80,7 @@ static inline void leave_mm(unsigned lon
    67.4  {
    67.5  	if (read_pda(mmu_state) == TLBSTATE_OK)
    67.6  		BUG();
    67.7 -	clear_bit(cpu, &read_pda(active_mm)->cpu_vm_mask);
    67.8 +	cpu_clear(cpu, read_pda(active_mm)->cpu_vm_mask);
    67.9  	load_cr3(swapper_pg_dir);
   67.10  }
   67.11  
   67.12 @@ -91,7 +91,7 @@ static inline void leave_mm(unsigned lon
   67.13   * [cpu0: the cpu that switches]
   67.14   * 1) switch_mm() either 1a) or 1b)
   67.15   * 1a) thread switch to a different mm
   67.16 - * 1a1) clear_bit(cpu, &old_mm->cpu_vm_mask);
   67.17 + * 1a1) cpu_clear(cpu, old_mm->cpu_vm_mask);
   67.18   * 	Stop ipi delivery for the old mm. This is not synchronized with
   67.19   * 	the other cpus, but smp_invalidate_interrupt ignore flush ipis
   67.20   * 	for the wrong mm, and in the worst case we perform a superfluous
   67.21 @@ -101,7 +101,7 @@ static inline void leave_mm(unsigned lon
   67.22   *	was in lazy tlb mode.
   67.23   * 1a3) update cpu active_mm
   67.24   * 	Now cpu0 accepts tlb flushes for the new mm.
   67.25 - * 1a4) set_bit(cpu, &new_mm->cpu_vm_mask);
   67.26 + * 1a4) cpu_set(cpu, new_mm->cpu_vm_mask);
   67.27   * 	Now the other cpus will send tlb flush ipis.
   67.28   * 1a4) change cr3.
   67.29   * 1b) thread switch without mm change
    68.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/traps-xen.c	Tue Jan 09 10:50:46 2007 +0000
    68.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/traps-xen.c	Fri Jan 12 14:30:49 2007 +0000
    68.3 @@ -48,10 +48,6 @@
    68.4  #include <asm/proto.h>
    68.5  #include <asm/nmi.h>
    68.6  
    68.7 -#ifndef CONFIG_X86_NO_IDT
    68.8 -extern struct gate_struct idt_table[256]; 
    68.9 -#endif
   68.10 -
   68.11  asmlinkage void divide_error(void);
   68.12  asmlinkage void debug(void);
   68.13  asmlinkage void nmi(void);
   68.14 @@ -74,18 +70,20 @@ asmlinkage void alignment_check(void);
   68.15  asmlinkage void machine_check(void);
   68.16  asmlinkage void spurious_interrupt_bug(void);
   68.17  
   68.18 -struct notifier_block *die_chain;
   68.19 -static DEFINE_SPINLOCK(die_notifier_lock);
   68.20 +ATOMIC_NOTIFIER_HEAD(die_chain);
   68.21  
   68.22  int register_die_notifier(struct notifier_block *nb)
   68.23  {
   68.24 -	int err = 0;
   68.25 -	unsigned long flags;
   68.26 -	spin_lock_irqsave(&die_notifier_lock, flags);
   68.27 -	err = notifier_chain_register(&die_chain, nb);
   68.28 -	spin_unlock_irqrestore(&die_notifier_lock, flags);
   68.29 -	return err;
   68.30 +	vmalloc_sync_all();
   68.31 +	return atomic_notifier_chain_register(&die_chain, nb);
   68.32  }
   68.33 +EXPORT_SYMBOL(register_die_notifier);
   68.34 +
   68.35 +int unregister_die_notifier(struct notifier_block *nb)
   68.36 +{
   68.37 +	return atomic_notifier_chain_unregister(&die_chain, nb);
   68.38 +}
   68.39 +EXPORT_SYMBOL(unregister_die_notifier);
   68.40  
   68.41  static inline void conditional_sti(struct pt_regs *regs)
   68.42  {
   68.43 @@ -104,6 +102,8 @@ static inline void preempt_conditional_c
   68.44  {
   68.45  	if (regs->eflags & X86_EFLAGS_IF)
   68.46  		local_irq_disable();
   68.47 +	/* Make sure to not schedule here because we could be running
   68.48 +	   on an exception stack. */
   68.49  	preempt_enable_no_resched();
   68.50  }
   68.51  
   68.52 @@ -125,7 +125,7 @@ int printk_address(unsigned long address
   68.53  	if (!modname) 
   68.54  		modname = delim = ""; 		
   68.55          return printk("<%016lx>{%s%s%s%s%+ld}",
   68.56 -		      address,delim,modname,delim,symname,offset); 
   68.57 +		      address, delim, modname, delim, symname, offset); 
   68.58  } 
   68.59  #else
   68.60  int printk_address(unsigned long address)
   68.61 @@ -339,13 +339,12 @@ void show_registers(struct pt_regs *regs
   68.62  		show_stack(NULL, (unsigned long*)rsp);
   68.63  
   68.64  		printk("\nCode: ");
   68.65 -		if(regs->rip < PAGE_OFFSET)
   68.66 +		if (regs->rip < PAGE_OFFSET)
   68.67  			goto bad;
   68.68  
   68.69 -		for(i=0;i<20;i++)
   68.70 -		{
   68.71 +		for (i=0; i<20; i++) {
   68.72  			unsigned char c;
   68.73 -			if(__get_user(c, &((unsigned char*)regs->rip)[i])) {
   68.74 +			if (__get_user(c, &((unsigned char*)regs->rip)[i])) {
   68.75  bad:
   68.76  				printk(" Bad RIP value.");
   68.77  				break;
   68.78 @@ -390,6 +389,7 @@ void out_of_line_bug(void)
   68.79  
   68.80  static DEFINE_SPINLOCK(die_lock);
   68.81  static int die_owner = -1;
   68.82 +static unsigned int die_nest_count;
   68.83  
   68.84  unsigned __kprobes long oops_begin(void)
   68.85  {
   68.86 @@ -404,6 +404,7 @@ unsigned __kprobes long oops_begin(void)
   68.87  		else
   68.88  			spin_lock(&die_lock);
   68.89  	}
   68.90 +	die_nest_count++;
   68.91  	die_owner = cpu;
   68.92  	console_verbose();
   68.93  	bust_spinlocks(1);
   68.94 @@ -414,7 +415,13 @@ void __kprobes oops_end(unsigned long fl
   68.95  { 
   68.96  	die_owner = -1;
   68.97  	bust_spinlocks(0);
   68.98 -	spin_unlock_irqrestore(&die_lock, flags);
   68.99 +	die_nest_count--;
  68.100 +	if (die_nest_count)
  68.101 +		/* We still own the lock */
  68.102 +		local_irq_restore(flags);
  68.103 +	else
  68.104 +		/* Nest count reaches zero, release the lock. */
  68.105 +		spin_unlock_irqrestore(&die_lock, flags);
  68.106  	if (panic_on_oops)
  68.107  		panic("Oops");
  68.108  }
  68.109 @@ -470,6 +477,8 @@ void __kprobes die_nmi(char *str, struct
  68.110  		panic("nmi watchdog");
  68.111  	printk("console shuts up ...\n");
  68.112  	oops_end(flags);
  68.113 +	nmi_exit();
  68.114 +	local_irq_enable();
  68.115  	do_exit(SIGSEGV);
  68.116  }
  68.117  #endif
  68.118 @@ -480,8 +489,6 @@ static void __kprobes do_trap(int trapnr
  68.119  {
  68.120  	struct task_struct *tsk = current;
  68.121  
  68.122 -	conditional_sti(regs);
  68.123 -
  68.124  	tsk->thread.error_code = error_code;
  68.125  	tsk->thread.trap_no = trapnr;
  68.126  
  68.127 @@ -490,7 +497,7 @@ static void __kprobes do_trap(int trapnr
  68.128  			printk(KERN_INFO
  68.129  			       "%s[%d] trap %s rip:%lx rsp:%lx error:%lx\n",
  68.130  			       tsk->comm, tsk->pid, str,
  68.131 -			       regs->rip,regs->rsp,error_code); 
  68.132 +			       regs->rip, regs->rsp, error_code); 
  68.133  
  68.134  		if (info)
  68.135  			force_sig_info(signr, info, tsk);
  68.136 @@ -504,9 +511,9 @@ static void __kprobes do_trap(int trapnr
  68.137  	{	     
  68.138  		const struct exception_table_entry *fixup;
  68.139  		fixup = search_exception_tables(regs->rip);
  68.140 -		if (fixup) {
  68.141 +		if (fixup)
  68.142  			regs->rip = fixup->fixup;
  68.143 -		} else	
  68.144 +		else	
  68.145  			die(str, regs, error_code);
  68.146  		return;
  68.147  	}
  68.148 @@ -518,6 +525,7 @@ asmlinkage void do_##name(struct pt_regs
  68.149  	if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) \
  68.150  							== NOTIFY_STOP) \
  68.151  		return; \
  68.152 +	conditional_sti(regs);						\
  68.153  	do_trap(trapnr, signr, str, regs, error_code, NULL); \
  68.154  }
  68.155  
  68.156 @@ -532,6 +540,7 @@ asmlinkage void do_##name(struct pt_regs
  68.157  	if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) \
  68.158  							== NOTIFY_STOP) \
  68.159  		return; \
  68.160 +	conditional_sti(regs);						\
  68.161  	do_trap(trapnr, signr, str, regs, error_code, &info); \
  68.162  }
  68.163  
  68.164 @@ -545,7 +554,17 @@ DO_ERROR(10, SIGSEGV, "invalid TSS", inv
  68.165  DO_ERROR(11, SIGBUS,  "segment not present", segment_not_present)
  68.166  DO_ERROR_INFO(17, SIGBUS, "alignment check", alignment_check, BUS_ADRALN, 0)
  68.167  DO_ERROR(18, SIGSEGV, "reserved", reserved)
  68.168 -DO_ERROR(12, SIGBUS,  "stack segment", stack_segment)
  68.169 +
  68.170 +/* Runs on IST stack */
  68.171 +asmlinkage void do_stack_segment(struct pt_regs *regs, long error_code)
  68.172 +{
  68.173 +	if (notify_die(DIE_TRAP, "stack segment", regs, error_code,
  68.174 +			12, SIGBUS) == NOTIFY_STOP)
  68.175 +		return;
  68.176 +	preempt_conditional_sti(regs);
  68.177 +	do_trap(12, SIGBUS, "stack segment", regs, error_code, NULL);
  68.178 +	preempt_conditional_cli(regs);
  68.179 +}
  68.180  
  68.181  asmlinkage void do_double_fault(struct pt_regs * regs, long error_code)
  68.182  {
  68.183 @@ -579,7 +598,7 @@ asmlinkage void __kprobes do_general_pro
  68.184  			printk(KERN_INFO
  68.185  		       "%s[%d] general protection rip:%lx rsp:%lx error:%lx\n",
  68.186  			       tsk->comm, tsk->pid,
  68.187 -			       regs->rip,regs->rsp,error_code); 
  68.188 +			       regs->rip, regs->rsp, error_code); 
  68.189  
  68.190  		force_sig(SIGSEGV, tsk);
  68.191  		return;
  68.192 @@ -683,8 +702,9 @@ asmlinkage void __kprobes do_int3(struct
  68.193  	if (notify_die(DIE_INT3, "int3", regs, error_code, 3, SIGTRAP) == NOTIFY_STOP) {
  68.194  		return;
  68.195  	}
  68.196 +	preempt_conditional_sti(regs);
  68.197  	do_trap(3, SIGTRAP, "int3", regs, error_code, NULL);
  68.198 -	return;
  68.199 +	preempt_conditional_cli(regs);
  68.200  }
  68.201  
  68.202  /* Help handler running on IST stack to switch back to user stack
  68.203 @@ -1015,14 +1035,14 @@ void smp_trap_init(trap_info_t *trap_ctx
  68.204  static int __init oops_dummy(char *s)
  68.205  { 
  68.206  	panic_on_oops = 1;
  68.207 -	return -1; 
  68.208 +	return 1;
  68.209  } 
  68.210  __setup("oops=", oops_dummy); 
  68.211  
  68.212  static int __init kstack_setup(char *s)
  68.213  {
  68.214  	kstack_depth_to_print = simple_strtoul(s,NULL,0);
  68.215 -	return 0;
  68.216 +	return 1;
  68.217  }
  68.218  __setup("kstack=", kstack_setup);
  68.219  
    69.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/x8664_ksyms-xen.c	Tue Jan 09 10:50:46 2007 +0000
    69.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/x8664_ksyms-xen.c	Fri Jan 12 14:30:49 2007 +0000
    69.3 @@ -95,8 +95,6 @@ EXPORT_SYMBOL(smp_call_function);
    69.4  EXPORT_SYMBOL(screen_info);
    69.5  #endif
    69.6  
    69.7 -EXPORT_SYMBOL(get_wchan);
    69.8 -
    69.9  #ifdef CONFIG_X86_LOCAL_APIC
   69.10  EXPORT_SYMBOL_GPL(set_nmi_callback);
   69.11  EXPORT_SYMBOL_GPL(unset_nmi_callback);
   69.12 @@ -107,7 +105,6 @@ EXPORT_SYMBOL_GPL(unset_nmi_callback);
   69.13  #undef memcpy
   69.14  #undef memset
   69.15  #undef memmove
   69.16 -#undef strlen
   69.17  
   69.18  extern void * memset(void *,int,__kernel_size_t);
   69.19  extern size_t strlen(const char *);
   69.20 @@ -116,7 +113,6 @@ extern void * memcpy(void *,const void *
   69.21  extern void * __memcpy(void *,const void *,__kernel_size_t);
   69.22  
   69.23  EXPORT_SYMBOL(memset);
   69.24 -EXPORT_SYMBOL(strlen);
   69.25  EXPORT_SYMBOL(memmove);
   69.26  EXPORT_SYMBOL(memcpy);
   69.27  EXPORT_SYMBOL(__memcpy);
   69.28 @@ -136,16 +132,12 @@ EXPORT_SYMBOL(rwsem_down_write_failed_th
   69.29  EXPORT_SYMBOL(empty_zero_page);
   69.30  
   69.31  EXPORT_SYMBOL(die_chain);
   69.32 -EXPORT_SYMBOL(register_die_notifier);
   69.33  
   69.34  #ifdef CONFIG_SMP
   69.35  EXPORT_SYMBOL(cpu_sibling_map);
   69.36  EXPORT_SYMBOL(smp_num_siblings);
   69.37  #endif
   69.38  
   69.39 -extern void do_softirq_thunk(void);
   69.40 -EXPORT_SYMBOL(do_softirq_thunk);
   69.41 -
   69.42  #ifdef CONFIG_BUG
   69.43  EXPORT_SYMBOL(out_of_line_bug);
   69.44  #endif
    70.1 --- a/linux-2.6-xen-sparse/arch/x86_64/mm/fault-xen.c	Tue Jan 09 10:50:46 2007 +0000
    70.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/mm/fault-xen.c	Fri Jan 12 14:30:49 2007 +0000
    70.3 @@ -265,6 +265,8 @@ static int vmalloc_fault(unsigned long a
    70.4  		return -1;
    70.5  	if (pgd_none(*pgd))
    70.6  		set_pgd(pgd, *pgd_ref);
    70.7 +	else
    70.8 +		BUG_ON(pgd_page(*pgd) != pgd_page(*pgd_ref));
    70.9  
   70.10  	/* Below here mismatches are bugs because these lower tables
   70.11  	   are shared */
   70.12 @@ -370,22 +372,14 @@ asmlinkage void __kprobes do_page_fault(
   70.13  	if (!user_mode(regs))
   70.14  		error_code &= ~PF_USER; /* means kernel */
   70.15  
   70.16 +	tsk = current;
   70.17 +	mm = tsk->mm;
   70.18 +	prefetchw(&mm->mmap_sem);
   70.19 +
   70.20  	/* get the address */
   70.21  	address = HYPERVISOR_shared_info->vcpu_info[
   70.22  		smp_processor_id()].arch.cr2;
   70.23 -	if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
   70.24 -					SIGSEGV) == NOTIFY_STOP)
   70.25 -		return;
   70.26  
   70.27 -	if (likely(regs->eflags & X86_EFLAGS_IF))
   70.28 -		local_irq_enable();
   70.29 -
   70.30 -	if (unlikely(page_fault_trace))
   70.31 -		printk("pagefault rip:%lx rsp:%lx cs:%lu ss:%lu address %lx error %lx\n",
   70.32 -		       regs->rip,regs->rsp,regs->cs,regs->ss,address,error_code); 
   70.33 -
   70.34 -	tsk = current;
   70.35 -	mm = tsk->mm;
   70.36  	info.si_code = SEGV_MAPERR;
   70.37  
   70.38  
   70.39 @@ -410,13 +404,15 @@ asmlinkage void __kprobes do_page_fault(
   70.40  		 */
   70.41  		if (!(error_code & (PF_RSVD|PF_USER|PF_PROT)) &&
   70.42  		      ((address >= VMALLOC_START && address < VMALLOC_END))) {
   70.43 -			if (vmalloc_fault(address) < 0)
   70.44 -				goto bad_area_nosemaphore;
   70.45 -			return;
   70.46 +			if (vmalloc_fault(address) >= 0)
   70.47 +				return;
   70.48  		}
   70.49  		/* Can take a spurious fault if mapping changes R/O -> R/W. */
   70.50  		if (spurious_fault(regs, address, error_code))
   70.51  			return;
   70.52 +		if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
   70.53 +						SIGSEGV) == NOTIFY_STOP)
   70.54 +			return;
   70.55  		/*
   70.56  		 * Don't take the mm semaphore here. If we fixup a prefetch
   70.57  		 * fault we could otherwise deadlock.
   70.58 @@ -424,6 +420,17 @@ asmlinkage void __kprobes do_page_fault(
   70.59  		goto bad_area_nosemaphore;
   70.60  	}
   70.61  
   70.62 +	if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
   70.63 +					SIGSEGV) == NOTIFY_STOP)
   70.64 +		return;
   70.65 +
   70.66 +	if (likely(regs->eflags & X86_EFLAGS_IF))
   70.67 +		local_irq_enable();
   70.68 +
   70.69 +	if (unlikely(page_fault_trace))
   70.70 +		printk("pagefault rip:%lx rsp:%lx cs:%lu ss:%lu address %lx error %lx\n",
   70.71 +		       regs->rip,regs->rsp,regs->cs,regs->ss,address,error_code); 
   70.72 +
   70.73  	if (unlikely(error_code & PF_RSVD))
   70.74  		pgtable_bad(address, regs, error_code);
   70.75  
   70.76 @@ -633,9 +640,51 @@ do_sigbus:
   70.77  	return;
   70.78  }
   70.79  
   70.80 +DEFINE_SPINLOCK(pgd_lock);
   70.81 +struct page *pgd_list;
   70.82 +
   70.83 +void vmalloc_sync_all(void)
   70.84 +{
   70.85 +	/* Note that races in the updates of insync and start aren't 
   70.86 +	   problematic:
   70.87 +	   insync can only get set bits added, and updates to start are only
   70.88 +	   improving performance (without affecting correctness if undone). */
   70.89 +	static DECLARE_BITMAP(insync, PTRS_PER_PGD);
   70.90 +	static unsigned long start = VMALLOC_START & PGDIR_MASK;
   70.91 +	unsigned long address;
   70.92 +
   70.93 +	for (address = start; address <= VMALLOC_END; address += PGDIR_SIZE) {
   70.94 +		if (!test_bit(pgd_index(address), insync)) {
   70.95 +			const pgd_t *pgd_ref = pgd_offset_k(address);
   70.96 +			struct page *page;
   70.97 +
   70.98 +			if (pgd_none(*pgd_ref))
   70.99 +				continue;
  70.100 +			spin_lock(&pgd_lock);
  70.101 +			for (page = pgd_list; page;
  70.102 +			     page = (struct page *)page->index) {
  70.103 +				pgd_t *pgd;
  70.104 +				pgd = (pgd_t *)page_address(page) + pgd_index(address);
  70.105 +				if (pgd_none(*pgd))
  70.106 +					set_pgd(pgd, *pgd_ref);
  70.107 +				else
  70.108 +					BUG_ON(pgd_page(*pgd) != pgd_page(*pgd_ref));
  70.109 +			}
  70.110 +			spin_unlock(&pgd_lock);
  70.111 +			set_bit(pgd_index(address), insync);
  70.112 +		}
  70.113 +		if (address == start)
  70.114 +			start = address + PGDIR_SIZE;
  70.115 +	}
  70.116 +	/* Check that there is no need to do the same for the modules area. */
  70.117 +	BUILD_BUG_ON(!(MODULES_VADDR > __START_KERNEL));
  70.118 +	BUILD_BUG_ON(!(((MODULES_END - 1) & PGDIR_MASK) == 
  70.119 +				(__START_KERNEL & PGDIR_MASK)));
  70.120 +}
  70.121 +
  70.122  static int __init enable_pagefaulttrace(char *str)
  70.123  {
  70.124  	page_fault_trace = 1;
  70.125 -	return 0;
  70.126 +	return 1;
  70.127  }
  70.128  __setup("pagefaulttrace", enable_pagefaulttrace);
    71.1 --- a/linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c	Tue Jan 09 10:50:46 2007 +0000
    71.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c	Fri Jan 12 14:30:49 2007 +0000
    71.3 @@ -185,7 +185,7 @@ void show_mem(void)
    71.4  	show_free_areas();
    71.5  	printk(KERN_INFO "Free swap:       %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10));
    71.6  
    71.7 -	for_each_pgdat(pgdat) {
    71.8 +	for_each_online_pgdat(pgdat) {
    71.9                 for (i = 0; i < pgdat->node_spanned_pages; ++i) {
   71.10  			page = pfn_to_page(pgdat->node_start_pfn + i);
   71.11  			total++;
   71.12 @@ -207,7 +207,7 @@ void show_mem(void)
   71.13  
   71.14  int after_bootmem;
   71.15  
   71.16 -static void *spp_getpage(void)
   71.17 +static __init void *spp_getpage(void)
   71.18  { 
   71.19  	void *ptr;
   71.20  	if (after_bootmem)
   71.21 @@ -230,7 +230,7 @@ static inline pud_t *pud_offset_u(unsign
   71.22  	return pud + pud_index(address);
   71.23  }
   71.24  
   71.25 -static void set_pte_phys(unsigned long vaddr,
   71.26 +static __init void set_pte_phys(unsigned long vaddr,
   71.27  			 unsigned long phys, pgprot_t prot, int user_mode)
   71.28  {
   71.29  	pgd_t *pgd;
   71.30 @@ -345,7 +345,8 @@ static void set_pte_phys_ma(unsigned lon
   71.31  #define SET_FIXMAP_USER   1
   71.32  
   71.33  /* NOTE: this is meant to be run only at boot */
   71.34 -void __set_fixmap (enum fixed_addresses idx, unsigned long phys, pgprot_t prot)
   71.35 +void __init 
   71.36 +__set_fixmap (enum fixed_addresses idx, unsigned long phys, pgprot_t prot)
   71.37  {
   71.38  	unsigned long address = __fix_to_virt(idx);
   71.39  
   71.40 @@ -439,6 +440,18 @@ static inline int make_readonly(unsigned
   71.41  	return readonly;
   71.42  }
   71.43  
   71.44 +/* Must run before zap_low_mappings */
   71.45 +__init void *early_ioremap(unsigned long addr, unsigned long size)
   71.46 +{
   71.47 +	return ioremap(addr, size);
   71.48 +}
   71.49 +
   71.50 +/* To avoid virtual aliases later */
   71.51 +__init void early_iounmap(void *addr, unsigned long size)
   71.52 +{
   71.53 +	iounmap(addr);
   71.54 +}
   71.55 +
   71.56  static void __meminit
   71.57  phys_pmd_init(pmd_t *pmd, unsigned long address, unsigned long end)
   71.58  {
   71.59 @@ -686,7 +699,7 @@ void __meminit init_memory_mapping(unsig
   71.60  		pud_t *pud;
   71.61  
   71.62  		if (after_bootmem) {
   71.63 -			pud = pud_offset_k(pgd, __PAGE_OFFSET);
   71.64 +			pud = pud_offset_k(pgd, start & PGDIR_MASK);
   71.65  			make_page_readonly(pud, XENFEAT_writable_page_tables);
   71.66  			pud_phys = __pa(pud);
   71.67  		} else {
   71.68 @@ -869,19 +882,50 @@ void __init clear_kernel_mapping(unsigne
   71.69  
   71.70  /*
   71.71   * Memory hotplug specific functions
   71.72 - * These are only for non-NUMA machines right now.
   71.73   */
   71.74 -#ifdef CONFIG_MEMORY_HOTPLUG
   71.75 +#if defined(CONFIG_ACPI_HOTPLUG_MEMORY) || defined(CONFIG_ACPI_HOTPLUG_MEMORY_MODULE)
   71.76  
   71.77  void online_page(struct page *page)
   71.78  {
   71.79  	ClearPageReserved(page);
   71.80 -	set_page_count(page, 1);
   71.81 +	init_page_count(page);
   71.82  	__free_page(page);
   71.83  	totalram_pages++;
   71.84  	num_physpages++;
   71.85  }
   71.86  
   71.87 +#ifndef CONFIG_MEMORY_HOTPLUG
   71.88 +/*
   71.89 + * Memory Hotadd without sparsemem. The mem_maps have been allocated in advance,
   71.90 + * just online the pages.
   71.91 + */
   71.92 +int __add_pages(struct zone *z, unsigned long start_pfn, unsigned long nr_pages)
   71.93 +{
   71.94 +	int err = -EIO;
   71.95 +	unsigned long pfn;
   71.96 +	unsigned long total = 0, mem = 0;
   71.97 +	for (pfn = start_pfn; pfn < start_pfn + nr_pages; pfn++) {
   71.98 +		if (pfn_valid(pfn)) {
   71.99 +			online_page(pfn_to_page(pfn));
  71.100 +			err = 0;
  71.101 +			mem++;
  71.102 +		}
  71.103 +		total++;
  71.104 +	}
  71.105 +	if (!err) {
  71.106 +		z->spanned_pages += total;
  71.107 +		z->present_pages += mem;
  71.108 +		z->zone_pgdat->node_spanned_pages += total;
  71.109 +		z->zone_pgdat->node_present_pages += mem;
  71.110 +	}
  71.111 +	return err;
  71.112 +}
  71.113 +#endif
  71.114 +
  71.115 +/*
  71.116 + * Memory is added always to NORMAL zone. This means you will never get
  71.117 + * additional DMA/DMA32 memory.
  71.118 + */
  71.119  int add_memory(u64 start, u64 size)
  71.120  {
  71.121  	struct pglist_data *pgdat = NODE_DATA(0);
  71.122 @@ -949,7 +993,7 @@ void __init mem_init(void)
  71.123  	/* XEN: init and count pages outside initial allocation. */
  71.124  	for (pfn = xen_start_info->nr_pages; pfn < max_pfn; pfn++) {
  71.125  		ClearPageReserved(pfn_to_page(pfn));
  71.126 -		set_page_count(pfn_to_page(pfn), 1);
  71.127 +		init_page_count(pfn_to_page(pfn));
  71.128  		totalram_pages++;
  71.129  	}
  71.130  	reservedpages = end_pfn - totalram_pages - e820_hole_size(0, end_pfn);
  71.131 @@ -1001,7 +1045,7 @@ void free_initmem(void)
  71.132  	addr = (unsigned long)(&__init_begin);
  71.133  	for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) {
  71.134  		ClearPageReserved(virt_to_page(addr));
  71.135 -		set_page_count(virt_to_page(addr), 1);
  71.136 +		init_page_count(virt_to_page(addr));
  71.137  		memset((void *)(addr & ~(PAGE_SIZE-1)), 0xcc, PAGE_SIZE); 
  71.138  		make_page_writable(
  71.139  			__va(__pa(addr)), XENFEAT_writable_page_tables);
  71.140 @@ -1049,7 +1093,7 @@ void free_initrd_mem(unsigned long start
  71.141  	printk ("Freeing initrd memory: %ldk freed\n", (end - start) >> 10);
  71.142  	for (; start < end; start += PAGE_SIZE) {
  71.143  		ClearPageReserved(virt_to_page(start));
  71.144 -		set_page_count(virt_to_page(start), 1);
  71.145 +		init_page_count(virt_to_page(start));
  71.146  		free_page(start);
  71.147  		totalram_pages++;
  71.148  	}
    72.1 --- a/linux-2.6-xen-sparse/arch/x86_64/mm/pageattr-xen.c	Tue Jan 09 10:50:46 2007 +0000
    72.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/mm/pageattr-xen.c	Fri Jan 12 14:30:49 2007 +0000
    72.3 @@ -206,6 +206,13 @@ static struct page *split_large_page(uns
    72.4  	pte_t *pbase;
    72.5  	if (!base) 
    72.6  		return NULL;
    72.7 +	/*
    72.8 +	 * page_private is used to track the number of entries in
    72.9 +	 * the page table page have non standard attributes.
   72.10 +	 */
   72.11 +	SetPagePrivate(base);
   72.12 +	page_private(base) = 0;
   72.13 +
   72.14  	address = __pa(address);
   72.15  	addr = address & LARGE_PAGE_MASK; 
   72.16  	pbase = (pte_t *)page_address(base);
   72.17 @@ -238,26 +245,12 @@ static inline void flush_map(unsigned lo
   72.18  	on_each_cpu(flush_kernel_map, (void *)address, 1, 1);
   72.19  }
   72.20  
   72.21 -struct deferred_page { 
   72.22 -	struct deferred_page *next; 
   72.23 -	struct page *fpage;
   72.24 -	unsigned long address;
   72.25 -}; 
   72.26 -static struct deferred_page *df_list; /* protected by init_mm.mmap_sem */
   72.27 +static struct page *deferred_pages; /* protected by init_mm.mmap_sem */
   72.28  
   72.29 -static inline void save_page(unsigned long address, struct page *fpage)
   72.30 +static inline void save_page(struct page *fpage)
   72.31  {
   72.32 -	struct deferred_page *df;
   72.33 -	df = kmalloc(sizeof(struct deferred_page), GFP_KERNEL); 
   72.34 -	if (!df) {
   72.35 -		flush_map(address);
   72.36 -		__free_page(fpage);
   72.37 -	} else { 
   72.38 -		df->next = df_list;
   72.39 -		df->fpage = fpage;
   72.40 -		df->address = address;
   72.41 -		df_list = df;
   72.42 -	} 			
   72.43 +	fpage->lru.next = (struct list_head *)deferred_pages;
   72.44 +	deferred_pages = fpage;
   72.45  }
   72.46  
   72.47  /* 
   72.48 @@ -299,8 +292,8 @@ static int
   72.49  			set_pte(kpte, pfn_pte(pfn, prot));
   72.50  		} else {
   72.51   			/*
   72.52 - 			 * split_large_page will take the reference for this change_page_attr
   72.53 - 			 * on the split page.
   72.54 +			 * split_large_page will take the reference for this
   72.55 +			 * change_page_attr on the split page.
   72.56   			 */
   72.57  
   72.58  			struct page *split;
   72.59 @@ -312,10 +305,11 @@ static int
   72.60  			set_pte(kpte,mk_pte(split, ref_prot2));
   72.61  			kpte_page = split;
   72.62  		}	
   72.63 -		get_page(kpte_page);
   72.64 +		page_private(kpte_page)++;
   72.65  	} else if ((kpte_flags & _PAGE_PSE) == 0) { 
   72.66  		set_pte(kpte, pfn_pte(pfn, ref_prot));
   72.67 -		__put_page(kpte_page);
   72.68 +		BUG_ON(page_private(kpte_page) == 0);
   72.69 +		page_private(kpte_page)--;
   72.70  	} else
   72.71  		BUG();
   72.72  
   72.73 @@ -329,16 +323,14 @@ static int
   72.74  #ifndef CONFIG_XEN
   72.75   	BUG_ON(PageReserved(kpte_page));
   72.76  #else
   72.77 -	if (!PageReserved(kpte_page))
   72.78 +	if (PageReserved(kpte_page))
   72.79 +		return 0;
   72.80  #endif
   72.81 -		switch (page_count(kpte_page)) {
   72.82 -		case 1:
   72.83 -			save_page(address, kpte_page); 		     
   72.84 -			revert_page(address, ref_prot);
   72.85 -			break;
   72.86 -		case 0:
   72.87 -			BUG(); /* memleak and failed 2M page regeneration */
   72.88 -	 	}
   72.89 +
   72.90 +	if (page_private(kpte_page) == 0) {
   72.91 +		save_page(kpte_page);
   72.92 +		revert_page(address, ref_prot);
   72.93 +	}
   72.94  	return 0;
   72.95  } 
   72.96  
   72.97 @@ -390,17 +382,18 @@ int change_page_attr(struct page *page, 
   72.98  
   72.99  void global_flush_tlb(void)
  72.100  { 
  72.101 -	struct deferred_page *df, *next_df;
  72.102 +	struct page *dpage;
  72.103  
  72.104  	down_read(&init_mm.mmap_sem);
  72.105 -	df = xchg(&df_list, NULL);
  72.106 +	dpage = xchg(&deferred_pages, NULL);
  72.107  	up_read(&init_mm.mmap_sem);
  72.108 -	flush_map((df && !df->next) ? df->address : 0);
  72.109 -	for (; df; df = next_df) { 
  72.110 -		next_df = df->next;
  72.111 -		if (df->fpage) 
  72.112 -			__free_page(df->fpage);
  72.113 -		kfree(df);
  72.114 +
  72.115 +	flush_map((dpage && !dpage->lru.next) ? (unsigned long)page_address(dpage) : 0);
  72.116 +	while (dpage) {
  72.117 +		struct page *tmp = dpage;
  72.118 +		dpage = (struct page *)dpage->lru.next;
  72.119 +		ClearPagePrivate(tmp);
  72.120 +		__free_page(tmp);
  72.121  	} 
  72.122  } 
  72.123  
    73.1 --- a/linux-2.6-xen-sparse/arch/x86_64/pci/Makefile	Tue Jan 09 10:50:46 2007 +0000
    73.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/pci/Makefile	Fri Jan 12 14:30:49 2007 +0000
    73.3 @@ -7,7 +7,7 @@ CFLAGS += -Iarch/i386/pci
    73.4  
    73.5  obj-y		:= i386.o
    73.6  obj-$(CONFIG_PCI_DIRECT)+= direct.o
    73.7 -obj-y		+= fixup.o
    73.8 +obj-y		+= fixup.o init.o
    73.9  obj-$(CONFIG_ACPI)	+= acpi.o
   73.10  obj-y			+= legacy.o irq.o common.o
   73.11  # mmconfig has a 64bit special
   73.12 @@ -27,6 +27,7 @@ irq-y    += ../../i386/pci/irq.o
   73.13  common-y += ../../i386/pci/common.o
   73.14  fixup-y  += ../../i386/pci/fixup.o
   73.15  i386-y  += ../../i386/pci/i386.o
   73.16 +init-y += ../../i386/pci/init.o
   73.17  
   73.18  ifdef CONFIG_XEN
   73.19  irq-y		:= ../../i386/pci/irq-xen.o
    74.1 --- a/linux-2.6-xen-sparse/drivers/Makefile	Tue Jan 09 10:50:46 2007 +0000
    74.2 +++ b/linux-2.6-xen-sparse/drivers/Makefile	Fri Jan 12 14:30:49 2007 +0000
    74.3 @@ -25,9 +25,6 @@ obj-$(CONFIG_CONNECTOR)		+= connector/
    74.4  obj-$(CONFIG_FB_I810)           += video/i810/
    74.5  obj-$(CONFIG_FB_INTEL)          += video/intelfb/
    74.6  
    74.7 -# we also need input/serio early so serio bus is initialized by the time
    74.8 -# serial drivers start registering their serio ports
    74.9 -obj-$(CONFIG_SERIO)		+= input/serio/
   74.10  obj-y				+= serial/
   74.11  obj-$(CONFIG_PARPORT)		+= parport/
   74.12  obj-y				+= base/ block/ misc/ mfd/ net/ media/
   74.13 @@ -54,9 +51,11 @@ obj-$(CONFIG_TC)		+= tc/
   74.14  obj-$(CONFIG_USB)		+= usb/
   74.15  obj-$(CONFIG_PCI)		+= usb/
   74.16  obj-$(CONFIG_USB_GADGET)	+= usb/gadget/
   74.17 +obj-$(CONFIG_SERIO)		+= input/serio/
   74.18  obj-$(CONFIG_GAMEPORT)		+= input/gameport/
   74.19  obj-$(CONFIG_INPUT)		+= input/
   74.20  obj-$(CONFIG_I2O)		+= message/
   74.21 +obj-$(CONFIG_RTC_LIB)		+= rtc/
   74.22  obj-$(CONFIG_I2C)		+= i2c/
   74.23  obj-$(CONFIG_W1)		+= w1/
   74.24  obj-$(CONFIG_HWMON)		+= hwmon/
   74.25 @@ -69,7 +68,9 @@ obj-$(CONFIG_MCA)		+= mca/
   74.26  obj-$(CONFIG_EISA)		+= eisa/
   74.27  obj-$(CONFIG_CPU_FREQ)		+= cpufreq/
   74.28  obj-$(CONFIG_MMC)		+= mmc/
   74.29 +obj-$(CONFIG_NEW_LEDS)		+= leds/
   74.30  obj-$(CONFIG_INFINIBAND)	+= infiniband/
   74.31 +obj-$(CONFIG_IPATH_CORE)	+= infiniband/
   74.32  obj-$(CONFIG_SGI_SN)		+= sn/
   74.33  obj-y				+= firmware/
   74.34  obj-$(CONFIG_CRYPTO)		+= crypto/
    75.1 --- a/linux-2.6-xen-sparse/drivers/acpi/Kconfig	Tue Jan 09 10:50:46 2007 +0000
    75.2 +++ b/linux-2.6-xen-sparse/drivers/acpi/Kconfig	Fri Jan 12 14:30:49 2007 +0000
    75.3 @@ -205,6 +205,18 @@ config ACPI_IBM
    75.4  
    75.5  	  If you have an IBM ThinkPad laptop, say Y or M here.
    75.6  
    75.7 +config ACPI_IBM_DOCK
    75.8 +	bool "Legacy Docking Station Support"
    75.9 +	depends on ACPI_IBM
   75.10 +	default n
   75.11 +	---help---
   75.12 +	  Allows the ibm_acpi driver to handle docking station events.
   75.13 +	  This support is obsoleted by CONFIG_HOTPLUG_PCI_ACPI.  It will
   75.14 +	  allow locking and removing the laptop from the docking station,
   75.15 +	  but will not properly connect PCI devices.
   75.16 +
   75.17 +	  If you are not sure, say N here.
   75.18 +
   75.19  config ACPI_TOSHIBA
   75.20  	tristate "Toshiba Laptop Extras"
   75.21  	depends on X86
   75.22 @@ -244,7 +256,8 @@ config ACPI_CUSTOM_DSDT_FILE
   75.23  	depends on ACPI_CUSTOM_DSDT
   75.24  	default ""
   75.25  	help
   75.26 -	  Enter the full path name to the file wich includes the AmlCode declaration.
   75.27 +	  Enter the full path name to the file which includes the AmlCode
   75.28 +	  declaration.
   75.29  
   75.30  config ACPI_BLACKLIST_YEAR
   75.31  	int "Disable ACPI for systems before Jan 1st this year" if X86_32
   75.32 @@ -317,7 +330,7 @@ config ACPI_CONTAINER
   75.33  config ACPI_HOTPLUG_MEMORY
   75.34  	tristate "Memory Hotplug"
   75.35  	depends on ACPI
   75.36 -	depends on MEMORY_HOTPLUG
   75.37 +	depends on MEMORY_HOTPLUG || X86_64
   75.38  	default n
   75.39  	help
   75.40  	  This driver adds supports for ACPI Memory Hotplug.  This driver
    76.1 --- a/linux-2.6-xen-sparse/drivers/acpi/tables.c	Tue Jan 09 10:50:46 2007 +0000
    76.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    76.3 @@ -1,626 +0,0 @@
    76.4 -/*
    76.5 - *  acpi_tables.c - ACPI Boot-Time Table Parsing
    76.6 - *
    76.7 - *  Copyright (C) 2001 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
    76.8 - *
    76.9 - * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   76.10 - *
   76.11 - *  This program is free software; you can redistribute it and/or modify
   76.12 - *  it under the terms of the GNU General Public License as published by
   76.13 - *  the Free Software Foundation; either version 2 of the License, or
   76.14 - *  (at your option) any later version.
   76.15 - *
   76.16 - *  This program is distributed in the hope that it will be useful,
   76.17 - *  but WITHOUT ANY WARRANTY; without even the implied warranty of
   76.18 - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   76.19 - *  GNU General Public License for more details.
   76.20 - *
   76.21 - *  You should have received a copy of the GNU General Public License
   76.22 - *  along with this program; if not, write to the Free Software
   76.23 - *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   76.24 - *
   76.25 - * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   76.26 - *
   76.27 - */
   76.28 -
   76.29 -#include <linux/config.h>
   76.30 -#include <linux/init.h>
   76.31 -#include <linux/kernel.h>
   76.32 -#include <linux/sched.h>
   76.33 -#include <linux/smp.h>
   76.34 -#include <linux/string.h>
   76.35 -#include <linux/types.h>
   76.36 -#include <linux/irq.h>
   76.37 -#include <linux/errno.h>
   76.38 -#include <linux/acpi.h>
   76.39 -#include <linux/bootmem.h>
   76.40 -
   76.41 -#define PREFIX			"ACPI: "
   76.42 -
   76.43 -#define ACPI_MAX_TABLES		128
   76.44 -
   76.45 -static char *acpi_table_signatures[ACPI_TABLE_COUNT] = {
   76.46 -	[ACPI_TABLE_UNKNOWN] = "????",
   76.47 -	[ACPI_APIC] = "APIC",
   76.48 -	[ACPI_BOOT] = "BOOT",
   76.49 -	[ACPI_DBGP] = "DBGP",
   76.50 -	[ACPI_DSDT] = "DSDT",
   76.51 -	[ACPI_ECDT] = "ECDT",
   76.52 -	[ACPI_ETDT] = "ETDT",
   76.53 -	[ACPI_FADT] = "FACP",
   76.54 -	[ACPI_FACS] = "FACS",
   76.55 -	[ACPI_OEMX] = "OEM",
   76.56 -	[ACPI_PSDT] = "PSDT",
   76.57 -	[ACPI_SBST] = "SBST",
   76.58 -	[ACPI_SLIT] = "SLIT",
   76.59 -	[ACPI_SPCR] = "SPCR",
   76.60 -	[ACPI_SRAT] = "SRAT",
   76.61 -	[ACPI_SSDT] = "SSDT",
   76.62 -	[ACPI_SPMI] = "SPMI",
   76.63 -	[ACPI_HPET] = "HPET",
   76.64 -	[ACPI_MCFG] = "MCFG",
   76.65 -};
   76.66 -
   76.67 -static char *mps_inti_flags_polarity[] = { "dfl", "high", "res", "low" };
   76.68 -static char *mps_inti_flags_trigger[] = { "dfl", "edge", "res", "level" };
   76.69 -
   76.70 -/* System Description Table (RSDT/XSDT) */
   76.71 -struct acpi_table_sdt {
   76.72 -	unsigned long pa;
   76.73 -	enum acpi_table_id id;
   76.74 -	unsigned long size;
   76.75 -} __attribute__ ((packed));
   76.76 -
   76.77 -static unsigned long sdt_pa;	/* Physical Address */
   76.78 -static unsigned long sdt_count;	/* Table count */
   76.79 -
   76.80 -static struct acpi_table_sdt sdt_entry[ACPI_MAX_TABLES] __initdata;
   76.81 -
   76.82 -void acpi_table_print(struct acpi_table_header *header, unsigned long phys_addr)
   76.83 -{
   76.84 -	char *name = NULL;
   76.85 -
   76.86 -	if (!header)
   76.87 -		return;
   76.88 -
   76.89 -	/* Some table signatures aren't good table names */
   76.90 -
   76.91 -	if (!strncmp((char *)&header->signature,
   76.92 -		     acpi_table_signatures[ACPI_APIC],
   76.93 -		     sizeof(header->signature))) {
   76.94 -		name = "MADT";
   76.95 -	} else if (!strncmp((char *)&header->signature,
   76.96 -			    acpi_table_signatures[ACPI_FADT],
   76.97 -			    sizeof(header->signature))) {
   76.98 -		name = "FADT";
   76.99 -	} else
  76.100 -		name = header->signature;
  76.101 -
  76.102 -	printk(KERN_DEBUG PREFIX
  76.103 -	       "%.4s (v%3.3d %6.6s %8.8s 0x%08x %.4s 0x%08x) @ 0x%p\n", name,
  76.104 -	       header->revision, header->oem_id, header->oem_table_id,
  76.105 -	       header->oem_revision, header->asl_compiler_id,
  76.106 -	       header->asl_compiler_revision, (void *)phys_addr);
  76.107 -}
  76.108 -
  76.109 -void acpi_table_print_madt_entry(acpi_table_entry_header * header)
  76.110 -{
  76.111 -	if (!header)
  76.112 -		return;
  76.113 -
  76.114 -	switch (header->type) {
  76.115 -
  76.116 -	case ACPI_MADT_LAPIC:
  76.117 -		{
  76.118 -			struct acpi_table_lapic *p =
  76.119 -			    (struct acpi_table_lapic *)header;
  76.120 -			printk(KERN_INFO PREFIX
  76.121 -			       "LAPIC (acpi_id[0x%02x] lapic_id[0x%02x] %s)\n",
  76.122 -			       p->acpi_id, p->id,
  76.123 -			       p->flags.enabled ? "enabled" : "disabled");
  76.124 -		}
  76.125 -		break;
  76.126 -
  76.127 -	case ACPI_MADT_IOAPIC:
  76.128 -		{
  76.129 -			struct acpi_table_ioapic *p =
  76.130 -			    (struct acpi_table_ioapic *)header;
  76.131 -			printk(KERN_INFO PREFIX
  76.132 -			       "IOAPIC (id[0x%02x] address[0x%08x] gsi_base[%d])\n",
  76.133 -			       p->id, p->address, p->global_irq_base);
  76.134 -		}
  76.135 -		break;
  76.136 -
  76.137 -	case ACPI_MADT_INT_SRC_OVR:
  76.138 -		{
  76.139 -			struct acpi_table_int_src_ovr *p =
  76.140 -			    (struct acpi_table_int_src_ovr *)header;
  76.141 -			printk(KERN_INFO PREFIX
  76.142 -			       "INT_SRC_OVR (bus %d bus_irq %d global_irq %d %s %s)\n",
  76.143 -			       p->bus, p->bus_irq, p->global_irq,
  76.144 -			       mps_inti_flags_polarity[p->flags.polarity],
  76.145 -			       mps_inti_flags_trigger[p->flags.trigger]);
  76.146 -			if (p->flags.reserved)
  76.147 -				printk(KERN_INFO PREFIX
  76.148 -				       "INT_SRC_OVR unexpected reserved flags: 0x%x\n",
  76.149 -				       p->flags.reserved);
  76.150 -
  76.151 -		}
  76.152 -		break;
  76.153 -
  76.154 -	case ACPI_MADT_NMI_SRC:
  76.155 -		{
  76.156 -			struct acpi_table_nmi_src *p =
  76.157 -			    (struct acpi_table_nmi_src *)header;
  76.158 -			printk(KERN_INFO PREFIX
  76.159 -			       "NMI_SRC (%s %s global_irq %d)\n",
  76.160 -			       mps_inti_flags_polarity[p->flags.polarity],
  76.161 -			       mps_inti_flags_trigger[p->flags.trigger],
  76.162 -			       p->global_irq);
  76.163 -		}
  76.164 -		break;
  76.165 -
  76.166 -	case ACPI_MADT_LAPIC_NMI:
  76.167 -		{
  76.168 -			struct acpi_table_lapic_nmi *p =
  76.169 -			    (struct acpi_table_lapic_nmi *)header;
  76.170 -			printk(KERN_INFO PREFIX
  76.171 -			       "LAPIC_NMI (acpi_id[0x%02x] %s %s lint[0x%x])\n",
  76.172 -			       p->acpi_id,
  76.173 -			       mps_inti_flags_polarity[p->flags.polarity],
  76.174 -			       mps_inti_flags_trigger[p->flags.trigger],
  76.175 -			       p->lint);
  76.176 -		}
  76.177 -		break;
  76.178 -
  76.179 -	case ACPI_MADT_LAPIC_ADDR_OVR:
  76.180 -		{
  76.181 -			struct acpi_table_lapic_addr_ovr *p =
  76.182 -			    (struct acpi_table_lapic_addr_ovr *)header;
  76.183 -			printk(KERN_INFO PREFIX
  76.184 -			       "LAPIC_ADDR_OVR (address[%p])\n",
  76.185 -			       (void *)(unsigned long)p->address);
  76.186 -		}
  76.187 -		break;
  76.188 -
  76.189 -	case ACPI_MADT_IOSAPIC:
  76.190 -		{
  76.191 -			struct acpi_table_iosapic *p =
  76.192 -			    (struct acpi_table_iosapic *)header;
  76.193 -			printk(KERN_INFO PREFIX
  76.194 -			       "IOSAPIC (id[0x%x] address[%p] gsi_base[%d])\n",
  76.195 -			       p->id, (void *)(unsigned long)p->address,
  76.196 -			       p->global_irq_base);
  76.197 -		}
  76.198 -		break;
  76.199 -
  76.200 -	case ACPI_MADT_LSAPIC:
  76.201 -		{
  76.202 -			struct acpi_table_lsapic *p =
  76.203 -			    (struct acpi_table_lsapic *)header;
  76.204 -			printk(KERN_INFO PREFIX
  76.205 -			       "LSAPIC (acpi_id[0x%02x] lsapic_id[0x%02x] lsapic_eid[0x%02x] %s)\n",
  76.206 -			       p->acpi_id, p->id, p->eid,
  76.207 -			       p->flags.enabled ? "enabled" : "disabled");
  76.208 -		}
  76.209 -		break;
  76.210 -
  76.211 -	case ACPI_MADT_PLAT_INT_SRC:
  76.212 -		{
  76.213 -			struct acpi_table_plat_int_src *p =
  76.214 -			    (struct acpi_table_plat_int_src *)header;
  76.215 -			printk(KERN_INFO PREFIX
  76.216 -			       "PLAT_INT_SRC (%s %s type[0x%x] id[0x%04x] eid[0x%x] iosapic_vector[0x%x] global_irq[0x%x]\n",
  76.217 -			       mps_inti_flags_polarity[p->flags.polarity],
  76.218 -			       mps_inti_flags_trigger[p->flags.trigger],
  76.219 -			       p->type, p->id, p->eid, p->iosapic_vector,
  76.220 -			       p->global_irq);
  76.221 -		}
  76.222 -		break;
  76.223 -
  76.224 -	default:
  76.225 -		printk(KERN_WARNING PREFIX
  76.226 -		       "Found unsupported MADT entry (type = 0x%x)\n",
  76.227 -		       header->type);
  76.228 -		break;
  76.229 -	}
  76.230 -}
  76.231 -
  76.232 -static int
  76.233 -acpi_table_compute_checksum(void *table_pointer, unsigned long length)
  76.234 -{
  76.235 -	u8 *p = (u8 *) table_pointer;
  76.236 -	unsigned long remains = length;
  76.237 -	unsigned long sum = 0;
  76.238 -
  76.239 -	if (!p || !length)
  76.240 -		return -EINVAL;
  76.241 -
  76.242 -	while (remains--)
  76.243 -		sum += *p++;
  76.244 -
  76.245 -	return (sum & 0xFF);
  76.246 -}
  76.247 -
  76.248 -/*
  76.249 - * acpi_get_table_header_early()
  76.250 - * for acpi_blacklisted(), acpi_table_get_sdt()
  76.251 - */
  76.252 -int __init
  76.253 -acpi_get_table_header_early(enum acpi_table_id id,
  76.254 -			    struct acpi_table_header **header)
  76.255 -{
  76.256 -	unsigned int i;
  76.257 -	enum acpi_table_id temp_id;
  76.258 -
  76.259 -	/* DSDT is different from the rest */
  76.260 -	if (id == ACPI_DSDT)
  76.261 -		temp_id = ACPI_FADT;
  76.262 -	else
  76.263 -		temp_id = id;
  76.264 -
  76.265 -	/* Locate the table. */
  76.266 -
  76.267 -	for (i = 0; i < sdt_count; i++) {
  76.268 -		if (sdt_entry[i].id != temp_id)
  76.269 -			continue;
  76.270 -		*header = (void *)
  76.271 -		    __acpi_map_table(sdt_entry[i].pa, sdt_entry[i].size);
  76.272 -		if (!*header) {
  76.273 -			printk(KERN_WARNING PREFIX "Unable to map %s\n",
  76.274 -			       acpi_table_signatures[temp_id]);
  76.275 -			return -ENODEV;
  76.276 -		}
  76.277 -		break;
  76.278 -	}
  76.279 -
  76.280 -	if (!*header) {
  76.281 -		printk(KERN_WARNING PREFIX "%s not present\n",
  76.282 -		       acpi_table_signatures[id]);
  76.283 -		return -ENODEV;
  76.284 -	}
  76.285 -
  76.286 -	/* Map the DSDT header via the pointer in the FADT */
  76.287 -	if (id == ACPI_DSDT) {
  76.288 -		struct fadt_descriptor_rev2 *fadt =
  76.289 -		    (struct fadt_descriptor_rev2 *)*header;
  76.290 -
  76.291 -		if (fadt->revision == 3 && fadt->Xdsdt) {
  76.292 -			*header = (void *)__acpi_map_table(fadt->Xdsdt,
  76.293 -							   sizeof(struct
  76.294 -								  acpi_table_header));
  76.295 -		} else if (fadt->V1_dsdt) {
  76.296 -			*header = (void *)__acpi_map_table(fadt->V1_dsdt,
  76.297 -							   sizeof(struct
  76.298 -								  acpi_table_header));
  76.299 -		} else
  76.300 -			*header = NULL;
  76.301 -
  76.302 -		if (!*header) {
  76.303 -			printk(KERN_WARNING PREFIX "Unable to map DSDT\n");
  76.304 -			return -ENODEV;
  76.305 -		}
  76.306 -	}
  76.307 -
  76.308 -	return 0;
  76.309 -}
  76.310 -
  76.311 -int __init
  76.312 -acpi_table_parse_madt_family(enum acpi_table_id id,
  76.313 -			     unsigned long madt_size,
  76.314 -			     int entry_id,
  76.315 -			     acpi_madt_entry_handler handler,
  76.316 -			     unsigned int max_entries)
  76.317 -{
  76.318 -	void *madt = NULL;
  76.319 -	acpi_table_entry_header *entry;
  76.320 -	unsigned int count = 0;
  76.321 -	unsigned long madt_end;
  76.322 -	unsigned int i;
  76.323 -
  76.324 -	if (!handler)
  76.325 -		return -EINVAL;
  76.326 -
  76.327 -	/* Locate the MADT (if exists). There should only be one. */
  76.328 -
  76.329 -	for (i = 0; i < sdt_count; i++) {
  76.330 -		if (sdt_entry[i].id != id)
  76.331 -			continue;
  76.332 -		madt = (void *)
  76.333 -		    __acpi_map_table(sdt_entry[i].pa, sdt_entry[i].size);
  76.334 -		if (!madt) {
  76.335 -			printk(KERN_WARNING PREFIX "Unable to map %s\n",
  76.336 -			       acpi_table_signatures[id]);
  76.337 -			return -ENODEV;
  76.338 -		}
  76.339 -		break;
  76.340 -	}
  76.341 -
  76.342 -	if (!madt) {
  76.343 -		printk(KERN_WARNING PREFIX "%s not present\n",
  76.344 -		       acpi_table_signatures[id]);
  76.345 -		return -ENODEV;
  76.346 -	}
  76.347 -
  76.348 -	madt_end = (unsigned long)madt + sdt_entry[i].size;
  76.349 -
  76.350 -	/* Parse all entries looking for a match. */
  76.351 -
  76.352 -	entry = (acpi_table_entry_header *)
  76.353 -	    ((unsigned long)madt + madt_size);
  76.354 -
  76.355 -	while (((unsigned long)entry) + sizeof(acpi_table_entry_header) <
  76.356 -	       madt_end) {
  76.357 -		if (entry->type == entry_id
  76.358 -		    && (!max_entries || count++ < max_entries))
  76.359 -			if (handler(entry, madt_end))
  76.360 -				return -EINVAL;
  76.361 -
  76.362 -		entry = (acpi_table_entry_header *)
  76.363 -		    ((unsigned long)entry + entry->length);
  76.364 -	}
  76.365 -	if (max_entries && count > max_entries) {
  76.366 -		printk(KERN_WARNING PREFIX "[%s:0x%02x] ignored %i entries of "
  76.367 -		       "%i found\n", acpi_table_signatures[id], entry_id,
  76.368 -		       count - max_entries, count);
  76.369 -	}
  76.370 -
  76.371 -	return count;
  76.372 -}
  76.373 -
  76.374 -int __init
  76.375 -acpi_table_parse_madt(enum acpi_madt_entry_id id,
  76.376 -		      acpi_madt_entry_handler handler, unsigned int max_entries)
  76.377 -{
  76.378 -	return acpi_table_parse_madt_family(ACPI_APIC,
  76.379 -					    sizeof(struct acpi_table_madt), id,
  76.380 -					    handler, max_entries);
  76.381 -}
  76.382 -
  76.383 -int __init acpi_table_parse(enum acpi_table_id id, acpi_table_handler handler)
  76.384 -{
  76.385 -	int count = 0;
  76.386 -	unsigned int i = 0;
  76.387 -
  76.388 -	if (!handler)
  76.389 -		return -EINVAL;
  76.390 -
  76.391 -	for (i = 0; i < sdt_count; i++) {
  76.392 -		if (sdt_entry[i].id != id)
  76.393 -			continue;
  76.394 -		count++;
  76.395 -		if (count == 1)
  76.396 -			handler(sdt_entry[i].pa, sdt_entry[i].size);
  76.397 -
  76.398 -		else
  76.399 -			printk(KERN_WARNING PREFIX
  76.400 -			       "%d duplicate %s table ignored.\n", count,
  76.401 -			       acpi_table_signatures[id]);
  76.402 -	}
  76.403 -
  76.404 -	return count;
  76.405 -}
  76.406 -
  76.407 -static int __init acpi_table_get_sdt(struct acpi_table_rsdp *rsdp)
  76.408 -{
  76.409 -	struct acpi_table_header *header = NULL;
  76.410 -	unsigned int i, id = 0;
  76.411 -
  76.412 -	if (!rsdp)
  76.413 -		return -EINVAL;
  76.414 -
  76.415 -	/* First check XSDT (but only on ACPI 2.0-compatible systems) */
  76.416 -
  76.417 -	if ((rsdp->revision >= 2) &&
  76.418 -	    (((struct acpi20_table_rsdp *)rsdp)->xsdt_address)) {
  76.419 -
  76.420 -		struct acpi_table_xsdt *mapped_xsdt = NULL;
  76.421 -
  76.422 -		sdt_pa = ((struct acpi20_table_rsdp *)rsdp)->xsdt_address;
  76.423 -
  76.424 -		/* map in just the header */
  76.425 -		header = (struct acpi_table_header *)
  76.426 -		    __acpi_map_table(sdt_pa, sizeof(struct acpi_table_header));
  76.427 -
  76.428 -		if (!header) {
  76.429 -			printk(KERN_WARNING PREFIX
  76.430 -			       "Unable to map XSDT header\n");
  76.431 -			return -ENODEV;
  76.432 -		}
  76.433 -
  76.434 -		/* remap in the entire table before processing */
  76.435 -		mapped_xsdt = (struct acpi_table_xsdt *)
  76.436 -		    __acpi_map_table(sdt_pa, header->length);
  76.437 -		if (!mapped_xsdt) {
  76.438 -			printk(KERN_WARNING PREFIX "Unable to map XSDT\n");
  76.439 -			return -ENODEV;
  76.440 -		}
  76.441 -		header = &mapped_xsdt->header;
  76.442 -
  76.443 -		if (strncmp(header->signature, "XSDT", 4)) {
  76.444 -			printk(KERN_WARNING PREFIX
  76.445 -			       "XSDT signature incorrect\n");
  76.446 -			return -ENODEV;
  76.447 -		}
  76.448 -
  76.449 -		if (acpi_table_compute_checksum(header, header->length)) {
  76.450 -			printk(KERN_WARNING PREFIX "Invalid XSDT checksum\n");
  76.451 -			return -ENODEV;
  76.452 -		}
  76.453 -
  76.454 -		sdt_count =
  76.455 -		    (header->length - sizeof(struct acpi_table_header)) >> 3;
  76.456 -		if (sdt_count > ACPI_MAX_TABLES) {
  76.457 -			printk(KERN_WARNING PREFIX
  76.458 -			       "Truncated %lu XSDT entries\n",
  76.459 -			       (sdt_count - ACPI_MAX_TABLES));
  76.460 -			sdt_count = ACPI_MAX_TABLES;
  76.461 -		}
  76.462 -
  76.463 -		for (i = 0; i < sdt_count; i++)
  76.464 -			sdt_entry[i].pa = (unsigned long)mapped_xsdt->entry[i];
  76.465 -	}
  76.466 -
  76.467 -	/* Then check RSDT */
  76.468 -
  76.469 -	else if (rsdp->rsdt_address) {
  76.470 -
  76.471 -		struct acpi_table_rsdt *mapped_rsdt = NULL;
  76.472 -
  76.473 -		sdt_pa = rsdp->rsdt_address;
  76.474 -
  76.475 -		/* map in just the header */
  76.476 -		header = (struct acpi_table_header *)
  76.477 -		    __acpi_map_table(sdt_pa, sizeof(struct acpi_table_header));
  76.478 -		if (!header) {
  76.479 -			printk(KERN_WARNING PREFIX
  76.480 -			       "Unable to map RSDT header\n");
  76.481 -			return -ENODEV;
  76.482 -		}
  76.483 -
  76.484 -		/* remap in the entire table before processing */
  76.485 -		mapped_rsdt = (struct acpi_table_rsdt *)
  76.486 -		    __acpi_map_table(sdt_pa, header->length);
  76.487 -		if (!mapped_rsdt) {
  76.488 -			printk(KERN_WARNING PREFIX "Unable to map RSDT\n");
  76.489 -			return -ENODEV;
  76.490 -		}
  76.491 -		header = &mapped_rsdt->header;
  76.492 -
  76.493 -		if (strncmp(header->signature, "RSDT", 4)) {
  76.494 -			printk(KERN_WARNING PREFIX
  76.495 -			       "RSDT signature incorrect\n");
  76.496 -			return -ENODEV;
  76.497 -		}
  76.498 -
  76.499 -		if (acpi_table_compute_checksum(header, header->length)) {
  76.500 -			printk(KERN_WARNING PREFIX "Invalid RSDT checksum\n");
  76.501 -			return -ENODEV;
  76.502 -		}
  76.503 -
  76.504 -		sdt_count =
  76.505 -		    (header->length - sizeof(struct acpi_table_header)) >> 2;
  76.506 -		if (sdt_count > ACPI_MAX_TABLES) {
  76.507 -			printk(KERN_WARNING PREFIX
  76.508 -			       "Truncated %lu RSDT entries\n",
  76.509 -			       (sdt_count - ACPI_MAX_TABLES));
  76.510 -			sdt_count = ACPI_MAX_TABLES;
  76.511 -		}
  76.512 -
  76.513 -		for (i = 0; i < sdt_count; i++)
  76.514 -			sdt_entry[i].pa = (unsigned long)mapped_rsdt->entry[i];
  76.515 -	}
  76.516 -
  76.517 -	else {
  76.518 -		printk(KERN_WARNING PREFIX
  76.519 -		       "No System Description Table (RSDT/XSDT) specified in RSDP\n");
  76.520 -		return -ENODEV;
  76.521 -	}
  76.522 -
  76.523 -	acpi_table_print(header, sdt_pa);
  76.524 -
  76.525 -	for (i = 0; i < sdt_count; i++) {
  76.526 -
  76.527 -		/* map in just the header */
  76.528 -		header = (struct acpi_table_header *)
  76.529 -		    __acpi_map_table(sdt_entry[i].pa,
  76.530 -				     sizeof(struct acpi_table_header));
  76.531 -		if (!header)
  76.532 -			continue;
  76.533 -
  76.534 -		/* remap in the entire table before processing */
  76.535 -		header = (struct acpi_table_header *)
  76.536 -		    __acpi_map_table(sdt_entry[i].pa, header->length);
  76.537 -		if (!header)
  76.538 -			continue;
  76.539 -
  76.540 -		acpi_table_print(header, sdt_entry[i].pa);
  76.541 -
  76.542 -		if (acpi_table_compute_checksum(header, header->length)) {
  76.543 -			printk(KERN_WARNING "  >>> ERROR: Invalid checksum\n");
  76.544 -			continue;
  76.545 -		}
  76.546 -
  76.547 -		sdt_entry[i].size = header->length;
  76.548 -
  76.549 -		for (id = 0; id < ACPI_TABLE_COUNT; id++) {
  76.550 -			if (!strncmp((char *)&header->signature,
  76.551 -				     acpi_table_signatures[id],
  76.552 -				     sizeof(header->signature))) {
  76.553 -				sdt_entry[i].id = id;
  76.554 -			}
  76.555 -		}
  76.556 -	}
  76.557 -
  76.558 -	/* 
  76.559 -	 * The DSDT is *not* in the RSDT (why not? no idea.) but we want
  76.560 -	 * to print its info, because this is what people usually blacklist
  76.561 -	 * against. Unfortunately, we don't know the phys_addr, so just
  76.562 -	 * print 0. Maybe no one will notice.
  76.563 -	 */
  76.564 -	if (!acpi_get_table_header_early(ACPI_DSDT, &header))
  76.565 -		acpi_table_print(header, 0);
  76.566 -
  76.567 -	return 0;
  76.568 -}
  76.569 -
  76.570 -/*
  76.571 - * acpi_table_init()
  76.572 - *
  76.573 - * find RSDP, find and checksum SDT/XSDT.
  76.574 - * checksum all tables, print SDT/XSDT
  76.575 - * 
  76.576 - * result: sdt_entry[] is initialized
  76.577 - */
  76.578 -#if defined(CONFIG_X86_XEN) || defined(CONFIG_X86_64_XEN)
  76.579 -#define acpi_rsdp_phys_to_va(rsdp_phys) isa_bus_to_virt(rsdp_phys)
  76.580 -#else
  76.581 -#define acpi_rsdp_phys_to_va(rsdp_phys) __va(rsdp_phys)
  76.582 -#endif
  76.583 -
  76.584 -int __init acpi_table_init(void)
  76.585 -{
  76.586 -	struct acpi_table_rsdp *rsdp = NULL;
  76.587 -	unsigned long rsdp_phys = 0;
  76.588 -	int result = 0;
  76.589 -
  76.590 -	/* Locate and map the Root System Description Table (RSDP) */
  76.591 -
  76.592 -	rsdp_phys = acpi_find_rsdp();
  76.593 -	if (!rsdp_phys) {
  76.594 -		printk(KERN_ERR PREFIX "Unable to locate RSDP\n");
  76.595 -		return -ENODEV;
  76.596 -	}
  76.597 -
  76.598 -	rsdp = (struct acpi_table_rsdp *)acpi_rsdp_phys_to_va(rsdp_phys);
  76.599 -	if (!rsdp) {
  76.600 -		printk(KERN_WARNING PREFIX "Unable to map RSDP\n");
  76.601 -		return -ENODEV;
  76.602 -	}
  76.603 -
  76.604 -	printk(KERN_DEBUG PREFIX
  76.605 -	       "RSDP (v%3.3d %6.6s                                ) @ 0x%p\n",
  76.606 -	       rsdp->revision, rsdp->oem_id, (void *)rsdp_phys);
  76.607 -
  76.608 -	if (rsdp->revision < 2)
  76.609 -		result =
  76.610 -		    acpi_table_compute_checksum(rsdp,
  76.611 -						sizeof(struct acpi_table_rsdp));
  76.612 -	else
  76.613 -		result =
  76.614 -		    acpi_table_compute_checksum(rsdp,
  76.615 -						((struct acpi20_table_rsdp *)
  76.616 -						 rsdp)->length);
  76.617 -
  76.618 -	if (result) {
  76.619 -		printk(KERN_WARNING "  >>> ERROR: Invalid checksum\n");
  76.620 -		return -ENODEV;
  76.621 -	}
  76.622 -
  76.623 -	/* Locate and map the System Description table (RSDT/XSDT) */
  76.624 -
  76.625 -	if (acpi_table_get_sdt(rsdp))
  76.626 -		return -ENODEV;
  76.627 -
  76.628 -	return 0;
  76.629 -}
    77.1 --- a/linux-2.6-xen-sparse/drivers/char/mem.c	Tue Jan 09 10:50:46 2007 +0000
    77.2 +++ b/linux-2.6-xen-sparse/drivers/char/mem.c	Fri Jan 12 14:30:49 2007 +0000
    77.3 @@ -27,6 +27,7 @@
    77.4  #include <linux/crash_dump.h>
    77.5  #include <linux/backing-dev.h>
    77.6  #include <linux/bootmem.h>
    77.7 +#include <linux/pipe_fs_i.h>
    77.8  
    77.9  #include <asm/uaccess.h>
   77.10  #include <asm/io.h>
   77.11 @@ -88,21 +89,15 @@ static inline int uncached_access(struct
   77.12  }
   77.13  
   77.14  #ifndef ARCH_HAS_VALID_PHYS_ADDR_RANGE
   77.15 -static inline int valid_phys_addr_range(unsigned long addr, size_t *count)
   77.16 +static inline int valid_phys_addr_range(unsigned long addr, size_t count)
   77.17  {
   77.18 -	unsigned long end_mem;
   77.19 -
   77.20 -	end_mem = __pa(high_memory);
   77.21 -	if (addr >= end_mem)
   77.22 +	if (addr + count > __pa(high_memory))
   77.23  		return 0;
   77.24  
   77.25 -	if (*count > end_mem - addr)
   77.26 -		*count = end_mem - addr;
   77.27 -
   77.28  	return 1;
   77.29  }
   77.30  
   77.31 -static inline int valid_mmap_phys_addr_range(unsigned long addr, size_t *size)
   77.32 +static inline int valid_mmap_phys_addr_range(unsigned long addr, size_t size)
   77.33  {
   77.34  	return 1;
   77.35  }
   77.36 @@ -120,7 +115,7 @@ static ssize_t read_mem(struct file * fi
   77.37  	ssize_t read, sz;
   77.38  	char *ptr;
   77.39  
   77.40 -	if (!valid_phys_addr_range(p, &count))
   77.41 +	if (!valid_phys_addr_range(p, count))
   77.42  		return -EFAULT;
   77.43  	read = 0;
   77.44  #ifdef __ARCH_HAS_NO_PAGE_ZERO_MAPPED
   77.45 @@ -178,7 +173,7 @@ static ssize_t write_mem(struct file * f
   77.46  	unsigned long copied;
   77.47  	void *ptr;
   77.48  
   77.49 -	if (!valid_phys_addr_range(p, &count))
   77.50 +	if (!valid_phys_addr_range(p, count))
   77.51  		return -EFAULT;
   77.52  
   77.53  	written = 0;
   77.54 @@ -217,11 +212,9 @@ static ssize_t write_mem(struct file * f
   77.55  
   77.56  		copied = copy_from_user(ptr, buf, sz);
   77.57  		if (copied) {
   77.58 -			ssize_t ret;
   77.59 -
   77.60 -			ret = written + (sz - copied);
   77.61 -			if (ret)
   77.62 -				return ret;
   77.63 +			written += sz - copied;
   77.64 +			if (written)
   77.65 +				break;
   77.66  			return -EFAULT;
   77.67  		}
   77.68  		buf += sz;
   77.69 @@ -253,7 +246,7 @@ static int mmap_mem(struct file * file, 
   77.70  {
   77.71  	size_t size = vma->vm_end - vma->vm_start;
   77.72  
   77.73 -	if (!valid_mmap_phys_addr_range(vma->vm_pgoff << PAGE_SHIFT, &size))
   77.74 +	if (!valid_mmap_phys_addr_range(vma->vm_pgoff << PAGE_SHIFT, size))
   77.75  		return -EINVAL;
   77.76  
   77.77  	vma->vm_page_prot = phys_mem_access_prot(file, vma->vm_pgoff,
   77.78 @@ -458,11 +451,9 @@ do_write_kmem(void *p, unsigned long rea
   77.79  
   77.80  		copied = copy_from_user(ptr, buf, sz);
   77.81  		if (copied) {
   77.82 -			ssize_t ret;
   77.83 -
   77.84 -			ret = written + (sz - copied);
   77.85 -			if (ret)
   77.86 -				return ret;
   77.87 +			written += sz - copied;
   77.88 +			if (written)
   77.89 +				break;
   77.90  			return -EFAULT;
   77.91  		}
   77.92  		buf += sz;
   77.93 @@ -516,11 +507,10 @@ static ssize_t write_kmem(struct file * 
   77.94  			if (len) {
   77.95  				written = copy_from_user(kbuf, buf, len);
   77.96  				if (written) {
   77.97 -					ssize_t ret;
   77.98 -
   77.99 +					if (wrote + virtr)
  77.100 +						break;
  77.101  					free_page((unsigned long)kbuf);
  77.102 -					ret = wrote + virtr + (len - written);
  77.103 -					return ret ? ret : -EFAULT;
  77.104 +					return -EFAULT;
  77.105  				}
  77.106  			}
  77.107  			len = vwrite(kbuf, (char *)p, len);
  77.108 @@ -565,8 +555,11 @@ static ssize_t write_port(struct file * 
  77.109  		return -EFAULT;
  77.110  	while (count-- > 0 && i < 65536) {
  77.111  		char c;
  77.112 -		if (__get_user(c, tmp)) 
  77.113 +		if (__get_user(c, tmp)) {
  77.114 +			if (tmp > buf)
  77.115 +				break;
  77.116  			return -EFAULT; 
  77.117 +		}
  77.118  		outb(c,i);
  77.119  		i++;
  77.120  		tmp++;
  77.121 @@ -588,6 +581,18 @@ static ssize_t write_null(struct file * 
  77.122  	return count;
  77.123  }
  77.124  
  77.125 +static int pipe_to_null(struct pipe_inode_info *info, struct pipe_buffer *buf,
  77.126 +			struct splice_desc *sd)
  77.127 +{
  77.128 +	return sd->len;
  77.129 +}
  77.130 +
  77.131 +static ssize_t splice_write_null(struct pipe_inode_info *pipe,struct file *out,
  77.132 +				 loff_t *ppos, size_t len, unsigned int flags)
  77.133 +{
  77.134 +	return splice_from_pipe(pipe, out, ppos, len, flags, pipe_to_null);
  77.135 +}
  77.136 +
  77.137  #ifdef CONFIG_MMU
  77.138  /*
  77.139   * For fun, we are using the MMU for this.
  77.140 @@ -799,6 +804,7 @@ static struct file_operations null_fops 
  77.141  	.llseek		= null_lseek,
  77.142  	.read		= read_null,
  77.143  	.write		= write_null,
  77.144 +	.splice_write	= splice_write_null,
  77.145  };
  77.146  
  77.147  #if defined(CONFIG_ISA) || !defined(__mc68000__)
  77.148 @@ -913,7 +919,7 @@ static const struct {
  77.149  	unsigned int		minor;
  77.150  	char			*name;
  77.151  	umode_t			mode;
  77.152 -	struct file_operations	*fops;
  77.153 +	const struct file_operations	*fops;
  77.154  } devlist[] = { /* list of minor devices */
  77.155  	{1, "mem",     S_IRUSR | S_IWUSR | S_IRGRP, &mem_fops},
  77.156  	{2, "kmem",    S_IRUSR | S_IWUSR | S_IRGRP, &kmem_fops},
    78.1 --- a/linux-2.6-xen-sparse/drivers/char/tty_io.c	Tue Jan 09 10:50:46 2007 +0000
    78.2 +++ b/linux-2.6-xen-sparse/drivers/char/tty_io.c	Fri Jan 12 14:30:49 2007 +0000
    78.3 @@ -130,7 +130,7 @@ LIST_HEAD(tty_drivers);			/* linked list
    78.4  
    78.5  /* Semaphore to protect creating and releasing a tty. This is shared with
    78.6     vt.c for deeply disgusting hack reasons */
    78.7 -DECLARE_MUTEX(tty_sem);
    78.8 +DEFINE_MUTEX(tty_mutex);
    78.9  
   78.10  int console_use_vt = 1;
   78.11  
   78.12 @@ -353,10 +353,10 @@ int tty_buffer_request_room(struct tty_s
   78.13  	spin_unlock_irqrestore(&tty->buf.lock, flags);
   78.14  	return size;
   78.15  }
   78.16 -
   78.17  EXPORT_SYMBOL_GPL(tty_buffer_request_room);
   78.18  
   78.19 -int tty_insert_flip_string(struct tty_struct *tty, unsigned char *chars, size_t size)
   78.20 +int tty_insert_flip_string(struct tty_struct *tty, const unsigned char *chars,
   78.21 +				size_t size)
   78.22  {
   78.23  	int copied = 0;
   78.24  	do {
   78.25 @@ -370,17 +370,16 @@ int tty_insert_flip_string(struct tty_st
   78.26  		tb->used += space;
   78.27  		copied += space;
   78.28  		chars += space;
   78.29 -/* 		printk("Flip insert %d.\n", space); */
   78.30  	}
   78.31  	/* There is a small chance that we need to split the data over
   78.32  	   several buffers. If this is the case we must loop */
   78.33  	while (unlikely(size > copied));
   78.34  	return copied;
   78.35  }
   78.36 -
   78.37 -EXPORT_SYMBOL_GPL(tty_insert_flip_string);
   78.38 -
   78.39 -int tty_insert_flip_string_flags(struct tty_struct *tty, unsigned char *chars, char *flags, size_t size)
   78.40 +EXPORT_SYMBOL(tty_insert_flip_string);
   78.41 +
   78.42 +int tty_insert_flip_string_flags(struct tty_struct *tty,
   78.43 +		const unsigned char *chars, const char *flags, size_t size)
   78.44  {
   78.45  	int copied = 0;
   78.46  	do {
   78.47 @@ -401,9 +400,20 @@ int tty_insert_flip_string_flags(struct 
   78.48  	while (unlikely(size > copied));
   78.49  	return copied;
   78.50  }
   78.51 -
   78.52 -EXPORT_SYMBOL_GPL(tty_insert_flip_string_flags);
   78.53 -
   78.54 +EXPORT_SYMBOL(tty_insert_flip_string_flags);
   78.55 +
   78.56 +void tty_schedule_flip(struct tty_struct *tty)
   78.57 +{
   78.58 +	unsigned long flags;
   78.59 +	spin_lock_irqsave(&tty->buf.lock, flags);
   78.60 +	if (tty->buf.tail != NULL) {
   78.61 +		tty->buf.tail->active = 0;
   78.62 +		tty->buf.tail->commit = tty->buf.tail->used;
   78.63 +	}
   78.64 +	spin_unlock_irqrestore(&tty->buf.lock, flags);
   78.65 +	schedule_delayed_work(&tty->buf.work, 1);
   78.66 +}
   78.67 +EXPORT_SYMBOL(tty_schedule_flip);
   78.68  
   78.69  /*
   78.70   *	Prepare a block of space in the buffer for data. Returns the length
   78.71 @@ -545,14 +555,12 @@ void tty_ldisc_put(int disc)
   78.72  	struct tty_ldisc *ld;
   78.73  	unsigned long flags;
   78.74  	
   78.75 -	if (disc < N_TTY || disc >= NR_LDISCS)
   78.76 -		BUG();
   78.77 +	BUG_ON(disc < N_TTY || disc >= NR_LDISCS);
   78.78  		
   78.79  	spin_lock_irqsave(&tty_ldisc_lock, flags);
   78.80  	ld = &tty_ldiscs[disc];
   78.81 -	if(ld->refcount == 0)
   78.82 -		BUG();
   78.83 -	ld->refcount --;
   78.84 +	BUG_ON(ld->refcount == 0);
   78.85 +	ld->refcount--;
   78.86  	module_put(ld->owner);
   78.87  	spin_unlock_irqrestore(&tty_ldisc_lock, flags);
   78.88  }
   78.89 @@ -647,8 +655,7 @@ void tty_ldisc_deref(struct tty_ldisc *l
   78.90  {
   78.91  	unsigned long flags;
   78.92  
   78.93 -	if(ld == NULL)
   78.94 -		BUG();
   78.95 +	BUG_ON(ld == NULL);
   78.96  		
   78.97  	spin_lock_irqsave(&tty_ldisc_lock, flags);
   78.98  	if(ld->refcount == 0)
   78.99 @@ -1099,8 +1106,8 @@ static void do_tty_hangup(void *data)
  78.100  				p->signal->tty = NULL;
  78.101  			if (!p->signal->leader)
  78.102  				continue;
  78.103 -			send_group_sig_info(SIGHUP, SEND_SIG_PRIV, p);
  78.104 -			send_group_sig_info(SIGCONT, SEND_SIG_PRIV, p);
  78.105 +			group_send_sig_info(SIGHUP, SEND_SIG_PRIV, p);
  78.106 +			group_send_sig_info(SIGCONT, SEND_SIG_PRIV, p);
  78.107  			if (tty->pgrp > 0)
  78.108  				p->signal->tty_old_pgrp = tty->pgrp;
  78.109  		} while_each_task_pid(tty->session, PIDTYPE_SID, p);
  78.110 @@ -1190,11 +1197,11 @@ void disassociate_ctty(int on_exit)
  78.111  
  78.112  	lock_kernel();
  78.113  
  78.114 -	down(&tty_sem);
  78.115 +	mutex_lock(&tty_mutex);
  78.116  	tty = current->signal->tty;
  78.117  	if (tty) {
  78.118  		tty_pgrp = tty->pgrp;
  78.119 -		up(&tty_sem);
  78.120 +		mutex_unlock(&tty_mutex);
  78.121  		if (on_exit && tty->driver->type != TTY_DRIVER_TYPE_PTY)
  78.122  			tty_vhangup(tty);
  78.123  	} else {
  78.124 @@ -1202,7 +1209,7 @@ void disassociate_ctty(int on_exit)
  78.125  			kill_pg(current->signal->tty_old_pgrp, SIGHUP, on_exit);
  78.126  			kill_pg(current->signal->tty_old_pgrp, SIGCONT, on_exit);
  78.127  		}
  78.128 -		up(&tty_sem);
  78.129 +		mutex_unlock(&tty_mutex);
  78.130  		unlock_kernel();	
  78.131  		return;
  78.132  	}
  78.133 @@ -1213,7 +1220,7 @@ void disassociate_ctty(int on_exit)
  78.134  	}
  78.135  
  78.136  	/* Must lock changes to tty_old_pgrp */
  78.137 -	down(&tty_sem);
  78.138 +	mutex_lock(&tty_mutex);
  78.139  	current->signal->tty_old_pgrp = 0;
  78.140  	tty->session = 0;
  78.141  	tty->pgrp = -1;
  78.142 @@ -1224,7 +1231,7 @@ void disassociate_ctty(int on_exit)
  78.143  		p->signal->tty = NULL;
  78.144  	} while_each_task_pid(current->signal->session, PIDTYPE_SID, p);
  78.145  	read_unlock(&tasklist_lock);
  78.146 -	up(&tty_sem);
  78.147 +	mutex_unlock(&tty_mutex);
  78.148  	unlock_kernel();
  78.149  }
  78.150  
  78.151 @@ -1308,7 +1315,7 @@ static inline ssize_t do_tty_write(
  78.152  	ssize_t ret = 0, written = 0;
  78.153  	unsigned int chunk;
  78.154  	
  78.155 -	if (down_interruptible(&tty->atomic_write)) {
  78.156 +	if (mutex_lock_interruptible(&tty->atomic_write_lock)) {
  78.157  		return -ERESTARTSYS;
  78.158  	}
  78.159  
  78.160 @@ -1331,7 +1338,7 @@ static inline ssize_t do_tty_write(
  78.161  	if (count < chunk)
  78.162  		chunk = count;
  78.163  
  78.164 -	/* write_buf/write_cnt is protected by the atomic_write semaphore */
  78.165 +	/* write_buf/write_cnt is protected by the atomic_write_lock mutex */
  78.166  	if (tty->write_cnt < chunk) {
  78.167  		unsigned char *buf;
  78.168  
  78.169 @@ -1340,7 +1347,7 @@ static inline ssize_t do_tty_write(
  78.170  
  78.171  		buf = kmalloc(chunk, GFP_KERNEL);
  78.172  		if (!buf) {
  78.173 -			up(&tty->atomic_write);
  78.174 +			mutex_unlock(&tty->atomic_write_lock);
  78.175  			return -ENOMEM;
  78.176  		}
  78.177  		kfree(tty->write_buf);
  78.178 @@ -1376,7 +1383,7 @@ static inline ssize_t do_tty_write(
  78.179  		inode->i_mtime = current_fs_time(inode->i_sb);
  78.180  		ret = written;
  78.181  	}
  78.182 -	up(&tty->atomic_write);
  78.183 +	mutex_unlock(&tty->atomic_write_lock);
  78.184  	return ret;
  78.185  }
  78.186  
  78.187 @@ -1444,8 +1451,8 @@ static inline void tty_line_name(struct 
  78.188  
  78.189  /*
  78.190   * WSH 06/09/97: Rewritten to remove races and properly clean up after a
  78.191 - * failed open.  The new code protects the open with a semaphore, so it's
  78.192 - * really quite straightforward.  The semaphore locking can probably be
  78.193 + * failed open.  The new code protects the open with a mutex, so it's
  78.194 + * really quite straightforward.  The mutex locking can probably be
  78.195   * relaxed for the (most common) case of reopening a tty.
  78.196   */
  78.197  static int init_dev(struct tty_driver *driver, int idx,
  78.198 @@ -1642,7 +1649,7 @@ fast_track:
  78.199  success:
  78.200  	*ret_tty = tty;
  78.201  	
  78.202 -	/* All paths come through here to release the semaphore */
  78.203 +	/* All paths come through here to release the mutex */
  78.204  end_init:
  78.205  	return retval;
  78.206  
  78.207 @@ -1735,7 +1742,7 @@ static void release_dev(struct file * fi
  78.208  {
  78.209  	struct tty_struct *tty, *o_tty;
  78.210  	int	pty_master, tty_closing, o_tty_closing, do_sleep;
  78.211 -	int	devpts_master, devpts;
  78.212 +	int	devpts;
  78.213  	int	idx;
  78.214  	char	buf[64];
  78.215  	unsigned long flags;
  78.216 @@ -1752,7 +1759,6 @@ static void release_dev(struct file * fi
  78.217  	pty_master = (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
  78.218  		      tty->driver->subtype == PTY_TYPE_MASTER);
  78.219  	devpts = (tty->driver->flags & TTY_DRIVER_DEVPTS_MEM) != 0;
  78.220 -	devpts_master = pty_master && devpts;
  78.221  	o_tty = tty->link;
  78.222  
  78.223  #ifdef TTY_PARANOIA_CHECK
  78.224 @@ -1839,7 +1845,7 @@ static void release_dev(struct file * fi
  78.225  		/* Guard against races with tty->count changes elsewhere and
  78.226  		   opens on /dev/tty */
  78.227  		   
  78.228 -		down(&tty_sem);
  78.229 +		mutex_lock(&tty_mutex);
  78.230  		tty_closing = tty->count <= 1;
  78.231  		o_tty_closing = o_tty &&
  78.232  			(o_tty->count <= (pty_master ? 1 : 0));
  78.233 @@ -1870,7 +1876,7 @@ static void release_dev(struct file * fi
  78.234  
  78.235  		printk(KERN_WARNING "release_dev: %s: read/write wait queue "
  78.236  				    "active!\n", tty_name(tty, buf));
  78.237 -		up(&tty_sem);
  78.238 +		mutex_unlock(&tty_mutex);
  78.239  		schedule();
  78.240  	}	
  78.241  
  78.242 @@ -1936,7 +1942,7 @@ static void release_dev(struct file * fi
  78.243  		read_unlock(&tasklist_lock);
  78.244  	}
  78.245  
  78.246 -	up(&tty_sem);
  78.247 +	mutex_unlock(&tty_mutex);
  78.248  
  78.249  	/* check whether both sides are closing ... */
  78.250  	if (!tty_closing || (o_tty && !o_tty_closing))
  78.251 @@ -2042,11 +2048,11 @@ retry_open:
  78.252  	index  = -1;
  78.253  	retval = 0;
  78.254  	
  78.255 -	down(&tty_sem);
  78.256 +	mutex_lock(&tty_mutex);
  78.257  
  78.258  	if (device == MKDEV(TTYAUX_MAJOR,0)) {
  78.259  		if (!current->signal->tty) {
  78.260 -			up(&tty_sem);
  78.261 +			mutex_unlock(&tty_mutex);
  78.262  			return -ENXIO;
  78.263  		}
  78.264  		driver = current->signal->tty->driver;
  78.265 @@ -2072,18 +2078,18 @@ retry_open:
  78.266  			noctty = 1;
  78.267  			goto got_driver;
  78.268  		}
  78.269 -		up(&tty_sem);
  78.270 +		mutex_unlock(&tty_mutex);
  78.271  		return -ENODEV;
  78.272  	}
  78.273  
  78.274  	driver = get_tty_driver(device, &index);
  78.275  	if (!driver) {
  78.276 -		up(&tty_sem);
  78.277 +		mutex_unlock(&tty_mutex);
  78.278  		return -ENODEV;
  78.279  	}
  78.280  got_driver:
  78.281  	retval = init_dev(driver, index, &tty);
  78.282 -	up(&tty_sem);
  78.283 +	mutex_unlock(&tty_mutex);
  78.284  	if (retval)
  78.285  		return retval;
  78.286  
  78.287 @@ -2169,9 +2175,9 @@ static int ptmx_open(struct inode * inod
  78.288  	}
  78.289  	up(&allocated_ptys_lock);
  78.290  
  78.291 -	down(&tty_sem);
  78.292 +	mutex_lock(&tty_mutex);
  78.293  	retval = init_dev(ptm_driver, index, &tty);
  78.294 -	up(&tty_sem);
  78.295 +	mutex_unlock(&tty_mutex);
  78.296  	
  78.297  	if (retval)
  78.298  		goto out;
  78.299 @@ -2190,6 +2196,7 @@ static int ptmx_open(struct inode * inod
  78.300  		return 0;
  78.301  out1:
  78.302  	release_dev(filp);
  78.303 +	return retval;
  78.304  out:
  78.305  	down(&allocated_ptys_lock);
  78.306  	idr_remove(&allocated_ptys, index);
  78.307 @@ -2677,7 +2684,7 @@ static void __do_SAK(void *arg)
  78.308  	tty_hangup(tty);
  78.309  #else
  78.310  	struct tty_struct *tty = arg;
  78.311 -	struct task_struct *p;
  78.312 +	struct task_struct *g, *p;
  78.313  	int session;
  78.314  	int		i;
  78.315  	struct file	*filp;
  78.316 @@ -2698,8 +2705,18 @@ static void __do_SAK(void *arg)
  78.317  		tty->driver->flush_buffer(tty);
  78.318  	
  78.319  	read_lock(&tasklist_lock);
  78.320 +	/* Kill the entire session */
  78.321  	do_each_task_pid(session, PIDTYPE_SID, p) {
  78.322 -		if (p->signal->tty == tty || session > 0) {
  78.323 +		printk(KERN_NOTICE "SAK: killed process %d"
  78.324 +			" (%s): p->signal->session==tty->session\n",
  78.325 +			p->pid, p->comm);
  78.326 +		send_sig(SIGKILL, p, 1);
  78.327 +	} while_each_task_pid(session, PIDTYPE_SID, p);
  78.328 +	/* Now kill any processes that happen to have the
  78.329 +	 * tty open.
  78.330 +	 */
  78.331 +	do_each_thread(g, p) {
  78.332 +		if (p->signal->tty == tty) {
  78.333  			printk(KERN_NOTICE "SAK: killed process %d"
  78.334  			    " (%s): p->signal->session==tty->session\n",
  78.335  			    p->pid, p->comm);
  78.336 @@ -2723,14 +2740,14 @@ static void __do_SAK(void *arg)
  78.337  					printk(KERN_NOTICE "SAK: killed process %d"
  78.338  					    " (%s): fd#%d opened to the tty\n",
  78.339  					    p->pid, p->comm, i);
  78.340 -					send_sig(SIGKILL, p, 1);
  78.341 +					force_sig(SIGKILL, p);
  78.342  					break;
  78.343  				}
  78.344  			}
  78.345  			spin_unlock(&p->files->file_lock);
  78.346  		}
  78.347  		task_unlock(p);
  78.348 -	} while_each_task_pid(session, PIDTYPE_SID, p);
  78.349 +	} while_each_thread(g, p);
  78.350  	read_unlock(&tasklist_lock);
  78.351  #endif
  78.352  }
  78.353 @@ -2761,7 +2778,7 @@ static void flush_to_ldisc(void *private
  78.354  	struct tty_struct *tty = (struct tty_struct *) private_;
  78.355  	unsigned long 	flags;
  78.356  	struct tty_ldisc *disc;
  78.357 -	struct tty_buffer *tbuf, *head;
  78.358 +	struct tty_buffer *tbuf;
  78.359  	int count;
  78.360  	char *char_buf;
  78.361  	unsigned char *flag_buf;
  78.362 @@ -2778,9 +2795,7 @@ static void flush_to_ldisc(void *private
  78.363  		goto out;
  78.364  	}
  78.365  	spin_lock_irqsave(&tty->buf.lock, flags);
  78.366 -	head = tty->buf.head;
  78.367 -	tty->buf.head = NULL;
  78.368 -	while((tbuf = head) != NULL) {
  78.369 +	while((tbuf = tty->buf.head) != NULL) {
  78.370  		while ((count = tbuf->commit - tbuf->read) != 0) {
  78.371  			char_buf = tbuf->char_buf_ptr + tbuf->read;
  78.372  			flag_buf = tbuf->flag_buf_ptr + tbuf->read;
  78.373 @@ -2789,12 +2804,10 @@ static void flush_to_ldisc(void *private
  78.374  			disc->receive_buf(tty, char_buf, flag_buf, count);
  78.375  			spin_lock_irqsave(&tty->buf.lock, flags);
  78.376  		}
  78.377 -		if (tbuf->active) {
  78.378 -			tty->buf.head = head;
  78.379 +		if (tbuf->active)
  78.380  			break;
  78.381 -		}
  78.382 -		head = tbuf->next;
  78.383 -		if (head == NULL)
  78.384 +		tty->buf.head = tbuf->next;
  78.385 +		if (tty->buf.head == NULL)
  78.386  			tty->buf.tail = NULL;
  78.387  		tty_buffer_free(tty, tbuf);
  78.388  	}
  78.389 @@ -2925,8 +2938,8 @@ static void initialize_tty_struct(struct
  78.390  	init_waitqueue_head(&tty->write_wait);
  78.391  	init_waitqueue_head(&tty->read_wait);
  78.392  	INIT_WORK(&tty->hangup_work, do_tty_hangup, tty);
  78.393 -	sema_init(&tty->atomic_read, 1);
  78.394 -	sema_init(&tty->atomic_write, 1);
  78.395 +	mutex_init(&tty->atomic_read_lock);
  78.396 +	mutex_init(&tty->atomic_write_lock);
  78.397  	spin_lock_init(&tty->read_lock);
  78.398  	INIT_LIST_HEAD(&tty->tty_files);
  78.399  	INIT_WORK(&tty->SAK_work, NULL, NULL);
    79.1 --- a/linux-2.6-xen-sparse/drivers/pci/Kconfig	Tue Jan 09 10:50:46 2007 +0000
    79.2 +++ b/linux-2.6-xen-sparse/drivers/pci/Kconfig	Fri Jan 12 14:30:49 2007 +0000
    79.3 @@ -12,24 +12,11 @@ config PCI_MSI
    79.4  	   generate an interrupt using an inbound Memory Write on its
    79.5  	   PCI bus instead of asserting a device IRQ pin.
    79.6  
    79.7 -	   If you don't know what to do here, say N.
    79.8 -
    79.9 -config PCI_LEGACY_PROC
   79.10 -	bool "Legacy /proc/pci interface"
   79.11 -	depends on PCI
   79.12 -	---help---
   79.13 -	  This feature enables a procfs file -- /proc/pci -- that provides a 
   79.14 -	  summary of PCI devices in the system. 
   79.15 +	   Use of PCI MSI interrupts can be disabled at kernel boot time
   79.16 +	   by using the 'pci=nomsi' option.  This disables MSI for the
   79.17 +	   entire system.
   79.18  
   79.19 -	  This feature has been deprecated as of v2.5.53, in favor of using the 
   79.20 -	  tool lspci(8). This feature may be removed at a future date. 
   79.21 -
   79.22 -	  lspci can provide the same data, as well as much more. lspci is a part of
   79.23 -	  the pci-utils package, which should be installed by your distribution. 
   79.24 -	  See <file:Documentation/Changes> for information on where to get the latest
   79.25 -	  version. 
   79.26 -
   79.27 -	  When in doubt, say N.
   79.28 +	   If you don't know what to do here, say N.
   79.29  
   79.30  config PCI_DEBUG
   79.31  	bool "PCI Debugging"
    80.1 --- a/linux-2.6-xen-sparse/drivers/serial/Kconfig	Tue Jan 09 10:50:46 2007 +0000
    80.2 +++ b/linux-2.6-xen-sparse/drivers/serial/Kconfig	Fri Jan 12 14:30:49 2007 +0000
    80.3 @@ -64,6 +64,33 @@ config SERIAL_8250_CONSOLE
    80.4  
    80.5  	  If unsure, say N.
    80.6  
    80.7 +config SERIAL_8250_GSC
    80.8 +	tristate
    80.9 +	depends on SERIAL_8250 && GSC
   80.10 +	default SERIAL_8250
   80.11 +
   80.12 +config SERIAL_8250_PCI
   80.13 +	tristate "8250/16550 PCI device support" if EMBEDDED
   80.14 +	depends on SERIAL_8250 && PCI
   80.15 +	default SERIAL_8250
   80.16 +	help
   80.17 +	  This builds standard PCI serial support. You may be able to
   80.18 +	  disable this feature if you only need legacy serial support.
   80.19 +	  Saves about 9K.
   80.20 +
   80.21 +config SERIAL_8250_PNP
   80.22 +	tristate "8250/16550 PNP device support" if EMBEDDED
   80.23 +	depends on SERIAL_8250 && PNP
   80.24 +	default SERIAL_8250
   80.25 +	help
   80.26 +	  This builds standard PNP serial support. You may be able to
   80.27 +	  disable this feature if you only need legacy serial support.
   80.28 +
   80.29 +config SERIAL_8250_HP300
   80.30 +	tristate
   80.31 +	depends on SERIAL_8250 && HP300
   80.32 +	default SERIAL_8250
   80.33 +
   80.34  config SERIAL_8250_CS
   80.35  	tristate "8250/16550 PCMCIA device support"
   80.36  	depends on PCMCIA && SERIAL_8250
   80.37 @@ -78,14 +105,6 @@ config SERIAL_8250_CS
   80.38  
   80.39  	  If unsure, say N.
   80.40  
   80.41 -config SERIAL_8250_ACPI
   80.42 -	bool "8250/16550 device discovery via ACPI namespace"
   80.43 -	default y if IA64
   80.44 -	depends on ACPI && SERIAL_8250
   80.45 -	---help---
   80.46 -	  If you wish to enable serial port discovery via the ACPI
   80.47 -	  namespace, say Y here.  If unsure, say N.
   80.48 -
   80.49  config SERIAL_8250_NR_UARTS
   80.50  	int "Maximum number of 8250/16550 serial ports"
   80.51  	depends on SERIAL_8250
   80.52 @@ -583,6 +602,13 @@ config SERIAL_SUNSAB_CONSOLE
   80.53  	  on your Sparc system as the console, you can do so by answering
   80.54  	  Y to this option.
   80.55  
   80.56 +config SERIAL_SUNHV
   80.57 +	bool "Sun4v Hypervisor Console support"
   80.58 +	depends on SPARC64
   80.59 +	help
   80.60 +	  This driver supports the console device found on SUN4V Sparc
   80.61 +	  systems.  Say Y if you want to be able to use this device.
   80.62 +
   80.63  config SERIAL_IP22_ZILOG
   80.64  	tristate "IP22 Zilog8530 serial support"
   80.65  	depends on SGI_IP22
   80.66 @@ -622,22 +648,6 @@ config SERIAL_SH_SCI_CONSOLE
   80.67  	depends on SERIAL_SH_SCI=y
   80.68  	select SERIAL_CORE_CONSOLE
   80.69  
   80.70 -config SERIAL_AU1X00
   80.71 -	bool "Enable Au1x00 UART Support"
   80.72 -	depends on MIPS && SOC_AU1X00
   80.73 -	select SERIAL_CORE
   80.74 -	help
   80.75 -	  If you have an Alchemy AU1X00 processor (MIPS based) and you want
   80.76 -	  to use serial ports, say Y.  Otherwise, say N.
   80.77 -
   80.78 -config SERIAL_AU1X00_CONSOLE
   80.79 -	bool "Enable Au1x00 serial console"
   80.80 -	depends on SERIAL_AU1X00
   80.81 -	select SERIAL_CORE_CONSOLE
   80.82 -	help
   80.83 -	  If you have an Alchemy AU1X00 processor (MIPS based) and you want
   80.84 -	  to use a console on a serial port, say Y.  Otherwise, say N.
   80.85 -
   80.86  config SERIAL_CORE
   80.87  	tristate
   80.88  
   80.89 @@ -861,7 +871,7 @@ config SERIAL_M32R_PLDSIO
   80.90  
   80.91  config SERIAL_TXX9
   80.92  	bool "TMPTX39XX/49XX SIO support"
   80.93 -	depends HAS_TXX9_SERIAL && BROKEN
   80.94 +	depends HAS_TXX9_SERIAL
   80.95  	select SERIAL_CORE
   80.96  	default y
   80.97  
    81.1 --- a/linux-2.6-xen-sparse/drivers/video/Kconfig	Tue Jan 09 10:50:46 2007 +0000
    81.2 +++ b/linux-2.6-xen-sparse/drivers/video/Kconfig	Fri Jan 12 14:30:49 2007 +0000
    81.3 @@ -70,6 +70,22 @@ config FB_MACMODES
    81.4         depends on FB
    81.5         default n
    81.6  
    81.7 +config FB_FIRMWARE_EDID
    81.8 +       bool "Enable firmware EDID"
    81.9 +       depends on FB
   81.10 +       default y
   81.11 +       ---help---
   81.12 +         This enables access to the EDID transferred from the firmware.
   81.13 +	 On the i386, this is from the Video BIOS. Enable this if DDC/I2C
   81.14 +	 transfers do not work for your driver and if you are using
   81.15 +	 nvidiafb, i810fb or savagefb.
   81.16 +
   81.17 +	 In general, choosing Y for this option is safe.  If you
   81.18 +	 experience extremely long delays while booting before you get
   81.19 +	 something on your display, try setting this to N.  Matrox cards in
   81.20 +	 combination with certain motherboards and monitors are known to
   81.21 +	 suffer from this problem.
   81.22 +
   81.23  config FB_MODE_HELPERS
   81.24          bool "Enable Video Mode Handling Helpers"
   81.25          depends on FB
   81.26 @@ -384,6 +400,8 @@ config FB_ASILIANT
   81.27  	select FB_CFB_FILLRECT
   81.28  	select FB_CFB_COPYAREA
   81.29  	select FB_CFB_IMAGEBLIT
   81.30 +	help
   81.31 +	  This is the frame buffer device driver for the Asiliant 69030 chipset
   81.32  
   81.33  config FB_IMSTT
   81.34  	bool "IMS Twin Turbo display support"
   81.35 @@ -888,20 +906,6 @@ config FB_MATROX_MULTIHEAD
   81.36  	  There is no need for enabling 'Matrox multihead support' if you have
   81.37  	  only one Matrox card in the box.
   81.38  
   81.39 -config FB_RADEON_OLD
   81.40 -	tristate "ATI Radeon display support (Old driver)"
   81.41 -	depends on FB && PCI
   81.42 -	select FB_CFB_FILLRECT
   81.43 -	select FB_CFB_COPYAREA
   81.44 -	select FB_CFB_IMAGEBLIT
   81.45 -	select FB_MACMODES if PPC
   81.46 -	help
   81.47 -	  Choose this option if you want to use an ATI Radeon graphics card as
   81.48 -	  a framebuffer device.  There are both PCI and AGP versions.  You
   81.49 -	  don't need to choose this to run the Radeon in plain VGA mode.
   81.50 -	  There is a product page at
   81.51 -	  <http://www.ati.com/na/pages/products/pc/radeon32/index.html>.
   81.52 -
   81.53  config FB_RADEON
   81.54  	tristate "ATI Radeon display support"
   81.55  	depends on FB && PCI
   81.56 @@ -959,7 +963,7 @@ config FB_ATY128
   81.57  
   81.58  config FB_ATY
   81.59  	tristate "ATI Mach64 display support" if PCI || ATARI
   81.60 -	depends on FB
   81.61 +	depends on FB && !SPARC32
   81.62  	select FB_CFB_FILLRECT
   81.63  	select FB_CFB_COPYAREA
   81.64  	select FB_CFB_IMAGEBLIT
   81.65 @@ -1204,6 +1208,17 @@ config FB_AU1100
   81.66  	bool "Au1100 LCD Driver"
   81.67  	depends on (FB = y) && EXPERIMENTAL && PCI && MIPS && MIPS_PB1100=y
   81.68  
   81.69 +config FB_AU1200
   81.70 +	bool "Au1200 LCD Driver"
   81.71 +	depends on FB && MIPS && SOC_AU1200
   81.72 +	select FB_CFB_FILLRECT
   81.73 +	select FB_CFB_COPYAREA
   81.74 +	select FB_CFB_IMAGEBLIT
   81.75 +	help
   81.76 +	  This is the framebuffer driver for the AMD Au1200 SOC.  It can drive
   81.77 +	  various panels and CRTs by passing in kernel cmd line option
   81.78 +	  au1200fb:panel=<name>.
   81.79 +
   81.80  source "drivers/video/geode/Kconfig"
   81.81  
   81.82  config FB_FFB
    82.1 --- a/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c	Tue Jan 09 10:50:46 2007 +0000
    82.2 +++ b/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c	Fri Jan 12 14:30:49 2007 +0000
    82.3 @@ -229,7 +229,7 @@ static int increase_reservation(unsigned
    82.4  
    82.5  		/* Relinquish the page back to the allocator. */
    82.6  		ClearPageReserved(page);
    82.7 -		set_page_count(page, 1);
    82.8 +		init_page_count(page);
    82.9  		__free_page(page);
   82.10  	}
   82.11  
    83.1 --- a/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c	Tue Jan 09 10:50:46 2007 +0000
    83.2 +++ b/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c	Fri Jan 12 14:30:49 2007 +0000
    83.3 @@ -272,13 +272,13 @@ static void backend_changed(struct xenbu
    83.4  		if (bd == NULL)
    83.5  			xenbus_dev_fatal(dev, -ENODEV, "bdget failed");
    83.6  
    83.7 -		down(&bd->bd_sem);
    83.8 +		mutex_lock(&bd->bd_mutex);
    83.9  		if (info->users > 0)
   83.10  			xenbus_dev_error(dev, -EBUSY,
   83.11  					 "Device in use; refusing to close");
   83.12  		else
   83.13  			blkfront_closing(dev);
   83.14 -		up(&bd->bd_sem);
   83.15 +		mutex_unlock(&bd->bd_mutex);
   83.16  		bdput(bd);
   83.17  		break;
   83.18  	}
    84.1 --- a/linux-2.6-xen-sparse/drivers/xen/console/console.c	Tue Jan 09 10:50:46 2007 +0000
    84.2 +++ b/linux-2.6-xen-sparse/drivers/xen/console/console.c	Fri Jan 12 14:30:49 2007 +0000
    84.3 @@ -595,16 +595,16 @@ static void xencons_close(struct tty_str
    84.4  	if (DUMMY_TTY(tty))
    84.5  		return;
    84.6  
    84.7 -	down(&tty_sem);
    84.8 +	mutex_lock(&tty_mutex);
    84.9  
   84.10  	if (tty->count != 1) {
   84.11 -		up(&tty_sem);
   84.12 +		mutex_unlock(&tty_mutex);
   84.13  		return;
   84.14  	}
   84.15  
   84.16  	/* Prevent other threads from re-opening this tty. */
   84.17  	set_bit(TTY_CLOSING, &tty->flags);
   84.18 -	up(&tty_sem);
   84.19 +	mutex_unlock(&tty_mutex);
   84.20  
   84.21  	tty->closing = 1;
   84.22  	tty_wait_until_sent(tty, 0);
    85.1 --- a/linux-2.6-xen-sparse/drivers/xen/core/smpboot.c	Tue Jan 09 10:50:46 2007 +0000
    85.2 +++ b/linux-2.6-xen-sparse/drivers/xen/core/smpboot.c	Fri Jan 12 14:30:49 2007 +0000
    85.3 @@ -26,10 +26,6 @@
    85.4  #include <xen/cpu_hotplug.h>
    85.5  #include <xen/xenbus.h>
    85.6  
    85.7 -#ifdef CONFIG_SMP_ALTERNATIVES
    85.8 -#include <asm/smp_alt.h>
    85.9 -#endif
   85.10 -
   85.11  extern irqreturn_t smp_reschedule_interrupt(int, void *, struct pt_regs *);
   85.12  extern irqreturn_t smp_call_function_interrupt(int, void *, struct pt_regs *);
   85.13  
   85.14 @@ -84,7 +80,8 @@ void __init prefill_possible_map(void)
   85.15  {
   85.16  	int i, rc;
   85.17  
   85.18 -	if (!cpus_empty(cpu_possible_map))
   85.19 +	for_each_possible_cpu(i)
   85.20 +	    if (i != smp_processor_id())
   85.21  		return;
   85.22  
   85.23  	for (i = 0; i < NR_CPUS; i++) {
   85.24 @@ -351,7 +348,6 @@ void __init smp_prepare_cpus(unsigned in
   85.25  
   85.26  void __devinit smp_prepare_boot_cpu(void)
   85.27  {
   85.28 -	prefill_possible_map();
   85.29  	cpu_present_map  = cpumask_of_cpu(0);
   85.30  	cpu_online_map   = cpumask_of_cpu(0);
   85.31  }
   85.32 @@ -396,10 +392,8 @@ void __cpu_die(unsigned int cpu)
   85.33  
   85.34  	xen_smp_intr_exit(cpu);
   85.35  
   85.36 -#ifdef CONFIG_SMP_ALTERNATIVES
   85.37  	if (num_online_cpus() == 1)
   85.38 -		unprepare_for_smp();
   85.39 -#endif
   85.40 +		alternatives_smp_switch(0);
   85.41  }
   85.42  
   85.43  #else /* !CONFIG_HOTPLUG_CPU */
   85.44 @@ -424,10 +418,8 @@ int __devinit __cpu_up(unsigned int cpu)
   85.45  	if (rc)
   85.46  		return rc;
   85.47  
   85.48 -#ifdef CONFIG_SMP_ALTERNATIVES
   85.49  	if (num_online_cpus() == 1)
   85.50 -		prepare_for_smp();
   85.51 -#endif
   85.52 +		alternatives_smp_switch(1);
   85.53  
   85.54  	/* This must be done before setting cpu_online_map */
   85.55  	set_cpu_sibling_map(cpu