ia64/xen-unstable

changeset 13525:3adf00179a63

[linux] Update to linux-2.6.18.

Signed-off-by: Christian Limpach <Christian.Limpach@xensource.com>
author Christian Limpach <Christian.Limpach@xensource.com>
date Wed Jan 17 18:41:22 2007 +0000 (2007-01-17)
parents 5babd90037b8
children 3464bb656a9c
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/kernel/Makefile linux-2.6-xen-sparse/arch/i386/kernel/acpi/boot-xen.c linux-2.6-xen-sparse/arch/i386/kernel/alternative-xen.c linux-2.6-xen-sparse/arch/i386/kernel/apic-xen.c linux-2.6-xen-sparse/arch/i386/kernel/asm-offsets.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/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/ioport-xen.c linux-2.6-xen-sparse/arch/i386/kernel/irq-xen.c linux-2.6-xen-sparse/arch/i386/kernel/microcode-xen.c linux-2.6-xen-sparse/arch/i386/kernel/mpparse-xen.c linux-2.6-xen-sparse/arch/i386/kernel/pci-dma-xen.c linux-2.6-xen-sparse/arch/i386/kernel/process-xen.c linux-2.6-xen-sparse/arch/i386/kernel/quirks-xen.c linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c linux-2.6-xen-sparse/arch/i386/kernel/smp-xen.c linux-2.6-xen-sparse/arch/i386/kernel/smpboot.c linux-2.6-xen-sparse/arch/i386/kernel/sysenter.c linux-2.6-xen-sparse/arch/i386/kernel/time-xen.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/mach-xen/setup.c 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/irq-xen.c linux-2.6-xen-sparse/arch/ia64/Kconfig linux-2.6-xen-sparse/arch/ia64/dig/setup.c linux-2.6-xen-sparse/arch/ia64/kernel/Makefile linux-2.6-xen-sparse/arch/ia64/kernel/asm-offsets.c linux-2.6-xen-sparse/arch/ia64/kernel/entry.S linux-2.6-xen-sparse/arch/ia64/kernel/gate.S linux-2.6-xen-sparse/arch/ia64/kernel/gate.lds.S linux-2.6-xen-sparse/arch/ia64/kernel/head.S linux-2.6-xen-sparse/arch/ia64/kernel/iosapic.c linux-2.6-xen-sparse/arch/ia64/kernel/irq_ia64.c linux-2.6-xen-sparse/arch/ia64/kernel/pal.S 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/ia64/oprofile/perfmon.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/Makefile linux-2.6-xen-sparse/arch/x86_64/ia32/ia32entry-xen.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/asm-offsets.c linux-2.6-xen-sparse/arch/x86_64/kernel/crash.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/genapic-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/head64-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/init_task.c 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/pci-swiotlb-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/process-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/setup64-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/smp-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/traps-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/vsyscall-xen.c linux-2.6-xen-sparse/arch/x86_64/kernel/x8664_ksyms-xen.c linux-2.6-xen-sparse/arch/x86_64/mm/fault-xen.c linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c linux-2.6-xen-sparse/arch/x86_64/mm/pageattr-xen.c linux-2.6-xen-sparse/drivers/Makefile linux-2.6-xen-sparse/drivers/acpi/Kconfig linux-2.6-xen-sparse/drivers/char/mem.c linux-2.6-xen-sparse/drivers/char/tpm/tpm.c linux-2.6-xen-sparse/drivers/char/tty_io.c linux-2.6-xen-sparse/drivers/firmware/Kconfig linux-2.6-xen-sparse/drivers/serial/Kconfig linux-2.6-xen-sparse/drivers/video/Kconfig linux-2.6-xen-sparse/drivers/video/console/Kconfig linux-2.6-xen-sparse/drivers/xen/Kconfig linux-2.6-xen-sparse/drivers/xen/blkfront/block.h linux-2.6-xen-sparse/drivers/xen/blkfront/vbd.c linux-2.6-xen-sparse/drivers/xen/blktap/blktap.c linux-2.6-xen-sparse/drivers/xen/char/mem.c linux-2.6-xen-sparse/drivers/xen/console/console.c linux-2.6-xen-sparse/drivers/xen/core/Makefile linux-2.6-xen-sparse/drivers/xen/core/cpu_hotplug.c linux-2.6-xen-sparse/drivers/xen/core/evtchn.c linux-2.6-xen-sparse/drivers/xen/core/skbuff.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/fs/Kconfig linux-2.6-xen-sparse/include/asm-i386/apic.h linux-2.6-xen-sparse/include/asm-i386/elf.h linux-2.6-xen-sparse/include/asm-i386/fixmap.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/fixmap.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/floppy.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/highmem.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/hw_irq.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/irqflags.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/kmap_types.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/mmu.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/mmu_context.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/param.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/pci.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/pgalloc.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/mach-xen/asm/tlbflush.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/vga.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/setup_arch.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/setup_arch_post.h linux-2.6-xen-sparse/include/asm-i386/mach-xen/setup_arch_pre.h linux-2.6-xen-sparse/include/asm-i386/page.h linux-2.6-xen-sparse/include/asm-ia64/dma-mapping.h linux-2.6-xen-sparse/include/asm-ia64/hw_irq.h linux-2.6-xen-sparse/include/asm-ia64/io.h linux-2.6-xen-sparse/include/asm-ia64/irq.h linux-2.6-xen-sparse/include/asm-ia64/machvec.h linux-2.6-xen-sparse/include/asm-ia64/meminit.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/pgalloc.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/apic.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/dma-mapping.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/fixmap.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/floppy.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/hw_irq.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/io.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/irqflags.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/nmi.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/page.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/pci.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/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/asm/tlbflush.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/vga.h linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/mach_timer.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/interrupt.h linux-2.6-xen-sparse/include/linux/kexec.h linux-2.6-xen-sparse/include/linux/mm.h linux-2.6-xen-sparse/include/linux/skbuff.h linux-2.6-xen-sparse/include/xen/pcifront.h linux-2.6-xen-sparse/kernel/fork.c linux-2.6-xen-sparse/kernel/irq/spurious.c linux-2.6-xen-sparse/kernel/kexec.c linux-2.6-xen-sparse/kernel/timer.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.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 patches/linux-2.6.18/blktap-aio-16_03_06.patch patches/linux-2.6.18/fix-ide-cd-pio-mode.patch patches/linux-2.6.18/fixaddr-top.patch patches/linux-2.6.18/git-3566561bfadffcb5dbc85d576be80c0dbf2cccc9.patch patches/linux-2.6.18/git-4bfaaef01a1badb9e8ffb0c0a37cd2379008d21f.patch patches/linux-2.6.18/git-dbaab49f92ff6ae6255762a948375e4036cbdbd2.patch patches/linux-2.6.18/i386-mach-io-check-nmi.patch patches/linux-2.6.18/ipv6-no-autoconf.patch patches/linux-2.6.18/linux-2.6.19-rc1-kexec-move_segment_code-i386.patch patches/linux-2.6.18/linux-2.6.19-rc1-kexec-move_segment_code-x86_64.patch patches/linux-2.6.18/net-csum.patch patches/linux-2.6.18/net-gso-5-rcv-mss.patch patches/linux-2.6.18/net-gso-6-linear-segmentation.patch patches/linux-2.6.18/pmd-shared.patch patches/linux-2.6.18/rename-TSS_sysenter_esp0-SYSENTER_stack_esp0.patch patches/linux-2.6.18/series patches/linux-2.6.18/x86-elfnote-as-preprocessor-macro.patch patches/linux-2.6.18/x86-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch patches/linux-2.6.18/x86_64-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch patches/linux-2.6.18/xen-hotplug.patch patches/linux-2.6.18/xenoprof-generic.patch
line diff
     1.1 --- a/buildconfigs/linux-defconfig_xen0_x86_32	Fri Jan 12 15:32:03 2007 +0000
     1.2 +++ b/buildconfigs/linux-defconfig_xen0_x86_32	Wed Jan 17 18:41:22 2007 +0000
     1.3 @@ -1,9 +1,12 @@
     1.4  #
     1.5  # Automatically generated make config: don't edit
     1.6 -# Linux kernel version: 2.6.17-xen0
     1.7 -# Thu Jan 11 10:23:10 2007
     1.8 +# Linux kernel version: 2.6.18-xen0
     1.9 +# Wed Jan 17 18:35:52 2007
    1.10  #
    1.11  CONFIG_X86_32=y
    1.12 +CONFIG_GENERIC_TIME=y
    1.13 +CONFIG_LOCKDEP_SUPPORT=y
    1.14 +CONFIG_STACKTRACE_SUPPORT=y
    1.15  CONFIG_SEMAPHORE_SLEEPERS=y
    1.16  CONFIG_X86=y
    1.17  CONFIG_MMU=y
    1.18 @@ -12,12 +15,13 @@ CONFIG_GENERIC_IOMAP=y
    1.19  CONFIG_GENERIC_HWEIGHT=y
    1.20  CONFIG_ARCH_MAY_HAVE_PC_FDC=y
    1.21  CONFIG_DMI=y
    1.22 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
    1.23  
    1.24  #
    1.25  # Code maturity level options
    1.26  #
    1.27  CONFIG_EXPERIMENTAL=y
    1.28 -CONFIG_BROKEN_ON_SMP=y
    1.29 +CONFIG_LOCK_KERNEL=y
    1.30  CONFIG_INIT_ENV_ARG_LIMIT=32
    1.31  
    1.32  #
    1.33 @@ -29,15 +33,16 @@ CONFIG_SWAP=y
    1.34  CONFIG_SYSVIPC=y
    1.35  # CONFIG_POSIX_MQUEUE is not set
    1.36  # CONFIG_BSD_PROCESS_ACCT is not set
    1.37 -CONFIG_SYSCTL=y
    1.38 +# CONFIG_TASKSTATS is not set
    1.39  # CONFIG_AUDIT is not set
    1.40  # CONFIG_IKCONFIG is not set
    1.41 +# CONFIG_CPUSETS is not set
    1.42  # CONFIG_RELAY is not set
    1.43  CONFIG_INITRAMFS_SOURCE=""
    1.44 -CONFIG_UID16=y
    1.45 -CONFIG_VM86=y
    1.46  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
    1.47  # CONFIG_EMBEDDED is not set
    1.48 +CONFIG_UID16=y
    1.49 +CONFIG_SYSCTL=y
    1.50  CONFIG_KALLSYMS=y
    1.51  # CONFIG_KALLSYMS_ALL is not set
    1.52  # CONFIG_KALLSYMS_EXTRA_PASS is not set
    1.53 @@ -50,6 +55,8 @@ CONFIG_FUTEX=y
    1.54  CONFIG_EPOLL=y
    1.55  CONFIG_SHMEM=y
    1.56  CONFIG_SLAB=y
    1.57 +CONFIG_VM_EVENT_COUNTERS=y
    1.58 +CONFIG_RT_MUTEXES=y
    1.59  # CONFIG_TINY_SHMEM is not set
    1.60  CONFIG_BASE_SMALL=0
    1.61  # CONFIG_SLOB is not set
    1.62 @@ -63,6 +70,7 @@ CONFIG_MODULE_UNLOAD=y
    1.63  # CONFIG_MODVERSIONS is not set
    1.64  # CONFIG_MODULE_SRCVERSION_ALL is not set
    1.65  CONFIG_KMOD=y
    1.66 +CONFIG_STOP_MACHINE=y
    1.67  
    1.68  #
    1.69  # Block layer
    1.70 @@ -87,7 +95,7 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
    1.71  #
    1.72  # Processor type and features
    1.73  #
    1.74 -# CONFIG_SMP is not set
    1.75 +CONFIG_SMP=y
    1.76  # CONFIG_X86_PC is not set
    1.77  CONFIG_X86_XEN=y
    1.78  # CONFIG_X86_ELAN is not set
    1.79 @@ -135,13 +143,14 @@ CONFIG_X86_CMPXCHG64=y
    1.80  CONFIG_X86_GOOD_APIC=y
    1.81  CONFIG_X86_USE_PPRO_CHECKSUM=y
    1.82  CONFIG_X86_TSC=y
    1.83 +CONFIG_NR_CPUS=8
    1.84  CONFIG_PREEMPT_NONE=y
    1.85  # CONFIG_PREEMPT_VOLUNTARY is not set
    1.86  # CONFIG_PREEMPT is not set
    1.87 -CONFIG_X86_UP_APIC=y
    1.88 -CONFIG_X86_UP_IOAPIC=y
    1.89 +CONFIG_PREEMPT_BKL=y
    1.90  CONFIG_X86_LOCAL_APIC=y
    1.91  CONFIG_X86_IO_APIC=y
    1.92 +CONFIG_VM86=y
    1.93  # CONFIG_TOSHIBA is not set
    1.94  # CONFIG_I8K is not set
    1.95  # CONFIG_X86_REBOOTFIXUPS is not set
    1.96 @@ -167,6 +176,7 @@ CONFIG_FLATMEM=y
    1.97  CONFIG_FLAT_NODE_MEM_MAP=y
    1.98  # CONFIG_SPARSEMEM_STATIC is not set
    1.99  CONFIG_SPLIT_PTLOCK_CPUS=4096
   1.100 +CONFIG_RESOURCES_64BIT=y
   1.101  CONFIG_MTRR=y
   1.102  # CONFIG_REGPARM is not set
   1.103  CONFIG_SECCOMP=y
   1.104 @@ -177,6 +187,8 @@ CONFIG_HZ=100
   1.105  CONFIG_KEXEC=y
   1.106  # CONFIG_CRASH_DUMP is not set
   1.107  CONFIG_PHYSICAL_START=0x100000
   1.108 +# CONFIG_HOTPLUG_CPU is not set
   1.109 +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
   1.110  
   1.111  #
   1.112  # Power management options (ACPI, APM)
   1.113 @@ -193,11 +205,11 @@ CONFIG_ACPI_BUTTON=m
   1.114  CONFIG_ACPI_VIDEO=m
   1.115  CONFIG_ACPI_HOTKEY=m
   1.116  CONFIG_ACPI_FAN=m
   1.117 +CONFIG_ACPI_DOCK=m
   1.118  CONFIG_ACPI_PROCESSOR=m
   1.119  CONFIG_ACPI_THERMAL=m
   1.120  CONFIG_ACPI_ASUS=m
   1.121  CONFIG_ACPI_IBM=m
   1.122 -# CONFIG_ACPI_IBM_DOCK is not set
   1.123  CONFIG_ACPI_TOSHIBA=m
   1.124  # CONFIG_ACPI_CUSTOM_DSDT is not set
   1.125  CONFIG_ACPI_BLACKLIST_YEAR=0
   1.126 @@ -229,6 +241,7 @@ CONFIG_XEN_PCIDEV_FRONTEND=y
   1.127  # CONFIG_PCI_DEBUG is not set
   1.128  CONFIG_ISA_DMA_API=y
   1.129  # CONFIG_SCx200 is not set
   1.130 +CONFIG_K8_NB=y
   1.131  
   1.132  #
   1.133  # PCCARD (PCMCIA/CardBus) support
   1.134 @@ -259,6 +272,8 @@ CONFIG_NET=y
   1.135  CONFIG_PACKET=y
   1.136  # CONFIG_PACKET_MMAP is not set
   1.137  CONFIG_UNIX=y
   1.138 +CONFIG_XFRM=y
   1.139 +# CONFIG_XFRM_USER is not set
   1.140  # CONFIG_NET_KEY is not set
   1.141  CONFIG_INET=y
   1.142  # CONFIG_IP_MULTICAST is not set
   1.143 @@ -277,6 +292,8 @@ CONFIG_IP_PNP_DHCP=y
   1.144  # CONFIG_INET_IPCOMP is not set
   1.145  # CONFIG_INET_XFRM_TUNNEL is not set
   1.146  # CONFIG_INET_TUNNEL is not set
   1.147 +CONFIG_INET_XFRM_MODE_TRANSPORT=y
   1.148 +CONFIG_INET_XFRM_MODE_TUNNEL=y
   1.149  # CONFIG_INET_DIAG is not set
   1.150  # CONFIG_TCP_CONG_ADVANCED is not set
   1.151  CONFIG_TCP_CONG_BIC=y
   1.152 @@ -288,6 +305,7 @@ CONFIG_TCP_CONG_BIC=y
   1.153  # CONFIG_IPV6 is not set
   1.154  # CONFIG_INET6_XFRM_TUNNEL is not set
   1.155  # CONFIG_INET6_TUNNEL is not set
   1.156 +# CONFIG_NETWORK_SECMARK is not set
   1.157  CONFIG_NETFILTER=y
   1.158  # CONFIG_NETFILTER_DEBUG is not set
   1.159  CONFIG_BRIDGE_NETFILTER=y
   1.160 @@ -313,6 +331,7 @@ CONFIG_IP_NF_FTP=m
   1.161  # CONFIG_IP_NF_AMANDA is not set
   1.162  # CONFIG_IP_NF_PPTP is not set
   1.163  # CONFIG_IP_NF_H323 is not set
   1.164 +# CONFIG_IP_NF_SIP is not set
   1.165  # CONFIG_IP_NF_QUEUE is not set
   1.166  
   1.167  #
   1.168 @@ -344,7 +363,6 @@ CONFIG_LLC=y
   1.169  # CONFIG_ATALK is not set
   1.170  # CONFIG_X25 is not set
   1.171  # CONFIG_LAPB is not set
   1.172 -# CONFIG_NET_DIVERT is not set
   1.173  # CONFIG_ECONET is not set
   1.174  # CONFIG_WAN_ROUTER is not set
   1.175  
   1.176 @@ -373,6 +391,7 @@ CONFIG_LLC=y
   1.177  CONFIG_PREVENT_FIRMWARE_BUILD=y
   1.178  # CONFIG_FW_LOADER is not set
   1.179  # CONFIG_DEBUG_DRIVER is not set
   1.180 +# CONFIG_SYS_HYPERVISOR is not set
   1.181  
   1.182  #
   1.183  # Connector - unified userspace <-> kernelspace linker
   1.184 @@ -418,6 +437,7 @@ CONFIG_BLK_DEV_LOOP=y
   1.185  CONFIG_BLK_DEV_RAM=y
   1.186  CONFIG_BLK_DEV_RAM_COUNT=16
   1.187  CONFIG_BLK_DEV_RAM_SIZE=4096
   1.188 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
   1.189  CONFIG_BLK_DEV_INITRD=y
   1.190  # CONFIG_CDROM_PKTCDVD is not set
   1.191  # CONFIG_ATA_OVER_ETH is not set
   1.192 @@ -554,6 +574,7 @@ CONFIG_SCSI_ATA_PIIX=y
   1.193  # CONFIG_SCSI_SATA_MV is not set
   1.194  # CONFIG_SCSI_SATA_NV is not set
   1.195  # CONFIG_SCSI_PDC_ADMA is not set
   1.196 +# CONFIG_SCSI_HPTIOP is not set
   1.197  # CONFIG_SCSI_SATA_QSTOR is not set
   1.198  CONFIG_SCSI_SATA_PROMISE=y
   1.199  CONFIG_SCSI_SATA_SX4=y
   1.200 @@ -591,9 +612,7 @@ CONFIG_BLK_DEV_MD=y
   1.201  CONFIG_MD_RAID0=y
   1.202  CONFIG_MD_RAID1=y
   1.203  # CONFIG_MD_RAID10 is not set
   1.204 -CONFIG_MD_RAID5=y
   1.205 -# CONFIG_MD_RAID5_RESHAPE is not set
   1.206 -# CONFIG_MD_RAID6 is not set
   1.207 +# CONFIG_MD_RAID456 is not set
   1.208  # CONFIG_MD_MULTIPATH is not set
   1.209  # CONFIG_MD_FAULTY is not set
   1.210  CONFIG_BLK_DEV_DM=y
   1.211 @@ -693,6 +712,7 @@ CONFIG_8139TOO_PIO=y
   1.212  # CONFIG_TLAN is not set
   1.213  CONFIG_VIA_RHINE=y
   1.214  # CONFIG_VIA_RHINE_MMIO is not set
   1.215 +# CONFIG_VIA_RHINE_NAPI is not set
   1.216  
   1.217  #
   1.218  # Ethernet (1000 Mbit)
   1.219 @@ -721,6 +741,7 @@ CONFIG_TIGON3=y
   1.220  # CONFIG_CHELSIO_T1 is not set
   1.221  # CONFIG_IXGB is not set
   1.222  # CONFIG_S2IO is not set
   1.223 +# CONFIG_MYRI10GE is not set
   1.224  
   1.225  #
   1.226  # Token Ring devices
   1.227 @@ -808,6 +829,7 @@ CONFIG_SERIO_LIBPS2=y
   1.228  CONFIG_VT=y
   1.229  CONFIG_VT_CONSOLE=y
   1.230  CONFIG_HW_CONSOLE=y
   1.231 +CONFIG_VT_HW_CONSOLE_BINDING=y
   1.232  # CONFIG_SERIAL_NONSTANDARD is not set
   1.233  
   1.234  #
   1.235 @@ -843,7 +865,6 @@ CONFIG_LEGACY_PTY_COUNT=256
   1.236  #
   1.237  # Ftape, the floppy tape device driver
   1.238  #
   1.239 -# CONFIG_FTAPE is not set
   1.240  CONFIG_AGP=m
   1.241  CONFIG_AGP_ALI=m
   1.242  CONFIG_AGP_ATI=m
   1.243 @@ -867,6 +888,8 @@ CONFIG_DRM_SIS=m
   1.244  # CONFIG_DRM_VIA is not set
   1.245  # CONFIG_DRM_SAVAGE is not set
   1.246  # CONFIG_MWAVE is not set
   1.247 +# CONFIG_PC8736x_GPIO is not set
   1.248 +# CONFIG_NSC_GPIO is not set
   1.249  # CONFIG_CS5535_GPIO is not set
   1.250  # CONFIG_RAW_DRIVER is not set
   1.251  # CONFIG_HPET is not set
   1.252 @@ -892,7 +915,6 @@ CONFIG_DRM_SIS=m
   1.253  #
   1.254  # Dallas's 1-wire bus
   1.255  #
   1.256 -# CONFIG_W1 is not set
   1.257  
   1.258  #
   1.259  # Hardware Monitoring support
   1.260 @@ -920,8 +942,8 @@ CONFIG_VIDEO_V4L2=y
   1.261  #
   1.262  # Graphics support
   1.263  #
   1.264 +CONFIG_FIRMWARE_EDID=y
   1.265  # CONFIG_FB is not set
   1.266 -# CONFIG_VIDEO_SELECT is not set
   1.267  
   1.268  #
   1.269  # Console display driver support
   1.270 @@ -929,6 +951,7 @@ CONFIG_VIDEO_V4L2=y
   1.271  CONFIG_VGA_CONSOLE=y
   1.272  # CONFIG_VGACON_SOFT_SCROLLBACK is not set
   1.273  CONFIG_DUMMY_CONSOLE=y
   1.274 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
   1.275  
   1.276  #
   1.277  # Sound
   1.278 @@ -1036,10 +1059,12 @@ CONFIG_USB_MON=y
   1.279  # CONFIG_USB_LEGOTOWER is not set
   1.280  # CONFIG_USB_LCD is not set
   1.281  # CONFIG_USB_LED is not set
   1.282 +# CONFIG_USB_CYPRESS_CY7C63 is not set
   1.283  # CONFIG_USB_CYTHERM is not set
   1.284  # CONFIG_USB_PHIDGETKIT is not set
   1.285  # CONFIG_USB_PHIDGETSERVO is not set
   1.286  # CONFIG_USB_IDMOUSE is not set
   1.287 +# CONFIG_USB_APPLEDISPLAY is not set
   1.288  # CONFIG_USB_LD is not set
   1.289  
   1.290  #
   1.291 @@ -1091,12 +1116,29 @@ CONFIG_RTC_CLASS=m
   1.292  CONFIG_RTC_INTF_SYSFS=m
   1.293  CONFIG_RTC_INTF_PROC=m
   1.294  CONFIG_RTC_INTF_DEV=m
   1.295 +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
   1.296  
   1.297  #
   1.298  # RTC drivers
   1.299  #
   1.300 +# CONFIG_RTC_DRV_DS1553 is not set
   1.301 +# CONFIG_RTC_DRV_DS1742 is not set
   1.302  CONFIG_RTC_DRV_M48T86=m
   1.303  CONFIG_RTC_DRV_TEST=m
   1.304 +# CONFIG_RTC_DRV_V3020 is not set
   1.305 +
   1.306 +#
   1.307 +# DMA Engine support
   1.308 +#
   1.309 +# CONFIG_DMA_ENGINE is not set
   1.310 +
   1.311 +#
   1.312 +# DMA Clients
   1.313 +#
   1.314 +
   1.315 +#
   1.316 +# DMA Devices
   1.317 +#
   1.318  
   1.319  #
   1.320  # File systems
   1.321 @@ -1122,6 +1164,7 @@ CONFIG_REISERFS_FS=y
   1.322  # CONFIG_MINIX_FS is not set
   1.323  # CONFIG_ROMFS_FS is not set
   1.324  CONFIG_INOTIFY=y
   1.325 +CONFIG_INOTIFY_USER=y
   1.326  # CONFIG_QUOTA is not set
   1.327  CONFIG_DNOTIFY=y
   1.328  CONFIG_AUTOFS_FS=y
   1.329 @@ -1262,20 +1305,28 @@ CONFIG_NLS_ISO8859_1=y
   1.330  #
   1.331  # Kernel hacking
   1.332  #
   1.333 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
   1.334  # CONFIG_PRINTK_TIME is not set
   1.335  CONFIG_MAGIC_SYSRQ=y
   1.336 +CONFIG_UNUSED_SYMBOLS=y
   1.337  CONFIG_DEBUG_KERNEL=y
   1.338  CONFIG_LOG_BUF_SHIFT=14
   1.339  CONFIG_DETECT_SOFTLOCKUP=y
   1.340  # CONFIG_SCHEDSTATS is not set
   1.341  # CONFIG_DEBUG_SLAB is not set
   1.342 -# CONFIG_DEBUG_MUTEXES is not set
   1.343 +# CONFIG_DEBUG_RT_MUTEXES is not set
   1.344 +# CONFIG_RT_MUTEX_TESTER is not set
   1.345  # CONFIG_DEBUG_SPINLOCK is not set
   1.346 +# CONFIG_DEBUG_MUTEXES is not set
   1.347 +# CONFIG_DEBUG_RWSEMS is not set
   1.348 +# CONFIG_DEBUG_LOCK_ALLOC is not set
   1.349 +# CONFIG_PROVE_LOCKING is not set
   1.350  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
   1.351 +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
   1.352  # CONFIG_DEBUG_KOBJECT is not set
   1.353  # CONFIG_DEBUG_HIGHMEM is not set
   1.354  CONFIG_DEBUG_BUGVERBOSE=y
   1.355 -# CONFIG_DEBUG_INFO is not set
   1.356 +CONFIG_DEBUG_INFO=y
   1.357  # CONFIG_DEBUG_FS is not set
   1.358  # CONFIG_DEBUG_VM is not set
   1.359  CONFIG_FRAME_POINTER=y
   1.360 @@ -1285,7 +1336,6 @@ CONFIG_FORCED_INLINING=y
   1.361  CONFIG_EARLY_PRINTK=y
   1.362  # CONFIG_DEBUG_STACKOVERFLOW is not set
   1.363  # CONFIG_DEBUG_STACK_USAGE is not set
   1.364 -CONFIG_STACK_BACKTRACE_COLS=2
   1.365  # CONFIG_DEBUG_PAGEALLOC is not set
   1.366  # CONFIG_DEBUG_RODATA is not set
   1.367  # CONFIG_4KSTACKS is not set
   1.368 @@ -1369,8 +1419,8 @@ CONFIG_NO_IDLE_HZ=y
   1.369  CONFIG_XEN_UTIL=y
   1.370  CONFIG_XEN_BALLOON=y
   1.371  CONFIG_XEN_DEVMEM=y
   1.372 -CONFIG_XEN_SKBUFF=y
   1.373  CONFIG_XEN_REBOOT=y
   1.374 +CONFIG_XEN_SMPBOOT=y
   1.375  
   1.376  #
   1.377  # Library routines
   1.378 @@ -1380,9 +1430,13 @@ CONFIG_XEN_REBOOT=y
   1.379  CONFIG_CRC32=y
   1.380  CONFIG_LIBCRC32C=y
   1.381  CONFIG_ZLIB_INFLATE=y
   1.382 +CONFIG_PLIST=y
   1.383  CONFIG_GENERIC_HARDIRQS=y
   1.384  CONFIG_GENERIC_IRQ_PROBE=y
   1.385 +CONFIG_GENERIC_PENDING_IRQ=y
   1.386 +CONFIG_X86_SMP=y
   1.387  CONFIG_X86_BIOS_REBOOT=y
   1.388 +CONFIG_X86_TRAMPOLINE=y
   1.389  CONFIG_X86_NO_TSS=y
   1.390  CONFIG_X86_NO_IDT=y
   1.391  CONFIG_KTIME_SCALAR=y
     2.1 --- a/buildconfigs/linux-defconfig_xen0_x86_64	Fri Jan 12 15:32:03 2007 +0000
     2.2 +++ b/buildconfigs/linux-defconfig_xen0_x86_64	Wed Jan 17 18:41:22 2007 +0000
     2.3 @@ -1,11 +1,13 @@
     2.4  #
     2.5  # Automatically generated make config: don't edit
     2.6 -# Linux kernel version: 2.6.17-xen0
     2.7 -# Thu Jan 11 09:46:03 2007
     2.8 +# Linux kernel version: 2.6.18-xen0
     2.9 +# Wed Jan 17 18:26:35 2007
    2.10  #
    2.11  CONFIG_X86_64=y
    2.12  CONFIG_64BIT=y
    2.13  CONFIG_X86=y
    2.14 +CONFIG_LOCKDEP_SUPPORT=y
    2.15 +CONFIG_STACKTRACE_SUPPORT=y
    2.16  CONFIG_SEMAPHORE_SLEEPERS=y
    2.17  CONFIG_MMU=y
    2.18  CONFIG_RWSEM_GENERIC_SPINLOCK=y
    2.19 @@ -17,6 +19,8 @@ CONFIG_GENERIC_ISA_DMA=y
    2.20  CONFIG_GENERIC_IOMAP=y
    2.21  CONFIG_ARCH_MAY_HAVE_PC_FDC=y
    2.22  CONFIG_DMI=y
    2.23 +CONFIG_AUDIT_ARCH=y
    2.24 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
    2.25  
    2.26  #
    2.27  # Code maturity level options
    2.28 @@ -34,15 +38,15 @@ CONFIG_SWAP=y
    2.29  CONFIG_SYSVIPC=y
    2.30  # CONFIG_POSIX_MQUEUE is not set
    2.31  # CONFIG_BSD_PROCESS_ACCT is not set
    2.32 -CONFIG_SYSCTL=y
    2.33 +# CONFIG_TASKSTATS is not set
    2.34  # CONFIG_AUDIT is not set
    2.35  # CONFIG_IKCONFIG is not set
    2.36  # CONFIG_RELAY is not set
    2.37  CONFIG_INITRAMFS_SOURCE=""
    2.38 -CONFIG_UID16=y
    2.39 -CONFIG_VM86=y
    2.40  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
    2.41  # CONFIG_EMBEDDED is not set
    2.42 +CONFIG_UID16=y
    2.43 +CONFIG_SYSCTL=y
    2.44  CONFIG_KALLSYMS=y
    2.45  # CONFIG_KALLSYMS_ALL is not set
    2.46  # CONFIG_KALLSYMS_EXTRA_PASS is not set
    2.47 @@ -55,6 +59,8 @@ CONFIG_FUTEX=y
    2.48  CONFIG_EPOLL=y
    2.49  CONFIG_SHMEM=y
    2.50  CONFIG_SLAB=y
    2.51 +CONFIG_VM_EVENT_COUNTERS=y
    2.52 +CONFIG_RT_MUTEXES=y
    2.53  # CONFIG_TINY_SHMEM is not set
    2.54  CONFIG_BASE_SMALL=0
    2.55  # CONFIG_SLOB is not set
    2.56 @@ -124,6 +130,9 @@ CONFIG_FLATMEM=y
    2.57  CONFIG_FLAT_NODE_MEM_MAP=y
    2.58  # CONFIG_SPARSEMEM_STATIC is not set
    2.59  CONFIG_SPLIT_PTLOCK_CPUS=4096
    2.60 +CONFIG_RESOURCES_64BIT=y
    2.61 +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
    2.62 +# CONFIG_CALGARY_IOMMU is not set
    2.63  CONFIG_SWIOTLB=y
    2.64  CONFIG_KEXEC=y
    2.65  # CONFIG_CRASH_DUMP is not set
    2.66 @@ -134,6 +143,7 @@ CONFIG_HZ_100=y
    2.67  # CONFIG_HZ_1000 is not set
    2.68  CONFIG_HZ=100
    2.69  # CONFIG_REORDER is not set
    2.70 +CONFIG_K8_NB=y
    2.71  CONFIG_GENERIC_HARDIRQS=y
    2.72  CONFIG_GENERIC_IRQ_PROBE=y
    2.73  CONFIG_ISA_DMA_API=y
    2.74 @@ -153,11 +163,11 @@ CONFIG_ACPI_BUTTON=m
    2.75  CONFIG_ACPI_VIDEO=m
    2.76  # CONFIG_ACPI_HOTKEY is not set
    2.77  CONFIG_ACPI_FAN=m
    2.78 +CONFIG_ACPI_DOCK=m
    2.79  CONFIG_ACPI_PROCESSOR=m
    2.80  CONFIG_ACPI_THERMAL=m
    2.81  CONFIG_ACPI_ASUS=m
    2.82  CONFIG_ACPI_IBM=m
    2.83 -# CONFIG_ACPI_IBM_DOCK is not set
    2.84  CONFIG_ACPI_TOSHIBA=m
    2.85  CONFIG_ACPI_BLACKLIST_YEAR=0
    2.86  # CONFIG_ACPI_DEBUG is not set
    2.87 @@ -165,7 +175,6 @@ CONFIG_ACPI_EC=y
    2.88  CONFIG_ACPI_POWER=y
    2.89  CONFIG_ACPI_SYSTEM=y
    2.90  # CONFIG_ACPI_CONTAINER is not set
    2.91 -CONFIG_ACPI_HOTPLUG_MEMORY=m
    2.92  
    2.93  #
    2.94  # CPU Frequency scaling
    2.95 @@ -233,6 +242,8 @@ CONFIG_IP_PNP_DHCP=y
    2.96  # CONFIG_INET_IPCOMP is not set
    2.97  # CONFIG_INET_XFRM_TUNNEL is not set
    2.98  # CONFIG_INET_TUNNEL is not set
    2.99 +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
   2.100 +# CONFIG_INET_XFRM_MODE_TUNNEL is not set
   2.101  # CONFIG_INET_DIAG is not set
   2.102  # CONFIG_TCP_CONG_ADVANCED is not set
   2.103  CONFIG_TCP_CONG_BIC=y
   2.104 @@ -244,6 +255,7 @@ CONFIG_TCP_CONG_BIC=y
   2.105  # CONFIG_IPV6 is not set
   2.106  # CONFIG_INET6_XFRM_TUNNEL is not set
   2.107  # CONFIG_INET6_TUNNEL is not set
   2.108 +# CONFIG_NETWORK_SECMARK is not set
   2.109  CONFIG_NETFILTER=y
   2.110  # CONFIG_NETFILTER_DEBUG is not set
   2.111  CONFIG_BRIDGE_NETFILTER=y
   2.112 @@ -269,6 +281,7 @@ CONFIG_IP_NF_FTP=m
   2.113  # CONFIG_IP_NF_AMANDA is not set
   2.114  # CONFIG_IP_NF_PPTP is not set
   2.115  # CONFIG_IP_NF_H323 is not set
   2.116 +# CONFIG_IP_NF_SIP is not set
   2.117  # CONFIG_IP_NF_QUEUE is not set
   2.118  
   2.119  #
   2.120 @@ -300,7 +313,6 @@ CONFIG_LLC=y
   2.121  # CONFIG_ATALK is not set
   2.122  # CONFIG_X25 is not set
   2.123  # CONFIG_LAPB is not set
   2.124 -# CONFIG_NET_DIVERT is not set
   2.125  # CONFIG_ECONET is not set
   2.126  # CONFIG_WAN_ROUTER is not set
   2.127  
   2.128 @@ -329,6 +341,7 @@ CONFIG_STANDALONE=y
   2.129  # CONFIG_PREVENT_FIRMWARE_BUILD is not set
   2.130  # CONFIG_FW_LOADER is not set
   2.131  # CONFIG_DEBUG_DRIVER is not set
   2.132 +# CONFIG_SYS_HYPERVISOR is not set
   2.133  
   2.134  #
   2.135  # Connector - unified userspace <-> kernelspace linker
   2.136 @@ -374,6 +387,7 @@ CONFIG_BLK_DEV_LOOP=y
   2.137  CONFIG_BLK_DEV_RAM=y
   2.138  CONFIG_BLK_DEV_RAM_COUNT=16
   2.139  CONFIG_BLK_DEV_RAM_SIZE=16384
   2.140 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
   2.141  CONFIG_BLK_DEV_INITRD=y
   2.142  # CONFIG_CDROM_PKTCDVD is not set
   2.143  # CONFIG_ATA_OVER_ETH is not set
   2.144 @@ -471,7 +485,7 @@ CONFIG_BLK_DEV_SD=y
   2.145  #
   2.146  CONFIG_SCSI_SPI_ATTRS=y
   2.147  # CONFIG_SCSI_FC_ATTRS is not set
   2.148 -# CONFIG_SCSI_ISCSI_ATTRS is not set
   2.149 +CONFIG_SCSI_ISCSI_ATTRS=y
   2.150  # CONFIG_SCSI_SAS_ATTRS is not set
   2.151  
   2.152  #
   2.153 @@ -509,6 +523,7 @@ CONFIG_SCSI_ATA_PIIX=y
   2.154  # CONFIG_SCSI_SATA_MV is not set
   2.155  # CONFIG_SCSI_SATA_NV is not set
   2.156  # CONFIG_SCSI_PDC_ADMA is not set
   2.157 +# CONFIG_SCSI_HPTIOP is not set
   2.158  # CONFIG_SCSI_SATA_QSTOR is not set
   2.159  CONFIG_SCSI_SATA_PROMISE=y
   2.160  CONFIG_SCSI_SATA_SX4=y
   2.161 @@ -546,8 +561,8 @@ CONFIG_MD_LINEAR=y
   2.162  CONFIG_MD_RAID0=y
   2.163  CONFIG_MD_RAID1=y
   2.164  # CONFIG_MD_RAID10 is not set
   2.165 -# CONFIG_MD_RAID5 is not set
   2.166 -# CONFIG_MD_RAID6 is not set
   2.167 +CONFIG_MD_RAID456=y
   2.168 +# CONFIG_MD_RAID5_RESHAPE is not set
   2.169  CONFIG_MD_MULTIPATH=y
   2.170  # CONFIG_MD_FAULTY is not set
   2.171  CONFIG_BLK_DEV_DM=y
   2.172 @@ -647,6 +662,7 @@ CONFIG_8139TOO_PIO=y
   2.173  # CONFIG_SUNDANCE is not set
   2.174  CONFIG_VIA_RHINE=y
   2.175  # CONFIG_VIA_RHINE_MMIO is not set
   2.176 +# CONFIG_VIA_RHINE_NAPI is not set
   2.177  
   2.178  #
   2.179  # Ethernet (1000 Mbit)
   2.180 @@ -675,6 +691,7 @@ CONFIG_TIGON3=y
   2.181  # CONFIG_CHELSIO_T1 is not set
   2.182  # CONFIG_IXGB is not set
   2.183  # CONFIG_S2IO is not set
   2.184 +# CONFIG_MYRI10GE is not set
   2.185  
   2.186  #
   2.187  # Token Ring devices
   2.188 @@ -762,6 +779,7 @@ CONFIG_SERIO_LIBPS2=y
   2.189  CONFIG_VT=y
   2.190  CONFIG_VT_CONSOLE=y
   2.191  CONFIG_HW_CONSOLE=y
   2.192 +# CONFIG_VT_HW_CONSOLE_BINDING is not set
   2.193  # CONFIG_SERIAL_NONSTANDARD is not set
   2.194  
   2.195  #
   2.196 @@ -810,6 +828,7 @@ CONFIG_DRM_SIS=m
   2.197  # CONFIG_DRM_VIA is not set
   2.198  # CONFIG_DRM_SAVAGE is not set
   2.199  # CONFIG_MWAVE is not set
   2.200 +# CONFIG_PC8736x_GPIO is not set
   2.201  # CONFIG_RAW_DRIVER is not set
   2.202  # CONFIG_HPET is not set
   2.203  # CONFIG_HANGCHECK_TIMER is not set
   2.204 @@ -834,7 +853,6 @@ CONFIG_DRM_SIS=m
   2.205  #
   2.206  # Dallas's 1-wire bus
   2.207  #
   2.208 -# CONFIG_W1 is not set
   2.209  
   2.210  #
   2.211  # Hardware Monitoring support
   2.212 @@ -862,8 +880,8 @@ CONFIG_VIDEO_V4L2=y
   2.213  #
   2.214  # Graphics support
   2.215  #
   2.216 +CONFIG_FIRMWARE_EDID=y
   2.217  # CONFIG_FB is not set
   2.218 -# CONFIG_VIDEO_SELECT is not set
   2.219  
   2.220  #
   2.221  # Console display driver support
   2.222 @@ -871,6 +889,7 @@ CONFIG_VIDEO_V4L2=y
   2.223  CONFIG_VGA_CONSOLE=y
   2.224  # CONFIG_VGACON_SOFT_SCROLLBACK is not set
   2.225  CONFIG_DUMMY_CONSOLE=y
   2.226 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
   2.227  
   2.228  #
   2.229  # Sound
   2.230 @@ -978,10 +997,12 @@ CONFIG_USB_MON=y
   2.231  # CONFIG_USB_LEGOTOWER is not set
   2.232  # CONFIG_USB_LCD is not set
   2.233  # CONFIG_USB_LED is not set
   2.234 +# CONFIG_USB_CYPRESS_CY7C63 is not set
   2.235  # CONFIG_USB_CYTHERM is not set
   2.236  # CONFIG_USB_PHIDGETKIT is not set
   2.237  # CONFIG_USB_PHIDGETSERVO is not set
   2.238  # CONFIG_USB_IDMOUSE is not set
   2.239 +# CONFIG_USB_APPLEDISPLAY is not set
   2.240  # CONFIG_USB_LD is not set
   2.241  
   2.242  #
   2.243 @@ -1014,6 +1035,7 @@ CONFIG_LEDS_CLASS=m
   2.244  CONFIG_LEDS_TRIGGERS=y
   2.245  CONFIG_LEDS_TRIGGER_TIMER=y
   2.246  CONFIG_LEDS_TRIGGER_IDE_DISK=y
   2.247 +CONFIG_LEDS_TRIGGER_HEARTBEAT=y
   2.248  
   2.249  #
   2.250  # InfiniBand support
   2.251 @@ -1021,12 +1043,14 @@ CONFIG_LEDS_TRIGGER_IDE_DISK=y
   2.252  CONFIG_INFINIBAND=y
   2.253  # CONFIG_INFINIBAND_USER_MAD is not set
   2.254  # CONFIG_INFINIBAND_USER_ACCESS is not set
   2.255 +CONFIG_INFINIBAND_ADDR_TRANS=y
   2.256  CONFIG_INFINIBAND_MTHCA=y
   2.257  CONFIG_INFINIBAND_MTHCA_DEBUG=y
   2.258  CONFIG_INFINIBAND_IPOIB=y
   2.259  CONFIG_INFINIBAND_IPOIB_DEBUG=y
   2.260  CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y
   2.261  CONFIG_INFINIBAND_SRP=y
   2.262 +CONFIG_INFINIBAND_ISER=y
   2.263  
   2.264  #
   2.265  # EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
   2.266 @@ -1045,12 +1069,29 @@ CONFIG_RTC_CLASS=m
   2.267  CONFIG_RTC_INTF_SYSFS=m
   2.268  CONFIG_RTC_INTF_PROC=m
   2.269  CONFIG_RTC_INTF_DEV=m
   2.270 +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
   2.271  
   2.272  #
   2.273  # RTC drivers
   2.274  #
   2.275 +CONFIG_RTC_DRV_DS1553=m
   2.276 +CONFIG_RTC_DRV_DS1742=m
   2.277  CONFIG_RTC_DRV_M48T86=m
   2.278  CONFIG_RTC_DRV_TEST=m
   2.279 +CONFIG_RTC_DRV_V3020=m
   2.280 +
   2.281 +#
   2.282 +# DMA Engine support
   2.283 +#
   2.284 +# CONFIG_DMA_ENGINE is not set
   2.285 +
   2.286 +#
   2.287 +# DMA Clients
   2.288 +#
   2.289 +
   2.290 +#
   2.291 +# DMA Devices
   2.292 +#
   2.293  
   2.294  #
   2.295  # Firmware Drivers
   2.296 @@ -1082,6 +1123,7 @@ CONFIG_REISERFS_FS=y
   2.297  # CONFIG_MINIX_FS is not set
   2.298  # CONFIG_ROMFS_FS is not set
   2.299  CONFIG_INOTIFY=y
   2.300 +CONFIG_INOTIFY_USER=y
   2.301  # CONFIG_QUOTA is not set
   2.302  CONFIG_DNOTIFY=y
   2.303  CONFIG_AUTOFS_FS=y
   2.304 @@ -1222,16 +1264,24 @@ CONFIG_NLS_ISO8859_1=y
   2.305  #
   2.306  # Kernel hacking
   2.307  #
   2.308 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
   2.309  # CONFIG_PRINTK_TIME is not set
   2.310  CONFIG_MAGIC_SYSRQ=y
   2.311 +CONFIG_UNUSED_SYMBOLS=y
   2.312  CONFIG_DEBUG_KERNEL=y
   2.313  CONFIG_LOG_BUF_SHIFT=15
   2.314  CONFIG_DETECT_SOFTLOCKUP=y
   2.315  # CONFIG_SCHEDSTATS is not set
   2.316  # CONFIG_DEBUG_SLAB is not set
   2.317 -# CONFIG_DEBUG_MUTEXES is not set
   2.318 +# CONFIG_DEBUG_RT_MUTEXES is not set
   2.319 +# CONFIG_RT_MUTEX_TESTER is not set
   2.320  # CONFIG_DEBUG_SPINLOCK is not set
   2.321 +# CONFIG_DEBUG_MUTEXES is not set
   2.322 +# CONFIG_DEBUG_RWSEMS is not set
   2.323 +# CONFIG_DEBUG_LOCK_ALLOC is not set
   2.324 +# CONFIG_PROVE_LOCKING is not set
   2.325  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
   2.326 +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
   2.327  # CONFIG_DEBUG_KOBJECT is not set
   2.328  # CONFIG_DEBUG_INFO is not set
   2.329  # CONFIG_DEBUG_FS is not set
   2.330 @@ -1241,6 +1291,8 @@ CONFIG_FRAME_POINTER=y
   2.331  CONFIG_FORCED_INLINING=y
   2.332  # CONFIG_RCU_TORTURE_TEST is not set
   2.333  # CONFIG_DEBUG_RODATA is not set
   2.334 +# CONFIG_DEBUG_STACKOVERFLOW is not set
   2.335 +# CONFIG_DEBUG_STACK_USAGE is not set
   2.336  
   2.337  #
   2.338  # Security options
   2.339 @@ -1318,7 +1370,6 @@ CONFIG_NO_IDLE_HZ=y
   2.340  CONFIG_XEN_UTIL=y
   2.341  CONFIG_XEN_BALLOON=y
   2.342  CONFIG_XEN_DEVMEM=y
   2.343 -CONFIG_XEN_SKBUFF=y
   2.344  CONFIG_XEN_REBOOT=y
   2.345  
   2.346  #
   2.347 @@ -1329,3 +1380,4 @@ CONFIG_XEN_REBOOT=y
   2.348  CONFIG_CRC32=y
   2.349  CONFIG_LIBCRC32C=m
   2.350  CONFIG_ZLIB_INFLATE=y
   2.351 +CONFIG_PLIST=y
     3.1 --- a/buildconfigs/linux-defconfig_xenU_x86_32	Fri Jan 12 15:32:03 2007 +0000
     3.2 +++ b/buildconfigs/linux-defconfig_xenU_x86_32	Wed Jan 17 18:41:22 2007 +0000
     3.3 @@ -1,9 +1,12 @@
     3.4  #
     3.5  # Automatically generated make config: don't edit
     3.6 -# Linux kernel version: 2.6.17-xenU
     3.7 -# Thu Jan 11 10:26:13 2007
     3.8 +# Linux kernel version: 2.6.18-xenU
     3.9 +# Wed Jan 17 18:36:21 2007
    3.10  #
    3.11  CONFIG_X86_32=y
    3.12 +CONFIG_GENERIC_TIME=y
    3.13 +CONFIG_LOCKDEP_SUPPORT=y
    3.14 +CONFIG_STACKTRACE_SUPPORT=y
    3.15  CONFIG_SEMAPHORE_SLEEPERS=y
    3.16  CONFIG_X86=y
    3.17  CONFIG_MMU=y
    3.18 @@ -12,6 +15,7 @@ CONFIG_GENERIC_IOMAP=y
    3.19  CONFIG_GENERIC_HWEIGHT=y
    3.20  CONFIG_ARCH_MAY_HAVE_PC_FDC=y
    3.21  CONFIG_DMI=y
    3.22 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
    3.23  
    3.24  #
    3.25  # Code maturity level options
    3.26 @@ -29,16 +33,16 @@ CONFIG_SWAP=y
    3.27  CONFIG_SYSVIPC=y
    3.28  # CONFIG_POSIX_MQUEUE is not set
    3.29  # CONFIG_BSD_PROCESS_ACCT is not set
    3.30 -CONFIG_SYSCTL=y
    3.31 +# CONFIG_TASKSTATS is not set
    3.32  # CONFIG_AUDIT is not set
    3.33  # CONFIG_IKCONFIG is not set
    3.34  # CONFIG_CPUSETS is not set
    3.35  # CONFIG_RELAY is not set
    3.36  CONFIG_INITRAMFS_SOURCE=""
    3.37 -CONFIG_UID16=y
    3.38 -CONFIG_VM86=y
    3.39  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
    3.40  # CONFIG_EMBEDDED is not set
    3.41 +CONFIG_UID16=y
    3.42 +CONFIG_SYSCTL=y
    3.43  CONFIG_KALLSYMS=y
    3.44  # CONFIG_KALLSYMS_ALL is not set
    3.45  # CONFIG_KALLSYMS_EXTRA_PASS is not set
    3.46 @@ -51,6 +55,8 @@ CONFIG_FUTEX=y
    3.47  CONFIG_EPOLL=y
    3.48  CONFIG_SHMEM=y
    3.49  CONFIG_SLAB=y
    3.50 +CONFIG_VM_EVENT_COUNTERS=y
    3.51 +CONFIG_RT_MUTEXES=y
    3.52  # CONFIG_TINY_SHMEM is not set
    3.53  CONFIG_BASE_SMALL=0
    3.54  # CONFIG_SLOB is not set
    3.55 @@ -138,11 +144,11 @@ CONFIG_X86_GOOD_APIC=y
    3.56  CONFIG_X86_USE_PPRO_CHECKSUM=y
    3.57  CONFIG_X86_TSC=y
    3.58  CONFIG_NR_CPUS=8
    3.59 -# CONFIG_SCHED_MC is not set
    3.60  CONFIG_PREEMPT_NONE=y
    3.61  # CONFIG_PREEMPT_VOLUNTARY is not set
    3.62  # CONFIG_PREEMPT is not set
    3.63  CONFIG_PREEMPT_BKL=y
    3.64 +CONFIG_VM86=y
    3.65  # CONFIG_TOSHIBA is not set
    3.66  # CONFIG_I8K is not set
    3.67  # CONFIG_X86_REBOOTFIXUPS is not set
    3.68 @@ -167,6 +173,7 @@ CONFIG_FLATMEM=y
    3.69  CONFIG_FLAT_NODE_MEM_MAP=y
    3.70  # CONFIG_SPARSEMEM_STATIC is not set
    3.71  CONFIG_SPLIT_PTLOCK_CPUS=4096
    3.72 +CONFIG_RESOURCES_64BIT=y
    3.73  # CONFIG_REGPARM is not set
    3.74  CONFIG_SECCOMP=y
    3.75  CONFIG_HZ_100=y
    3.76 @@ -175,7 +182,8 @@ CONFIG_HZ_100=y
    3.77  CONFIG_HZ=100
    3.78  # CONFIG_CRASH_DUMP is not set
    3.79  CONFIG_PHYSICAL_START=0x100000
    3.80 -CONFIG_HOTPLUG_CPU=y
    3.81 +# CONFIG_HOTPLUG_CPU is not set
    3.82 +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
    3.83  
    3.84  #
    3.85  # Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    3.86 @@ -212,6 +220,8 @@ CONFIG_NET=y
    3.87  CONFIG_PACKET=y
    3.88  # CONFIG_PACKET_MMAP is not set
    3.89  CONFIG_UNIX=y
    3.90 +CONFIG_XFRM=y
    3.91 +# CONFIG_XFRM_USER is not set
    3.92  # CONFIG_NET_KEY is not set
    3.93  CONFIG_INET=y
    3.94  # CONFIG_IP_MULTICAST is not set
    3.95 @@ -230,12 +240,15 @@ CONFIG_IP_PNP=y
    3.96  # CONFIG_INET_IPCOMP is not set
    3.97  # CONFIG_INET_XFRM_TUNNEL is not set
    3.98  # CONFIG_INET_TUNNEL is not set
    3.99 +CONFIG_INET_XFRM_MODE_TRANSPORT=y
   3.100 +CONFIG_INET_XFRM_MODE_TUNNEL=y
   3.101  # CONFIG_INET_DIAG is not set
   3.102  # CONFIG_TCP_CONG_ADVANCED is not set
   3.103  CONFIG_TCP_CONG_BIC=y
   3.104  # CONFIG_IPV6 is not set
   3.105  # CONFIG_INET6_XFRM_TUNNEL is not set
   3.106  # CONFIG_INET6_TUNNEL is not set
   3.107 +# CONFIG_NETWORK_SECMARK is not set
   3.108  # CONFIG_NETFILTER is not set
   3.109  
   3.110  #
   3.111 @@ -261,7 +274,6 @@ CONFIG_TCP_CONG_BIC=y
   3.112  # CONFIG_ATALK is not set
   3.113  # CONFIG_X25 is not set
   3.114  # CONFIG_LAPB is not set
   3.115 -# CONFIG_NET_DIVERT is not set
   3.116  # CONFIG_ECONET is not set
   3.117  # CONFIG_WAN_ROUTER is not set
   3.118  
   3.119 @@ -290,6 +302,7 @@ CONFIG_STANDALONE=y
   3.120  CONFIG_PREVENT_FIRMWARE_BUILD=y
   3.121  # CONFIG_FW_LOADER is not set
   3.122  # CONFIG_DEBUG_DRIVER is not set
   3.123 +# CONFIG_SYS_HYPERVISOR is not set
   3.124  
   3.125  #
   3.126  # Connector - unified userspace <-> kernelspace linker
   3.127 @@ -321,6 +334,7 @@ CONFIG_BLK_DEV_NBD=m
   3.128  CONFIG_BLK_DEV_RAM=y
   3.129  CONFIG_BLK_DEV_RAM_COUNT=16
   3.130  CONFIG_BLK_DEV_RAM_SIZE=4096
   3.131 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
   3.132  CONFIG_BLK_DEV_INITRD=y
   3.133  # CONFIG_CDROM_PKTCDVD is not set
   3.134  # CONFIG_ATA_OVER_ETH is not set
   3.135 @@ -490,6 +504,7 @@ CONFIG_SERIO_SERPORT=y
   3.136  CONFIG_VT=y
   3.137  CONFIG_VT_CONSOLE=y
   3.138  CONFIG_HW_CONSOLE=y
   3.139 +# CONFIG_VT_HW_CONSOLE_BINDING is not set
   3.140  # CONFIG_SERIAL_NONSTANDARD is not set
   3.141  
   3.142  #
   3.143 @@ -512,6 +527,8 @@ CONFIG_LEGACY_PTY_COUNT=256
   3.144  # Watchdog Cards
   3.145  #
   3.146  # CONFIG_WATCHDOG is not set
   3.147 +CONFIG_HW_RANDOM=y
   3.148 +CONFIG_HW_RANDOM_VIA=y
   3.149  # CONFIG_NVRAM is not set
   3.150  # CONFIG_RTC is not set
   3.151  # CONFIG_GEN_RTC is not set
   3.152 @@ -521,8 +538,9 @@ CONFIG_LEGACY_PTY_COUNT=256
   3.153  #
   3.154  # Ftape, the floppy tape device driver
   3.155  #
   3.156 -# CONFIG_AGP is not set
   3.157  # CONFIG_MWAVE is not set
   3.158 +# CONFIG_PC8736x_GPIO is not set
   3.159 +# CONFIG_NSC_GPIO is not set
   3.160  # CONFIG_CS5535_GPIO is not set
   3.161  # CONFIG_RAW_DRIVER is not set
   3.162  # CONFIG_HANGCHECK_TIMER is not set
   3.163 @@ -547,7 +565,6 @@ CONFIG_LEGACY_PTY_COUNT=256
   3.164  #
   3.165  # Dallas's 1-wire bus
   3.166  #
   3.167 -# CONFIG_W1 is not set
   3.168  
   3.169  #
   3.170  # Hardware Monitoring support
   3.171 @@ -573,8 +590,8 @@ CONFIG_VIDEO_V4L2=y
   3.172  #
   3.173  # Graphics support
   3.174  #
   3.175 +CONFIG_FIRMWARE_EDID=y
   3.176  # CONFIG_FB is not set
   3.177 -# CONFIG_VIDEO_SELECT is not set
   3.178  
   3.179  #
   3.180  # Console display driver support
   3.181 @@ -582,6 +599,7 @@ CONFIG_VIDEO_V4L2=y
   3.182  CONFIG_VGA_CONSOLE=y
   3.183  # CONFIG_VGACON_SOFT_SCROLLBACK is not set
   3.184  CONFIG_DUMMY_CONSOLE=y
   3.185 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
   3.186  
   3.187  #
   3.188  # Sound
   3.189 @@ -637,6 +655,19 @@ CONFIG_DUMMY_CONSOLE=y
   3.190  # CONFIG_RTC_CLASS is not set
   3.191  
   3.192  #
   3.193 +# DMA Engine support
   3.194 +#
   3.195 +# CONFIG_DMA_ENGINE is not set
   3.196 +
   3.197 +#
   3.198 +# DMA Clients
   3.199 +#
   3.200 +
   3.201 +#
   3.202 +# DMA Devices
   3.203 +#
   3.204 +
   3.205 +#
   3.206  # File systems
   3.207  #
   3.208  CONFIG_EXT2_FS=y
   3.209 @@ -660,6 +691,7 @@ CONFIG_REISERFS_FS=y
   3.210  # CONFIG_MINIX_FS is not set
   3.211  # CONFIG_ROMFS_FS is not set
   3.212  CONFIG_INOTIFY=y
   3.213 +CONFIG_INOTIFY_USER=y
   3.214  # CONFIG_QUOTA is not set
   3.215  CONFIG_DNOTIFY=y
   3.216  CONFIG_AUTOFS_FS=y
   3.217 @@ -795,20 +827,28 @@ CONFIG_NLS_ISO8859_1=y
   3.218  #
   3.219  # Kernel hacking
   3.220  #
   3.221 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
   3.222  # CONFIG_PRINTK_TIME is not set
   3.223  CONFIG_MAGIC_SYSRQ=y
   3.224 +CONFIG_UNUSED_SYMBOLS=y
   3.225  CONFIG_DEBUG_KERNEL=y
   3.226  CONFIG_LOG_BUF_SHIFT=14
   3.227  CONFIG_DETECT_SOFTLOCKUP=y
   3.228  # CONFIG_SCHEDSTATS is not set
   3.229  # CONFIG_DEBUG_SLAB is not set
   3.230 -# CONFIG_DEBUG_MUTEXES is not set
   3.231 +# CONFIG_DEBUG_RT_MUTEXES is not set
   3.232 +# CONFIG_RT_MUTEX_TESTER is not set
   3.233  # CONFIG_DEBUG_SPINLOCK is not set
   3.234 +# CONFIG_DEBUG_MUTEXES is not set
   3.235 +# CONFIG_DEBUG_RWSEMS is not set
   3.236 +# CONFIG_DEBUG_LOCK_ALLOC is not set
   3.237 +# CONFIG_PROVE_LOCKING is not set
   3.238  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
   3.239 +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
   3.240  # CONFIG_DEBUG_KOBJECT is not set
   3.241  # CONFIG_DEBUG_HIGHMEM is not set
   3.242  CONFIG_DEBUG_BUGVERBOSE=y
   3.243 -# CONFIG_DEBUG_INFO is not set
   3.244 +CONFIG_DEBUG_INFO=y
   3.245  # CONFIG_DEBUG_FS is not set
   3.246  # CONFIG_DEBUG_VM is not set
   3.247  CONFIG_FRAME_POINTER=y
   3.248 @@ -818,7 +858,6 @@ CONFIG_FORCED_INLINING=y
   3.249  CONFIG_EARLY_PRINTK=y
   3.250  # CONFIG_DEBUG_STACKOVERFLOW is not set
   3.251  # CONFIG_DEBUG_STACK_USAGE is not set
   3.252 -CONFIG_STACK_BACKTRACE_COLS=2
   3.253  # CONFIG_DEBUG_PAGEALLOC is not set
   3.254  # CONFIG_DEBUG_RODATA is not set
   3.255  # CONFIG_4KSTACKS is not set
   3.256 @@ -889,7 +928,6 @@ CONFIG_NO_IDLE_HZ=y
   3.257  CONFIG_XEN_UTIL=y
   3.258  CONFIG_XEN_BALLOON=y
   3.259  CONFIG_XEN_DEVMEM=y
   3.260 -CONFIG_XEN_SKBUFF=y
   3.261  CONFIG_XEN_REBOOT=y
   3.262  CONFIG_XEN_SMPBOOT=y
   3.263  
   3.264 @@ -901,6 +939,7 @@ CONFIG_XEN_SMPBOOT=y
   3.265  # CONFIG_CRC32 is not set
   3.266  CONFIG_LIBCRC32C=m
   3.267  CONFIG_ZLIB_INFLATE=y
   3.268 +CONFIG_PLIST=y
   3.269  CONFIG_GENERIC_HARDIRQS=y
   3.270  CONFIG_GENERIC_IRQ_PROBE=y
   3.271  CONFIG_GENERIC_PENDING_IRQ=y
     4.1 --- a/buildconfigs/linux-defconfig_xenU_x86_64	Fri Jan 12 15:32:03 2007 +0000
     4.2 +++ b/buildconfigs/linux-defconfig_xenU_x86_64	Wed Jan 17 18:41:22 2007 +0000
     4.3 @@ -1,11 +1,13 @@
     4.4  #
     4.5  # Automatically generated make config: don't edit
     4.6 -# Linux kernel version: 2.6.17-xenU
     4.7 -# Thu Jan 11 10:17:30 2007
     4.8 +# Linux kernel version: 2.6.18-xenU
     4.9 +# Wed Jan 17 18:28:53 2007
    4.10  #
    4.11  CONFIG_X86_64=y
    4.12  CONFIG_64BIT=y
    4.13  CONFIG_X86=y
    4.14 +CONFIG_LOCKDEP_SUPPORT=y
    4.15 +CONFIG_STACKTRACE_SUPPORT=y
    4.16  CONFIG_SEMAPHORE_SLEEPERS=y
    4.17  CONFIG_MMU=y
    4.18  CONFIG_RWSEM_GENERIC_SPINLOCK=y
    4.19 @@ -17,6 +19,8 @@ CONFIG_GENERIC_ISA_DMA=y
    4.20  CONFIG_GENERIC_IOMAP=y
    4.21  CONFIG_ARCH_MAY_HAVE_PC_FDC=y
    4.22  CONFIG_DMI=y
    4.23 +CONFIG_AUDIT_ARCH=y
    4.24 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
    4.25  
    4.26  #
    4.27  # Code maturity level options
    4.28 @@ -35,17 +39,17 @@ CONFIG_SYSVIPC=y
    4.29  CONFIG_POSIX_MQUEUE=y
    4.30  CONFIG_BSD_PROCESS_ACCT=y
    4.31  # CONFIG_BSD_PROCESS_ACCT_V3 is not set
    4.32 -CONFIG_SYSCTL=y
    4.33 +# CONFIG_TASKSTATS is not set
    4.34  CONFIG_AUDIT=y
    4.35  CONFIG_AUDITSYSCALL=y
    4.36  # CONFIG_IKCONFIG is not set
    4.37  # CONFIG_CPUSETS is not set
    4.38  # CONFIG_RELAY is not set
    4.39  CONFIG_INITRAMFS_SOURCE=""
    4.40 -CONFIG_UID16=y
    4.41 -CONFIG_VM86=y
    4.42  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
    4.43  # CONFIG_EMBEDDED is not set
    4.44 +CONFIG_UID16=y
    4.45 +CONFIG_SYSCTL=y
    4.46  CONFIG_KALLSYMS=y
    4.47  # CONFIG_KALLSYMS_ALL is not set
    4.48  CONFIG_KALLSYMS_EXTRA_PASS=y
    4.49 @@ -58,6 +62,8 @@ CONFIG_FUTEX=y
    4.50  CONFIG_EPOLL=y
    4.51  CONFIG_SHMEM=y
    4.52  CONFIG_SLAB=y
    4.53 +CONFIG_VM_EVENT_COUNTERS=y
    4.54 +CONFIG_RT_MUTEXES=y
    4.55  # CONFIG_TINY_SHMEM is not set
    4.56  CONFIG_BASE_SMALL=0
    4.57  # CONFIG_SLOB is not set
    4.58 @@ -113,7 +119,6 @@ CONFIG_X86_GOOD_APIC=y
    4.59  CONFIG_X86_CPUID=y
    4.60  CONFIG_X86_XEN_GENAPIC=y
    4.61  CONFIG_SMP=y
    4.62 -# CONFIG_SCHED_MC is not set
    4.63  CONFIG_PREEMPT_NONE=y
    4.64  # CONFIG_PREEMPT_VOLUNTARY is not set
    4.65  # CONFIG_PREEMPT is not set
    4.66 @@ -127,8 +132,10 @@ CONFIG_FLATMEM=y
    4.67  CONFIG_FLAT_NODE_MEM_MAP=y
    4.68  # CONFIG_SPARSEMEM_STATIC is not set
    4.69  CONFIG_SPLIT_PTLOCK_CPUS=4096
    4.70 -CONFIG_NR_CPUS=8
    4.71 -CONFIG_HOTPLUG_CPU=y
    4.72 +CONFIG_RESOURCES_64BIT=y
    4.73 +CONFIG_NR_CPUS=16
    4.74 +# CONFIG_HOTPLUG_CPU is not set
    4.75 +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
    4.76  CONFIG_SWIOTLB=y
    4.77  # CONFIG_CRASH_DUMP is not set
    4.78  CONFIG_PHYSICAL_START=0x200000
    4.79 @@ -210,6 +217,8 @@ CONFIG_INET_ESP=m
    4.80  CONFIG_INET_IPCOMP=m
    4.81  CONFIG_INET_XFRM_TUNNEL=m
    4.82  CONFIG_INET_TUNNEL=m
    4.83 +CONFIG_INET_XFRM_MODE_TRANSPORT=y
    4.84 +CONFIG_INET_XFRM_MODE_TUNNEL=y
    4.85  # CONFIG_INET_DIAG is not set
    4.86  # CONFIG_TCP_CONG_ADVANCED is not set
    4.87  CONFIG_TCP_CONG_BIC=y
    4.88 @@ -255,7 +264,10 @@ CONFIG_INET6_ESP=m
    4.89  CONFIG_INET6_IPCOMP=m
    4.90  CONFIG_INET6_XFRM_TUNNEL=m
    4.91  CONFIG_INET6_TUNNEL=m
    4.92 +CONFIG_INET6_XFRM_MODE_TRANSPORT=m
    4.93 +CONFIG_INET6_XFRM_MODE_TUNNEL=m
    4.94  CONFIG_IPV6_TUNNEL=m
    4.95 +# CONFIG_NETWORK_SECMARK is not set
    4.96  CONFIG_NETFILTER=y
    4.97  # CONFIG_NETFILTER_DEBUG is not set
    4.98  CONFIG_BRIDGE_NETFILTER=y
    4.99 @@ -281,6 +293,7 @@ CONFIG_IP_NF_TFTP=m
   4.100  CONFIG_IP_NF_AMANDA=m
   4.101  # CONFIG_IP_NF_PPTP is not set
   4.102  # CONFIG_IP_NF_H323 is not set
   4.103 +# CONFIG_IP_NF_SIP is not set
   4.104  CONFIG_IP_NF_QUEUE=m
   4.105  
   4.106  #
   4.107 @@ -346,13 +359,12 @@ CONFIG_LLC=m
   4.108  CONFIG_IPX=m
   4.109  # CONFIG_IPX_INTERN is not set
   4.110  CONFIG_ATALK=m
   4.111 -CONFIG_DEV_APPLETALK=y
   4.112 +CONFIG_DEV_APPLETALK=m
   4.113  CONFIG_IPDDP=m
   4.114  CONFIG_IPDDP_ENCAP=y
   4.115  CONFIG_IPDDP_DECAP=y
   4.116  # CONFIG_X25 is not set
   4.117  # CONFIG_LAPB is not set
   4.118 -CONFIG_NET_DIVERT=y
   4.119  # CONFIG_ECONET is not set
   4.120  CONFIG_WAN_ROUTER=m
   4.121  
   4.122 @@ -494,6 +506,7 @@ CONFIG_STANDALONE=y
   4.123  CONFIG_PREVENT_FIRMWARE_BUILD=y
   4.124  CONFIG_FW_LOADER=y
   4.125  # CONFIG_DEBUG_DRIVER is not set
   4.126 +# CONFIG_SYS_HYPERVISOR is not set
   4.127  
   4.128  #
   4.129  # Connector - unified userspace <-> kernelspace linker
   4.130 @@ -525,6 +538,7 @@ CONFIG_BLK_DEV_NBD=m
   4.131  CONFIG_BLK_DEV_RAM=y
   4.132  CONFIG_BLK_DEV_RAM_COUNT=16
   4.133  CONFIG_BLK_DEV_RAM_SIZE=16384
   4.134 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
   4.135  CONFIG_BLK_DEV_INITRD=y
   4.136  # CONFIG_CDROM_PKTCDVD is not set
   4.137  # CONFIG_ATA_OVER_ETH is not set
   4.138 @@ -583,9 +597,7 @@ CONFIG_MD_LINEAR=m
   4.139  CONFIG_MD_RAID0=m
   4.140  CONFIG_MD_RAID1=m
   4.141  CONFIG_MD_RAID10=m
   4.142 -CONFIG_MD_RAID5=m
   4.143 -# CONFIG_MD_RAID5_RESHAPE is not set
   4.144 -CONFIG_MD_RAID6=m
   4.145 +# CONFIG_MD_RAID456 is not set
   4.146  CONFIG_MD_MULTIPATH=m
   4.147  # CONFIG_MD_FAULTY is not set
   4.148  CONFIG_BLK_DEV_DM=m
   4.149 @@ -738,6 +750,7 @@ CONFIG_SERIO_LIBPS2=y
   4.150  CONFIG_VT=y
   4.151  CONFIG_VT_CONSOLE=y
   4.152  CONFIG_HW_CONSOLE=y
   4.153 +# CONFIG_VT_HW_CONSOLE_BINDING is not set
   4.154  # CONFIG_SERIAL_NONSTANDARD is not set
   4.155  
   4.156  #
   4.157 @@ -760,6 +773,7 @@ CONFIG_LEGACY_PTY_COUNT=256
   4.158  # Watchdog Cards
   4.159  #
   4.160  # CONFIG_WATCHDOG is not set
   4.161 +CONFIG_HW_RANDOM=y
   4.162  # CONFIG_NVRAM is not set
   4.163  # CONFIG_RTC is not set
   4.164  # CONFIG_GEN_RTC is not set
   4.165 @@ -769,8 +783,8 @@ CONFIG_LEGACY_PTY_COUNT=256
   4.166  #
   4.167  # Ftape, the floppy tape device driver
   4.168  #
   4.169 -# CONFIG_AGP is not set
   4.170  # CONFIG_MWAVE is not set
   4.171 +# CONFIG_PC8736x_GPIO is not set
   4.172  # CONFIG_RAW_DRIVER is not set
   4.173  # CONFIG_HANGCHECK_TIMER is not set
   4.174  
   4.175 @@ -794,7 +808,6 @@ CONFIG_LEGACY_PTY_COUNT=256
   4.176  #
   4.177  # Dallas's 1-wire bus
   4.178  #
   4.179 -# CONFIG_W1 is not set
   4.180  
   4.181  #
   4.182  # Hardware Monitoring support
   4.183 @@ -820,8 +833,8 @@ CONFIG_VIDEO_V4L2=y
   4.184  #
   4.185  # Graphics support
   4.186  #
   4.187 +CONFIG_FIRMWARE_EDID=y
   4.188  # CONFIG_FB is not set
   4.189 -# CONFIG_VIDEO_SELECT is not set
   4.190  
   4.191  #
   4.192  # Console display driver support
   4.193 @@ -829,6 +842,7 @@ CONFIG_VIDEO_V4L2=y
   4.194  CONFIG_VGA_CONSOLE=y
   4.195  # CONFIG_VGACON_SOFT_SCROLLBACK is not set
   4.196  CONFIG_DUMMY_CONSOLE=y
   4.197 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
   4.198  
   4.199  #
   4.200  # Sound
   4.201 @@ -884,6 +898,19 @@ CONFIG_DUMMY_CONSOLE=y
   4.202  # CONFIG_RTC_CLASS is not set
   4.203  
   4.204  #
   4.205 +# DMA Engine support
   4.206 +#
   4.207 +# CONFIG_DMA_ENGINE is not set
   4.208 +
   4.209 +#
   4.210 +# DMA Clients
   4.211 +#
   4.212 +
   4.213 +#
   4.214 +# DMA Devices
   4.215 +#
   4.216 +
   4.217 +#
   4.218  # Firmware Drivers
   4.219  #
   4.220  # CONFIG_DELL_RBU is not set
   4.221 @@ -917,7 +944,6 @@ CONFIG_JFS_POSIX_ACL=y
   4.222  # CONFIG_JFS_STATISTICS is not set
   4.223  CONFIG_FS_POSIX_ACL=y
   4.224  CONFIG_XFS_FS=m
   4.225 -CONFIG_XFS_EXPORT=y
   4.226  # CONFIG_XFS_QUOTA is not set
   4.227  CONFIG_XFS_SECURITY=y
   4.228  CONFIG_XFS_POSIX_ACL=y
   4.229 @@ -926,6 +952,7 @@ CONFIG_XFS_POSIX_ACL=y
   4.230  CONFIG_MINIX_FS=m
   4.231  CONFIG_ROMFS_FS=m
   4.232  CONFIG_INOTIFY=y
   4.233 +CONFIG_INOTIFY_USER=y
   4.234  CONFIG_QUOTA=y
   4.235  # CONFIG_QFMT_V1 is not set
   4.236  CONFIG_QFMT_V2=y
   4.237 @@ -983,6 +1010,8 @@ CONFIG_VXFS_FS=m
   4.238  CONFIG_QNX4FS_FS=m
   4.239  CONFIG_SYSV_FS=m
   4.240  CONFIG_UFS_FS=m
   4.241 +# CONFIG_UFS_FS_WRITE is not set
   4.242 +# CONFIG_UFS_DEBUG is not set
   4.243  
   4.244  #
   4.245  # Network File Systems
   4.246 @@ -1009,8 +1038,10 @@ CONFIG_SMB_FS=m
   4.247  # CONFIG_SMB_NLS_DEFAULT is not set
   4.248  CONFIG_CIFS=m
   4.249  # CONFIG_CIFS_STATS is not set
   4.250 +# CONFIG_CIFS_WEAK_PW_HASH is not set
   4.251  CONFIG_CIFS_XATTR=y
   4.252  CONFIG_CIFS_POSIX=y
   4.253 +# CONFIG_CIFS_DEBUG2 is not set
   4.254  # CONFIG_CIFS_EXPERIMENTAL is not set
   4.255  CONFIG_NCP_FS=m
   4.256  CONFIG_NCPFS_PACKET_SIGNING=y
   4.257 @@ -1099,18 +1130,26 @@ CONFIG_NLS_UTF8=m
   4.258  #
   4.259  # Kernel hacking
   4.260  #
   4.261 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
   4.262  # CONFIG_PRINTK_TIME is not set
   4.263  CONFIG_MAGIC_SYSRQ=y
   4.264 +CONFIG_UNUSED_SYMBOLS=y
   4.265  CONFIG_DEBUG_KERNEL=y
   4.266  CONFIG_LOG_BUF_SHIFT=15
   4.267  CONFIG_DETECT_SOFTLOCKUP=y
   4.268  # CONFIG_SCHEDSTATS is not set
   4.269  # CONFIG_DEBUG_SLAB is not set
   4.270 +# CONFIG_DEBUG_RT_MUTEXES is not set
   4.271 +# CONFIG_RT_MUTEX_TESTER is not set
   4.272 +# CONFIG_DEBUG_SPINLOCK is not set
   4.273  # CONFIG_DEBUG_MUTEXES is not set
   4.274 -# CONFIG_DEBUG_SPINLOCK is not set
   4.275 +# CONFIG_DEBUG_RWSEMS is not set
   4.276 +# CONFIG_DEBUG_LOCK_ALLOC is not set
   4.277 +# CONFIG_PROVE_LOCKING is not set
   4.278  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
   4.279 +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
   4.280  # CONFIG_DEBUG_KOBJECT is not set
   4.281 -# CONFIG_DEBUG_INFO is not set
   4.282 +CONFIG_DEBUG_INFO=y
   4.283  # CONFIG_DEBUG_FS is not set
   4.284  # CONFIG_DEBUG_VM is not set
   4.285  CONFIG_FRAME_POINTER=y
   4.286 @@ -1118,6 +1157,8 @@ CONFIG_FRAME_POINTER=y
   4.287  CONFIG_FORCED_INLINING=y
   4.288  # CONFIG_RCU_TORTURE_TEST is not set
   4.289  # CONFIG_DEBUG_RODATA is not set
   4.290 +# CONFIG_DEBUG_STACKOVERFLOW is not set
   4.291 +# CONFIG_DEBUG_STACK_USAGE is not set
   4.292  
   4.293  #
   4.294  # Security options
   4.295 @@ -1184,7 +1225,6 @@ CONFIG_NO_IDLE_HZ=y
   4.296  CONFIG_XEN_UTIL=y
   4.297  CONFIG_XEN_BALLOON=y
   4.298  CONFIG_XEN_DEVMEM=y
   4.299 -CONFIG_XEN_SKBUFF=y
   4.300  CONFIG_XEN_REBOOT=y
   4.301  CONFIG_XEN_SMPBOOT=y
   4.302  
   4.303 @@ -1197,3 +1237,6 @@ CONFIG_CRC32=y
   4.304  CONFIG_LIBCRC32C=m
   4.305  CONFIG_ZLIB_INFLATE=y
   4.306  CONFIG_ZLIB_DEFLATE=m
   4.307 +CONFIG_TEXTSEARCH=y
   4.308 +CONFIG_TEXTSEARCH_KMP=m
   4.309 +CONFIG_PLIST=y
     5.1 --- a/buildconfigs/linux-defconfig_xen_x86_32	Fri Jan 12 15:32:03 2007 +0000
     5.2 +++ b/buildconfigs/linux-defconfig_xen_x86_32	Wed Jan 17 18:41:22 2007 +0000
     5.3 @@ -1,9 +1,12 @@
     5.4  #
     5.5  # Automatically generated make config: don't edit
     5.6 -# Linux kernel version: 2.6.17-xen
     5.7 -# Thu Jan 11 10:45:59 2007
     5.8 +# Linux kernel version: 2.6.18-xen
     5.9 +# Wed Jan 17 18:39:50 2007
    5.10  #
    5.11  CONFIG_X86_32=y
    5.12 +CONFIG_GENERIC_TIME=y
    5.13 +CONFIG_LOCKDEP_SUPPORT=y
    5.14 +CONFIG_STACKTRACE_SUPPORT=y
    5.15  CONFIG_SEMAPHORE_SLEEPERS=y
    5.16  CONFIG_X86=y
    5.17  CONFIG_MMU=y
    5.18 @@ -12,6 +15,7 @@ CONFIG_GENERIC_IOMAP=y
    5.19  CONFIG_GENERIC_HWEIGHT=y
    5.20  CONFIG_ARCH_MAY_HAVE_PC_FDC=y
    5.21  CONFIG_DMI=y
    5.22 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
    5.23  
    5.24  #
    5.25  # Code maturity level options
    5.26 @@ -30,7 +34,8 @@ CONFIG_SYSVIPC=y
    5.27  CONFIG_POSIX_MQUEUE=y
    5.28  CONFIG_BSD_PROCESS_ACCT=y
    5.29  CONFIG_BSD_PROCESS_ACCT_V3=y
    5.30 -CONFIG_SYSCTL=y
    5.31 +CONFIG_TASKSTATS=y
    5.32 +CONFIG_TASK_DELAY_ACCT=y
    5.33  CONFIG_AUDIT=y
    5.34  CONFIG_AUDITSYSCALL=y
    5.35  CONFIG_IKCONFIG=y
    5.36 @@ -38,10 +43,10 @@ CONFIG_IKCONFIG_PROC=y
    5.37  CONFIG_CPUSETS=y
    5.38  # CONFIG_RELAY is not set
    5.39  CONFIG_INITRAMFS_SOURCE=""
    5.40 -CONFIG_UID16=y
    5.41 -CONFIG_VM86=y
    5.42  # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
    5.43  # CONFIG_EMBEDDED is not set
    5.44 +CONFIG_UID16=y
    5.45 +CONFIG_SYSCTL=y
    5.46  CONFIG_KALLSYMS=y
    5.47  # CONFIG_KALLSYMS_ALL is not set
    5.48  # CONFIG_KALLSYMS_EXTRA_PASS is not set
    5.49 @@ -54,10 +59,11 @@ CONFIG_FUTEX=y
    5.50  CONFIG_EPOLL=y
    5.51  CONFIG_SHMEM=y
    5.52  CONFIG_SLAB=y
    5.53 +CONFIG_VM_EVENT_COUNTERS=y
    5.54 +CONFIG_RT_MUTEXES=y
    5.55  # CONFIG_TINY_SHMEM is not set
    5.56  CONFIG_BASE_SMALL=0
    5.57  # CONFIG_SLOB is not set
    5.58 -CONFIG_OBSOLETE_INTERMODULE=m
    5.59  
    5.60  #
    5.61  # Loadable module support
    5.62 @@ -143,13 +149,13 @@ CONFIG_X86_INTEL_USERCOPY=y
    5.63  CONFIG_X86_USE_PPRO_CHECKSUM=y
    5.64  CONFIG_X86_TSC=y
    5.65  CONFIG_NR_CPUS=32
    5.66 -# CONFIG_SCHED_MC is not set
    5.67  # CONFIG_PREEMPT_NONE is not set
    5.68  CONFIG_PREEMPT_VOLUNTARY=y
    5.69  # CONFIG_PREEMPT is not set
    5.70  CONFIG_PREEMPT_BKL=y
    5.71  CONFIG_X86_LOCAL_APIC=y
    5.72  CONFIG_X86_IO_APIC=y
    5.73 +CONFIG_VM86=y
    5.74  # CONFIG_TOSHIBA is not set
    5.75  # CONFIG_I8K is not set
    5.76  # CONFIG_X86_REBOOTFIXUPS is not set
    5.77 @@ -175,6 +181,7 @@ CONFIG_FLATMEM=y
    5.78  CONFIG_FLAT_NODE_MEM_MAP=y
    5.79  # CONFIG_SPARSEMEM_STATIC is not set
    5.80  CONFIG_SPLIT_PTLOCK_CPUS=4096
    5.81 +CONFIG_RESOURCES_64BIT=y
    5.82  CONFIG_MTRR=y
    5.83  CONFIG_REGPARM=y
    5.84  CONFIG_SECCOMP=y
    5.85 @@ -186,6 +193,7 @@ CONFIG_KEXEC=y
    5.86  # CONFIG_CRASH_DUMP is not set
    5.87  CONFIG_PHYSICAL_START=0x100000
    5.88  CONFIG_HOTPLUG_CPU=y
    5.89 +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
    5.90  
    5.91  #
    5.92  # Power management options (ACPI, APM)
    5.93 @@ -202,12 +210,12 @@ CONFIG_ACPI_BUTTON=m
    5.94  CONFIG_ACPI_VIDEO=m
    5.95  CONFIG_ACPI_HOTKEY=m
    5.96  CONFIG_ACPI_FAN=m
    5.97 +CONFIG_ACPI_DOCK=m
    5.98  CONFIG_ACPI_PROCESSOR=m
    5.99  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 @@ -215,6 +223,7 @@ CONFIG_ACPI_EC=y
   5.108  CONFIG_ACPI_POWER=y
   5.109  CONFIG_ACPI_SYSTEM=y
   5.110  CONFIG_ACPI_CONTAINER=m
   5.111 +CONFIG_ACPI_SBS=m
   5.112  
   5.113  #
   5.114  # CPU Frequency scaling
   5.115 @@ -238,6 +247,8 @@ CONFIG_XEN_PCIDEV_FRONTEND=y
   5.116  # CONFIG_PCI_DEBUG is not set
   5.117  CONFIG_ISA_DMA_API=y
   5.118  CONFIG_SCx200=m
   5.119 +CONFIG_SCx200HR_TIMER=m
   5.120 +CONFIG_K8_NB=y
   5.121  
   5.122  #
   5.123  # PCCARD (PCMCIA/CardBus) support
   5.124 @@ -322,6 +333,8 @@ CONFIG_INET_ESP=m
   5.125  CONFIG_INET_IPCOMP=m
   5.126  CONFIG_INET_XFRM_TUNNEL=m
   5.127  CONFIG_INET_TUNNEL=m
   5.128 +CONFIG_INET_XFRM_MODE_TRANSPORT=m
   5.129 +CONFIG_INET_XFRM_MODE_TUNNEL=m
   5.130  CONFIG_INET_DIAG=m
   5.131  CONFIG_INET_TCP_DIAG=m
   5.132  CONFIG_TCP_CONG_ADVANCED=y
   5.133 @@ -337,6 +350,8 @@ CONFIG_TCP_CONG_HSTCP=m
   5.134  CONFIG_TCP_CONG_HYBLA=m
   5.135  CONFIG_TCP_CONG_VEGAS=m
   5.136  CONFIG_TCP_CONG_SCALABLE=m
   5.137 +CONFIG_TCP_CONG_LP=m
   5.138 +CONFIG_TCP_CONG_VENO=m
   5.139  
   5.140  #
   5.141  # IP: Virtual Server Configuration
   5.142 @@ -379,7 +394,10 @@ CONFIG_INET6_ESP=m
   5.143  CONFIG_INET6_IPCOMP=m
   5.144  CONFIG_INET6_XFRM_TUNNEL=m
   5.145  CONFIG_INET6_TUNNEL=m
   5.146 +CONFIG_INET6_XFRM_MODE_TRANSPORT=m
   5.147 +CONFIG_INET6_XFRM_MODE_TUNNEL=m
   5.148  CONFIG_IPV6_TUNNEL=m
   5.149 +CONFIG_NETWORK_SECMARK=y
   5.150  CONFIG_NETFILTER=y
   5.151  # CONFIG_NETFILTER_DEBUG is not set
   5.152  CONFIG_BRIDGE_NETFILTER=y
   5.153 @@ -396,6 +414,8 @@ CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
   5.154  CONFIG_NETFILTER_XT_TARGET_MARK=m
   5.155  CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
   5.156  CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
   5.157 +CONFIG_NETFILTER_XT_TARGET_SECMARK=m
   5.158 +# CONFIG_NETFILTER_XT_TARGET_CONNSECMARK is not set
   5.159  CONFIG_NETFILTER_XT_MATCH_COMMENT=m
   5.160  CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
   5.161  CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
   5.162 @@ -411,9 +431,11 @@ CONFIG_NETFILTER_XT_MATCH_POLICY=m
   5.163  CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
   5.164  CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
   5.165  CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
   5.166 +CONFIG_NETFILTER_XT_MATCH_QUOTA=m
   5.167  CONFIG_NETFILTER_XT_MATCH_REALM=m
   5.168  CONFIG_NETFILTER_XT_MATCH_SCTP=m
   5.169  CONFIG_NETFILTER_XT_MATCH_STATE=m
   5.170 +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
   5.171  CONFIG_NETFILTER_XT_MATCH_STRING=m
   5.172  CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
   5.173  
   5.174 @@ -423,6 +445,7 @@ CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
   5.175  CONFIG_IP_NF_CONNTRACK=m
   5.176  CONFIG_IP_NF_CT_ACCT=y
   5.177  CONFIG_IP_NF_CONNTRACK_MARK=y
   5.178 +CONFIG_IP_NF_CONNTRACK_SECMARK=y
   5.179  CONFIG_IP_NF_CONNTRACK_EVENTS=y
   5.180  CONFIG_IP_NF_CONNTRACK_NETLINK=m
   5.181  CONFIG_IP_NF_CT_PROTO_SCTP=m
   5.182 @@ -433,6 +456,7 @@ CONFIG_IP_NF_TFTP=m
   5.183  CONFIG_IP_NF_AMANDA=m
   5.184  CONFIG_IP_NF_PPTP=m
   5.185  CONFIG_IP_NF_H323=m
   5.186 +CONFIG_IP_NF_SIP=m
   5.187  CONFIG_IP_NF_QUEUE=m
   5.188  CONFIG_IP_NF_IPTABLES=m
   5.189  CONFIG_IP_NF_MATCH_IPRANGE=m
   5.190 @@ -463,6 +487,7 @@ CONFIG_IP_NF_NAT_TFTP=m
   5.191  CONFIG_IP_NF_NAT_AMANDA=m
   5.192  CONFIG_IP_NF_NAT_PPTP=m
   5.193  CONFIG_IP_NF_NAT_H323=m
   5.194 +CONFIG_IP_NF_NAT_SIP=m
   5.195  CONFIG_IP_NF_MANGLE=m
   5.196  CONFIG_IP_NF_TARGET_TOS=m
   5.197  CONFIG_IP_NF_TARGET_ECN=m
   5.198 @@ -573,13 +598,12 @@ CONFIG_LLC2=m
   5.199  CONFIG_IPX=m
   5.200  # CONFIG_IPX_INTERN is not set
   5.201  CONFIG_ATALK=m
   5.202 -CONFIG_DEV_APPLETALK=y
   5.203 +CONFIG_DEV_APPLETALK=m
   5.204  CONFIG_IPDDP=m
   5.205  CONFIG_IPDDP_ENCAP=y
   5.206  CONFIG_IPDDP_DECAP=y
   5.207  CONFIG_X25=m
   5.208  CONFIG_LAPB=m
   5.209 -# CONFIG_NET_DIVERT is not set
   5.210  CONFIG_ECONET=m
   5.211  CONFIG_ECONET_AUNUDP=y
   5.212  CONFIG_ECONET_NATIVE=y
   5.213 @@ -722,6 +746,7 @@ CONFIG_SMC_IRCC_FIR=m
   5.214  CONFIG_ALI_FIR=m
   5.215  CONFIG_VLSI_FIR=m
   5.216  CONFIG_VIA_FIR=m
   5.217 +CONFIG_MCS_FIR=m
   5.218  CONFIG_BT=m
   5.219  CONFIG_BT_L2CAP=m
   5.220  CONFIG_BT_SCO=m
   5.221 @@ -769,6 +794,7 @@ CONFIG_STANDALONE=y
   5.222  CONFIG_PREVENT_FIRMWARE_BUILD=y
   5.223  CONFIG_FW_LOADER=m
   5.224  # CONFIG_DEBUG_DRIVER is not set
   5.225 +# CONFIG_SYS_HYPERVISOR is not set
   5.226  
   5.227  #
   5.228  # Connector - unified userspace <-> kernelspace linker
   5.229 @@ -886,6 +912,7 @@ CONFIG_MTD_DOCPROBE_ADDRESS=0
   5.230  #
   5.231  CONFIG_MTD_NAND=m
   5.232  # CONFIG_MTD_NAND_VERIFY_WRITE is not set
   5.233 +# CONFIG_MTD_NAND_ECC_SMC is not set
   5.234  CONFIG_MTD_NAND_IDS=m
   5.235  CONFIG_MTD_NAND_DISKONCHIP=m
   5.236  # CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
   5.237 @@ -898,6 +925,7 @@ CONFIG_MTD_NAND_NANDSIM=m
   5.238  #
   5.239  CONFIG_MTD_ONENAND=m
   5.240  # CONFIG_MTD_ONENAND_VERIFY_WRITE is not set
   5.241 +# CONFIG_MTD_ONENAND_OTP is not set
   5.242  
   5.243  #
   5.244  # Parallel port support
   5.245 @@ -910,6 +938,7 @@ CONFIG_PARPORT_PC_SUPERIO=y
   5.246  CONFIG_PARPORT_PC_PCMCIA=m
   5.247  CONFIG_PARPORT_NOT_PC=y
   5.248  # CONFIG_PARPORT_GSC is not set
   5.249 +CONFIG_PARPORT_AX88796=m
   5.250  CONFIG_PARPORT_1284=y
   5.251  
   5.252  #
   5.253 @@ -972,6 +1001,7 @@ CONFIG_BLK_DEV_SX8=m
   5.254  CONFIG_BLK_DEV_RAM=y
   5.255  CONFIG_BLK_DEV_RAM_COUNT=16
   5.256  CONFIG_BLK_DEV_RAM_SIZE=16384
   5.257 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
   5.258  CONFIG_BLK_DEV_INITRD=y
   5.259  CONFIG_CDROM_PKTCDVD=m
   5.260  CONFIG_CDROM_PKTCDVD_BUFFERS=8
   5.261 @@ -1117,6 +1147,7 @@ CONFIG_SCSI_ATA_PIIX=m
   5.262  CONFIG_SCSI_SATA_MV=m
   5.263  CONFIG_SCSI_SATA_NV=m
   5.264  CONFIG_SCSI_PDC_ADMA=m
   5.265 +CONFIG_SCSI_HPTIOP=m
   5.266  CONFIG_SCSI_SATA_QSTOR=m
   5.267  CONFIG_SCSI_SATA_PROMISE=m
   5.268  CONFIG_SCSI_SATA_SX4=m
   5.269 @@ -1153,7 +1184,6 @@ CONFIG_SCSI_IPR_TRACE=y
   5.270  CONFIG_SCSI_IPR_DUMP=y
   5.271  CONFIG_SCSI_QLOGIC_1280=m
   5.272  CONFIG_SCSI_QLA_FC=m
   5.273 -# CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE is not set
   5.274  CONFIG_SCSI_LPFC=m
   5.275  CONFIG_SCSI_DC395x=m
   5.276  CONFIG_SCSI_DC390T=m
   5.277 @@ -1178,9 +1208,8 @@ CONFIG_MD_LINEAR=m
   5.278  CONFIG_MD_RAID0=m
   5.279  CONFIG_MD_RAID1=m
   5.280  CONFIG_MD_RAID10=m
   5.281 -CONFIG_MD_RAID5=m
   5.282 +CONFIG_MD_RAID456=m
   5.283  CONFIG_MD_RAID5_RESHAPE=y
   5.284 -CONFIG_MD_RAID6=m
   5.285  CONFIG_MD_MULTIPATH=m
   5.286  CONFIG_MD_FAULTY=m
   5.287  CONFIG_BLK_DEV_DM=m
   5.288 @@ -1281,6 +1310,11 @@ CONFIG_DAVICOM_PHY=m
   5.289  CONFIG_QSEMI_PHY=m
   5.290  CONFIG_LXT_PHY=m
   5.291  CONFIG_CICADA_PHY=m
   5.292 +CONFIG_VITESSE_PHY=m
   5.293 +CONFIG_SMSC_PHY=m
   5.294 +CONFIG_FIXED_PHY=m
   5.295 +# CONFIG_FIXED_MII_10_FDX is not set
   5.296 +# CONFIG_FIXED_MII_100_FDX is not set
   5.297  
   5.298  #
   5.299  # Ethernet (10 or 100Mbit)
   5.300 @@ -1337,6 +1371,7 @@ CONFIG_SUNDANCE=m
   5.301  CONFIG_TLAN=m
   5.302  CONFIG_VIA_RHINE=m
   5.303  # CONFIG_VIA_RHINE_MMIO is not set
   5.304 +# CONFIG_VIA_RHINE_NAPI is not set
   5.305  CONFIG_NET_POCKET=y
   5.306  CONFIG_ATP=m
   5.307  CONFIG_DE600=m
   5.308 @@ -1373,6 +1408,7 @@ CONFIG_IXGB=m
   5.309  CONFIG_IXGB_NAPI=y
   5.310  CONFIG_S2IO=m
   5.311  CONFIG_S2IO_NAPI=y
   5.312 +CONFIG_MYRI10GE=m
   5.313  
   5.314  #
   5.315  # Token Ring devices
   5.316 @@ -1411,7 +1447,9 @@ CONFIG_IPW2100_MONITOR=y
   5.317  # CONFIG_IPW2100_DEBUG is not set
   5.318  CONFIG_IPW2200=m
   5.319  CONFIG_IPW2200_MONITOR=y
   5.320 -CONFIG_IPW_QOS=y
   5.321 +CONFIG_IPW2200_RADIOTAP=y
   5.322 +CONFIG_IPW2200_PROMISCUOUS=y
   5.323 +CONFIG_IPW2200_QOS=y
   5.324  # CONFIG_IPW2200_DEBUG is not set
   5.325  CONFIG_AIRO=m
   5.326  CONFIG_HERMES=m
   5.327 @@ -1435,6 +1473,7 @@ CONFIG_PCMCIA_WL3501=m
   5.328  # Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
   5.329  #
   5.330  CONFIG_PRISM54=m
   5.331 +CONFIG_USB_ZD1201=m
   5.332  CONFIG_HOSTAP=m
   5.333  CONFIG_HOSTAP_FIRMWARE=y
   5.334  CONFIG_HOSTAP_FIRMWARE_NVRAM=y
   5.335 @@ -1448,6 +1487,8 @@ CONFIG_BCM43XX_PIO=y
   5.336  CONFIG_BCM43XX_DMA_AND_PIO_MODE=y
   5.337  # CONFIG_BCM43XX_DMA_MODE is not set
   5.338  # CONFIG_BCM43XX_PIO_MODE is not set
   5.339 +CONFIG_ZD1211RW=m
   5.340 +# CONFIG_ZD1211RW_DEBUG is not set
   5.341  CONFIG_NET_WIRELESS=y
   5.342  
   5.343  #
   5.344 @@ -1472,7 +1513,6 @@ CONFIG_DSCC4=m
   5.345  CONFIG_DSCC4_PCISYNC=y
   5.346  CONFIG_DSCC4_PCI_RST=y
   5.347  CONFIG_LANMEDIA=m
   5.348 -CONFIG_SYNCLINK_SYNCPPP=m
   5.349  CONFIG_HDLC=m
   5.350  CONFIG_HDLC_RAW=y
   5.351  CONFIG_HDLC_RAW_ETH=y
   5.352 @@ -1791,6 +1831,7 @@ CONFIG_GAMEPORT_FM801=m
   5.353  CONFIG_VT=y
   5.354  CONFIG_VT_CONSOLE=y
   5.355  CONFIG_HW_CONSOLE=y
   5.356 +CONFIG_VT_HW_CONSOLE_BINDING=y
   5.357  # CONFIG_SERIAL_NONSTANDARD is not set
   5.358  
   5.359  #
   5.360 @@ -1870,7 +1911,11 @@ CONFIG_WDT_501_PCI=y
   5.361  # USB-based Watchdog Cards
   5.362  #
   5.363  CONFIG_USBPCWATCHDOG=m
   5.364 -CONFIG_HW_RANDOM=m
   5.365 +CONFIG_HW_RANDOM=y
   5.366 +CONFIG_HW_RANDOM_INTEL=m
   5.367 +CONFIG_HW_RANDOM_AMD=m
   5.368 +CONFIG_HW_RANDOM_GEODE=m
   5.369 +CONFIG_HW_RANDOM_VIA=m
   5.370  CONFIG_NVRAM=m
   5.371  CONFIG_RTC=m
   5.372  CONFIG_GEN_RTC=m
   5.373 @@ -1914,6 +1959,8 @@ CONFIG_CARDMAN_4000=m
   5.374  CONFIG_CARDMAN_4040=m
   5.375  CONFIG_MWAVE=m
   5.376  CONFIG_SCx200_GPIO=m
   5.377 +CONFIG_PC8736x_GPIO=m
   5.378 +CONFIG_NSC_GPIO=m
   5.379  CONFIG_CS5535_GPIO=m
   5.380  CONFIG_RAW_DRIVER=m
   5.381  CONFIG_MAX_RAW_DEVS=256
   5.382 @@ -1958,6 +2005,7 @@ CONFIG_I2C_I810=m
   5.383  CONFIG_I2C_PIIX4=m
   5.384  CONFIG_I2C_ISA=m
   5.385  CONFIG_I2C_NFORCE2=m
   5.386 +CONFIG_I2C_OCORES=m
   5.387  CONFIG_I2C_PARPORT=m
   5.388  CONFIG_I2C_PARPORT_LIGHT=m
   5.389  CONFIG_I2C_PROSAVAGE=m
   5.390 @@ -2011,13 +2059,13 @@ CONFIG_SPI_BUTTERFLY=m
   5.391  # Dallas's 1-wire bus
   5.392  #
   5.393  CONFIG_W1=m
   5.394 +CONFIG_W1_CON=y
   5.395  
   5.396  #
   5.397  # 1-wire Bus Masters
   5.398  #
   5.399  CONFIG_W1_MASTER_MATROX=m
   5.400 -CONFIG_W1_MASTER_DS9490=m
   5.401 -CONFIG_W1_MASTER_DS9490_BRIDGE=m
   5.402 +CONFIG_W1_MASTER_DS2490=m
   5.403  CONFIG_W1_MASTER_DS2482=m
   5.404  
   5.405  #
   5.406 @@ -2026,12 +2074,14 @@ CONFIG_W1_MASTER_DS2482=m
   5.407  CONFIG_W1_SLAVE_THERM=m
   5.408  CONFIG_W1_SLAVE_SMEM=m
   5.409  CONFIG_W1_SLAVE_DS2433=m
   5.410 +# CONFIG_W1_SLAVE_DS2433_CRC is not set
   5.411  
   5.412  #
   5.413  # Hardware Monitoring support
   5.414  #
   5.415  CONFIG_HWMON=m
   5.416  CONFIG_HWMON_VID=m
   5.417 +CONFIG_SENSORS_ABITUGURU=m
   5.418  CONFIG_SENSORS_ADM1021=m
   5.419  CONFIG_SENSORS_ADM1025=m
   5.420  CONFIG_SENSORS_ADM1026=m
   5.421 @@ -2047,6 +2097,7 @@ CONFIG_SENSORS_GL518SM=m
   5.422  CONFIG_SENSORS_GL520SM=m
   5.423  CONFIG_SENSORS_IT87=m
   5.424  CONFIG_SENSORS_LM63=m
   5.425 +CONFIG_SENSORS_LM70=m
   5.426  CONFIG_SENSORS_LM75=m
   5.427  CONFIG_SENSORS_LM77=m
   5.428  CONFIG_SENSORS_LM78=m
   5.429 @@ -2060,10 +2111,12 @@ CONFIG_SENSORS_MAX1619=m
   5.430  CONFIG_SENSORS_PC87360=m
   5.431  CONFIG_SENSORS_SIS5595=m
   5.432  CONFIG_SENSORS_SMSC47M1=m
   5.433 +CONFIG_SENSORS_SMSC47M192=m
   5.434  CONFIG_SENSORS_SMSC47B397=m
   5.435  CONFIG_SENSORS_VIA686A=m
   5.436  CONFIG_SENSORS_VT8231=m
   5.437  CONFIG_SENSORS_W83781D=m
   5.438 +CONFIG_SENSORS_W83791D=m
   5.439  CONFIG_SENSORS_W83792D=m
   5.440  CONFIG_SENSORS_W83L785TS=m
   5.441  CONFIG_SENSORS_W83627HF=m
   5.442 @@ -2082,7 +2135,7 @@ CONFIG_IBM_ASM=m
   5.443  CONFIG_VIDEO_DEV=m
   5.444  CONFIG_VIDEO_V4L1=y
   5.445  CONFIG_VIDEO_V4L1_COMPAT=y
   5.446 -CONFIG_VIDEO_V4L2=m
   5.447 +CONFIG_VIDEO_V4L2=y
   5.448  
   5.449  #
   5.450  # Video Capture Adapters
   5.451 @@ -2113,6 +2166,7 @@ CONFIG_VIDEO_ZORAN_DC10=m
   5.452  CONFIG_VIDEO_ZORAN_DC30=m
   5.453  CONFIG_VIDEO_ZORAN_LML33=m
   5.454  CONFIG_VIDEO_ZORAN_LML33R10=m
   5.455 +CONFIG_VIDEO_ZORAN_AVS6EYES=m
   5.456  CONFIG_VIDEO_MEYE=m
   5.457  CONFIG_VIDEO_SAA7134=m
   5.458  CONFIG_VIDEO_SAA7134_ALSA=m
   5.459 @@ -2126,17 +2180,19 @@ CONFIG_VIDEO_HEXIUM_GEMINI=m
   5.460  CONFIG_VIDEO_CX88_VP3054=m
   5.461  CONFIG_VIDEO_CX88=m
   5.462  CONFIG_VIDEO_CX88_ALSA=m
   5.463 +CONFIG_VIDEO_CX88_BLACKBIRD=m
   5.464  CONFIG_VIDEO_CX88_DVB=m
   5.465  CONFIG_VIDEO_CX88_DVB_ALL_FRONTENDS=y
   5.466 -CONFIG_VIDEO_OVCAMCHIP=m
   5.467  
   5.468  #
   5.469  # Encoders and Decoders
   5.470  #
   5.471  CONFIG_VIDEO_MSP3400=m
   5.472  CONFIG_VIDEO_CS53L32A=m
   5.473 +CONFIG_VIDEO_TLV320AIC23B=m
   5.474  CONFIG_VIDEO_WM8775=m
   5.475  CONFIG_VIDEO_WM8739=m
   5.476 +CONFIG_VIDEO_CX2341X=m
   5.477  CONFIG_VIDEO_CX25840=m
   5.478  CONFIG_VIDEO_SAA711X=m
   5.479  CONFIG_VIDEO_SAA7127=m
   5.480 @@ -2146,20 +2202,26 @@ CONFIG_VIDEO_UPD64083=m
   5.481  #
   5.482  # V4L USB devices
   5.483  #
   5.484 +CONFIG_VIDEO_PVRUSB2=m
   5.485 +CONFIG_VIDEO_PVRUSB2_24XXX=y
   5.486 +CONFIG_VIDEO_PVRUSB2_SYSFS=y
   5.487 +# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
   5.488  CONFIG_VIDEO_EM28XX=m
   5.489 -CONFIG_USB_DSBR=m
   5.490  CONFIG_VIDEO_USBVIDEO=m
   5.491  CONFIG_USB_VICAM=m
   5.492  CONFIG_USB_IBMCAM=m
   5.493  CONFIG_USB_KONICAWC=m
   5.494 +CONFIG_USB_QUICKCAM_MESSENGER=m
   5.495  CONFIG_USB_ET61X251=m
   5.496 +CONFIG_VIDEO_OVCAMCHIP=m
   5.497 +CONFIG_USB_W9968CF=m
   5.498  CONFIG_USB_OV511=m
   5.499  CONFIG_USB_SE401=m
   5.500  CONFIG_USB_SN9C102=m
   5.501  CONFIG_USB_STV680=m
   5.502 -CONFIG_USB_W9968CF=m
   5.503  CONFIG_USB_ZC0301=m
   5.504  CONFIG_USB_PWC=m
   5.505 +# CONFIG_USB_PWC_DEBUG is not set
   5.506  
   5.507  #
   5.508  # Radio Adapters
   5.509 @@ -2167,6 +2229,7 @@ CONFIG_USB_PWC=m
   5.510  CONFIG_RADIO_GEMTEK_PCI=m
   5.511  CONFIG_RADIO_MAXIRADIO=m
   5.512  CONFIG_RADIO_MAESTRO=m
   5.513 +CONFIG_USB_DSBR=m
   5.514  
   5.515  #
   5.516  # Digital Video Broadcasting Devices
   5.517 @@ -2198,6 +2261,7 @@ CONFIG_DVB_USB_CXUSB=m
   5.518  CONFIG_DVB_USB_DIGITV=m
   5.519  CONFIG_DVB_USB_VP7045=m
   5.520  CONFIG_DVB_USB_VP702X=m
   5.521 +CONFIG_DVB_USB_GP8PSK=m
   5.522  CONFIG_DVB_USB_NOVA_T_USB2=m
   5.523  CONFIG_DVB_USB_DTT200U=m
   5.524  CONFIG_DVB_TTUSB_BUDGET=m
   5.525 @@ -2265,13 +2329,20 @@ CONFIG_DVB_TDA10021=m
   5.526  CONFIG_DVB_STV0297=m
   5.527  
   5.528  #
   5.529 -# ATSC (North American/Korean Terresterial DTV) frontends
   5.530 +# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
   5.531  #
   5.532  CONFIG_DVB_NXT200X=m
   5.533  CONFIG_DVB_OR51211=m
   5.534  CONFIG_DVB_OR51132=m
   5.535  CONFIG_DVB_BCM3510=m
   5.536  CONFIG_DVB_LGDT330X=m
   5.537 +
   5.538 +#
   5.539 +# Miscellaneous devices
   5.540 +#
   5.541 +CONFIG_DVB_PLL=m
   5.542 +CONFIG_DVB_LNBP21=m
   5.543 +CONFIG_DVB_ISL6421=m
   5.544  CONFIG_VIDEO_SAA7146=m
   5.545  CONFIG_VIDEO_SAA7146_VV=m
   5.546  CONFIG_VIDEO_VIDEOBUF=m
   5.547 @@ -2286,12 +2357,13 @@ CONFIG_USB_DABUSB=m
   5.548  #
   5.549  # Graphics support
   5.550  #
   5.551 +CONFIG_FIRMWARE_EDID=y
   5.552  CONFIG_FB=y
   5.553  CONFIG_FB_CFB_FILLRECT=y
   5.554  CONFIG_FB_CFB_COPYAREA=y
   5.555  CONFIG_FB_CFB_IMAGEBLIT=y
   5.556  # CONFIG_FB_MACMODES is not set
   5.557 -CONFIG_FB_FIRMWARE_EDID=y
   5.558 +# CONFIG_FB_BACKLIGHT is not set
   5.559  CONFIG_FB_MODE_HELPERS=y
   5.560  CONFIG_FB_TILEBLITTING=y
   5.561  CONFIG_FB_CIRRUS=m
   5.562 @@ -2303,7 +2375,6 @@ CONFIG_FB_ARC=m
   5.563  # CONFIG_FB_IMSTT is not set
   5.564  CONFIG_FB_VGA16=m
   5.565  CONFIG_FB_VESA=y
   5.566 -CONFIG_VIDEO_SELECT=y
   5.567  CONFIG_FB_HGA=m
   5.568  # CONFIG_FB_HGA_ACCEL is not set
   5.569  CONFIG_FB_S1D13XXX=m
   5.570 @@ -2354,6 +2425,7 @@ CONFIG_FB_VIRTUAL=m
   5.571  #
   5.572  CONFIG_VGA_CONSOLE=y
   5.573  # CONFIG_VGACON_SOFT_SCROLLBACK is not set
   5.574 +CONFIG_VIDEO_SELECT=y
   5.575  CONFIG_DUMMY_CONSOLE=y
   5.576  CONFIG_FRAMEBUFFER_CONSOLE=m
   5.577  # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
   5.578 @@ -2434,6 +2506,18 @@ CONFIG_SND_CS4281=m
   5.579  CONFIG_SND_CS46XX=m
   5.580  CONFIG_SND_CS46XX_NEW_DSP=y
   5.581  CONFIG_SND_CS5535AUDIO=m
   5.582 +CONFIG_SND_DARLA20=m
   5.583 +CONFIG_SND_GINA20=m
   5.584 +CONFIG_SND_LAYLA20=m
   5.585 +CONFIG_SND_DARLA24=m
   5.586 +CONFIG_SND_GINA24=m
   5.587 +CONFIG_SND_LAYLA24=m
   5.588 +CONFIG_SND_MONA=m
   5.589 +CONFIG_SND_MIA=m
   5.590 +CONFIG_SND_ECHO3G=m
   5.591 +CONFIG_SND_INDIGO=m
   5.592 +CONFIG_SND_INDIGOIO=m
   5.593 +CONFIG_SND_INDIGODJ=m
   5.594  CONFIG_SND_EMU10K1=m
   5.595  CONFIG_SND_EMU10K1X=m
   5.596  CONFIG_SND_ENS1370=m
   5.597 @@ -2441,7 +2525,7 @@ CONFIG_SND_ENS1371=m
   5.598  CONFIG_SND_ES1938=m
   5.599  CONFIG_SND_ES1968=m
   5.600  CONFIG_SND_FM801=m
   5.601 -CONFIG_SND_FM801_TEA575X=m
   5.602 +# CONFIG_SND_FM801_TEA575X_BOOL is not set
   5.603  CONFIG_SND_HDA_INTEL=m
   5.604  CONFIG_SND_HDSP=m
   5.605  CONFIG_SND_HDSPM=m
   5.606 @@ -2481,10 +2565,8 @@ CONFIG_SND_PDAUDIOCF=m
   5.607  # Open Sound System
   5.608  #
   5.609  CONFIG_SOUND_PRIME=m
   5.610 +# CONFIG_OSS_OBSOLETE_DRIVER is not set
   5.611  CONFIG_SOUND_BT878=m
   5.612 -CONFIG_SOUND_EMU10K1=m
   5.613 -# CONFIG_MIDI_EMU10K1 is not set
   5.614 -CONFIG_SOUND_FUSION=m
   5.615  CONFIG_SOUND_ES1371=m
   5.616  CONFIG_SOUND_ICH=m
   5.617  CONFIG_SOUND_TRIDENT=m
   5.618 @@ -2519,6 +2601,7 @@ CONFIG_USB_BANDWIDTH=y
   5.619  CONFIG_USB_EHCI_HCD=m
   5.620  CONFIG_USB_EHCI_SPLIT_ISO=y
   5.621  CONFIG_USB_EHCI_ROOT_HUB_TT=y
   5.622 +CONFIG_USB_EHCI_TT_NEWSCHED=y
   5.623  CONFIG_USB_ISP116X_HCD=m
   5.624  CONFIG_USB_OHCI_HCD=m
   5.625  # CONFIG_USB_OHCI_BIG_ENDIAN is not set
   5.626 @@ -2614,7 +2697,6 @@ CONFIG_USB_BELKIN=y
   5.627  CONFIG_USB_ARMLINUX=y
   5.628  # CONFIG_USB_EPSON2888 is not set
   5.629  CONFIG_USB_NET_ZAURUS=m
   5.630 -CONFIG_USB_ZD1201=m
   5.631  CONFIG_USB_MON=y
   5.632  
   5.633  #
   5.634 @@ -2628,7 +2710,6 @@ CONFIG_USB_USS720=m
   5.635  CONFIG_USB_SERIAL=m
   5.636  CONFIG_USB_SERIAL_GENERIC=y
   5.637  CONFIG_USB_SERIAL_AIRPRIME=m
   5.638 -CONFIG_USB_SERIAL_ANYDATA=m
   5.639  CONFIG_USB_SERIAL_ARK3116=m
   5.640  CONFIG_USB_SERIAL_BELKIN=m
   5.641  CONFIG_USB_SERIAL_WHITEHEAT=m
   5.642 @@ -2667,6 +2748,7 @@ CONFIG_USB_SERIAL_PL2303=m
   5.643  CONFIG_USB_SERIAL_HP4X=m
   5.644  CONFIG_USB_SERIAL_SAFE=m
   5.645  CONFIG_USB_SERIAL_SAFE_PADDED=y
   5.646 +CONFIG_USB_SERIAL_SIERRAWIRELESS=m
   5.647  CONFIG_USB_SERIAL_TI=m
   5.648  CONFIG_USB_SERIAL_CYBERJACK=m
   5.649  CONFIG_USB_SERIAL_XIRCOM=m
   5.650 @@ -2684,10 +2766,12 @@ CONFIG_USB_RIO500=m
   5.651  CONFIG_USB_LEGOTOWER=m
   5.652  CONFIG_USB_LCD=m
   5.653  CONFIG_USB_LED=m
   5.654 +CONFIG_USB_CYPRESS_CY7C63=m
   5.655  CONFIG_USB_CYTHERM=m
   5.656  CONFIG_USB_PHIDGETKIT=m
   5.657  CONFIG_USB_PHIDGETSERVO=m
   5.658  CONFIG_USB_IDMOUSE=m
   5.659 +CONFIG_USB_APPLEDISPLAY=m
   5.660  CONFIG_USB_SISUSBVGA=m
   5.661  CONFIG_USB_SISUSBVGA_CON=y
   5.662  CONFIG_USB_LD=m
   5.663 @@ -2743,6 +2827,7 @@ CONFIG_LEDS_CLASS=m
   5.664  #
   5.665  # LED drivers
   5.666  #
   5.667 +CONFIG_LEDS_NET48XX=m
   5.668  
   5.669  #
   5.670  # LED Triggers
   5.671 @@ -2750,6 +2835,7 @@ CONFIG_LEDS_CLASS=m
   5.672  CONFIG_LEDS_TRIGGERS=y
   5.673  CONFIG_LEDS_TRIGGER_TIMER=m
   5.674  CONFIG_LEDS_TRIGGER_IDE_DISK=y
   5.675 +CONFIG_LEDS_TRIGGER_HEARTBEAT=m
   5.676  
   5.677  #
   5.678  # InfiniBand support
   5.679 @@ -2757,12 +2843,14 @@ CONFIG_LEDS_TRIGGER_IDE_DISK=y
   5.680  CONFIG_INFINIBAND=m
   5.681  CONFIG_INFINIBAND_USER_MAD=m
   5.682  CONFIG_INFINIBAND_USER_ACCESS=m
   5.683 +CONFIG_INFINIBAND_ADDR_TRANS=y
   5.684  CONFIG_INFINIBAND_MTHCA=m
   5.685  CONFIG_INFINIBAND_MTHCA_DEBUG=y
   5.686  CONFIG_INFINIBAND_IPOIB=m
   5.687  CONFIG_INFINIBAND_IPOIB_DEBUG=y
   5.688  # CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
   5.689  CONFIG_INFINIBAND_SRP=m
   5.690 +CONFIG_INFINIBAND_ISER=m
   5.691  
   5.692  #
   5.693  # EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
   5.694 @@ -2794,16 +2882,40 @@ CONFIG_RTC_CLASS=m
   5.695  CONFIG_RTC_INTF_SYSFS=m
   5.696  CONFIG_RTC_INTF_PROC=m
   5.697  CONFIG_RTC_INTF_DEV=m
   5.698 +CONFIG_RTC_INTF_DEV_UIE_EMUL=y
   5.699  
   5.700  #
   5.701  # RTC drivers
   5.702  #
   5.703  CONFIG_RTC_DRV_X1205=m
   5.704 +CONFIG_RTC_DRV_DS1307=m
   5.705 +CONFIG_RTC_DRV_DS1553=m
   5.706 +CONFIG_RTC_DRV_ISL1208=m
   5.707  CONFIG_RTC_DRV_DS1672=m
   5.708 +CONFIG_RTC_DRV_DS1742=m
   5.709  CONFIG_RTC_DRV_PCF8563=m
   5.710 +CONFIG_RTC_DRV_PCF8583=m
   5.711 +CONFIG_RTC_DRV_RS5C348=m
   5.712  CONFIG_RTC_DRV_RS5C372=m
   5.713  CONFIG_RTC_DRV_M48T86=m
   5.714  CONFIG_RTC_DRV_TEST=m
   5.715 +CONFIG_RTC_DRV_MAX6902=m
   5.716 +CONFIG_RTC_DRV_V3020=m
   5.717 +
   5.718 +#
   5.719 +# DMA Engine support
   5.720 +#
   5.721 +CONFIG_DMA_ENGINE=y
   5.722 +
   5.723 +#
   5.724 +# DMA Clients
   5.725 +#
   5.726 +CONFIG_NET_DMA=y
   5.727 +
   5.728 +#
   5.729 +# DMA Devices
   5.730 +#
   5.731 +CONFIG_INTEL_IOATDMA=m
   5.732  
   5.733  #
   5.734  # File systems
   5.735 @@ -2834,15 +2946,16 @@ CONFIG_JFS_POSIX_ACL=y
   5.736  CONFIG_JFS_STATISTICS=y
   5.737  CONFIG_FS_POSIX_ACL=y
   5.738  CONFIG_XFS_FS=m
   5.739 -CONFIG_XFS_EXPORT=y
   5.740  CONFIG_XFS_QUOTA=y
   5.741  CONFIG_XFS_SECURITY=y
   5.742  CONFIG_XFS_POSIX_ACL=y
   5.743  CONFIG_XFS_RT=y
   5.744  CONFIG_OCFS2_FS=m
   5.745 +CONFIG_OCFS2_DEBUG_MASKLOG=y
   5.746  CONFIG_MINIX_FS=m
   5.747  CONFIG_ROMFS_FS=m
   5.748  CONFIG_INOTIFY=y
   5.749 +CONFIG_INOTIFY_USER=y
   5.750  CONFIG_QUOTA=y
   5.751  CONFIG_QFMT_V1=m
   5.752  CONFIG_QFMT_V2=m
   5.753 @@ -2904,6 +3017,7 @@ CONFIG_JFFS2_FS=m
   5.754  CONFIG_JFFS2_FS_DEBUG=0
   5.755  CONFIG_JFFS2_FS_WRITEBUFFER=y
   5.756  # CONFIG_JFFS2_SUMMARY is not set
   5.757 +# CONFIG_JFFS2_FS_XATTR is not set
   5.758  # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
   5.759  CONFIG_JFFS2_ZLIB=y
   5.760  CONFIG_JFFS2_RTIME=y
   5.761 @@ -2914,6 +3028,8 @@ CONFIG_HPFS_FS=m
   5.762  CONFIG_QNX4FS_FS=m
   5.763  CONFIG_SYSV_FS=m
   5.764  CONFIG_UFS_FS=m
   5.765 +# CONFIG_UFS_FS_WRITE is not set
   5.766 +# CONFIG_UFS_DEBUG is not set
   5.767  
   5.768  #
   5.769  # Network File Systems
   5.770 @@ -2944,8 +3060,10 @@ CONFIG_SMB_NLS_REMOTE="cp850"
   5.771  CONFIG_CIFS=m
   5.772  CONFIG_CIFS_STATS=y
   5.773  CONFIG_CIFS_STATS2=y
   5.774 +# CONFIG_CIFS_WEAK_PW_HASH is not set
   5.775  CONFIG_CIFS_XATTR=y
   5.776  # CONFIG_CIFS_POSIX is not set
   5.777 +# CONFIG_CIFS_DEBUG2 is not set
   5.778  # CONFIG_CIFS_EXPERIMENTAL is not set
   5.779  CONFIG_NCP_FS=m
   5.780  CONFIG_NCPFS_PACKET_SIGNING=y
   5.781 @@ -3037,16 +3155,24 @@ CONFIG_NLS_UTF8=m
   5.782  #
   5.783  # Kernel hacking
   5.784  #
   5.785 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
   5.786  # CONFIG_PRINTK_TIME is not set
   5.787  CONFIG_MAGIC_SYSRQ=y
   5.788 +CONFIG_UNUSED_SYMBOLS=y
   5.789  CONFIG_DEBUG_KERNEL=y
   5.790  CONFIG_LOG_BUF_SHIFT=14
   5.791  CONFIG_DETECT_SOFTLOCKUP=y
   5.792  # CONFIG_SCHEDSTATS is not set
   5.793  # CONFIG_DEBUG_SLAB is not set
   5.794 -# CONFIG_DEBUG_MUTEXES is not set
   5.795 +# CONFIG_DEBUG_RT_MUTEXES is not set
   5.796 +# CONFIG_RT_MUTEX_TESTER is not set
   5.797  # CONFIG_DEBUG_SPINLOCK is not set
   5.798 +# CONFIG_DEBUG_MUTEXES is not set
   5.799 +# CONFIG_DEBUG_RWSEMS is not set
   5.800 +# CONFIG_DEBUG_LOCK_ALLOC is not set
   5.801 +# CONFIG_PROVE_LOCKING is not set
   5.802  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
   5.803 +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
   5.804  # CONFIG_DEBUG_KOBJECT is not set
   5.805  # CONFIG_DEBUG_HIGHMEM is not set
   5.806  CONFIG_DEBUG_BUGVERBOSE=y
   5.807 @@ -3060,7 +3186,6 @@ CONFIG_FORCED_INLINING=y
   5.808  CONFIG_EARLY_PRINTK=y
   5.809  CONFIG_DEBUG_STACKOVERFLOW=y
   5.810  # CONFIG_DEBUG_STACK_USAGE is not set
   5.811 -CONFIG_STACK_BACKTRACE_COLS=2
   5.812  # CONFIG_DEBUG_PAGEALLOC is not set
   5.813  # CONFIG_DEBUG_RODATA is not set
   5.814  # CONFIG_4KSTACKS is not set
   5.815 @@ -3153,7 +3278,6 @@ CONFIG_NO_IDLE_HZ=y
   5.816  CONFIG_XEN_UTIL=y
   5.817  CONFIG_XEN_BALLOON=y
   5.818  CONFIG_XEN_DEVMEM=y
   5.819 -CONFIG_XEN_SKBUFF=y
   5.820  CONFIG_XEN_REBOOT=y
   5.821  CONFIG_XEN_SMPBOOT=y
   5.822  
   5.823 @@ -3164,6 +3288,7 @@ CONFIG_CRC_CCITT=m
   5.824  CONFIG_CRC16=m
   5.825  CONFIG_CRC32=y
   5.826  CONFIG_LIBCRC32C=m
   5.827 +CONFIG_AUDIT_GENERIC=y
   5.828  CONFIG_ZLIB_INFLATE=m
   5.829  CONFIG_ZLIB_DEFLATE=m
   5.830  CONFIG_REED_SOLOMON=m
   5.831 @@ -3172,6 +3297,7 @@ CONFIG_TEXTSEARCH=y
   5.832  CONFIG_TEXTSEARCH_KMP=m
   5.833  CONFIG_TEXTSEARCH_BM=m
   5.834  CONFIG_TEXTSEARCH_FSM=m
   5.835 +CONFIG_PLIST=y
   5.836  CONFIG_GENERIC_HARDIRQS=y
   5.837  CONFIG_GENERIC_IRQ_PROBE=y
   5.838  CONFIG_GENERIC_PENDING_IRQ=y
     6.1 --- a/buildconfigs/linux-defconfig_xen_x86_64	Fri Jan 12 15:32:03 2007 +0000
     6.2 +++ b/buildconfigs/linux-defconfig_xen_x86_64	Wed Jan 17 18:41:22 2007 +0000
     6.3 @@ -1,11 +1,13 @@
     6.4  #
     6.5  # Automatically generated make config: don't edit
     6.6 -# Linux kernel version: 2.6.17-xen
     6.7 -# Thu Jan 11 10:10:22 2007
     6.8 +# Linux kernel version: 2.6.18-xen
     6.9 +# Wed Jan 17 18:33:45 2007
    6.10  #
    6.11  CONFIG_X86_64=y
    6.12  CONFIG_64BIT=y
    6.13  CONFIG_X86=y
    6.14 +CONFIG_LOCKDEP_SUPPORT=y
    6.15 +CONFIG_STACKTRACE_SUPPORT=y
    6.16  CONFIG_SEMAPHORE_SLEEPERS=y
    6.17  CONFIG_MMU=y
    6.18  CONFIG_RWSEM_GENERIC_SPINLOCK=y
    6.19 @@ -17,6 +19,8 @@ CONFIG_GENERIC_ISA_DMA=y
    6.20  CONFIG_GENERIC_IOMAP=y
    6.21  CONFIG_ARCH_MAY_HAVE_PC_FDC=y
    6.22  CONFIG_DMI=y
    6.23 +CONFIG_AUDIT_ARCH=y
    6.24 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
    6.25  
    6.26  #
    6.27  # Code maturity level options
    6.28 @@ -35,7 +39,8 @@ CONFIG_SYSVIPC=y
    6.29  CONFIG_POSIX_MQUEUE=y
    6.30  CONFIG_BSD_PROCESS_ACCT=y
    6.31  CONFIG_BSD_PROCESS_ACCT_V3=y
    6.32 -CONFIG_SYSCTL=y
    6.33 +CONFIG_TASKSTATS=y
    6.34 +CONFIG_TASK_DELAY_ACCT=y
    6.35  CONFIG_AUDIT=y
    6.36  CONFIG_AUDITSYSCALL=y
    6.37  CONFIG_IKCONFIG=y
    6.38 @@ -43,10 +48,10 @@ CONFIG_IKCONFIG_PROC=y
    6.39  CONFIG_CPUSETS=y
    6.40  # CONFIG_RELAY is not set
    6.41  CONFIG_INITRAMFS_SOURCE=""
    6.42 -CONFIG_UID16=y
    6.43 -CONFIG_VM86=y
    6.44  CONFIG_CC_OPTIMIZE_FOR_SIZE=y
    6.45  # CONFIG_EMBEDDED is not set
    6.46 +CONFIG_UID16=y
    6.47 +CONFIG_SYSCTL=y
    6.48  CONFIG_KALLSYMS=y
    6.49  # CONFIG_KALLSYMS_ALL is not set
    6.50  CONFIG_KALLSYMS_EXTRA_PASS=y
    6.51 @@ -59,10 +64,11 @@ CONFIG_FUTEX=y
    6.52  CONFIG_EPOLL=y
    6.53  CONFIG_SHMEM=y
    6.54  CONFIG_SLAB=y
    6.55 +CONFIG_VM_EVENT_COUNTERS=y
    6.56 +CONFIG_RT_MUTEXES=y
    6.57  # CONFIG_TINY_SHMEM is not set
    6.58  CONFIG_BASE_SMALL=0
    6.59  # CONFIG_SLOB is not set
    6.60 -CONFIG_OBSOLETE_INTERMODULE=m
    6.61  
    6.62  #
    6.63  # Loadable module support
    6.64 @@ -118,7 +124,6 @@ CONFIG_X86_XEN_GENAPIC=y
    6.65  CONFIG_X86_LOCAL_APIC=y
    6.66  CONFIG_MTRR=y
    6.67  CONFIG_SMP=y
    6.68 -# CONFIG_SCHED_MC is not set
    6.69  # CONFIG_PREEMPT_NONE is not set
    6.70  CONFIG_PREEMPT_VOLUNTARY=y
    6.71  # CONFIG_PREEMPT is not set
    6.72 @@ -132,8 +137,11 @@ CONFIG_FLATMEM=y
    6.73  CONFIG_FLAT_NODE_MEM_MAP=y
    6.74  # CONFIG_SPARSEMEM_STATIC is not set
    6.75  CONFIG_SPLIT_PTLOCK_CPUS=4096
    6.76 +CONFIG_RESOURCES_64BIT=y
    6.77  CONFIG_NR_CPUS=32
    6.78  CONFIG_HOTPLUG_CPU=y
    6.79 +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
    6.80 +# CONFIG_CALGARY_IOMMU is not set
    6.81  CONFIG_SWIOTLB=y
    6.82  CONFIG_KEXEC=y
    6.83  # CONFIG_CRASH_DUMP is not set
    6.84 @@ -144,6 +152,7 @@ CONFIG_HZ_100=y
    6.85  # CONFIG_HZ_1000 is not set
    6.86  CONFIG_HZ=100
    6.87  # CONFIG_REORDER is not set
    6.88 +CONFIG_K8_NB=y
    6.89  CONFIG_GENERIC_HARDIRQS=y
    6.90  CONFIG_GENERIC_IRQ_PROBE=y
    6.91  CONFIG_ISA_DMA_API=y
    6.92 @@ -164,12 +173,12 @@ CONFIG_ACPI_BUTTON=m
    6.93  CONFIG_ACPI_VIDEO=m
    6.94  CONFIG_ACPI_HOTKEY=m
    6.95  CONFIG_ACPI_FAN=m
    6.96 +CONFIG_ACPI_DOCK=m
    6.97  CONFIG_ACPI_PROCESSOR=m
    6.98  CONFIG_ACPI_HOTPLUG_CPU=y
    6.99  CONFIG_ACPI_THERMAL=m
   6.100  CONFIG_ACPI_ASUS=m
   6.101  CONFIG_ACPI_IBM=m
   6.102 -# CONFIG_ACPI_IBM_DOCK is not set
   6.103  CONFIG_ACPI_TOSHIBA=m
   6.104  CONFIG_ACPI_BLACKLIST_YEAR=0
   6.105  # CONFIG_ACPI_DEBUG is not set
   6.106 @@ -177,7 +186,7 @@ CONFIG_ACPI_EC=y
   6.107  CONFIG_ACPI_POWER=y
   6.108  CONFIG_ACPI_SYSTEM=y
   6.109  CONFIG_ACPI_CONTAINER=m
   6.110 -CONFIG_ACPI_HOTPLUG_MEMORY=m
   6.111 +CONFIG_ACPI_SBS=m
   6.112  
   6.113  #
   6.114  # CPU Frequency scaling
   6.115 @@ -280,6 +289,8 @@ CONFIG_INET_ESP=m
   6.116  CONFIG_INET_IPCOMP=m
   6.117  CONFIG_INET_XFRM_TUNNEL=m
   6.118  CONFIG_INET_TUNNEL=m
   6.119 +CONFIG_INET_XFRM_MODE_TRANSPORT=m
   6.120 +CONFIG_INET_XFRM_MODE_TUNNEL=m
   6.121  CONFIG_INET_DIAG=m
   6.122  CONFIG_INET_TCP_DIAG=m
   6.123  CONFIG_TCP_CONG_ADVANCED=y
   6.124 @@ -295,6 +306,8 @@ CONFIG_TCP_CONG_HSTCP=m
   6.125  CONFIG_TCP_CONG_HYBLA=m
   6.126  CONFIG_TCP_CONG_VEGAS=m
   6.127  CONFIG_TCP_CONG_SCALABLE=m
   6.128 +CONFIG_TCP_CONG_LP=m
   6.129 +CONFIG_TCP_CONG_VENO=m
   6.130  
   6.131  #
   6.132  # IP: Virtual Server Configuration
   6.133 @@ -337,7 +350,10 @@ CONFIG_INET6_ESP=m
   6.134  CONFIG_INET6_IPCOMP=m
   6.135  CONFIG_INET6_XFRM_TUNNEL=m
   6.136  CONFIG_INET6_TUNNEL=m
   6.137 +CONFIG_INET6_XFRM_MODE_TRANSPORT=m
   6.138 +CONFIG_INET6_XFRM_MODE_TUNNEL=m
   6.139  CONFIG_IPV6_TUNNEL=m
   6.140 +CONFIG_NETWORK_SECMARK=y
   6.141  CONFIG_NETFILTER=y
   6.142  # CONFIG_NETFILTER_DEBUG is not set
   6.143  CONFIG_BRIDGE_NETFILTER=y
   6.144 @@ -354,6 +370,8 @@ CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
   6.145  CONFIG_NETFILTER_XT_TARGET_MARK=m
   6.146  CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
   6.147  CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
   6.148 +CONFIG_NETFILTER_XT_TARGET_SECMARK=m
   6.149 +CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
   6.150  CONFIG_NETFILTER_XT_MATCH_COMMENT=m
   6.151  CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
   6.152  CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
   6.153 @@ -369,9 +387,11 @@ CONFIG_NETFILTER_XT_MATCH_POLICY=m
   6.154  CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
   6.155  CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
   6.156  CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
   6.157 +CONFIG_NETFILTER_XT_MATCH_QUOTA=m
   6.158  CONFIG_NETFILTER_XT_MATCH_REALM=m
   6.159  CONFIG_NETFILTER_XT_MATCH_SCTP=m
   6.160  CONFIG_NETFILTER_XT_MATCH_STATE=m
   6.161 +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
   6.162  CONFIG_NETFILTER_XT_MATCH_STRING=m
   6.163  CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
   6.164  
   6.165 @@ -381,6 +401,7 @@ CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
   6.166  CONFIG_IP_NF_CONNTRACK=m
   6.167  CONFIG_IP_NF_CT_ACCT=y
   6.168  CONFIG_IP_NF_CONNTRACK_MARK=y
   6.169 +CONFIG_IP_NF_CONNTRACK_SECMARK=y
   6.170  CONFIG_IP_NF_CONNTRACK_EVENTS=y
   6.171  CONFIG_IP_NF_CONNTRACK_NETLINK=m
   6.172  CONFIG_IP_NF_CT_PROTO_SCTP=m
   6.173 @@ -391,6 +412,7 @@ CONFIG_IP_NF_TFTP=m
   6.174  CONFIG_IP_NF_AMANDA=m
   6.175  CONFIG_IP_NF_PPTP=m
   6.176  CONFIG_IP_NF_H323=m
   6.177 +CONFIG_IP_NF_SIP=m
   6.178  CONFIG_IP_NF_QUEUE=m
   6.179  CONFIG_IP_NF_IPTABLES=m
   6.180  CONFIG_IP_NF_MATCH_IPRANGE=m
   6.181 @@ -421,6 +443,7 @@ 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_NAT_SIP=m
   6.186  CONFIG_IP_NF_MANGLE=m
   6.187  CONFIG_IP_NF_TARGET_TOS=m
   6.188  CONFIG_IP_NF_TARGET_ECN=m
   6.189 @@ -532,13 +555,12 @@ CONFIG_LLC2=m
   6.190  CONFIG_IPX=m
   6.191  CONFIG_IPX_INTERN=y
   6.192  CONFIG_ATALK=m
   6.193 -CONFIG_DEV_APPLETALK=y
   6.194 +CONFIG_DEV_APPLETALK=m
   6.195  CONFIG_IPDDP=m
   6.196  CONFIG_IPDDP_ENCAP=y
   6.197  CONFIG_IPDDP_DECAP=y
   6.198  CONFIG_X25=m
   6.199  CONFIG_LAPB=m
   6.200 -CONFIG_NET_DIVERT=y
   6.201  CONFIG_ECONET=m
   6.202  # CONFIG_ECONET_AUNUDP is not set
   6.203  # CONFIG_ECONET_NATIVE is not set
   6.204 @@ -679,6 +701,7 @@ CONFIG_SMC_IRCC_FIR=m
   6.205  CONFIG_ALI_FIR=m
   6.206  CONFIG_VLSI_FIR=m
   6.207  CONFIG_VIA_FIR=m
   6.208 +CONFIG_MCS_FIR=m
   6.209  CONFIG_BT=m
   6.210  CONFIG_BT_L2CAP=m
   6.211  CONFIG_BT_SCO=m
   6.212 @@ -726,6 +749,7 @@ CONFIG_STANDALONE=y
   6.213  CONFIG_PREVENT_FIRMWARE_BUILD=y
   6.214  CONFIG_FW_LOADER=m
   6.215  # CONFIG_DEBUG_DRIVER is not set
   6.216 +# CONFIG_SYS_HYPERVISOR is not set
   6.217  
   6.218  #
   6.219  # Connector - unified userspace <-> kernelspace linker
   6.220 @@ -844,6 +868,7 @@ CONFIG_MTD_DOCPROBE_55AA=y
   6.221  #
   6.222  CONFIG_MTD_NAND=m
   6.223  # CONFIG_MTD_NAND_VERIFY_WRITE is not set
   6.224 +# CONFIG_MTD_NAND_ECC_SMC is not set
   6.225  CONFIG_MTD_NAND_IDS=m
   6.226  CONFIG_MTD_NAND_DISKONCHIP=m
   6.227  # CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
   6.228 @@ -856,6 +881,7 @@ CONFIG_MTD_NAND_NANDSIM=m
   6.229  #
   6.230  CONFIG_MTD_ONENAND=m
   6.231  # CONFIG_MTD_ONENAND_VERIFY_WRITE is not set
   6.232 +# CONFIG_MTD_ONENAND_OTP is not set
   6.233  
   6.234  #
   6.235  # Parallel port support
   6.236 @@ -867,6 +893,7 @@ CONFIG_PARPORT_PC=m
   6.237  # CONFIG_PARPORT_PC_PCMCIA is not set
   6.238  CONFIG_PARPORT_NOT_PC=y
   6.239  # CONFIG_PARPORT_GSC is not set
   6.240 +CONFIG_PARPORT_AX88796=m
   6.241  CONFIG_PARPORT_1284=y
   6.242  
   6.243  #
   6.244 @@ -928,6 +955,7 @@ CONFIG_BLK_DEV_SX8=m
   6.245  CONFIG_BLK_DEV_RAM=y
   6.246  CONFIG_BLK_DEV_RAM_COUNT=16
   6.247  CONFIG_BLK_DEV_RAM_SIZE=16384
   6.248 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
   6.249  CONFIG_BLK_DEV_INITRD=y
   6.250  CONFIG_CDROM_PKTCDVD=m
   6.251  CONFIG_CDROM_PKTCDVD_BUFFERS=8
   6.252 @@ -1070,6 +1098,7 @@ CONFIG_SCSI_ATA_PIIX=m
   6.253  CONFIG_SCSI_SATA_MV=m
   6.254  CONFIG_SCSI_SATA_NV=m
   6.255  CONFIG_SCSI_PDC_ADMA=m
   6.256 +CONFIG_SCSI_HPTIOP=m
   6.257  CONFIG_SCSI_SATA_QSTOR=m
   6.258  CONFIG_SCSI_SATA_PROMISE=m
   6.259  CONFIG_SCSI_SATA_SX4=m
   6.260 @@ -1104,7 +1133,6 @@ CONFIG_SCSI_SYM53C8XX_MMIO=y
   6.261  # CONFIG_SCSI_IPR is not set
   6.262  CONFIG_SCSI_QLOGIC_1280=m
   6.263  CONFIG_SCSI_QLA_FC=m
   6.264 -# CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE is not set
   6.265  CONFIG_SCSI_LPFC=m
   6.266  CONFIG_SCSI_DC395x=m
   6.267  CONFIG_SCSI_DC390T=m
   6.268 @@ -1126,9 +1154,8 @@ CONFIG_MD_LINEAR=m
   6.269  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_RAID456=m
   6.274  CONFIG_MD_RAID5_RESHAPE=y
   6.275 -CONFIG_MD_RAID6=m
   6.276  CONFIG_MD_MULTIPATH=m
   6.277  CONFIG_MD_FAULTY=m
   6.278  CONFIG_BLK_DEV_DM=m
   6.279 @@ -1175,7 +1202,6 @@ CONFIG_IEEE1394_OHCI1394=m
   6.280  #
   6.281  CONFIG_IEEE1394_VIDEO1394=m
   6.282  CONFIG_IEEE1394_SBP2=m
   6.283 -# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
   6.284  CONFIG_IEEE1394_ETH1394=m
   6.285  CONFIG_IEEE1394_DV1394=m
   6.286  CONFIG_IEEE1394_RAWIO=m
   6.287 @@ -1230,6 +1256,11 @@ CONFIG_DAVICOM_PHY=m
   6.288  CONFIG_QSEMI_PHY=m
   6.289  CONFIG_LXT_PHY=m
   6.290  CONFIG_CICADA_PHY=m
   6.291 +CONFIG_VITESSE_PHY=m
   6.292 +CONFIG_SMSC_PHY=m
   6.293 +CONFIG_FIXED_PHY=m
   6.294 +# CONFIG_FIXED_MII_10_FDX is not set
   6.295 +# CONFIG_FIXED_MII_100_FDX is not set
   6.296  
   6.297  #
   6.298  # Ethernet (10 or 100Mbit)
   6.299 @@ -1285,6 +1316,7 @@ CONFIG_SUNDANCE=m
   6.300  # CONFIG_SUNDANCE_MMIO is not set
   6.301  CONFIG_VIA_RHINE=m
   6.302  # CONFIG_VIA_RHINE_MMIO is not set
   6.303 +# CONFIG_VIA_RHINE_NAPI is not set
   6.304  # CONFIG_NET_POCKET is not set
   6.305  
   6.306  #
   6.307 @@ -1318,6 +1350,7 @@ CONFIG_IXGB=m
   6.308  CONFIG_IXGB_NAPI=y
   6.309  CONFIG_S2IO=m
   6.310  CONFIG_S2IO_NAPI=y
   6.311 +CONFIG_MYRI10GE=m
   6.312  
   6.313  #
   6.314  # Token Ring devices
   6.315 @@ -1355,7 +1388,9 @@ CONFIG_IPW2100_MONITOR=y
   6.316  # CONFIG_IPW2100_DEBUG is not set
   6.317  CONFIG_IPW2200=m
   6.318  CONFIG_IPW2200_MONITOR=y
   6.319 -CONFIG_IPW_QOS=y
   6.320 +# CONFIG_IPW2200_RADIOTAP is not set
   6.321 +# CONFIG_IPW2200_PROMISCUOUS is not set
   6.322 +CONFIG_IPW2200_QOS=y
   6.323  # CONFIG_IPW2200_DEBUG is not set
   6.324  CONFIG_AIRO=m
   6.325  CONFIG_HERMES=m
   6.326 @@ -1379,6 +1414,7 @@ CONFIG_PCI_ATMEL=m
   6.327  # Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
   6.328  #
   6.329  CONFIG_PRISM54=m
   6.330 +CONFIG_USB_ZD1201=m
   6.331  CONFIG_HOSTAP=m
   6.332  CONFIG_HOSTAP_FIRMWARE=y
   6.333  CONFIG_HOSTAP_FIRMWARE_NVRAM=y
   6.334 @@ -1392,6 +1428,8 @@ CONFIG_BCM43XX_PIO=y
   6.335  CONFIG_BCM43XX_DMA_AND_PIO_MODE=y
   6.336  # CONFIG_BCM43XX_DMA_MODE is not set
   6.337  # CONFIG_BCM43XX_PIO_MODE is not set
   6.338 +CONFIG_ZD1211RW=m
   6.339 +# CONFIG_ZD1211RW_DEBUG is not set
   6.340  CONFIG_NET_WIRELESS=y
   6.341  
   6.342  #
   6.343 @@ -1681,6 +1719,7 @@ CONFIG_GAMEPORT_FM801=m
   6.344  CONFIG_VT=y
   6.345  CONFIG_VT_CONSOLE=y
   6.346  CONFIG_HW_CONSOLE=y
   6.347 +CONFIG_VT_HW_CONSOLE_BINDING=y
   6.348  # CONFIG_SERIAL_NONSTANDARD is not set
   6.349  
   6.350  #
   6.351 @@ -1752,7 +1791,10 @@ CONFIG_WDT_501_PCI=y
   6.352  # USB-based Watchdog Cards
   6.353  #
   6.354  CONFIG_USBPCWATCHDOG=m
   6.355 -CONFIG_HW_RANDOM=m
   6.356 +CONFIG_HW_RANDOM=y
   6.357 +CONFIG_HW_RANDOM_INTEL=m
   6.358 +CONFIG_HW_RANDOM_AMD=m
   6.359 +CONFIG_HW_RANDOM_GEODE=m
   6.360  CONFIG_NVRAM=y
   6.361  CONFIG_RTC=y
   6.362  CONFIG_DTLK=m
   6.363 @@ -1786,6 +1828,8 @@ CONFIG_DRM_SAVAGE=m
   6.364  # CONFIG_CARDMAN_4000 is not set
   6.365  # CONFIG_CARDMAN_4040 is not set
   6.366  # CONFIG_MWAVE is not set
   6.367 +CONFIG_PC8736x_GPIO=m
   6.368 +CONFIG_NSC_GPIO=m
   6.369  # CONFIG_RAW_DRIVER is not set
   6.370  # CONFIG_HPET is not set
   6.371  CONFIG_HANGCHECK_TIMER=m
   6.372 @@ -1828,6 +1872,7 @@ CONFIG_I2C_I810=m
   6.373  CONFIG_I2C_PIIX4=m
   6.374  CONFIG_I2C_ISA=m
   6.375  CONFIG_I2C_NFORCE2=m
   6.376 +CONFIG_I2C_OCORES=m
   6.377  CONFIG_I2C_PARPORT=m
   6.378  CONFIG_I2C_PARPORT_LIGHT=m
   6.379  CONFIG_I2C_PROSAVAGE=m
   6.380 @@ -1877,13 +1922,13 @@ CONFIG_SPI_BUTTERFLY=m
   6.381  # Dallas's 1-wire bus
   6.382  #
   6.383  CONFIG_W1=m
   6.384 +CONFIG_W1_CON=y
   6.385  
   6.386  #
   6.387  # 1-wire Bus Masters
   6.388  #
   6.389  CONFIG_W1_MASTER_MATROX=m
   6.390 -CONFIG_W1_MASTER_DS9490=m
   6.391 -CONFIG_W1_MASTER_DS9490_BRIDGE=m
   6.392 +CONFIG_W1_MASTER_DS2490=m
   6.393  CONFIG_W1_MASTER_DS2482=m
   6.394  
   6.395  #
   6.396 @@ -1892,12 +1937,14 @@ CONFIG_W1_MASTER_DS2482=m
   6.397  CONFIG_W1_SLAVE_THERM=m
   6.398  CONFIG_W1_SLAVE_SMEM=m
   6.399  CONFIG_W1_SLAVE_DS2433=m
   6.400 +# CONFIG_W1_SLAVE_DS2433_CRC is not set
   6.401  
   6.402  #
   6.403  # Hardware Monitoring support
   6.404  #
   6.405  CONFIG_HWMON=m
   6.406  CONFIG_HWMON_VID=m
   6.407 +CONFIG_SENSORS_ABITUGURU=m
   6.408  CONFIG_SENSORS_ADM1021=m
   6.409  CONFIG_SENSORS_ADM1025=m
   6.410  CONFIG_SENSORS_ADM1026=m
   6.411 @@ -1913,6 +1960,7 @@ CONFIG_SENSORS_GL518SM=m
   6.412  CONFIG_SENSORS_GL520SM=m
   6.413  CONFIG_SENSORS_IT87=m
   6.414  CONFIG_SENSORS_LM63=m
   6.415 +CONFIG_SENSORS_LM70=m
   6.416  CONFIG_SENSORS_LM75=m
   6.417  CONFIG_SENSORS_LM77=m
   6.418  CONFIG_SENSORS_LM78=m
   6.419 @@ -1926,10 +1974,12 @@ CONFIG_SENSORS_MAX1619=m
   6.420  CONFIG_SENSORS_PC87360=m
   6.421  CONFIG_SENSORS_SIS5595=m
   6.422  CONFIG_SENSORS_SMSC47M1=m
   6.423 +CONFIG_SENSORS_SMSC47M192=m
   6.424  CONFIG_SENSORS_SMSC47B397=m
   6.425  CONFIG_SENSORS_VIA686A=m
   6.426  CONFIG_SENSORS_VT8231=m
   6.427  CONFIG_SENSORS_W83781D=m
   6.428 +CONFIG_SENSORS_W83791D=m
   6.429  CONFIG_SENSORS_W83792D=m
   6.430  CONFIG_SENSORS_W83L785TS=m
   6.431  CONFIG_SENSORS_W83627HF=m
   6.432 @@ -1948,7 +1998,7 @@ CONFIG_IBM_ASM=m
   6.433  CONFIG_VIDEO_DEV=m
   6.434  CONFIG_VIDEO_V4L1=y
   6.435  CONFIG_VIDEO_V4L1_COMPAT=y
   6.436 -CONFIG_VIDEO_V4L2=m
   6.437 +CONFIG_VIDEO_V4L2=y
   6.438  
   6.439  #
   6.440  # Video Capture Adapters
   6.441 @@ -1979,6 +2029,7 @@ CONFIG_VIDEO_ZORAN_DC10=m
   6.442  CONFIG_VIDEO_ZORAN_DC30=m
   6.443  CONFIG_VIDEO_ZORAN_LML33=m
   6.444  CONFIG_VIDEO_ZORAN_LML33R10=m
   6.445 +CONFIG_VIDEO_ZORAN_AVS6EYES=m
   6.446  CONFIG_VIDEO_SAA7134=m
   6.447  CONFIG_VIDEO_SAA7134_ALSA=m
   6.448  CONFIG_VIDEO_SAA7134_DVB=m
   6.449 @@ -1990,17 +2041,19 @@ CONFIG_VIDEO_HEXIUM_GEMINI=m
   6.450  CONFIG_VIDEO_CX88_VP3054=m
   6.451  CONFIG_VIDEO_CX88=m
   6.452  CONFIG_VIDEO_CX88_ALSA=m
   6.453 +CONFIG_VIDEO_CX88_BLACKBIRD=m
   6.454  CONFIG_VIDEO_CX88_DVB=m
   6.455  CONFIG_VIDEO_CX88_DVB_ALL_FRONTENDS=y
   6.456 -CONFIG_VIDEO_OVCAMCHIP=m
   6.457  
   6.458  #
   6.459  # Encoders and Decoders
   6.460  #
   6.461  CONFIG_VIDEO_MSP3400=m
   6.462  CONFIG_VIDEO_CS53L32A=m
   6.463 +CONFIG_VIDEO_TLV320AIC23B=m
   6.464  CONFIG_VIDEO_WM8775=m
   6.465  CONFIG_VIDEO_WM8739=m
   6.466 +CONFIG_VIDEO_CX2341X=m
   6.467  CONFIG_VIDEO_CX25840=m
   6.468  CONFIG_VIDEO_SAA711X=m
   6.469  CONFIG_VIDEO_SAA7127=m
   6.470 @@ -2010,20 +2063,26 @@ CONFIG_VIDEO_UPD64083=m
   6.471  #
   6.472  # V4L USB devices
   6.473  #
   6.474 +CONFIG_VIDEO_PVRUSB2=m
   6.475 +CONFIG_VIDEO_PVRUSB2_24XXX=y
   6.476 +CONFIG_VIDEO_PVRUSB2_SYSFS=y
   6.477 +# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
   6.478  CONFIG_VIDEO_EM28XX=m
   6.479 -CONFIG_USB_DSBR=m
   6.480  CONFIG_VIDEO_USBVIDEO=m
   6.481  CONFIG_USB_VICAM=m
   6.482  CONFIG_USB_IBMCAM=m
   6.483  CONFIG_USB_KONICAWC=m
   6.484 +CONFIG_USB_QUICKCAM_MESSENGER=m
   6.485  CONFIG_USB_ET61X251=m
   6.486 +CONFIG_VIDEO_OVCAMCHIP=m
   6.487 +CONFIG_USB_W9968CF=m
   6.488  CONFIG_USB_OV511=m
   6.489  CONFIG_USB_SE401=m
   6.490  CONFIG_USB_SN9C102=m
   6.491  CONFIG_USB_STV680=m
   6.492 -CONFIG_USB_W9968CF=m
   6.493  CONFIG_USB_ZC0301=m
   6.494  CONFIG_USB_PWC=m
   6.495 +# CONFIG_USB_PWC_DEBUG is not set
   6.496  
   6.497  #
   6.498  # Radio Adapters
   6.499 @@ -2031,6 +2090,7 @@ CONFIG_USB_PWC=m
   6.500  CONFIG_RADIO_GEMTEK_PCI=m
   6.501  CONFIG_RADIO_MAXIRADIO=m
   6.502  CONFIG_RADIO_MAESTRO=m
   6.503 +CONFIG_USB_DSBR=m
   6.504  
   6.505  #
   6.506  # Digital Video Broadcasting Devices
   6.507 @@ -2062,6 +2122,7 @@ CONFIG_DVB_USB_CXUSB=m
   6.508  CONFIG_DVB_USB_DIGITV=m
   6.509  CONFIG_DVB_USB_VP7045=m
   6.510  CONFIG_DVB_USB_VP702X=m
   6.511 +CONFIG_DVB_USB_GP8PSK=m
   6.512  CONFIG_DVB_USB_NOVA_T_USB2=m
   6.513  CONFIG_DVB_USB_DTT200U=m
   6.514  CONFIG_DVB_TTUSB_BUDGET=m
   6.515 @@ -2134,13 +2195,20 @@ CONFIG_DVB_TDA10021=m
   6.516  CONFIG_DVB_STV0297=m
   6.517  
   6.518  #
   6.519 -# ATSC (North American/Korean Terresterial DTV) frontends
   6.520 +# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
   6.521  #
   6.522  CONFIG_DVB_NXT200X=m
   6.523  CONFIG_DVB_OR51211=m
   6.524  CONFIG_DVB_OR51132=m
   6.525  CONFIG_DVB_BCM3510=m
   6.526  CONFIG_DVB_LGDT330X=m
   6.527 +
   6.528 +#
   6.529 +# Miscellaneous devices
   6.530 +#
   6.531 +CONFIG_DVB_PLL=m
   6.532 +CONFIG_DVB_LNBP21=m
   6.533 +CONFIG_DVB_ISL6421=m
   6.534  CONFIG_VIDEO_SAA7146=m
   6.535  CONFIG_VIDEO_SAA7146_VV=m
   6.536  CONFIG_VIDEO_VIDEOBUF=m
   6.537 @@ -2155,12 +2223,13 @@ CONFIG_USB_DABUSB=m
   6.538  #
   6.539  # Graphics support
   6.540  #
   6.541 +CONFIG_FIRMWARE_EDID=y
   6.542  CONFIG_FB=y
   6.543  CONFIG_FB_CFB_FILLRECT=y
   6.544  CONFIG_FB_CFB_COPYAREA=y
   6.545  CONFIG_FB_CFB_IMAGEBLIT=y
   6.546  # CONFIG_FB_MACMODES is not set
   6.547 -CONFIG_FB_FIRMWARE_EDID=y
   6.548 +# CONFIG_FB_BACKLIGHT is not set
   6.549  CONFIG_FB_MODE_HELPERS=y
   6.550  CONFIG_FB_TILEBLITTING=y
   6.551  CONFIG_FB_CIRRUS=m
   6.552 @@ -2171,7 +2240,6 @@ CONFIG_FB_ARC=m
   6.553  # CONFIG_FB_IMSTT is not set
   6.554  CONFIG_FB_VGA16=m
   6.555  CONFIG_FB_VESA=y
   6.556 -CONFIG_VIDEO_SELECT=y
   6.557  CONFIG_FB_HGA=m
   6.558  CONFIG_FB_HGA_ACCEL=y
   6.559  CONFIG_FB_S1D13XXX=m
   6.560 @@ -2180,6 +2248,8 @@ CONFIG_FB_NVIDIA_I2C=y
   6.561  CONFIG_FB_RIVA=m
   6.562  CONFIG_FB_RIVA_I2C=y
   6.563  # CONFIG_FB_RIVA_DEBUG is not set
   6.564 +CONFIG_FB_INTEL=m
   6.565 +# CONFIG_FB_INTEL_DEBUG is not set
   6.566  CONFIG_FB_MATROX=m
   6.567  CONFIG_FB_MATROX_MILLENIUM=y
   6.568  CONFIG_FB_MATROX_MYSTIQUE=y
   6.569 @@ -2300,6 +2370,18 @@ CONFIG_SND_CMIPCI=m
   6.570  CONFIG_SND_CS4281=m
   6.571  CONFIG_SND_CS46XX=m
   6.572  CONFIG_SND_CS46XX_NEW_DSP=y
   6.573 +CONFIG_SND_DARLA20=m
   6.574 +CONFIG_SND_GINA20=m
   6.575 +CONFIG_SND_LAYLA20=m
   6.576 +CONFIG_SND_DARLA24=m
   6.577 +CONFIG_SND_GINA24=m
   6.578 +CONFIG_SND_LAYLA24=m
   6.579 +CONFIG_SND_MONA=m
   6.580 +CONFIG_SND_MIA=m
   6.581 +CONFIG_SND_ECHO3G=m
   6.582 +CONFIG_SND_INDIGO=m
   6.583 +CONFIG_SND_INDIGOIO=m
   6.584 +CONFIG_SND_INDIGODJ=m
   6.585  CONFIG_SND_EMU10K1=m
   6.586  CONFIG_SND_EMU10K1X=m
   6.587  CONFIG_SND_ENS1370=m
   6.588 @@ -2307,6 +2389,7 @@ CONFIG_SND_ENS1371=m
   6.589  CONFIG_SND_ES1938=m
   6.590  CONFIG_SND_ES1968=m
   6.591  CONFIG_SND_FM801=m
   6.592 +CONFIG_SND_FM801_TEA575X_BOOL=y
   6.593  CONFIG_SND_FM801_TEA575X=m
   6.594  CONFIG_SND_HDA_INTEL=m
   6.595  CONFIG_SND_HDSP=m
   6.596 @@ -2372,6 +2455,7 @@ CONFIG_USB_DEVICEFS=y
   6.597  CONFIG_USB_EHCI_HCD=m
   6.598  CONFIG_USB_EHCI_SPLIT_ISO=y
   6.599  CONFIG_USB_EHCI_ROOT_HUB_TT=y
   6.600 +CONFIG_USB_EHCI_TT_NEWSCHED=y
   6.601  CONFIG_USB_ISP116X_HCD=m
   6.602  CONFIG_USB_OHCI_HCD=m
   6.603  # CONFIG_USB_OHCI_BIG_ENDIAN is not set
   6.604 @@ -2467,7 +2551,6 @@ CONFIG_USB_BELKIN=y
   6.605  CONFIG_USB_ARMLINUX=y
   6.606  CONFIG_USB_EPSON2888=y
   6.607  CONFIG_USB_NET_ZAURUS=m
   6.608 -CONFIG_USB_ZD1201=m
   6.609  CONFIG_USB_MON=y
   6.610  
   6.611  #
   6.612 @@ -2481,7 +2564,6 @@ CONFIG_USB_USS720=m
   6.613  CONFIG_USB_SERIAL=m
   6.614  CONFIG_USB_SERIAL_GENERIC=y
   6.615  CONFIG_USB_SERIAL_AIRPRIME=m
   6.616 -CONFIG_USB_SERIAL_ANYDATA=m
   6.617  CONFIG_USB_SERIAL_ARK3116=m
   6.618  CONFIG_USB_SERIAL_BELKIN=m
   6.619  CONFIG_USB_SERIAL_WHITEHEAT=m
   6.620 @@ -2520,6 +2602,7 @@ CONFIG_USB_SERIAL_PL2303=m
   6.621  CONFIG_USB_SERIAL_HP4X=m
   6.622  CONFIG_USB_SERIAL_SAFE=m
   6.623  CONFIG_USB_SERIAL_SAFE_PADDED=y
   6.624 +CONFIG_USB_SERIAL_SIERRAWIRELESS=m
   6.625  CONFIG_USB_SERIAL_TI=m
   6.626  CONFIG_USB_SERIAL_CYBERJACK=m
   6.627  CONFIG_USB_SERIAL_XIRCOM=m
   6.628 @@ -2537,10 +2620,12 @@ CONFIG_USB_RIO500=m
   6.629  CONFIG_USB_LEGOTOWER=m
   6.630  CONFIG_USB_LCD=m
   6.631  CONFIG_USB_LED=m
   6.632 +CONFIG_USB_CYPRESS_CY7C63=m
   6.633  CONFIG_USB_CYTHERM=m
   6.634  CONFIG_USB_PHIDGETKIT=m
   6.635  CONFIG_USB_PHIDGETSERVO=m
   6.636  CONFIG_USB_IDMOUSE=m
   6.637 +CONFIG_USB_APPLEDISPLAY=m
   6.638  CONFIG_USB_SISUSBVGA=m
   6.639  CONFIG_USB_SISUSBVGA_CON=y
   6.640  CONFIG_USB_LD=m
   6.641 @@ -2585,6 +2670,7 @@ CONFIG_LEDS_CLASS=m
   6.642  CONFIG_LEDS_TRIGGERS=y
   6.643  CONFIG_LEDS_TRIGGER_TIMER=m
   6.644  CONFIG_LEDS_TRIGGER_IDE_DISK=y
   6.645 +CONFIG_LEDS_TRIGGER_HEARTBEAT=m
   6.646  
   6.647  #
   6.648  # InfiniBand support
   6.649 @@ -2592,12 +2678,14 @@ CONFIG_LEDS_TRIGGER_IDE_DISK=y
   6.650  CONFIG_INFINIBAND=m
   6.651  CONFIG_INFINIBAND_USER_MAD=m
   6.652  CONFIG_INFINIBAND_USER_ACCESS=m
   6.653 +CONFIG_INFINIBAND_ADDR_TRANS=y
   6.654  CONFIG_INFINIBAND_MTHCA=m
   6.655  CONFIG_INFINIBAND_MTHCA_DEBUG=y
   6.656  CONFIG_INFINIBAND_IPOIB=m
   6.657  CONFIG_INFINIBAND_IPOIB_DEBUG=y
   6.658  # CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
   6.659  CONFIG_INFINIBAND_SRP=m
   6.660 +CONFIG_INFINIBAND_ISER=m
   6.661  
   6.662  #
   6.663  # EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
   6.664 @@ -2624,16 +2712,40 @@ CONFIG_RTC_CLASS=m
   6.665  CONFIG_RTC_INTF_SYSFS=m
   6.666  CONFIG_RTC_INTF_PROC=m
   6.667  CONFIG_RTC_INTF_DEV=m
   6.668 +CONFIG_RTC_INTF_DEV_UIE_EMUL=y
   6.669  
   6.670  #
   6.671  # RTC drivers
   6.672  #
   6.673  CONFIG_RTC_DRV_X1205=m
   6.674 +CONFIG_RTC_DRV_DS1307=m
   6.675 +CONFIG_RTC_DRV_DS1553=m
   6.676 +CONFIG_RTC_DRV_ISL1208=m
   6.677  CONFIG_RTC_DRV_DS1672=m
   6.678 +CONFIG_RTC_DRV_DS1742=m
   6.679  CONFIG_RTC_DRV_PCF8563=m
   6.680 +CONFIG_RTC_DRV_PCF8583=m
   6.681 +CONFIG_RTC_DRV_RS5C348=m
   6.682  CONFIG_RTC_DRV_RS5C372=m
   6.683  CONFIG_RTC_DRV_M48T86=m
   6.684  CONFIG_RTC_DRV_TEST=m
   6.685 +CONFIG_RTC_DRV_MAX6902=m
   6.686 +CONFIG_RTC_DRV_V3020=m
   6.687 +
   6.688 +#
   6.689 +# DMA Engine support
   6.690 +#
   6.691 +CONFIG_DMA_ENGINE=y
   6.692 +
   6.693 +#
   6.694 +# DMA Clients
   6.695 +#
   6.696 +CONFIG_NET_DMA=y
   6.697 +
   6.698 +#
   6.699 +# DMA Devices
   6.700 +#
   6.701 +CONFIG_INTEL_IOATDMA=m
   6.702  
   6.703  #
   6.704  # Firmware Drivers
   6.705 @@ -2670,15 +2782,16 @@ CONFIG_JFS_SECURITY=y
   6.706  # CONFIG_JFS_STATISTICS is not set
   6.707  CONFIG_FS_POSIX_ACL=y
   6.708  CONFIG_XFS_FS=m
   6.709 -CONFIG_XFS_EXPORT=y
   6.710  CONFIG_XFS_QUOTA=y
   6.711  CONFIG_XFS_SECURITY=y
   6.712  CONFIG_XFS_POSIX_ACL=y
   6.713  CONFIG_XFS_RT=y
   6.714  CONFIG_OCFS2_FS=m
   6.715 +CONFIG_OCFS2_DEBUG_MASKLOG=y
   6.716  CONFIG_MINIX_FS=m
   6.717  CONFIG_ROMFS_FS=m
   6.718  CONFIG_INOTIFY=y
   6.719 +CONFIG_INOTIFY_USER=y
   6.720  CONFIG_QUOTA=y
   6.721  # CONFIG_QFMT_V1 is not set
   6.722  CONFIG_QFMT_V2=m
   6.723 @@ -2740,6 +2853,9 @@ CONFIG_JFFS2_FS=m
   6.724  CONFIG_JFFS2_FS_DEBUG=0
   6.725  CONFIG_JFFS2_FS_WRITEBUFFER=y
   6.726  CONFIG_JFFS2_SUMMARY=y
   6.727 +CONFIG_JFFS2_FS_XATTR=y
   6.728 +CONFIG_JFFS2_FS_POSIX_ACL=y
   6.729 +CONFIG_JFFS2_FS_SECURITY=y
   6.730  CONFIG_JFFS2_COMPRESSION_OPTIONS=y
   6.731  CONFIG_JFFS2_ZLIB=y
   6.732  CONFIG_JFFS2_RTIME=y
   6.733 @@ -2753,6 +2869,8 @@ CONFIG_HPFS_FS=m
   6.734  CONFIG_QNX4FS_FS=m
   6.735  CONFIG_SYSV_FS=m
   6.736  CONFIG_UFS_FS=m
   6.737 +# CONFIG_UFS_FS_WRITE is not set
   6.738 +# CONFIG_UFS_DEBUG is not set
   6.739  
   6.740  #
   6.741  # Network File Systems
   6.742 @@ -2783,8 +2901,10 @@ CONFIG_SMB_NLS_REMOTE="cp850"
   6.743  CONFIG_CIFS=m
   6.744  CONFIG_CIFS_STATS=y
   6.745  # CONFIG_CIFS_STATS2 is not set
   6.746 +# CONFIG_CIFS_WEAK_PW_HASH is not set
   6.747  CONFIG_CIFS_XATTR=y
   6.748  CONFIG_CIFS_POSIX=y
   6.749 +# CONFIG_CIFS_DEBUG2 is not set
   6.750  # CONFIG_CIFS_EXPERIMENTAL is not set
   6.751  CONFIG_NCP_FS=m
   6.752  CONFIG_NCPFS_PACKET_SIGNING=y
   6.753 @@ -2875,16 +2995,24 @@ CONFIG_NLS_UTF8=m
   6.754  #
   6.755  # Kernel hacking
   6.756  #
   6.757 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
   6.758  # CONFIG_PRINTK_TIME is not set
   6.759  CONFIG_MAGIC_SYSRQ=y
   6.760 +CONFIG_UNUSED_SYMBOLS=y
   6.761  CONFIG_DEBUG_KERNEL=y
   6.762  CONFIG_LOG_BUF_SHIFT=15
   6.763  CONFIG_DETECT_SOFTLOCKUP=y
   6.764  # CONFIG_SCHEDSTATS is not set
   6.765  # CONFIG_DEBUG_SLAB is not set
   6.766 -# CONFIG_DEBUG_MUTEXES is not set
   6.767 +# CONFIG_DEBUG_RT_MUTEXES is not set
   6.768 +# CONFIG_RT_MUTEX_TESTER is not set
   6.769  # CONFIG_DEBUG_SPINLOCK is not set
   6.770 +# CONFIG_DEBUG_MUTEXES is not set
   6.771 +# CONFIG_DEBUG_RWSEMS is not set
   6.772 +# CONFIG_DEBUG_LOCK_ALLOC is not set
   6.773 +# CONFIG_PROVE_LOCKING is not set
   6.774  # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
   6.775 +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
   6.776  # CONFIG_DEBUG_KOBJECT is not set
   6.777  # CONFIG_DEBUG_INFO is not set
   6.778  # CONFIG_DEBUG_FS is not set
   6.779 @@ -2894,6 +3022,8 @@ CONFIG_DETECT_SOFTLOCKUP=y
   6.780  CONFIG_FORCED_INLINING=y
   6.781  # CONFIG_RCU_TORTURE_TEST is not set
   6.782  # CONFIG_DEBUG_RODATA is not set
   6.783 +# CONFIG_DEBUG_STACKOVERFLOW is not set
   6.784 +# CONFIG_DEBUG_STACK_USAGE is not set
   6.785  
   6.786  #
   6.787  # Security options
   6.788 @@ -2980,7 +3110,6 @@ CONFIG_NO_IDLE_HZ=y
   6.789  CONFIG_XEN_UTIL=y
   6.790  CONFIG_XEN_BALLOON=y
   6.791  CONFIG_XEN_DEVMEM=y
   6.792 -CONFIG_XEN_SKBUFF=y
   6.793  CONFIG_XEN_REBOOT=y
   6.794  CONFIG_XEN_SMPBOOT=y
   6.795  
   6.796 @@ -2999,3 +3128,4 @@ CONFIG_TEXTSEARCH=y
   6.797  CONFIG_TEXTSEARCH_KMP=m
   6.798  CONFIG_TEXTSEARCH_BM=m
   6.799  CONFIG_TEXTSEARCH_FSM=m
   6.800 +CONFIG_PLIST=y
     7.1 --- a/buildconfigs/mk.linux-2.6-xen	Fri Jan 12 15:32:03 2007 +0000
     7.2 +++ b/buildconfigs/mk.linux-2.6-xen	Wed Jan 17 18:41:22 2007 +0000
     7.3 @@ -1,5 +1,5 @@
     7.4  LINUX_SERIES = 2.6
     7.5 -LINUX_VER    = 2.6.17
     7.6 +LINUX_VER    = 2.6.18
     7.7  
     7.8  EXTRAVERSION ?= xen
     7.9  
     8.1 --- a/linux-2.6-xen-sparse/arch/i386/Kconfig	Fri Jan 12 15:32:03 2007 +0000
     8.2 +++ b/linux-2.6-xen-sparse/arch/i386/Kconfig	Wed Jan 17 18:41:22 2007 +0000
     8.3 @@ -14,6 +14,18 @@ config X86_32
     8.4  	  486, 586, Pentiums, and various instruction-set-compatible chips by
     8.5  	  AMD, Cyrix, and others.
     8.6  
     8.7 +config GENERIC_TIME
     8.8 +	bool
     8.9 +	default y
    8.10 +
    8.11 +config LOCKDEP_SUPPORT
    8.12 +	bool
    8.13 +	default y
    8.14 +
    8.15 +config STACKTRACE_SUPPORT
    8.16 +	bool
    8.17 +	default y
    8.18 +
    8.19  config SEMAPHORE_SLEEPERS
    8.20  	bool
    8.21  	default y
    8.22 @@ -139,6 +151,7 @@ config X86_SUMMIT
    8.23  	  In particular, it is needed for the x440.
    8.24  
    8.25  	  If you don't have one of these computers, you should say N here.
    8.26 +	  If you want to build a NUMA kernel, you must select ACPI.
    8.27  
    8.28  config X86_BIGSMP
    8.29  	bool "Support for other sub-arch SMP systems with more than 8 CPUs"
    8.30 @@ -166,6 +179,7 @@ config X86_GENERICARCH
    8.31         help
    8.32            This option compiles in the Summit, bigsmp, ES7000, default subarchitectures.
    8.33  	  It is intended for a generic binary kernel.
    8.34 +	  If you want a NUMA kernel, select ACPI.   We need SRAT for NUMA.
    8.35  
    8.36  config X86_ES7000
    8.37  	bool "Support for Unisys ES7000 IA32 series"
    8.38 @@ -181,7 +195,13 @@ endchoice
    8.39  config ACPI_SRAT
    8.40  	bool
    8.41  	default y
    8.42 -	depends on NUMA && (X86_SUMMIT || X86_GENERICARCH)
    8.43 +	depends on ACPI && NUMA && (X86_SUMMIT || X86_GENERICARCH)
    8.44 +	select ACPI_NUMA
    8.45 +
    8.46 +config HAVE_ARCH_PARSE_SRAT
    8.47 +       bool
    8.48 +       default y
    8.49 +       depends on ACPI_SRAT
    8.50  
    8.51  config X86_SUMMIT_NUMA
    8.52  	bool
    8.53 @@ -233,8 +253,8 @@ config NR_CPUS
    8.54  
    8.55  config SCHED_SMT
    8.56  	bool "SMT (Hyperthreading) scheduler support"
    8.57 -	depends on SMP && !X86_XEN
    8.58 -	default off
    8.59 +	depends on X86_HT
    8.60 +	depends on !X86_XEN
    8.61  	help
    8.62  	  SMT scheduler support improves the CPU scheduler's decision making
    8.63  	  when dealing with Intel Pentium 4 chips with HyperThreading at a
    8.64 @@ -243,7 +263,7 @@ config SCHED_SMT
    8.65  
    8.66  config SCHED_MC
    8.67  	bool "Multi-core scheduler support"
    8.68 -	depends on SMP
    8.69 +	depends on X86_HT
    8.70  	default y
    8.71  	help
    8.72  	  Multi-core scheduler support improves the CPU scheduler's decision
    8.73 @@ -334,6 +354,15 @@ config X86_MCE_P4THERMAL
    8.74  	  Enabling this feature will cause a message to be printed when the P4
    8.75  	  enters thermal throttling.
    8.76  
    8.77 +config VM86
    8.78 +	default y
    8.79 +	bool "Enable VM86 support" if EMBEDDED
    8.80 +	help
    8.81 +          This option is required by programs like DOSEMU to run 16-bit legacy
    8.82 +	  code on X86 processors. It also may be needed by software like
    8.83 +          XFree86 to initialize some video cards via BIOS. Disabling this
    8.84 +          option saves about 6k.
    8.85 +
    8.86  config TOSHIBA
    8.87  	tristate "Toshiba Laptop support"
    8.88  	---help---
    8.89 @@ -532,11 +561,12 @@ config X86_PAE
    8.90  	bool
    8.91  	depends on HIGHMEM64G
    8.92  	default y
    8.93 +	select RESOURCES_64BIT
    8.94  
    8.95  # Common NUMA Features
    8.96  config NUMA
    8.97  	bool "Numa Memory Allocation and Scheduler Support"
    8.98 -	depends on SMP && HIGHMEM64G && (X86_NUMAQ || X86_GENERICARCH || (X86_SUMMIT && ACPI))
    8.99 +	depends on SMP && HIGHMEM64G && (X86_NUMAQ || (X86_SUMMIT || X86_GENERICARCH) && ACPI)
   8.100  	default n if X86_PC
   8.101  	default y if (X86_NUMAQ || X86_SUMMIT)
   8.102  
   8.103 @@ -669,7 +699,7 @@ config MTRR
   8.104  	  See <file:Documentation/mtrr.txt> for more information.
   8.105  
   8.106  config EFI
   8.107 -	bool "Boot from EFI support (EXPERIMENTAL)"
   8.108 +	bool "Boot from EFI support"
   8.109  	depends on ACPI && !X86_XEN
   8.110  	default n
   8.111  	---help---
   8.112 @@ -740,10 +770,10 @@ config KEXEC
   8.113  	help
   8.114  	  kexec is a system call that implements the ability to shutdown your
   8.115  	  current kernel, and to start another kernel.  It is like a reboot
   8.116 -	  but it is indepedent of the system firmware.   And like a reboot
   8.117 +	  but it is independent of the system firmware.   And like a reboot
   8.118  	  you can start any kernel with it, not just Linux.
   8.119  
   8.120 -	  The name comes from the similiarity to the exec system call.
   8.121 +	  The name comes from the similarity to the exec system call.
   8.122  
   8.123  	  It is an ongoing process to be certain the hardware in a machine
   8.124  	  is properly shutdown, so do not be surprised if this code does not
   8.125 @@ -786,8 +816,24 @@ config HOTPLUG_CPU
   8.126  	  enable suspend on SMP systems. CPUs can be controlled through
   8.127  	  /sys/devices/system/cpu.
   8.128  
   8.129 +config COMPAT_VDSO
   8.130 +	bool "Compat VDSO support"
   8.131 +	depends on !X86_XEN
   8.132 +	default y
   8.133 +	help
   8.134 +	  Map the VDSO to the predictable old-style address too.
   8.135 +	---help---
   8.136 +	  Say N here if you are running a sufficiently recent glibc
   8.137 +	  version (2.3.3 or later), to remove the high-mapped
   8.138 +	  VDSO mapping and to exclusively use the randomized VDSO.
   8.139 +
   8.140 +	  If unsure, say Y.
   8.141 +
   8.142  endmenu
   8.143  
   8.144 +config ARCH_ENABLE_MEMORY_HOTPLUG
   8.145 +	def_bool y
   8.146 +	depends on HIGHMEM
   8.147  
   8.148  menu "Power management options (ACPI, APM)"
   8.149  	depends on !(X86_VOYAGER || XEN_UNPRIVILEGED_GUEST)
   8.150 @@ -1086,13 +1132,27 @@ config SCx200
   8.151  	tristate "NatSemi SCx200 support"
   8.152  	depends on !X86_VOYAGER
   8.153  	help
   8.154 -	  This provides basic support for the National Semiconductor SCx200
   8.155 -	  processor.  Right now this is just a driver for the GPIO pins.
   8.156 +	  This provides basic support for National Semiconductor's
   8.157 +	  (now AMD's) Geode processors.  The driver probes for the
   8.158 +	  PCI-IDs of several on-chip devices, so its a good dependency
   8.159 +	  for other scx200_* drivers.
   8.160 +
   8.161 +	  If compiled as a module, the driver is named scx200.
   8.162  
   8.163 -	  If you don't know what to do here, say N.
   8.164 +config SCx200HR_TIMER
   8.165 +	tristate "NatSemi SCx200 27MHz High-Resolution Timer Support"
   8.166 +	depends on SCx200 && GENERIC_TIME
   8.167 +	default y
   8.168 +	help
   8.169 +	  This driver provides a clocksource built upon the on-chip
   8.170 +	  27MHz high-resolution timer.  Its also a workaround for
   8.171 +	  NSC Geode SC-1100's buggy TSC, which loses time when the
   8.172 +	  processor goes idle (as is done by the scheduler).  The
   8.173 +	  other workaround is idle=poll boot option.
   8.174  
   8.175 -	  This support is also available as a module.  If compiled as a
   8.176 -	  module, it will be called scx200.
   8.177 +config K8_NB
   8.178 +	def_bool y
   8.179 +	depends on AGP_AMD64
   8.180  
   8.181  source "drivers/pcmcia/Kconfig"
   8.182  
     9.1 --- a/linux-2.6-xen-sparse/arch/i386/Kconfig.cpu	Fri Jan 12 15:32:03 2007 +0000
     9.2 +++ b/linux-2.6-xen-sparse/arch/i386/Kconfig.cpu	Wed Jan 17 18:41:22 2007 +0000
     9.3 @@ -41,7 +41,7 @@ config M386
     9.4  	  - "GeodeGX1" for Geode GX1 (Cyrix MediaGX).
     9.5  	  - "Geode GX/LX" For AMD Geode GX and LX processors.
     9.6  	  - "CyrixIII/VIA C3" for VIA Cyrix III or VIA C3.
     9.7 -	  - "VIA C3-2 for VIA C3-2 "Nehemiah" (model 9 and above).
     9.8 +	  - "VIA C3-2" for VIA C3-2 "Nehemiah" (model 9 and above).
     9.9  
    9.10  	  If you don't know what to do, choose "386".
    9.11  
    10.1 --- a/linux-2.6-xen-sparse/arch/i386/Kconfig.debug	Fri Jan 12 15:32:03 2007 +0000
    10.2 +++ b/linux-2.6-xen-sparse/arch/i386/Kconfig.debug	Wed Jan 17 18:41:22 2007 +0000
    10.3 @@ -1,5 +1,9 @@
    10.4  menu "Kernel hacking"
    10.5  
    10.6 +config TRACE_IRQFLAGS_SUPPORT
    10.7 +	bool
    10.8 +	default y
    10.9 +
   10.10  source "lib/Kconfig.debug"
   10.11  
   10.12  config EARLY_PRINTK
   10.13 @@ -31,15 +35,6 @@ config DEBUG_STACK_USAGE
   10.14  
   10.15  	  This option will slow down process creation somewhat.
   10.16  
   10.17 -config STACK_BACKTRACE_COLS
   10.18 -	int "Stack backtraces per line" if DEBUG_KERNEL
   10.19 -	range 1 3
   10.20 -	default 2
   10.21 -	help
   10.22 -	  Selects how many stack backtrace entries per line to display.
   10.23 -
   10.24 -	  This can save screen space when displaying traces.
   10.25 -
   10.26  comment "Page alloc debug is incompatible with Software Suspend on i386"
   10.27  	depends on DEBUG_KERNEL && SOFTWARE_SUSPEND
   10.28  
    11.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/Makefile	Fri Jan 12 15:32:03 2007 +0000
    11.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/Makefile	Wed Jan 17 18:41:22 2007 +0000
    11.3 @@ -7,10 +7,10 @@ extra-y := head.o init_task.o vmlinux.ld
    11.4  obj-y	:= process.o semaphore.o signal.o entry.o traps.o irq.o \
    11.5  		ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_i386.o \
    11.6  		pci-dma.o i386_ksyms.o i387.o bootflag.o \
    11.7 -		quirks.o i8237.o topology.o alternative.o
    11.8 +		quirks.o i8237.o topology.o alternative.o i8253.o tsc.o
    11.9  
   11.10 +obj-$(CONFIG_STACKTRACE)	+= stacktrace.o
   11.11  obj-y				+= cpu/
   11.12 -obj-y				+= timers/
   11.13  obj-y				+= acpi/
   11.14  obj-$(CONFIG_X86_BIOS_REBOOT)	+= reboot.o
   11.15  obj-$(CONFIG_MCA)		+= mca.o
   11.16 @@ -37,6 +37,8 @@ obj-$(CONFIG_EFI) 		+= efi.o efi_stub.o
   11.17  obj-$(CONFIG_DOUBLEFAULT) 	+= doublefault.o
   11.18  obj-$(CONFIG_VM86)		+= vm86.o
   11.19  obj-$(CONFIG_EARLY_PRINTK)	+= early_printk.o
   11.20 +obj-$(CONFIG_HPET_TIMER) 	+= hpet.o
   11.21 +obj-$(CONFIG_K8_NB)		+= k8.o
   11.22  
   11.23  EXTRA_AFLAGS   := -traditional
   11.24  
   11.25 @@ -62,7 +64,8 @@ quiet_cmd_syscall = SYSCALL $@
   11.26  
   11.27  export CPPFLAGS_vsyscall.lds += -P -C -U$(ARCH)
   11.28  
   11.29 -vsyscall-flags = -shared -s -Wl,-soname=linux-gate.so.1
   11.30 +vsyscall-flags = -shared -s -Wl,-soname=linux-gate.so.1 \
   11.31 +		 $(call ld-option, -Wl$(comma)--hash-style=sysv)
   11.32  SYSCFLAGS_vsyscall-sysenter.so	= $(vsyscall-flags)
   11.33  SYSCFLAGS_vsyscall-int80.so	= $(vsyscall-flags)
   11.34  
   11.35 @@ -83,6 +86,8 @@ SYSCFLAGS_vsyscall-syms.o = -r
   11.36  			$(obj)/vsyscall-sysenter.o $(obj)/$(vsyscall_note) FORCE
   11.37  	$(call if_changed,syscall)
   11.38  
   11.39 +k8-y                      += ../../x86_64/kernel/k8.o
   11.40 +
   11.41  ifdef CONFIG_XEN
   11.42  include $(srctree)/scripts/Makefile.xen
   11.43  
    12.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/acpi/boot-xen.c	Fri Jan 12 15:32:03 2007 +0000
    12.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/acpi/boot-xen.c	Wed Jan 17 18:41:22 2007 +0000
    12.3 @@ -24,7 +24,6 @@
    12.4   */
    12.5  
    12.6  #include <linux/init.h>
    12.7 -#include <linux/config.h>
    12.8  #include <linux/acpi.h>
    12.9  #include <linux/efi.h>
   12.10  #include <linux/module.h>
   12.11 @@ -60,7 +59,7 @@ static inline int gsi_irq_sharing(int gs
   12.12  
   12.13  #define BAD_MADT_ENTRY(entry, end) (					    \
   12.14  		(!entry) || (unsigned long)entry + sizeof(*entry) > end ||  \
   12.15 -		((acpi_table_entry_header *)entry)->length != sizeof(*entry))
   12.16 +		((acpi_table_entry_header *)entry)->length < sizeof(*entry))
   12.17  
   12.18  #define PREFIX			"ACPI: "
   12.19  
   12.20 @@ -204,6 +203,8 @@ int __init acpi_parse_mcfg(unsigned long
   12.21  		if (mcfg->config[i].base_reserved) {
   12.22  			printk(KERN_ERR PREFIX
   12.23  			       "MMCONFIG not in low 4GB of memory\n");
   12.24 +			kfree(pci_mmcfg_config);
   12.25 +			pci_mmcfg_config_num = 0;
   12.26  			return -ENODEV;
   12.27  		}
   12.28  	}
   12.29 @@ -217,7 +218,7 @@ static int __init acpi_parse_madt(unsign
   12.30  {
   12.31  	struct acpi_table_madt *madt = NULL;
   12.32  
   12.33 -	if (!phys_addr || !size)
   12.34 +	if (!phys_addr || !size || !cpu_has_apic)
   12.35  		return -EINVAL;
   12.36  
   12.37  	madt = (struct acpi_table_madt *)__acpi_map_table(phys_addr, size);
   12.38 @@ -624,9 +625,9 @@ extern u32 pmtmr_ioport;
   12.39  
   12.40  static int __init acpi_parse_fadt(unsigned long phys, unsigned long size)
   12.41  {
   12.42 -	struct fadt_descriptor_rev2 *fadt = NULL;
   12.43 +	struct fadt_descriptor *fadt = NULL;
   12.44  
   12.45 -	fadt = (struct fadt_descriptor_rev2 *)__acpi_map_table(phys, size);
   12.46 +	fadt = (struct fadt_descriptor *)__acpi_map_table(phys, size);
   12.47  	if (!fadt) {
   12.48  		printk(KERN_WARNING PREFIX "Unable to map FADT\n");
   12.49  		return 0;
   12.50 @@ -757,7 +758,7 @@ static int __init acpi_parse_madt_ioapic
   12.51  		return -ENODEV;
   12.52  	}
   12.53  
   12.54 -	if (!cpu_has_apic)
   12.55 +	if (!cpu_has_apic) 
   12.56  		return -ENODEV;
   12.57  
   12.58  	/*
    13.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    13.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/alternative-xen.c	Wed Jan 17 18:41:22 2007 +0000
    13.3 @@ -0,0 +1,389 @@
    13.4 +#include <linux/module.h>
    13.5 +#include <linux/spinlock.h>
    13.6 +#include <linux/list.h>
    13.7 +#include <asm/alternative.h>
    13.8 +#include <asm/sections.h>
    13.9 +
   13.10 +static int no_replacement    = 0;
   13.11 +static int smp_alt_once      = 0;
   13.12 +static int debug_alternative = 0;
   13.13 +
   13.14 +static int __init noreplacement_setup(char *s)
   13.15 +{
   13.16 +	no_replacement = 1;
   13.17 +	return 1;
   13.18 +}
   13.19 +static int __init bootonly(char *str)
   13.20 +{
   13.21 +	smp_alt_once = 1;
   13.22 +	return 1;
   13.23 +}
   13.24 +static int __init debug_alt(char *str)
   13.25 +{
   13.26 +	debug_alternative = 1;
   13.27 +	return 1;
   13.28 +}
   13.29 +
   13.30 +__setup("noreplacement", noreplacement_setup);
   13.31 +__setup("smp-alt-boot", bootonly);
   13.32 +__setup("debug-alternative", debug_alt);
   13.33 +
   13.34 +#define DPRINTK(fmt, args...) if (debug_alternative) \
   13.35 +	printk(KERN_DEBUG fmt, args)
   13.36 +
   13.37 +#ifdef GENERIC_NOP1
   13.38 +/* Use inline assembly to define this because the nops are defined
   13.39 +   as inline assembly strings in the include files and we cannot
   13.40 +   get them easily into strings. */
   13.41 +asm("\t.data\nintelnops: "
   13.42 +	GENERIC_NOP1 GENERIC_NOP2 GENERIC_NOP3 GENERIC_NOP4 GENERIC_NOP5 GENERIC_NOP6
   13.43 +	GENERIC_NOP7 GENERIC_NOP8);
   13.44 +extern unsigned char intelnops[];
   13.45 +static unsigned char *intel_nops[ASM_NOP_MAX+1] = {
   13.46 +	NULL,
   13.47 +	intelnops,
   13.48 +	intelnops + 1,
   13.49 +	intelnops + 1 + 2,
   13.50 +	intelnops + 1 + 2 + 3,
   13.51 +	intelnops + 1 + 2 + 3 + 4,
   13.52 +	intelnops + 1 + 2 + 3 + 4 + 5,
   13.53 +	intelnops + 1 + 2 + 3 + 4 + 5 + 6,
   13.54 +	intelnops + 1 + 2 + 3 + 4 + 5 + 6 + 7,
   13.55 +};
   13.56 +#endif
   13.57 +
   13.58 +#ifdef K8_NOP1
   13.59 +asm("\t.data\nk8nops: "
   13.60 +	K8_NOP1 K8_NOP2 K8_NOP3 K8_NOP4 K8_NOP5 K8_NOP6
   13.61 +	K8_NOP7 K8_NOP8);
   13.62 +extern unsigned char k8nops[];
   13.63 +static unsigned char *k8_nops[ASM_NOP_MAX+1] = {
   13.64 +	NULL,
   13.65 +	k8nops,
   13.66 +	k8nops + 1,
   13.67 +	k8nops + 1 + 2,
   13.68 +	k8nops + 1 + 2 + 3,
   13.69 +	k8nops + 1 + 2 + 3 + 4,
   13.70 +	k8nops + 1 + 2 + 3 + 4 + 5,
   13.71 +	k8nops + 1 + 2 + 3 + 4 + 5 + 6,
   13.72 +	k8nops + 1 + 2 + 3 + 4 + 5 + 6 + 7,
   13.73 +};
   13.74 +#endif
   13.75 +
   13.76 +#ifdef K7_NOP1
   13.77 +asm("\t.data\nk7nops: "
   13.78 +	K7_NOP1 K7_NOP2 K7_NOP3 K7_NOP4 K7_NOP5 K7_NOP6
   13.79 +	K7_NOP7 K7_NOP8);
   13.80 +extern unsigned char k7nops[];
   13.81 +static unsigned char *k7_nops[ASM_NOP_MAX+1] = {
   13.82 +	NULL,
   13.83 +	k7nops,
   13.84 +	k7nops + 1,
   13.85 +	k7nops + 1 + 2,
   13.86 +	k7nops + 1 + 2 + 3,
   13.87 +	k7nops + 1 + 2 + 3 + 4,
   13.88 +	k7nops + 1 + 2 + 3 + 4 + 5,
   13.89 +	k7nops + 1 + 2 + 3 + 4 + 5 + 6,
   13.90 +	k7nops + 1 + 2 + 3 + 4 + 5 + 6 + 7,
   13.91 +};
   13.92 +#endif
   13.93 +
   13.94 +#ifdef CONFIG_X86_64
   13.95 +
   13.96 +extern char __vsyscall_0;
   13.97 +static inline unsigned char** find_nop_table(void)
   13.98 +{
   13.99 +	return k8_nops;
  13.100 +}
  13.101 +
  13.102 +#else /* CONFIG_X86_64 */
  13.103 +
  13.104 +static struct nop {
  13.105 +	int cpuid;
  13.106 +	unsigned char **noptable;
  13.107 +} noptypes[] = {
  13.108 +	{ X86_FEATURE_K8, k8_nops },
  13.109 +	{ X86_FEATURE_K7, k7_nops },
  13.110 +	{ -1, NULL }
  13.111 +};
  13.112 +
  13.113 +static unsigned char** find_nop_table(void)
  13.114 +{
  13.115 +	unsigned char **noptable = intel_nops;
  13.116 +	int i;
  13.117 +
  13.118 +	for (i = 0; noptypes[i].cpuid >= 0; i++) {
  13.119 +		if (boot_cpu_has(noptypes[i].cpuid)) {
  13.120 +			noptable = noptypes[i].noptable;
  13.121 +			break;
  13.122 +		}
  13.123 +	}
  13.124 +	return noptable;
  13.125 +}
  13.126 +
  13.127 +#endif /* CONFIG_X86_64 */
  13.128 +
  13.129 +extern struct alt_instr __alt_instructions[], __alt_instructions_end[];
  13.130 +extern struct alt_instr __smp_alt_instructions[], __smp_alt_instructions_end[];
  13.131 +extern u8 *__smp_locks[], *__smp_locks_end[];
  13.132 +
  13.133 +extern u8 __smp_alt_begin[], __smp_alt_end[];
  13.134 +
  13.135 +/* Replace instructions with better alternatives for this CPU type.
  13.136 +   This runs before SMP is initialized to avoid SMP problems with
  13.137 +   self modifying code. This implies that assymetric systems where
  13.138 +   APs have less capabilities than the boot processor are not handled.
  13.139 +   Tough. Make sure you disable such features by hand. */
  13.140 +
  13.141 +void apply_alternatives(struct alt_instr *start, struct alt_instr *end)
  13.142 +{
  13.143 +	unsigned char **noptable = find_nop_table();
  13.144 +	struct alt_instr *a;
  13.145 +	u8 *instr;
  13.146 +	int diff, i, k;
  13.147 +
  13.148 +	DPRINTK("%s: alt table %p -> %p\n", __FUNCTION__, start, end);
  13.149 +	for (a = start; a < end; a++) {
  13.150 +		BUG_ON(a->replacementlen > a->instrlen);
  13.151 +		if (!boot_cpu_has(a->cpuid))
  13.152 +			continue;
  13.153 +		instr = a->instr;
  13.154 +#ifdef CONFIG_X86_64
  13.155 +		/* vsyscall code is not mapped yet. resolve it manually. */
  13.156 +		if (instr >= (u8 *)VSYSCALL_START && instr < (u8*)VSYSCALL_END) {
  13.157 +			instr -= VSYSCALL_START - (unsigned long)&__vsyscall_0;
  13.158 +			DPRINTK("%s: vsyscall fixup: %p => %p\n",
  13.159 +				__FUNCTION__, a->instr, instr);
  13.160 +		}
  13.161 +#endif
  13.162 +		memcpy(instr, a->replacement, a->replacementlen);
  13.163 +		diff = a->instrlen - a->replacementlen;
  13.164 +		/* Pad the rest with nops */
  13.165 +		for (i = a->replacementlen; diff > 0; diff -= k, i += k) {
  13.166 +			k = diff;
  13.167 +			if (k > ASM_NOP_MAX)
  13.168 +				k = ASM_NOP_MAX;
  13.169 +			memcpy(a->instr + i, noptable[k], k);
  13.170 +		}
  13.171 +	}
  13.172 +}
  13.173 +
  13.174 +#ifdef CONFIG_SMP
  13.175 +
  13.176 +static void alternatives_smp_save(struct alt_instr *start, struct alt_instr *end)
  13.177 +{
  13.178 +	struct alt_instr *a;
  13.179 +
  13.180 +	DPRINTK("%s: alt table %p-%p\n", __FUNCTION__, start, end);
  13.181 +	for (a = start; a < end; a++) {
  13.182 +		memcpy(a->replacement + a->replacementlen,
  13.183 +		       a->instr,
  13.184 +		       a->instrlen);
  13.185 +	}
  13.186 +}
  13.187 +
  13.188 +static void alternatives_smp_apply(struct alt_instr *start, struct alt_instr *end)
  13.189 +{
  13.190 +	struct alt_instr *a;
  13.191 +
  13.192 +	for (a = start; a < end; a++) {
  13.193 +		memcpy(a->instr,
  13.194 +		       a->replacement + a->replacementlen,
  13.195 +		       a->instrlen);
  13.196 +	}
  13.197 +}
  13.198 +
  13.199 +static void alternatives_smp_lock(u8 **start, u8 **end, u8 *text, u8 *text_end)
  13.200 +{
  13.201 +	u8 **ptr;
  13.202 +
  13.203 +	for (ptr = start; ptr < end; ptr++) {
  13.204 +		if (*ptr < text)
  13.205 +			continue;
  13.206 +		if (*ptr > text_end)
  13.207 +			continue;
  13.208 +		**ptr = 0xf0; /* lock prefix */
  13.209 +	};
  13.210 +}
  13.211 +
  13.212 +static void alternatives_smp_unlock(u8 **start, u8 **end, u8 *text, u8 *text_end)
  13.213 +{
  13.214 +	unsigned char **noptable = find_nop_table();
  13.215 +	u8 **ptr;
  13.216 +
  13.217 +	for (ptr = start; ptr < end; ptr++) {
  13.218 +		if (*ptr < text)
  13.219 +			continue;
  13.220 +		if (*ptr > text_end)
  13.221 +			continue;
  13.222 +		**ptr = noptable[1][0];
  13.223 +	};
  13.224 +}
  13.225 +
  13.226 +struct smp_alt_module {
  13.227 +	/* what is this ??? */
  13.228 +	struct module	*mod;
  13.229 +	char		*name;
  13.230 +
  13.231 +	/* ptrs to lock prefixes */
  13.232 +	u8		**locks;
  13.233 +	u8		**locks_end;
  13.234 +
  13.235 +	/* .text segment, needed to avoid patching init code ;) */
  13.236 +	u8		*text;
  13.237 +	u8		*text_end;
  13.238 +
  13.239 +	struct list_head next;
  13.240 +};
  13.241 +static LIST_HEAD(smp_alt_modules);
  13.242 +static DEFINE_SPINLOCK(smp_alt);
  13.243 +
  13.244 +void alternatives_smp_module_add(struct module *mod, char *name,
  13.245 +				 void *locks, void *locks_end,
  13.246 +				 void *text,  void *text_end)
  13.247 +{
  13.248 +	struct smp_alt_module *smp;
  13.249 +	unsigned long flags;
  13.250 +
  13.251 +	if (no_replacement)
  13.252 +		return;
  13.253 +
  13.254 +	if (smp_alt_once) {
  13.255 +		if (boot_cpu_has(X86_FEATURE_UP))
  13.256 +			alternatives_smp_unlock(locks, locks_end,
  13.257 +						text, text_end);
  13.258 +		return;
  13.259 +	}
  13.260 +
  13.261 +	smp = kzalloc(sizeof(*smp), GFP_KERNEL);
  13.262 +	if (NULL == smp)
  13.263 +		return; /* we'll run the (safe but slow) SMP code then ... */
  13.264 +
  13.265 +	smp->mod	= mod;
  13.266 +	smp->name	= name;
  13.267 +	smp->locks	= locks;
  13.268 +	smp->locks_end	= locks_end;
  13.269 +	smp->text	= text;
  13.270 +	smp->text_end	= text_end;
  13.271 +	DPRINTK("%s: locks %p -> %p, text %p -> %p, name %s\n",
  13.272 +		__FUNCTION__, smp->locks, smp->locks_end,
  13.273 +		smp->text, smp->text_end, smp->name);
  13.274 +
  13.275 +	spin_lock_irqsave(&smp_alt, flags);
  13.276 +	list_add_tail(&smp->next, &smp_alt_modules);
  13.277 +	if (boot_cpu_has(X86_FEATURE_UP))
  13.278 +		alternatives_smp_unlock(smp->locks, smp->locks_end,
  13.279 +					smp->text, smp->text_end);
  13.280 +	spin_unlock_irqrestore(&smp_alt, flags);
  13.281 +}
  13.282 +
  13.283 +void alternatives_smp_module_del(struct module *mod)
  13.284 +{
  13.285 +	struct smp_alt_module *item;
  13.286 +	unsigned long flags;
  13.287 +
  13.288 +	if (no_replacement || smp_alt_once)
  13.289 +		return;
  13.290 +
  13.291 +	spin_lock_irqsave(&smp_alt, flags);
  13.292 +	list_for_each_entry(item, &smp_alt_modules, next) {
  13.293 +		if (mod != item->mod)
  13.294 +			continue;
  13.295 +		list_del(&item->next);
  13.296 +		spin_unlock_irqrestore(&smp_alt, flags);
  13.297 +		DPRINTK("%s: %s\n", __FUNCTION__, item->name);
  13.298 +		kfree(item);
  13.299 +		return;
  13.300 +	}
  13.301 +	spin_unlock_irqrestore(&smp_alt, flags);
  13.302 +}
  13.303 +
  13.304 +void alternatives_smp_switch(int smp)
  13.305 +{
  13.306 +	struct smp_alt_module *mod;
  13.307 +	unsigned long flags;
  13.308 +
  13.309 +#ifdef CONFIG_LOCKDEP
  13.310 +	/*
  13.311 +	 * A not yet fixed binutils section handling bug prevents
  13.312 +	 * alternatives-replacement from working reliably, so turn
  13.313 +	 * it off:
  13.314 +	 */
  13.315 +	printk("lockdep: not fixing up alternatives.\n");
  13.316 +	return;
  13.317 +#endif
  13.318 +
  13.319 +	if (no_replacement || smp_alt_once)
  13.320 +		return;
  13.321 +	BUG_ON(!smp && (num_online_cpus() > 1));
  13.322 +
  13.323 +	spin_lock_irqsave(&smp_alt, flags);
  13.324 +	if (smp) {
  13.325 +		printk(KERN_INFO "SMP alternatives: switching to SMP code\n");
  13.326 +		clear_bit(X86_FEATURE_UP, boot_cpu_data.x86_capability);
  13.327 +		clear_bit(X86_FEATURE_UP, cpu_data[0].x86_capability);
  13.328 +		alternatives_smp_apply(__smp_alt_instructions,
  13.329 +				       __smp_alt_instructions_end);
  13.330 +		list_for_each_entry(mod, &smp_alt_modules, next)
  13.331 +			alternatives_smp_lock(mod->locks, mod->locks_end,
  13.332 +					      mod->text, mod->text_end);
  13.333 +	} else {
  13.334 +		printk(KERN_INFO "SMP alternatives: switching to UP code\n");
  13.335 +		set_bit(X86_FEATURE_UP, boot_cpu_data.x86_capability);
  13.336 +		set_bit(X86_FEATURE_UP, cpu_data[0].x86_capability);
  13.337 +		apply_alternatives(__smp_alt_instructions,
  13.338 +				   __smp_alt_instructions_end);
  13.339 +		list_for_each_entry(mod, &smp_alt_modules, next)
  13.340 +			alternatives_smp_unlock(mod->locks, mod->locks_end,
  13.341 +						mod->text, mod->text_end);
  13.342 +	}
  13.343 +	spin_unlock_irqrestore(&smp_alt, flags);
  13.344 +}
  13.345 +
  13.346 +#endif
  13.347 +
  13.348 +void __init alternative_instructions(void)
  13.349 +{
  13.350 +	if (no_replacement) {
  13.351 +		printk(KERN_INFO "(SMP-)alternatives turned off\n");
  13.352 +		free_init_pages("SMP alternatives",
  13.353 +				(unsigned long)__smp_alt_begin,
  13.354 +				(unsigned long)__smp_alt_end);
  13.355 +		return;
  13.356 +	}
  13.357 +	apply_alternatives(__alt_instructions, __alt_instructions_end);
  13.358 +
  13.359 +	/* switch to patch-once-at-boottime-only mode and free the
  13.360 +	 * tables in case we know the number of CPUs will never ever
  13.361 +	 * change */
  13.362 +#ifdef CONFIG_HOTPLUG_CPU
  13.363 +	if (num_possible_cpus() < 2)
  13.364 +		smp_alt_once = 1;
  13.365 +#else
  13.366 +	smp_alt_once = 1;
  13.367 +#endif
  13.368 +
  13.369 +#ifdef CONFIG_SMP
  13.370 +	if (smp_alt_once) {
  13.371 +		if (1 == num_possible_cpus()) {
  13.372 +			printk(KERN_INFO "SMP alternatives: switching to UP code\n");
  13.373 +			set_bit(X86_FEATURE_UP, boot_cpu_data.x86_capability);
  13.374 +			set_bit(X86_FEATURE_UP, cpu_data[0].x86_capability);
  13.375 +			apply_alternatives(__smp_alt_instructions,
  13.376 +					   __smp_alt_instructions_end);
  13.377 +			alternatives_smp_unlock(__smp_locks, __smp_locks_end,
  13.378 +						_text, _etext);
  13.379 +		}
  13.380 +		free_init_pages("SMP alternatives",
  13.381 +				(unsigned long)__smp_alt_begin,
  13.382 +				(unsigned long)__smp_alt_end);
  13.383 +	} else {
  13.384 +		alternatives_smp_save(__smp_alt_instructions,
  13.385 +				      __smp_alt_instructions_end);
  13.386 +		alternatives_smp_module_add(NULL, "core kernel",
  13.387 +					    __smp_locks, __smp_locks_end,
  13.388 +					    _text, _etext);
  13.389 +		alternatives_smp_switch(0);
  13.390 +	}
  13.391 +#endif
  13.392 +}
    14.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/apic-xen.c	Fri Jan 12 15:32:03 2007 +0000
    14.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/apic-xen.c	Wed Jan 17 18:41:22 2007 +0000
    14.3 @@ -14,7 +14,6 @@
    14.4   *	Mikael Pettersson	:	PM converted to driver model.
    14.5   */
    14.6  
    14.7 -#include <linux/config.h>
    14.8  #include <linux/init.h>
    14.9  
   14.10  #include <linux/mm.h>
   14.11 @@ -36,6 +35,7 @@
   14.12  #include <asm/arch_hooks.h>
   14.13  #include <asm/hpet.h>
   14.14  #include <asm/i8253.h>
   14.15 +#include <asm/nmi.h>
   14.16  
   14.17  #include <mach_apic.h>
   14.18  #include <mach_apicdef.h>
   14.19 @@ -61,7 +61,8 @@ int enable_local_apic __initdata = 0; /*
   14.20   */
   14.21  int apic_verbosity;
   14.22  
   14.23 -int modern_apic(void)
   14.24 +#ifndef CONFIG_XEN
   14.25 +static int modern_apic(void)
   14.26  {
   14.27  	unsigned int lvr, version;
   14.28  	/* AMD systems use old APIC versions, so check the CPU */
   14.29 @@ -72,6 +73,7 @@ int modern_apic(void)
   14.30  	version = GET_APIC_VERSION(lvr);
   14.31  	return version >= 0x14;
   14.32  }
   14.33 +#endif /* !CONFIG_XEN */
   14.34  
   14.35  /*
   14.36   * 'what should we do if we get a hw irq event on an illegal vector'.
    15.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/asm-offsets.c	Fri Jan 12 15:32:03 2007 +0000
    15.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/asm-offsets.c	Wed Jan 17 18:41:22 2007 +0000
    15.3 @@ -4,6 +4,7 @@
    15.4   * to extract and format the required data.
    15.5   */
    15.6  
    15.7 +#include <linux/crypto.h>
    15.8  #include <linux/sched.h>
    15.9  #include <linux/signal.h>
   15.10  #include <linux/personality.h>
   15.11 @@ -54,6 +55,7 @@ void foo(void)
   15.12  	OFFSET(TI_preempt_count, thread_info, preempt_count);
   15.13  	OFFSET(TI_addr_limit, thread_info, addr_limit);
   15.14  	OFFSET(TI_restart_block, thread_info, restart_block);
   15.15 +	OFFSET(TI_sysenter_return, thread_info, sysenter_return);
   15.16  	BLANK();
   15.17  
   15.18  	OFFSET(EXEC_DOMAIN_handler, exec_domain, handler);
   15.19 @@ -74,5 +76,7 @@ void foo(void)
   15.20  #endif
   15.21  
   15.22  	DEFINE(PAGE_SIZE_asm, PAGE_SIZE);
   15.23 -	DEFINE(VSYSCALL_BASE, VSYSCALL_BASE);
   15.24 +	DEFINE(VDSO_PRELINK, VDSO_PRELINK);
   15.25 +
   15.26 +	OFFSET(crypto_tfm_ctx_offset, crypto_tfm, __crt_ctx);
   15.27  }
    16.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/cpu/common-xen.c	Fri Jan 12 15:32:03 2007 +0000
    16.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/cpu/common-xen.c	Wed Jan 17 18:41:22 2007 +0000
    16.3 @@ -11,6 +11,8 @@
    16.4  #include <asm/msr.h>
    16.5  #include <asm/io.h>
    16.6  #include <asm/mmu_context.h>
    16.7 +#include <asm/mtrr.h>
    16.8 +#include <asm/mce.h>
    16.9  #ifdef CONFIG_X86_LOCAL_APIC
   16.10  #include <asm/mpspec.h>
   16.11  #include <asm/apic.h>
   16.12 @@ -299,7 +301,7 @@ void __cpuinit generic_identify(struct c
   16.13  			if (c->x86 >= 0x6)
   16.14  				c->x86_model += ((tfms >> 16) & 0xF) << 4;
   16.15  			c->x86_mask = tfms & 15;
   16.16 -#ifdef CONFIG_SMP
   16.17 +#ifdef CONFIG_X86_HT
   16.18  			c->apicid = phys_pkg_id((ebx >> 24) & 0xFF, 0);
   16.19  #else
   16.20  			c->apicid = (ebx >> 24) & 0xFF;
   16.21 @@ -324,7 +326,7 @@ void __cpuinit generic_identify(struct c
   16.22  	early_intel_workaround(c);
   16.23  
   16.24  #ifdef CONFIG_X86_HT
   16.25 -	phys_proc_id[smp_processor_id()] = (cpuid_ebx(1) >> 24) & 0xff;
   16.26 +	c->phys_proc_id = (cpuid_ebx(1) >> 24) & 0xff;
   16.27  #endif
   16.28  }
   16.29  
   16.30 @@ -482,11 +484,9 @@ void __cpuinit detect_ht(struct cpuinfo_
   16.31  {
   16.32  	u32 	eax, ebx, ecx, edx;
   16.33  	int 	index_msb, core_bits;
   16.34 -	int 	cpu = smp_processor_id();
   16.35  
   16.36  	cpuid(1, &eax, &ebx, &ecx, &edx);
   16.37  
   16.38 -
   16.39  	if (!cpu_has(c, X86_FEATURE_HT) || cpu_has(c, X86_FEATURE_CMP_LEGACY))
   16.40  		return;
   16.41  
   16.42 @@ -497,16 +497,17 @@ void __cpuinit detect_ht(struct cpuinfo_
   16.43  	} else if (smp_num_siblings > 1 ) {
   16.44  
   16.45  		if (smp_num_siblings > NR_CPUS) {
   16.46 -			printk(KERN_WARNING "CPU: Unsupported number of the siblings %d", smp_num_siblings);
   16.47 +			printk(KERN_WARNING "CPU: Unsupported number of the "
   16.48 +					"siblings %d", smp_num_siblings);
   16.49  			smp_num_siblings = 1;
   16.50  			return;
   16.51  		}
   16.52  
   16.53  		index_msb = get_count_order(smp_num_siblings);
   16.54 -		phys_proc_id[cpu] = phys_pkg_id((ebx >> 24) & 0xFF, index_msb);
   16.55 +		c->phys_proc_id = phys_pkg_id((ebx >> 24) & 0xFF, index_msb);
   16.56  
   16.57  		printk(KERN_INFO  "CPU: Physical Processor ID: %d\n",
   16.58 -		       phys_proc_id[cpu]);
   16.59 +		       c->phys_proc_id);
   16.60  
   16.61  		smp_num_siblings = smp_num_siblings / c->x86_max_cores;
   16.62  
   16.63 @@ -514,12 +515,12 @@ void __cpuinit detect_ht(struct cpuinfo_
   16.64  
   16.65  		core_bits = get_count_order(c->x86_max_cores);
   16.66  
   16.67 -		cpu_core_id[cpu] = phys_pkg_id((ebx >> 24) & 0xFF, index_msb) &
   16.68 +		c->cpu_core_id = phys_pkg_id((ebx >> 24) & 0xFF, index_msb) &
   16.69  					       ((1 << core_bits) - 1);
   16.70  
   16.71  		if (c->x86_max_cores > 1)
   16.72  			printk(KERN_INFO  "CPU: Processor Core ID: %d\n",
   16.73 -			       cpu_core_id[cpu]);
   16.74 +			       c->cpu_core_id);
   16.75  	}
   16.76  }
   16.77  #endif
   16.78 @@ -638,6 +639,12 @@ void __cpuinit cpu_init(void)
   16.79  	}
   16.80  
   16.81  #ifndef CONFIG_XEN
   16.82 +	/* The CPU hotplug case */
   16.83 +	if (cpu_gdt_descr->address) {
   16.84 +		gdt = (struct desc_struct *)cpu_gdt_descr->address;
   16.85 +		memset(gdt, 0, PAGE_SIZE);
   16.86 +		goto old_gdt;
   16.87 +	}
   16.88  	/*
   16.89  	 * This is a horrible hack to allocate the GDT.  The problem
   16.90  	 * is that cpu_init() is called really early for the boot CPU
   16.91 @@ -656,7 +663,7 @@ void __cpuinit cpu_init(void)
   16.92  				local_irq_enable();
   16.93  		}
   16.94  	}
   16.95 -
   16.96 +old_gdt:
   16.97  	/*
   16.98  	 * Initialize the per-CPU GDT with the boot GDT,
   16.99  	 * and set up the GDT descriptor:
    17.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/cpu/intel_cacheinfo-xen.c	Fri Jan 12 15:32:03 2007 +0000
    17.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/cpu/intel_cacheinfo-xen.c	Wed Jan 17 18:41:22 2007 +0000
    17.3 @@ -4,6 +4,7 @@
    17.4   *      Changes:
    17.5   *      Venkatesh Pallipadi	: Adding cache identification through cpuid(4)
    17.6   *		Ashok Raj <ashok.raj@intel.com>: Work with CPU hotplug infrastructure.
    17.7 + *	Andi Kleen		: CPUID4 emulation on AMD.
    17.8   */
    17.9  
   17.10  #include <linux/init.h>
   17.11 @@ -130,25 +131,111 @@ struct _cpuid4_info {
   17.12  	cpumask_t shared_cpu_map;
   17.13  };
   17.14  
   17.15 -static unsigned short			num_cache_leaves;
   17.16 +unsigned short			num_cache_leaves;
   17.17 +
   17.18 +/* AMD doesn't have CPUID4. Emulate it here to report the same
   17.19 +   information to the user.  This makes some assumptions about the machine:
   17.20 +   No L3, L2 not shared, no SMT etc. that is currently true on AMD CPUs.
   17.21 +
   17.22 +   In theory the TLBs could be reported as fake type (they are in "dummy").
   17.23 +   Maybe later */
   17.24 +union l1_cache {
   17.25 +	struct {
   17.26 +		unsigned line_size : 8;
   17.27 +		unsigned lines_per_tag : 8;
   17.28 +		unsigned assoc : 8;
   17.29 +		unsigned size_in_kb : 8;
   17.30 +	};
   17.31 +	unsigned val;
   17.32 +};
   17.33 +
   17.34 +union l2_cache {
   17.35 +	struct {
   17.36 +		unsigned line_size : 8;
   17.37 +		unsigned lines_per_tag : 4;
   17.38 +		unsigned assoc : 4;
   17.39 +		unsigned size_in_kb : 16;
   17.40 +	};
   17.41 +	unsigned val;
   17.42 +};
   17.43 +
   17.44 +static const unsigned short assocs[] = {
   17.45 +	[1] = 1, [2] = 2, [4] = 4, [6] = 8,
   17.46 +	[8] = 16,
   17.47 +	[0xf] = 0xffff // ??
   17.48 +	};
   17.49 +static const unsigned char levels[] = { 1, 1, 2 };
   17.50 +static const unsigned char types[] = { 1, 2, 3 };
   17.51 +
   17.52 +static void __cpuinit amd_cpuid4(int leaf, union _cpuid4_leaf_eax *eax,
   17.53 +		       union _cpuid4_leaf_ebx *ebx,
   17.54 +		       union _cpuid4_leaf_ecx *ecx)
   17.55 +{
   17.56 +	unsigned dummy;
   17.57 +	unsigned line_size, lines_per_tag, assoc, size_in_kb;
   17.58 +	union l1_cache l1i, l1d;
   17.59 +	union l2_cache l2;
   17.60 +
   17.61 +	eax->full = 0;
   17.62 +	ebx->full = 0;
   17.63 +	ecx->full = 0;
   17.64 +
   17.65 +	cpuid(0x80000005, &dummy, &dummy, &l1d.val, &l1i.val);
   17.66 +	cpuid(0x80000006, &dummy, &dummy, &l2.val, &dummy);
   17.67 +
   17.68 +	if (leaf > 2 || !l1d.val || !l1i.val || !l2.val)
   17.69 +		return;
   17.70 +
   17.71 +	eax->split.is_self_initializing = 1;
   17.72 +	eax->split.type = types[leaf];
   17.73 +	eax->split.level = levels[leaf];
   17.74 +	eax->split.num_threads_sharing = 0;
   17.75 +	eax->split.num_cores_on_die = current_cpu_data.x86_max_cores - 1;
   17.76 +
   17.77 +	if (leaf <= 1) {
   17.78 +		union l1_cache *l1 = leaf == 0 ? &l1d : &l1i;
   17.79 +		assoc = l1->assoc;
   17.80 +		line_size = l1->line_size;
   17.81 +		lines_per_tag = l1->lines_per_tag;
   17.82 +		size_in_kb = l1->size_in_kb;
   17.83 +	} else {
   17.84 +		assoc = l2.assoc;
   17.85 +		line_size = l2.line_size;
   17.86 +		lines_per_tag = l2.lines_per_tag;
   17.87 +		/* cpu_data has errata corrections for K7 applied */
   17.88 +		size_in_kb = current_cpu_data.x86_cache_size;
   17.89 +	}
   17.90 +
   17.91 +	if (assoc == 0xf)
   17.92 +		eax->split.is_fully_associative = 1;
   17.93 +	ebx->split.coherency_line_size = line_size - 1;
   17.94 +	ebx->split.ways_of_associativity = assocs[assoc] - 1;
   17.95 +	ebx->split.physical_line_partition = lines_per_tag - 1;
   17.96 +	ecx->split.number_of_sets = (size_in_kb * 1024) / line_size /
   17.97 +		(ebx->split.ways_of_associativity + 1) - 1;
   17.98 +}
   17.99  
  17.100  static int __cpuinit cpuid4_cache_lookup(int index, struct _cpuid4_info *this_leaf)
  17.101  {
  17.102 -	unsigned int		eax, ebx, ecx, edx;
  17.103 -	union _cpuid4_leaf_eax	cache_eax;
  17.104 +	union _cpuid4_leaf_eax 	eax;
  17.105 +	union _cpuid4_leaf_ebx 	ebx;
  17.106 +	union _cpuid4_leaf_ecx 	ecx;
  17.107 +	unsigned		edx;
  17.108  
  17.109 -	cpuid_count(4, index, &eax, &ebx, &ecx, &edx);
  17.110 -	cache_eax.full = eax;
  17.111 -	if (cache_eax.split.type == CACHE_TYPE_NULL)
  17.112 +	if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD)
  17.113 +		amd_cpuid4(index, &eax, &ebx, &ecx);
  17.114 +	else
  17.115 +		cpuid_count(4, index, &eax.full, &ebx.full, &ecx.full,  &edx);
  17.116 +	if (eax.split.type == CACHE_TYPE_NULL)
  17.117  		return -EIO; /* better error ? */
  17.118  
  17.119 -	this_leaf->eax.full = eax;
  17.120 -	this_leaf->ebx.full = ebx;
  17.121 -	this_leaf->ecx.full = ecx;
  17.122 -	this_leaf->size = (this_leaf->ecx.split.number_of_sets + 1) *
  17.123 -		(this_leaf->ebx.split.coherency_line_size + 1) *
  17.124 -		(this_leaf->ebx.split.physical_line_partition + 1) *
  17.125 -		(this_leaf->ebx.split.ways_of_associativity + 1);
  17.126 +	this_leaf->eax = eax;
  17.127 +	this_leaf->ebx = ebx;
  17.128 +	this_leaf->ecx = ecx;
  17.129 +	this_leaf->size = (ecx.split.number_of_sets + 1) *
  17.130 +		(ebx.split.coherency_line_size + 1) *
  17.131 +		(ebx.split.physical_line_partition + 1) *
  17.132 +		(ebx.split.ways_of_associativity + 1);
  17.133  	return 0;
  17.134  }
  17.135  
  17.136 @@ -174,11 +261,9 @@ unsigned int __cpuinit init_intel_cachei
  17.137  	unsigned int new_l1d = 0, new_l1i = 0; /* Cache sizes from cpuid(4) */
  17.138  	unsigned int new_l2 = 0, new_l3 = 0, i; /* Cache sizes from cpuid(4) */
  17.139  	unsigned int l2_id = 0, l3_id = 0, num_threads_sharing, index_msb;
  17.140 -#ifdef CONFIG_SMP
  17.141 -#ifndef CONFIG_XEN
  17.142 +#ifdef CONFIG_X86_HT
  17.143  	unsigned int cpu = (c == &boot_cpu_data) ? 0 : (c - cpu_data);
  17.144  #endif
  17.145 -#endif
  17.146  
  17.147  	if (c->cpuid_level > 3) {
  17.148  		static int is_initialized;
  17.149 @@ -298,20 +383,16 @@ unsigned int __cpuinit init_intel_cachei
  17.150  
  17.151  	if (new_l2) {
  17.152  		l2 = new_l2;
  17.153 -#ifdef CONFIG_SMP
  17.154 -#ifndef CONFIG_XEN
  17.155 +#ifdef CONFIG_X86_HT
  17.156  		cpu_llc_id[cpu] = l2_id;
  17.157  #endif
  17.158 -#endif
  17.159  	}
  17.160  
  17.161  	if (new_l3) {
  17.162  		l3 = new_l3;
  17.163 -#ifdef CONFIG_SMP
  17.164 -#ifndef CONFIG_XEN
  17.165 +#ifdef CONFIG_X86_HT
  17.166  		cpu_llc_id[cpu] = l3_id;
  17.167  #endif
  17.168 -#endif
  17.169  	}
  17.170  
  17.171  	if (trace)
  17.172 @@ -648,7 +729,7 @@ static void __cpuexit cache_remove_dev(s
  17.173  	return;
  17.174  }
  17.175  
  17.176 -static int cacheinfo_cpu_callback(struct notifier_block *nfb,
  17.177 +static int __cpuinit cacheinfo_cpu_callback(struct notifier_block *nfb,
  17.178  					unsigned long action, void *hcpu)
  17.179  {
  17.180  	unsigned int cpu = (unsigned long)hcpu;
  17.181 @@ -666,7 +747,7 @@ static int cacheinfo_cpu_callback(struct
  17.182  	return NOTIFY_OK;
  17.183  }
  17.184  
  17.185 -static struct notifier_block cacheinfo_cpu_notifier =
  17.186 +static struct notifier_block __cpuinitdata cacheinfo_cpu_notifier =
  17.187  {
  17.188      .notifier_call = cacheinfo_cpu_callback,
  17.189  };
  17.190 @@ -678,7 +759,7 @@ static int __cpuinit cache_sysfs_init(vo
  17.191  	if (num_cache_leaves == 0)
  17.192  		return 0;
  17.193  
  17.194 -	register_cpu_notifier(&cacheinfo_cpu_notifier);
  17.195 +	register_hotcpu_notifier(&cacheinfo_cpu_notifier);
  17.196  
  17.197  	for_each_online_cpu(i) {
  17.198  		cacheinfo_cpu_callback(&cacheinfo_cpu_notifier, CPU_ONLINE,
    18.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/crash.c	Fri Jan 12 15:32:03 2007 +0000
    18.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/crash.c	Wed Jan 17 18:41:22 2007 +0000
    18.3 @@ -91,7 +91,7 @@ static void crash_save_self(struct pt_re
    18.4  }
    18.5  
    18.6  #ifndef CONFIG_XEN
    18.7 -#ifdef CONFIG_SMP
    18.8 +#if defined(CONFIG_SMP) && defined(CONFIG_X86_LOCAL_APIC)
    18.9  static atomic_t waiting_for_crash_ipi;
   18.10  
   18.11  static int crash_nmi_callback(struct pt_regs *regs, int cpu)
   18.12 @@ -115,19 +115,15 @@ static int crash_nmi_callback(struct pt_
   18.13  	atomic_dec(&waiting_for_crash_ipi);
   18.14  	/* Assume hlt works */
   18.15  	halt();
   18.16 -	for(;;);
   18.17 +	for (;;)
   18.18 +		cpu_relax();
   18.19  
   18.20  	return 1;
   18.21  }
   18.22  
   18.23 -/*
   18.24 - * By using the NMI code instead of a vector we just sneak thru the
   18.25 - * word generator coming out with just what we want.  AND it does
   18.26 - * not matter if clustered_apic_mode is set or not.
   18.27 - */
   18.28  static void smp_send_nmi_allbutself(void)
   18.29  {
   18.30 -	send_IPI_allbutself(APIC_DM_NMI);
   18.31 +	send_IPI_allbutself(NMI_VECTOR);
   18.32  }
   18.33  
   18.34  static void nmi_shootdown_cpus(void)
   18.35 @@ -164,7 +160,7 @@ static void nmi_shootdown_cpus(void)
   18.36  void machine_crash_shutdown(struct pt_regs *regs)
   18.37  {
   18.38  	/* This function is only called after the system
   18.39 -	 * has paniced or is otherwise in a critical state.
   18.40 +	 * has panicked or is otherwise in a critical state.
   18.41  	 * The minimum amount of code to allow a kexec'd kernel
   18.42  	 * to run successfully needs to happen here.
   18.43  	 *
    19.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/entry-xen.S	Fri Jan 12 15:32:03 2007 +0000
    19.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/entry-xen.S	Wed Jan 17 18:41:22 2007 +0000
    19.3 @@ -40,14 +40,15 @@
    19.4   * "current" is in register %ebx during any slow entries.
    19.5   */
    19.6  
    19.7 -#include <linux/config.h>
    19.8  #include <linux/linkage.h>
    19.9  #include <asm/thread_info.h>
   19.10 +#include <asm/irqflags.h>
   19.11  #include <asm/errno.h>
   19.12  #include <asm/segment.h>
   19.13  #include <asm/smp.h>
   19.14  #include <asm/page.h>
   19.15  #include <asm/desc.h>
   19.16 +#include <asm/dwarf2.h>
   19.17  #include "irq_vectors.h"
   19.18  #include <xen/interface/xen.h>
   19.19  
   19.20 @@ -106,40 +107,91 @@ NMI_MASK	= 0x80000000
   19.21  #endif
   19.22  
   19.23  #ifdef CONFIG_PREEMPT
   19.24 -#define preempt_stop		cli
   19.25 +#define preempt_stop		cli; TRACE_IRQS_OFF
   19.26  #else
   19.27  #define preempt_stop
   19.28  #define resume_kernel		restore_nocheck
   19.29  #endif
   19.30  
   19.31 +.macro TRACE_IRQS_IRET
   19.32 +#ifdef CONFIG_TRACE_IRQFLAGS
   19.33 +	testl $IF_MASK,EFLAGS(%esp)     # interrupts off?
   19.34 +	jz 1f
   19.35 +	TRACE_IRQS_ON
   19.36 +1:
   19.37 +#endif
   19.38 +.endm
   19.39 +
   19.40 +#ifdef CONFIG_VM86
   19.41 +#define resume_userspace_sig	check_userspace
   19.42 +#else
   19.43 +#define resume_userspace_sig	resume_userspace
   19.44 +#endif
   19.45 +
   19.46  #define SAVE_ALL \
   19.47  	cld; \
   19.48  	pushl %es; \
   19.49 +	CFI_ADJUST_CFA_OFFSET 4;\
   19.50 +	/*CFI_REL_OFFSET es, 0;*/\
   19.51  	pushl %ds; \
   19.52 +	CFI_ADJUST_CFA_OFFSET 4;\
   19.53 +	/*CFI_REL_OFFSET ds, 0;*/\
   19.54  	pushl %eax; \
   19.55 +	CFI_ADJUST_CFA_OFFSET 4;\
   19.56 +	CFI_REL_OFFSET eax, 0;\
   19.57  	pushl %ebp; \
   19.58 +	CFI_ADJUST_CFA_OFFSET 4;\
   19.59 +	CFI_REL_OFFSET ebp, 0;\
   19.60  	pushl %edi; \
   19.61 +	CFI_ADJUST_CFA_OFFSET 4;\
   19.62 +	CFI_REL_OFFSET edi, 0;\
   19.63  	pushl %esi; \
   19.64 +	CFI_ADJUST_CFA_OFFSET 4;\
   19.65 +	CFI_REL_OFFSET esi, 0;\
   19.66  	pushl %edx; \
   19.67 +	CFI_ADJUST_CFA_OFFSET 4;\
   19.68 +	CFI_REL_OFFSET edx, 0;\
   19.69  	pushl %ecx; \
   19.70 +	CFI_ADJUST_CFA_OFFSET 4;\
   19.71 +	CFI_REL_OFFSET ecx, 0;\
   19.72  	pushl %ebx; \
   19.73 +	CFI_ADJUST_CFA_OFFSET 4;\
   19.74 +	CFI_REL_OFFSET ebx, 0;\
   19.75  	movl $(__USER_DS), %edx; \
   19.76  	movl %edx, %ds; \
   19.77  	movl %edx, %es;
   19.78  
   19.79  #define RESTORE_INT_REGS \
   19.80  	popl %ebx;	\
   19.81 +	CFI_ADJUST_CFA_OFFSET -4;\
   19.82 +	CFI_RESTORE ebx;\
   19.83  	popl %ecx;	\
   19.84 +	CFI_ADJUST_CFA_OFFSET -4;\
   19.85 +	CFI_RESTORE ecx;\
   19.86  	popl %edx;	\
   19.87 +	CFI_ADJUST_CFA_OFFSET -4;\
   19.88 +	CFI_RESTORE edx;\
   19.89  	popl %esi;	\
   19.90 +	CFI_ADJUST_CFA_OFFSET -4;\
   19.91 +	CFI_RESTORE esi;\
   19.92  	popl %edi;	\
   19.93 +	CFI_ADJUST_CFA_OFFSET -4;\
   19.94 +	CFI_RESTORE edi;\
   19.95  	popl %ebp;	\
   19.96 -	popl %eax
   19.97 +	CFI_ADJUST_CFA_OFFSET -4;\
   19.98 +	CFI_RESTORE ebp;\
   19.99 +	popl %eax;	\
  19.100 +	CFI_ADJUST_CFA_OFFSET -4;\
  19.101 +	CFI_RESTORE eax
  19.102  
  19.103  #define RESTORE_REGS	\
  19.104  	RESTORE_INT_REGS; \
  19.105  1:	popl %ds;	\
  19.106 +	CFI_ADJUST_CFA_OFFSET -4;\
  19.107 +	/*CFI_RESTORE ds;*/\
  19.108  2:	popl %es;	\
  19.109 +	CFI_ADJUST_CFA_OFFSET -4;\
  19.110 +	/*CFI_RESTORE es;*/\
  19.111  .section .fixup,"ax";	\
  19.112  3:	movl $0,(%esp);	\
  19.113  	jmp 1b;		\
  19.114 @@ -152,13 +204,47 @@ 4:	movl $0,(%esp);	\
  19.115  	.long 2b,4b;	\
  19.116  .previous
  19.117  
  19.118 +#define RING0_INT_FRAME \
  19.119 +	CFI_STARTPROC simple;\
  19.120 +	CFI_DEF_CFA esp, 3*4;\
  19.121 +	/*CFI_OFFSET cs, -2*4;*/\
  19.122 +	CFI_OFFSET eip, -3*4
  19.123 +
  19.124 +#define RING0_EC_FRAME \
  19.125 +	CFI_STARTPROC simple;\
  19.126 +	CFI_DEF_CFA esp, 4*4;\
  19.127 +	/*CFI_OFFSET cs, -2*4;*/\
  19.128 +	CFI_OFFSET eip, -3*4
  19.129 +
  19.130 +#define RING0_PTREGS_FRAME \
  19.131 +	CFI_STARTPROC simple;\
  19.132 +	CFI_DEF_CFA esp, OLDESP-EBX;\
  19.133 +	/*CFI_OFFSET cs, CS-OLDESP;*/\
  19.134 +	CFI_OFFSET eip, EIP-OLDESP;\
  19.135 +	/*CFI_OFFSET es, ES-OLDESP;*/\
  19.136 +	/*CFI_OFFSET ds, DS-OLDESP;*/\
  19.137 +	CFI_OFFSET eax, EAX-OLDESP;\
  19.138 +	CFI_OFFSET ebp, EBP-OLDESP;\
  19.139 +	CFI_OFFSET edi, EDI-OLDESP;\
  19.140 +	CFI_OFFSET esi, ESI-OLDESP;\
  19.141 +	CFI_OFFSET edx, EDX-OLDESP;\
  19.142 +	CFI_OFFSET ecx, ECX-OLDESP;\
  19.143 +	CFI_OFFSET ebx, EBX-OLDESP
  19.144  
  19.145  ENTRY(ret_from_fork)
  19.146 +	CFI_STARTPROC
  19.147  	pushl %eax
  19.148 +	CFI_ADJUST_CFA_OFFSET 4
  19.149  	call schedule_tail
  19.150  	GET_THREAD_INFO(%ebp)
  19.151  	popl %eax
  19.152 +	CFI_ADJUST_CFA_OFFSET -4
  19.153 +	pushl $0x0202			# Reset kernel eflags
  19.154 +	CFI_ADJUST_CFA_OFFSET 4
  19.155 +	popfl
  19.156 +	CFI_ADJUST_CFA_OFFSET -4
  19.157  	jmp syscall_exit
  19.158 +	CFI_ENDPROC
  19.159  
  19.160  /*
  19.161   * Return to user mode is not as complex as all this looks,
  19.162 @@ -169,10 +255,12 @@ ENTRY(ret_from_fork)
  19.163  
  19.164  	# userspace resumption stub bypassing syscall exit tracing
  19.165  	ALIGN
  19.166 +	RING0_PTREGS_FRAME
  19.167  ret_from_exception:
  19.168  	preempt_stop
  19.169  ret_from_intr:
  19.170  	GET_THREAD_INFO(%ebp)
  19.171 +check_userspace:
  19.172  	movl EFLAGS(%esp), %eax		# mix EFLAGS and CS
  19.173  	movb CS(%esp), %al
  19.174  	testl $(VM_MASK | 2), %eax
  19.175 @@ -201,20 +289,42 @@ need_resched:
  19.176  	call preempt_schedule_irq
  19.177  	jmp need_resched
  19.178  #endif
  19.179 +	CFI_ENDPROC
  19.180  
  19.181  /* SYSENTER_RETURN points to after the "sysenter" instruction in
  19.182     the vsyscall page.  See vsyscall-sysentry.S, which defines the symbol.  */
  19.183  
  19.184  	# sysenter call handler stub
  19.185  ENTRY(sysenter_entry)
  19.186 +	CFI_STARTPROC simple
  19.187 +	CFI_DEF_CFA esp, 0
  19.188 +	CFI_REGISTER esp, ebp
  19.189  	movl SYSENTER_stack_esp0(%esp),%esp
  19.190  sysenter_past_esp:
  19.191 +	/*
  19.192 +	 * No need to follow this irqs on/off section: the syscall
  19.193 +	 * disabled irqs and here we enable it straight after entry:
  19.194 +	 */
  19.195  	sti
  19.196  	pushl $(__USER_DS)
  19.197 +	CFI_ADJUST_CFA_OFFSET 4
  19.198 +	/*CFI_REL_OFFSET ss, 0*/
  19.199  	pushl %ebp
  19.200 +	CFI_ADJUST_CFA_OFFSET 4
  19.201 +	CFI_REL_OFFSET esp, 0
  19.202  	pushfl
  19.203 +	CFI_ADJUST_CFA_OFFSET 4
  19.204  	pushl $(__USER_CS)
  19.205 -	pushl $SYSENTER_RETURN
  19.206 +	CFI_ADJUST_CFA_OFFSET 4
  19.207 +	/*CFI_REL_OFFSET cs, 0*/
  19.208 +	/*
  19.209 +	 * Push current_thread_info()->sysenter_return to the stack.
  19.210 +	 * A tiny bit of offset fixup is necessary - 4*4 means the 4 words
  19.211 +	 * pushed above; +8 corresponds to copy_thread's esp0 setting.
  19.212 +	 */
  19.213 +	pushl (TI_sysenter_return-THREAD_SIZE+8+4*4)(%esp)
  19.214 +	CFI_ADJUST_CFA_OFFSET 4
  19.215 +	CFI_REL_OFFSET eip, 0
  19.216  
  19.217  /*
  19.218   * Load the potential sixth argument from user stack.
  19.219 @@ -229,6 +339,7 @@ 1:	movl (%ebp),%ebp
  19.220  .previous
  19.221  
  19.222  	pushl %eax
  19.223 +	CFI_ADJUST_CFA_OFFSET 4
  19.224  	SAVE_ALL
  19.225  	GET_THREAD_INFO(%ebp)
  19.226  
  19.227 @@ -240,6 +351,7 @@ 1:	movl (%ebp),%ebp
  19.228  	call *sys_call_table(,%eax,4)
  19.229  	movl %eax,EAX(%esp)
  19.230  	DISABLE_INTERRUPTS
  19.231 +	TRACE_IRQS_OFF
  19.232  	movl TI_flags(%ebp), %ecx
  19.233  	testw $_TIF_ALLWORK_MASK, %cx
  19.234  	jne syscall_exit_work
  19.235 @@ -248,6 +360,7 @@ 1:	movl (%ebp),%ebp
  19.236  	movl OLDESP(%esp), %ecx
  19.237  	xorl %ebp,%ebp
  19.238  #ifdef CONFIG_XEN
  19.239 +	TRACE_IRQS_ON
  19.240  	__ENABLE_INTERRUPTS
  19.241  sysexit_scrit:	/**** START OF SYSEXIT CRITICAL REGION ****/
  19.242  	__TEST_PENDING
  19.243 @@ -261,14 +374,18 @@ sysexit_ecrit:	/**** END OF SYSEXIT CRIT
  19.244  	add  $4,%esp
  19.245  	jmp  ret_from_intr
  19.246  #else
  19.247 +	TRACE_IRQS_ON
  19.248  	sti
  19.249  	sysexit
  19.250  #endif /* !CONFIG_XEN */
  19.251 +	CFI_ENDPROC
  19.252  
  19.253  
  19.254  	# system call handler stub
  19.255  ENTRY(system_call)
  19.256 +	RING0_INT_FRAME			# can't unwind into user space anyway
  19.257  	pushl %eax			# save orig_eax
  19.258 +	CFI_ADJUST_CFA_OFFSET 4
  19.259  	SAVE_ALL
  19.260  	GET_THREAD_INFO(%ebp)
  19.261  	testl $TF_MASK,EFLAGS(%esp)
  19.262 @@ -288,6 +405,7 @@ syscall_exit:
  19.263  	DISABLE_INTERRUPTS		# make sure we don't miss an interrupt
  19.264  					# setting need_resched or sigpending
  19.265  					# between sampling and the iret
  19.266 +	TRACE_IRQS_OFF
  19.267  	movl TI_flags(%ebp), %ecx
  19.268  	testw $_TIF_ALLWORK_MASK, %cx	# current->work
  19.269  	jne syscall_exit_work
  19.270 @@ -302,6 +420,7 @@ restore_all:
  19.271  	movb CS(%esp), %al
  19.272  	andl $(VM_MASK | (4 << 8) | 3), %eax
  19.273  	cmpl $((4 << 8) | 3), %eax
  19.274 +	CFI_REMEMBER_STATE
  19.275  	je ldt_ss			# returning to user-space with LDT SS
  19.276  restore_nocheck:
  19.277  #else
  19.278 @@ -315,12 +434,16 @@ restore_nocheck:
  19.279  	andb $1,%al			# EAX[0] == IRET_EFLAGS.IF & event_mask
  19.280  	jnz restore_all_enable_events	#        != 0 => enable event delivery
  19.281  #endif
  19.282 +	TRACE_IRQS_IRET
  19.283 +restore_nocheck_notrace:
  19.284  	RESTORE_REGS
  19.285  	addl $4, %esp
  19.286 +	CFI_ADJUST_CFA_OFFSET -4
  19.287  1:	iret
  19.288  .section .fixup,"ax"
  19.289  iret_exc:
  19.290  #ifndef CONFIG_XEN
  19.291 +	TRACE_IRQS_ON
  19.292  	sti
  19.293  #endif
  19.294  	pushl $0			# no error code
  19.295 @@ -333,6 +456,7 @@ iret_exc:
  19.296  .previous
  19.297  
  19.298  #ifndef CONFIG_XEN
  19.299 +	CFI_RESTORE_STATE
  19.300  ldt_ss:
  19.301  	larl OLDSS(%esp), %eax
  19.302  	jnz restore_nocheck
  19.303 @@ -345,11 +469,15 @@ ldt_ss:
  19.304  	 * CPUs, which we can try to work around to make
  19.305  	 * dosemu and wine happy. */
  19.306  	subl $8, %esp		# reserve space for switch16 pointer
  19.307 +	CFI_ADJUST_CFA_OFFSET 8
  19.308  	cli
  19.309 +	TRACE_IRQS_OFF
  19.310  	movl %esp, %eax
  19.311  	/* Set up the 16bit stack frame with switch32 pointer on top,
  19.312  	 * and a switch16 pointer on top of the current frame. */
  19.313  	call setup_x86_bogus_stack
  19.314 +	CFI_ADJUST_CFA_OFFSET -8	# frame has moved
  19.315 +	TRACE_IRQS_IRET
  19.316  	RESTORE_REGS
  19.317  	lss 20+4(%esp), %esp	# switch to 16bit stack
  19.318  1:	iret
  19.319 @@ -357,6 +485,7 @@ 1:	iret
  19.320  	.align 4
  19.321  	.long 1b,iret_exc
  19.322  .previous
  19.323 +	CFI_ENDPROC
  19.324  #else
  19.325  hypervisor_iret:
  19.326  	andl $~NMI_MASK, EFLAGS(%esp)
  19.327 @@ -367,6 +496,7 @@ hypervisor_iret:
  19.328  
  19.329  	# perform work that needs to be done immediately before resumption
  19.330  	ALIGN
  19.331 +	RING0_PTREGS_FRAME		# can't unwind into user space anyway
  19.332  work_pending:
  19.333  	testb $_TIF_NEED_RESCHED, %cl
  19.334  	jz work_notifysig
  19.335 @@ -375,6 +505,7 @@ work_resched:
  19.336  	DISABLE_INTERRUPTS		# make sure we don't miss an interrupt
  19.337  					# setting need_resched or sigpending
  19.338  					# between sampling and the iret
  19.339 +	TRACE_IRQS_OFF
  19.340  	movl TI_flags(%ebp), %ecx
  19.341  	andl $_TIF_WORK_MASK, %ecx	# is there any work to be done other
  19.342  					# than syscall tracing?
  19.343 @@ -390,18 +521,20 @@ work_notifysig:				# deal with pending s
  19.344  					# vm86-space
  19.345  	xorl %edx, %edx
  19.346  	call do_notify_resume
  19.347 -	jmp resume_userspace
  19.348 +	jmp resume_userspace_sig
  19.349  
  19.350  	ALIGN
  19.351  work_notifysig_v86:
  19.352  #ifdef CONFIG_VM86
  19.353  	pushl %ecx			# save ti_flags for do_notify_resume
  19.354 +	CFI_ADJUST_CFA_OFFSET 4
  19.355  	call save_v86_state		# %eax contains pt_regs pointer
  19.356  	popl %ecx
  19.357 +	CFI_ADJUST_CFA_OFFSET -4
  19.358  	movl %eax, %esp
  19.359  	xorl %edx, %edx
  19.360  	call do_notify_resume
  19.361 -	jmp resume_userspace
  19.362 +	jmp resume_userspace_sig
  19.363  #endif
  19.364  
  19.365  	# perform syscall exit tracing
  19.366 @@ -424,25 +557,28 @@ syscall_trace_entry:
  19.367  syscall_exit_work:
  19.368  	testb $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP), %cl
  19.369  	jz work_pending
  19.370 +	TRACE_IRQS_ON
  19.371  	ENABLE_INTERRUPTS		# could let do_syscall_trace() call
  19.372  					# schedule() instead
  19.373  	movl %esp, %eax
  19.374  	movl $1, %edx
  19.375  	call do_syscall_trace
  19.376  	jmp resume_userspace
  19.377 +	CFI_ENDPROC
  19.378  
  19.379 -	ALIGN
  19.380 +	RING0_INT_FRAME			# can't unwind into user space anyway
  19.381  syscall_fault:
  19.382  	pushl %eax			# save orig_eax
  19.383 +	CFI_ADJUST_CFA_OFFSET 4
  19.384  	SAVE_ALL
  19.385  	GET_THREAD_INFO(%ebp)
  19.386  	movl $-EFAULT,EAX(%esp)
  19.387  	jmp resume_userspace
  19.388  
  19.389 -	ALIGN
  19.390  syscall_badsys:
  19.391  	movl $-ENOSYS,EAX(%esp)
  19.392  	jmp resume_userspace
  19.393 +	CFI_ENDPROC
  19.394  
  19.395  #ifndef CONFIG_XEN
  19.396  #define FIXUP_ESPFIX_STACK \
  19.397 @@ -455,16 +591,21 @@ syscall_badsys:
  19.398  	movl %eax, %esp;
  19.399  #define UNWIND_ESPFIX_STACK \
  19.400  	pushl %eax; \
  19.401 +	CFI_ADJUST_CFA_OFFSET 4; \
  19.402  	movl %ss, %eax; \
  19.403  	/* see if on 16bit stack */ \
  19.404  	cmpw $__ESPFIX_SS, %ax; \
  19.405 -	jne 28f; \
  19.406 -	movl $__KERNEL_DS, %edx; \
  19.407 -	movl %edx, %ds; \
  19.408 -	movl %edx, %es; \
  19.409 +	je 28f; \
  19.410 +27:	popl %eax; \
  19.411 +	CFI_ADJUST_CFA_OFFSET -4; \
  19.412 +.section .fixup,"ax"; \
  19.413 +28:	movl $__KERNEL_DS, %eax; \
  19.414 +	movl %eax, %ds; \
  19.415 +	movl %eax, %es; \
  19.416  	/* switch to 32bit stack */ \
  19.417 -	FIXUP_ESPFIX_STACK \
  19.418 -28:	popl %eax;
  19.419 +	FIXUP_ESPFIX_STACK; \
  19.420 +	jmp 27b; \
  19.421 +.previous
  19.422  
  19.423  /*
  19.424   * Build the entry stubs and pointer table with
  19.425 @@ -476,9 +617,14 @@ ENTRY(interrupt)
  19.426  
  19.427  vector=0
  19.428  ENTRY(irq_entries_start)
  19.429 +	RING0_INT_FRAME
  19.430  .rept NR_IRQS
  19.431  	ALIGN
  19.432 + .if vector
  19.433 +	CFI_ADJUST_CFA_OFFSET -4
  19.434 + .endif
  19.435  1:	pushl $~(vector)
  19.436 +	CFI_ADJUST_CFA_OFFSET 4
  19.437  	jmp common_interrupt
  19.438  .data
  19.439  	.long 1b
  19.440 @@ -486,20 +632,30 @@ 1:	pushl $~(vector)
  19.441  vector=vector+1
  19.442  .endr
  19.443  
  19.444 +/*
  19.445 + * the CPU automatically disables interrupts when executing an IRQ vector,
  19.446 + * so IRQ-flags tracing has to follow that:
  19.447 + */
  19.448  	ALIGN
  19.449  common_interrupt:
  19.450  	SAVE_ALL
  19.451 +	TRACE_IRQS_OFF
  19.452  	movl %esp,%eax
  19.453  	call do_IRQ
  19.454  	jmp ret_from_intr
  19.455 +	CFI_ENDPROC
  19.456  
  19.457  #define BUILD_INTERRUPT(name, nr)	\
  19.458  ENTRY(name)				\
  19.459 +	RING0_INT_FRAME;		\
  19.460  	pushl $~(nr);			\
  19.461 -	SAVE_ALL			\
  19.462 +	CFI_ADJUST_CFA_OFFSET 4;	\
  19.463 +	SAVE_ALL;			\
  19.464 +	TRACE_IRQS_OFF			\
  19.465  	movl %esp,%eax;			\
  19.466  	call smp_/**/name;		\
  19.467 -	jmp ret_from_intr;
  19.468 +	jmp ret_from_intr;		\
  19.469 +	CFI_ENDPROC
  19.470  
  19.471  /* The include is where all of the SMP etc. interrupts come from */
  19.472  #include "entry_arch.h"
  19.473 @@ -508,34 +664,59 @@ ENTRY(name)				\
  19.474  #endif
  19.475  
  19.476  ENTRY(divide_error)
  19.477 +	RING0_INT_FRAME
  19.478  	pushl $0			# no error code
  19.479 +	CFI_ADJUST_CFA_OFFSET 4
  19.480  	pushl $do_divide_error
  19.481 +	CFI_ADJUST_CFA_OFFSET 4
  19.482  	ALIGN
  19.483  error_code:
  19.484  	pushl %ds
  19.485 +	CFI_ADJUST_CFA_OFFSET 4
  19.486 +	/*CFI_REL_OFFSET ds, 0*/
  19.487  	pushl %eax
  19.488 +	CFI_ADJUST_CFA_OFFSET 4
  19.489 +	CFI_REL_OFFSET eax, 0
  19.490  	xorl %eax, %eax
  19.491  	pushl %ebp
  19.492 +	CFI_ADJUST_CFA_OFFSET 4
  19.493 +	CFI_REL_OFFSET ebp, 0
  19.494  	pushl %edi
  19.495 +	CFI_ADJUST_CFA_OFFSET 4
  19.496 +	CFI_REL_OFFSET edi, 0
  19.497  	pushl %esi
  19.498 +	CFI_ADJUST_CFA_OFFSET 4
  19.499 +	CFI_REL_OFFSET esi, 0
  19.500  	pushl %edx
  19.501 +	CFI_ADJUST_CFA_OFFSET 4
  19.502 +	CFI_REL_OFFSET edx, 0
  19.503  	decl %eax			# eax = -1
  19.504  	pushl %ecx
  19.505 +	CFI_ADJUST_CFA_OFFSET 4
  19.506 +	CFI_REL_OFFSET ecx, 0
  19.507  	pushl %ebx
  19.508 +	CFI_ADJUST_CFA_OFFSET 4
  19.509 +	CFI_REL_OFFSET ebx, 0
  19.510  	cld
  19.511  	pushl %es
  19.512 +	CFI_ADJUST_CFA_OFFSET 4
  19.513 +	/*CFI_REL_OFFSET es, 0*/
  19.514  	UNWIND_ESPFIX_STACK
  19.515  	popl %ecx
  19.516 +	CFI_ADJUST_CFA_OFFSET -4
  19.517 +	/*CFI_REGISTER es, ecx*/
  19.518  	movl ES(%esp), %edi		# get the function address
  19.519  	movl ORIG_EAX(%esp), %edx	# get the error code
  19.520  	movl %eax, ORIG_EAX(%esp)
  19.521  	movl %ecx, ES(%esp)
  19.522 +	/*CFI_REL_OFFSET es, ES*/
  19.523  	movl $(__USER_DS), %ecx
  19.524  	movl %ecx, %ds
  19.525  	movl %ecx, %es
  19.526  	movl %esp,%eax			# pt_regs pointer
  19.527  	call *%edi
  19.528  	jmp ret_from_exception
  19.529 +	CFI_ENDPROC
  19.530  
  19.531  #ifdef CONFIG_XEN
  19.532  # A note on the "critical region" in our callback handler.
  19.533 @@ -684,31 +865,44 @@ 9:	xorl %eax,%eax;		\
  19.534  #endif
  19.535  
  19.536  ENTRY(coprocessor_error)
  19.537 +	RING0_INT_FRAME
  19.538  	pushl $0
  19.539 +	CFI_ADJUST_CFA_OFFSET 4
  19.540  	pushl $do_coprocessor_error
  19.541 +	CFI_ADJUST_CFA_OFFSET 4
  19.542  	jmp error_code
  19.543 +	CFI_ENDPROC
  19.544  
  19.545  ENTRY(simd_coprocessor_error)
  19.546 +	RING0_INT_FRAME
  19.547  	pushl $0
  19.548 +	CFI_ADJUST_CFA_OFFSET 4
  19.549  	pushl $do_simd_coprocessor_error
  19.550 +	CFI_ADJUST_CFA_OFFSET 4
  19.551  	jmp error_code
  19.552 +	CFI_ENDPROC
  19.553  
  19.554  ENTRY(device_not_available)
  19.555 +	RING0_INT_FRAME
  19.556  	pushl $-1			# mark this as an int
  19.557 +	CFI_ADJUST_CFA_OFFSET 4
  19.558  	SAVE_ALL
  19.559  #ifndef CONFIG_XEN
  19.560  	movl %cr0, %eax
  19.561  	testl $0x4, %eax		# EM (math emulation bit)
  19.562  	je device_available_emulate
  19.563  	pushl $0			# temporary storage for ORIG_EIP
  19.564 +	CFI_ADJUST_CFA_OFFSET 4
  19.565  	call math_emulate
  19.566  	addl $4, %esp
  19.567 +	CFI_ADJUST_CFA_OFFSET -4
  19.568  	jmp ret_from_exception
  19.569  device_available_emulate:
  19.570  #endif
  19.571  	preempt_stop
  19.572  	call math_state_restore
  19.573  	jmp ret_from_exception
  19.574 +	CFI_ENDPROC
  19.575  
  19.576  #ifndef CONFIG_XEN
  19.577  /*
  19.578 @@ -735,6 +929,7 @@ label:						\
  19.579  #endif /* CONFIG_XEN */
  19.580  
  19.581  KPROBE_ENTRY(debug)
  19.582 +	RING0_INT_FRAME
  19.583  #ifndef CONFIG_XEN
  19.584  	cmpl $sysenter_entry,(%esp)
  19.585  	jne debug_stack_correct
  19.586 @@ -742,13 +937,14 @@ KPROBE_ENTRY(debug)
  19.587  debug_stack_correct:
  19.588  #endif /* !CONFIG_XEN */
  19.589  	pushl $-1			# mark this as an int
  19.590 +	CFI_ADJUST_CFA_OFFSET 4
  19.591  	SAVE_ALL
  19.592  	xorl %edx,%edx			# error code 0
  19.593  	movl %esp,%eax			# pt_regs pointer
  19.594  	call do_debug
  19.595  	jmp ret_from_exception
  19.596 +	CFI_ENDPROC
  19.597  	.previous .text
  19.598 -
  19.599  #ifndef CONFIG_XEN
  19.600  /*
  19.601   * NMI is doubly nasty. It can happen _while_ we're handling
  19.602 @@ -759,14 +955,18 @@ debug_stack_correct:
  19.603   * fault happened on the sysenter path.
  19.604   */
  19.605  ENTRY(nmi)
  19.606 +	RING0_INT_FRAME
  19.607  	pushl %eax
  19.608 +	CFI_ADJUST_CFA_OFFSET 4
  19.609  	movl %ss, %eax
  19.610  	cmpw $__ESPFIX_SS, %ax
  19.611  	popl %eax
  19.612 +	CFI_ADJUST_CFA_OFFSET -4
  19.613  	je nmi_16bit_stack
  19.614  	cmpl $sysenter_entry,(%esp)
  19.615  	je nmi_stack_fixup
  19.616  	pushl %eax
  19.617 +	CFI_ADJUST_CFA_OFFSET 4
  19.618  	movl %esp,%eax
  19.619  	/* Do not access memory above the end of our stack page,
  19.620  	 * it might not exist.
  19.621 @@ -774,16 +974,19 @@ ENTRY(nmi)
  19.622  	andl $(THREAD_SIZE-1),%eax
  19.623  	cmpl $(THREAD_SIZE-20),%eax
  19.624  	popl %eax
  19.625 +	CFI_ADJUST_CFA_OFFSET -4
  19.626  	jae nmi_stack_correct
  19.627  	cmpl $sysenter_entry,12(%esp)
  19.628  	je nmi_debug_stack_check
  19.629  nmi_stack_correct:
  19.630  	pushl %eax
  19.631 +	CFI_ADJUST_CFA_OFFSET 4
  19.632  	SAVE_ALL
  19.633  	xorl %edx,%edx		# zero error code
  19.634  	movl %esp,%eax		# pt_regs pointer
  19.635  	call do_nmi
  19.636 -	jmp restore_all
  19.637 +	jmp restore_nocheck_notrace
  19.638 +	CFI_ENDPROC
  19.639  
  19.640  nmi_stack_fixup:
  19.641  	FIX_STACK(12,nmi_stack_correct, 1)
  19.642 @@ -799,98 +1002,191 @@ nmi_debug_stack_check:
  19.643  	jmp nmi_stack_correct
  19.644  
  19.645  nmi_16bit_stack:
  19.646 +	RING0_INT_FRAME
  19.647  	/* create the pointer to lss back */
  19.648  	pushl %ss
  19.649 +	CFI_ADJUST_CFA_OFFSET 4
  19.650  	pushl %esp
  19.651 +	CFI_ADJUST_CFA_OFFSET 4
  19.652  	movzwl %sp, %esp
  19.653  	addw $4, (%esp)
  19.654  	/* copy the iret frame of 12 bytes */
  19.655  	.rept 3
  19.656  	pushl 16(%esp)
  19.657 +	CFI_ADJUST_CFA_OFFSET 4
  19.658  	.endr
  19.659  	pushl %eax
  19.660 +	CFI_ADJUST_CFA_OFFSET 4
  19.661  	SAVE_ALL
  19.662  	FIXUP_ESPFIX_STACK		# %eax == %esp
  19.663 +	CFI_ADJUST_CFA_OFFSET -20	# the frame has now moved
  19.664  	xorl %edx,%edx			# zero error code
  19.665  	call do_nmi
  19.666  	RESTORE_REGS
  19.667  	lss 12+4(%esp), %esp		# back to 16bit stack
  19.668  1:	iret
  19.669 +	CFI_ENDPROC
  19.670  .section __ex_table,"a"
  19.671  	.align 4
  19.672  	.long 1b,iret_exc
  19.673  .previous
  19.674  #else
  19.675  ENTRY(nmi)
  19.676 +	RING0_INT_FRAME
  19.677  	pushl %eax
  19.678 +	CFI_ADJUST_CFA_OFFSET 4
  19.679  	SAVE_ALL
  19.680  	xorl %edx,%edx		# zero error code
  19.681  	movl %esp,%eax		# pt_regs pointer
  19.682  	call do_nmi
  19.683  	orl  $NMI_MASK, EFLAGS(%esp)
  19.684  	jmp restore_all
  19.685 +	CFI_ENDPROC
  19.686  #endif
  19.687  
  19.688  KPROBE_ENTRY(int3)
  19.689 +	RING0_INT_FRAME
  19.690  	pushl $-1			# mark this as an int
  19.691 +	CFI_ADJUST_CFA_OFFSET 4
  19.692  	SAVE_ALL
  19.693  	xorl %edx,%edx		# zero error code
  19.694  	movl %esp,%eax		# pt_regs pointer
  19.695  	call do_int3
  19.696  	jmp ret_from_exception
  19.697 +	CFI_ENDPROC
  19.698  	.previous .text
  19.699  
  19.700  ENTRY(overflow)
  19.701 +	RING0_INT_FRAME
  19.702  	pushl $0
  19.703 +	CFI_ADJUST_CFA_OFFSET 4
  19.704  	pushl $do_overflow
  19.705 +	CFI_ADJUST_CFA_OFFSET 4
  19.706  	jmp error_code
  19.707 +	CFI_ENDPROC
  19.708  
  19.709  ENTRY(bounds)
  19.710 +	RING0_INT_FRAME
  19.711  	pushl $0
  19.712 +	CFI_ADJUST_CFA_OFFSET 4
  19.713  	pushl $do_bounds
  19.714 +	CFI_ADJUST_CFA_OFFSET 4
  19.715  	jmp error_code
  19.716 +	CFI_ENDPROC
  19.717  
  19.718  ENTRY(invalid_op)
  19.719 +	RING0_INT_FRAME
  19.720  	pushl $0
  19.721 +	CFI_ADJUST_CFA_OFFSET 4
  19.722  	pushl $do_invalid_op
  19.723 +	CFI_ADJUST_CFA_OFFSET 4
  19.724  	jmp error_code
  19.725 +	CFI_ENDPROC
  19.726  
  19.727  ENTRY(coprocessor_segment_overrun)
  19.728 +	RING0_INT_FRAME
  19.729  	pushl $0
  19.730 +	CFI_ADJUST_CFA_OFFSET 4
  19.731  	pushl $do_coprocessor_segment_overrun
  19.732 +	CFI_ADJUST_CFA_OFFSET 4
  19.733  	jmp error_code
  19.734 +	CFI_ENDPROC
  19.735  
  19.736  ENTRY(invalid_TSS)
  19.737 +	RING0_EC_FRAME
  19.738  	pushl $do_invalid_TSS
  19.739 +	CFI_ADJUST_CFA_OFFSET 4
  19.740  	jmp error_code
  19.741 +	CFI_ENDPROC
  19.742  
  19.743  ENTRY(segment_not_present)
  19.744 +	RING0_EC_FRAME
  19.745  	pushl $do_segment_not_present
  19.746 +	CFI_ADJUST_CFA_OFFSET 4
  19.747  	jmp error_code
  19.748 +	CFI_ENDPROC
  19.749  
  19.750  ENTRY(stack_segment)
  19.751 +	RING0_EC_FRAME
  19.752  	pushl $do_stack_segment
  19.753 +	CFI_ADJUST_CFA_OFFSET 4
  19.754  	jmp error_code
  19.755 +	CFI_ENDPROC
  19.756  
  19.757  KPROBE_ENTRY(general_protection)
  19.758 +	RING0_EC_FRAME
  19.759  	pushl $do_general_protection
  19.760 +	CFI_ADJUST_CFA_OFFSET 4
  19.761  	jmp error_code
  19.762 +	CFI_ENDPROC
  19.763  	.previous .text
  19.764  
  19.765  ENTRY(alignment_check)
  19.766 +	RING0_EC_FRAME
  19.767  	pushl $do_alignment_check
  19.768 +	CFI_ADJUST_CFA_OFFSET 4
  19.769  	jmp error_code
  19.770 +	CFI_ENDPROC
  19.771  
  19.772  KPROBE_ENTRY(page_fault)
  19.773 +	RING0_EC_FRAME
  19.774  	pushl $do_page_fault
  19.775 +	CFI_ADJUST_CFA_OFFSET 4
  19.776  	jmp error_code
  19.777 +	CFI_ENDPROC
  19.778  	.previous .text
  19.779  
  19.780  #ifdef CONFIG_X86_MCE
  19.781  ENTRY(machine_check)
  19.782 +	RING0_INT_FRAME
  19.783  	pushl $0
  19.784 +	CFI_ADJUST_CFA_OFFSET 4
  19.785  	pushl machine_check_vector
  19.786 +	CFI_ADJUST_CFA_OFFSET 4
  19.787  	jmp error_code
  19.788 +	CFI_ENDPROC
  19.789 +#endif
  19.790 +
  19.791 +#ifndef CONFIG_XEN
  19.792 +ENTRY(spurious_interrupt_bug)
  19.793 +	RING0_INT_FRAME
  19.794 +	pushl $0
  19.795 +	CFI_ADJUST_CFA_OFFSET 4
  19.796 +	pushl $do_spurious_interrupt_bug
  19.797 +	CFI_ADJUST_CFA_OFFSET 4
  19.798 +	jmp error_code
  19.799 +	CFI_ENDPROC
  19.800 +#endif /* !CONFIG_XEN */
  19.801 +
  19.802 +#ifdef CONFIG_STACK_UNWIND
  19.803 +ENTRY(arch_unwind_init_running)
  19.804 +	CFI_STARTPROC
  19.805 +	movl	4(%esp), %edx
  19.806 +	movl	(%esp), %ecx
  19.807 +	leal	4(%esp), %eax
  19.808 +	movl	%ebx, EBX(%edx)
  19.809 +	xorl	%ebx, %ebx
  19.810 +	movl	%ebx, ECX(%edx)
  19.811 +	movl	%ebx, EDX(%edx)
  19.812 +	movl	%esi, ESI(%edx)
  19.813 +	movl	%edi, EDI(%edx)
  19.814 +	movl	%ebp, EBP(%edx)
  19.815 +	movl	%ebx, EAX(%edx)
  19.816 +	movl	$__USER_DS, DS(%edx)
  19.817 +	movl	$__USER_DS, ES(%edx)
  19.818 +	movl	%ebx, ORIG_EAX(%edx)
  19.819 +	movl	%ecx, EIP(%edx)
  19.820 +	movl	12(%esp), %ecx
  19.821 +	movl	$__KERNEL_CS, CS(%edx)
  19.822 +	movl	%ebx, EFLAGS(%edx)
  19.823 +	movl	%eax, OLDESP(%edx)
  19.824 +	movl	8(%esp), %eax
  19.825 +	movl	%ecx, 8(%esp)
  19.826 +	movl	EBX(%edx), %ebx
  19.827 +	movl	$__KERNEL_DS, OLDSS(%edx)
  19.828 +	jmpl	*%eax
  19.829 +	CFI_ENDPROC
  19.830 +ENDPROC(arch_unwind_init_running)
  19.831  #endif
  19.832  
  19.833  ENTRY(fixup_4gb_segment)
    20.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/head-xen.S	Fri Jan 12 15:32:03 2007 +0000
    20.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/head-xen.S	Wed Jan 17 18:41:22 2007 +0000
    20.3 @@ -1,7 +1,6 @@
    20.4  
    20.5  
    20.6  .text
    20.7 -#include <linux/config.h>
    20.8  #include <linux/elfnote.h>
    20.9  #include <linux/threads.h>
   20.10  #include <linux/linkage.h>
   20.11 @@ -62,7 +61,8 @@ ENTRY(startup_32)
   20.12  	movl %eax,%gs
   20.13  	cld			# gcc2 wants the direction flag cleared at all times
   20.14  
   20.15 -	call start_kernel
   20.16 +	pushl %eax		# fake return address
   20.17 +	jmp start_kernel
   20.18  L6:
   20.19  	jmp L6			# main should never return here, but
   20.20  				# just in case, we know what happens.
    21.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/io_apic-xen.c	Fri Jan 12 15:32:03 2007 +0000
    21.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/io_apic-xen.c	Wed Jan 17 18:41:22 2007 +0000
    21.3 @@ -25,7 +25,6 @@
    21.4  #include <linux/init.h>
    21.5  #include <linux/delay.h>
    21.6  #include <linux/sched.h>
    21.7 -#include <linux/config.h>
    21.8  #include <linux/smp_lock.h>
    21.9  #include <linux/mc146818rtc.h>
   21.10  #include <linux/compiler.h>
   21.11 @@ -38,6 +37,7 @@
   21.12  #include <asm/desc.h>
   21.13  #include <asm/timer.h>
   21.14  #include <asm/i8259.h>
   21.15 +#include <asm/nmi.h>
   21.16  
   21.17  #include <mach_apic.h>
   21.18  
   21.19 @@ -90,6 +90,7 @@ atomic_t irq_mis_count;
   21.20  static struct { int pin, apic; } ioapic_i8259 = { -1, -1 };
   21.21  
   21.22  static DEFINE_SPINLOCK(ioapic_lock);
   21.23 +static DEFINE_SPINLOCK(vector_lock);
   21.24  
   21.25  int timer_over_8254 __initdata = 1;
   21.26  
   21.27 @@ -310,7 +311,7 @@ static void set_ioapic_affinity_irq(unsi
   21.28  # include <linux/slab.h>		/* kmalloc() */
   21.29  # include <linux/timer.h>	/* time_after() */
   21.30   
   21.31 -# ifdef CONFIG_BALANCED_IRQ_DEBUG
   21.32 +#ifdef CONFIG_BALANCED_IRQ_DEBUG
   21.33  #  define TDprintk(x...) do { printk("<%ld:%s:%d>: ", jiffies, __FILE__, __LINE__); printk(x); } while (0)
   21.34  #  define Dprintk(x...) do { TDprintk(x); } while (0)
   21.35  # else
   21.36 @@ -318,10 +319,15 @@ static void set_ioapic_affinity_irq(unsi
   21.37  #  define Dprintk(x...) 
   21.38  # endif
   21.39  
   21.40 -
   21.41  #define IRQBALANCE_CHECK_ARCH -999
   21.42 -static int irqbalance_disabled = IRQBALANCE_CHECK_ARCH;
   21.43 -static int physical_balance = 0;
   21.44 +#define MAX_BALANCED_IRQ_INTERVAL	(5*HZ)
   21.45 +#define MIN_BALANCED_IRQ_INTERVAL	(HZ/2)
   21.46 +#define BALANCED_IRQ_MORE_DELTA		(HZ/10)
   21.47 +#define BALANCED_IRQ_LESS_DELTA		(HZ)
   21.48 +
   21.49 +static int irqbalance_disabled __read_mostly = IRQBALANCE_CHECK_ARCH;
   21.50 +static int physical_balance __read_mostly;
   21.51 +static long balanced_irq_interval __read_mostly = MAX_BALANCED_IRQ_INTERVAL;
   21.52  
   21.53  static struct irq_cpu_info {
   21.54  	unsigned long * last_irq;
   21.55 @@ -340,12 +346,14 @@ static struct irq_cpu_info {
   21.56  
   21.57  #define CPU_TO_PACKAGEINDEX(i) (first_cpu(cpu_sibling_map[i]))
   21.58  
   21.59 -#define MAX_BALANCED_IRQ_INTERVAL	(5*HZ)
   21.60 -#define MIN_BALANCED_IRQ_INTERVAL	(HZ/2)
   21.61 -#define BALANCED_IRQ_MORE_DELTA		(HZ/10)
   21.62 -#define BALANCED_IRQ_LESS_DELTA		(HZ)
   21.63 -
   21.64 -static long balanced_irq_interval = MAX_BALANCED_IRQ_INTERVAL;
   21.65 +static cpumask_t balance_irq_affinity[NR_IRQS] = {
   21.66 +	[0 ... NR_IRQS-1] = CPU_MASK_ALL
   21.67 +};
   21.68 +
   21.69 +void set_balance_irq_affinity(unsigned int irq, cpumask_t mask)
   21.70 +{
   21.71 +	balance_irq_affinity[irq] = mask;
   21.72 +}
   21.73  
   21.74  static unsigned long move(int curr_cpu, cpumask_t allowed_mask,
   21.75  			unsigned long now, int direction)
   21.76 @@ -383,7 +391,7 @@ static inline void balance_irq(int cpu, 
   21.77  	if (irqbalance_disabled)
   21.78  		return; 
   21.79  
   21.80 -	cpus_and(allowed_mask, cpu_online_map, irq_affinity[irq]);
   21.81 +	cpus_and(allowed_mask, cpu_online_map, balance_irq_affinity[irq]);
   21.82  	new_cpu = move(cpu, allowed_mask, now, 1);
   21.83  	if (cpu != new_cpu) {
   21.84  		set_pending_irq(irq, cpumask_of_cpu(new_cpu));
   21.85 @@ -572,7 +580,9 @@ tryanotherirq:
   21.86  		}
   21.87  	}
   21.88  
   21.89 -	cpus_and(allowed_mask, cpu_online_map, irq_affinity[selected_irq]);
   21.90 +	cpus_and(allowed_mask,
   21.91 +		cpu_online_map,
   21.92 +		balance_irq_affinity[selected_irq]);
   21.93  	target_cpu_mask = cpumask_of_cpu(min_loaded);
   21.94  	cpus_and(tmp, target_cpu_mask, allowed_mask);
   21.95  
   21.96 @@ -613,7 +623,7 @@ static int balanced_irq(void *unused)
   21.97  	
   21.98  	/* push everything to CPU 0 to give us a starting point.  */
   21.99  	for (i = 0 ; i < NR_IRQS ; i++) {
  21.100 -		pending_irq_cpumask[i] = cpumask_of_cpu(0);
  21.101 +		irq_desc[i].pending_mask = cpumask_of_cpu(0);
  21.102  		set_pending_irq(i, cpumask_of_cpu(0));
  21.103  	}
  21.104  
  21.105 @@ -1199,21 +1209,33 @@ u8 irq_vector[NR_IRQ_VECTORS] __read_mos
  21.106  
  21.107  int assign_irq_vector(int irq)
  21.108  {
  21.109 +	unsigned long flags;
  21.110 +	int vector;
  21.111  	struct physdev_irq irq_op;
  21.112  
  21.113 -	BUG_ON(irq >= NR_IRQ_VECTORS);
  21.114 -	if (irq != AUTO_ASSIGN && IO_APIC_VECTOR(irq) > 0)
  21.115 +	BUG_ON(irq != AUTO_ASSIGN && (unsigned)irq >= NR_IRQ_VECTORS);
  21.116 +
  21.117 +	spin_lock_irqsave(&vector_lock, flags);
  21.118 +
  21.119 +	if (irq != AUTO_ASSIGN && IO_APIC_VECTOR(irq) > 0) {
  21.120 +		spin_unlock_irqrestore(&vector_lock, flags);
  21.121  		return IO_APIC_VECTOR(irq);
  21.122 +	}
  21.123  
  21.124  	irq_op.irq = irq;
  21.125 -	if (HYPERVISOR_physdev_op(PHYSDEVOP_alloc_irq_vector, &irq_op))
  21.126 +	if (HYPERVISOR_physdev_op(PHYSDEVOP_alloc_irq_vector, &irq_op)) {
  21.127 +		spin_unlock_irqrestore(&vector_lock, flags);
  21.128  		return -ENOSPC;
  21.129 -
  21.130 -	vector_irq[irq_op.vector] = irq;
  21.131 +	}
  21.132 +
  21.133 +	vector = irq_op.vector;
  21.134 +	vector_irq[vector] = irq;
  21.135  	if (irq != AUTO_ASSIGN)
  21.136 -		IO_APIC_VECTOR(irq) = irq_op.vector;
  21.137 -
  21.138 -	return irq_op.vector;
  21.139 +		IO_APIC_VECTOR(irq) = vector;
  21.140 +
  21.141 +	spin_unlock_irqrestore(&vector_lock, flags);
  21.142 +
  21.143 +	return vector;
  21.144  }
  21.145  
  21.146  #ifndef CONFIG_XEN
  21.147 @@ -1224,23 +1246,18 @@ static struct hw_interrupt_type ioapic_e
  21.148  #define IOAPIC_EDGE	0
  21.149  #define IOAPIC_LEVEL	1
  21.150  
  21.151 -static inline void ioapic_register_intr(int irq, int vector, unsigned long trigger)
  21.152 +static void ioapic_register_intr(int irq, int vector, unsigned long trigger)
  21.153  {
  21.154 -	if (use_pci_vector() && !platform_legacy_irq(irq)) {
  21.155 -		if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) ||
  21.156 -				trigger == IOAPIC_LEVEL)
  21.157 -			irq_desc[vector].handler = &ioapic_level_type;
  21.158 -		else
  21.159 -			irq_desc[vector].handler = &ioapic_edge_type;
  21.160 -		set_intr_gate(vector, interrupt[vector]);
  21.161 -	} else	{
  21.162 -		if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) ||
  21.163 -				trigger == IOAPIC_LEVEL)
  21.164 -			irq_desc[irq].handler = &ioapic_level_type;
  21.165 -		else
  21.166 -			irq_desc[irq].handler = &ioapic_edge_type;
  21.167 -		set_intr_gate(vector, interrupt[irq]);
  21.168 -	}
  21.169 +	unsigned idx;
  21.170 +
  21.171 +	idx = use_pci_vector() && !platform_legacy_irq(irq) ? vector : irq;
  21.172 +
  21.173 +	if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) ||
  21.174 +			trigger == IOAPIC_LEVEL)
  21.175 +		irq_desc[idx].chip = &ioapic_level_type;
  21.176 +	else
  21.177 +		irq_desc[idx].chip = &ioapic_edge_type;
  21.178 +	set_intr_gate(vector, interrupt[idx]);
  21.179  }
  21.180  #else
  21.181  #define ioapic_register_intr(_irq,_vector,_trigger) ((void)0)
  21.182 @@ -1355,7 +1372,7 @@ static void __init setup_ExtINT_IRQ0_pin
  21.183  	 * The timer IRQ doesn't have to know that behind the
  21.184  	 * scene we have a 8259A-master in AEOI mode ...
  21.185  	 */
  21.186 -	irq_desc[0].handler = &ioapic_edge_type;
  21.187 +	irq_desc[0].chip = &ioapic_edge_type;
  21.188  
  21.189  	/*
  21.190  	 * Add it to the IO-APIC irq-routing table:
  21.191 @@ -2106,6 +2123,13 @@ static void set_ioapic_affinity_vector (
  21.192  #endif
  21.193  #endif
  21.194  
  21.195 +static int ioapic_retrigger(unsigned int irq)
  21.196 +{
  21.197 +	send_IPI_self(IO_APIC_VECTOR(irq));
  21.198 +
  21.199 +	return 1;
  21.200 +}
  21.201 +
  21.202  /*
  21.203   * Level and edge triggered IO-APIC interrupts need different handling,
  21.204   * so we use two separate IRQ descriptors. Edge triggered IRQs can be
  21.205 @@ -2125,6 +2149,7 @@ static struct hw_interrupt_type ioapic_e
  21.206  #ifdef CONFIG_SMP
  21.207  	.set_affinity 	= set_ioapic_affinity,
  21.208  #endif
  21.209 +	.retrigger	= ioapic_retrigger,
  21.210  };
  21.211  
  21.212  static struct hw_interrupt_type ioapic_level_type __read_mostly = {
  21.213 @@ -2138,6 +2163,7 @@ static struct hw_interrupt_type ioapic_l
  21.214  #ifdef CONFIG_SMP
  21.215  	.set_affinity 	= set_ioapic_affinity,
  21.216  #endif
  21.217 +	.retrigger	= ioapic_retrigger,
  21.218  };
  21.219  #endif /* !CONFIG_XEN */
  21.220  
  21.221 @@ -2174,7 +2200,7 @@ static inline void init_IO_APIC_traps(vo
  21.222  #ifndef CONFIG_XEN
  21.223  			else
  21.224  				/* Strange. Oh, well.. */
  21.225 -				irq_desc[irq].handler = &no_irq_type;
  21.226 +				irq_desc[irq].chip = &no_irq_type;
  21.227  #endif
  21.228  		}
  21.229  	}
  21.230 @@ -2392,7 +2418,7 @@ static inline void check_timer(void)
  21.231  	printk(KERN_INFO "...trying to set up timer as Virtual Wire IRQ...");
  21.232  
  21.233  	disable_8259A_irq(0);
  21.234 -	irq_desc[0].handler = &lapic_irq_type;
  21.235 +	irq_desc[0].chip = &lapic_irq_type;
  21.236  	apic_write_around(APIC_LVT0, APIC_DM_FIXED | vector);	/* Fixed mode */
  21.237  	enable_8259A_irq(0);
  21.238  
    22.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/ioport-xen.c	Fri Jan 12 15:32:03 2007 +0000
    22.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/ioport-xen.c	Wed Jan 17 18:41:22 2007 +0000
    22.3 @@ -79,6 +79,7 @@ asmlinkage long sys_ioperm(unsigned long
    22.4  
    22.5  		memset(bitmap, 0xff, IO_BITMAP_BYTES);
    22.6  		t->io_bitmap_ptr = bitmap;
    22.7 +		set_thread_flag(TIF_IO_BITMAP);
    22.8  
    22.9  		set_iobitmap.bitmap   = (char *)bitmap;
   22.10  		set_iobitmap.nr_ports = IO_BITMAP_BITS;
    23.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/irq-xen.c	Fri Jan 12 15:32:03 2007 +0000
    23.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/irq-xen.c	Wed Jan 17 18:41:22 2007 +0000
    23.3 @@ -42,8 +42,8 @@ union irq_ctx {
    23.4  	u32                     stack[THREAD_SIZE/sizeof(u32)];
    23.5  };
    23.6  
    23.7 -static union irq_ctx *hardirq_ctx[NR_CPUS];
    23.8 -static union irq_ctx *softirq_ctx[NR_CPUS];
    23.9 +static union irq_ctx *hardirq_ctx[NR_CPUS] __read_mostly;
   23.10 +static union irq_ctx *softirq_ctx[NR_CPUS] __read_mostly;
   23.11  #endif
   23.12  
   23.13  /*
   23.14 @@ -60,6 +60,12 @@ fastcall unsigned int do_IRQ(struct pt_r
   23.15  	u32 *isp;
   23.16  #endif
   23.17  
   23.18 +	if (unlikely((unsigned)irq >= NR_IRQS)) {
   23.19 +		printk(KERN_EMERG "%s: cannot handle IRQ %d\n",
   23.20 +					__FUNCTION__, irq);
   23.21 +		BUG();
   23.22 +	}
   23.23 +
   23.24  	irq_enter();
   23.25  #ifdef CONFIG_DEBUG_STACKOVERFLOW
   23.26  	/* Debugging check for stack overflow: is there less than 1KB free? */
   23.27 @@ -95,6 +101,14 @@ fastcall unsigned int do_IRQ(struct pt_r
   23.28  		irqctx->tinfo.task = curctx->tinfo.task;
   23.29  		irqctx->tinfo.previous_esp = current_stack_pointer;
   23.30  
   23.31 +		/*
   23.32 +		 * Copy the softirq bits in preempt_count so that the
   23.33 +		 * softirq checks work in the hardirq context.
   23.34 +		 */
   23.35 +		irqctx->tinfo.preempt_count =
   23.36 +			(irqctx->tinfo.preempt_count & ~SOFTIRQ_MASK) |
   23.37 +			(curctx->tinfo.preempt_count & SOFTIRQ_MASK);
   23.38 +
   23.39  		asm volatile(
   23.40  			"       xchgl   %%ebx,%%esp      \n"
   23.41  			"       call    __do_IRQ         \n"
   23.42 @@ -147,7 +161,7 @@ void irq_ctx_init(int cpu)
   23.43  	irqctx->tinfo.task              = NULL;
   23.44  	irqctx->tinfo.exec_domain       = NULL;
   23.45  	irqctx->tinfo.cpu               = cpu;
   23.46 -	irqctx->tinfo.preempt_count     = SOFTIRQ_OFFSET;
   23.47 +	irqctx->tinfo.preempt_count     = 0;
   23.48  	irqctx->tinfo.addr_limit        = MAKE_MM_SEG(0);
   23.49  
   23.50  	softirq_ctx[cpu] = irqctx;
   23.51 @@ -192,6 +206,10 @@ asmlinkage void do_softirq(void)
   23.52  			: "0"(isp)
   23.53  			: "memory", "cc", "edx", "ecx", "eax"
   23.54  		);
   23.55 +		/*
   23.56 +		 * Shouldnt happen, we returned above if in_interrupt():
   23.57 +	 	 */
   23.58 +		WARN_ON_ONCE(softirq_count());
   23.59  	}
   23.60  
   23.61  	local_irq_restore(flags);
   23.62 @@ -219,7 +237,7 @@ int show_interrupts(struct seq_file *p, 
   23.63  	if (i == 0) {
   23.64  		seq_printf(p, "           ");
   23.65  		for_each_online_cpu(j)
   23.66 -			seq_printf(p, "CPU%d       ",j);
   23.67 +			seq_printf(p, "CPU%-8d",j);
   23.68  		seq_putc(p, '\n');
   23.69  	}
   23.70  
   23.71 @@ -235,7 +253,7 @@ int show_interrupts(struct seq_file *p, 
   23.72  		for_each_online_cpu(j)
   23.73  			seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
   23.74  #endif
   23.75 -		seq_printf(p, " %14s", irq_desc[i].handler->typename);
   23.76 +		seq_printf(p, " %14s", irq_desc[i].chip->typename);
   23.77  		seq_printf(p, "  %s", action->name);
   23.78  
   23.79  		for (action=action->next; action; action = action->next)
   23.80 @@ -276,13 +294,13 @@ void fixup_irqs(cpumask_t map)
   23.81  		if (irq == 2)
   23.82  			continue;
   23.83  
   23.84 -		cpus_and(mask, irq_affinity[irq], map);
   23.85 +		cpus_and(mask, irq_desc[irq].affinity, map);
   23.86  		if (any_online_cpu(mask) == NR_CPUS) {
   23.87  			/*printk("Breaking affinity for irq %i\n", irq);*/
   23.88  			mask = map;
   23.89  		}
   23.90 -		if (irq_desc[irq].handler->set_affinity)
   23.91 -			irq_desc[irq].handler->set_affinity(irq, mask);
   23.92 +		if (irq_desc[irq].chip->set_affinity)
   23.93 +			irq_desc[irq].chip->set_affinity(irq, mask);
   23.94  		else if (irq_desc[irq].action && !(warned++))
   23.95  			printk("Cannot set affinity for irq %i\n", irq);
   23.96  	}
    24.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/microcode-xen.c	Fri Jan 12 15:32:03 2007 +0000
    24.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/microcode-xen.c	Wed Jan 17 18:41:22 2007 +0000
    24.3 @@ -43,7 +43,10 @@ MODULE_DESCRIPTION("Intel CPU (IA-32) Mi
    24.4  MODULE_AUTHOR("Tigran Aivazian <tigran@veritas.com>");
    24.5  MODULE_LICENSE("GPL");
    24.6  
    24.7 -#define MICROCODE_VERSION 	"1.14-xen"
    24.8 +static int verbose;
    24.9 +module_param(verbose, int, 0644);
   24.10 +
   24.11 +#define MICROCODE_VERSION 	"1.14a-xen"
   24.12  
   24.13  #define DEFAULT_UCODE_DATASIZE 	(2000) 	  /* 2000 bytes */
   24.14  #define MC_HEADER_SIZE		(sizeof (microcode_header_t))  	  /* 48 bytes */
   24.15 @@ -111,7 +114,6 @@ static struct file_operations microcode_
   24.16  static struct miscdevice microcode_dev = {
   24.17  	.minor		= MICROCODE_MINOR,
   24.18  	.name		= "microcode",
   24.19 -	.devfs_name	= "cpu/microcode",
   24.20  	.fops		= &microcode_fops,
   24.21  };
   24.22  
    25.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/mpparse-xen.c	Fri Jan 12 15:32:03 2007 +0000
    25.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/mpparse-xen.c	Wed Jan 17 18:41:22 2007 +0000
    25.3 @@ -17,7 +17,6 @@
    25.4  #include <linux/init.h>
    25.5  #include <linux/acpi.h>
    25.6  #include <linux/delay.h>
    25.7 -#include <linux/config.h>
    25.8  #include <linux/bootmem.h>
    25.9  #include <linux/smp_lock.h>
   25.10  #include <linux/kernel_stat.h>
    26.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/pci-dma-xen.c	Fri Jan 12 15:32:03 2007 +0000
    26.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/pci-dma-xen.c	Wed Jan 17 18:41:22 2007 +0000
    26.3 @@ -21,6 +21,8 @@
    26.4  #include <asm/bug.h>
    26.5  
    26.6  #ifdef __x86_64__
    26.7 +#include <asm/proto.h>
    26.8 +
    26.9  int iommu_merge __read_mostly = 0;
   26.10  EXPORT_SYMBOL(iommu_merge);
   26.11  
   26.12 @@ -32,10 +34,28 @@ EXPORT_SYMBOL(bad_dma_address);
   26.13  int iommu_bio_merge __read_mostly = 0;
   26.14  EXPORT_SYMBOL(iommu_bio_merge);
   26.15  
   26.16 +int force_iommu __read_mostly= 0;
   26.17 +
   26.18  __init int iommu_setup(char *p)
   26.19  {
   26.20      return 1;
   26.21  }
   26.22 +
   26.23 +void __init pci_iommu_alloc(void)
   26.24 +{
   26.25 +#ifdef CONFIG_SWIOTLB
   26.26 +	pci_swiotlb_init();
   26.27 +#endif
   26.28 +}
   26.29 +
   26.30 +static int __init pci_iommu_init(void)
   26.31 +{
   26.32 +	no_iommu_init();
   26.33 +	return 0;
   26.34 +}
   26.35 +
   26.36 +/* Must execute after PCI subsystem */
   26.37 +fs_initcall(pci_iommu_init);
   26.38  #endif
   26.39  
   26.40  struct dma_coherent_mem {
    27.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/process-xen.c	Fri Jan 12 15:32:03 2007 +0000
    27.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/process-xen.c	Wed Jan 17 18:41:22 2007 +0000
    27.3 @@ -28,7 +28,6 @@
    27.4  #include <linux/user.h>
    27.5  #include <linux/a.out.h>
    27.6  #include <linux/interrupt.h>
    27.7 -#include <linux/config.h>
    27.8  #include <linux/utsname.h>
    27.9  #include <linux/delay.h>
   27.10  #include <linux/reboot.h>
   27.11 @@ -124,10 +123,10 @@ static void xen_idle(void)
   27.12  	if (need_resched())
   27.13  		local_irq_enable();
   27.14  	else {
   27.15 -		clear_thread_flag(TIF_POLLING_NRFLAG);
   27.16 +		current_thread_info()->status &= ~TS_POLLING;
   27.17  		smp_mb__after_clear_bit();
   27.18  		safe_halt();
   27.19 -		set_thread_flag(TIF_POLLING_NRFLAG);
   27.20 +		current_thread_info()->status |= TS_POLLING;
   27.21  	}
   27.22  }
   27.23  #ifdef CONFIG_APM_MODULE
   27.24 @@ -162,7 +161,7 @@ void cpu_idle(void)
   27.25  {
   27.26  	int cpu = smp_processor_id();
   27.27  
   27.28 -	set_thread_flag(TIF_POLLING_NRFLAG);
   27.29 +	current_thread_info()->status |= TS_POLLING;
   27.30  
   27.31  	/* endless idle loop with no priority at all */
   27.32  	while (1) {
   27.33 @@ -262,7 +261,7 @@ void show_regs(struct pt_regs * regs)
   27.34  	cr3 = read_cr3();
   27.35  	cr4 = read_cr4_safe();
   27.36  	printk("CR0: %08lx CR2: %08lx CR3: %08lx CR4: %08lx\n", cr0, cr2, cr3, cr4);
   27.37 -	show_trace(NULL, &regs->esp);
   27.38 +	show_trace(NULL, regs, &regs->esp);
   27.39  }
   27.40  
   27.41  /*
   27.42 @@ -310,15 +309,15 @@ EXPORT_SYMBOL(kernel_thread);
   27.43   */
   27.44  void exit_thread(void)
   27.45  {
   27.46 -	struct task_struct *tsk = current;
   27.47 -	struct thread_struct *t = &tsk->thread;
   27.48 -
   27.49  	/* The process may have allocated an io port bitmap... nuke it. */
   27.50 -	if (unlikely(NULL != t->io_bitmap_ptr)) {
   27.51 +	if (unlikely(test_thread_flag(TIF_IO_BITMAP))) {
   27.52 +		struct task_struct *tsk = current;
   27.53 +		struct thread_struct *t = &tsk->thread;
   27.54  		struct physdev_set_iobitmap set_iobitmap = { 0 };
   27.55  		HYPERVISOR_physdev_op(PHYSDEVOP_set_iobitmap, &set_iobitmap);
   27.56  		kfree(t->io_bitmap_ptr);
   27.57  		t->io_bitmap_ptr = NULL;
   27.58 +		clear_thread_flag(TIF_IO_BITMAP);
   27.59  	}
   27.60  }
   27.61  
   27.62 @@ -328,6 +327,7 @@ void flush_thread(void)
   27.63  
   27.64  	memset(tsk->thread.debugreg, 0, sizeof(unsigned long)*8);
   27.65  	memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array));	
   27.66 +	clear_tsk_thread_flag(tsk, TIF_DEBUG);
   27.67  	/*
   27.68  	 * Forget coprocessor state..
   27.69  	 */
   27.70 @@ -372,7 +372,7 @@ int copy_thread(int nr, unsigned long cl
   27.71  	savesegment(gs,p->thread.gs);
   27.72  
   27.73  	tsk = current;
   27.74 -	if (unlikely(NULL != tsk->thread.io_bitmap_ptr)) {
   27.75 +	if (unlikely(test_tsk_thread_flag(tsk, TIF_IO_BITMAP))) {
   27.76  		p->thread.io_bitmap_ptr = kmalloc(IO_BITMAP_BYTES, GFP_KERNEL);
   27.77  		if (!p->thread.io_bitmap_ptr) {
   27.78  			p->thread.io_bitmap_max = 0;
   27.79 @@ -380,6 +380,7 @@ int copy_thread(int nr, unsigned long cl
   27.80  		}
   27.81  		memcpy(p->thread.io_bitmap_ptr, tsk->thread.io_bitmap_ptr,
   27.82  			IO_BITMAP_BYTES);
   27.83 +		set_tsk_thread_flag(p, TIF_IO_BITMAP);
   27.84  	}
   27.85  
   27.86  	/*
   27.87 @@ -476,6 +477,23 @@ int dump_task_regs(struct task_struct *t
   27.88  	return 1;
   27.89  }
   27.90  
   27.91 +static noinline void __switch_to_xtra(struct task_struct *next_p)
   27.92 +{
   27.93 +	struct thread_struct *next;
   27.94 +
   27.95 +	next = &next_p->thread;
   27.96 +
   27.97 +	if (test_tsk_thread_flag(next_p, TIF_DEBUG)) {
   27.98 +		set_debugreg(next->debugreg[0], 0);
   27.99 +		set_debugreg(next->debugreg[1], 1);
  27.100 +		set_debugreg(next->debugreg[2], 2);
  27.101 +		set_debugreg(next->debugreg[3], 3);
  27.102 +		/* no 4 and 5 */
  27.103 +		set_debugreg(next->debugreg[6], 6);
  27.104 +		set_debugreg(next->debugreg[7], 7);
  27.105 +	}
  27.106 +}
  27.107 +
  27.108  /*
  27.109   * This function selects if the context switch from prev to next
  27.110   * has to tweak the TSC disable bit in the cr4.
  27.111 @@ -617,17 +635,10 @@ struct task_struct fastcall * __switch_t
  27.112  		loadsegment(gs, next->gs);
  27.113  
  27.114  	/*
  27.115 -	 * Now maybe reload the debug registers
  27.116 +	 * Now maybe handle debug registers
  27.117  	 */
  27.118 -	if (unlikely(next->debugreg[7])) {
  27.119 -		set_debugreg(next->debugreg[0], 0);
  27.120 -		set_debugreg(next->debugreg[1], 1);
  27.121 -		set_debugreg(next->debugreg[2], 2);
  27.122 -		set_debugreg(next->debugreg[3], 3);
  27.123 -		/* no 4 and 5 */
  27.124 -		set_debugreg(next->debugreg[6], 6);
  27.125 -		set_debugreg(next->debugreg[7], 7);
  27.126 -	}
  27.127 +	if (unlikely(task_thread_info(next_p)->flags & _TIF_WORK_CTXSW))
  27.128 +		__switch_to_xtra(next_p);
  27.129  
  27.130  	disable_tsc(prev_p, next_p);
  27.131  
    28.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/quirks-xen.c	Fri Jan 12 15:32:03 2007 +0000
    28.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/quirks-xen.c	Wed Jan 17 18:41:22 2007 +0000
    28.3 @@ -1,7 +1,6 @@
    28.4  /*
    28.5   * This file contains work-arounds for x86 and x86_64 platform bugs.
    28.6   */
    28.7 -#include <linux/config.h>
    28.8  #include <linux/pci.h>
    28.9  #include <linux/irq.h>
   28.10  
    29.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c	Fri Jan 12 15:32:03 2007 +0000
    29.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c	Wed Jan 17 18:41:22 2007 +0000
    29.3 @@ -23,11 +23,10 @@
    29.4   * This file handles the architecture-dependent parts of initialization
    29.5   */
    29.6  
    29.7 -#include <linux/config.h>
    29.8  #include <linux/sched.h>
    29.9  #include <linux/mm.h>
   29.10  #include <linux/mmzone.h>
   29.11 -#include <linux/tty.h>
   29.12 +#include <linux/screen_info.h>
   29.13  #include <linux/ioport.h>
   29.14  #include <linux/acpi.h>
   29.15  #include <linux/apm_bios.h>
   29.16 @@ -68,7 +67,7 @@
   29.17  #include <xen/interface/memory.h>
   29.18  #include <xen/features.h>
   29.19  #include <xen/xencons.h>
   29.20 -#include "setup_arch_pre.h"
   29.21 +#include <setup_arch.h>
   29.22  #include <bios_ebda.h>
   29.23  
   29.24  #ifdef CONFIG_XEN
   29.25 @@ -404,8 +403,8 @@ EXPORT_SYMBOL(phys_to_machine_mapping);
   29.26  start_info_t *xen_start_info;
   29.27  EXPORT_SYMBOL(xen_start_info);
   29.28  
   29.29 -static void __init add_memory_region(unsigned long long start,
   29.30 -                                  unsigned long long size, int type)
   29.31 +void __init add_memory_region(unsigned long long start,
   29.32 +			      unsigned long long size, int type)
   29.33  {
   29.34  	int x;
   29.35  
   29.36 @@ -526,7 +525,7 @@ static struct change_member *change_poin
   29.37  static struct e820entry *overlap_list[E820MAX] __initdata;
   29.38  static struct e820entry new_bios[E820MAX] __initdata;
   29.39  
   29.40 -static int __init sanitize_e820_map(struct e820entry * biosmap, char * pnr_map)
   29.41 +int __init sanitize_e820_map(struct e820entry * biosmap, char * pnr_map)
   29.42  {
   29.43  	struct change_member *change_tmp;
   29.44  	unsigned long current_type, last_type;
   29.45 @@ -695,7 +694,7 @@ static int __init sanitize_e820_map(stru
   29.46   * thinkpad 560x, for example, does not cooperate with the memory
   29.47   * detection code.)
   29.48   */
   29.49 -static int __init copy_e820_map(struct e820entry * biosmap, int nr_map)
   29.50 +int __init copy_e820_map(struct e820entry * biosmap, int nr_map)
   29.51  {
   29.52  #ifndef CONFIG_XEN
   29.53  	/* Only one memory region (or negative)? Ignore it */
   29.54 @@ -759,12 +758,6 @@ static inline void copy_edd(void)
   29.55  }
   29.56  #endif
   29.57  
   29.58 -/*
   29.59 - * Do NOT EVER look at the BIOS memory size location.
   29.60 - * It does not work on many machines.
   29.61 - */
   29.62 -#define LOWMEMSIZE()	(0x9f000)
   29.63 -
   29.64  static void __init parse_cmdline_early (char ** cmdline_p)
   29.65  {
   29.66  	char c = ' ', *to = command_line, *from = saved_command_line;
   29.67 @@ -1412,8 +1405,10 @@ legacy_init_iomem_resources(struct e820e
   29.68  
   29.69  	for (i = 0; i < nr_map; i++) {
   29.70  		struct resource *res;
   29.71 +#ifndef CONFIG_RESOURCES_64BIT
   29.72  		if (e820[i].addr + e820[i].size > 0x100000000ULL)
   29.73  			continue;
   29.74 +#endif
   29.75  		res = kzalloc(sizeof(struct resource), GFP_ATOMIC);
   29.76  		switch (e820[i].type) {
   29.77  		case E820_RAM:	res->name = "System RAM"; break;
   29.78 @@ -1424,7 +1419,10 @@ legacy_init_iomem_resources(struct e820e
   29.79  		res->start = e820[i].addr;
   29.80  		res->end = res->start + e820[i].size - 1;
   29.81  		res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
   29.82 -		request_resource(&iomem_resource, res);
   29.83 +		if (request_resource(&iomem_resource, res)) {
   29.84 +			kfree(res);
   29.85 +			continue;
   29.86 +		}
   29.87  		if (e820[i].type == E820_RAM) {
   29.88  			/*
   29.89  			 *  We don't know which RAM region contains kernel data,
   29.90 @@ -1556,8 +1554,6 @@ static void __init register_memory(void)
   29.91  #endif
   29.92  }
   29.93  
   29.94 -static char * __init machine_specific_memory_setup(void);
   29.95 -
   29.96  #ifdef CONFIG_MCA
   29.97  static void set_mca_bus(int x)
   29.98  {
   29.99 @@ -1825,6 +1821,8 @@ void __init setup_arch(char **cmdline_p)
  29.100  		conswitchp = &dummy_con;
  29.101  #endif
  29.102  	}
  29.103 +	tsc_init();
  29.104 +
  29.105  	xencons_early_setup();
  29.106  }
  29.107  
  29.108 @@ -1853,7 +1851,6 @@ static __init int add_pcspkr(void)
  29.109  }
  29.110  device_initcall(add_pcspkr);
  29.111  
  29.112 -#include "setup_arch_post.h"
  29.113  /*
  29.114   * Local Variables:
  29.115   * mode:c
    30.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/smp-xen.c	Fri Jan 12 15:32:03 2007 +0000
    30.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/smp-xen.c	Wed Jan 17 18:41:22 2007 +0000
    30.3 @@ -117,7 +117,17 @@ DEFINE_PER_CPU(struct tlb_state, cpu_tlb
    30.4  
    30.5  static inline int __prepare_ICR (unsigned int shortcut, int vector)
    30.6  {
    30.7 -	return APIC_DM_FIXED | shortcut | vector | APIC_DEST_LOGICAL;
    30.8 +	unsigned int icr = shortcut | APIC_DEST_LOGICAL;
    30.9 +
   30.10 +	switch (vector) {
   30.11 +	default:
   30.12 +		icr |= APIC_DM_FIXED | vector;
   30.13 +		break;
   30.14 +	case NMI_VECTOR:
   30.15 +		icr |= APIC_DM_NMI;
   30.16 +		break;
   30.17 +	}
   30.18 +	return icr;
   30.19  }
   30.20  
   30.21  static inline int __prepare_ICR2 (unsigned int mask)
    31.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/smpboot.c	Fri Jan 12 15:32:03 2007 +0000
    31.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    31.3 @@ -1,1473 +0,0 @@
    31.4 -/*
    31.5 - *	x86 SMP booting functions
    31.6 - *
    31.7 - *	(c) 1995 Alan Cox, Building #3 <alan@redhat.com>
    31.8 - *	(c) 1998, 1999, 2000 Ingo Molnar <mingo@redhat.com>
    31.9 - *
   31.10 - *	Much of the core SMP work is based on previous work by Thomas Radke, to
   31.11 - *	whom a great many thanks are extended.
   31.12 - *
   31.13 - *	Thanks to Intel for making available several different Pentium,
   31.14 - *	Pentium Pro and Pentium-II/Xeon MP machines.
   31.15 - *	Original development of Linux SMP code supported by Caldera.
   31.16 - *
   31.17 - *	This code is released under the GNU General Public License version 2 or
   31.18 - *	later.
   31.19 - *
   31.20 - *	Fixes
   31.21 - *		Felix Koop	:	NR_CPUS used properly
   31.22 - *		Jose Renau	:	Handle single CPU case.
   31.23 - *		Alan Cox	:	By repeated request 8) - Total BogoMIPS report.
   31.24 - *		Greg Wright	:	Fix for kernel stacks panic.
   31.25 - *		Erich Boleyn	:	MP v1.4 and additional changes.
   31.26 - *	Matthias Sattler	:	Changes for 2.1 kernel map.
   31.27 - *	Michel Lespinasse	:	Changes for 2.1 kernel map.
   31.28 - *	Michael Chastain	:	Change trampoline.S to gnu as.
   31.29 - *		Alan Cox	:	Dumb bug: 'B' step PPro's are fine
   31.30 - *		Ingo Molnar	:	Added APIC timers, based on code
   31.31 - *					from Jose Renau
   31.32 - *		Ingo Molnar	:	various cleanups and rewrites
   31.33 - *		Tigran Aivazian	:	fixed "0.00 in /proc/uptime on SMP" bug.
   31.34 - *	Maciej W. Rozycki	:	Bits for genuine 82489DX APICs
   31.35 - *		Martin J. Bligh	: 	Added support for multi-quad systems
   31.36 - *		Dave Jones	:	Report invalid combinations of Athlon CPUs.
   31.37 -*		Rusty Russell	:	Hacked into shape for new "hotplug" boot process. */
   31.38 -
   31.39 -#include <linux/module.h>
   31.40 -#include <linux/config.h>
   31.41 -#include <linux/init.h>
   31.42 -#include <linux/kernel.h>
   31.43 -
   31.44 -#include <linux/mm.h>
   31.45 -#include <linux/sched.h>
   31.46 -#include <linux/kernel_stat.h>
   31.47 -#include <linux/smp_lock.h>
   31.48 -#include <linux/bootmem.h>
   31.49 -#include <linux/notifier.h>
   31.50 -#include <linux/cpu.h>
   31.51 -#include <linux/percpu.h>
   31.52 -
   31.53 -#include <linux/delay.h>
   31.54 -#include <linux/mc146818rtc.h>
   31.55 -#include <asm/tlbflush.h>
   31.56 -#include <asm/desc.h>
   31.57 -#include <asm/arch_hooks.h>
   31.58 -
   31.59 -#include <mach_apic.h>
   31.60 -#include <mach_wakecpu.h>
   31.61 -#include <smpboot_hooks.h>
   31.62 -
   31.63 -/* Set if we find a B stepping CPU */
   31.64 -static int __devinitdata smp_b_stepping;
   31.65 -
   31.66 -/* Number of siblings per CPU package */
   31.67 -int smp_num_siblings = 1;
   31.68 -#ifdef CONFIG_X86_HT
   31.69 -EXPORT_SYMBOL(smp_num_siblings);
   31.70 -#endif
   31.71 -
   31.72 -/* Package ID of each logical CPU */
   31.73 -int phys_proc_id[NR_CPUS] __read_mostly = {[0 ... NR_CPUS-1] = BAD_APICID};
   31.74 -
   31.75 -/* Core ID of each logical CPU */
   31.76 -int cpu_core_id[NR_CPUS] __read_mostly = {[0 ... NR_CPUS-1] = BAD_APICID};
   31.77 -
   31.78 -/* Last level cache ID of each logical CPU */
   31.79 -int cpu_llc_id[NR_CPUS] __cpuinitdata = {[0 ... NR_CPUS-1] = BAD_APICID};
   31.80 -
   31.81 -/* representing HT siblings of each logical CPU */
   31.82 -cpumask_t cpu_sibling_map[NR_CPUS] __read_mostly;
   31.83 -EXPORT_SYMBOL(cpu_sibling_map);
   31.84 -
   31.85 -/* representing HT and core siblings of each logical CPU */
   31.86 -cpumask_t cpu_core_map[NR_CPUS] __read_mostly;
   31.87 -EXPORT_SYMBOL(cpu_core_map);
   31.88 -
   31.89 -/* bitmap of online cpus */
   31.90 -cpumask_t cpu_online_map __read_mostly;
   31.91 -EXPORT_SYMBOL(cpu_online_map);
   31.92 -
   31.93 -cpumask_t cpu_callin_map;
   31.94 -cpumask_t cpu_callout_map;
   31.95 -EXPORT_SYMBOL(cpu_callout_map);
   31.96 -cpumask_t cpu_possible_map;
   31.97 -EXPORT_SYMBOL(cpu_possible_map);
   31.98 -static cpumask_t smp_commenced_mask;
   31.99 -
  31.100 -/* TSC's upper 32 bits can't be written in eariler CPU (before prescott), there
  31.101 - * is no way to resync one AP against BP. TBD: for prescott and above, we
  31.102 - * should use IA64's algorithm
  31.103 - */
  31.104 -static int __devinitdata tsc_sync_disabled;
  31.105 -
  31.106 -/* Per CPU bogomips and other parameters */
  31.107 -struct cpuinfo_x86 cpu_data[NR_CPUS] __cacheline_aligned;
  31.108 -EXPORT_SYMBOL(cpu_data);
  31.109 -
  31.110 -u8 x86_cpu_to_apicid[NR_CPUS] __read_mostly =
  31.111 -			{ [0 ... NR_CPUS-1] = 0xff };
  31.112 -EXPORT_SYMBOL(x86_cpu_to_apicid);
  31.113 -
  31.114 -/*
  31.115 - * Trampoline 80x86 program as an array.
  31.116 - */
  31.117 -
  31.118 -extern unsigned char trampoline_data [];
  31.119 -extern unsigned char trampoline_end  [];
  31.120 -static unsigned char *trampoline_base;
  31.121 -static int trampoline_exec;
  31.122 -
  31.123 -static void map_cpu_to_logical_apicid(void);
  31.124 -
  31.125 -/* State of each CPU. */
  31.126 -DEFINE_PER_CPU(int, cpu_state) = { 0 };
  31.127 -
  31.128 -/*
  31.129 - * Currently trivial. Write the real->protected mode
  31.130 - * bootstrap into the page concerned. The caller
  31.131 - * has made sure it's suitably aligned.
  31.132 - */
  31.133 -
  31.134 -static unsigned long __devinit setup_trampoline(void)
  31.135 -{
  31.136 -	memcpy(trampoline_base, trampoline_data, trampoline_end - trampoline_data);
  31.137 -	return virt_to_phys(trampoline_base);
  31.138 -}
  31.139 -
  31.140 -/*
  31.141 - * We are called very early to get the low memory for the
  31.142 - * SMP bootup trampoline page.
  31.143 - */
  31.144 -void __init smp_alloc_memory(void)
  31.145 -{
  31.146 -	trampoline_base = (void *) alloc_bootmem_low_pages(PAGE_SIZE);
  31.147 -	/*
  31.148 -	 * Has to be in very low memory so we can execute
  31.149 -	 * real-mode AP code.
  31.150 -	 */
  31.151 -	if (__pa(trampoline_base) >= 0x9F000)
  31.152 -		BUG();
  31.153 -	/*
  31.154 -	 * Make the SMP trampoline executable:
  31.155 -	 */
  31.156 -	trampoline_exec = set_kernel_exec((unsigned long)trampoline_base, 1);
  31.157 -}
  31.158 -
  31.159 -/*
  31.160 - * The bootstrap kernel entry code has set these up. Save them for
  31.161 - * a given CPU
  31.162 - */
  31.163 -
  31.164 -static void __devinit smp_store_cpu_info(int id)
  31.165 -{
  31.166 -	struct cpuinfo_x86 *c = cpu_data + id;
  31.167 -
  31.168 -	*c = boot_cpu_data;
  31.169 -	if (id!=0)
  31.170 -		identify_cpu(c);
  31.171 -	/*
  31.172 -	 * Mask B, Pentium, but not Pentium MMX
  31.173 -	 */
  31.174 -	if (c->x86_vendor == X86_VENDOR_INTEL &&
  31.175 -	    c->x86 == 5 &&
  31.176 -	    c->x86_mask >= 1 && c->x86_mask <= 4 &&
  31.177 -	    c->x86_model <= 3)
  31.178 -		/*
  31.179 -		 * Remember we have B step Pentia with bugs
  31.180 -		 */
  31.181 -		smp_b_stepping = 1;
  31.182 -
  31.183 -	/*
  31.184 -	 * Certain Athlons might work (for various values of 'work') in SMP
  31.185 -	 * but they are not certified as MP capable.
  31.186 -	 */
  31.187 -	if ((c->x86_vendor == X86_VENDOR_AMD) && (c->x86 == 6)) {
  31.188 -
  31.189 -		/* Athlon 660/661 is valid. */	
  31.190 -		if ((c->x86_model==6) && ((c->x86_mask==0) || (c->x86_mask==1)))
  31.191 -			goto valid_k7;
  31.192 -
  31.193 -		/* Duron 670 is valid */
  31.194 -		if ((c->x86_model==7) && (c->x86_mask==0))
  31.195 -			goto valid_k7;
  31.196 -
  31.197 -		/*
  31.198 -		 * Athlon 662, Duron 671, and Athlon >model 7 have capability bit.
  31.199 -		 * It's worth noting that the A5 stepping (662) of some Athlon XP's
  31.200 -		 * have the MP bit set.
  31.201 -		 * See http://www.heise.de/newsticker/data/jow-18.10.01-000 for more.
  31.202 -		 */
  31.203 -		if (((c->x86_model==6) && (c->x86_mask>=2)) ||
  31.204 -		    ((c->x86_model==7) && (c->x86_mask>=1)) ||
  31.205 -		     (c->x86_model> 7))
  31.206 -			if (cpu_has_mp)
  31.207 -				goto valid_k7;
  31.208 -
  31.209 -		/* If we get here, it's not a certified SMP capable AMD system. */
  31.210 -		add_taint(TAINT_UNSAFE_SMP);
  31.211 -	}
  31.212 -
  31.213 -valid_k7:
  31.214 -	;
  31.215 -}
  31.216 -
  31.217 -/*
  31.218 - * TSC synchronization.
  31.219 - *
  31.220 - * We first check whether all CPUs have their TSC's synchronized,
  31.221 - * then we print a warning if not, and always resync.
  31.222 - */
  31.223 -
  31.224 -static atomic_t tsc_start_flag = ATOMIC_INIT(0);
  31.225 -static atomic_t tsc_count_start = ATOMIC_INIT(0);
  31.226 -static atomic_t tsc_count_stop = ATOMIC_INIT(0);
  31.227 -static unsigned long long tsc_values[NR_CPUS];
  31.228 -
  31.229 -#define NR_LOOPS 5
  31.230 -
  31.231 -static void __init synchronize_tsc_bp (void)
  31.232 -{
  31.233 -	int i;
  31.234 -	unsigned long long t0;
  31.235 -	unsigned long long sum, avg;
  31.236 -	long long delta;
  31.237 -	unsigned int one_usec;
  31.238 -	int buggy = 0;
  31.239 -
  31.240 -	printk(KERN_INFO "checking TSC synchronization across %u CPUs: ", num_booting_cpus());
  31.241 -
  31.242 -	/* convert from kcyc/sec to cyc/usec */
  31.243 -	one_usec = cpu_khz / 1000;
  31.244 -
  31.245 -	atomic_set(&tsc_start_flag, 1);
  31.246 -	wmb();
  31.247 -
  31.248 -	/*
  31.249 -	 * We loop a few times to get a primed instruction cache,
  31.250 -	 * then the last pass is more or less synchronized and
  31.251 -	 * the BP and APs set their cycle counters to zero all at
  31.252 -	 * once. This reduces the chance of having random offsets
  31.253 -	 * between the processors, and guarantees that the maximum
  31.254 -	 * delay between the cycle counters is never bigger than
  31.255 -	 * the latency of information-passing (cachelines) between
  31.256 -	 * two CPUs.
  31.257 -	 */
  31.258 -	for (i = 0; i < NR_LOOPS; i++) {
  31.259 -		/*
  31.260 -		 * all APs synchronize but they loop on '== num_cpus'
  31.261 -		 */
  31.262 -		while (atomic_read(&tsc_count_start) != num_booting_cpus()-1)
  31.263 -			mb();
  31.264 -		atomic_set(&tsc_count_stop, 0);
  31.265 -		wmb();
  31.266 -		/*
  31.267 -		 * this lets the APs save their current TSC:
  31.268 -		 */
  31.269 -		atomic_inc(&tsc_count_start);
  31.270 -
  31.271 -		rdtscll(tsc_values[smp_processor_id()]);
  31.272 -		/*
  31.273 -		 * We clear the TSC in the last loop:
  31.274 -		 */
  31.275 -		if (i == NR_LOOPS-1)
  31.276 -			write_tsc(0, 0);
  31.277 -
  31.278 -		/*
  31.279 -		 * Wait for all APs to leave the synchronization point:
  31.280 -		 */
  31.281 -		while (atomic_read(&tsc_count_stop) != num_booting_cpus()-1)
  31.282 -			mb();
  31.283 -		atomic_set(&tsc_count_start, 0);
  31.284 -		wmb();
  31.285 -		atomic_inc(&tsc_count_stop);
  31.286 -	}
  31.287 -
  31.288 -	sum = 0;
  31.289 -	for (i = 0; i < NR_CPUS; i++) {
  31.290 -		if (cpu_isset(i, cpu_callout_map)) {
  31.291 -			t0 = tsc_values[i];
  31.292 -			sum += t0;
  31.293 -		}
  31.294 -	}
  31.295 -	avg = sum;
  31.296 -	do_div(avg, num_booting_cpus());
  31.297 -
  31.298 -	sum = 0;
  31.299 -	for (i = 0; i < NR_CPUS; i++) {
  31.300 -		if (!cpu_isset(i, cpu_callout_map))
  31.301 -			continue;
  31.302 -		delta = tsc_values[i] - avg;
  31.303 -		if (delta < 0)
  31.304 -			delta = -delta;
  31.305 -		/*
  31.306 -		 * We report bigger than 2 microseconds clock differences.
  31.307 -		 */
  31.308 -		if (delta > 2*one_usec) {
  31.309 -			long realdelta;
  31.310 -			if (!buggy) {
  31.311 -				buggy = 1;
  31.312 -				printk("\n");
  31.313 -			}
  31.314 -			realdelta = delta;
  31.315 -			do_div(realdelta, one_usec);
  31.316 -			if (tsc_values[i] < avg)
  31.317 -				realdelta = -realdelta;
  31.318 -
  31.319 -			if (realdelta > 0)
  31.320 -				printk(KERN_INFO "CPU#%d had %ld usecs TSC "
  31.321 -					"skew, fixed it up.\n", i, realdelta);
  31.322 -		}
  31.323 -
  31.324 -		sum += delta;
  31.325 -	}
  31.326 -	if (!buggy)
  31.327 -		printk("passed.\n");
  31.328 -}
  31.329 -
  31.330 -static void __init synchronize_tsc_ap (void)
  31.331 -{
  31.332 -	int i;
  31.333 -
  31.334 -	/*
  31.335 -	 * Not every cpu is online at the time
  31.336 -	 * this gets called, so we first wait for the BP to
  31.337 -	 * finish SMP initialization:
  31.338 -	 */
  31.339 -	while (!atomic_read(&tsc_start_flag)) mb();
  31.340 -
  31.341 -	for (i = 0; i < NR_LOOPS; i++) {
  31.342 -		atomic_inc(&tsc_count_start);
  31.343 -		while (atomic_read(&tsc_count_start) != num_booting_cpus())
  31.344 -			mb();
  31.345 -
  31.346 -		rdtscll(tsc_values[smp_processor_id()]);
  31.347 -		if (i == NR_LOOPS-1)
  31.348 -			write_tsc(0, 0);
  31.349 -
  31.350 -		atomic_inc(&tsc_count_stop);
  31.351 -		while (atomic_read(&tsc_count_stop) != num_booting_cpus()) mb();
  31.352 -	}
  31.353 -}
  31.354 -#undef NR_LOOPS
  31.355 -
  31.356 -extern void calibrate_delay(void);
  31.357 -
  31.358 -static atomic_t init_deasserted;
  31.359 -
  31.360 -static void __devinit smp_callin(void)
  31.361 -{
  31.362 -	int cpuid, phys_id;
  31.363 -	unsigned long timeout;
  31.364 -
  31.365 -	/*
  31.366 -	 * If waken up by an INIT in an 82489DX configuration
  31.367 -	 * we may get here before an INIT-deassert IPI reaches
  31.368 -	 * our local APIC.  We have to wait for the IPI or we'll
  31.369 -	 * lock up on an APIC access.
  31.370 -	 */
  31.371 -	wait_for_init_deassert(&init_deasserted);
  31.372 -
  31.373 -	/*
  31.374 -	 * (This works even if the APIC is not enabled.)
  31.375 -	 */
  31.376 -	phys_id = GET_APIC_ID(apic_read(APIC_ID));
  31.377 -	cpuid = smp_processor_id();
  31.378 -	if (cpu_isset(cpuid, cpu_callin_map)) {
  31.379 -		printk("huh, phys CPU#%d, CPU#%d already present??\n",
  31.380 -					phys_id, cpuid);
  31.381 -		BUG();
  31.382 -	}
  31.383 -	Dprintk("CPU#%d (phys ID: %d) waiting for CALLOUT\n", cpuid, phys_id);
  31.384 -
  31.385 -	/*
  31.386 -	 * STARTUP IPIs are fragile beasts as they might sometimes
  31.387 -	 * trigger some glue motherboard logic. Complete APIC bus
  31.388 -	 * silence for 1 second, this overestimates the time the
  31.389 -	 * boot CPU is spending to send the up to 2 STARTUP IPIs
  31.390 -	 * by a factor of two. This should be enough.
  31.391 -	 */
  31.392 -
  31.393 -	/*
  31.394 -	 * Waiting 2s total for startup (udelay is not yet working)
  31.395 -	 */
  31.396 -	timeout = jiffies + 2*HZ;
  31.397 -	while (time_before(jiffies, timeout)) {
  31.398 -		/*
  31.399 -		 * Has the boot CPU finished it's STARTUP sequence?
  31.400 -		 */
  31.401 -		if (cpu_isset(cpuid, cpu_callout_map))
  31.402 -			break;
  31.403 -		rep_nop();
  31.404 -	}
  31.405 -
  31.406 -	if (!time_before(jiffies, timeout)) {
  31.407 -		printk("BUG: CPU%d started up but did not get a callout!\n",
  31.408 -			cpuid);
  31.409 -		BUG();
  31.410 -	}
  31.411 -
  31.412 -	/*
  31.413 -	 * the boot CPU has finished the init stage and is spinning
  31.414 -	 * on callin_map until we finish. We are free to set up this
  31.415 -	 * CPU, first the APIC. (this is probably redundant on most
  31.416 -	 * boards)
  31.417 -	 */
  31.418 -
  31.419 -	Dprintk("CALLIN, before setup_local_APIC().\n");
  31.420 -	smp_callin_clear_local_apic();
  31.421 -	setup_local_APIC();
  31.422 -	map_cpu_to_logical_apicid();
  31.423 -
  31.424 -	/*
  31.425 -	 * Get our bogomips.
  31.426 -	 */
  31.427 -	calibrate_delay();
  31.428 -	Dprintk("Stack at about %p\n",&cpuid);
  31.429 -
  31.430 -	/*
  31.431 -	 * Save our processor parameters
  31.432 -	 */
  31.433 - 	smp_store_cpu_info(cpuid);
  31.434 -
  31.435 -	disable_APIC_timer();
  31.436 -
  31.437 -	/*
  31.438 -	 * Allow the master to continue.
  31.439 -	 */
  31.440 -	cpu_set(cpuid, cpu_callin_map);
  31.441 -
  31.442 -	/*
  31.443 -	 *      Synchronize the TSC with the BP
  31.444 -	 */
  31.445 -	if (cpu_has_tsc && cpu_khz && !tsc_sync_disabled)
  31.446 -		synchronize_tsc_ap();
  31.447 -}
  31.448 -
  31.449 -static int cpucount;
  31.450 -
  31.451 -/* maps the cpu to the sched domain representing multi-core */
  31.452 -cpumask_t cpu_coregroup_map(int cpu)
  31.453 -{
  31.454 -	struct cpuinfo_x86 *c = cpu_data + cpu;
  31.455 -	/*
  31.456 -	 * For perf, we return last level cache shared map.
  31.457 -	 * TBD: when power saving sched policy is added, we will return
  31.458 -	 *      cpu_core_map when power saving policy is enabled
  31.459 -	 */
  31.460 -	return c->llc_shared_map;
  31.461 -}
  31.462 -
  31.463 -/* representing cpus for which sibling maps can be computed */
  31.464 -static cpumask_t cpu_sibling_setup_map;
  31.465 -
  31.466 -static inline void
  31.467 -set_cpu_sibling_map(int cpu)
  31.468 -{
  31.469 -	int i;
  31.470 -	struct cpuinfo_x86 *c = cpu_data;
  31.471 -
  31.472 -	cpu_set(cpu, cpu_sibling_setup_map);
  31.473 -
  31.474 -	if (smp_num_siblings > 1) {
  31.475 -		for_each_cpu_mask(i, cpu_sibling_setup_map) {
  31.476 -			if (phys_proc_id[cpu] == phys_proc_id[i] &&
  31.477 -			    cpu_core_id[cpu] == cpu_core_id[i]) {
  31.478 -				cpu_set(i, cpu_sibling_map[cpu]);
  31.479 -				cpu_set(cpu, cpu_sibling_map[i]);
  31.480 -				cpu_set(i, cpu_core_map[cpu]);
  31.481 -				cpu_set(cpu, cpu_core_map[i]);
  31.482 -				cpu_set(i, c[cpu].llc_shared_map);
  31.483 -				cpu_set(cpu, c[i].llc_shared_map);
  31.484 -			}
  31.485 -		}
  31.486 -	} else {
  31.487 -		cpu_set(cpu, cpu_sibling_map[cpu]);
  31.488 -	}
  31.489 -
  31.490 -	cpu_set(cpu, c[cpu].llc_shared_map);
  31.491 -
  31.492 -	if (current_cpu_data.x86_max_cores == 1) {
  31.493 -		cpu_core_map[cpu] = cpu_sibling_map[cpu];
  31.494 -		c[cpu].booted_cores = 1;
  31.495 -		return;
  31.496 -	}
  31.497 -
  31.498 -	for_each_cpu_mask(i, cpu_sibling_setup_map) {
  31.499 -		if (cpu_llc_id[cpu] != BAD_APICID &&
  31.500 -		    cpu_llc_id[cpu] == cpu_llc_id[i]) {
  31.501 -			cpu_set(i, c[cpu].llc_shared_map);
  31.502 -			cpu_set(cpu, c[i].llc_shared_map);
  31.503 -		}
  31.504 -		if (phys_proc_id[cpu] == phys_proc_id[i]) {
  31.505 -			cpu_set(i, cpu_core_map[cpu]);
  31.506 -			cpu_set(cpu, cpu_core_map[i]);
  31.507 -			/*
  31.508 -			 *  Does this new cpu bringup a new core?
  31.509 -			 */
  31.510 -			if (cpus_weight(cpu_sibling_map[cpu]) == 1) {
  31.511 -				/*
  31.512 -				 * for each core in package, increment
  31.513 -				 * the booted_cores for this new cpu
  31.514 -				 */
  31.515 -				if (first_cpu(cpu_sibling_map[i]) == i)
  31.516 -					c[cpu].booted_cores++;
  31.517 -				/*
  31.518 -				 * increment the core count for all
  31.519 -				 * the other cpus in this package
  31.520 -				 */
  31.521 -				if (i != cpu)
  31.522 -					c[i].booted_cores++;
  31.523 -			} else if (i != cpu && !c[cpu].booted_cores)
  31.524 -				c[cpu].booted_cores = c[i].booted_cores;
  31.525 -		}
  31.526 -	}
  31.527 -}
  31.528 -
  31.529 -/*
  31.530 - * Activate a secondary processor.
  31.531 - */
  31.532 -static void __devinit start_secondary(void *unused)
  31.533 -{
  31.534 -	/*
  31.535 -	 * Dont put anything before smp_callin(), SMP
  31.536 -	 * booting is too fragile that we want to limit the
  31.537 -	 * things done here to the most necessary things.
  31.538 -	 */
  31.539 -	cpu_init();
  31.540 -	preempt_disable();
  31.541 -	smp_callin();
  31.542 -	while (!cpu_isset(smp_processor_id(), smp_commenced_mask))
  31.543 -		rep_nop();
  31.544 -	setup_secondary_APIC_clock();
  31.545 -	if (nmi_watchdog == NMI_IO_APIC) {
  31.546 -		disable_8259A_irq(0);
  31.547 -		enable_NMI_through_LVT0(NULL);
  31.548 -		enable_8259A_irq(0);
  31.549 -	}
  31.550 -	enable_APIC_timer();
  31.551 -	/*
  31.552 -	 * low-memory mappings have been cleared, flush them from
  31.553 -	 * the local TLBs too.
  31.554 -	 */
  31.555 -	local_flush_tlb();
  31.556 -
  31.557 -	/* This must be done before setting cpu_online_map */
  31.558 -	set_cpu_sibling_map(raw_smp_processor_id());
  31.559 -	wmb();
  31.560 -
  31.561 -	/*
  31.562 -	 * We need to hold call_lock, so there is no inconsistency
  31.563 -	 * between the time smp_call_function() determines number of
  31.564 -	 * IPI receipients, and the time when the determination is made
  31.565 -	 * for which cpus receive the IPI. Holding this
  31.566 -	 * lock helps us to not include this cpu in a currently in progress
  31.567 -	 * smp_call_function().
  31.568 -	 */
  31.569 -	lock_ipi_call_lock();
  31.570 -	cpu_set(smp_processor_id(), cpu_online_map);
  31.571 -	unlock_ipi_call_lock();
  31.572 -	per_cpu(cpu_state, smp_processor_id()) = CPU_ONLINE;
  31.573 -
  31.574 -	/* We can take interrupts now: we're officially "up". */
  31.575 -	local_irq_enable();
  31.576 -
  31.577 -	wmb();
  31.578 -	cpu_idle();
  31.579 -}
  31.580 -
  31.581 -/*
  31.582 - * Everything has been set up for the secondary
  31.583 - * CPUs - they just need to reload everything
  31.584 - * from the task structure
  31.585 - * This function must not return.
  31.586 - */
  31.587 -void __devinit initialize_secondary(void)
  31.588 -{
  31.589 -	/*
  31.590 -	 * We don't actually need to load the full TSS,
  31.591 -	 * basically just the stack pointer and the eip.
  31.592 -	 */
  31.593 -
  31.594 -	asm volatile(
  31.595 -		"movl %0,%%esp\n\t"
  31.596 -		"jmp *%1"
  31.597 -		:
  31.598 -		:"r" (current->thread.esp),"r" (current->thread.eip));
  31.599 -}
  31.600 -
  31.601 -extern struct {
  31.602 -	void * esp;
  31.603 -	unsigned short ss;
  31.604 -} stack_start;
  31.605 -
  31.606 -#ifdef CONFIG_NUMA
  31.607 -
  31.608 -/* which logical CPUs are on which nodes */
  31.609 -cpumask_t node_2_cpu_mask[MAX_NUMNODES] __read_mostly =
  31.610 -				{ [0 ... MAX_NUMNODES-1] = CPU_MASK_NONE };
  31.611 -/* which node each logical CPU is on */
  31.612 -int cpu_2_node[NR_CPUS] __read_mostly = { [0 ... NR_CPUS-1] = 0 };
  31.613 -EXPORT_SYMBOL(cpu_2_node);
  31.614 -
  31.615 -/* set up a mapping between cpu and node. */
  31.616 -static inline void map_cpu_to_node(int cpu, int node)
  31.617 -{
  31.618 -	printk("Mapping cpu %d to node %d\n", cpu, node);
  31.619 -	cpu_set(cpu, node_2_cpu_mask[node]);
  31.620 -	cpu_2_node[cpu] = node;
  31.621 -}
  31.622 -
  31.623 -/* undo a mapping between cpu and node. */
  31.624 -static inline void unmap_cpu_to_node(int cpu)
  31.625 -{
  31.626 -	int node;
  31.627 -
  31.628 -	printk("Unmapping cpu %d from all nodes\n", cpu);
  31.629 -	for (node = 0; node < MAX_NUMNODES; node ++)
  31.630 -		cpu_clear(cpu, node_2_cpu_mask[node]);
  31.631 -	cpu_2_node[cpu] = 0;
  31.632 -}
  31.633 -#else /* !CONFIG_NUMA */
  31.634 -
  31.635 -#define map_cpu_to_node(cpu, node)	({})
  31.636 -#define unmap_cpu_to_node(cpu)	({})
  31.637 -
  31.638 -#endif /* CONFIG_NUMA */
  31.639 -
  31.640 -u8 cpu_2_logical_apicid[NR_CPUS] __read_mostly = { [0 ... NR_CPUS-1] = BAD_APICID };
  31.641 -
  31.642 -static void map_cpu_to_logical_apicid(void)
  31.643 -{
  31.644 -	int cpu = smp_processor_id();
  31.645 -	int apicid = logical_smp_processor_id();
  31.646 -
  31.647 -	cpu_2_logical_apicid[cpu] = apicid;
  31.648 -	map_cpu_to_node(cpu, apicid_to_node(apicid));
  31.649 -}
  31.650 -
  31.651 -static void unmap_cpu_to_logical_apicid(int cpu)
  31.652 -{
  31.653 -	cpu_2_logical_apicid[cpu] = BAD_APICID;
  31.654 -	unmap_cpu_to_node(cpu);
  31.655 -}
  31.656 -
  31.657 -#if APIC_DEBUG
  31.658 -static inline void __inquire_remote_apic(int apicid)
  31.659 -{
  31.660 -	int i, regs[] = { APIC_ID >> 4, APIC_LVR >> 4, APIC_SPIV >> 4 };
  31.661 -	char *names[] = { "ID", "VERSION", "SPIV" };
  31.662 -	int timeout, status;
  31.663 -
  31.664 -	printk("Inquiring remote APIC #%d...\n", apicid);
  31.665 -
  31.666 -	for (i = 0; i < ARRAY_SIZE(regs); i++) {
  31.667 -		printk("... APIC #%d %s: ", apicid, names[i]);
  31.668 -
  31.669 -		/*
  31.670 -		 * Wait for idle.
  31.671 -		 */
  31.672 -		apic_wait_icr_idle();
  31.673 -
  31.674 -		apic_write_around(APIC_ICR2, SET_APIC_DEST_FIELD(apicid));
  31.675 -		apic_write_around(APIC_ICR, APIC_DM_REMRD | regs[i]);
  31.676 -
  31.677 -		timeout = 0;
  31.678 -		do {
  31.679 -			udelay(100);
  31.680 -			status = apic_read(APIC_ICR) & APIC_ICR_RR_MASK;
  31.681 -		} while (status == APIC_ICR_RR_INPROG && timeout++ < 1000);
  31.682 -
  31.683 -		switch (status) {
  31.684 -		case APIC_ICR_RR_VALID:
  31.685 -			status = apic_read(APIC_RRR);
  31.686 -			printk("%08x\n", status);
  31.687 -			break;
  31.688 -		default:
  31.689 -			printk("failed\n");
  31.690 -		}
  31.691 -	}
  31.692 -}
  31.693 -#endif
  31.694 -
  31.695 -#ifdef WAKE_SECONDARY_VIA_NMI
  31.696 -/* 
  31.697 - * Poke the other CPU in the eye via NMI to wake it up. Remember that the normal
  31.698 - * INIT, INIT, STARTUP sequence will reset the chip hard for us, and this
  31.699 - * won't ... remember to clear down the APIC, etc later.
  31.700 - */
  31.701 -static int __devinit
  31.702 -wakeup_secondary_cpu(int logical_apicid, unsigned long start_eip)
  31.703 -{
  31.704 -	unsigned long send_status = 0, accept_status = 0;
  31.705 -	int timeout, maxlvt;
  31.706 -
  31.707 -	/* Target chip */
  31.708 -	apic_write_around(APIC_ICR2, SET_APIC_DEST_FIELD(logical_apicid));
  31.709 -
  31.710 -	/* Boot on the stack */
  31.711 -	/* Kick the second */
  31.712 -	apic_write_around(APIC_ICR, APIC_DM_NMI | APIC_DEST_LOGICAL);
  31.713 -
  31.714 -	Dprintk("Waiting for send to finish...\n");
  31.715 -	timeout = 0;
  31.716 -	do {
  31.717 -		Dprintk("+");
  31.718 -		udelay(100);
  31.719 -		send_status = apic_read(APIC_ICR) & APIC_ICR_BUSY;
  31.720 -	} while (send_status && (timeout++ < 1000));
  31.721 -
  31.722 -	/*
  31.723 -	 * Give the other CPU some time to accept the IPI.
  31.724 -	 */
  31.725 -	udelay(200);
  31.726 -	/*
  31.727 -	 * Due to the Pentium erratum 3AP.
  31.728 -	 */
  31.729 -	maxlvt = get_maxlvt();
  31.730 -	if (maxlvt > 3) {
  31.731 -		apic_read_around(APIC_SPIV);
  31.732 -		apic_write(APIC_ESR, 0);
  31.733 -	}
  31.734 -	accept_status = (apic_read(APIC_ESR) & 0xEF);
  31.735 -	Dprintk("NMI sent.\n");
  31.736 -
  31.737 -	if (send_status)
  31.738 -		printk("APIC never delivered???\n");
  31.739 -	if (accept_status)
  31.740 -		printk("APIC delivery error (%lx).\n", accept_status);
  31.741 -
  31.742 -	return (send_status | accept_status);
  31.743 -}
  31.744 -#endif	/* WAKE_SECONDARY_VIA_NMI */
  31.745 -
  31.746 -#ifdef WAKE_SECONDARY_VIA_INIT
  31.747 -static int __devinit
  31.748 -wakeup_secondary_cpu(int phys_apicid, unsigned long start_eip)
  31.749 -{
  31.750 -	unsigned long send_status = 0, accept_status = 0;
  31.751 -	int maxlvt, timeout, num_starts, j;
  31.752 -
  31.753 -	/*
  31.754 -	 * Be paranoid about clearing APIC errors.
  31.755 -	 */
  31.756 -	if (APIC_INTEGRATED(apic_version[phys_apicid])) {
  31.757 -		apic_read_around(APIC_SPIV);
  31.758 -		apic_write(APIC_ESR, 0);
  31.759 -		apic_read(APIC_ESR);
  31.760 -	}
  31.761 -
  31.762 -	Dprintk("Asserting INIT.\n");
  31.763 -
  31.764 -	/*
  31.765 -	 * Turn INIT on target chip
  31.766 -	 */
  31.767 -	apic_write_around(APIC_ICR2, SET_APIC_DEST_FIELD(phys_apicid));
  31.768 -
  31.769 -	/*
  31.770 -	 * Send IPI
  31.771 -	 */
  31.772 -	apic_write_around(APIC_ICR, APIC_INT_LEVELTRIG | APIC_INT_ASSERT
  31.773 -				| APIC_DM_INIT);
  31.774 -
  31.775 -	Dprintk("Waiting for send to finish...\n");
  31.776 -	timeout = 0;
  31.777 -	do {
  31.778 -		Dprintk("+");
  31.779 -		udelay(100);
  31.780 -		send_status = apic_read(APIC_ICR) & APIC_ICR_BUSY;
  31.781 -	} while (send_status && (timeout++ < 1000));
  31.782 -
  31.783 -	mdelay(10);
  31.784 -
  31.785 -	Dprintk("Deasserting INIT.\n");
  31.786 -
  31.787 -	/* Target chip */
  31.788 -	apic_write_around(APIC_ICR2, SET_APIC_DEST_FIELD(phys_apicid));
  31.789 -
  31.790 -	/* Send IPI */
  31.791 -	apic_write_around(APIC_ICR, APIC_INT_LEVELTRIG | APIC_DM_INIT);
  31.792 -
  31.793 -	Dprintk("Waiting for send to finish...\n");
  31.794 -	timeout = 0;
  31.795 -	do {
  31.796 -		Dprintk("+");
  31.797 -		udelay(100);
  31.798 -		send_status = apic_read(APIC_ICR) & APIC_ICR_BUSY;
  31.799 -	} while (send_status && (timeout++ < 1000));
  31.800 -
  31.801 -	atomic_set(&init_deasserted, 1);
  31.802 -
  31.803 -	/*
  31.804 -	 * Should we send STARTUP IPIs ?
  31.805 -	 *
  31.806 -	 * Determine this based on the APIC version.
  31.807 -	 * If we don't have an integrated APIC, don't send the STARTUP IPIs.
  31.808 -	 */
  31.809 -	if (APIC_INTEGRATED(apic_version[phys_apicid]))
  31.810 -		num_starts = 2;
  31.811 -	else
  31.812 -		num_starts = 0;
  31.813 -
  31.814 -	/*
  31.815 -	 * Run STARTUP IPI loop.
  31.816 -	 */
  31.817 -	Dprintk("#startup loops: %d.\n", num_starts);
  31.818 -
  31.819 -	maxlvt = get_maxlvt();
  31.820 -
  31.821 -	for (j = 1; j <= num_starts; j++) {
  31.822 -		Dprintk("Sending STARTUP #%d.\n",j);
  31.823 -		apic_read_around(APIC_SPIV);
  31.824 -		apic_write(APIC_ESR, 0);
  31.825 -		apic_read(APIC_ESR);
  31.826 -		Dprintk("After apic_write.\n");
  31.827 -
  31.828 -		/*
  31.829 -		 * STARTUP IPI
  31.830 -		 */
  31.831 -
  31.832 -		/* Target chip */
  31.833 -		apic_write_around(APIC_ICR2, SET_APIC_DEST_FIELD(phys_apicid));
  31.834 -
  31.835 -		/* Boot on the stack */
  31.836 -		/* Kick the second */
  31.837 -		apic_write_around(APIC_ICR, APIC_DM_STARTUP
  31.838 -					| (start_eip >> 12));
  31.839 -
  31.840 -		/*
  31.841 -		 * Give the other CPU some time to accept the IPI.
  31.842 -		 */
  31.843 -		udelay(300);
  31.844 -
  31.845 -		Dprintk("Startup point 1.\n");
  31.846 -
  31.847 -		Dprintk("Waiting for send to finish...\n");
  31.848 -		timeout = 0;
  31.849 -		do {
  31.850 -			Dprintk("+");
  31.851 -			udelay(100);
  31.852 -			send_status = apic_read(APIC_ICR) & APIC_ICR_BUSY;
  31.853 -		} while (send_status && (timeout++ < 1000));
  31.854 -
  31.855 -		/*
  31.856 -		 * Give the other CPU some time to accept the IPI.
  31.857 -		 */
  31.858 -		udelay(200);
  31.859 -		/*
  31.860 -		 * Due to the Pentium erratum 3AP.
  31.861 -		 */
  31.862 -		if (maxlvt > 3) {
  31.863 -			apic_read_around(APIC_SPIV);
  31.864 -			apic_write(APIC_ESR, 0);
  31.865 -		}
  31.866 -		accept_status = (apic_read(APIC_ESR) & 0xEF);
  31.867 -		if (send_status || accept_status)
  31.868 -			break;
  31.869 -	}
  31.870 -	Dprintk("After Startup.\n");
  31.871 -
  31.872 -	if (send_status)
  31.873 -		printk("APIC never delivered???\n");
  31.874 -	if (accept_status)
  31.875 -		printk("APIC delivery error (%lx).\n", accept_status);
  31.876 -
  31.877 -	return (send_status | accept_status);
  31.878 -}
  31.879 -#endif	/* WAKE_SECONDARY_VIA_INIT */
  31.880 -
  31.881 -extern cpumask_t cpu_initialized;
  31.882 -static inline int alloc_cpu_id(void)
  31.883 -{
  31.884 -	cpumask_t	tmp_map;
  31.885 -	int cpu;
  31.886 -	cpus_complement(tmp_map, cpu_present_map);
  31.887 -	cpu = first_cpu(tmp_map);
  31.888 -	if (cpu >= NR_CPUS)
  31.889 -		return -ENODEV;
  31.890 -	return cpu;
  31.891 -}
  31.892 -
  31.893 -#ifdef CONFIG_HOTPLUG_CPU
  31.894 -static struct task_struct * __devinitdata cpu_idle_tasks[NR_CPUS];
  31.895 -static inline struct task_struct * alloc_idle_task(int cpu)
  31.896 -{
  31.897 -	struct task_struct *idle;
  31.898 -
  31.899 -	if ((idle = cpu_idle_tasks[cpu]) != NULL) {
  31.900 -		/* initialize thread_struct.  we really want to avoid destroy
  31.901 -		 * idle tread
  31.902 -		 */
  31.903 -		idle->thread.esp = (unsigned long)task_pt_regs(idle);
  31.904 -		init_idle(idle, cpu);
  31.905 -		return idle;
  31.906 -	}
  31.907 -	idle = fork_idle(cpu);
  31.908 -
  31.909 -	if (!IS_ERR(idle))
  31.910 -		cpu_idle_tasks[cpu] = idle;
  31.911 -	return idle;
  31.912 -}
  31.913 -#else
  31.914 -#define alloc_idle_task(cpu) fork_idle(cpu)
  31.915 -#endif
  31.916 -
  31.917 -static int __devinit do_boot_cpu(int apicid, int cpu)
  31.918 -/*
  31.919 - * NOTE - on most systems this is a PHYSICAL apic ID, but on multiquad
  31.920 - * (ie clustered apic addressing mode), this is a LOGICAL apic ID.
  31.921 - * Returns zero if CPU booted OK, else error code from wakeup_secondary_cpu.
  31.922 - */
  31.923 -{
  31.924 -	struct task_struct *idle;
  31.925 -	unsigned long boot_error;
  31.926 -	int timeout;
  31.927 -	unsigned long start_eip;
  31.928 -	unsigned short nmi_high = 0, nmi_low = 0;
  31.929 -
  31.930 -	++cpucount;
  31.931 -	alternatives_smp_switch(1);
  31.932 -
  31.933 -	/*
  31.934 -	 * We can't use kernel_thread since we must avoid to
  31.935 -	 * reschedule the child.
  31.936 -	 */
  31.937 -	idle = alloc_idle_task(cpu);
  31.938 -	if (IS_ERR(idle))
  31.939 -		panic("failed fork for CPU %d", cpu);
  31.940 -	idle->thread.eip = (unsigned long) start_secondary;
  31.941 -	/* start_eip had better be page-aligned! */
  31.942 -	start_eip = setup_trampoline();
  31.943 -
  31.944 -	/* So we see what's up   */
  31.945 -	printk("Booting processor %d/%d eip %lx\n", cpu, apicid, start_eip);
  31.946 -	/* Stack for startup_32 can be just as for start_secondary onwards */
  31.947 -	stack_start.esp = (void *) idle->thread.esp;
  31.948 -
  31.949 -	irq_ctx_init(cpu);
  31.950 -
  31.951 -	/*
  31.952 -	 * This grunge runs the startup process for
  31.953 -	 * the targeted processor.
  31.954 -	 */
  31.955 -
  31.956 -	atomic_set(&init_deasserted, 0);
  31.957 -
  31.958 -	Dprintk("Setting warm reset code and vector.\n");
  31.959 -
  31.960 -	store_NMI_vector(&nmi_high, &nmi_low);
  31.961 -
  31.962 -	smpboot_setup_warm_reset_vector(start_eip);
  31.963 -
  31.964 -	/*
  31.965 -	 * Starting actual IPI sequence...
  31.966 -	 */
  31.967 -	boot_error = wakeup_secondary_cpu(apicid, start_eip);
  31.968 -
  31.969 -	if (!boot_error) {
  31.970 -		/*
  31.971 -		 * allow APs to start initializing.
  31.972 -		 */
  31.973 -		Dprintk("Before Callout %d.\n", cpu);
  31.974 -		cpu_set(cpu, cpu_callout_map);
  31.975 -		Dprintk("After Callout %d.\n", cpu);
  31.976 -
  31.977 -		/*
  31.978 -		 * Wait 5s total for a response
  31.979 -		 */
  31.980 -		for (timeout = 0; timeout < 50000; timeout++) {
  31.981 -			if (cpu_isset(cpu, cpu_callin_map))
  31.982 -				break;	/* It has booted */
  31.983 -			udelay(100);
  31.984 -		}
  31.985 -
  31.986 -		if (cpu_isset(cpu, cpu_callin_map)) {
  31.987 -			/* number CPUs logically, starting from 1 (BSP is 0) */
  31.988 -			Dprintk("OK.\n");
  31.989 -			printk("CPU%d: ", cpu);
  31.990 -			print_cpu_info(&cpu_data[cpu]);
  31.991 -			Dprintk("CPU has booted.\n");
  31.992 -		} else {
  31.993 -			boot_error= 1;
  31.994 -			if (*((volatile unsigned char *)trampoline_base)
  31.995 -					== 0xA5)
  31.996 -				/* trampoline started but...? */
  31.997 -				printk("Stuck ??\n");
  31.998 -			else
  31.999 -				/* trampoline code not run */
 31.1000 -				printk("Not responding.\n");
 31.1001 -			inquire_remote_apic(apicid);
 31.1002 -		}
 31.1003 -	}
 31.1004 -
 31.1005 -	if (boot_error) {
 31.1006 -		/* Try to put things back the way they were before ... */
 31.1007 -		unmap_cpu_to_logical_apicid(cpu);
 31.1008 -		cpu_clear(cpu, cpu_callout_map); /* was set here (do_boot_cpu()) */
 31.1009 -		cpu_clear(cpu, cpu_initialized); /* was set by cpu_init() */
 31.1010 -		cpucount--;
 31.1011 -	} else {
 31.1012 -		x86_cpu_to_apicid[cpu] = apicid;
 31.1013 -		cpu_set(cpu, cpu_present_map);
 31.1014 -	}
 31.1015 -
 31.1016 -	/* mark "stuck" area as not stuck */
 31.1017 -	*((volatile unsigned long *)trampoline_base) = 0;
 31.1018 -
 31.1019 -	return boot_error;
 31.1020 -}
 31.1021 -
 31.1022 -#ifdef CONFIG_HOTPLUG_CPU
 31.1023 -void cpu_exit_clear(void)
 31.1024 -{
 31.1025 -	int cpu = raw_smp_processor_id();
 31.1026 -
 31.1027 -	idle_task_exit();
 31.1028 -
 31.1029 -	cpucount --;
 31.1030 -	cpu_uninit();
 31.1031 -	irq_ctx_exit(cpu);
 31.1032 -
 31.1033 -	cpu_clear(cpu, cpu_callout_map);
 31.1034 -	cpu_clear(cpu, cpu_callin_map);
 31.1035 -
 31.1036 -	cpu_clear(cpu, smp_commenced_mask);
 31.1037 -	unmap_cpu_to_logical_apicid(cpu);
 31.1038 -}
 31.1039 -
 31.1040 -struct warm_boot_cpu_info {
 31.1041 -	struct completion *complete;
 31.1042 -	int apicid;
 31.1043 -	int cpu;
 31.1044 -};
 31.1045 -
 31.1046 -static void __cpuinit do_warm_boot_cpu(void *p)
 31.1047 -{
 31.1048 -	struct warm_boot_cpu_info *info = p;
 31.1049 -	do_boot_cpu(info->apicid, info->cpu);
 31.1050 -	complete(info->complete);
 31.1051 -}
 31.1052 -
 31.1053 -static int __cpuinit __smp_prepare_cpu(int cpu)
 31.1054 -{
 31.1055 -	DECLARE_COMPLETION(done);
 31.1056 -	struct warm_boot_cpu_info info;
 31.1057 -	struct work_struct task;
 31.1058 -	int	apicid, ret;
 31.1059 -
 31.1060 -	apicid = x86_cpu_to_apicid[cpu];
 31.1061 -	if (apicid == BAD_APICID) {
 31.1062 -		ret = -ENODEV;
 31.1063 -		goto exit;
 31.1064 -	}
 31.1065 -
 31.1066 -	info.complete = &done;
 31.1067 -	info.apicid = apicid;
 31.1068 -	info.cpu = cpu;
 31.1069 -	INIT_WORK(&task, do_warm_boot_cpu, &info);
 31.1070 -
 31.1071 -	tsc_sync_disabled = 1;
 31.1072 -
 31.1073 -	/* init low mem mapping */
 31.1074 -	clone_pgd_range(swapper_pg_dir, swapper_pg_dir + USER_PGD_PTRS,
 31.1075 -			KERNEL_PGD_PTRS);
 31.1076 -	flush_tlb_all();
 31.1077 -	schedule_work(&task);
 31.1078 -	wait_for_completion(&done);
 31.1079 -
 31.1080 -	tsc_sync_disabled = 0;
 31.1081 -	zap_low_mappings();
 31.1082 -	ret = 0;
 31.1083 -exit:
 31.1084 -	return ret;
 31.1085 -}
 31.1086 -#endif
 31.1087 -
 31.1088 -static void smp_tune_scheduling (void)
 31.1089 -{
 31.1090 -	unsigned long cachesize;       /* kB   */
 31.1091 -	unsigned long bandwidth = 350; /* MB/s */
 31.1092 -	/*
 31.1093 -	 * Rough estimation for SMP scheduling, this is the number of
 31.1094 -	 * cycles it takes for a fully memory-limited process to flush
 31.1095 -	 * the SMP-local cache.
 31.1096 -	 *
 31.1097 -	 * (For a P5 this pretty much means we will choose another idle
 31.1098 -	 *  CPU almost always at wakeup time (this is due to the small
 31.1099 -	 *  L1 cache), on PIIs it's around 50-100 usecs, depending on
 31.1100 -	 *  the cache size)
 31.1101 -	 */
 31.1102 -
 31.1103 -	if (!cpu_khz) {
 31.1104 -		/*
 31.1105 -		 * this basically disables processor-affinity
 31.1106 -		 * scheduling on SMP without a TSC.
 31.1107 -		 */
 31.1108 -		return;
 31.1109 -	} else {
 31.1110 -		cachesize = boot_cpu_data.x86_cache_size;
 31.1111 -		if (cachesize == -1) {
 31.1112 -			cachesize = 16; /* Pentiums, 2x8kB cache */
 31.1113 -			bandwidth = 100;
 31.1114 -		}
 31.1115 -		max_cache_size = cachesize * 1024;
 31.1116 -	}
 31.1117 -}
 31.1118 -
 31.1119 -/*
 31.1120 - * Cycle through the processors sending APIC IPIs to boot each.
 31.1121 - */
 31.1122 -
 31.1123 -static int boot_cpu_logical_apicid;
 31.1124 -/* Where the IO area was mapped on multiquad, always 0 otherwise */
 31.1125 -void *xquad_portio;
 31.1126 -#ifdef CONFIG_X86_NUMAQ
 31.1127 -EXPORT_SYMBOL(xquad_portio);
 31.1128 -#endif
 31.1129 -
 31.1130 -static void __init smp_boot_cpus(unsigned int max_cpus)
 31.1131 -{
 31.1132 -	int apicid, cpu, bit, kicked;
 31.1133 -	unsigned long bogosum = 0;
 31.1134 -
 31.1135 -	/*
 31.1136 -	 * Setup boot CPU information
 31.1137 -	 */
 31.1138 -	smp_store_cpu_info(0); /* Final full version of the data */
 31.1139 -	printk("CPU%d: ", 0);
 31.1140 -	print_cpu_info(&cpu_data[0]);
 31.1141 -
 31.1142 -	boot_cpu_physical_apicid = GET_APIC_ID(apic_read(APIC_ID));
 31.1143 -	boot_cpu_logical_apicid = logical_smp_processor_id();
 31.1144 -	x86_cpu_to_apicid[0] = boot_cpu_physical_apicid;
 31.1145 -
 31.1146 -	current_thread_info()->cpu = 0;
 31.1147 -	smp_tune_scheduling();
 31.1148 -
 31.1149 -	set_cpu_sibling_map(0);
 31.1150 -
 31.1151 -	/*
 31.1152 -	 * If we couldn't find an SMP configuration at boot time,
 31.1153 -	 * get out of here now!
 31.1154 -	 */
 31.1155 -	if (!smp_found_config && !acpi_lapic) {
 31.1156 -		printk(KERN_NOTICE "SMP motherboard not detected.\n");
 31.1157 -		smpboot_clear_io_apic_irqs();
 31.1158 -		phys_cpu_present_map = physid_mask_of_physid(0);
 31.1159 -		if (APIC_init_uniprocessor())
 31.1160 -			printk(KERN_NOTICE "Local APIC not detected."
 31.1161 -					   " Using dummy APIC emulation.\n");
 31.1162 -		map_cpu_to_logical_apicid();
 31.1163 -		cpu_set(0, cpu_sibling_map[0]);
 31.1164 -		cpu_set(0, cpu_core_map[0]);
 31.1165 -		return;
 31.1166 -	}
 31.1167 -
 31.1168 -	/*
 31.1169 -	 * Should not be necessary because the MP table should list the boot
 31.1170 -	 * CPU too, but we do it for the sake of robustness anyway.
 31.1171 -	 * Makes no sense to do this check in clustered apic mode, so skip it
 31.1172 -	 */
 31.1173 -	if (!check_phys_apicid_present(boot_cpu_physical_apicid)) {
 31.1174 -		printk("weird, boot CPU (#%d) not listed by the BIOS.\n",
 31.1175 -				boot_cpu_physical_apicid);
 31.1176 -		physid_set(hard_smp_processor_id(), phys_cpu_present_map);
 31.1177 -	}
 31.1178 -
 31.1179 -	/*
 31.1180 -	 * If we couldn't find a local APIC, then get out of here now!
 31.1181 -	 */
 31.1182 -	if (APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid]) && !cpu_has_apic) {
 31.1183 -		printk(KERN_ERR "BIOS bug, local APIC #%d not detected!...\n",
 31.1184 -			boot_cpu_physical_apicid);
 31.1185 -		printk(KERN_ERR "... forcing use of dummy APIC emulation. (tell your hw vendor)\n");
 31.1186 -		smpboot_clear_io_apic_irqs();
 31.1187 -		phys_cpu_present_map = physid_mask_of_physid(0);
 31.1188 -		cpu_set(0, cpu_sibling_map[0]);
 31.1189 -		cpu_set(0, cpu_core_map[0]);
 31.1190 -		return;
 31.1191 -	}
 31.1192 -
 31.1193 -	verify_local_APIC();
 31.1194 -
 31.1195 -	/*
 31.1196 -	 * If SMP should be disabled, then really disable it!
 31.1197 -	 */
 31.1198 -	if (!max_cpus) {
 31.1199 -		smp_found_config = 0;
 31.1200 -		printk(KERN_INFO "SMP mode deactivated, forcing use of dummy APIC emulation.\n");
 31.1201 -		smpboot_clear_io_apic_irqs();
 31.1202 -		phys_cpu_present_map = physid_mask_of_physid(0);
 31.1203 -		cpu_set(0, cpu_sibling_map[0]);
 31.1204 -		cpu_set(0, cpu_core_map[0]);
 31.1205 -		return;
 31.1206 -	}
 31.1207 -
 31.1208 -	connect_bsp_APIC();
 31.1209 -	setup_local_APIC();
 31.1210 -	map_cpu_to_logical_apicid();
 31.1211 -
 31.1212 -
 31.1213 -	setup_portio_remap();
 31.1214 -
 31.1215 -	/*
 31.1216 -	 * Scan the CPU present map and fire up the other CPUs via do_boot_cpu
 31.1217 -	 *
 31.1218 -	 * In clustered apic mode, phys_cpu_present_map is a constructed thus:
 31.1219 -	 * bits 0-3 are quad0, 4-7 are quad1, etc. A perverse twist on the 
 31.1220 -	 * clustered apic ID.
 31.1221 -	 */
 31.1222 -	Dprintk("CPU present map: %lx\n", physids_coerce(phys_cpu_present_map));
 31.1223 -
 31.1224 -	kicked = 1;
 31.1225 -	for (bit = 0; kicked < NR_CPUS && bit < MAX_APICS; bit++) {
 31.1226 -		apicid = cpu_present_to_apicid(bit);
 31.1227 -		/*
 31.1228 -		 * Don't even attempt to start the boot CPU!
 31.1229 -		 */
 31.1230 -		if ((apicid == boot_cpu_apicid) || (apicid == BAD_APICID))
 31.1231 -			continue;
 31.1232 -
 31.1233 -		if (!check_apicid_present(bit))
 31.1234 -			continue;
 31.1235 -		if (max_cpus <= cpucount+1)
 31.1236 -			continue;
 31.1237 -
 31.1238 -		if (((cpu = alloc_cpu_id()) <= 0) || do_boot_cpu(apicid, cpu))
 31.1239 -			printk("CPU #%d not responding - cannot use it.\n",
 31.1240 -								apicid);
 31.1241 -		else
 31.1242 -			++kicked;
 31.1243 -	}
 31.1244 -
 31.1245 -	/*
 31.1246 -	 * Cleanup possible dangling ends...
 31.1247 -	 */
 31.1248 -	smpboot_restore_warm_reset_vector();
 31.1249 -
 31.1250 -	/*
 31.1251 -	 * Allow the user to impress friends.
 31.1252 -	 */
 31.1253 -	Dprintk("Before bogomips.\n");
 31.1254 -	for (cpu = 0; cpu < NR_CPUS; cpu++)
 31.1255 -		if (cpu_isset(cpu, cpu_callout_map))
 31.1256 -			bogosum += cpu_data[cpu].loops_per_jiffy;
 31.1257 -	printk(KERN_INFO
 31.1258 -		"Total of %d processors activated (%lu.%02lu BogoMIPS).\n",
 31.1259 -		cpucount+1,
 31.1260 -		bogosum/(500000/HZ),
 31.1261 -		(bogosum/(5000/HZ))%100);
 31.1262 -	
 31.1263 -	Dprintk("Before bogocount - setting activated=1.\n");
 31.1264 -
 31.1265 -	if (smp_b_stepping)
 31.1266 -		printk(KERN_WARNING "WARNING: SMP operation may be unreliable with B stepping processors.\n");
 31.1267 -
 31.1268 -	/*
 31.1269 -	 * Don't taint if we are running SMP kernel on a single non-MP
 31.1270 -	 * approved Athlon
 31.1271 -	 */
 31.1272 -	if (tainted & TAINT_UNSAFE_SMP) {
 31.1273 -		if (cpucount)
 31.1274 -			printk (KERN_INFO "WARNING: This combination of AMD processors is not suitable for SMP.\n");
 31.1275 -		else
 31.1276 -			tainted &= ~TAINT_UNSAFE_SMP;
 31.1277 -	}
 31.1278 -
 31.1279 -	Dprintk("Boot done.\n");
 31.1280 -
 31.1281 -	/*
 31.1282 -	 * construct cpu_sibling_map[], so that we can tell sibling CPUs
 31.1283 -	 * efficiently.
 31.1284 -	 */
 31.1285 -	for (cpu = 0; cpu < NR_CPUS; cpu++) {
 31.1286 -		cpus_clear(cpu_sibling_map[cpu]);
 31.1287 -		cpus_clear(cpu_core_map[cpu]);
 31.1288 -	}
 31.1289 -
 31.1290 -	cpu_set(0, cpu_sibling_map[0]);
 31.1291 -	cpu_set(0, cpu_core_map[0]);
 31.1292 -
 31.1293 -	smpboot_setup_io_apic();
 31.1294 -
 31.1295 -	setup_boot_APIC_clock();
 31.1296 -
 31.1297 -	/*
 31.1298 -	 * Synchronize the TSC with the AP
 31.1299 -	 */
 31.1300 -	if (cpu_has_tsc && cpucount && cpu_khz)
 31.1301 -		synchronize_tsc_bp();
 31.1302 -}
 31.1303 -
 31.1304 -/* These are wrappers to interface to the new boot process.  Someone
 31.1305 -   who understands all this stuff should rewrite it properly. --RR 15/Jul/02 */
 31.1306 -void __init smp_prepare_cpus(unsigned int max_cpus)
 31.1307 -{
 31.1308 -	smp_commenced_mask = cpumask_of_cpu(0);
 31.1309 -	cpu_callin_map = cpumask_of_cpu(0);
 31.1310 -	mb();
 31.1311 -	smp_boot_cpus(max_cpus);
 31.1312 -}
 31.1313 -
 31.1314 -void __devinit smp_prepare_boot_cpu(void)
 31.1315 -{
 31.1316 -	cpu_set(smp_processor_id(), cpu_online_map);
 31.1317 -	cpu_set(smp_processor_id(), cpu_callout_map);
 31.1318 -	cpu_set(smp_processor_id(), cpu_present_map);
 31.1319 -	cpu_set(smp_processor_id(), cpu_possible_map);
 31.1320 -	per_cpu(cpu_state, smp_processor_id()) = CPU_ONLINE;
 31.1321 -}
 31.1322 -
 31.1323 -#ifdef CONFIG_HOTPLUG_CPU
 31.1324 -static void
 31.1325 -remove_siblinginfo(int cpu)
 31.1326 -{
 31.1327 -	int sibling;
 31.1328 -	struct cpuinfo_x86 *c = cpu_data;
 31.1329 -
 31.1330 -	for_each_cpu_mask(sibling, cpu_core_map[cpu]) {
 31.1331 -		cpu_clear(cpu, cpu_core_map[sibling]);
 31.1332 -		/*
 31.1333 -		 * last thread sibling in this cpu core going down
 31.1334 -		 */
 31.1335 -		if (cpus_weight(cpu_sibling_map[cpu]) == 1)
 31.1336 -			c[sibling].booted_cores--;
 31.1337 -	}
 31.1338 -			
 31.1339 -	for_each_cpu_mask(sibling, cpu_sibling_map[cpu])
 31.1340 -		cpu_clear(cpu, cpu_sibling_map[sibling]);
 31.1341 -	cpus_clear(cpu_sibling_map[cpu]);
 31.1342 -	cpus_clear(cpu_core_map[cpu]);
 31.1343 -	phys_proc_id[cpu] = BAD_APICID;
 31.1344 -	cpu_core_id[cpu] = BAD_APICID;
 31.1345 -	cpu_clear(cpu, cpu_sibling_setup_map);
 31.1346 -}
 31.1347 -
 31.1348 -int __cpu_disable(void)
 31.1349 -{
 31.1350 -	cpumask_t map = cpu_online_map;
 31.1351 -	int cpu = smp_processor_id();
 31.1352 -
 31.1353 -	/*
 31.1354 -	 * Perhaps use cpufreq to drop frequency, but that could go
 31.1355 -	 * into generic code.
 31.1356 - 	 *
 31.1357 -	 * We won't take down the boot processor on i386 due to some
 31.1358 -	 * interrupts only being able to be serviced by the BSP.
 31.1359 -	 * Especially so if we're not using an IOAPIC	-zwane
 31.1360 -	 */
 31.1361 -	if (cpu == 0)
 31.1362 -		return -EBUSY;
 31.1363 -
 31.1364 -	clear_local_APIC();
 31.1365 -	/* Allow any queued timer interrupts to get serviced */
 31.1366 -	local_irq_enable();
 31.1367 -	mdelay(1);
 31.1368 -	local_irq_disable();
 31.1369 -
 31.1370 -	remove_siblinginfo(cpu);
 31.1371 -
 31.1372 -	cpu_clear(cpu, map);
 31.1373 -	fixup_irqs(map);
 31.1374 -	/* It's now safe to remove this processor from the online map */
 31.1375 -	cpu_clear(cpu, cpu_online_map);
 31.1376 -	return 0;
 31.1377 -}
 31.1378 -
 31.1379 -void __cpu_die(unsigned int cpu)
 31.1380 -{
 31.1381 -	/* We don't do anything here: idle task is faking death itself. */
 31.1382 -	unsigned int i;
 31.1383 -
 31.1384 -	for (i = 0; i < 10; i++) {
 31.1385 -		/* They ack this in play_dead by setting CPU_DEAD */
 31.1386 -		if (per_cpu(cpu_state, cpu) == CPU_DEAD) {
 31.1387 -			printk ("CPU %d is now offline\n", cpu);
 31.1388 -			if (1 == num_online_cpus())
 31.1389 -				alternatives_smp_switch(0);
 31.1390 -			return;
 31.1391 -		}
 31.1392 -		msleep(100);
 31.1393 -	}
 31.1394 - 	printk(KERN_ERR "CPU %u didn't die...\n", cpu);
 31.1395 -}
 31.1396 -#else /* ... !CONFIG_HOTPLUG_CPU */
 31.1397 -int __cpu_disable(void)
 31.1398 -{
 31.1399 -	return -ENOSYS;
 31.1400 -}
 31.1401 -
 31.1402 -void __cpu_die(unsigned int cpu)
 31.1403 -{
 31.1404 -	/* We said "no" in __cpu_disable */
 31.1405 -	BUG();
 31.1406 -}
 31.1407 -#endif /* CONFIG_HOTPLUG_CPU */
 31.1408 -
 31.1409 -int __devinit __cpu_up(unsigned int cpu)
 31.1410 -{
 31.1411 -#ifdef CONFIG_HOTPLUG_CPU
 31.1412 -	int ret=0;
 31.1413 -
 31.1414 -	/*
 31.1415 -	 * We do warm boot only on cpus that had booted earlier
 31.1416 -	 * Otherwise cold boot is all handled from smp_boot_cpus().
 31.1417 -	 * cpu_callin_map is set during AP kickstart process. Its reset
 31.1418 -	 * when a cpu is taken offline from cpu_exit_clear().
 31.1419 -	 */
 31.1420 -	if (!cpu_isset(cpu, cpu_callin_map))
 31.1421 -		ret = __smp_prepare_cpu(cpu);
 31.1422 -
 31.1423 -	if (ret)
 31.1424 -		return -EIO;
 31.1425 -#endif
 31.1426 -
 31.1427 -	/* In case one didn't come up */
 31.1428 -	if (!cpu_isset(cpu, cpu_callin_map)) {
 31.1429 -		printk(KERN_DEBUG "skipping cpu%d, didn't come online\n", cpu);
 31.1430 -		local_irq_enable();
 31.1431 -		return -EIO;
 31.1432 -	}
 31.1433 -
 31.1434 -	local_irq_enable();
 31.1435 -	per_cpu(cpu_state, cpu) = CPU_UP_PREPARE;
 31.1436 -	/* Unleash the CPU! */
 31.1437 -	cpu_set(cpu, smp_commenced_mask);
 31.1438 -	while (!cpu_isset(cpu, cpu_online_map))
 31.1439 -		mb();
 31.1440 -	return 0;
 31.1441 -}
 31.1442 -
 31.1443 -void __init smp_cpus_done(unsigned int max_cpus)
 31.1444 -{
 31.1445 -#ifdef CONFIG_X86_IO_APIC
 31.1446 -	setup_ioapic_dest();
 31.1447 -#endif
 31.1448 -	zap_low_mappings();
 31.1449 -#ifndef CONFIG_HOTPLUG_CPU
 31.1450 -	/*
 31.1451 -	 * Disable executability of the SMP trampoline:
 31.1452 -	 */
 31.1453 -	set_kernel_exec((unsigned long)trampoline_base, trampoline_exec);
 31.1454 -#endif
 31.1455 -}
 31.1456 -
 31.1457 -void __init smp_intr_init(void)
 31.1458 -{
 31.1459 -	/*
 31.1460 -	 * IRQ0 must be given a fixed assignment and initialized,
 31.1461 -	 * because it's used before the IO-APIC is set up.
 31.1462 -	 */
 31.1463 -	set_intr_gate(FIRST_DEVICE_VECTOR, interrupt[0]);
 31.1464 -
 31.1465 -	/*
 31.1466 -	 * The reschedule interrupt is a CPU-to-CPU reschedule-helper
 31.1467 -	 * IPI, driven by wakeup.
 31.1468 -	 */
 31.1469 -	set_intr_gate(RESCHEDULE_VECTOR, reschedule_interrupt);
 31.1470 -
 31.1471 -	/* IPI for invalidation */
 31.1472 -	set_intr_gate(INVALIDATE_TLB_VECTOR, invalidate_interrupt);
 31.1473 -
 31.1474 -	/* IPI for generic function call */
 31.1475 -	set_intr_gate(CALL_FUNCTION_VECTOR, call_function_interrupt);
 31.1476 -}
    32.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/sysenter.c	Fri Jan 12 15:32:03 2007 +0000
    32.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/sysenter.c	Wed Jan 17 18:41:22 2007 +0000
    32.3 @@ -2,6 +2,8 @@
    32.4   * linux/arch/i386/kernel/sysenter.c
    32.5   *
    32.6   * (C) Copyright 2002 Linus Torvalds
    32.7 + * Portions based on the vdso-randomization code from exec-shield:
    32.8 + * Copyright(C) 2005-2006, Red Hat, Inc., Ingo Molnar
    32.9   *
   32.10   * This file contains the needed initializations to support sysenter.
   32.11   */
   32.12 @@ -14,6 +16,7 @@
   32.13  #include <linux/string.h>
   32.14  #include <linux/elf.h>
   32.15  #include <linux/mm.h>
   32.16 +#include <linux/module.h>
   32.17  
   32.18  #include <asm/cpufeature.h>
   32.19  #include <asm/msr.h>
   32.20 @@ -24,6 +27,23 @@
   32.21  #include <xen/interface/callback.h>
   32.22  #endif
   32.23  
   32.24 +/*
   32.25 + * Should the kernel map a VDSO page into processes and pass its
   32.26 + * address down to glibc upon exec()?
   32.27 + */
   32.28 +unsigned int __read_mostly vdso_enabled = 1;
   32.29 +
   32.30 +EXPORT_SYMBOL_GPL(vdso_enabled);
   32.31 +
   32.32 +static int __init vdso_setup(char *s)
   32.33 +{
   32.34 +	vdso_enabled = simple_strtoul(s, NULL, 0);
   32.35 +
   32.36 +	return 1;
   32.37 +}
   32.38 +
   32.39 +__setup("vdso=", vdso_setup);
   32.40 +
   32.41  extern asmlinkage void sysenter_entry(void);
   32.42  
   32.43  void enable_sep_cpu(void)
   32.44 @@ -70,22 +90,32 @@ int __init sysenter_setup(void)
   32.45  	}
   32.46  #endif
   32.47  
   32.48 -	if (boot_cpu_has(X86_FEATURE_SEP)) {
   32.49 +#ifdef CONFIG_COMPAT_VDSO
   32.50 +	__set_fixmap(FIX_VDSO, __pa(syscall_page), PAGE_READONLY);
   32.51 +	printk("Compat vDSO mapped to %08lx.\n", __fix_to_virt(FIX_VDSO));
   32.52 +#else
   32.53 +	/*
   32.54 +	 * In the non-compat case the ELF coredumping code needs the fixmap:
   32.55 +	 */
   32.56 +	__set_fixmap(FIX_VDSO, __pa(syscall_page), PAGE_KERNEL_RO);
   32.57 +#endif
   32.58 +
   32.59 +	if (!boot_cpu_has(X86_FEATURE_SEP)) {
   32.60  		memcpy(syscall_page,
   32.61 -		       &vsyscall_sysenter_start,
   32.62 -		       &vsyscall_sysenter_end - &vsyscall_sysenter_start);
   32.63 +		       &vsyscall_int80_start,
   32.64 +		       &vsyscall_int80_end - &vsyscall_int80_start);
   32.65  		return 0;
   32.66  	}
   32.67  
   32.68  	memcpy(syscall_page,
   32.69 -	       &vsyscall_int80_start,
   32.70 -	       &vsyscall_int80_end - &vsyscall_int80_start);
   32.71 +	       &vsyscall_sysenter_start,
   32.72 +	       &vsyscall_sysenter_end - &vsyscall_sysenter_start);
   32.73  
   32.74  	return 0;
   32.75  }
   32.76  
   32.77 -static struct page*
   32.78 -syscall_nopage(struct vm_area_struct *vma, unsigned long adr, int *type)
   32.79 +static struct page *syscall_nopage(struct vm_area_struct *vma,
   32.80 +				unsigned long adr, int *type)
   32.81  {
   32.82  	struct page *p = virt_to_page(adr - vma->vm_start + syscall_page);
   32.83  	get_page(p);
   32.84 @@ -102,21 +132,32 @@ static struct vm_operations_struct sysca
   32.85  	.nopage = syscall_nopage,
   32.86  };
   32.87  
   32.88 +/* Defined in vsyscall-sysenter.S */
   32.89 +extern void SYSENTER_RETURN;
   32.90 +
   32.91  /* Setup a VMA at program startup for the vsyscall page */
   32.92  int arch_setup_additional_pages(struct linux_binprm *bprm, int exstack)
   32.93  {
   32.94  	struct vm_area_struct *vma;
   32.95  	struct mm_struct *mm = current->mm;
   32.96 +	unsigned long addr;
   32.97  	int ret;
   32.98  
   32.99 -	vma = kmem_cache_alloc(vm_area_cachep, SLAB_KERNEL);
  32.100 -	if (!vma)
  32.101 -		return -ENOMEM;
  32.102 +	down_write(&mm->mmap_sem);
  32.103 +	addr = get_unmapped_area(NULL, 0, PAGE_SIZE, 0, 0);
  32.104 +	if (IS_ERR_VALUE(addr)) {
  32.105 +		ret = addr;
  32.106 +		goto up_fail;
  32.107 +	}
  32.108  
  32.109 -	memset(vma, 0, sizeof(struct vm_area_struct));
  32.110 -	/* Could randomize here */
  32.111 -	vma->vm_start = VSYSCALL_BASE;
  32.112 -	vma->vm_end = VSYSCALL_BASE + PAGE_SIZE;
  32.113 +	vma = kmem_cache_zalloc(vm_area_cachep, SLAB_KERNEL);
  32.114 +	if (!vma) {
  32.115 +		ret = -ENOMEM;
  32.116 +		goto up_fail;
  32.117 +	}
  32.118 +
  32.119 +	vma->vm_start = addr;
  32.120 +	vma->vm_end = addr + PAGE_SIZE;
  32.121  	/* MAYWRITE to allow gdb to COW and set breakpoints */
  32.122  	vma->vm_flags = VM_READ|VM_EXEC|VM_MAYREAD|VM_MAYEXEC|VM_MAYWRITE;
  32.123  	vma->vm_flags |= mm->def_flags;
  32.124 @@ -124,15 +165,26 @@ int arch_setup_additional_pages(struct l
  32.125  	vma->vm_ops = &syscall_vm_ops;
  32.126  	vma->vm_mm = mm;
  32.127  
  32.128 -	down_write(&mm->mmap_sem);
  32.129 -	if ((ret = insert_vm_struct(mm, vma))) {
  32.130 -		up_write(&mm->mmap_sem);
  32.131 +	ret = insert_vm_struct(mm, vma);
  32.132 +	if (unlikely(ret)) {
  32.133  		kmem_cache_free(vm_area_cachep, vma);
  32.134 -		return ret;
  32.135 +		goto up_fail;
  32.136  	}
  32.137 +
  32.138 +	current->mm->context.vdso = (void *)addr;
  32.139 +	current_thread_info()->sysenter_return =
  32.140 +				    (void *)VDSO_SYM(&SYSENTER_RETURN);
  32.141  	mm->total_vm++;
  32.142 +up_fail:
  32.143  	up_write(&mm->mmap_sem);
  32.144 -	return 0;
  32.145 +	return ret;
  32.146 +}
  32.147 +
  32.148 +const char *arch_vma_name(struct vm_area_struct *vma)
  32.149 +{
  32.150 +	if (vma->vm_mm && vma->vm_start == (long)vma->vm_mm->context.vdso)
  32.151 +		return "[vdso]";
  32.152 +	return NULL;
  32.153  }
  32.154  
  32.155  struct vm_area_struct *get_gate_vma(struct task_struct *tsk)
    33.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/time-xen.c	Fri Jan 12 15:32:03 2007 +0000
    33.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/time-xen.c	Wed Jan 17 18:41:22 2007 +0000
    33.3 @@ -65,7 +65,6 @@
    33.4  #include "mach_time.h"
    33.5  
    33.6  #include <linux/timex.h>
    33.7 -#include <linux/config.h>
    33.8  
    33.9  #include <asm/hpet.h>
   33.10  
   33.11 @@ -97,17 +96,9 @@ extern unsigned long wall_jiffies;
   33.12  DEFINE_SPINLOCK(rtc_lock);
   33.13  EXPORT_SYMBOL(rtc_lock);
   33.14  
   33.15 -#if defined (__i386__)
   33.16 -#include <asm/i8253.h>
   33.17 -#endif
   33.18 -
   33.19 -DEFINE_SPINLOCK(i8253_lock);
   33.20 -EXPORT_SYMBOL(i8253_lock);
   33.21 -
   33.22  extern struct init_timer_opts timer_tsc_init;
   33.23  extern struct timer_opts timer_tsc;
   33.24  #define timer_none timer_tsc
   33.25 -struct timer_opts *cur_timer __read_mostly = &timer_tsc;
   33.26  
   33.27  /* These are peridically updated in shared_info, and then copied here. */
   33.28  struct shadow_time_info {
   33.29 @@ -166,8 +157,7 @@ static int __init __permitted_clock_jitt
   33.30  }
   33.31  __setup("permitted_clock_jitter=", __permitted_clock_jitter);
   33.32  
   33.33 -int tsc_disable __devinitdata = 0;
   33.34 -
   33.35 +#if 0
   33.36  static void delay_tsc(unsigned long loops)
   33.37  {
   33.38  	unsigned long bclock, now;
   33.39 @@ -183,6 +173,7 @@ struct timer_opts timer_tsc = {
   33.40  	.name = "tsc",
   33.41  	.delay = delay_tsc,
   33.42  };
   33.43 +#endif
   33.44  
   33.45  /*
   33.46   * Scale a 64-bit delta by scaling and multiplying by a 32-bit fraction,
   33.47 @@ -220,7 +211,7 @@ static inline u64 scale_delta(u64 delta,
   33.48  	return product;
   33.49  }
   33.50  
   33.51 -#if defined (__i386__)
   33.52 +#if 0 /* defined (__i386__) */
   33.53  int read_current_timer(unsigned long *timer_val)
   33.54  {
   33.55  	rdtscl(*timer_val);
   33.56 @@ -527,19 +518,19 @@ static void sync_xen_wallclock(unsigned 
   33.57  static int set_rtc_mmss(unsigned long nowtime)
   33.58  {
   33.59  	int retval;
   33.60 -
   33.61 -	WARN_ON(irqs_disabled());
   33.62 +	unsigned long flags;
   33.63  
   33.64  	if (independent_wallclock || !is_initial_xendomain())
   33.65  		return 0;
   33.66  
   33.67  	/* gets recalled with irq locally disabled */
   33.68 -	spin_lock_irq(&rtc_lock);
   33.69 +	/* XXX - does irqsave resolve this? -johnstul */
   33.70 +	spin_lock_irqsave(&rtc_lock, flags);
   33.71  	if (efi_enabled)
   33.72  		retval = efi_set_rtc_mmss(nowtime);
   33.73  	else
   33.74  		retval = mach_set_rtc_mmss(nowtime);
   33.75 -	spin_unlock_irq(&rtc_lock);
   33.76 +	spin_unlock_irqrestore(&rtc_lock, flags);
   33.77  
   33.78  	return retval;
   33.79  }
   33.80 @@ -570,10 +561,12 @@ unsigned long long monotonic_clock(void)
   33.81  }
   33.82  EXPORT_SYMBOL(monotonic_clock);
   33.83  
   33.84 +#ifdef __x86_64__
   33.85  unsigned long long sched_clock(void)
   33.86  {
   33.87  	return monotonic_clock();
   33.88  }
   33.89 +#endif
   33.90  
   33.91  #if defined(CONFIG_SMP) && defined(CONFIG_FRAME_POINTER)
   33.92  unsigned long profile_pc(struct pt_regs *regs)
   33.93 @@ -587,7 +580,7 @@ unsigned long profile_pc(struct pt_regs 
   33.94  	   is just accounted to the spinlock function.
   33.95  	   Better would be to write these functions in assembler again
   33.96  	   and check exactly. */
   33.97 -	if (in_lock_functions(pc)) {
   33.98 +	if (!user_mode_vm(regs) && in_lock_functions(pc)) {
   33.99  		char *v = *(char **)regs->rsp;
  33.100  		if ((v >= _stext && v <= _etext) ||
  33.101  			(v >= _sinittext && v <= _einittext) ||
  33.102 @@ -596,7 +589,7 @@ unsigned long profile_pc(struct pt_regs 
  33.103  		return ((unsigned long *)regs->rsp)[1];
  33.104  	}
  33.105  #else
  33.106 -	if (in_lock_functions(pc))
  33.107 +	if (!user_mode_vm(regs) && in_lock_functions(pc))
  33.108  		return *(unsigned long *)(regs->ebp + 4);
  33.109  #endif
  33.110  
  33.111 @@ -605,6 +598,11 @@ unsigned long profile_pc(struct pt_regs 
  33.112  EXPORT_SYMBOL(profile_pc);
  33.113  #endif
  33.114  
  33.115 +/*
  33.116 + * This is the same as the above, except we _also_ save the current
  33.117 + * Time Stamp Counter value at the time of the timer interrupt, so that
  33.118 + * we later on can estimate the time of day more exactly.
  33.119 + */
  33.120  irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
  33.121  {
  33.122  	s64 delta, delta_cpu, stolen, blocked;
  33.123 @@ -613,6 +611,13 @@ irqreturn_t timer_interrupt(int irq, voi
  33.124  	struct shadow_time_info *shadow = &per_cpu(shadow_time, cpu);
  33.125  	struct vcpu_runstate_info *runstate = &per_cpu(runstate, cpu);
  33.126  
  33.127 +	/*
  33.128 +	 * Here we are in the timer irq handler. We just have irqs locally
  33.129 +	 * disabled but we don't know if the timer_bh is running on the other
  33.130 +	 * CPU. We need to avoid to SMP race with it. NOTE: we don' t need
  33.131 +	 * the irq version of write_lock because as just said we have irq
  33.132 +	 * locally disabled. -arca
  33.133 +	 */
  33.134  	write_seqlock(&xtime_lock);
  33.135  
  33.136  	do {
  33.137 @@ -746,15 +751,16 @@ static void init_missing_ticks_accountin
  33.138  unsigned long get_cmos_time(void)
  33.139  {
  33.140  	unsigned long retval;
  33.141 +	unsigned long flags;
  33.142  
  33.143 -	spin_lock(&rtc_lock);
  33.144 +	spin_lock_irqsave(&rtc_lock, flags);
  33.145  
  33.146  	if (efi_enabled)
  33.147  		retval = efi_get_time();
  33.148  	else
  33.149  		retval = mach_get_cmos_time();
  33.150  
  33.151 -	spin_unlock(&rtc_lock);
  33.152 +	spin_unlock_irqrestore(&rtc_lock, flags);
  33.153  
  33.154  	return retval;
  33.155  }
  33.156 @@ -812,7 +818,6 @@ void notify_arch_cmos_timer(void)
  33.157  
  33.158  static long clock_cmos_diff, sleep_start;
  33.159  
  33.160 -static struct timer_opts *last_timer;
  33.161  static int timer_suspend(struct sys_device *dev, pm_message_t state)
  33.162  {
  33.163  	/*
  33.164 @@ -821,10 +826,6 @@ static int timer_suspend(struct sys_devi
  33.165  	clock_cmos_diff = -get_cmos_time();
  33.166  	clock_cmos_diff += get_seconds();
  33.167  	sleep_start = get_cmos_time();
  33.168 -	last_timer = cur_timer;
  33.169 -	cur_timer = &timer_none;
  33.170 -	if (last_timer->suspend)
  33.171 -		last_timer->suspend(state);
  33.172  	return 0;
  33.173  }
  33.174  
  33.175 @@ -846,10 +847,6 @@ static int timer_resume(struct sys_devic
  33.176  	jiffies_64 += sleep_length;
  33.177  	wall_jiffies += sleep_length;
  33.178  	write_sequnlock_irqrestore(&xtime_lock, flags);
  33.179 -	if (last_timer->resume)
  33.180 -		last_timer->resume();
  33.181 -	cur_timer = last_timer;
  33.182 -	last_timer = NULL;
  33.183  	touch_softlockup_watchdog();
  33.184  	return 0;
  33.185  }
  33.186 @@ -891,9 +888,6 @@ static void __init hpet_time_init(void)
  33.187  		printk("Using HPET for base-timer\n");
  33.188  	}
  33.189  
  33.190 -	cur_timer = select_timer();
  33.191 -	printk(KERN_INFO "Using %s for high-res timesource\n",cur_timer->name);
  33.192 -
  33.193  	time_init_hook();
  33.194  }
  33.195  #endif
  33.196 @@ -1014,14 +1008,14 @@ static void start_hz_timer(void)
  33.197  	cpu_clear(smp_processor_id(), nohz_cpu_mask);
  33.198  }
  33.199  
  33.200 -void safe_halt(void)
  33.201 +void raw_safe_halt(void)
  33.202  {
  33.203  	stop_hz_timer();
  33.204  	/* Blocking includes an implicit local_irq_enable(). */
  33.205  	HYPERVISOR_block();
  33.206  	start_hz_timer();
  33.207  }
  33.208 -EXPORT_SYMBOL(safe_halt);
  33.209 +EXPORT_SYMBOL(raw_safe_halt);
  33.210  
  33.211  void halt(void)
  33.212  {
    34.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/traps-xen.c	Fri Jan 12 15:32:03 2007 +0000
    34.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/traps-xen.c	Wed Jan 17 18:41:22 2007 +0000
    34.3 @@ -11,7 +11,6 @@
    34.4   * 'Traps.c' handles hardware traps and faults after we have saved some
    34.5   * state in 'asm.s'.
    34.6   */
    34.7 -#include <linux/config.h>
    34.8  #include <linux/sched.h>
    34.9  #include <linux/kernel.h>
   34.10  #include <linux/string.h>
   34.11 @@ -28,6 +27,7 @@
   34.12  #include <linux/utsname.h>
   34.13  #include <linux/kprobes.h>
   34.14  #include <linux/kexec.h>
   34.15 +#include <linux/unwind.h>
   34.16  
   34.17  #ifdef CONFIG_EISA
   34.18  #include <linux/ioport.h>
   34.19 @@ -47,7 +47,7 @@
   34.20  #include <asm/desc.h>
   34.21  #include <asm/i387.h>
   34.22  #include <asm/nmi.h>
   34.23 -
   34.24 +#include <asm/unwind.h>
   34.25  #include <asm/smp.h>
   34.26  #include <asm/arch_hooks.h>
   34.27  #include <asm/kdebug.h>
   34.28 @@ -98,6 +98,11 @@ asmlinkage void fixup_4gb_segment(void);
   34.29  asmlinkage void machine_check(void);
   34.30  
   34.31  static int kstack_depth_to_print = 24;
   34.32 +#ifdef CONFIG_STACK_UNWIND
   34.33 +static int call_trace = 1;
   34.34 +#else
   34.35 +#define call_trace (-1)
   34.36 +#endif
   34.37  ATOMIC_NOTIFIER_HEAD(i386die_chain);
   34.38  
   34.39  int register_die_notifier(struct notifier_block *nb)
   34.40 @@ -105,13 +110,13 @@ int register_die_notifier(struct notifie
   34.41  	vmalloc_sync_all();
   34.42  	return atomic_notifier_chain_register(&i386die_chain, nb);
   34.43  }
   34.44 -EXPORT_SYMBOL(register_die_notifier);
   34.45 +EXPORT_SYMBOL(register_die_notifier); /* used modular by kdb */
   34.46  
   34.47  int unregister_die_notifier(struct notifier_block *nb)
   34.48  {
   34.49  	return atomic_notifier_chain_unregister(&i386die_chain, nb);
   34.50  }
   34.51 -EXPORT_SYMBOL(unregister_die_notifier);
   34.52 +EXPORT_SYMBOL(unregister_die_notifier); /* used modular by kdb */
   34.53  
   34.54  static inline int valid_stack_ptr(struct thread_info *tinfo, void *p)
   34.55  {
   34.56 @@ -120,28 +125,13 @@ static inline int valid_stack_ptr(struct
   34.57  }
   34.58  
   34.59  /*
   34.60 - * Print CONFIG_STACK_BACKTRACE_COLS address/symbol entries per line.
   34.61 + * Print one address/symbol entries per line.
   34.62   */
   34.63 -static inline int print_addr_and_symbol(unsigned long addr, char *log_lvl,
   34.64 -					int printed)
   34.65 +static inline void print_addr_and_symbol(unsigned long addr, char *log_lvl)
   34.66  {
   34.67 -	if (!printed)
   34.68 -		printk(log_lvl);
   34.69 -
   34.70 -#if CONFIG_STACK_BACKTRACE_COLS == 1
   34.71  	printk(" [<%08lx>] ", addr);
   34.72 -#else
   34.73 -	printk(" <%08lx> ", addr);
   34.74 -#endif
   34.75 -	print_symbol("%s", addr);
   34.76  
   34.77 -	printed = (printed + 1) % CONFIG_STACK_BACKTRACE_COLS;
   34.78 -	if (printed)
   34.79 -		printk(" ");
   34.80 -	else
   34.81 -		printk("\n");
   34.82 -
   34.83 -	return printed;
   34.84 +	print_symbol("%s\n", addr);
   34.85  }
   34.86  
   34.87  static inline unsigned long print_context_stack(struct thread_info *tinfo,
   34.88 @@ -149,28 +139,44 @@ static inline unsigned long print_contex
   34.89  				char *log_lvl)
   34.90  {
   34.91  	unsigned long addr;
   34.92 -	int printed = 0; /* nr of entries already printed on current line */
   34.93  
   34.94  #ifdef	CONFIG_FRAME_POINTER
   34.95  	while (valid_stack_ptr(tinfo, (void *)ebp)) {
   34.96  		addr = *(unsigned long *)(ebp + 4);
   34.97 -		printed = print_addr_and_symbol(addr, log_lvl, printed);
   34.98 +		print_addr_and_symbol(addr, log_lvl);
   34.99 +		/*
  34.100 +		 * break out of recursive entries (such as
  34.101 +		 * end_of_stack_stop_unwind_function):
  34.102 +	 	 */
  34.103 +		if (ebp == *(unsigned long *)ebp)
  34.104 +			break;
  34.105  		ebp = *(unsigned long *)ebp;
  34.106  	}
  34.107  #else
  34.108  	while (valid_stack_ptr(tinfo, stack)) {
  34.109  		addr = *stack++;
  34.110  		if (__kernel_text_address(addr))
  34.111 -			printed = print_addr_and_symbol(addr, log_lvl, printed);
  34.112 +			print_addr_and_symbol(addr, log_lvl);
  34.113  	}
  34.114  #endif
  34.115 -	if (printed)
  34.116 -		printk("\n");
  34.117 -
  34.118  	return ebp;
  34.119  }
  34.120  
  34.121 -static void show_trace_log_lvl(struct task_struct *task,
  34.122 +static asmlinkage int
  34.123 +show_trace_unwind(struct unwind_frame_info *info, void *log_lvl)
  34.124 +{
  34.125 +	int n = 0;
  34.126 +
  34.127 +	while (unwind(info) == 0 && UNW_PC(info)) {
  34.128 +		n++;
  34.129 +		print_addr_and_symbol(UNW_PC(info), log_lvl);
  34.130 +		if (arch_unw_user_mode(info))
  34.131 +			break;
  34.132 +	}
  34.133 +	return n;
  34.134 +}
  34.135 +
  34.136 +static void show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs,
  34.137  			       unsigned long *stack, char *log_lvl)
  34.138  {
  34.139  	unsigned long ebp;
  34.140 @@ -178,6 +184,36 @@ static void show_trace_log_lvl(struct ta
  34.141  	if (!task)
  34.142  		task = current;
  34.143  
  34.144 +	if (call_trace >= 0) {
  34.145 +		int unw_ret = 0;
  34.146 +		struct unwind_frame_info info;
  34.147 +
  34.148 +		if (regs) {
  34.149 +			if (unwind_init_frame_info(&info, task, regs) == 0)
  34.150 +				unw_ret = show_trace_unwind(&info, log_lvl);
  34.151 +		} else if (task == current)
  34.152 +			unw_ret = unwind_init_running(&info, show_trace_unwind, log_lvl);
  34.153 +		else {
  34.154 +			if (unwind_init_blocked(&info, task) == 0)
  34.155 +				unw_ret = show_trace_unwind(&info, log_lvl);
  34.156 +		}
  34.157 +		if (unw_ret > 0) {
  34.158 +			if (call_trace == 1 && !arch_unw_user_mode(&info)) {
  34.159 +				print_symbol("DWARF2 unwinder stuck at %s\n",
  34.160 +					     UNW_PC(&info));
  34.161 +				if (UNW_SP(&info) >= PAGE_OFFSET) {
  34.162 +					printk("Leftover inexact backtrace:\n");
  34.163 +					stack = (void *)UNW_SP(&info);
  34.164 +				} else
  34.165 +					printk("Full inexact backtrace again:\n");
  34.166 +			} else if (call_trace >= 1)
  34.167 +				return;
  34.168 +			else
  34.169 +				printk("Full inexact backtrace again:\n");
  34.170 +		} else
  34.171 +			printk("Inexact backtrace:\n");
  34.172 +	}
  34.173 +
  34.174  	if (task == current) {
  34.175  		/* Grab ebp right from our regs */
  34.176  		asm ("movl %%ebp, %0" : "=r" (ebp) : );
  34.177 @@ -198,13 +234,13 @@ static void show_trace_log_lvl(struct ta
  34.178  	}
  34.179  }
  34.180  
  34.181 -void show_trace(struct task_struct *task, unsigned long * stack)
  34.182 +void show_trace(struct task_struct *task, struct pt_regs *regs, unsigned long * stack)
  34.183  {
  34.184 -	show_trace_log_lvl(task, stack, "");
  34.185 +	show_trace_log_lvl(task, regs, stack, "");
  34.186  }
  34.187  
  34.188 -static void show_stack_log_lvl(struct task_struct *task, unsigned long *esp,
  34.189 -			       char *log_lvl)
  34.190 +static void show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs,
  34.191 +			       unsigned long *esp, char *log_lvl)
  34.192  {
  34.193  	unsigned long *stack;
  34.194  	int i;
  34.195 @@ -225,13 +261,13 @@ static void show_stack_log_lvl(struct ta
  34.196  		printk("%08lx ", *stack++);
  34.197  	}
  34.198  	printk("\n%sCall Trace:\n", log_lvl);
  34.199 -	show_trace_log_lvl(task, esp, log_lvl);
  34.200 +	show_trace_log_lvl(task, regs, esp, log_lvl);
  34.201  }
  34.202  
  34.203  void show_stack(struct task_struct *task, unsigned long *esp)
  34.204  {
  34.205  	printk("       ");
  34.206 -	show_stack_log_lvl(task, esp, "");
  34.207 +	show_stack_log_lvl(task, NULL, esp, "");
  34.208  }
  34.209  
  34.210  /*
  34.211 @@ -241,7 +277,7 @@ void dump_stack(void)
  34.212  {
  34.213  	unsigned long stack;
  34.214  
  34.215 -	show_trace(current, &stack);
  34.216 +	show_trace(current, NULL, &stack);
  34.217  }
  34.218  
  34.219  EXPORT_SYMBOL(dump_stack);
  34.220 @@ -274,8 +310,9 @@ void show_registers(struct pt_regs *regs
  34.221  		regs->esi, regs->edi, regs->ebp, esp);
  34.222  	printk(KERN_EMERG "ds: %04x   es: %04x   ss: %04x\n",
  34.223  		regs->xds & 0xffff, regs->xes & 0xffff, ss);
  34.224 -	printk(KERN_EMERG "Process %s (pid: %d, threadinfo=%p task=%p)",
  34.225 -		current->comm, current->pid, current_thread_info(), current);
  34.226 +	printk(KERN_EMERG "Process %.*s (pid: %d, ti=%p task=%p task.ti=%p)",
  34.227 +		TASK_COMM_LEN, current->comm, current->pid,
  34.228 +		current_thread_info(), current, current->thread_info);
  34.229  	/*
  34.230  	 * When in-kernel, we also print out the stack and code at the
  34.231  	 * time of the fault..
  34.232 @@ -284,7 +321,7 @@ void show_registers(struct pt_regs *regs
  34.233  		u8 __user *eip;
  34.234  
  34.235  		printk("\n" KERN_EMERG "Stack: ");
  34.236 -		show_stack_log_lvl(NULL, (unsigned long *)esp, KERN_EMERG);
  34.237 +		show_stack_log_lvl(NULL, regs, (unsigned long *)esp, KERN_EMERG);
  34.238  
  34.239  		printk(KERN_EMERG "Code: ");
  34.240  
  34.241 @@ -307,35 +344,35 @@ void show_registers(struct pt_regs *regs
  34.242  
  34.243  static void handle_BUG(struct pt_regs *regs)
  34.244  {
  34.245 +	unsigned long eip = regs->eip;
  34.246  	unsigned short ud2;
  34.247 -	unsigned short line;
  34.248 -	char *file;
  34.249 -	char c;
  34.250 -	unsigned long eip;
  34.251 -
  34.252 -	eip = regs->eip;
  34.253  
  34.254  	if (eip < PAGE_OFFSET)
  34.255 -		goto no_bug;
  34.256 +		return;
  34.257  	if (__get_user(ud2, (unsigned short __user *)eip))
  34.258 -		goto no_bug;
  34.259 +		return;
  34.260  	if (ud2 != 0x0b0f)
  34.261 -		goto no_bug;
  34.262 -	if (__get_user(line, (unsigned short __user *)(eip + 2)))
  34.263 -		goto bug;
  34.264 -	if (__get_user(file, (char * __user *)(eip + 4)) ||
  34.265 -		(unsigned long)file < PAGE_OFFSET || __get_user(c, file))
  34.266 -		file = "<bad filename>";
  34.267 +		return;
  34.268  
  34.269  	printk(KERN_EMERG "------------[ cut here ]------------\n");
  34.270 -	printk(KERN_EMERG "kernel BUG at %s:%d!\n", file, line);
  34.271 +
  34.272 +#ifdef CONFIG_DEBUG_BUGVERBOSE
  34.273 +	do {
  34.274 +		unsigned short line;
  34.275 +		char *file;
  34.276 +		char c;
  34.277  
  34.278 -no_bug:
  34.279 -	return;
  34.280 +		if (__get_user(line, (unsigned short __user *)(eip + 2)))
  34.281 +			break;
  34.282 +		if (__get_user(file, (char * __user *)(eip + 4)) ||
  34.283 +		    (unsigned long)file < PAGE_OFFSET || __get_user(c, file))
  34.284 +			file = "<bad filename>";
  34.285  
  34.286 -	/* Here we know it was a BUG but file-n-line is unavailable */
  34.287 -bug:
  34.288 -	printk(KERN_EMERG "Kernel BUG\n");
  34.289 +		printk(KERN_EMERG "kernel BUG at %s:%d!\n", file, line);
  34.290 +		return;
  34.291 +	} while (0);
  34.292 +#endif
  34.293 +	printk(KERN_EMERG "Kernel BUG at [verbose debug info unavailable]\n");
  34.294  }
  34.295  
  34.296  /* This is gone through when something in the kernel
  34.297 @@ -425,11 +462,9 @@ void die(const char * str, struct pt_reg
  34.298  	if (in_interrupt())
  34.299  		panic("Fatal exception in interrupt");
  34.300  
  34.301 -	if (panic_on_oops) {
  34.302 -		printk(KERN_EMERG "Fatal exception: panic in 5 seconds\n");
  34.303 -		ssleep(5);
  34.304 +	if (panic_on_oops)
  34.305  		panic("Fatal exception");
  34.306 -	}
  34.307 +
  34.308  	oops_exit();
  34.309  	do_exit(SIGSEGV);
  34.310  }
  34.311 @@ -1133,3 +1168,19 @@ static int __init kstack_setup(char *s)
  34.312  	return 1;
  34.313  }
  34.314  __setup("kstack=", kstack_setup);
  34.315 +
  34.316 +#ifdef CONFIG_STACK_UNWIND
  34.317 +static int __init call_trace_setup(char *s)
  34.318 +{
  34.319 +	if (strcmp(s, "old") == 0)
  34.320 +		call_trace = -1;
  34.321 +	else if (strcmp(s, "both") == 0)
  34.322 +		call_trace = 0;
  34.323 +	else if (strcmp(s, "newfallback") == 0)
  34.324 +		call_trace = 1;
  34.325 +	else if (strcmp(s, "new") == 2)
  34.326 +		call_trace = 2;
  34.327 +	return 1;
  34.328 +}
  34.329 +__setup("call_trace=", call_trace_setup);
  34.330 +#endif
    35.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/traps.c	Fri Jan 12 15:32:03 2007 +0000
    35.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    35.3 @@ -1,1203 +0,0 @@
    35.4 -/*
    35.5 - *  linux/arch/i386/traps.c
    35.6 - *
    35.7 - *  Copyright (C) 1991, 1992  Linus Torvalds
    35.8 - *
    35.9 - *  Pentium III FXSR, SSE support
   35.10 - *	Gareth Hughes <gareth@valinux.com>, May 2000
   35.11 - */
   35.12 -
   35.13 -/*
   35.14 - * 'Traps.c' handles hardware traps and faults after we have saved some
   35.15 - * state in 'asm.s'.
   35.16 - */
   35.17 -#include <linux/config.h>
   35.18 -#include <linux/sched.h>
   35.19 -#include <linux/kernel.h>
   35.20 -#include <linux/string.h>
   35.21 -#include <linux/errno.h>
   35.22 -#include <linux/timer.h>
   35.23 -#include <linux/mm.h>
   35.24 -#include <linux/init.h>
   35.25 -#include <linux/delay.h>
   35.26 -#include <linux/spinlock.h>
   35.27 -#include <linux/interrupt.h>
   35.28 -#include <linux/highmem.h>
   35.29 -#include <linux/kallsyms.h>
   35.30 -#include <linux/ptrace.h>
   35.31 -#include <linux/utsname.h>
   35.32 -#include <linux/kprobes.h>
   35.33 -#include <linux/kexec.h>
   35.34 -
   35.35 -#ifdef CONFIG_EISA
   35.36 -#include <linux/ioport.h>
   35.37 -#include <linux/eisa.h>
   35.38 -#endif
   35.39 -
   35.40 -#ifdef CONFIG_MCA
   35.41 -#include <linux/mca.h>
   35.42 -#endif
   35.43 -
   35.44 -#include <asm/processor.h>
   35.45 -#include <asm/system.h>
   35.46 -#include <asm/uaccess.h>
   35.47 -#include <asm/io.h>
   35.48 -#include <asm/atomic.h>
   35.49 -#include <asm/debugreg.h>
   35.50 -#include <asm/desc.h>
   35.51 -#include <asm/i387.h>
   35.52 -#include <asm/nmi.h>
   35.53 -
   35.54 -#include <asm/smp.h>
   35.55 -#include <asm/arch_hooks.h>
   35.56 -#include <asm/kdebug.h>
   35.57 -
   35.58 -#include <linux/module.h>
   35.59 -
   35.60 -#include "mach_traps.h"
   35.61 -
   35.62 -asmlinkage int system_call(void);
   35.63 -
   35.64 -struct desc_struct default_ldt[] = { { 0, 0 }, { 0, 0 }, { 0, 0 },
   35.65 -		{ 0, 0 }, { 0, 0 } };
   35.66 -
   35.67 -/* Do we ignore FPU interrupts ? */
   35.68 -char ignore_fpu_irq = 0;
   35.69 -
   35.70 -/*
   35.71 - * The IDT has to be page-aligned to simplify the Pentium
   35.72 - * F0 0F bug workaround.. We have a special link segment
   35.73 - * for this.
   35.74 - */
   35.75 -struct desc_struct idt_table[256] __attribute__((__section__(".data.idt"))) = { {0, 0}, };
   35.76 -
   35.77 -asmlinkage void divide_error(void);
   35.78 -asmlinkage void debug(void);
   35.79 -asmlinkage void nmi(void);
   35.80 -asmlinkage void int3(void);
   35.81 -asmlinkage void overflow(void);
   35.82 -asmlinkage void bounds(void);
   35.83 -asmlinkage void invalid_op(void);
   35.84 -asmlinkage void device_not_available(void);
   35.85 -asmlinkage void coprocessor_segment_overrun(void);
   35.86 -asmlinkage void invalid_TSS(void);
   35.87 -asmlinkage void segment_not_present(void);
   35.88 -asmlinkage void stack_segment(void);
   35.89 -asmlinkage void general_protection(void);
   35.90 -asmlinkage void page_fault(void);
   35.91 -asmlinkage void coprocessor_error(void);
   35.92 -asmlinkage void simd_coprocessor_error(void);
   35.93 -asmlinkage void alignment_check(void);
   35.94 -asmlinkage void spurious_interrupt_bug(void);
   35.95 -asmlinkage void machine_check(void);
   35.96 -
   35.97 -static int kstack_depth_to_print = 24;
   35.98 -ATOMIC_NOTIFIER_HEAD(i386die_chain);
   35.99 -
  35.100 -int register_die_notifier(struct notifier_block *nb)
  35.101 -{
  35.102 -	vmalloc_sync_all();
  35.103 -	return atomic_notifier_chain_register(&i386die_chain, nb);
  35.104 -}
  35.105 -EXPORT_SYMBOL(register_die_notifier);
  35.106 -
  35.107 -int unregister_die_notifier(struct notifier_block *nb)
  35.108 -{
  35.109 -	return atomic_notifier_chain_unregister(&i386die_chain, nb);
  35.110 -}
  35.111 -EXPORT_SYMBOL(unregister_die_notifier);
  35.112 -
  35.113 -static inline int valid_stack_ptr(struct thread_info *tinfo, void *p)
  35.114 -{
  35.115 -	return	p > (void *)tinfo &&
  35.116 -		p < (void *)tinfo + THREAD_SIZE - 3;
  35.117 -}
  35.118 -
  35.119 -/*
  35.120 - * Print CONFIG_STACK_BACKTRACE_COLS address/symbol entries per line.
  35.121 - */
  35.122 -static inline int print_addr_and_symbol(unsigned long addr, char *log_lvl,
  35.123 -					int printed)
  35.124 -{
  35.125 -	if (!printed)
  35.126 -		printk(log_lvl);
  35.127 -
  35.128 -#if CONFIG_STACK_BACKTRACE_COLS == 1
  35.129 -	printk(" [<%08lx>] ", addr);
  35.130 -#else
  35.131 -	printk(" <%08lx> ", addr);
  35.132 -#endif
  35.133 -	print_symbol("%s", addr);
  35.134 -
  35.135 -	printed = (printed + 1) % CONFIG_STACK_BACKTRACE_COLS;
  35.136 -	if (printed)
  35.137 -		printk(" ");
  35.138 -	else
  35.139 -		printk("\n");
  35.140 -
  35.141 -	return printed;
  35.142 -}
  35.143 -
  35.144 -static inline unsigned long print_context_stack(struct thread_info *tinfo,
  35.145 -				unsigned long *stack, unsigned long ebp,
  35.146 -				char *log_lvl)
  35.147 -{
  35.148 -	unsigned long addr;
  35.149 -	int printed = 0; /* nr of entries already printed on current line */
  35.150 -
  35.151 -#ifdef	CONFIG_FRAME_POINTER
  35.152 -	while (valid_stack_ptr(tinfo, (void *)ebp)) {
  35.153 -		addr = *(unsigned long *)(ebp + 4);
  35.154 -		printed = print_addr_and_symbol(addr, log_lvl, printed);
  35.155 -		ebp = *(unsigned long *)ebp;
  35.156 -	}
  35.157 -#else
  35.158 -	while (valid_stack_ptr(tinfo, stack)) {
  35.159 -		addr = *stack++;
  35.160 -		if (__kernel_text_address(addr))
  35.161 -			printed = print_addr_and_symbol(addr, log_lvl, printed);
  35.162 -	}
  35.163 -#endif
  35.164 -	if (printed)
  35.165 -		printk("\n");
  35.166 -
  35.167 -	return ebp;
  35.168 -}
  35.169 -
  35.170 -static void show_trace_log_lvl(struct task_struct *task,
  35.171 -			       unsigned long *stack, char *log_lvl)
  35.172 -{
  35.173 -	unsigned long ebp;
  35.174 -
  35.175 -	if (!task)
  35.176 -		task = current;
  35.177 -
  35.178 -	if (task == current) {
  35.179 -		/* Grab ebp right from our regs */
  35.180 -		asm ("movl %%ebp, %0" : "=r" (ebp) : );
  35.181 -	} else {
  35.182 -		/* ebp is the last reg pushed by switch_to */
  35.183 -		ebp = *(unsigned long *) task->thread.esp;
  35.184 -	}
  35.185 -
  35.186 -	while (1) {
  35.187 -		struct thread_info *context;
  35.188 -		context = (struct thread_info *)
  35.189 -			((unsigned long)stack & (~(THREAD_SIZE - 1)));
  35.190 -		ebp = print_context_stack(context, stack, ebp, log_lvl);
  35.191 -		stack = (unsigned long*)context->previous_esp;
  35.192 -		if (!stack)
  35.193 -			break;
  35.194 -		printk("%s =======================\n", log_lvl);
  35.195 -	}
  35.196 -}
  35.197 -
  35.198 -void show_trace(struct task_struct *task, unsigned long * stack)
  35.199 -{
  35.200 -	show_trace_log_lvl(task, stack, "");
  35.201 -}
  35.202 -
  35.203 -static void show_stack_log_lvl(struct task_struct *task, unsigned long *esp,
  35.204 -			       char *log_lvl)
  35.205 -{
  35.206 -	unsigned long *stack;
  35.207 -	int i;
  35.208 -
  35.209 -	if (esp == NULL) {
  35.210 -		if (task)
  35.211 -			esp = (unsigned long*)task->thread.esp;
  35.212 -		else
  35.213 -			esp = (unsigned long *)&esp;
  35.214 -	}
  35.215 -
  35.216 -	stack = esp;
  35.217 -	for(i = 0; i < kstack_depth_to_print; i++) {
  35.218 -		if (kstack_end(stack))
  35.219 -			break;
  35.220 -		if (i && ((i % 8) == 0))
  35.221 -			printk("\n%s       ", log_lvl);
  35.222 -		printk("%08lx ", *stack++);
  35.223 -	}
  35.224 -	printk("\n%sCall Trace:\n", log_lvl);
  35.225 -	show_trace_log_lvl(task, esp, log_lvl);
  35.226 -}
  35.227 -
  35.228 -void show_stack(struct task_struct *task, unsigned long *esp)
  35.229 -{
  35.230 -	printk("       ");
  35.231 -	show_stack_log_lvl(task, esp, "");
  35.232 -}
  35.233 -
  35.234 -/*
  35.235 - * The architecture-independent dump_stack generator
  35.236 - */
  35.237 -void dump_stack(void)
  35.238 -{
  35.239 -	unsigned long stack;
  35.240 -
  35.241 -	show_trace(current, &stack);
  35.242 -}
  35.243 -
  35.244 -EXPORT_SYMBOL(dump_stack);
  35.245 -
  35.246 -void show_registers(struct pt_regs *regs)
  35.247 -{
  35.248 -	int i;
  35.249 -	int in_kernel = 1;
  35.250 -	unsigned long esp;
  35.251 -	unsigned short ss;
  35.252 -
  35.253 -	esp = (unsigned long) (&regs->esp);
  35.254 -	savesegment(ss, ss);
  35.255 -	if (user_mode_vm(regs)) {
  35.256 -		in_kernel = 0;
  35.257 -		esp = regs->esp;
  35.258 -		ss = regs->xss & 0xffff;
  35.259 -	}
  35.260 -	print_modules();
  35.261 -	printk(KERN_EMERG "CPU:    %d\nEIP:    %04x:[<%08lx>]    %s VLI\n"
  35.262 -			"EFLAGS: %08lx   (%s %.*s) \n",
  35.263 -		smp_processor_id(), 0xffff & regs->xcs, regs->eip,
  35.264 -		print_tainted(), regs->eflags, system_utsname.release,
  35.265 -		(int)strcspn(system_utsname.version, " "),
  35.266 -		system_utsname.version);
  35.267 -	print_symbol(KERN_EMERG "EIP is at %s\n", regs->eip);
  35.268 -	printk(KERN_EMERG "eax: %08lx   ebx: %08lx   ecx: %08lx   edx: %08lx\n",
  35.269 -		regs->eax, regs->ebx, regs->ecx, regs->edx);
  35.270 -	printk(KERN_EMERG "esi: %08lx   edi: %08lx   ebp: %08lx   esp: %08lx\n",
  35.271 -		regs->esi, regs->edi, regs->ebp, esp);
  35.272 -	printk(KERN_EMERG "ds: %04x   es: %04x   ss: %04x\n",
  35.273 -		regs->xds & 0xffff, regs->xes & 0xffff, ss);
  35.274 -	printk(KERN_EMERG "Process %s (pid: %d, threadinfo=%p task=%p)",
  35.275 -		current->comm, current->pid, current_thread_info(), current);
  35.276 -	/*
  35.277 -	 * When in-kernel, we also print out the stack and code at the
  35.278 -	 * time of the fault..
  35.279 -	 */
  35.280 -	if (in_kernel) {
  35.281 -		u8 __user *eip;
  35.282 -
  35.283 -		printk("\n" KERN_EMERG "Stack: ");
  35.284 -		show_stack_log_lvl(NULL, (unsigned long *)esp, KERN_EMERG);
  35.285 -
  35.286 -		printk(KERN_EMERG "Code: ");
  35.287 -
  35.288 -		eip = (u8 __user *)regs->eip - 43;
  35.289 -		for (i = 0; i < 64; i++, eip++) {
  35.290 -			unsigned char c;
  35.291 -
  35.292 -			if (eip < (u8 __user *)PAGE_OFFSET || __get_user(c, eip)) {
  35.293 -				printk(" Bad EIP value.");
  35.294 -				break;
  35.295 -			}
  35.296 -			if (eip == (u8 __user *)regs->eip)
  35.297 -				printk("<%02x> ", c);
  35.298 -			else
  35.299 -				printk("%02x ", c);
  35.300 -		}
  35.301 -	}
  35.302 -	printk("\n");
  35.303 -}	
  35.304 -
  35.305 -static void handle_BUG(struct pt_regs *regs)
  35.306 -{
  35.307 -	unsigned short ud2;
  35.308 -	unsigned short line;
  35.309 -	char *file;
  35.310 -	char c;
  35.311 -	unsigned long eip;
  35.312 -
  35.313 -	eip = regs->eip;
  35.314 -
  35.315 -	if (eip < PAGE_OFFSET)
  35.316 -		goto no_bug;
  35.317 -	if (__get_user(ud2, (unsigned short __user *)eip))
  35.318 -		goto no_bug;
  35.319 -	if (ud2 != 0x0b0f)
  35.320 -		goto no_bug;
  35.321 -	if (__get_user(line, (unsigned short __user *)(eip + 2)))
  35.322 -		goto bug;
  35.323 -	if (__get_user(file, (char * __user *)(eip + 4)) ||
  35.324 -		(unsigned long)file < PAGE_OFFSET || __get_user(c, file))
  35.325 -		file = "<bad filename>";
  35.326 -
  35.327 -	printk(KERN_EMERG "------------[ cut here ]------------\n");
  35.328 -	printk(KERN_EMERG "kernel BUG at %s:%d!\n", file, line);
  35.329 -
  35.330 -no_bug:
  35.331 -	return;
  35.332 -
  35.333 -	/* Here we know it was a BUG but file-n-line is unavailable */
  35.334 -bug:
  35.335 -	printk(KERN_EMERG "Kernel BUG\n");
  35.336 -}
  35.337 -
  35.338 -/* This is gone through when something in the kernel
  35.339 - * has done something bad and is about to be terminated.
  35.340 -*/
  35.341 -void die(const char * str, struct pt_regs * regs, long err)
  35.342 -{
  35.343 -	static struct {
  35.344 -		spinlock_t lock;
  35.345 -		u32 lock_owner;
  35.346 -		int lock_owner_depth;
  35.347 -	} die = {
  35.348 -		.lock =			SPIN_LOCK_UNLOCKED,
  35.349 -		.lock_owner =		-1,
  35.350 -		.lock_owner_depth =	0
  35.351 -	};
  35.352 -	static int die_counter;
  35.353 -	unsigned long flags;
  35.354 -
  35.355 -	oops_enter();
  35.356 -
  35.357 -	if (die.lock_owner != raw_smp_processor_id()) {
  35.358 -		console_verbose();
  35.359 -		spin_lock_irqsave(&die.lock, flags);
  35.360 -		die.lock_owner = smp_processor_id();
  35.361 -		die.lock_owner_depth = 0;
  35.362 -		bust_spinlocks(1);
  35.363 -	}
  35.364 -	else
  35.365 -		local_save_flags(flags);
  35.366 -
  35.367 -	if (++die.lock_owner_depth < 3) {
  35.368 -		int nl = 0;
  35.369 -		unsigned long esp;
  35.370 -		unsigned short ss;
  35.371 -
  35.372 -		handle_BUG(regs);
  35.373 -		printk(KERN_EMERG "%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter);
  35.374 -#ifdef CONFIG_PREEMPT
  35.375 -		printk(KERN_EMERG "PREEMPT ");
  35.376 -		nl = 1;
  35.377 -#endif
  35.378 -#ifdef CONFIG_SMP
  35.379 -		if (!nl)
  35.380 -			printk(KERN_EMERG);
  35.381 -		printk("SMP ");
  35.382 -		nl = 1;
  35.383 -#endif
  35.384 -#ifdef CONFIG_DEBUG_PAGEALLOC
  35.385 -		if (!nl)
  35.386 -			printk(KERN_EMERG);
  35.387 -		printk("DEBUG_PAGEALLOC");
  35.388 -		nl = 1;
  35.389 -#endif
  35.390 -		if (nl)
  35.391 -			printk("\n");
  35.392 -		if (notify_die(DIE_OOPS, str, regs, err,
  35.393 -					current->thread.trap_no, SIGSEGV) !=
  35.394 -				NOTIFY_STOP) {
  35.395 -			show_registers(regs);
  35.396 -			/* Executive summary in case the oops scrolled away */
  35.397 -			esp = (unsigned long) (&regs->esp);
  35.398 -			savesegment(ss, ss);
  35.399 -			if (user_mode(regs)) {
  35.400 -				esp = regs->esp;
  35.401 -				ss = regs->xss & 0xffff;
  35.402 -			}
  35.403 -			printk(KERN_EMERG "EIP: [<%08lx>] ", regs->eip);
  35.404 -			print_symbol("%s", regs->eip);
  35.405 -			printk(" SS:ESP %04x:%08lx\n", ss, esp);
  35.406 -		}
  35.407 -		else
  35.408 -			regs = NULL;
  35.409 -  	} else
  35.410 -		printk(KERN_EMERG "Recursive die() failure, output suppressed\n");
  35.411 -
  35.412 -	bust_spinlocks(0);
  35.413 -	die.lock_owner = -1;
  35.414 -	spin_unlock_irqrestore(&die.lock, flags);
  35.415 -
  35.416 -	if (!regs)
  35.417 -		return;
  35.418 -
  35.419 -	if (kexec_should_crash(current))
  35.420 -		crash_kexec(regs);
  35.421 -
  35.422 -	if (in_interrupt())
  35.423 -		panic("Fatal exception in interrupt");
  35.424 -
  35.425 -	if (panic_on_oops) {
  35.426 -		printk(KERN_EMERG "Fatal exception: panic in 5 seconds\n");
  35.427 -		ssleep(5);
  35.428 -		panic("Fatal exception");
  35.429 -	}
  35.430 -	oops_exit();
  35.431 -	do_exit(SIGSEGV);
  35.432 -}
  35.433 -
  35.434 -static inline void die_if_kernel(const char * str, struct pt_regs * regs, long err)
  35.435 -{
  35.436 -	if (!user_mode_vm(regs))
  35.437 -		die(str, regs, err);
  35.438 -}
  35.439 -
  35.440 -static void __kprobes do_trap(int trapnr, int signr, char *str, int vm86,
  35.441 -			      struct pt_regs * regs, long error_code,
  35.442 -			      siginfo_t *info)
  35.443 -{
  35.444 -	struct task_struct *tsk = current;
  35.445 -	tsk->thread.error_code = error_code;
  35.446 -	tsk->thread.trap_no = trapnr;
  35.447 -
  35.448 -	if (regs->eflags & VM_MASK) {
  35.449 -		if (vm86)
  35.450 -			goto vm86_trap;
  35.451 -		goto trap_signal;
  35.452 -	}
  35.453 -
  35.454 -	if (!user_mode(regs))
  35.455 -		goto kernel_trap;
  35.456 -
  35.457 -	trap_signal: {
  35.458 -		if (info)
  35.459 -			force_sig_info(signr, info, tsk);
  35.460 -		else
  35.461 -			force_sig(signr, tsk);
  35.462 -		return;
  35.463 -	}
  35.464 -
  35.465 -	kernel_trap: {
  35.466 -		if (!fixup_exception(regs))
  35.467 -			die(str, regs, error_code);
  35.468 -		return;
  35.469 -	}
  35.470 -
  35.471 -	vm86_trap: {
  35.472 -		int ret = handle_vm86_trap((struct kernel_vm86_regs *) regs, error_code, trapnr);
  35.473 -		if (ret) goto trap_signal;
  35.474 -		return;
  35.475 -	}
  35.476 -}
  35.477 -
  35.478 -#define DO_ERROR(trapnr, signr, str, name) \
  35.479 -fastcall void do_##name(struct pt_regs * regs, long error_code) \
  35.480 -{ \
  35.481 -	if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) \
  35.482 -						== NOTIFY_STOP) \
  35.483 -		return; \
  35.484 -	do_trap(trapnr, signr, str, 0, regs, error_code, NULL); \
  35.485 -}
  35.486 -
  35.487 -#define DO_ERROR_INFO(trapnr, signr, str, name, sicode, siaddr) \
  35.488 -fastcall void do_##name(struct pt_regs * regs, long error_code) \
  35.489 -{ \
  35.490 -	siginfo_t info; \
  35.491 -	info.si_signo = signr; \
  35.492 -	info.si_errno = 0; \
  35.493 -	info.si_code = sicode; \
  35.494 -	info.si_addr = (void __user *)siaddr; \
  35.495 -	if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) \
  35.496 -						== NOTIFY_STOP) \
  35.497 -		return; \
  35.498 -	do_trap(trapnr, signr, str, 0, regs, error_code, &info); \
  35.499 -}
  35.500 -
  35.501 -#define DO_VM86_ERROR(trapnr, signr, str, name) \
  35.502 -fastcall void do_##name(struct pt_regs * regs, long error_code) \
  35.503 -{ \
  35.504 -	if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) \
  35.505 -						== NOTIFY_STOP) \
  35.506 -		return; \
  35.507 -	do_trap(trapnr, signr, str, 1, regs, error_code, NULL); \
  35.508 -}
  35.509 -
  35.510 -#define DO_VM86_ERROR_INFO(trapnr, signr, str, name, sicode, siaddr) \
  35.511 -fastcall void do_##name(struct pt_regs * regs, long error_code) \
  35.512 -{ \
  35.513 -	siginfo_t info; \
  35.514 -	info.si_signo = signr; \
  35.515 -	info.si_errno = 0; \
  35.516 -	info.si_code = sicode; \
  35.517 -	info.si_addr = (void __user *)siaddr; \
  35.518 -	if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) \
  35.519 -						== NOTIFY_STOP) \
  35.520 -		return; \
  35.521 -	do_trap(trapnr, signr, str, 1, regs, error_code, &info); \
  35.522 -}
  35.523 -
  35.524 -DO_VM86_ERROR_INFO( 0, SIGFPE,  "divide error", divide_error, FPE_INTDIV, regs->eip)
  35.525 -#ifndef CONFIG_KPROBES
  35.526 -DO_VM86_ERROR( 3, SIGTRAP, "int3", int3)
  35.527 -#endif
  35.528 -DO_VM86_ERROR( 4, SIGSEGV, "overflow", overflow)
  35.529 -DO_VM86_ERROR( 5, SIGSEGV, "bounds", bounds)
  35.530 -DO_ERROR_INFO( 6, SIGILL,  "invalid opcode", invalid_op, ILL_ILLOPN, regs->eip)
  35.531 -DO_ERROR( 9, SIGFPE,  "coprocessor segment overrun", coprocessor_segment_overrun)
  35.532 -DO_ERROR(10, SIGSEGV, "invalid TSS", invalid_TSS)
  35.533 -DO_ERROR(11, SIGBUS,  "segment not present", segment_not_present)
  35.534 -DO_ERROR(12, SIGBUS,  "stack segment", stack_segment)
  35.535 -DO_ERROR_INFO(17, SIGBUS, "alignment check", alignment_check, BUS_ADRALN, 0)
  35.536 -DO_ERROR_INFO(32, SIGSEGV, "iret exception", iret_error, ILL_BADSTK, 0)
  35.537 -
  35.538 -fastcall void __kprobes do_general_protection(struct pt_regs * regs,
  35.539 -					      long error_code)
  35.540 -{
  35.541 -	int cpu = get_cpu();
  35.542 -	struct tss_struct *tss = &per_cpu(init_tss, cpu);
  35.543 -	struct thread_struct *thread = &current->thread;
  35.544 -
  35.545 -	/*
  35.546 -	 * Perform the lazy TSS's I/O bitmap copy. If the TSS has an
  35.547 -	 * invalid offset set (the LAZY one) and the faulting thread has
  35.548 -	 * a valid I/O bitmap pointer, we copy the I/O bitmap in the TSS
  35.549 -	 * and we set the offset field correctly. Then we let the CPU to
  35.550 -	 * restart the faulting instruction.
  35.551 -	 */
  35.552 -	if (tss->io_bitmap_base == INVALID_IO_BITMAP_OFFSET_LAZY &&
  35.553 -	    thread->io_bitmap_ptr) {
  35.554 -		memcpy(tss->io_bitmap, thread->io_bitmap_ptr,
  35.555 -		       thread->io_bitmap_max);
  35.556 -		/*
  35.557 -		 * If the previously set map was extending to higher ports
  35.558 -		 * than the current one, pad extra space with 0xff (no access).
  35.559 -		 */
  35.560 -		if (thread->io_bitmap_max < tss->io_bitmap_max)
  35.561 -			memset((char *) tss->io_bitmap +
  35.562 -				thread->io_bitmap_max, 0xff,
  35.563 -				tss->io_bitmap_max - thread->io_bitmap_max);
  35.564 -		tss->io_bitmap_max = thread->io_bitmap_max;
  35.565 -		tss->io_bitmap_base = IO_BITMAP_OFFSET;
  35.566 -		tss->io_bitmap_owner = thread;
  35.567 -		put_cpu();
  35.568 -		return;
  35.569 -	}
  35.570 -	put_cpu();
  35.571 -
  35.572 -	current->thread.error_code = error_code;
  35.573 -	current->thread.trap_no = 13;
  35.574 -
  35.575 -	if (regs->eflags & VM_MASK)
  35.576 -		goto gp_in_vm86;
  35.577 -
  35.578 -	if (!user_mode(regs))
  35.579 -		goto gp_in_kernel;
  35.580 -
  35.581 -	current->thread.error_code = error_code;
  35.582 -	current->thread.trap_no = 13;
  35.583 -	force_sig(SIGSEGV, current);
  35.584 -	return;
  35.585 -
  35.586 -gp_in_vm86:
  35.587 -	local_irq_enable();
  35.588 -	handle_vm86_fault((struct kernel_vm86_regs *) regs, error_code);
  35.589 -	return;
  35.590 -
  35.591 -gp_in_kernel:
  35.592 -	if (!fixup_exception(regs)) {
  35.593 -		if (notify_die(DIE_GPF, "general protection fault", regs,
  35.594 -				error_code, 13, SIGSEGV) == NOTIFY_STOP)
  35.595 -			return;
  35.596 -		die("general protection fault", regs, error_code);
  35.597 -	}
  35.598 -}
  35.599 -
  35.600 -static void mem_parity_error(unsigned char reason, struct pt_regs * regs)
  35.601 -{
  35.602 -	printk(KERN_EMERG "Uhhuh. NMI received. Dazed and confused, but trying "
  35.603 -			"to continue\n");
  35.604 -	printk(KERN_EMERG "You probably have a hardware problem with your RAM "
  35.605 -			"chips\n");
  35.606 -
  35.607 -	/* Clear and disable the memory parity error line. */
  35.608 -	clear_mem_error(reason);
  35.609 -}
  35.610 -
  35.611 -static void io_check_error(unsigned char reason, struct pt_regs * regs)
  35.612 -{
  35.613 -	printk(KERN_EMERG "NMI: IOCK error (debug interrupt?)\n");
  35.614 -	show_registers(regs);
  35.615 -
  35.616 -	/* Re-enable the IOCK line, wait for a few seconds */
  35.617 -	clear_io_check_error(reason);
  35.618 -}
  35.619 -
  35.620 -static void unknown_nmi_error(unsigned char reason, struct pt_regs * regs)
  35.621 -{
  35.622 -#ifdef CONFIG_MCA
  35.623 -	/* Might actually be able to figure out what the guilty party
  35.624 -	* is. */
  35.625 -	if( MCA_bus ) {
  35.626 -		mca_handle_nmi();
  35.627 -		return;
  35.628 -	}
  35.629 -#endif
  35.630 -	printk("Uhhuh. NMI received for unknown reason %02x on CPU %d.\n",
  35.631 -		reason, smp_processor_id());
  35.632 -	printk("Dazed and confused, but trying to continue\n");
  35.633 -	printk("Do you have a strange power saving mode enabled?\n");
  35.634 -}
  35.635 -
  35.636 -static DEFINE_SPINLOCK(nmi_print_lock);
  35.637 -
  35.638 -void die_nmi (struct pt_regs *regs, const char *msg)
  35.639 -{
  35.640 -	if (notify_die(DIE_NMIWATCHDOG, msg, regs, 0, 2, SIGINT) ==
  35.641 -	    NOTIFY_STOP)
  35.642 -		return;
  35.643 -
  35.644 -	spin_lock(&nmi_print_lock);
  35.645 -	/*
  35.646 -	* We are in trouble anyway, lets at least try
  35.647 -	* to get a message out.
  35.648 -	*/
  35.649 -	bust_spinlocks(1);
  35.650 -	printk(KERN_EMERG "%s", msg);
  35.651 -	printk(" on CPU%d, eip %08lx, registers:\n",
  35.652 -		smp_processor_id(), regs->eip);
  35.653 -	show_registers(regs);
  35.654 -	printk(KERN_EMERG "console shuts up ...\n");
  35.655 -	console_silent();
  35.656 -	spin_unlock(&nmi_print_lock);
  35.657 -	bust_spinlocks(0);
  35.658 -
  35.659 -	/* If we are in kernel we are probably nested up pretty bad
  35.660 -	 * and might aswell get out now while we still can.
  35.661 -	*/
  35.662 -	if (!user_mode_vm(regs)) {
  35.663 -		current->thread.trap_no = 2;
  35.664 -		crash_kexec(regs);
  35.665 -	}
  35.666 -
  35.667 -	do_exit(SIGSEGV);
  35.668 -}
  35.669 -
  35.670 -static void default_do_nmi(struct pt_regs * regs)
  35.671 -{
  35.672 -	unsigned char reason = 0;
  35.673 -
  35.674 -	/* Only the BSP gets external NMIs from the system.  */
  35.675 -	if (!smp_processor_id())
  35.676 -		reason = get_nmi_reason();
  35.677 - 
  35.678 -	if (!(reason & 0xc0)) {
  35.679 -		if (notify_die(DIE_NMI_IPI, "nmi_ipi", regs, reason, 2, SIGINT)
  35.680 -							== NOTIFY_STOP)
  35.681 -			return;
  35.682 -#ifdef CONFIG_X86_LOCAL_APIC
  35.683 -		/*
  35.684 -		 * Ok, so this is none of the documented NMI sources,
  35.685 -		 * so it must be the NMI watchdog.
  35.686 -		 */
  35.687 -		if (nmi_watchdog) {
  35.688 -			nmi_watchdog_tick(regs);
  35.689 -			return;
  35.690 -		}
  35.691 -#endif
  35.692 -		unknown_nmi_error(reason, regs);
  35.693 -		return;
  35.694 -	}
  35.695 -	if (notify_die(DIE_NMI, "nmi", regs, reason, 2, SIGINT) == NOTIFY_STOP)
  35.696 -		return;
  35.697 -	if (reason & 0x80)
  35.698 -		mem_parity_error(reason, regs);
  35.699 -	if (reason & 0x40)
  35.700 -		io_check_error(reason, regs);
  35.701 -	/*
  35.702 -	 * Reassert NMI in case it became active meanwhile
  35.703 -	 * as it's edge-triggered.
  35.704 -	 */
  35.705 -	reassert_nmi();
  35.706 -}
  35.707 -
  35.708 -static int dummy_nmi_callback(struct pt_regs * regs, int cpu)
  35.709 -{
  35.710 -	return 0;
  35.711 -}
  35.712 - 
  35.713 -static nmi_callback_t nmi_callback = dummy_nmi_callback;
  35.714 - 
  35.715 -fastcall void do_nmi(struct pt_regs * regs, long error_code)
  35.716 -{
  35.717 -	int cpu;
  35.718 -
  35.719 -	nmi_enter();
  35.720 -
  35.721 -	cpu = smp_processor_id();
  35.722 -
  35.723 -	++nmi_count(cpu);
  35.724 -
  35.725 -	if (!rcu_dereference(nmi_callback)(regs, cpu))
  35.726 -		default_do_nmi(regs);
  35.727 -
  35.728 -	nmi_exit();
  35.729 -}
  35.730 -
  35.731 -void set_nmi_callback(nmi_callback_t callback)
  35.732 -{
  35.733 -	vmalloc_sync_all();
  35.734 -	rcu_assign_pointer(nmi_callback, callback);
  35.735 -}
  35.736 -EXPORT_SYMBOL_GPL(set_nmi_callback);
  35.737 -
  35.738 -void unset_nmi_callback(void)
  35.739 -{
  35.740 -	nmi_callback = dummy_nmi_callback;
  35.741 -}
  35.742 -EXPORT_SYMBOL_GPL(unset_nmi_callback);
  35.743 -
  35.744 -#ifdef CONFIG_KPROBES
  35.745 -fastcall void __kprobes do_int3(struct pt_regs *regs, long error_code)
  35.746 -{
  35.747 -	if (notify_die(DIE_INT3, "int3", regs, error_code, 3, SIGTRAP)
  35.748 -			== NOTIFY_STOP)
  35.749 -		return;
  35.750 -	/* This is an interrupt gate, because kprobes wants interrupts
  35.751 -	disabled.  Normal trap handlers don't. */
  35.752 -	restore_interrupts(regs);
  35.753 -	do_trap(3, SIGTRAP, "int3", 1, regs, error_code, NULL);
  35.754 -}
  35.755 -#endif
  35.756 -
  35.757 -/*
  35.758 - * Our handling of the processor debug registers is non-trivial.
  35.759 - * We do not clear them on entry and exit from the kernel. Therefore
  35.760 - * it is possible to get a watchpoint trap here from inside the kernel.
  35.761 - * However, the code in ./ptrace.c has ensured that the user can
  35.762 - * only set watchpoints on userspace addresses. Therefore the in-kernel
  35.763 - * watchpoint trap can only occur in code which is reading/writing
  35.764 - * from user space. Such code must not hold kernel locks (since it
  35.765 - * can equally take a page fault), therefore it is safe to call
  35.766 - * force_sig_info even though that claims and releases locks.
  35.767 - * 
  35.768 - * Code in ./signal.c ensures that the debug control register
  35.769 - * is restored before we deliver any signal, and therefore that
  35.770 - * user code runs with the correct debug control register even though
  35.771 - * we clear it here.
  35.772 - *
  35.773 - * Being careful here means that we don't have to be as careful in a
  35.774 - * lot of more complicated places (task switching can be a bit lazy
  35.775 - * about restoring all the debug state, and ptrace doesn't have to
  35.776 - * find every occurrence of the TF bit that could be saved away even
  35.777 - * by user code)
  35.778 - */
  35.779 -fastcall void __kprobes do_debug(struct pt_regs * regs, long error_code)
  35.780 -{
  35.781 -	unsigned int condition;
  35.782 -	struct task_struct *tsk = current;
  35.783 -
  35.784 -	get_debugreg(condition, 6);
  35.785 -
  35.786 -	if (notify_die(DIE_DEBUG, "debug", regs, condition, error_code,
  35.787 -					SIGTRAP) == NOTIFY_STOP)
  35.788 -		return;
  35.789 -	/* It's safe to allow irq's after DR6 has been saved */
  35.790 -	if (regs->eflags & X86_EFLAGS_IF)
  35.791 -		local_irq_enable();
  35.792 -
  35.793 -	/* Mask out spurious debug traps due to lazy DR7 setting */
  35.794 -	if (condition & (DR_TRAP0|DR_TRAP1|DR_TRAP2|DR_TRAP3)) {
  35.795 -		if (!tsk->thread.debugreg[7])
  35.796 -			goto clear_dr7;
  35.797 -	}
  35.798 -
  35.799 -	if (regs->eflags & VM_MASK)
  35.800 -		goto debug_vm86;
  35.801 -
  35.802 -	/* Save debug status register where ptrace can see it */
  35.803 -	tsk->thread.debugreg[6] = condition;
  35.804 -
  35.805 -	/*
  35.806 -	 * Single-stepping through TF: make sure we ignore any events in
  35.807 -	 * kernel space (but re-enable TF when returning to user mode).
  35.808 -	 */
  35.809 -	if (condition & DR_STEP) {
  35.810 -		/*
  35.811 -		 * We already checked v86 mode above, so we can
  35.812 -		 * check for kernel mode by just checking the CPL
  35.813 -		 * of CS.
  35.814 -		 */
  35.815 -		if (!user_mode(regs))
  35.816 -			goto clear_TF_reenable;
  35.817 -	}
  35.818 -
  35.819 -	/* Ok, finally something we can handle */
  35.820 -	send_sigtrap(tsk, regs, error_code);
  35.821 -
  35.822 -	/* Disable additional traps. They'll be re-enabled when
  35.823 -	 * the signal is delivered.
  35.824 -	 */
  35.825 -clear_dr7:
  35.826 -	set_debugreg(0, 7);
  35.827 -	return;
  35.828 -
  35.829 -debug_vm86:
  35.830 -	handle_vm86_trap((struct kernel_vm86_regs *) regs, error_code, 1);
  35.831 -	return;
  35.832 -
  35.833 -clear_TF_reenable:
  35.834 -	set_tsk_thread_flag(tsk, TIF_SINGLESTEP);
  35.835 -	regs->eflags &= ~TF_MASK;
  35.836 -	return;
  35.837 -}
  35.838 -
  35.839 -/*
  35.840 - * Note that we play around with the 'TS' bit in an attempt to get
  35.841 - * the correct behaviour even in the presence of the asynchronous
  35.842 - * IRQ13 behaviour
  35.843 - */
  35.844 -void math_error(void __user *eip)
  35.845 -{
  35.846 -	struct task_struct * task;
  35.847 -	siginfo_t info;
  35.848 -	unsigned short cwd, swd;
  35.849 -
  35.850 -	/*
  35.851 -	 * Save the info for the exception handler and clear the error.
  35.852 -	 */
  35.853 -	task = current;
  35.854 -	save_init_fpu(task);
  35.855 -	task->thread.trap_no = 16;
  35.856 -	task->thread.error_code = 0;
  35.857 -	info.si_signo = SIGFPE;
  35.858 -	info.si_errno = 0;
  35.859 -	info.si_code = __SI_FAULT;
  35.860 -	info.si_addr = eip;
  35.861 -	/*
  35.862 -	 * (~cwd & swd) will mask out exceptions that are not set to unmasked
  35.863 -	 * status.  0x3f is the exception bits in these regs, 0x200 is the
  35.864 -	 * C1 reg you need in case of a stack fault, 0x040 is the stack
  35.865 -	 * fault bit.  We should only be taking one exception at a time,
  35.866 -	 * so if this combination doesn't produce any single exception,
  35.867 -	 * then we have a bad program that isn't syncronizing its FPU usage
  35.868 -	 * and it will suffer the consequences since we won't be able to
  35.869 -	 * fully reproduce the context of the exception
  35.870 -	 */
  35.871 -	cwd = get_fpu_cwd(task);
  35.872 -	swd = get_fpu_swd(task);
  35.873 -	switch (swd & ~cwd & 0x3f) {
  35.874 -		case 0x000: /* No unmasked exception */
  35.875 -			return;
  35.876 -		default:    /* Multiple exceptions */
  35.877 -			break;
  35.878 -		case 0x001: /* Invalid Op */
  35.879 -			/*
  35.880 -			 * swd & 0x240 == 0x040: Stack Underflow
  35.881 -			 * swd & 0x240 == 0x240: Stack Overflow
  35.882 -			 * User must clear the SF bit (0x40) if set
  35.883 -			 */
  35.884 -			info.si_code = FPE_FLTINV;
  35.885 -			break;
  35.886 -		case 0x002: /* Denormalize */
  35.887 -		case 0x010: /* Underflow */
  35.888 -			info.si_code = FPE_FLTUND;
  35.889 -			break;
  35.890 -		case 0x004: /* Zero Divide */
  35.891 -			info.si_code = FPE_FLTDIV;
  35.892 -			break;
  35.893 -		case 0x008: /* Overflow */
  35.894 -			info.si_code = FPE_FLTOVF;
  35.895 -			break;
  35.896 -		case 0x020: /* Precision */
  35.897 -			info.si_code = FPE_FLTRES;
  35.898 -			break;
  35.899 -	}
  35.900 -	force_sig_info(SIGFPE, &info, task);
  35.901 -}
  35.902 -
  35.903 -fastcall void do_coprocessor_error(struct pt_regs * regs, long error_code)
  35.904 -{
  35.905 -	ignore_fpu_irq = 1;
  35.906 -	math_error((void __user *)regs->eip);
  35.907 -}
  35.908 -
  35.909 -static void simd_math_error(void __user *eip)
  35.910 -{
  35.911 -	struct task_struct * task;
  35.912 -	siginfo_t info;
  35.913 -	unsigned short mxcsr;
  35.914 -
  35.915 -	/*
  35.916 -	 * Save the info for the exception handler and clear the error.
  35.917 -	 */
  35.918 -	task = current;
  35.919 -	save_init_fpu(task);
  35.920 -	task->thread.trap_no = 19;
  35.921 -	task->thread.error_code = 0;
  35.922 -	info.si_signo = SIGFPE;
  35.923 -	info.si_errno = 0;
  35.924 -	info.si_code = __SI_FAULT;
  35.925 -	info.si_addr = eip;
  35.926 -	/*
  35.927 -	 * The SIMD FPU exceptions are handled a little differently, as there
  35.928 -	 * is only a single status/control register.  Thus, to determine which
  35.929 -	 * unmasked exception was caught we must mask the exception mask bits
  35.930 -	 * at 0x1f80, and then use these to mask the exception bits at 0x3f.
  35.931 -	 */
  35.932 -	mxcsr = get_fpu_mxcsr(task);
  35.933 -	switch (~((mxcsr & 0x1f80) >> 7) & (mxcsr & 0x3f)) {
  35.934 -		case 0x000:
  35.935 -		default:
  35.936 -			break;
  35.937 -		case 0x001: /* Invalid Op */
  35.938 -			info.si_code = FPE_FLTINV;
  35.939 -			break;
  35.940 -		case 0x002: /* Denormalize */
  35.941 -		case 0x010: /* Underflow */
  35.942 -			info.si_code = FPE_FLTUND;
  35.943 -			break;
  35.944 -		case 0x004: /* Zero Divide */
  35.945 -			info.si_code = FPE_FLTDIV;
  35.946 -			break;
  35.947 -		case 0x008: /* Overflow */
  35.948 -			info.si_code = FPE_FLTOVF;
  35.949 -			break;
  35.950 -		case 0x020: /* Precision */
  35.951 -			info.si_code = FPE_FLTRES;
  35.952 -			break;
  35.953 -	}
  35.954 -	force_sig_info(SIGFPE, &info, task);
  35.955 -}
  35.956 -
  35.957 -fastcall void do_simd_coprocessor_error(struct pt_regs * regs,
  35.958 -					  long error_code)
  35.959 -{
  35.960 -	if (cpu_has_xmm) {
  35.961 -		/* Handle SIMD FPU exceptions on PIII+ processors. */
  35.962 -		ignore_fpu_irq = 1;
  35.963 -		simd_math_error((void __user *)regs->eip);
  35.964 -	} else {
  35.965 -		/*
  35.966 -		 * Handle strange cache flush from user space exception
  35.967 -		 * in all other cases.  This is undocumented behaviour.
  35.968 -		 */
  35.969 -		if (regs->eflags & VM_MASK) {
  35.970 -			handle_vm86_fault((struct kernel_vm86_regs *)regs,
  35.971 -					  error_code);
  35.972 -			return;
  35.973 -		}
  35.974 -		current->thread.trap_no = 19;
  35.975 -		current->thread.error_code = error_code;
  35.976 -		die_if_kernel("cache flush denied", regs, error_code);
  35.977 -		force_sig(SIGSEGV, current);
  35.978 -	}
  35.979 -}
  35.980 -
  35.981 -fastcall void do_spurious_interrupt_bug(struct pt_regs * regs,
  35.982 -					  long error_code)
  35.983 -{
  35.984 -#if 0
  35.985 -	/* No need to warn about this any longer. */
  35.986 -	printk("Ignoring P6 Local APIC Spurious Interrupt Bug...\n");
  35.987 -#endif
  35.988 -}
  35.989 -
  35.990 -fastcall void setup_x86_bogus_stack(unsigned char * stk)
  35.991 -{
  35.992 -	unsigned long *switch16_ptr, *switch32_ptr;
  35.993 -	struct pt_regs *regs;
  35.994 -	unsigned long stack_top, stack_bot;
  35.995 -	unsigned short iret_frame16_off;
  35.996 -	int cpu = smp_processor_id();
  35.997 -	/* reserve the space on 32bit stack for the magic switch16 pointer */
  35.998 -	memmove(stk, stk + 8, sizeof(struct pt_regs));
  35.999 -	switch16_ptr = (unsigned long *)(stk + sizeof(struct pt_regs));
 35.1000 -	regs = (struct pt_regs *)stk;
 35.1001 -	/* now the switch32 on 16bit stack */
 35.1002 -	stack_bot = (unsigned long)&per_cpu(cpu_16bit_stack, cpu);
 35.1003 -	stack_top = stack_bot +	CPU_16BIT_STACK_SIZE;
 35.1004 -	switch32_ptr = (unsigned long *)(stack_top - 8);
 35.1005 -	iret_frame16_off = CPU_16BIT_STACK_SIZE - 8 - 20;
 35.1006 -	/* copy iret frame on 16bit stack */
 35.1007 -	memcpy((void *)(stack_bot + iret_frame16_off), &regs->eip, 20);
 35.1008 -	/* fill in the switch pointers */
 35.1009 -	switch16_ptr[0] = (regs->esp & 0xffff0000) | iret_frame16_off;
 35.1010 -	switch16_ptr[1] = __ESPFIX_SS;
 35.1011 -	switch32_ptr[0] = (unsigned long)stk + sizeof(struct pt_regs) +
 35.1012 -		8 - CPU_16BIT_STACK_SIZE;
 35.1013 -	switch32_ptr[1] = __KERNEL_DS;
 35.1014 -}
 35.1015 -
 35.1016 -fastcall unsigned char * fixup_x86_bogus_stack(unsigned short sp)
 35.1017 -{
 35.1018 -	unsigned long *switch32_ptr;
 35.1019 -	unsigned char *stack16, *stack32;
 35.1020 -	unsigned long stack_top, stack_bot;
 35.1021 -	int len;
 35.1022 -	int cpu = smp_processor_id();
 35.1023 -	stack_bot = (unsigned long)&per_cpu(cpu_16bit_stack, cpu);
 35.1024 -	stack_top = stack_bot +	CPU_16BIT_STACK_SIZE;
 35.1025 -	switch32_ptr = (unsigned long *)(stack_top - 8);
 35.1026 -	/* copy the data from 16bit stack to 32bit stack */
 35.1027 -	len = CPU_16BIT_STACK_SIZE - 8 - sp;
 35.1028 -	stack16 = (unsigned char *)(stack_bot + sp);
 35.1029 -	stack32 = (unsigned char *)
 35.1030 -		(switch32_ptr[0] + CPU_16BIT_STACK_SIZE - 8 - len);
 35.1031 -	memcpy(stack32, stack16, len);
 35.1032 -	return stack32;
 35.1033 -}
 35.1034 -
 35.1035 -/*
 35.1036 - *  'math_state_restore()' saves the current math information in the
 35.1037 - * old math state array, and gets the new ones from the current task
 35.1038 - *
 35.1039 - * Careful.. There are problems with IBM-designed IRQ13 behaviour.
 35.1040 - * Don't touch unless you *really* know how it works.
 35.1041 - *
 35.1042 - * Must be called with kernel preemption disabled (in this case,
 35.1043 - * local interrupts are disabled at the call-site in entry.S).
 35.1044 - */
 35.1045 -asmlinkage void math_state_restore(struct pt_regs regs)
 35.1046 -{
 35.1047 -	struct thread_info *thread = current_thread_info();
 35.1048 -	struct task_struct *tsk = thread->task;
 35.1049 -
 35.1050 -	clts();		/* Allow maths ops (or we recurse) */
 35.1051 -	if (!tsk_used_math(tsk))
 35.1052 -		init_fpu(tsk);
 35.1053 -	restore_fpu(tsk);
 35.1054 -	thread->status |= TS_USEDFPU;	/* So we fnsave on switch_to() */
 35.1055 -}
 35.1056 -
 35.1057 -#ifndef CONFIG_MATH_EMULATION
 35.1058 -
 35.1059 -asmlinkage void math_emulate(long arg)
 35.1060 -{
 35.1061 -	printk(KERN_EMERG "math-emulation not enabled and no coprocessor found.\n");
 35.1062 -	printk(KERN_EMERG "killing %s.\n",current->comm);
 35.1063 -	force_sig(SIGFPE,current);
 35.1064 -	schedule();
 35.1065 -}
 35.1066 -
 35.1067 -#endif /* CONFIG_MATH_EMULATION */
 35.1068 -
 35.1069 -#ifdef CONFIG_X86_F00F_BUG
 35.1070 -void __init trap_init_f00f_bug(void)
 35.1071 -{
 35.1072 -	__set_fixmap(FIX_F00F_IDT, __pa(&idt_table), PAGE_KERNEL_RO);
 35.1073 -
 35.1074 -	/*
 35.1075 -	 * Update the IDT descriptor and reload the IDT so that
 35.1076 -	 * it uses the read-only mapped virtual address.
 35.1077 -	 */
 35.1078 -	idt_descr.address = fix_to_virt(FIX_F00F_IDT);
 35.1079 -	load_idt(&idt_descr);
 35.1080 -}
 35.1081 -#endif
 35.1082 -
 35.1083 -#define _set_gate(gate_addr,type,dpl,addr,seg) \
 35.1084 -do { \
 35.1085 -  int __d0, __d1; \
 35.1086 -  __asm__ __volatile__ ("movw %%dx,%%ax\n\t" \
 35.1087 -	"movw %4,%%dx\n\t" \
 35.1088 -	"movl %%eax,%0\n\t" \
 35.1089 -	"movl %%edx,%1" \
 35.1090 -	:"=m" (*((long *) (gate_addr))), \
 35.1091 -	 "=m" (*(1+(long *) (gate_addr))), "=&a" (__d0), "=&d" (__d1) \
 35.1092 -	:"i" ((short) (0x8000+(dpl<<13)+(type<<8))), \
 35.1093 -	 "3" ((char *) (addr)),"2" ((seg) << 16)); \
 35.1094 -} while (0)
 35.1095 -
 35.1096 -
 35.1097 -/*
 35.1098 - * This needs to use 'idt_table' rather than 'idt', and
 35.1099 - * thus use the _nonmapped_ version of the IDT, as the
 35.1100 - * Pentium F0 0F bugfix can have resulted in the mapped
 35.1101 - * IDT being write-protected.
 35.1102 - */
 35.1103 -void set_intr_gate(unsigned int n, void *addr)
 35.1104 -{
 35.1105 -	_set_gate(idt_table+n,14,0,addr,__KERNEL_CS);
 35.1106 -}
 35.1107 -
 35.1108 -/*
 35.1109 - * This routine sets up an interrupt gate at directory privilege level 3.
 35.1110 - */
 35.1111 -static inline void set_system_intr_gate(unsigned int n, void *addr)
 35.1112 -{
 35.1113 -	_set_gate(idt_table+n, 14, 3, addr, __KERNEL_CS);
 35.1114 -}
 35.1115 -
 35.1116 -static void __init set_trap_gate(unsigned int n, void *addr)
 35.1117 -{
 35.1118 -	_set_gate(idt_table+n,15,0,addr,__KERNEL_CS);
 35.1119 -}
 35.1120 -
 35.1121 -static void __init set_system_gate(unsigned int n, void *addr)
 35.1122 -{
 35.1123 -	_set_gate(idt_table+n,15,3,addr,__KERNEL_CS);
 35.1124 -}
 35.1125 -
 35.1126 -static void __init set_task_gate(unsigned int n, unsigned int gdt_entry)
 35.1127 -{
 35.1128 -	_set_gate(idt_table+n,5,0,0,(gdt_entry<<3));
 35.1129 -}
 35.1130 -
 35.1131 -
 35.1132 -void __init trap_init(void)
 35.1133 -{
 35.1134 -#ifdef CONFIG_EISA
 35.1135 -	void __iomem *p = ioremap(0x0FFFD9, 4);
 35.1136 -	if (readl(p) == 'E'+('I'<<8)+('S'<<16)+('A'<<24)) {
 35.1137 -		EISA_bus = 1;
 35.1138 -	}
 35.1139 -	iounmap(p);
 35.1140 -#endif
 35.1141 -
 35.1142 -#ifdef CONFIG_X86_LOCAL_APIC
 35.1143 -	init_apic_mappings();
 35.1144 -#endif
 35.1145 -
 35.1146 -	set_trap_gate(0,&divide_error);
 35.1147 -	set_intr_gate(1,&debug);
 35.1148 -	set_intr_gate(2,&nmi);
 35.1149 -	set_system_intr_gate(3, &int3); /* int3/4 can be called from all */
 35.1150 -	set_system_gate(4,&overflow);
 35.1151 -	set_trap_gate(5,&bounds);
 35.1152 -	set_trap_gate(6,&invalid_op);
 35.1153 -	set_trap_gate(7,&device_not_available);
 35.1154 -	set_task_gate(8,GDT_ENTRY_DOUBLEFAULT_TSS);
 35.1155 -	set_trap_gate(9,&coprocessor_segment_overrun);
 35.1156 -	set_trap_gate(10,&invalid_TSS);
 35.1157 -	set_trap_gate(11,&segment_not_present);
 35.1158 -	set_trap_gate(12,&stack_segment);
 35.1159 -	set_trap_gate(13,&general_protection);
 35.1160 -	set_intr_gate(14,&page_fault);
 35.1161 -	set_trap_gate(15,&spurious_interrupt_bug);
 35.1162 -	set_trap_gate(16,&coprocessor_error);
 35.1163 -	set_trap_gate(17,&alignment_check);
 35.1164 -#ifdef CONFIG_X86_MCE
 35.1165 -	set_trap_gate(18,&machine_check);
 35.1166 -#endif
 35.1167 -	set_trap_gate(19,&simd_coprocessor_error);
 35.1168 -
 35.1169 -	if (cpu_has_fxsr) {
 35.1170 -		/*
 35.1171 -		 * Verify that the FXSAVE/FXRSTOR data will be 16-byte aligned.
 35.1172 -		 * Generates a compile-time "error: zero width for bit-field" if
 35.1173 -		 * the alignment is wrong.
 35.1174 -		 */
 35.1175 -		struct fxsrAlignAssert {
 35.1176 -			int _:!(offsetof(struct task_struct,
 35.1177 -					thread.i387.fxsave) & 15);
 35.1178 -		};
 35.1179 -
 35.1180 -		printk(KERN_INFO "Enabling fast FPU save and restore... ");
 35.1181 -		set_in_cr4(X86_CR4_OSFXSR);
 35.1182 -		printk("done.\n");
 35.1183 -	}
 35.1184 -	if (cpu_has_xmm) {
 35.1185 -		printk(KERN_INFO "Enabling unmasked SIMD FPU exception "
 35.1186 -				"support... ");
 35.1187 -		set_in_cr4(X86_CR4_OSXMMEXCPT);
 35.1188 -		printk("done.\n");
 35.1189 -	}
 35.1190 -
 35.1191 -	set_system_gate(SYSCALL_VECTOR,&system_call);
 35.1192 -
 35.1193 -	/*
 35.1194 -	 * Should be a barrier for any external CPU state.
 35.1195 -	 */
 35.1196 -	cpu_init();
 35.1197 -
 35.1198 -	trap_init_hook();
 35.1199 -}
 35.1200 -
 35.1201 -static int __init kstack_setup(char *s)
 35.1202 -{
 35.1203 -	kstack_depth_to_print = simple_strtoul(s, NULL, 0);
 35.1204 -	return 1;
 35.1205 -}
 35.1206 -__setup("kstack=", kstack_setup);
    36.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/vm86.c	Fri Jan 12 15:32:03 2007 +0000
    36.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/vm86.c	Wed Jan 17 18:41:22 2007 +0000
    36.3 @@ -31,7 +31,6 @@
    36.4   */
    36.5  
    36.6  #include <linux/capability.h>
    36.7 -#include <linux/config.h>
    36.8  #include <linux/errno.h>
    36.9  #include <linux/interrupt.h>
   36.10  #include <linux/sched.h>
    37.1 --- a/linux-2.6-xen-sparse/arch/i386/kernel/vmlinux.lds.S	Fri Jan 12 15:32:03 2007 +0000
    37.2 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/vmlinux.lds.S	Wed Jan 17 18:41:22 2007 +0000
    37.3 @@ -43,6 +43,13 @@ SECTIONS
    37.4  
    37.5    RODATA
    37.6  
    37.7 +  . = ALIGN(4);
    37.8 +  __tracedata_start = .;
    37.9 +  .tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) {
   37.10 +	*(.tracedata)
   37.11 +  }
   37.12 +  __tracedata_end = .;
   37.13 +
   37.14    /* writeable */
   37.15    .data : AT(ADDR(.data) - LOAD_OFFSET) {	/* Data */
   37.16  	*(.data)
   37.17 @@ -70,6 +77,15 @@ SECTIONS
   37.18    .data.read_mostly : AT(ADDR(.data.read_mostly) - LOAD_OFFSET) { *(.data.read_mostly) }
   37.19    _edata = .;			/* End of data section */
   37.20  
   37.21 +#ifdef CONFIG_STACK_UNWIND
   37.22 +  . = ALIGN(4);
   37.23 +  .eh_frame : AT(ADDR(.eh_frame) - LOAD_OFFSET) {
   37.24 +	__start_unwind = .;
   37.25 +  	*(.eh_frame)
   37.26 +	__end_unwind = .;
   37.27 +  }
   37.28 +#endif
   37.29 +
   37.30    . = ALIGN(THREAD_SIZE);	/* init_task */
   37.31    .data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) {
   37.32  	*(.data.init_task)
    38.1 --- a/linux-2.6-xen-sparse/arch/i386/mach-xen/setup.c	Fri Jan 12 15:32:03 2007 +0000
    38.2 +++ b/linux-2.6-xen-sparse/arch/i386/mach-xen/setup.c	Wed Jan 17 18:41:22 2007 +0000
    38.3 @@ -2,12 +2,18 @@
    38.4   *	Machine specific setup for generic
    38.5   */
    38.6  
    38.7 -#include <linux/config.h>
    38.8  #include <linux/smp.h>
    38.9  #include <linux/init.h>
   38.10  #include <linux/interrupt.h>
   38.11 +#include <linux/module.h>
   38.12  #include <asm/acpi.h>
   38.13  #include <asm/arch_hooks.h>
   38.14 +#include <asm/e820.h>
   38.15 +#include <asm/setup.h>
   38.16 +#include <asm/fixmap.h>
   38.17 +
   38.18 +#include <xen/interface/callback.h>
   38.19 +#include <xen/interface/memory.h>
   38.20  
   38.21  #ifdef CONFIG_HOTPLUG_CPU
   38.22  #define DEFAULT_SEND_IPI	(1)
   38.23 @@ -35,3 +41,107 @@ static int __init print_ipi_mode(void)
   38.24  }
   38.25  
   38.26  late_initcall(print_ipi_mode);
   38.27 +
   38.28 +/**
   38.29 + * machine_specific_memory_setup - Hook for machine specific memory setup.
   38.30 + *
   38.31 + * Description:
   38.32 + *	This is included late in kernel/setup.c so that it can make
   38.33 + *	use of all of the static functions.
   38.34 + **/
   38.35 +
   38.36 +char * __init machine_specific_memory_setup(void)
   38.37 +{
   38.38 +	int rc;
   38.39 +	struct xen_memory_map memmap;
   38.40 +	/*
   38.41 +	 * This is rather large for a stack variable but this early in
   38.42 +	 * the boot process we know we have plenty slack space.
   38.43 +	 */
   38.44 +	struct e820entry map[E820MAX];
   38.45 +
   38.46 +	memmap.nr_entries = E820MAX;
   38.47 +	set_xen_guest_handle(memmap.buffer, map);
   38.48 +
   38.49 +	rc = HYPERVISOR_memory_op(XENMEM_memory_map, &memmap);
   38.50 +	if ( rc == -ENOSYS ) {
   38.51 +		memmap.nr_entries = 1;
   38.52 +		map[0].addr = 0ULL;
   38.53 +		map[0].size = PFN_PHYS(xen_start_info->nr_pages);
   38.54 +		/* 8MB slack (to balance backend allocations). */
   38.55 +		map[0].size += 8ULL << 20;
   38.56 +		map[0].type = E820_RAM;
   38.57 +		rc = 0;
   38.58 +	}
   38.59 +	BUG_ON(rc);
   38.60 +
   38.61 +	sanitize_e820_map(map, (char *)&memmap.nr_entries);
   38.62 +
   38.63 +	BUG_ON(copy_e820_map(map, (char)memmap.nr_entries) < 0);
   38.64 +
   38.65 +	return "Xen";
   38.66 +}
   38.67 +
   38.68 +
   38.69 +extern void hypervisor_callback(void);
   38.70 +extern void failsafe_callback(void);
   38.71 +extern void nmi(void);
   38.72 +
   38.73 +unsigned long *machine_to_phys_mapping;
   38.74 +EXPORT_SYMBOL(machine_to_phys_mapping);
   38.75 +unsigned int machine_to_phys_order;
   38.76 +EXPORT_SYMBOL(machine_to_phys_order);
   38.77 +
   38.78 +void __init machine_specific_arch_setup(void)
   38.79 +{
   38.80 +	int ret;
   38.81 +	struct xen_machphys_mapping mapping;
   38.82 +	unsigned long machine_to_phys_nr_ents;
   38.83 +	struct xen_platform_parameters pp;
   38.84 +	static struct callback_register __initdata event = {
   38.85 +		.type = CALLBACKTYPE_event,
   38.86 +		.address = { __KERNEL_CS, (unsigned long)hypervisor_callback },
   38.87 +	};
   38.88 +	static struct callback_register __initdata failsafe = {
   38.89 +		.type = CALLBACKTYPE_failsafe,
   38.90 +		.address = { __KERNEL_CS, (unsigned long)failsafe_callback },
   38.91 +	};
   38.92 +	static struct callback_register __initdata nmi_cb = {
   38.93 +		.type = CALLBACKTYPE_nmi,
   38.94 +		.address = { __KERNEL_CS, (unsigned long)nmi },
   38.95 +	};
   38.96 +
   38.97 +	ret = HYPERVISOR_callback_op(CALLBACKOP_register, &event);
   38.98 +	if (ret == 0)
   38.99 +		ret = HYPERVISOR_callback_op(CALLBACKOP_register, &failsafe);
  38.100 +#ifdef CONFIG_XEN_COMPAT_030002
  38.101 +	if (ret == -ENOSYS)
  38.102 +		ret = HYPERVISOR_set_callbacks(
  38.103 +			event.address.cs, event.address.eip,
  38.104 +			failsafe.address.cs, failsafe.address.eip);
  38.105 +#endif
  38.106 +	BUG_ON(ret);
  38.107 +
  38.108 +	ret = HYPERVISOR_callback_op(CALLBACKOP_register, &nmi_cb);
  38.109 +#ifdef CONFIG_XEN_COMPAT_030002
  38.110 +	if (ret == -ENOSYS) {
  38.111 +		static struct xennmi_callback __initdata cb = {
  38.112 +			.handler_address = (unsigned long)nmi
  38.113 +		};
  38.114 +
  38.115 +		HYPERVISOR_nmi_op(XENNMI_register_callback, &cb);
  38.116 +	}
  38.117 +#endif
  38.118 +
  38.119 +	if (HYPERVISOR_xen_version(XENVER_platform_parameters, &pp) == 0)
  38.120 +		set_fixaddr_top(pp.virt_start);
  38.121 +
  38.122 +	machine_to_phys_mapping = (unsigned long *)MACH2PHYS_VIRT_START;
  38.123 +	machine_to_phys_nr_ents = MACH2PHYS_NR_ENTRIES;
  38.124 +	if (HYPERVISOR_memory_op(XENMEM_machphys_mapping, &mapping) == 0) {
  38.125 +		machine_to_phys_mapping = (unsigned long *)mapping.v_start;
  38.126 +		machine_to_phys_nr_ents = mapping.max_mfn + 1;
  38.127 +	}
  38.128 +	while ((1UL << machine_to_phys_order) < machine_to_phys_nr_ents )
  38.129 +		machine_to_phys_order++;
  38.130 +}
    39.1 --- a/linux-2.6-xen-sparse/arch/i386/mm/fault-xen.c	Fri Jan 12 15:32:03 2007 +0000
    39.2 +++ b/linux-2.6-xen-sparse/arch/i386/mm/fault-xen.c	Wed Jan 17 18:41:22 2007 +0000
    39.3 @@ -30,6 +30,40 @@
    39.4  
    39.5  extern void die(const char *,struct pt_regs *,long);
    39.6  
    39.7 +#ifdef CONFIG_KPROBES
    39.8 +ATOMIC_NOTIFIER_HEAD(notify_page_fault_chain);
    39.9 +int register_page_fault_notifier(struct notifier_block *nb)
   39.10 +{
   39.11 +	vmalloc_sync_all();
   39.12 +	return atomic_notifier_chain_register(&notify_page_fault_chain, nb);
   39.13 +}
   39.14 +
   39.15 +int unregister_page_fault_notifier(struct notifier_block *nb)
   39.16 +{
   39.17 +	return atomic_notifier_chain_unregister(&notify_page_fault_chain, nb);
   39.18 +}
   39.19 +
   39.20 +static inline int notify_page_fault(enum die_val val, const char *str,
   39.21 +			struct pt_regs *regs, long err, int trap, int sig)
   39.22 +{
   39.23 +	struct die_args args = {
   39.24 +		.regs = regs,
   39.25 +		.str = str,
   39.26 +		.err = err,
   39.27 +		.trapnr = trap,
   39.28 +		.signr = sig
   39.29 +	};
   39.30 +	return atomic_notifier_call_chain(&notify_page_fault_chain, val, &args);
   39.31 +}
   39.32 +#else
   39.33 +static inline int notify_page_fault(enum die_val val, const char *str,
   39.34 +			struct pt_regs *regs, long err, int trap, int sig)
   39.35 +{
   39.36 +	return NOTIFY_DONE;
   39.37 +}
   39.38 +#endif
   39.39 +
   39.40 +
   39.41  /*
   39.42   * Unlock any spinlocks which will prevent us from getting the
   39.43   * message out 
   39.44 @@ -77,12 +111,15 @@ static inline unsigned long get_segment_
   39.45  	unsigned seg = regs->xcs & 0xffff;
   39.46  	u32 seg_ar, seg_limit, base, *desc;
   39.47  
   39.48 +	/* Unlikely, but must come before segment checks. */
   39.49 +	if (unlikely(regs->eflags & VM_MASK)) {
   39.50 +		base = seg << 4;
   39.51 +		*eip_limit = base + 0xffff;
   39.52 +		return base + (eip & 0xffff);
   39.53 +	}
   39.54 +
   39.55  	/* The standard kernel/user address space limit. */
   39.56  	*eip_limit = (seg & 2) ? USER_DS.seg : KERNEL_DS.seg;
   39.57 -
   39.58 -	/* Unlikely, but must come before segment checks. */
   39.59 -	if (unlikely((regs->eflags & VM_MASK) != 0))
   39.60 -		return eip + (seg << 4);
   39.61  	
   39.62  	/* By far the most common cases. */
   39.63  	if (likely(seg == __USER_CS || seg == GET_KERNEL_CS()))
   39.64 @@ -440,7 +477,7 @@ fastcall void __kprobes do_page_fault(st
   39.65  		/* Can take a spurious fault if mapping changes R/O -> R/W. */
   39.66  		if (spurious_fault(regs, address, error_code))
   39.67  			return;
   39.68 -		if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
   39.69 +		if (notify_page_fault(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
   39.70  						SIGSEGV) == NOTIFY_STOP)
   39.71  			return;
   39.72  		/* 
   39.73 @@ -450,7 +487,7 @@ fastcall void __kprobes do_page_fault(st
   39.74  		goto bad_area_nosemaphore;
   39.75  	}
   39.76  
   39.77 -	if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
   39.78 +	if (notify_page_fault(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
   39.79  					SIGSEGV) == NOTIFY_STOP)
   39.80  		return;
   39.81  
   39.82 @@ -471,7 +508,7 @@ fastcall void __kprobes do_page_fault(st
   39.83  	/* When running in the kernel we expect faults to occur only to
   39.84  	 * addresses in user space.  All other faults represent errors in the
   39.85  	 * kernel and should generate an OOPS.  Unfortunatly, in the case of an
   39.86 -	 * erroneous fault occuring in a code path which already holds mmap_sem
   39.87 +	 * erroneous fault occurring in a code path which already holds mmap_sem
   39.88  	 * we will deadlock attempting to validate the fault against the
   39.89  	 * address space.  Luckily the kernel only validly references user
   39.90  	 * space from well defined areas of code, which are listed in the
   39.91 @@ -499,12 +536,12 @@ fastcall void __kprobes do_page_fault(st
   39.92  		goto bad_area;
   39.93  	if (error_code & 4) {
   39.94  		/*
   39.95 -		 * accessing the stack below %esp is always a bug.
   39.96 -		 * The "+ 32" is there due to some instructions (like
   39.97 -		 * pusha) doing post-decrement on the stack and that
   39.98 -		 * doesn't show up until later..
   39.99 +		 * Accessing the stack below %esp is always a bug.
  39.100 +		 * The large cushion allows instructions like enter
  39.101 +		 * and pusha to work.  ("enter $65535,$31" pushes
  39.102 +		 * 32 pointers and then decrements %esp by 65535.)
  39.103  		 */
  39.104 -		if (address + 32 < regs->esp)
  39.105 +		if (address + 65536 + 32 * sizeof(unsigned long) < regs->esp)
  39.106  			goto bad_area;
  39.107  	}
  39.108  	if (expand_stack(vma, address))
    40.1 --- a/linux-2.6-xen-sparse/arch/i386/mm/init-xen.c	Fri Jan 12 15:32:03 2007 +0000
    40.2 +++ b/linux-2.6-xen-sparse/arch/i386/mm/init-xen.c	Wed Jan 17 18:41:22 2007 +0000
    40.3 @@ -6,7 +6,6 @@
    40.4   *  Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999
    40.5   */
    40.6  
    40.7 -#include <linux/config.h>
    40.8  #include <linux/module.h>
    40.9  #include <linux/signal.h>
   40.10  #include <linux/sched.h>
   40.11 @@ -23,12 +22,14 @@
   40.12  #include <linux/init.h>
   40.13  #include <linux/highmem.h>
   40.14  #include <linux/pagemap.h>
   40.15 +#include <linux/poison.h>
   40.16  #include <linux/bootmem.h>
   40.17  #include <linux/slab.h>
   40.18  #include <linux/proc_fs.h>
   40.19  #include <linux/efi.h>
   40.20  #include <linux/memory_hotplug.h>
   40.21  #include <linux/initrd.h>
   40.22 +#include <linux/cpumask.h>
   40.23  #include <linux/dma-mapping.h>
   40.24  #include <linux/scatterlist.h>
   40.25  
   40.26 @@ -415,7 +416,7 @@ static void __init pagetable_init (void)
   40.27  	permanent_kmaps_init(pgd_base);
   40.28  }
   40.29  
   40.30 -#ifdef CONFIG_SOFTWARE_SUSPEND
   40.31 +#if defined(CONFIG_SOFTWARE_SUSPEND) || defined(CONFIG_ACPI_SLEEP)
   40.32  /*
   40.33   * Swap suspend & friends need this for resume because things like the intel-agp
   40.34   * driver might have split up a kernel 4MB mapping.
   40.35 @@ -723,7 +724,7 @@ void __init mem_init(void)
   40.36   */
   40.37  #ifdef CONFIG_MEMORY_HOTPLUG
   40.38  #ifndef CONFIG_NEED_MULTIPLE_NODES
   40.39 -int add_memory(u64 start, u64 size)
   40.40 +int arch_add_memory(int nid, u64 start, u64 size)
   40.41  {
   40.42  	struct pglist_data *pgdata = &contig_page_data;
   40.43  	struct zone *zone = pgdata->node_zones + MAX_NR_ZONES-1;
   40.44 @@ -799,16 +800,15 @@ static int noinline do_test_wp_bit(void)
   40.45  
   40.46  #ifdef CONFIG_DEBUG_RODATA
   40.47  
   40.48 -extern char __start_rodata, __end_rodata;
   40.49  void mark_rodata_ro(void)
   40.50  {
   40.51 -	unsigned long addr = (unsigned long)&__start_rodata;
   40.52 +	unsigned long addr = (unsigned long)__start_rodata;
   40.53  
   40.54 -	for (; addr < (unsigned long)&__end_rodata; addr += PAGE_SIZE)
   40.55 +	for (; addr < (unsigned long)__end_rodata; addr += PAGE_SIZE)
   40.56  		change_page_attr(virt_to_page(addr), 1, PAGE_KERNEL_RO);
   40.57  
   40.58 -	printk ("Write protecting the kernel read-only data: %luk\n",
   40.59 -			(unsigned long)(&__end_rodata - &__start_rodata) >> 10);
   40.60 +	printk("Write protecting the kernel read-only data: %uk\n",
   40.61 +			(__end_rodata - __start_rodata) >> 10);
   40.62  
   40.63  	/*
   40.64  	 * change_page_attr() requires a global_flush_tlb() call after it.
   40.65 @@ -827,7 +827,7 @@ void free_init_pages(char *what, unsigne
   40.66  	for (addr = begin; addr < end; addr += PAGE_SIZE) {
   40.67  		ClearPageReserved(virt_to_page(addr));
   40.68  		init_page_count(virt_to_page(addr));
   40.69 -		memset((void *)addr, 0xcc, PAGE_SIZE);
   40.70 +		memset((void *)addr, POISON_FREE_INITMEM, PAGE_SIZE);
   40.71  		free_page(addr);
   40.72  		totalram_pages++;
   40.73  	}
    41.1 --- a/linux-2.6-xen-sparse/arch/i386/mm/pgtable-xen.c	Fri Jan 12 15:32:03 2007 +0000
    41.2 +++ b/linux-2.6-xen-sparse/arch/i386/mm/pgtable-xen.c	Wed Jan 17 18:41:22 2007 +0000
    41.3 @@ -2,7 +2,6 @@
    41.4   *  linux/arch/i386/mm/pgtable.c
    41.5   */
    41.6  
    41.7 -#include <linux/config.h>
    41.8  #include <linux/sched.h>
    41.9  #include <linux/kernel.h>
   41.10  #include <linux/errno.h>
   41.11 @@ -39,7 +38,6 @@ void show_mem(void)
   41.12  	struct page *page;
   41.13  	pg_data_t *pgdat;
   41.14  	unsigned long i;
   41.15 -	struct page_state ps;
   41.16  	unsigned long flags;
   41.17  
   41.18  	printk(KERN_INFO "Mem-info:\n");
   41.19 @@ -67,12 +65,13 @@ void show_mem(void)
   41.20  	printk(KERN_INFO "%d pages shared\n", shared);
   41.21  	printk(KERN_INFO "%d pages swap cached\n", cached);
   41.22  
   41.23 -	get_page_state(&ps);
   41.24 -	printk(KERN_INFO "%lu pages dirty\n", ps.nr_dirty);
   41.25 -	printk(KERN_INFO "%lu pages writeback\n", ps.nr_writeback);
   41.26 -	printk(KERN_INFO "%lu pages mapped\n", ps.nr_mapped);
   41.27 -	printk(KERN_INFO "%lu pages slab\n", ps.nr_slab);
   41.28 -	printk(KERN_INFO "%lu pages pagetables\n", ps.nr_page_table_pages);
   41.29 +	printk(KERN_INFO "%lu pages dirty\n", global_page_state(NR_FILE_DIRTY));
   41.30 +	printk(KERN_INFO "%lu pages writeback\n",
   41.31 +					global_page_state(NR_WRITEBACK));
   41.32 +	printk(KERN_INFO "%lu pages mapped\n", global_page_state(NR_FILE_MAPPED));
   41.33 +	printk(KERN_INFO "%lu pages slab\n", global_page_state(NR_SLAB));
   41.34 +	printk(KERN_INFO "%lu pages pagetables\n",
   41.35 +					global_page_state(NR_PAGETABLE));
   41.36  }
   41.37  
   41.38  /*
   41.39 @@ -196,9 +195,10 @@ unsigned long hypervisor_virt_start = HY
   41.40  unsigned long __FIXADDR_TOP = (HYPERVISOR_VIRT_START - 2 * PAGE_SIZE);
   41.41  EXPORT_SYMBOL(__FIXADDR_TOP);
   41.42  
   41.43 -void __init set_fixaddr_top()
   41.44 +void __init set_fixaddr_top(unsigned long top)
   41.45  {
   41.46  	BUG_ON(nr_fixmaps > 0);
   41.47 +	hypervisor_virt_start = top;
   41.48  	__FIXADDR_TOP = hypervisor_virt_start - 2 * PAGE_SIZE;
   41.49  }
   41.50  
    42.1 --- a/linux-2.6-xen-sparse/arch/i386/mm/pgtable.c	Fri Jan 12 15:32:03 2007 +0000
    42.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    42.3 @@ -1,283 +0,0 @@
    42.4 -/*
    42.5 - *  linux/arch/i386/mm/pgtable.c
    42.6 - */
    42.7 -
    42.8 -#include <linux/config.h>
    42.9 -#include <linux/sched.h>
   42.10 -#include <linux/kernel.h>
   42.11 -#include <linux/errno.h>
   42.12 -#include <linux/mm.h>
   42.13 -#include <linux/swap.h>
   42.14 -#include <linux/smp.h>
   42.15 -#include <linux/highmem.h>
   42.16 -#include <linux/slab.h>
   42.17 -#include <linux/pagemap.h>
   42.18 -#include <linux/spinlock.h>
   42.19 -#include <linux/module.h>
   42.20 -
   42.21 -#include <asm/system.h>
   42.22 -#include <asm/pgtable.h>
   42.23 -#include <asm/pgalloc.h>
   42.24 -#include <asm/fixmap.h>
   42.25 -#include <asm/e820.h>
   42.26 -#include <asm/tlb.h>
   42.27 -#include <asm/tlbflush.h>
   42.28 -
   42.29 -void show_mem(void)
   42.30 -{
   42.31 -	int total = 0, reserved = 0;
   42.32 -	int shared = 0, cached = 0;
   42.33 -	int highmem = 0;
   42.34 -	struct page *page;
   42.35 -	pg_data_t *pgdat;
   42.36 -	unsigned long i;
   42.37 -	struct page_state ps;
   42.38 -	unsigned long flags;
   42.39 -
   42.40 -	printk(KERN_INFO "Mem-info:\n");
   42.41 -	show_free_areas();
   42.42 -	printk(KERN_INFO "Free swap:       %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10));
   42.43 -	for_each_online_pgdat(pgdat) {
   42.44 -		pgdat_resize_lock(pgdat, &flags);
   42.45 -		for (i = 0; i < pgdat->node_spanned_pages; ++i) {
   42.46 -			page = pgdat_page_nr(pgdat, i);
   42.47 -			total++;
   42.48 -			if (PageHighMem(page))
   42.49 -				highmem++;
   42.50 -			if (PageReserved(page))
   42.51 -				reserved++;
   42.52 -			else if (PageSwapCache(page))
   42.53 -				cached++;
   42.54 -			else if (page_count(page))
   42.55 -				shared += page_count(page) - 1;
   42.56 -		}
   42.57 -		pgdat_resize_unlock(pgdat, &flags);
   42.58 -	}
   42.59 -	printk(KERN_INFO "%d pages of RAM\n", total);
   42.60 -	printk(KERN_INFO "%d pages of HIGHMEM\n", highmem);
   42.61 -	printk(KERN_INFO "%d reserved pages\n", reserved);
   42.62 -	printk(KERN_INFO "%d pages shared\n", shared);
   42.63 -	printk(KERN_INFO "%d pages swap cached\n", cached);
   42.64 -
   42.65 -	get_page_state(&ps);
   42.66 -	printk(KERN_INFO "%lu pages dirty\n", ps.nr_dirty);
   42.67 -	printk(KERN_INFO "%lu pages writeback\n", ps.nr_writeback);
   42.68 -	printk(KERN_INFO "%lu pages mapped\n", ps.nr_mapped);
   42.69 -	printk(KERN_INFO "%lu pages slab\n", ps.nr_slab);
   42.70 -	printk(KERN_INFO "%lu pages pagetables\n", ps.nr_page_table_pages);
   42.71 -}
   42.72 -
   42.73 -/*
   42.74 - * Associate a virtual page frame with a given physical page frame 
   42.75 - * and protection flags for that frame.
   42.76 - */ 
   42.77 -static void set_pte_pfn(unsigned long vaddr, unsigned long pfn, pgprot_t flags)
   42.78 -{
   42.79 -	pgd_t *pgd;
   42.80 -	pud_t *pud;
   42.81 -	pmd_t *pmd;
   42.82 -	pte_t *pte;
   42.83 -
   42.84 -	pgd = swapper_pg_dir + pgd_index(vaddr);
   42.85 -	if (pgd_none(*pgd)) {
   42.86 -		BUG();
   42.87 -		return;
   42.88 -	}
   42.89 -	pud = pud_offset(pgd, vaddr);
   42.90 -	if (pud_none(*pud)) {
   42.91 -		BUG();
   42.92 -		return;
   42.93 -	}
   42.94 -	pmd = pmd_offset(pud, vaddr);
   42.95 -	if (pmd_none(*pmd)) {
   42.96 -		BUG();
   42.97 -		return;
   42.98 -	}
   42.99 -	pte = pte_offset_kernel(pmd, vaddr);
  42.100 -	/* <pfn,flags> stored as-is, to permit clearing entries */
  42.101 -	set_pte(pte, pfn_pte(pfn, flags));
  42.102 -
  42.103 -	/*
  42.104 -	 * It's enough to flush this one mapping.
  42.105 -	 * (PGE mappings get flushed as well)
  42.106 -	 */
  42.107 -	__flush_tlb_one(vaddr);
  42.108 -}
  42.109 -
  42.110 -/*
  42.111 - * Associate a large virtual page frame with a given physical page frame 
  42.112 - * and protection flags for that frame. pfn is for the base of the page,
  42.113 - * vaddr is what the page gets mapped to - both must be properly aligned. 
  42.114 - * The pmd must already be instantiated. Assumes PAE mode.
  42.115 - */ 
  42.116 -void set_pmd_pfn(unsigned long vaddr, unsigned long pfn, pgprot_t flags)
  42.117 -{
  42.118 -	pgd_t *pgd;
  42.119 -	pud_t *pud;
  42.120 -	pmd_t *pmd;
  42.121 -
  42.122 -	if (vaddr & (PMD_SIZE-1)) {		/* vaddr is misaligned */
  42.123 -		printk(KERN_WARNING "set_pmd_pfn: vaddr misaligned\n");
  42.124 -		return; /* BUG(); */
  42.125 -	}
  42.126 -	if (pfn & (PTRS_PER_PTE-1)) {		/* pfn is misaligned */
  42.127 -		printk(KERN_WARNING "set_pmd_pfn: pfn misaligned\n");
  42.128 -		return; /* BUG(); */
  42.129 -	}
  42.130 -	pgd = swapper_pg_dir + pgd_index(vaddr);
  42.131 -	if (pgd_none(*pgd)) {
  42.132 -		printk(KERN_WARNING "set_pmd_pfn: pgd_none\n");
  42.133 -		return; /* BUG(); */
  42.134 -	}
  42.135 -	pud = pud_offset(pgd, vaddr);
  42.136 -	pmd = pmd_offset(pud, vaddr);
  42.137 -	set_pmd(pmd, pfn_pmd(pfn, flags));
  42.138 -	/*
  42.139 -	 * It's enough to flush this one mapping.
  42.140 -	 * (PGE mappings get flushed as well)
  42.141 -	 */
  42.142 -	__flush_tlb_one(vaddr);
  42.143 -}
  42.144 -
  42.145 -static int nr_fixmaps = 0;
  42.146 -unsigned long __FIXADDR_TOP = 0xfffff000;
  42.147 -EXPORT_SYMBOL(__FIXADDR_TOP);
  42.148 -
  42.149 -void __set_fixmap (enum fixed_addresses idx, unsigned long phys, pgprot_t flags)
  42.150 -{
  42.151 -	unsigned long address = __fix_to_virt(idx);
  42.152 -
  42.153 -	if (idx >= __end_of_fixed_addresses) {
  42.154 -		BUG();
  42.155 -		return;
  42.156 -	}
  42.157 -	set_pte_pfn(address, phys >> PAGE_SHIFT, flags);
  42.158 -	nr_fixmaps++;
  42.159 -}
  42.160 -
  42.161 -void set_fixaddr_top(unsigned long top)
  42.162 -{
  42.163 -	BUG_ON(nr_fixmaps > 0);
  42.164 -	__FIXADDR_TOP = top - PAGE_SIZE;
  42.165 -}
  42.166 -
  42.167 -pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
  42.168 -{
  42.169 -	return (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
  42.170 -}
  42.171 -
  42.172 -struct page *pte_alloc_one(struct mm_struct *mm, unsigned long address)
  42.173 -{
  42.174 -	struct page *pte;
  42.175 -
  42.176 -#ifdef CONFIG_HIGHPTE
  42.177 -	pte = alloc_pages(GFP_KERNEL|__GFP_HIGHMEM|__GFP_REPEAT|__GFP_ZERO, 0);
  42.178 -#else
  42.179 -	pte = alloc_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO, 0);
  42.180 -#endif
  42.181 -	return pte;
  42.182 -}
  42.183 -
  42.184 -void pmd_ctor(void *pmd, kmem_cache_t *cache, unsigned long flags)
  42.185 -{
  42.186 -	memset(pmd, 0, PTRS_PER_PMD*sizeof(pmd_t));
  42.187 -}
  42.188 -
  42.189 -/*
  42.190 - * List of all pgd's needed for non-PAE so it can invalidate entries
  42.191 - * in both cached and uncached pgd's; not needed for PAE since the
  42.192 - * kernel pmd is shared. If PAE were not to share the pmd a similar
  42.193 - * tactic would be needed. This is essentially codepath-based locking
  42.194 - * against pageattr.c; it is the unique case in which a valid change
  42.195 - * of kernel pagetables can't be lazily synchronized by vmalloc faults.
  42.196 - * vmalloc faults work because attached pagetables are never freed.
  42.197 - * The locking scheme was chosen on the basis of manfred's
  42.198 - * recommendations and having no core impact whatsoever.
  42.199 - * -- wli
  42.200 - */
  42.201 -DEFINE_SPINLOCK(pgd_lock);
  42.202 -struct page *pgd_list;
  42.203 -
  42.204 -static inline void pgd_list_add(pgd_t *pgd)
  42.205 -{
  42.206 -	struct page *page = virt_to_page(pgd);
  42.207 -	page->index = (unsigned long)pgd_list;
  42.208 -	if (pgd_list)
  42.209 -		set_page_private(pgd_list, (unsigned long)&page->index);
  42.210 -	pgd_list = page;
  42.211 -	set_page_private(page, (unsigned long)&pgd_list);
  42.212 -}
  42.213 -
  42.214 -static inline void pgd_list_del(pgd_t *pgd)
  42.215 -{
  42.216 -	struct page *next, **pprev, *page = virt_to_page(pgd);
  42.217 -	next = (struct page *)page->index;
  42.218 -	pprev = (struct page **)page_private(page);
  42.219 -	*pprev = next;
  42.220 -	if (next)
  42.221 -		set_page_private(next, (unsigned long)pprev);
  42.222 -}
  42.223 -
  42.224 -void pgd_ctor(void *pgd, kmem_cache_t *cache, unsigned long unused)
  42.225 -{
  42.226 -	unsigned long flags;
  42.227 -
  42.228 -	if (PTRS_PER_PMD == 1) {
  42.229 -		memset(pgd, 0, USER_PTRS_PER_PGD*sizeof(pgd_t));
  42.230 -		spin_lock_irqsave(&pgd_lock, flags);
  42.231 -	}
  42.232 -
  42.233 -	clone_pgd_range((pgd_t *)pgd + USER_PTRS_PER_PGD,
  42.234 -			swapper_pg_dir + USER_PTRS_PER_PGD,
  42.235 -			KERNEL_PGD_PTRS);
  42.236 -	if (PTRS_PER_PMD > 1)
  42.237 -		return;
  42.238 -
  42.239 -	pgd_list_add(pgd);
  42.240 -	spin_unlock_irqrestore(&pgd_lock, flags);
  42.241 -}
  42.242 -
  42.243 -/* never called when PTRS_PER_PMD > 1 */
  42.244 -void pgd_dtor(void *pgd, kmem_cache_t *cache, unsigned long unused)
  42.245 -{
  42.246 -	unsigned long flags; /* can be called from interrupt context */
  42.247 -
  42.248 -	spin_lock_irqsave(&pgd_lock, flags);
  42.249 -	pgd_list_del(pgd);
  42.250 -	spin_unlock_irqrestore(&pgd_lock, flags);
  42.251 -}
  42.252 -
  42.253 -pgd_t *pgd_alloc(struct mm_struct *mm)
  42.254 -{
  42.255 -	int i;
  42.256 -	pgd_t *pgd = kmem_cache_alloc(pgd_cache, GFP_KERNEL);
  42.257 -
  42.258 -	if (PTRS_PER_PMD == 1 || !pgd)
  42.259 -		return pgd;
  42.260 -
  42.261 -	for (i = 0; i < USER_PTRS_PER_PGD; ++i) {
  42.262 -		pmd_t *pmd = kmem_cache_alloc(pmd_cache, GFP_KERNEL);
  42.263 -		if (!pmd)
  42.264 -			goto out_oom;
  42.265 -		set_pgd(&pgd[i], __pgd(1 + __pa(pmd)));
  42.266 -	}
  42.267 -	return pgd;
  42.268 -
  42.269 -out_oom:
  42.270 -	for (i--; i >= 0; i--)
  42.271 -		kmem_cache_free(pmd_cache, (void *)__va(pgd_val(pgd[i])-1));
  42.272 -	kmem_cache_free(pgd_cache, pgd);
  42.273 -	return NULL;
  42.274 -}
  42.275 -
  42.276 -void pgd_free(pgd_t *pgd)
  42.277 -{
  42.278 -	int i;
  42.279 -
  42.280 -	/* in the PAE case user pgd entries are overwritten before usage */
  42.281 -	if (PTRS_PER_PMD > 1)
  42.282 -		for (i = 0; i < USER_PTRS_PER_PGD; ++i)
  42.283 -			kmem_cache_free(pmd_cache, (void *)__va(pgd_val(pgd[i])-1));
  42.284 -	/* in the non-PAE case, free_pgtables() clears user pgd entries */
  42.285 -	kmem_cache_free(pgd_cache, pgd);
  42.286 -}
    43.1 --- a/linux-2.6-xen-sparse/arch/i386/pci/irq-xen.c	Fri Jan 12 15:32:03 2007 +0000
    43.2 +++ b/linux-2.6-xen-sparse/arch/i386/pci/irq-xen.c	Wed Jan 17 18:41:22 2007 +0000
    43.3 @@ -4,7 +4,6 @@
    43.4   *	(c) 1999--2000 Martin Mares <mj@ucw.cz>
    43.5   */
    43.6  
    43.7 -#include <linux/config.h>
    43.8  #include <linux/types.h>
    43.9  #include <linux/kernel.h>
   43.10  #include <linux/pci.h>
   43.11 @@ -202,14 +201,14 @@ static void write_config_nybble(struct p
   43.12   */
   43.13  static int pirq_ali_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
   43.14  {
   43.15 -	static unsigned char irqmap[16] = { 0, 9, 3, 10, 4, 5, 7, 6, 1, 11, 0, 12, 0, 14, 0, 15 };
   43.16 +	static const unsigned char irqmap[16] = { 0, 9, 3, 10, 4, 5, 7, 6, 1, 11, 0, 12, 0, 14, 0, 15 };
   43.17  
   43.18  	return irqmap[read_config_nybble(router, 0x48, pirq-1)];
   43.19  }
   43.20  
   43.21  static int pirq_ali_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
   43.22  {
   43.23 -	static unsigned char irqmap[16] = { 0, 8, 0, 2, 4, 5, 7, 6, 0, 1, 3, 9, 11, 0, 13, 15 };
   43.24 +	static const unsigned char irqmap[16] = { 0, 8, 0, 2, 4, 5, 7, 6, 0, 1, 3, 9, 11, 0, 13, 15 };
   43.25  	unsigned int val = irqmap[irq];
   43.26  		
   43.27  	if (val) {
   43.28 @@ -260,13 +259,13 @@ static int pirq_via_set(struct pci_dev *
   43.29   */
   43.30  static int pirq_via586_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
   43.31  {
   43.32 -	static unsigned int pirqmap[4] = { 3, 2, 5, 1 };
   43.33 +	static const unsigned int pirqmap[4] = { 3, 2, 5, 1 };
   43.34  	return read_config_nybble(router, 0x55, pirqmap[pirq-1]);
   43.35  }
   43.36  
   43.37  static int pirq_via586_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
   43.38  {
   43.39 -	static unsigned int pirqmap[4] = { 3, 2, 5, 1 };
   43.40 +	static const unsigned int pirqmap[4] = { 3, 2, 5, 1 };
   43.41  	write_config_nybble(router, 0x55, pirqmap[pirq-1], irq);
   43.42  	return 1;
   43.43  }
   43.44 @@ -278,13 +277,13 @@ static int pirq_via586_set(struct pci_de
   43.45   */
   43.46  static int pirq_ite_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
   43.47  {
   43.48 -	static unsigned char pirqmap[4] = { 1, 0, 2, 3 };
   43.49 +	static const unsigned char pirqmap[4] = { 1, 0, 2, 3 };
   43.50  	return read_config_nybble(router,0x43, pirqmap[pirq-1]);
   43.51  }
   43.52  
   43.53  static int pirq_ite_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
   43.54  {
   43.55 -	static unsigned char pirqmap[4] = { 1, 0, 2, 3 };
   43.56 +	static const unsigned char pirqmap[4] = { 1, 0, 2, 3 };
   43.57  	write_config_nybble(router, 0x43, pirqmap[pirq-1], irq);
   43.58  	return 1;
   43.59  }
   43.60 @@ -509,7 +508,7 @@ static int pirq_bios_set(struct pci_dev 
   43.61  
   43.62  static __init int intel_router_probe(struct irq_router *r, struct pci_dev *router, u16 device)
   43.63  {
   43.64 -	static struct pci_device_id pirq_440gx[] = {
   43.65 +	static struct pci_device_id __initdata pirq_440gx[] = {
   43.66  		{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443GX_0) },
   43.67  		{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443GX_2) },
   43.68  		{ },
   43.69 @@ -869,7 +868,7 @@ static int pcibios_lookup_irq(struct pci
   43.70  		for (i = 0; i < 16; i++) {
   43.71  			if (!(mask & (1 << i)))
   43.72  				continue;
   43.73 -			if (pirq_penalty[i] < pirq_penalty[newirq] && can_request_irq(i, SA_SHIRQ))
   43.74 +			if (pirq_penalty[i] < pirq_penalty[newirq] && can_request_irq(i, IRQF_SHARED))
   43.75  				newirq = i;
   43.76  		}
   43.77  	}
   43.78 @@ -884,6 +883,7 @@ static int pcibios_lookup_irq(struct pci
   43.79  	((!(pci_probe & PCI_USE_PIRQ_MASK)) || ((1 << irq) & mask)) ) {
   43.80  		DBG(" -> got IRQ %d\n", irq);
   43.81  		msg = "Found";
   43.82 +		eisa_set_level_irq(irq);
   43.83  	} else if (newirq && r->set && (dev->class >> 8) != PCI_CLASS_DISPLAY_VGA) {
   43.84  		DBG(" -> assigning IRQ %d", newirq);
   43.85  		if (r->set(pirq_router_dev, dev, pirq, newirq)) {
    44.1 --- a/linux-2.6-xen-sparse/arch/ia64/Kconfig	Fri Jan 12 15:32:03 2007 +0000
    44.2 +++ b/linux-2.6-xen-sparse/arch/ia64/Kconfig	Wed Jan 17 18:41:22 2007 +0000
    44.3 @@ -98,6 +98,15 @@ config DMA_IS_DMA32
    44.4  	bool
    44.5  	default y
    44.6  
    44.7 +config DMA_IS_NORMAL
    44.8 +	bool
    44.9 +	depends on IA64_SGI_SN2
   44.10 +	default y
   44.11 +
   44.12 +config AUDIT_ARCH
   44.13 +	bool
   44.14 +	default y
   44.15 +
   44.16  choice
   44.17  	prompt "System type"
   44.18  	default IA64_GENERIC
   44.19 @@ -105,6 +114,7 @@ choice
   44.20  config IA64_GENERIC
   44.21  	bool "generic"
   44.22  	select ACPI
   44.23 +	select PCI
   44.24  	select NUMA
   44.25  	select ACPI_NUMA
   44.26  	help
   44.27 @@ -280,7 +290,7 @@ config NR_CPUS
   44.28  	int "Maximum number of CPUs (2-1024)"
   44.29  	range 2 1024
   44.30  	depends on SMP
   44.31 -	default "64"
   44.32 +	default "1024"
   44.33  	help
   44.34  	  You should set this to the number of CPUs in your system, but
   44.35  	  keep in mind that a kernel compiled for, e.g., 2 CPUs will boot but
   44.36 @@ -298,10 +308,12 @@ config HOTPLUG_CPU
   44.37  	  can be controlled through /sys/devices/system/cpu/cpu#.
   44.38  	  Say N if you want to disable CPU hotplug.
   44.39  
   44.40 +config ARCH_ENABLE_MEMORY_HOTPLUG
   44.41 +	def_bool y
   44.42 +
   44.43  config SCHED_SMT
   44.44  	bool "SMT scheduler support"
   44.45  	depends on SMP
   44.46 -	default off
   44.47  	help
   44.48  	  Improves the CPU scheduler's decision making when dealing with
   44.49  	  Intel IA64 chips with MultiThreading at a cost of slightly increased
   44.50 @@ -374,7 +386,7 @@ config NUMA
   44.51  config NODES_SHIFT
   44.52  	int "Max num nodes shift(3-10)"
   44.53  	range 3 10
   44.54 -	default "8"
   44.55 +	default "10"
   44.56  	depends on NEED_MULTIPLE_NODES
   44.57  	help
   44.58  	  This option specifies the maximum number of nodes in your SSI system.
   44.59 @@ -402,6 +414,10 @@ config HAVE_ARCH_EARLY_PFN_TO_NID
   44.60  	def_bool y
   44.61  	depends on NEED_MULTIPLE_NODES
   44.62  
   44.63 +config HAVE_ARCH_NODEDATA_EXTENSION
   44.64 +	def_bool y
   44.65 +	depends on NUMA
   44.66 +
   44.67  config IA32_SUPPORT
   44.68  	bool "Support for Linux/x86 binaries"
   44.69  	help
   44.70 @@ -492,6 +508,8 @@ config XEN_PCIDEV_FE_DEBUG
   44.71  	help
   44.72  	  Enables some debug statements within the PCI Frontend.
   44.73  
   44.74 +source "drivers/pci/pcie/Kconfig"
   44.75 +
   44.76  source "drivers/pci/Kconfig"
   44.77  
   44.78  source "drivers/pci/hotplug/Kconfig"
   44.79 @@ -526,6 +544,10 @@ config GENERIC_PENDING_IRQ
   44.80  	depends on GENERIC_HARDIRQS && SMP
   44.81  	default y
   44.82  
   44.83 +config IRQ_PER_CPU
   44.84 +	bool
   44.85 +	default y
   44.86 +
   44.87  source "arch/ia64/hp/sim/Kconfig"
   44.88  
   44.89  menu "Instrumentation Support"
   44.90 @@ -566,10 +588,6 @@ config HAVE_ARCH_DEV_ALLOC_SKB
   44.91  config XEN_BALLOON
   44.92  	default y
   44.93  
   44.94 -config XEN_SKBUFF
   44.95 -	default y
   44.96 -	depends on NET
   44.97 -
   44.98  config XEN_REBOOT
   44.99  	default y
  44.100  
    45.1 --- a/linux-2.6-xen-sparse/arch/ia64/dig/setup.c	Fri Jan 12 15:32:03 2007 +0000
    45.2 +++ b/linux-2.6-xen-sparse/arch/ia64/dig/setup.c	Wed Jan 17 18:41:22 2007 +0000
    45.3 @@ -8,14 +8,13 @@
    45.4   * Copyright (C) 1999 Walt Drummond <drummond@valinux.com>
    45.5   * Copyright (C) 1999 Vijay Chander <vijay@engr.sgi.com>
    45.6   */
    45.7 -#include <linux/config.h>
    45.8  
    45.9  #include <linux/init.h>
   45.10  #include <linux/delay.h>
   45.11  #include <linux/kernel.h>
   45.12  #include <linux/kdev_t.h>
   45.13  #include <linux/string.h>
   45.14 -#include <linux/tty.h>
   45.15 +#include <linux/screen_info.h>
   45.16  #include <linux/console.h>
   45.17  #include <linux/timex.h>
   45.18  #include <linux/sched.h>
    46.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/Makefile	Fri Jan 12 15:32:03 2007 +0000
    46.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/Makefile	Wed Jan 17 18:41:22 2007 +0000
    46.3 @@ -29,6 +29,7 @@ obj-$(CONFIG_CPU_FREQ)		+= cpufreq/
    46.4  obj-$(CONFIG_IA64_MCA_RECOVERY)	+= mca_recovery.o
    46.5  obj-$(CONFIG_KPROBES)		+= kprobes.o jprobes.o
    46.6  obj-$(CONFIG_IA64_UNCACHED_ALLOCATOR)	+= uncached.o
    46.7 +obj-$(CONFIG_AUDIT)		+= audit.o
    46.8  mca_recovery-y			+= mca_drv.o mca_drv_asm.o
    46.9  
   46.10  # The gate DSO image is built using a special linker script.
    47.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/asm-offsets.c	Fri Jan 12 15:32:03 2007 +0000
    47.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/asm-offsets.c	Wed Jan 17 18:41:22 2007 +0000
    47.3 @@ -5,7 +5,6 @@
    47.4   */
    47.5  
    47.6  #define ASM_OFFSETS_C 1
    47.7 -#include <linux/config.h>
    47.8  
    47.9  #include <linux/sched.h>
   47.10  
   47.11 @@ -217,16 +216,24 @@ void foo(void)
   47.12  	DEFINE(IA64_MCA_CPU_INIT_STACK_OFFSET,
   47.13  	       offsetof (struct ia64_mca_cpu, init_stack));
   47.14  	BLANK();
   47.15 -	DEFINE(IA64_SAL_OS_STATE_COMMON_OFFSET,
   47.16 -	       offsetof (struct ia64_sal_os_state, sal_ra));
   47.17  	DEFINE(IA64_SAL_OS_STATE_OS_GP_OFFSET,
   47.18  	       offsetof (struct ia64_sal_os_state, os_gp));
   47.19 +	DEFINE(IA64_SAL_OS_STATE_PROC_STATE_PARAM_OFFSET,
   47.20 +	       offsetof (struct ia64_sal_os_state, proc_state_param));
   47.21 +	DEFINE(IA64_SAL_OS_STATE_SAL_RA_OFFSET,
   47.22 +	       offsetof (struct ia64_sal_os_state, sal_ra));
   47.23 +	DEFINE(IA64_SAL_OS_STATE_SAL_GP_OFFSET,
   47.24 +	       offsetof (struct ia64_sal_os_state, sal_gp));
   47.25  	DEFINE(IA64_SAL_OS_STATE_PAL_MIN_STATE_OFFSET,
   47.26  	       offsetof (struct ia64_sal_os_state, pal_min_state));
   47.27 -	DEFINE(IA64_SAL_OS_STATE_PROC_STATE_PARAM_OFFSET,
   47.28 -	       offsetof (struct ia64_sal_os_state, proc_state_param));
   47.29 +	DEFINE(IA64_SAL_OS_STATE_OS_STATUS_OFFSET,
   47.30 +	       offsetof (struct ia64_sal_os_state, os_status));
   47.31 +	DEFINE(IA64_SAL_OS_STATE_CONTEXT_OFFSET,
   47.32 +	       offsetof (struct ia64_sal_os_state, context));
   47.33  	DEFINE(IA64_SAL_OS_STATE_SIZE,
   47.34  	       sizeof (struct ia64_sal_os_state));
   47.35 +	BLANK();
   47.36 +
   47.37  	DEFINE(IA64_PMSA_GR_OFFSET,
   47.38  	       offsetof (struct pal_min_state_area_s, pmsa_gr));
   47.39  	DEFINE(IA64_PMSA_BANK1_GR_OFFSET,
    48.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/entry.S	Fri Jan 12 15:32:03 2007 +0000
    48.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/entry.S	Wed Jan 17 18:41:22 2007 +0000
    48.3 @@ -31,7 +31,6 @@
    48.4   *	pNonSys:	!pSys
    48.5   */
    48.6  
    48.7 -#include <linux/config.h>
    48.8  
    48.9  #include <asm/asmmacro.h>
   48.10  #include <asm/cache.h>
   48.11 @@ -1590,7 +1589,7 @@ sys_call_table:
   48.12  	data8 sys_keyctl
   48.13  	data8 sys_ioprio_set
   48.14  	data8 sys_ioprio_get			// 1275
   48.15 -	data8 sys_ni_syscall
   48.16 +	data8 sys_move_pages
   48.17  	data8 sys_inotify_init
   48.18  	data8 sys_inotify_add_watch
   48.19  	data8 sys_inotify_rm_watch
   48.20 @@ -1612,8 +1611,8 @@ sys_call_table:
   48.21  	data8 sys_ni_syscall			// 1295 reserved for ppoll
   48.22  	data8 sys_unshare
   48.23  	data8 sys_splice
   48.24 -	data8 sys_set_robust_list
   48.25 -	data8 sys_get_robust_list
   48.26 +	data8 sys_ni_syscall			// reserved for set_robust_list
   48.27 +	data8 sys_ni_syscall			// reserved for get_robust_list
   48.28  	data8 sys_sync_file_range		// 1300
   48.29  	data8 sys_tee
   48.30  	data8 sys_vmsplice
    49.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/gate.S	Fri Jan 12 15:32:03 2007 +0000
    49.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/gate.S	Wed Jan 17 18:41:22 2007 +0000
    49.3 @@ -6,7 +6,6 @@
    49.4   * 	David Mosberger-Tang <davidm@hpl.hp.com>
    49.5   */
    49.6  
    49.7 -#include <linux/config.h>
    49.8  
    49.9  #include <asm/asmmacro.h>
   49.10  #include <asm/errno.h>
    50.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/gate.lds.S	Fri Jan 12 15:32:03 2007 +0000
    50.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/gate.lds.S	Wed Jan 17 18:41:22 2007 +0000
    50.3 @@ -4,7 +4,6 @@
    50.4   * in one page).  This script controls its layout.
    50.5   */
    50.6  
    50.7 -#include <linux/config.h>
    50.8  
    50.9  #include <asm/system.h>
   50.10  
    51.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/head.S	Fri Jan 12 15:32:03 2007 +0000
    51.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/head.S	Wed Jan 17 18:41:22 2007 +0000
    51.3 @@ -19,7 +19,6 @@
    51.4   *   Support for CPU Hotplug
    51.5   */
    51.6  
    51.7 -#include <linux/config.h>
    51.8  
    51.9  #include <asm/asmmacro.h>
   51.10  #include <asm/fpu.h>
   51.11 @@ -198,6 +197,11 @@ start_ap:
   51.12  	;;
   51.13  	srlz.i
   51.14  	;;
   51.15 + {
   51.16 +	flushrs				// must be first insn in group
   51.17 +	srlz.i
   51.18 + }
   51.19 +	;;
   51.20  	/*
   51.21  	 * Save the region registers, predicate before they get clobbered
   51.22  	 */
   51.23 @@ -860,7 +864,6 @@ END(__ia64_init_fpu)
   51.24   */
   51.25  GLOBAL_ENTRY(ia64_switch_mode_phys)
   51.26   {
   51.27 -	alloc r2=ar.pfs,0,0,0,0
   51.28  	rsm psr.i | psr.ic		// disable interrupts and interrupt collection
   51.29  	mov r15=ip
   51.30   }
   51.31 @@ -909,7 +912,6 @@ END(ia64_switch_mode_phys)
   51.32   */
   51.33  GLOBAL_ENTRY(ia64_switch_mode_virt)
   51.34   {
   51.35 -	alloc r2=ar.pfs,0,0,0,0
   51.36  	rsm psr.i | psr.ic		// disable interrupts and interrupt collection
   51.37  	mov r15=ip
   51.38   }
    52.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/iosapic.c	Fri Jan 12 15:32:03 2007 +0000
    52.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/iosapic.c	Wed Jan 17 18:41:22 2007 +0000
    52.3 @@ -79,7 +79,6 @@
    52.4   * describeinterrupts.  Now we use "IRQ" only for Linux IRQ's.  ISA IRQ
    52.5   * (isa_irq) is the only exception in this source code.
    52.6   */
    52.7 -#include <linux/config.h>
    52.8  
    52.9  #include <linux/acpi.h>
   52.10  #include <linux/init.h>
   52.11 @@ -525,7 +524,7 @@ iosapic_startup_edge_irq (unsigned int i
   52.12  static void
   52.13  iosapic_ack_edge_irq (unsigned int irq)
   52.14  {
   52.15 -	irq_desc_t *idesc = irq_descp(irq);
   52.16 +	irq_desc_t *idesc = irq_desc + irq;
   52.17  
   52.18  	move_native_irq(irq);
   52.19  	/*
   52.20 @@ -731,14 +730,14 @@ register_intr (unsigned int gsi, int vec
   52.21  	else
   52.22  		irq_type = &irq_type_iosapic_level;
   52.23  
   52.24 -	idesc = irq_descp(vector);
   52.25 -	if (idesc->handler != irq_type) {
   52.26 -		if (idesc->handler != &no_irq_type)
   52.27 +	idesc = irq_desc + vector;
   52.28 +	if (idesc->chip != irq_type) {
   52.29 +		if (idesc->chip != &no_irq_type)
   52.30  			printk(KERN_WARNING
   52.31  			       "%s: changing vector %d from %s to %s\n",
   52.32  			       __FUNCTION__, vector,
   52.33 -			       idesc->handler->typename, irq_type->typename);
   52.34 -		idesc->handler = irq_type;
   52.35 +			       idesc->chip->typename, irq_type->typename);
   52.36 +		idesc->chip = irq_type;
   52.37  	}
   52.38  	return 0;
   52.39  }
   52.40 @@ -865,14 +864,14 @@ again:
   52.41  			return -ENOSPC;
   52.42  	}
   52.43  
   52.44 -	spin_lock_irqsave(&irq_descp(vector)->lock, flags);
   52.45 +	spin_lock_irqsave(&irq_desc[vector].lock, flags);
   52.46  	spin_lock(&iosapic_lock);
   52.47  	{
   52.48  		if (gsi_to_vector(gsi) > 0) {
   52.49  			if (list_empty(&iosapic_intr_info[vector].rtes))
   52.50  				free_irq_vector(vector);
   52.51  			spin_unlock(&iosapic_lock);
   52.52 -			spin_unlock_irqrestore(&irq_descp(vector)->lock,
   52.53 +			spin_unlock_irqrestore(&irq_desc[vector].lock,
   52.54  					       flags);
   52.55  			goto again;
   52.56  		}
   52.57 @@ -882,7 +881,7 @@ again:
   52.58  			      polarity, trigger);
   52.59  		if (err < 0) {
   52.60  			spin_unlock(&iosapic_lock);
   52.61 -			spin_unlock_irqrestore(&irq_descp(vector)->lock,
   52.62 +			spin_unlock_irqrestore(&irq_desc[vector].lock,
   52.63  					       flags);
   52.64  			return err;
   52.65  		}
   52.66 @@ -897,7 +896,7 @@ again:
   52.67  		set_rte(gsi, vector, dest, mask);
   52.68  	}
   52.69  	spin_unlock(&iosapic_lock);
   52.70 -	spin_unlock_irqrestore(&irq_descp(vector)->lock, flags);
   52.71 +	spin_unlock_irqrestore(&irq_desc[vector].lock, flags);
   52.72  
   52.73  	printk(KERN_INFO "GSI %u (%s, %s) -> CPU %d (0x%04x) vector %d\n",
   52.74  	       gsi, (trigger == IOSAPIC_EDGE ? "edge" : "level"),
   52.75 @@ -932,7 +931,7 @@ iosapic_unregister_intr (unsigned int gs
   52.76  	}
   52.77  	vector = irq_to_vector(irq);
   52.78  
   52.79 -	idesc = irq_descp(irq);
   52.80 +	idesc = irq_desc + irq;
   52.81  	spin_lock_irqsave(&idesc->lock, flags);
   52.82  	spin_lock(&iosapic_lock);
   52.83  	{
   52.84 @@ -975,7 +974,7 @@ iosapic_unregister_intr (unsigned int gs
   52.85  			BUG_ON(iosapic_intr_info[vector].count);
   52.86  
   52.87  			/* Clear the interrupt controller descriptor */
   52.88 -			idesc->handler = &no_irq_type;
   52.89 +			idesc->chip = &no_irq_type;
   52.90  
   52.91  			/* Clear the interrupt information */
   52.92  			memset(&iosapic_intr_info[vector], 0,
    53.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/irq_ia64.c	Fri Jan 12 15:32:03 2007 +0000
    53.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/irq_ia64.c	Wed Jan 17 18:41:22 2007 +0000
    53.3 @@ -14,7 +14,6 @@
    53.4   *						Added CPU Hotplug handling for IPF.
    53.5   */
    53.6  
    53.7 -#include <linux/config.h>
    53.8  #include <linux/module.h>
    53.9  
   53.10  #include <linux/jiffies.h>
   53.11 @@ -49,6 +48,10 @@
   53.12  
   53.13  #define IRQ_DEBUG	0
   53.14  
   53.15 +/* These can be overridden in platform_irq_init */
   53.16 +int ia64_first_device_vector = IA64_DEF_FIRST_DEVICE_VECTOR;
   53.17 +int ia64_last_device_vector = IA64_DEF_LAST_DEVICE_VECTOR;
   53.18 +
   53.19  /* default base addr of IPI table */
   53.20  void __iomem *ipi_base_addr = ((void __iomem *)
   53.21  			       (__IA64_UNCACHED_OFFSET | IA64_IPI_DEFAULT_BASE_ADDR));
   53.22 @@ -63,7 +66,7 @@ void __iomem *ipi_base_addr = ((void __i
   53.23  };
   53.24  EXPORT_SYMBOL(isa_irq_to_vector_map);
   53.25  
   53.26 -static unsigned long ia64_vector_mask[BITS_TO_LONGS(IA64_NUM_DEVICE_VECTORS)];
   53.27 +static unsigned long ia64_vector_mask[BITS_TO_LONGS(IA64_MAX_DEVICE_VECTORS)];
   53.28  
   53.29  int
   53.30  assign_irq_vector (int irq)
   53.31 @@ -106,6 +109,19 @@ free_irq_vector (int vector)
   53.32  		printk(KERN_WARNING "%s: double free!\n", __FUNCTION__);
   53.33  }
   53.34  
   53.35 +int
   53.36 +reserve_irq_vector (int vector)
   53.37 +{
   53.38 +	int pos;
   53.39 +
   53.40 +	if (vector < IA64_FIRST_DEVICE_VECTOR ||
   53.41 +	    vector > IA64_LAST_DEVICE_VECTOR)
   53.42 +		return -EINVAL;
   53.43 +
   53.44 +	pos = vector - IA64_FIRST_DEVICE_VECTOR;
   53.45 +	return test_and_set_bit(pos, ia64_vector_mask);
   53.46 +}
   53.47 +
   53.48  #ifdef CONFIG_SMP
   53.49  #	define IS_RESCHEDULE(vec)	(vec == IA64_IPI_RESCHEDULE)
   53.50  #else
   53.51 @@ -236,7 +252,7 @@ extern irqreturn_t handle_IPI (int irq, 
   53.52  
   53.53  static struct irqaction ipi_irqaction = {
   53.54  	.handler =	handle_IPI,
   53.55 -	.flags =	SA_INTERRUPT,
   53.56 +	.flags =	IRQF_DISABLED,
   53.57  	.name =		"IPI"
   53.58  };
   53.59  #endif
   53.60 @@ -501,9 +517,9 @@ register_percpu_irq (ia64_vector vec, st
   53.61  
   53.62  	for (irq = 0; irq < NR_IRQS; ++irq)
   53.63  		if (irq_to_vector(irq) == vec) {
   53.64 -			desc = irq_descp(irq);
   53.65 +			desc = irq_desc + irq;
   53.66  			desc->status |= IRQ_PER_CPU;
   53.67 -			desc->handler = &irq_type_ia64_lsapic;
   53.68 +			desc->chip = &irq_type_ia64_lsapic;
   53.69  			if (action)
   53.70  				setup_irq(irq, action);
   53.71  		}
    54.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/pal.S	Fri Jan 12 15:32:03 2007 +0000
    54.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/pal.S	Wed Jan 17 18:41:22 2007 +0000
    54.3 @@ -218,12 +218,7 @@ 1:	{
    54.4  	.body
    54.5  	;;
    54.6  	ld8 loc2 = [loc2]		// loc2 <- entry point
    54.7 -	mov out0 = in0		// first argument
    54.8 -	mov out1 = in1		// copy arg2
    54.9 -	mov out2 = in2		// copy arg3
   54.10 -	mov out3 = in3		// copy arg3
   54.11 -	;;
   54.12 -	mov loc3 = psr		// save psr
   54.13 +	mov loc3 = psr			// save psr
   54.14  	;;
   54.15  	mov loc4=ar.rsc			// save RSE configuration
   54.16  	dep.z loc2=loc2,0,61		// convert pal entry point to physical
   54.17 @@ -237,18 +232,23 @@ 1:	{
   54.18  	;;
   54.19  	andcm r16=loc3,r16		// removes bits to clear from psr
   54.20  	br.call.sptk.many rp=ia64_switch_mode_phys
   54.21 -.ret6:
   54.22 +
   54.23 +	mov out0 = in0			// first argument
   54.24 +	mov out1 = in1			// copy arg2
   54.25 +	mov out2 = in2			// copy arg3
   54.26 +	mov out3 = in3			// copy arg3
   54.27  	mov loc5 = r19
   54.28  	mov loc6 = r20
   54.29 +
   54.30  	br.call.sptk.many rp=b7		// now make the call
   54.31 -.ret7:
   54.32 +
   54.33  	mov ar.rsc=0			// put RSE in enforced lazy, LE mode
   54.34  	mov r16=loc3			// r16= original psr
   54.35  	mov r19=loc5
   54.36  	mov r20=loc6
   54.37  	br.call.sptk.many rp=ia64_switch_mode_virt	// return to virtual mode
   54.38  
   54.39 -.ret8:	mov psr.l  = loc3		// restore init PSR
   54.40 +	mov psr.l  = loc3		// restore init PSR
   54.41  	mov ar.pfs = loc1
   54.42  	mov rp = loc0
   54.43  	;;
    55.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/perfmon.c	Fri Jan 12 15:32:03 2007 +0000
    55.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/perfmon.c	Wed Jan 17 18:41:22 2007 +0000
    55.3 @@ -19,7 +19,6 @@
    55.4   * 	http://www.hpl.hp.com/research/linux/perfmon
    55.5   */
    55.6  
    55.7 -#include <linux/config.h>
    55.8  #include <linux/module.h>
    55.9  #include <linux/kernel.h>
   55.10  #include <linux/sched.h>
   55.11 @@ -554,7 +553,6 @@ static ctl_table pfm_sysctl_root[] = {
   55.12  static struct ctl_table_header *pfm_sysctl_header;
   55.13  
   55.14  static int pfm_context_unload(pfm_context_t *ctx, void *arg, int count, struct pt_regs *regs);
   55.15 -static int pfm_flush(struct file *filp);
   55.16  
   55.17  #define pfm_get_cpu_var(v)		__ia64_per_cpu_var(v)
   55.18  #define pfm_get_cpu_data(a,b)		per_cpu(a, b)
   55.19 @@ -617,10 +615,11 @@ pfm_get_unmapped_area(struct file *file,
   55.20  }
   55.21  
   55.22  
   55.23 -static struct super_block *
   55.24 -pfmfs_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, void *data)
   55.25 +static int
   55.26 +pfmfs_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, void *data,
   55.27 +	     struct vfsmount *mnt)
   55.28  {
   55.29 -	return get_sb_pseudo(fs_type, "pfm:", NULL, PFMFS_MAGIC);
   55.30 +	return get_sb_pseudo(fs_type, "pfm:", NULL, PFMFS_MAGIC, mnt);
   55.31  }
   55.32  
   55.33  static struct file_system_type pfm_fs_type = {
   55.34 @@ -1796,7 +1795,7 @@ pfm_syswide_cleanup_other_cpu(pfm_contex
   55.35   * When caller is self-monitoring, the context is unloaded.
   55.36   */
   55.37  static int
   55.38 -pfm_flush(struct file *filp)
   55.39 +pfm_flush(struct file *filp, fl_owner_t id)
   55.40  {
   55.41  	pfm_context_t *ctx;
   55.42  	struct task_struct *task;
   55.43 @@ -5026,13 +5025,15 @@ abort_locked:
   55.44  	if (likely(ctx)) {
   55.45  		DPRINT(("context unlocked\n"));
   55.46  		UNPROTECT_CTX(ctx, flags);
   55.47 -		fput(file);
   55.48  	}
   55.49  
   55.50  	/* copy argument back to user, if needed */
   55.51  	if (call_made && PFM_CMD_RW_ARG(cmd) && copy_to_user(arg, args_k, base_sz*count)) ret = -EFAULT;
   55.52  
   55.53  error_args:
   55.54 +	if (file)
   55.55 +		fput(file);
   55.56 +
   55.57  	kfree(args_k);
   55.58  
   55.59  	DPRINT(("cmd=%s ret=%ld\n", PFM_CMD_NAME(cmd), ret));
   55.60 @@ -6254,7 +6255,7 @@ pfm_load_regs (struct task_struct *task)
   55.61  		/*
   55.62  		 * will replay the PMU interrupt
   55.63  		 */
   55.64 -		if (need_irq_resend) hw_resend_irq(NULL, IA64_PERFMON_VECTOR);
   55.65 +		if (need_irq_resend) ia64_resend_irq(IA64_PERFMON_VECTOR);
   55.66  
   55.67  		pfm_stats[smp_processor_id()].pfm_replay_ovfl_intr_count++;
   55.68  	}
   55.69 @@ -6394,7 +6395,7 @@ pfm_load_regs (struct task_struct *task)
   55.70  		/*
   55.71  		 * will replay the PMU interrupt
   55.72  		 */
   55.73 -		if (need_irq_resend) hw_resend_irq(NULL, IA64_PERFMON_VECTOR);
   55.74 +		if (need_irq_resend) ia64_resend_irq(IA64_PERFMON_VECTOR);
   55.75  
   55.76  		pfm_stats[smp_processor_id()].pfm_replay_ovfl_intr_count++;
   55.77  	}
   55.78 @@ -6529,7 +6530,7 @@ pfm_flush_pmds(struct task_struct *task,
   55.79  
   55.80  static struct irqaction perfmon_irqaction = {
   55.81  	.handler = pfm_interrupt_handler,
   55.82 -	.flags   = SA_INTERRUPT,
   55.83 +	.flags   = IRQF_DISABLED,
   55.84  	.name    = "perfmon"
   55.85  };
   55.86  
    56.1 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c	Fri Jan 12 15:32:03 2007 +0000
    56.2 +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c	Wed Jan 17 18:41:22 2007 +0000
    56.3 @@ -22,7 +22,6 @@
    56.4   * 06/24/99 W.Drummond	added boot_cpu_data.
    56.5   * 05/28/05 Z. Menyhart	Dynamic stride size for "flush_icache_range()"
    56.6   */
    56.7 -#include <linux/config.h>
    56.8  #include <linux/module.h>
    56.9  #include <linux/init.h>
   56.10  
   56.11 @@ -36,7 +35,7 @@
   56.12  #include <linux/seq_file.h>
   56.13  #include <linux/string.h>
   56.14  #include <linux/threads.h>
   56.15 -#include <linux/tty.h>
   56.16 +#include <linux/screen_info.h>
   56.17  #include <linux/dmi.h>
   56.18  #include <linux/serial.h>
   56.19  #include <linux/serial_core.h>
    57.1 --- a/linux-2.6-xen-sparse/arch/ia64/mm/ioremap.c	Fri Jan 12 15:32:03 2007 +0000
    57.2 +++ b/linux-2.6-xen-sparse/arch/ia64/mm/ioremap.c	Wed Jan 17 18:41:22 2007 +0000
    57.3 @@ -11,6 +11,7 @@
    57.4  #include <linux/module.h>
    57.5  #include <linux/efi.h>
    57.6  #include <asm/io.h>
    57.7 +#include <asm/meminit.h>
    57.8  
    57.9  static inline void __iomem *
   57.10  __ioremap (unsigned long offset, unsigned long size)
   57.11 @@ -24,16 +25,29 @@ static inline void __iomem *
   57.12  void __iomem *
   57.13  ioremap (unsigned long offset, unsigned long size)
   57.14  {
   57.15 -	if (efi_mem_attribute_range(offset, size, EFI_MEMORY_WB))
   57.16 -		return phys_to_virt(offset);
   57.17 +	u64 attr;
   57.18 +	unsigned long gran_base, gran_size;
   57.19  
   57.20 -	if (efi_mem_attribute_range(offset, size, EFI_MEMORY_UC))
   57.21 +	/*
   57.22 +	 * For things in kern_memmap, we must use the same attribute
   57.23 +	 * as the rest of the kernel.  For more details, see
   57.24 +	 * Documentation/ia64/aliasing.txt.
   57.25 +	 */
   57.26 +	attr = kern_mem_attribute(offset, size);
   57.27 +	if (attr & EFI_MEMORY_WB)
   57.28 +		return (void __iomem *) phys_to_virt(offset);
   57.29 +	else if (attr & EFI_MEMORY_UC)
   57.30  		return __ioremap(offset, size);
   57.31  
   57.32  	/*
   57.33 -	 * Someday this should check ACPI resources so we
   57.34 -	 * can do the right thing for hot-plugged regions.
   57.35 +	 * Some chipsets don't support UC access to memory.  If
   57.36 +	 * WB is supported for the whole granule, we prefer that.
   57.37  	 */
   57.38 +	gran_base = GRANULEROUNDDOWN(offset);
   57.39 +	gran_size = GRANULEROUNDUP(offset + size) - gran_base;
   57.40 +	if (efi_mem_attribute(gran_base, gran_size) & EFI_MEMORY_WB)
   57.41 +		return (void __iomem *) phys_to_virt(offset);
   57.42 +
   57.43  	return __ioremap(offset, size);
   57.44  }
   57.45  EXPORT_SYMBOL(ioremap);
   57.46 @@ -41,6 +55,9 @@ EXPORT_SYMBOL(ioremap);
   57.47  void __iomem *
   57.48  ioremap_nocache (unsigned long offset, unsigned long size)
   57.49  {
   57.50 +	if (kern_mem_attribute(offset, size) & EFI_MEMORY_WB)
   57.51 +		return NULL;
   57.52 +
   57.53  	return __ioremap(offset, size);
   57.54  }
   57.55  EXPORT_SYMBOL(ioremap_nocache);
    58.1 --- a/linux-2.6-xen-sparse/arch/ia64/oprofile/perfmon.c	Fri Jan 12 15:32:03 2007 +0000
    58.2 +++ b/linux-2.6-xen-sparse/arch/ia64/oprofile/perfmon.c	Wed Jan 17 18:41:22 2007 +0000
    58.3 @@ -8,7 +8,6 @@
    58.4   */
    58.5  
    58.6  #include <linux/kernel.h>
    58.7 -#include <linux/config.h>
    58.8  #include <linux/oprofile.h>
    58.9  #include <linux/sched.h>
   58.10  #include <asm/perfmon.h>
    59.1 --- a/linux-2.6-xen-sparse/arch/um/kernel/physmem.c	Fri Jan 12 15:32:03 2007 +0000
    59.2 +++ b/linux-2.6-xen-sparse/arch/um/kernel/physmem.c	Wed Jan 17 18:41:22 2007 +0000
    59.3 @@ -69,7 +69,7 @@ static void insert_phys_mapping(struct p
    59.4  		panic("Physical remapping for %p already present",
    59.5  		      desc->virt);
    59.6  
    59.7 -	rb_link_node(&desc->rb, (*n)->rb_parent, n);
    59.8 +	rb_link_node(&desc->rb, rb_parent(*n), n);
    59.9  	rb_insert_color(&desc->rb, &phys_mappings);
   59.10  }
   59.11  
   59.12 @@ -319,7 +319,7 @@ void map_memory(unsigned long virt, unsi
   59.13  	}
   59.14  }
   59.15  
   59.16 -extern int __syscall_stub_start, __binary_start;
   59.17 +extern int __syscall_stub_start;
   59.18  
   59.19  void setup_physmem(unsigned long start, unsigned long reserve_end,
   59.20  		   unsigned long len, unsigned long long highmem)
    60.1 --- a/linux-2.6-xen-sparse/arch/x86_64/Kconfig	Fri Jan 12 15:32:03 2007 +0000
    60.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/Kconfig	Wed Jan 17 18:41:22 2007 +0000
    60.3 @@ -24,6 +24,14 @@ config X86
    60.4  	bool
    60.5  	default y
    60.6  
    60.7 +config LOCKDEP_SUPPORT
    60.8 +	bool
    60.9 +	default y
   60.10 +
   60.11 +config STACKTRACE_SUPPORT
   60.12 +	bool
   60.13 +	default y
   60.14 +
   60.15  config SEMAPHORE_SLEEPERS
   60.16  	bool
   60.17  	default y
   60.18 @@ -77,6 +85,10 @@ config DMI
   60.19  	bool
   60.20  	default y
   60.21  
   60.22 +config AUDIT_ARCH
   60.23 +	bool
   60.24 +	default y
   60.25 +
   60.26  source "init/Kconfig"
   60.27  
   60.28  
   60.29 @@ -282,7 +294,7 @@ config SCHED_SMT
   60.30  
   60.31  config SCHED_MC
   60.32  	bool "Multi-core scheduler support"
   60.33 -	depends on SMP
   60.34 +	depends on SMP && !X86_64_XEN
   60.35  	default y
   60.36  	help
   60.37  	  Multi-core scheduler support improves the CPU scheduler's decision
   60.38 @@ -324,6 +336,7 @@ config X86_64_ACPI_NUMA
   60.39         bool "ACPI NUMA detection"
   60.40         depends on NUMA
   60.41         select ACPI 
   60.42 +	select PCI
   60.43         select ACPI_NUMA
   60.44         default y
   60.45         help
   60.46 @@ -395,6 +408,8 @@ config HOTPLUG_CPU
   60.47  		can be controlled through /sys/devices/system/cpu/cpu#.
   60.48  		Say N if you want to disable CPU hotplug.
   60.49  
   60.50 +config ARCH_ENABLE_MEMORY_HOTPLUG
   60.51 +	def_bool y
   60.52  
   60.53  config HPET_TIMER
   60.54  	bool
   60.55 @@ -412,27 +427,47 @@ config HPET_EMULATE_RTC
   60.56  	bool "Provide RTC interrupt"
   60.57  	depends on HPET_TIMER && RTC=y
   60.58  
   60.59 -config GART_IOMMU
   60.60 -	bool "K8 GART IOMMU support"
   60.61 +# Mark as embedded because too many people got it wrong.
   60.62 +# The code disables itself when not needed.
   60.63 +config IOMMU
   60.64 +	bool "IOMMU support" if EMBEDDED
   60.65  	default y
   60.66  	select SWIOTLB
   60.67 +	select AGP
   60.68  	depends on PCI && !X86_64_XEN
   60.69  	help
   60.70 -	  Support for hardware IOMMU in AMD's Opteron/Athlon64 Processors
   60.71 -	  and for the bounce buffering software IOMMU.
   60.72 -	  Needed to run systems with more than 3GB of memory properly with
   60.73 -	  32-bit PCI devices that do not support DAC (Double Address Cycle).
   60.74 -	  The IOMMU can be turned off at runtime with the iommu=off parameter.
   60.75 -  	  Normally the kernel will take the right choice by itself.
   60.76 -  	  This option includes a driver for the AMD Opteron/Athlon64 IOMMU
   60.77 -  	  northbridge and a software emulation used on other systems without
   60.78 -	  hardware IOMMU.  If unsure, say Y.
   60.79 +	  Support for full DMA access of devices with 32bit memory access only
   60.80 +	  on systems with more than 3GB. This is usually needed for USB,
   60.81 +	  sound, many IDE/SATA chipsets and some other devices.
   60.82 +	  Provides a driver for the AMD Athlon64/Opteron/Turion/Sempron GART
   60.83 +	  based IOMMU and a software bounce buffer based IOMMU used on Intel
   60.84 +	  systems and as fallback.
   60.85 +	  The code is only active when needed (enough memory and limited
   60.86 +	  device) unless CONFIG_IOMMU_DEBUG or iommu=force is specified
   60.87 +	  too.
   60.88  
   60.89 -# need this always enabled with GART_IOMMU for the VIA workaround
   60.90 +config CALGARY_IOMMU
   60.91 +	bool "IBM Calgary IOMMU support"
   60.92 +	default y
   60.93 +	select SWIOTLB
   60.94 +	depends on PCI && EXPERIMENTAL
   60.95 +	help
   60.96 +	  Support for hardware IOMMUs in IBM's xSeries x366 and x460
   60.97 +	  systems. Needed to run systems with more than 3GB of memory
   60.98 +	  properly with 32-bit PCI devices that do not support DAC
   60.99 +	  (Double Address Cycle). Calgary also supports bus level
  60.100 +	  isolation, where all DMAs pass through the IOMMU.  This
  60.101 +	  prevents them from going anywhere except their intended
  60.102 +	  destination. This catches hard-to-find kernel bugs and
  60.103 +	  mis-behaving drivers and devices that do not use the DMA-API
  60.104 +	  properly to set up their DMA buffers.  The IOMMU can be
  60.105 +	  turned off at boot time with the iommu=off parameter.
  60.106 +	  Normally the kernel will make the right choice by itself.
  60.107 +	  If unsure, say Y.
  60.108 +
  60.109 +# need this always selected by IOMMU for the VIA workaround
  60.110  config SWIOTLB
  60.111  	bool
  60.112 -	default y
  60.113 -	depends on GART_IOMMU
  60.114  
  60.115  config X86_MCE
  60.116  	bool "Machine check support" if EMBEDDED
  60.117 @@ -466,10 +501,10 @@ config KEXEC
  60.118  	help
  60.119  	  kexec is a system call that implements the ability to shutdown your
  60.120  	  current kernel, and to start another kernel.  It is like a reboot
  60.121 -	  but it is indepedent of the system firmware.   And like a reboot
  60.122 +	  but it is independent of the system firmware.   And like a reboot
  60.123  	  you can start any kernel with it, not just Linux.
  60.124  
  60.125 -	  The name comes from the similiarity to the exec system call.
  60.126 +	  The name comes from the similarity to the exec system call.
  60.127  
  60.128  	  It is an ongoing process to be certain the hardware in a machine
  60.129  	  is properly shutdown, so do not be surprised if this code does not
  60.130 @@ -529,6 +564,10 @@ config REORDER
  60.131           optimal TLB usage. If you have pretty much any version of binutils, 
  60.132  	 this can increase your kernel build time by roughly one minute.
  60.133  
  60.134 +config K8_NB
  60.135 +	def_bool y
  60.136 +	depends on AGP_AMD64 || IOMMU || (PCI && NUMA)
  60.137 +
  60.138  endmenu
  60.139  
  60.140  #
    61.1 --- a/linux-2.6-xen-sparse/arch/x86_64/Makefile	Fri Jan 12 15:32:03 2007 +0000
    61.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/Makefile	Wed Jan 17 18:41:22 2007 +0000
    61.3 @@ -27,6 +27,7 @@ LDFLAGS_vmlinux :=
    61.4  CHECKFLAGS      += -D__x86_64__ -m64
    61.5  
    61.6  cflags-y	:=
    61.7 +cflags-kernel-y	:=
    61.8  cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8)
    61.9  cflags-$(CONFIG_MPSC) += $(call cc-option,-march=nocona)
   61.10  cflags-$(CONFIG_GENERIC_CPU) += $(call cc-option,-mtune=generic)
   61.11 @@ -39,7 +40,7 @@ cflags-y += -m64
   61.12  cflags-y += -mno-red-zone
   61.13  cflags-y += -mcmodel=kernel
   61.14  cflags-y += -pipe
   61.15 -cflags-$(CONFIG_REORDER) += -ffunction-sections
   61.16 +cflags-kernel-$(CONFIG_REORDER) += -ffunction-sections
   61.17  # this makes reading assembly source easier, but produces worse code
   61.18  # actually it makes the kernel smaller too.
   61.19  cflags-y += -fno-reorder-blocks
   61.20 @@ -59,6 +60,7 @@ cflags-y += $(call cc-option,-funit-at-a
   61.21  cflags-y += $(call cc-option,-mno-sse -mno-mmx -mno-sse2 -mno-3dnow,)
   61.22  
   61.23  CFLAGS += $(cflags-y)
   61.24 +CFLAGS_KERNEL += $(cflags-kernel-y)
   61.25  AFLAGS += -m64
   61.26  
   61.27  head-y := arch/x86_64/kernel/head.o arch/x86_64/kernel/head64.o arch/x86_64/kernel/init_task.o
    62.1 --- a/linux-2.6-xen-sparse/arch/x86_64/ia32/Makefile	Fri Jan 12 15:32:03 2007 +0000
    62.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/ia32/Makefile	Wed Jan 17 18:41:22 2007 +0000
    62.3 @@ -11,6 +11,9 @@ obj-$(CONFIG_IA32_EMULATION) += $(sysv-y
    62.4  
    62.5  obj-$(CONFIG_IA32_AOUT) += ia32_aout.o
    62.6  
    62.7 +audit-class-$(CONFIG_AUDIT) := audit.o
    62.8 +obj-$(CONFIG_IA32_EMULATION) += $(audit-class-y)
    62.9 +
   62.10  $(obj)/syscall32_syscall.o: \
   62.11  	$(foreach F,sysenter syscall,$(obj)/vsyscall-$F.so)
   62.12  
   62.13 @@ -20,6 +23,7 @@ targets := $(foreach F,sysenter syscall,
   62.14  # The DSO images are built using a special linker script
   62.15  quiet_cmd_syscall = SYSCALL $@
   62.16        cmd_syscall = $(CC) -m32 -nostdlib -shared -s \
   62.17 +			  $(call ld-option, -Wl$(comma)--hash-style=sysv) \
   62.18  			   -Wl,-soname=linux-gate.so.1 -o $@ \
   62.19  			   -Wl,-T,$(filter-out FORCE,$^)
   62.20  
    63.1 --- a/linux-2.6-xen-sparse/arch/x86_64/ia32/ia32entry-xen.S	Fri Jan 12 15:32:03 2007 +0000
    63.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/ia32/ia32entry-xen.S	Wed Jan 17 18:41:22 2007 +0000
    63.3 @@ -13,6 +13,7 @@
    63.4  #include <asm/thread_info.h>	
    63.5  #include <asm/segment.h>
    63.6  #include <asm/vsyscall32.h>
    63.7 +#include <asm/irqflags.h>
    63.8  #include <linux/linkage.h>
    63.9  
   63.10  #define __XEN_X86_64 1
   63.11 @@ -92,6 +93,10 @@ ENTRY(ia32_sysenter_target)
   63.12  	__swapgs 
   63.13  	movq	%gs:pda_kernelstack, %rsp
   63.14  	addq	$(PDA_STACKOFFSET),%rsp
   63.15 +	/*
   63.16 +	 * No need to follow this irqs on/off section: the syscall
   63.17 +	 * disabled irqs, here we enable it straight after entry:
   63.18 +	 */
   63.19  	XEN_UNBLOCK_EVENTS(%r11)	
   63.20  	__sti
   63.21   	movl	%ebp,%ebp		/* zero extension */
   63.22 @@ -116,7 +121,7 @@ ENTRY(ia32_sysenter_target)
   63.23  	pushq	%rax
   63.24  	CFI_ADJUST_CFA_OFFSET 8
   63.25  	cld
   63.26 -	SAVE_ARGS 0,0,1
   63.27 +	SAVE_ARGS 0,0,0
   63.28   	/* no need to do an access_ok check here because rbp has been
   63.29   	   32bit zero extended */ 
   63.30  1:	movl	(%rbp),%r9d
   63.31 @@ -137,6 +142,7 @@ sysenter_do_call:
   63.32  	GET_THREAD_INFO(%r10)
   63.33  	XEN_BLOCK_EVENTS(%r11)	
   63.34  	__cli
   63.35 +	TRACE_IRQS_OFF
   63.36  	testl	$_TIF_ALLWORK_MASK,threadinfo_flags(%r10)
   63.37  	jnz	int_ret_from_sys_call
   63.38  	andl    $~TS_COMPAT,threadinfo_status(%r10)
   63.39 @@ -151,6 +157,7 @@ sysenter_do_call:
   63.40  	CFI_REGISTER rsp,rcx
   63.41  	movl	$VSYSCALL32_SYSEXIT,%edx	/* User %eip */
   63.42  	CFI_REGISTER rip,rdx
   63.43 +	TRACE_IRQS_ON
   63.44  	__swapgs
   63.45  	XEN_UNBLOCK_EVENTS(%r11)		
   63.46  	__sti		/* sti only takes effect after the next instruction */
   63.47 @@ -175,6 +182,7 @@ 1:	movl	(%rbp),%r9d
   63.48  	.previous
   63.49  	jmp	sysenter_do_call
   63.50  	CFI_ENDPROC
   63.51 +ENDPROC(ia32_sysenter_target)
   63.52  
   63.53  /*
   63.54   * 32bit SYSCALL instruction entry.
   63.55 @@ -198,13 +206,17 @@ 1:	movl	(%rbp),%r9d
   63.56   */ 	
   63.57  ENTRY(ia32_cstar_target)
   63.58  	CFI_STARTPROC32	simple
   63.59 -	CFI_DEF_CFA	rsp,0
   63.60 +	CFI_DEF_CFA	rsp,PDA_STACKOFFSET
   63.61  	CFI_REGISTER	rip,rcx
   63.62  	/*CFI_REGISTER	rflags,r11*/
   63.63  	__swapgs
   63.64  	movl	%esp,%r8d
   63.65  	CFI_REGISTER	rsp,r8
   63.66  	movq	%gs:pda_kernelstack,%rsp
   63.67 +	/*
   63.68 +	 * No need to follow this irqs on/off section: the syscall
   63.69 +	 * disabled irqs and here we enable it straight after entry:
   63.70 +	 */
   63.71  	XEN_UNBLOCK_EVENTS(%r11)	
   63.72  	__sti
   63.73  	SAVE_ARGS 8,1,1
   63.74 @@ -241,6 +253,7 @@ cstar_do_call:
   63.75  	GET_THREAD_INFO(%r10)
   63.76  	XEN_BLOCK_EVENTS(%r11)		
   63.77  	__cli
   63.78 +	TRACE_IRQS_OFF
   63.79  	testl $_TIF_ALLWORK_MASK,threadinfo_flags(%r10)
   63.80  	jnz  int_ret_from_sys_call
   63.81  	andl $~TS_COMPAT,threadinfo_status(%r10)
   63.82 @@ -249,6 +262,7 @@ cstar_do_call:
   63.83  	CFI_REGISTER rip,rcx
   63.84  	movl EFLAGS-ARGOFFSET(%rsp),%r11d	
   63.85  	/*CFI_REGISTER rflags,r11*/
   63.86 +	TRACE_IRQS_ON
   63.87  	movl RSP-ARGOFFSET(%rsp),%esp
   63.88  	CFI_RESTORE rsp
   63.89  	__swapgs
   63.90 @@ -271,6 +285,7 @@ 1:	movl	(%r8),%r9d
   63.91  	.quad 1b,ia32_badarg
   63.92  	.previous
   63.93  	jmp cstar_do_call
   63.94 +END(ia32_cstar_target)
   63.95  				
   63.96  ia32_badarg:
   63.97  	movq $-EFAULT,%rax
   63.98 @@ -307,6 +322,10 @@ ENTRY(ia32_syscall)
   63.99  	/*CFI_REL_OFFSET	cs,CS-RIP*/
  63.100  	CFI_REL_OFFSET	rip,RIP-RIP
  63.101  	__swapgs
  63.102 +	/*
  63.103 +	 * No need to follow this irqs on/off section: the syscall
  63.104 +	 * disabled irqs and here we enable it straight after entry:
  63.105 +	 */
  63.106  	XEN_UNBLOCK_EVENTS(%r11)
  63.107  	__sti
  63.108  	movq (%rsp),%rcx
  63.109 @@ -341,16 +360,13 @@ ia32_tracesys:
  63.110  	LOAD_ARGS ARGOFFSET  /* reload args from stack in case ptrace changed it */
  63.111  	RESTORE_REST
  63.112  	jmp ia32_do_syscall
  63.113 +END(ia32_syscall)
  63.114  
  63.115  ia32_badsys:
  63.116  	movq $0,ORIG_RAX-ARGOFFSET(%rsp)
  63.117  	movq $-ENOSYS,RAX-ARGOFFSET(%rsp)
  63.118  	jmp int_ret_from_sys_call
  63.119  
  63.120 -ni_syscall:
  63.121 -	movq %rax,%rdi
  63.122 -	jmp  sys32_ni_syscall			
  63.123 -
  63.124  quiet_ni_syscall:
  63.125  	movq $-ENOSYS,%rax
  63.126  	ret
  63.127 @@ -397,10 +413,10 @@ ENTRY(ia32_ptregs_common)
  63.128  	RESTORE_REST
  63.129  	jmp  ia32_sysret	/* misbalances the return cache */
  63.130  	CFI_ENDPROC
  63.131 +END(ia32_ptregs_common)
  63.132  
  63.133  	.section .rodata,"a"
  63.134  	.align 8
  63.135 -	.globl ia32_sys_call_table
  63.136  ia32_sys_call_table:
  63.137  	.quad sys_restart_syscall
  63.138  	.quad sys_exit
  63.139 @@ -723,4 +739,5 @@ ia32_sys_call_table:
  63.140  	.quad sys_sync_file_range
  63.141  	.quad sys_tee
  63.142  	.quad compat_sys_vmsplice
  63.143 +	.quad compat_sys_move_pages
  63.144  ia32_syscall_end:		
    64.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/Makefile	Fri Jan 12 15:32:03 2007 +0000
    64.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/Makefile	Wed Jan 17 18:41:22 2007 +0000
    64.3 @@ -8,8 +8,9 @@ obj-y	:= process.o signal.o entry.o trap
    64.4  		ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_x86_64.o \
    64.5  		x8664_ksyms.o i387.o syscall.o vsyscall.o \
    64.6  		setup64.o bootflag.o e820.o reboot.o quirks.o i8237.o \
    64.7 -		pci-dma.o pci-nommu.o
    64.8 +		pci-dma.o pci-nommu.o alternative.o
    64.9  
   64.10 +obj-$(CONFIG_STACKTRACE)	+= stacktrace.o
   64.11  obj-$(CONFIG_X86_MCE)         += mce.o
   64.12  obj-$(CONFIG_X86_MCE_INTEL)	+= mce_intel.o
   64.13  obj-$(CONFIG_X86_MCE_AMD)	+= mce_amd.o
   64.14 @@ -30,11 +31,14 @@ obj-$(CONFIG_ACPI_SLEEP)	+= suspend.o
   64.15  obj-$(CONFIG_SOFTWARE_SUSPEND)	+= suspend_asm.o
   64.16  obj-$(CONFIG_CPU_FREQ)		+= cpufreq/
   64.17  obj-$(CONFIG_EARLY_PRINTK)	+= early_printk.o
   64.18 -obj-$(CONFIG_GART_IOMMU)	+= pci-gart.o aperture.o
   64.19 +obj-$(CONFIG_IOMMU)		+= pci-gart.o aperture.o
   64.20 +obj-$(CONFIG_CALGARY_IOMMU)	+= pci-calgary.o tce.o
   64.21  obj-$(CONFIG_SWIOTLB)		+= pci-swiotlb.o
   64.22  obj-$(CONFIG_KPROBES)		+= kprobes.o
   64.23  obj-$(CONFIG_X86_PM_TIMER)	+= pmtimer.o
   64.24  obj-$(CONFIG_X86_VSMP)		+= vsmp.o
   64.25 +obj-$(CONFIG_K8_NB)		+= k8.o
   64.26 +obj-$(CONFIG_AUDIT)		+= audit.o
   64.27  
   64.28  obj-$(CONFIG_MODULES)		+= module.o
   64.29  
   64.30 @@ -47,16 +51,19 @@ bootflag-y			+= ../../i386/kernel/bootfl
   64.31  cpuid-$(subst m,y,$(CONFIG_X86_CPUID))  += ../../i386/kernel/cpuid.o
   64.32  topology-y                     += ../../i386/kernel/topology.o
   64.33  microcode-$(subst m,y,$(CONFIG_MICROCODE))  += ../../i386/kernel/microcode.o
   64.34 -intel_cacheinfo-y		+= ../../i386/kernel/cpu/intel_cacheinfo-xen.o
   64.35 +intel_cacheinfo-y		+= ../../i386/kernel/cpu/intel_cacheinfo.o
   64.36  quirks-y			+= ../../i386/kernel/quirks.o
   64.37  i8237-y				+= ../../i386/kernel/i8237.o
   64.38  msr-$(subst m,y,$(CONFIG_X86_MSR))  += ../../i386/kernel/msr.o
   64.39 +alternative-y			+= ../../i386/kernel/alternative.o
   64.40  
   64.41  ifdef CONFIG_XEN
   64.42  time-y				+= ../../i386/kernel/time-xen.o
   64.43  pci-dma-y			+= ../../i386/kernel/pci-dma-xen.o
   64.44  microcode-$(subst m,y,$(CONFIG_MICROCODE))  := ../../i386/kernel/microcode-xen.o
   64.45 +intel_cacheinfo-y		:= ../../i386/kernel/cpu/intel_cacheinfo-xen.o
   64.46  quirks-y			:= ../../i386/kernel/quirks-xen.o
   64.47 +alternative-y			:= ../../i386/kernel/alternative-xen.o
   64.48  
   64.49  n-obj-xen := i8259.o reboot.o i8237.o smpboot.o trampoline.o
   64.50  
    65.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/acpi/Makefile	Fri Jan 12 15:32:03 2007 +0000
    65.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/acpi/Makefile	Wed Jan 17 18:41:22 2007 +0000
    65.3 @@ -4,6 +4,7 @@ obj-$(CONFIG_ACPI_SLEEP)	+= sleep.o wake
    65.4  
    65.5  ifneq ($(CONFIG_ACPI_PROCESSOR),)
    65.6  obj-y			+= processor.o
    65.7 +processor-y		:= ../../../i386/kernel/acpi/processor.o ../../../i386/kernel/acpi/cstate.o
    65.8  endif
    65.9  
   65.10  boot-$(CONFIG_XEN)		:= ../../../i386/kernel/acpi/boot-xen.o
    66.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/apic-xen.c	Fri Jan 12 15:32:03 2007 +0000
    66.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/apic-xen.c	Wed Jan 17 18:41:22 2007 +0000
    66.3 @@ -14,7 +14,6 @@
    66.4   *	Mikael Pettersson	:	PM converted to driver model.
    66.5   */
    66.6  
    66.7 -#include <linux/config.h>
    66.8  #include <linux/init.h>
    66.9  
   66.10  #include <linux/mm.h>
    67.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/asm-offsets.c	Fri Jan 12 15:32:03 2007 +0000
    67.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/asm-offsets.c	Wed Jan 17 18:41:22 2007 +0000
    67.3 @@ -4,6 +4,7 @@
    67.4   * and format the required data.
    67.5   */
    67.6  
    67.7 +#include <linux/crypto.h>
    67.8  #include <linux/sched.h> 
    67.9  #include <linux/stddef.h>
   67.10  #include <linux/errno.h> 
   67.11 @@ -70,5 +71,7 @@ int main(void)
   67.12  	BLANK();
   67.13  	DEFINE(TSS_ist, offsetof(struct tss_struct, ist));
   67.14  #endif
   67.15 +	BLANK();
   67.16 +	DEFINE(crypto_tfm_ctx_offset, offsetof(struct crypto_tfm, __crt_ctx));
   67.17  	return 0;
   67.18  }
    68.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/crash.c	Fri Jan 12 15:32:03 2007 +0000
    68.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/crash.c	Wed Jan 17 18:41:22 2007 +0000
    68.3 @@ -112,14 +112,14 @@ static int crash_nmi_callback(struct pt_
    68.4  	atomic_dec(&waiting_for_crash_ipi);
    68.5  	/* Assume hlt works */
    68.6  	for(;;)
    68.7 -		asm("hlt");
    68.8 +		halt();
    68.9  
   68.10  	return 1;
   68.11  }
   68.12  
   68.13  static void smp_send_nmi_allbutself(void)
   68.14  {
   68.15 -	send_IPI_allbutself(APIC_DM_NMI);
   68.16 +	send_IPI_allbutself(NMI_VECTOR);
   68.17  }
   68.18  
   68.19  /*
   68.20 @@ -163,7 +163,7 @@ void machine_crash_shutdown(struct pt_re
   68.21  {
   68.22  	/*
   68.23  	 * This function is only called after the system
   68.24 -	 * has paniced or is otherwise in a critical state.
   68.25 +	 * has panicked or is otherwise in a critical state.
   68.26  	 * The minimum amount of code to allow a kexec'd kernel
   68.27  	 * to run successfully needs to happen here.
   68.28  	 *
    69.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/e820-xen.c	Fri Jan 12 15:32:03 2007 +0000
    69.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/e820-xen.c	Wed Jan 17 18:41:22 2007 +0000
    69.3 @@ -1,7 +1,6 @@
    69.4  /* 
    69.5   * Handle the memory map.
    69.6   * The functions here do the job until bootmem takes over.
    69.7 - * $Id: e820.c,v 1.4 2002/09/19 19:25:32 ak Exp $
    69.8   *
    69.9   *  Getting sanitize_e820_map() in sync with i386 version by applying change:
   69.10   *  -  Provisions for empty E820 memory regions (reported by certain BIOSes).
   69.11 @@ -9,7 +8,6 @@
   69.12   *  Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
   69.13   *
   69.14   */
   69.15 -#include <linux/config.h>
   69.16  #include <linux/kernel.h>
   69.17  #include <linux/types.h>
   69.18  #include <linux/init.h>
   69.19 @@ -19,6 +17,7 @@
   69.20  #include <linux/kexec.h>
   69.21  #include <linux/module.h>
   69.22  
   69.23 +#include <asm/pgtable.h>
   69.24  #include <asm/page.h>
   69.25  #include <asm/e820.h>
   69.26  #include <asm/proto.h>
   69.27 @@ -74,7 +73,11 @@ static inline int bad_addr(unsigned long
   69.28  #endif
   69.29  	/* kernel code + 640k memory hole (later should not be needed, but 
   69.30  	   be paranoid for now) */
   69.31 -	if (last >= 640*1024 && addr < __pa_symbol(&_end)) { 
   69.32 +	if (last >= 640*1024 && addr < 1024*1024) {
   69.33 +		*addrp = 1024*1024;
   69.34 +		return 1;
   69.35 +	}
   69.36 +	if (last >= __pa_symbol(&_text) && last < __pa_symbol(&_end)) {
   69.37  		*addrp = __pa_symbol(&_end);
   69.38  		return 1;
   69.39  	}
   69.40 @@ -699,6 +702,7 @@ void __init parse_memmapopt(char *p, cha
   69.41  }
   69.42  
   69.43  unsigned long pci_mem_start = 0xaeedbabe;
   69.44 +EXPORT_SYMBOL(pci_mem_start);
   69.45  
   69.46  /*
   69.47   * Search for the biggest gap in the low 32 bits of the e820
    70.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/early_printk-xen.c	Fri Jan 12 15:32:03 2007 +0000
    70.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/early_printk-xen.c	Wed Jan 17 18:41:22 2007 +0000
    70.3 @@ -3,7 +3,7 @@
    70.4  #include <linux/kernel.h>
    70.5  #include <linux/init.h>
    70.6  #include <linux/string.h>
    70.7 -#include <linux/tty.h>
    70.8 +#include <linux/screen_info.h>
    70.9  #include <asm/io.h>
   70.10  #include <asm/processor.h>
   70.11  #include <asm/fcntl.h>
    71.1 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/entry-xen.S	Fri Jan 12 15:32:03 2007 +0000
    71.2 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/entry-xen.S	Wed Jan 17 18:41:22 2007 +0000
    71.3 @@ -32,7 +32,6 @@
    71.4   */
    71.5  
    71.6  #define ASSEMBLY 1
    71.7 -#include <linux/config.h>
    71.8  #ifdef CONFIG_DEBUG_INFO
    71.9  #undef CONFIG_DEBUG_INFO
   71.10  #endif
   71.11 @@ -49,6 +48,7 @@
   71.12  #include <asm/thread_info.h>
   71.13  #include <asm/hw_irq.h>
   71.14  #include <asm/page.h>
   71.15 +#include <asm/irqflags.h>
   71.16  #include <asm/errno.h>
   71.17  #include <xen/interface/arch-x86_64.h>
   71.18  #include <xen/interface/features.h>
   71.19 @@ -63,6 +63,16 @@
   71.20  #define retint_kernel retint_restore_args
   71.21  #endif	
   71.22  
   71.23 +
   71.24 +.macro TRACE_IRQS_IRETQ offset=ARGOFFSET
   71.25 +#ifdef CONFIG_TRACE_IRQFLAGS
   71.26 +	bt   $9,EFLAGS-\offset(%rsp)	/* interrupts off? */
   71.27 +	jnc  1f
   71.28 +	TRACE_IRQS_ON
   71.29 +1:
   71.30 +#endif
   71.31 +.endm
   71.32 +
   71.33  NMI_MASK = 0x80000000
   71.34  	
   71.35  /*
   71.36 @@ -195,6 +205,7 @@ rff_trace:
   71.37  	GET_THREAD_INFO(%rcx)	
   71.38  	jmp rff_action
   71.39  	CFI_ENDPROC
   71.40 +END(ret_from_fork)
   71.41  
   71.42  /*
   71.43   * System call entry. Upto 6 arguments in registers are supported.
   71.44 @@ -229,11 +240,15 @@ rff_trace:
   71.45  
   71.46  ENTRY(system_call)
   71.47  	CFI_STARTPROC	simple
   71.48 -	CFI_DEF_CFA	rsp,0
   71.49 +	CFI_DEF_CFA	rsp,PDA_STACKOFFSET
   71.50  	CFI_REGISTER	rip,rcx
   71.51  	/*CFI_REGISTER	rflags,r11*/
   71.52  	SAVE_ARGS -8,0
   71.53  	movq  %rax,ORIG_RAX-ARGOFFSET(%rsp) 
   71.54 +	/*
   71.55 +	 * No need to follow this irqs off/on section - it's straight
   71.56 +	 * and short:
   71.57 +	 */
   71.58          XEN_UNBLOCK_EVENTS(%r11)        
   71.59  	GET_THREAD_INFO(%rcx)
   71.60  	testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%rcx)
   71.61 @@ -255,10 +270,15 @@ ret_from_sys_call:
   71.62  sysret_check:		
   71.63  	GET_THREAD_INFO(%rcx)
   71.64          XEN_BLOCK_EVENTS(%rsi)        
   71.65 +	TRACE_IRQS_OFF
   71.66  	movl threadinfo_flags(%rcx),%edx
   71.67  	andl %edi,%edx
   71.68  	CFI_REMEMBER_STATE
   71.69  	jnz  sysret_careful 
   71.70 +	/*
   71.71 +	 * sysretq will re-enable interrupts:
   71.72 +	 */
   71.73 +	TRACE_IRQS_ON
   71.74          XEN_UNBLOCK_EVENTS(%rsi)                
   71.75  	CFI_REGISTER	rip,rcx
   71.76  	RESTORE_ARGS 0,8,0
   71.77 @@ -271,6 +291,7 @@ sysret_careful:
   71.78  	CFI_RESTORE_STATE
   71.79  	bt $TIF_NEED_RESCHED,%edx
   71.80  	jnc sysret_signal
   71.81 +	TRACE_IRQS_ON
   71.82  	XEN_UNBLOCK_EVENTS(%rsi)
   71.83  	pushq %rdi
   71.84  	CFI_ADJUST_CFA_OFFSET 8
   71.85 @@ -281,6 +302,7 @@ sysret_careful:
   71.86  
   71.87  	/* Handle a signal */ 
   71.88  sysret_signal:
   71.89 +	TRACE_IRQS_ON
   71.90  /*	sti */
   71.91          XEN_UNBLOCK_EVENTS(%rsi)        
   71.92  	testl $(_TIF_SIGPENDING|_TIF_NOTIFY_RESUME|_TIF_SINGLESTEP),%edx
   71.93 @@ -296,6 +318,7 @@ 1:	movl $_TIF_NEED_RESCHED,%edi
   71.94  	/* Use IRET because user could have changed frame. This
   71.95  	   works because ptregscall_common has called FIXUP_TOP_OF_STACK. */
   71.96  	XEN_BLOCK_EVENTS(%rsi)
   71.97 +	TRACE_IRQS_OFF
   71.98  	jmp int_with_check
   71.99  	
  71.100  badsys:
  71.101 @@ -320,6 +343,7 @@ 1:	movq %rax,RAX-ARGOFFSET(%rsp)
  71.102  	/* Use IRET because user could have changed frame */
  71.103  	jmp int_ret_from_sys_call
  71.104  	CFI_ENDPROC
  71.105 +END(system_call)
  71.106  		
  71.107  /* 
  71.108   * Syscall return path ending with IRET.
  71.109 @@ -342,6 +366,7 @@ ENTRY(int_ret_from_sys_call)
  71.110  	CFI_REL_OFFSET	r9,R9-ARGOFFSET
  71.111  	CFI_REL_OFFSET	r10,R10-ARGOFFSET
  71.112  	CFI_REL_OFFSET	r11,R11-ARGOFFSET
  71.113 +	TRACE_IRQS_OFF
  71.114          XEN_BLOCK_EVENTS(%rsi)
  71.115  	testb $3,CS-ARGOFFSET(%rsp)
  71.116          jnz 1f
  71.117 @@ -365,6 +390,7 @@ int_with_check:
  71.118  int_careful:
  71.119  	bt $TIF_NEED_RESCHED,%edx
  71.120  	jnc  int_very_careful
  71.121 +	TRACE_IRQS_ON
  71.122  /*	sti */
  71.123          XEN_UNBLOCK_EVENTS(%rsi)
  71.124  	pushq %rdi
  71.125 @@ -373,10 +399,12 @@ int_careful:
  71.126  	popq %rdi
  71.127  	CFI_ADJUST_CFA_OFFSET -8
  71.128  	XEN_BLOCK_EVENTS(%rsi)
  71.129 +	TRACE_IRQS_OFF
  71.130  	jmp int_with_check
  71.131  
  71.132  	/* handle signals and tracing -- both require a full stack frame */
  71.133  int_very_careful:
  71.134 +	TRACE_IRQS_ON
  71.135  /*	sti */
  71.136          XEN_UNBLOCK_EVENTS(%rsi)
  71.137  	SAVE_REST
  71.138 @@ -391,6 +419,7 @@ int_very_careful:
  71.139  	CFI_ADJUST_CFA_OFFSET -8
  71.140  	andl $~(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP),%edi
  71.141  	XEN_BLOCK_EVENTS(%rsi)
  71.142 +	TRACE_IRQS_OFF
  71.143  	jmp int_restore_rest
  71.144  	
  71.145  int_signal:
  71.146 @@ -403,8 +432,10 @@ 1:	movl $_TIF_NEED_RESCHED,%edi
  71.147  int_restore_rest:
  71.148  	RESTORE_REST
  71.149  	XEN_BLOCK_EVENTS(%rsi)
  71.150 +	TRACE_IRQS_OFF
  71.151  	jmp int_with_check
  71.152  	CFI_ENDPROC
  71.153 +END(int_ret_from_sys_call)
  71.154  		
  71.155  /* 
  71.156   * Certain special system calls that need to save a complete full stack frame.
  71.157 @@ -416,6 +447,7 @@ int_restore_rest:
  71.158  	leaq	\func(%rip),%rax
  71.159  	leaq    -ARGOFFSET+8(%rsp),\arg /* 8 for return address */
  71.160  	jmp	ptregscall_common
  71.161 +END(\label)
  71.162  	.endm
  71.163  
  71.164  	CFI_STARTPROC
  71.165 @@ -445,6 +477,7 @@ ENTRY(ptregscall_common)
  71.166  	CFI_REL_OFFSET rip, 0
  71.167  	ret
  71.168  	CFI_ENDPROC
  71.169 +END(ptregscall_common)
  71.170  	
  71.171  ENTRY(stub_execve)
  71.172  	CFI_STARTPROC
  71.173 @@ -459,6 +492,7 @@ ENTRY(stub_execve)
  71.174  	RESTORE_REST
  71.175  	jmp int_ret_from_sys_call
  71.176  	CFI_ENDPROC
  71.177 +END(stub_execve)
  71.178  	
  71.179  /*
  71.180   * sigreturn is special because it needs to restore all registers on return.
  71.181 @@ -476,6 +510,7 @@ ENTRY(stub_rt_sigreturn)
  71.182  	RESTORE_REST
  71.183  	jmp int_ret_from_sys_call
  71.184  	CFI_ENDPROC
  71.185 +END(stub_rt_sigreturn)
  71.186  
  71.187  /*
  71.188   * initial frame state for interrupts and exceptions
  71.189 @@ -523,6 +558,7 @@ retint_careful:
  71.190  	CFI_RESTORE_STATE
  71.191  	bt    $TIF_NEED_RESCHED,%edx
  71.192  	jnc   retint_signal
  71.193 +	TRACE_IRQS_ON
  71.194  	XEN_UNBLOCK_EVENTS(%rsi)
  71.195  /*	sti */        
  71.196  	pushq %rdi
  71.197 @@ -533,11 +569,13 @@ retint_careful:
  71.198  	GET_THREAD_INFO(%rcx)
  71.199  	XEN_BLOCK_EVENTS(%rsi)		
  71.200  /*	cli */
  71.201 +	TRACE_IRQS_OFF
  71.202  	jmp retint_check
  71.203  	
  71.204  retint_signal:
  71.205  	testl $(_TIF_SIGPENDING|_TIF_NOTIFY_RESUME|_TIF_SINGLESTEP),%edx
  71.206  	jz    retint_restore_args
  71.207 +	TRACE_IRQS_ON
  71.208          XEN_UNBLOCK_EVENTS(%rsi)
  71.209  	SAVE_REST
  71.210  	movq $-1,ORIG_RAX(%rsp) 			
  71.211 @@ -546,6 +584,7 @@ retint_signal:
  71.212  	call do_notify_resume
  71.213  	RESTORE_REST
  71.214          XEN_BLOCK_EVENTS(%rsi)		
  71.215 +	TRACE_IRQS_OFF
  71.216  	movl $_TIF_NEED_RESCHED,%edi
  71.217  	GET_THREAD_INFO(%rcx)
  71.218  	jmp retint_check
  71.219 @@ -564,7 +603,9 @@ retint_kernel:
  71.220  	call preempt_schedule_irq
  71.221  	jmp retint_kernel       /* check again */
  71.222  #endif	
  71.223 +
  71.224  	CFI_ENDPROC
  71.225 +END(common_interrupt)
  71.226  	
  71.227  /*
  71.228   * APIC interrupts.
  71.229 @@ -581,17 +622,21 @@ retint_kernel:
  71.230  #ifndef CONFIG_XEN
  71.231  ENTRY(thermal_interrupt)
  71.232  	apicinterrupt THERMAL_APIC_VECTOR,smp_thermal_interrupt
  71.233 +END(thermal_interrupt)
  71.234  
  71.235  ENTRY(threshold_interrupt)
  71.236  	apicinterrupt THRESHOLD_APIC_VECTOR,mce_threshold_interrupt
  71.237 +END(threshold_interrupt)
  71.238  
  71.239  #ifdef CONFIG_SMP	
  71.240  ENTRY(reschedule_interrupt)
  71.241  	apicinterrupt RESCHEDULE_VECTOR,smp_reschedule_interrupt
  71.242 +END(reschedule_interrupt)
  71.243  
  71.244  	.macro INVALIDATE_ENTRY num
  71.245  ENTRY(invalidate_interrupt\num)
  71.246  	apicinterrupt INVALIDATE_TLB_VECTOR_START+\num,smp_invalidate_interrupt	
  71.247 +END(invalidate_interrupt\num)
  71.248  	.endm
  71.249  
  71.250  	INVALIDATE_ENTRY 0
  71.251 @@ -605,17 +650,21 @@ ENTRY(invalidate_interrupt\num)
  71.252  
  71.253  ENTRY(call_function_interrupt)
  71.254  	apicinterrupt CALL_FUNCTION_VECTOR,smp_call_function_interrupt
  71.255 +END(call_function_interrupt)
  71.256  #endif
  71.257  
  71.258  #ifdef CONFIG_X86_LOCAL_APIC	
  71.259  ENTRY(apic_timer_interrupt)
  71.260  	apicinterrupt LOCAL_TIMER_VECTOR,smp_apic_timer_interrupt
  71.261 +END(apic_timer_interrupt)
  71.262  
  71.263  ENTRY(error_interrupt)
  71.264  	apicinterrupt ERROR_APIC_VECTOR,smp_error_interrupt
  71.265 +END(error_interrupt)
  71.266  
  71.267  ENTRY(spurious_interr