[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] [linux] Update to linux-2.6.17.



# HG changeset patch
# User Christian Limpach <Christian.Limpach@xxxxxxxxxxxxx>
# Date 1168612249 0
# Node ID 4fad820a2233e30960ff5aea75d19b23ac02b512
# Parent  6d6a4d5801bd64786b44a404a43ccf375ddae04c
[linux] Update to linux-2.6.17.

Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxxx>
---
 linux-2.6-xen-sparse/arch/i386/kernel/smpalts.c                                
          |   85 
 linux-2.6-xen-sparse/drivers/acpi/tables.c                                     
          |  626 --
 linux-2.6-xen-sparse/include/asm-i386/atomic.h                                 
          |  254 -
 linux-2.6-xen-sparse/include/asm-i386/bitops.h                                 
          |  463 -
 linux-2.6-xen-sparse/include/asm-i386/futex.h                                  
          |  108 
 linux-2.6-xen-sparse/include/asm-i386/rwsem.h                                  
          |  294 -
 linux-2.6-xen-sparse/include/asm-i386/smp_alt.h                                
          |   32 
 linux-2.6-xen-sparse/include/asm-i386/spinlock.h                               
          |  217 
 linux-2.6-xen-sparse/include/asm-i386/system.h                                 
          |  606 --
 patches/linux-2.6.16.33/blktap-aio-16_03_06.patch                              
          |  271 -
 patches/linux-2.6.16.33/device_bind.patch                                      
          |   14 
 patches/linux-2.6.16.33/fix-hz-suspend.patch                                   
          |   25 
 patches/linux-2.6.16.33/fix-ide-cd-pio-mode.patch                              
          |   13 
 patches/linux-2.6.16.33/git-2a8a3d5b65e86ec1dfef7d268c64a909eab94af7.patch     
          |   43 
 patches/linux-2.6.16.33/git-2efe55a9cec8418f0e0cde3dc3787a42fddc4411.patch     
          |   74 
 patches/linux-2.6.16.33/git-3566561bfadffcb5dbc85d576be80c0dbf2cccc9.patch     
          |  292 -
 patches/linux-2.6.16.33/git-4bfaaef01a1badb9e8ffb0c0a37cd2379008d21f.patch     
          |  320 -
 patches/linux-2.6.16.33/git-dbaab49f92ff6ae6255762a948375e4036cbdbd2.patch     
          |   45 
 patches/linux-2.6.16.33/i386-mach-io-check-nmi.patch                           
          |   35 
 patches/linux-2.6.16.33/ipv6-no-autoconf.patch                                 
          |   18 
 patches/linux-2.6.16.33/kasprintf.patch                                        
          |   57 
 patches/linux-2.6.16.33/linux-2.6.19-rc1-kexec-move_segment_code-i386.patch    
          |  102 
 patches/linux-2.6.16.33/linux-2.6.19-rc1-kexec-move_segment_code-x86_64.patch  
          |   95 
 patches/linux-2.6.16.33/net-csum.patch                                         
          |   57 
 patches/linux-2.6.16.33/net-gso-0-base.patch                                   
          | 2501 ----------
 patches/linux-2.6.16.33/net-gso-1-check-dodgy.patch                            
          |   22 
 patches/linux-2.6.16.33/net-gso-2-checksum-fix.patch                           
          |  400 -
 patches/linux-2.6.16.33/net-gso-3-fix-errorcheck.patch                         
          |   13 
 patches/linux-2.6.16.33/net-gso-4-kill-warnon.patch                            
          |   16 
 patches/linux-2.6.16.33/net-gso-5-rcv-mss.patch                                
          |   11 
 patches/linux-2.6.16.33/net-gso-6-linear-segmentation.patch                    
          |   20 
 patches/linux-2.6.16.33/pci-mmconfig-fix-from-2.6.17.patch                     
          |  252 -
 patches/linux-2.6.16.33/pmd-shared.patch                                       
          |  100 
 patches/linux-2.6.16.33/rcu_needs_cpu.patch                                    
          |   33 
 patches/linux-2.6.16.33/rename-TSS_sysenter_esp0-SYSENTER_stack_esp0.patch     
          |   26 
 patches/linux-2.6.16.33/series                                                 
          |   35 
 patches/linux-2.6.16.33/smp-alts.patch                                         
          |  540 --
 patches/linux-2.6.16.33/tpm_plugin_2.6.17.patch                                
          | 1380 -----
 patches/linux-2.6.16.33/vsnprintf.patch                                        
          |  178 
 patches/linux-2.6.16.33/x86-elfnote-as-preprocessor-macro.patch                
          |   27 
 patches/linux-2.6.16.33/x86-increase-interrupt-vector-range.patch              
          |   73 
 
patches/linux-2.6.16.33/x86-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch
    |  138 
 
patches/linux-2.6.16.33/x86_64-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch
 |   72 
 patches/linux-2.6.16.33/xen-hotplug.patch                                      
          |   10 
 patches/linux-2.6.16.33/xenoprof-generic.patch                                 
          |  615 --
 buildconfigs/linux-defconfig_xen0_x86_32                                       
          |  105 
 buildconfigs/linux-defconfig_xen0_x86_64                                       
          |  109 
 buildconfigs/linux-defconfig_xenU_x86_32                                       
          |   63 
 buildconfigs/linux-defconfig_xenU_x86_64                                       
          |   67 
 buildconfigs/linux-defconfig_xen_x86_32                                        
          |  283 -
 buildconfigs/linux-defconfig_xen_x86_64                                        
          |  276 -
 buildconfigs/mk.linux-2.6-xen                                                  
          |    2 
 linux-2.6-xen-sparse/arch/i386/Kconfig                                         
          |  138 
 linux-2.6-xen-sparse/arch/i386/Kconfig.cpu                                     
          |    4 
 linux-2.6-xen-sparse/arch/i386/Kconfig.debug                                   
          |   94 
 linux-2.6-xen-sparse/arch/i386/Makefile                                        
          |   14 
 linux-2.6-xen-sparse/arch/i386/kernel/Makefile                                 
          |    5 
 linux-2.6-xen-sparse/arch/i386/kernel/acpi/boot-xen.c                          
          |   14 
 linux-2.6-xen-sparse/arch/i386/kernel/apic-xen.c                               
          |   13 
 linux-2.6-xen-sparse/arch/i386/kernel/cpu/common-xen.c                         
          |   57 
 linux-2.6-xen-sparse/arch/i386/kernel/cpu/intel_cacheinfo-xen.c                
          |  693 ++
 linux-2.6-xen-sparse/arch/i386/kernel/cpu/mtrr/main-xen.c                      
          |   13 
 linux-2.6-xen-sparse/arch/i386/kernel/crash.c                                  
          |    4 
 linux-2.6-xen-sparse/arch/i386/kernel/entry-xen.S                              
          |    4 
 linux-2.6-xen-sparse/arch/i386/kernel/head-xen.S                               
          |    2 
 linux-2.6-xen-sparse/arch/i386/kernel/io_apic-xen.c                            
          |   33 
 linux-2.6-xen-sparse/arch/i386/kernel/microcode-xen.c                          
          |   25 
 linux-2.6-xen-sparse/arch/i386/kernel/mpparse-xen.c                            
          |   62 
 linux-2.6-xen-sparse/arch/i386/kernel/process-xen.c                            
          |   11 
 linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c                              
          |  211 
 linux-2.6-xen-sparse/arch/i386/kernel/smp-xen.c                                
          |   34 
 linux-2.6-xen-sparse/arch/i386/kernel/smpboot.c                                
          |   74 
 linux-2.6-xen-sparse/arch/i386/kernel/traps-xen.c                              
          |  111 
 linux-2.6-xen-sparse/arch/i386/kernel/traps.c                                  
          |  111 
 linux-2.6-xen-sparse/arch/i386/kernel/vm86.c                                   
          |    2 
 linux-2.6-xen-sparse/arch/i386/kernel/vmlinux.lds.S                            
          |   30 
 linux-2.6-xen-sparse/arch/i386/mm/fault-xen.c                                  
          |  240 
 linux-2.6-xen-sparse/arch/i386/mm/init-xen.c                                   
          |   55 
 linux-2.6-xen-sparse/arch/i386/mm/pgtable-xen.c                                
          |    6 
 linux-2.6-xen-sparse/arch/i386/mm/pgtable.c                                    
          |    2 
 linux-2.6-xen-sparse/arch/i386/pci/Makefile                                    
          |    2 
 linux-2.6-xen-sparse/arch/i386/pci/irq-xen.c                                   
          |    6 
 linux-2.6-xen-sparse/arch/ia64/Kconfig                                         
          |   42 
 linux-2.6-xen-sparse/arch/ia64/Makefile                                        
          |    5 
 linux-2.6-xen-sparse/arch/ia64/dig/setup.c                                     
          |    5 
 linux-2.6-xen-sparse/arch/ia64/kernel/entry.S                                  
          |   20 
 linux-2.6-xen-sparse/arch/ia64/kernel/gate.lds.S                               
          |    1 
 linux-2.6-xen-sparse/arch/ia64/kernel/iosapic.c                                
          |  275 -
 linux-2.6-xen-sparse/arch/ia64/kernel/patch.c                                  
          |    8 
 linux-2.6-xen-sparse/arch/ia64/kernel/perfmon.c                                
          |    9 
 linux-2.6-xen-sparse/arch/ia64/kernel/setup.c                                  
          |   71 
 linux-2.6-xen-sparse/arch/ia64/mm/ioremap.c                                    
          |   46 
 linux-2.6-xen-sparse/arch/um/kernel/physmem.c                                  
          |    7 
 linux-2.6-xen-sparse/arch/x86_64/Kconfig                                       
          |   69 
 linux-2.6-xen-sparse/arch/x86_64/Makefile                                      
          |   45 
 linux-2.6-xen-sparse/arch/x86_64/ia32/ia32entry-xen.S                          
          |   31 
 linux-2.6-xen-sparse/arch/x86_64/ia32/vsyscall-sigreturn.S                     
          |   23 
 linux-2.6-xen-sparse/arch/x86_64/kernel/Makefile                               
          |    5 
 linux-2.6-xen-sparse/arch/x86_64/kernel/acpi/Makefile                          
          |    1 
 linux-2.6-xen-sparse/arch/x86_64/kernel/apic-xen.c                             
          |    2 
 linux-2.6-xen-sparse/arch/x86_64/kernel/e820-xen.c                             
          |   44 
 linux-2.6-xen-sparse/arch/x86_64/kernel/early_printk-xen.c                     
          |  124 
 linux-2.6-xen-sparse/arch/x86_64/kernel/entry-xen.S                            
          |    2 
 linux-2.6-xen-sparse/arch/x86_64/kernel/head-xen.S                             
          |   10 
 linux-2.6-xen-sparse/arch/x86_64/kernel/io_apic-xen.c                          
          |   46 
 linux-2.6-xen-sparse/arch/x86_64/kernel/irq-xen.c                              
          |   21 
 linux-2.6-xen-sparse/arch/x86_64/kernel/mpparse-xen.c                          
          |   31 
 linux-2.6-xen-sparse/arch/x86_64/kernel/process-xen.c                          
          |   40 
 linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c                            
          |  142 
 linux-2.6-xen-sparse/arch/x86_64/kernel/setup64-xen.c                          
          |   22 
 linux-2.6-xen-sparse/arch/x86_64/kernel/smp-xen.c                              
          |    6 
 linux-2.6-xen-sparse/arch/x86_64/kernel/traps-xen.c                            
          |   78 
 linux-2.6-xen-sparse/arch/x86_64/kernel/x8664_ksyms-xen.c                      
          |    8 
 linux-2.6-xen-sparse/arch/x86_64/mm/fault-xen.c                                
          |   83 
 linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c                                 
          |   66 
 linux-2.6-xen-sparse/arch/x86_64/mm/pageattr-xen.c                             
          |   75 
 linux-2.6-xen-sparse/arch/x86_64/pci/Makefile                                  
          |    3 
 linux-2.6-xen-sparse/drivers/Makefile                                          
          |    7 
 linux-2.6-xen-sparse/drivers/acpi/Kconfig                                      
          |   17 
 linux-2.6-xen-sparse/drivers/char/mem.c                                        
          |   64 
 linux-2.6-xen-sparse/drivers/char/tty_io.c                                     
          |  131 
 linux-2.6-xen-sparse/drivers/pci/Kconfig                                       
          |   21 
 linux-2.6-xen-sparse/drivers/serial/Kconfig                                    
          |   60 
 linux-2.6-xen-sparse/drivers/video/Kconfig                                     
          |   45 
 linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c                             
          |    2 
 linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c                           
          |    4 
 linux-2.6-xen-sparse/drivers/xen/console/console.c                             
          |    6 
 linux-2.6-xen-sparse/drivers/xen/core/smpboot.c                                
          |   16 
 linux-2.6-xen-sparse/drivers/xen/netback/netback.c                             
          |    2 
 linux-2.6-xen-sparse/drivers/xen/pcifront/pci_op.c                             
          |    4 
 linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c                         
          |    8 
 linux-2.6-xen-sparse/fs/Kconfig                                                
          |   22 
 linux-2.6-xen-sparse/include/asm-i386/apic.h                                   
          |    2 
 linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/io.h                        
          |   12 
 linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/page.h                      
          |    3 
 linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/pgtable-2level.h            
          |    2 
 linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/pgtable-3level.h            
          |    2 
 linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/pgtable.h                   
          |    5 
 linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/processor.h                 
          |    7 
 linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/setup.h                     
          |    4 
 linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/smp.h                       
          |    1 
 linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/spinlock.h                  
          |   69 
 linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/system.h                    
          |  131 
 linux-2.6-xen-sparse/include/asm-i386/page.h                                   
          |    3 
 linux-2.6-xen-sparse/include/asm-ia64/intel_intrin.h                           
          |  134 
 linux-2.6-xen-sparse/include/asm-ia64/io.h                                     
          |   25 
 linux-2.6-xen-sparse/include/asm-ia64/machvec.h                                
          |   15 
 linux-2.6-xen-sparse/include/asm-ia64/machvec_dig.h                            
          |    2 
 linux-2.6-xen-sparse/include/asm-ia64/page.h                                   
          |   22 
 linux-2.6-xen-sparse/include/asm-ia64/pal.h                                    
          |   41 
 linux-2.6-xen-sparse/include/asm-ia64/processor.h                              
          |    4 
 linux-2.6-xen-sparse/include/asm-ia64/system.h                                 
          |    9 
 linux-2.6-xen-sparse/include/asm-um/page.h                                     
          |    4 
 linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/e820.h                    
          |    5 
 linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/floppy.h                  
          |    2 
 linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/io.h                      
          |   40 
 linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/mmu_context.h             
          |    6 
 linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/page.h                    
          |    3 
 linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/pgalloc.h                 
          |   29 
 linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/pgtable.h                 
          |    8 
 linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/processor.h               
          |    7 
 linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/smp.h                     
          |    1 
 linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/system.h                  
          |    9 
 linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/mach_time.h                   
          |   37 
 linux-2.6-xen-sparse/include/linux/gfp.h                                       
          |    2 
 linux-2.6-xen-sparse/include/linux/highmem.h                                   
          |   12 
 linux-2.6-xen-sparse/include/linux/mm.h                                        
          |   54 
 linux-2.6-xen-sparse/include/linux/pfn.h                                       
          |    9 
 linux-2.6-xen-sparse/include/linux/skbuff.h                                    
          |  113 
 linux-2.6-xen-sparse/kernel/fork.c                                             
          |  180 
 linux-2.6-xen-sparse/lib/Makefile                                              
          |    3 
 linux-2.6-xen-sparse/mm/Kconfig                                                
          |   12 
 linux-2.6-xen-sparse/mm/highmem.c                                              
          |   43 
 linux-2.6-xen-sparse/mm/memory.c                                               
          |   24 
 linux-2.6-xen-sparse/mm/mmap.c                                                 
          |   76 
 linux-2.6-xen-sparse/mm/page_alloc.c                                           
          |  260 -
 linux-2.6-xen-sparse/net/core/dev.c                                            
          |  281 -
 linux-2.6-xen-sparse/net/core/skbuff.c                                         
          |  175 
 patches/linux-2.6.17/blktap-aio-16_03_06.patch                                 
          |  161 
 patches/linux-2.6.17/fix-hz-suspend.patch                                      
          |    9 
 patches/linux-2.6.17/fix-ide-cd-pio-mode.patch                                 
          |   13 
 patches/linux-2.6.17/git-2a8a3d5b65e86ec1dfef7d268c64a909eab94af7.patch        
          |   34 
 patches/linux-2.6.17/git-2efe55a9cec8418f0e0cde3dc3787a42fddc4411.patch        
          |   67 
 patches/linux-2.6.17/git-3566561bfadffcb5dbc85d576be80c0dbf2cccc9.patch        
          |  178 
 patches/linux-2.6.17/git-4bfaaef01a1badb9e8ffb0c0a37cd2379008d21f.patch        
          |  136 
 patches/linux-2.6.17/git-dbaab49f92ff6ae6255762a948375e4036cbdbd2.patch        
          |   17 
 patches/linux-2.6.17/i386-mach-io-check-nmi.patch                              
          |   30 
 patches/linux-2.6.17/ipv6-no-autoconf.patch                                    
          |   16 
 patches/linux-2.6.17/kasprintf.patch                                           
          |   15 
 patches/linux-2.6.17/linux-2.6.19-rc1-kexec-move_segment_code-i386.patch       
          |   96 
 patches/linux-2.6.17/linux-2.6.19-rc1-kexec-move_segment_code-x86_64.patch     
          |   96 
 patches/linux-2.6.17/net-csum.patch                                            
          |   40 
 patches/linux-2.6.17/net-gso-0-base.patch                                      
          | 1981 +++++++
 patches/linux-2.6.17/net-gso-1-check-dodgy.patch                               
          |   16 
 patches/linux-2.6.17/net-gso-2-checksum-fix.patch                              
          |  319 +
 patches/linux-2.6.17/net-gso-3-fix-errorcheck.patch                            
          |   13 
 patches/linux-2.6.17/net-gso-4-kill-warnon.patch                               
          |   26 
 patches/linux-2.6.17/net-gso-5-rcv-mss.patch                                   
          |   10 
 patches/linux-2.6.17/net-gso-6-linear-segmentation.patch                       
          |   22 
 patches/linux-2.6.17/pmd-shared.patch                                          
          |   57 
 patches/linux-2.6.17/rename-TSS_sysenter_esp0-SYSENTER_stack_esp0.patch        
          |   26 
 patches/linux-2.6.17/series                                                    
          |   30 
 patches/linux-2.6.17/vsnprintf.patch                                           
          |  149 
 patches/linux-2.6.17/x86-elfnote-as-preprocessor-macro.patch                   
          |   25 
 patches/linux-2.6.17/x86-increase-interrupt-vector-range.patch                 
          |   73 
 
patches/linux-2.6.17/x86-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch
       |   39 
 
patches/linux-2.6.17/x86_64-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch
    |   63 
 patches/linux-2.6.17/xen-hotplug.patch                                         
          |   10 
 patches/linux-2.6.17/xenoprof-generic.patch                                    
          |  294 +
 209 files changed, 8347 insertions(+), 13060 deletions(-)

diff -r 6d6a4d5801bd -r 4fad820a2233 buildconfigs/linux-defconfig_xen0_x86_32
--- a/buildconfigs/linux-defconfig_xen0_x86_32  Tue Jan 09 10:50:46 2007 +0000
+++ b/buildconfigs/linux-defconfig_xen0_x86_32  Fri Jan 12 14:30:49 2007 +0000
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16.13-xen0
-# Thu May 11 17:06:31 2006
+# Linux kernel version: 2.6.17-xen0
+# Thu Jan 11 10:23:10 2007
 #
 CONFIG_X86_32=y
 CONFIG_SEMAPHORE_SLEEPERS=y
@@ -9,6 +9,7 @@ CONFIG_MMU=y
 CONFIG_MMU=y
 CONFIG_GENERIC_ISA_DMA=y
 CONFIG_GENERIC_IOMAP=y
+CONFIG_GENERIC_HWEIGHT=y
 CONFIG_ARCH_MAY_HAVE_PC_FDC=y
 CONFIG_DMI=y
 
@@ -31,6 +32,7 @@ CONFIG_SYSCTL=y
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
 # CONFIG_IKCONFIG is not set
+# CONFIG_RELAY is not set
 CONFIG_INITRAMFS_SOURCE=""
 CONFIG_UID16=y
 CONFIG_VM86=y
@@ -47,10 +49,6 @@ CONFIG_FUTEX=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
 CONFIG_SLAB=y
 # CONFIG_TINY_SHMEM is not set
 CONFIG_BASE_SMALL=0
@@ -62,7 +60,6 @@ CONFIG_MODULES=y
 CONFIG_MODULES=y
 CONFIG_MODULE_UNLOAD=y
 # CONFIG_MODULE_FORCE_UNLOAD is not set
-CONFIG_OBSOLETE_MODPARM=y
 # CONFIG_MODVERSIONS is not set
 # CONFIG_MODULE_SRCVERSION_ALL is not set
 CONFIG_KMOD=y
@@ -71,6 +68,8 @@ CONFIG_KMOD=y
 # Block layer
 #
 # CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+CONFIG_LSF=y
 
 #
 # IO Schedulers
@@ -88,6 +87,7 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 #
 # Processor type and features
 #
+# CONFIG_SMP is not set
 # CONFIG_X86_PC is not set
 CONFIG_X86_XEN=y
 # CONFIG_X86_ELAN is not set
@@ -135,7 +135,6 @@ CONFIG_X86_GOOD_APIC=y
 CONFIG_X86_GOOD_APIC=y
 CONFIG_X86_USE_PPRO_CHECKSUM=y
 CONFIG_X86_TSC=y
-# CONFIG_SMP is not set
 CONFIG_PREEMPT_NONE=y
 # CONFIG_PREEMPT_VOLUNTARY is not set
 # CONFIG_PREEMPT is not set
@@ -158,10 +157,6 @@ CONFIG_SWIOTLB=y
 # CONFIG_NOHIGHMEM is not set
 CONFIG_HIGHMEM4G=y
 # CONFIG_HIGHMEM64G is not set
-CONFIG_VMSPLIT_3G=y
-# CONFIG_VMSPLIT_3G_OPT is not set
-# CONFIG_VMSPLIT_2G is not set
-# CONFIG_VMSPLIT_1G is not set
 CONFIG_PAGE_OFFSET=0xC0000000
 CONFIG_HIGHMEM=y
 CONFIG_SELECT_MEMORY_MODEL=y
@@ -202,6 +197,7 @@ CONFIG_ACPI_THERMAL=m
 CONFIG_ACPI_THERMAL=m
 CONFIG_ACPI_ASUS=m
 CONFIG_ACPI_IBM=m
+# CONFIG_ACPI_IBM_DOCK is not set
 CONFIG_ACPI_TOSHIBA=m
 # CONFIG_ACPI_CUSTOM_DSDT is not set
 CONFIG_ACPI_BLACKLIST_YEAR=0
@@ -230,7 +226,6 @@ CONFIG_XEN_PCIDEV_FRONTEND=y
 CONFIG_XEN_PCIDEV_FRONTEND=y
 # CONFIG_XEN_PCIDEV_FE_DEBUG is not set
 # CONFIG_PCIEPORTBUS is not set
-CONFIG_PCI_LEGACY_PROC=y
 # CONFIG_PCI_DEBUG is not set
 CONFIG_ISA_DMA_API=y
 # CONFIG_SCx200 is not set
@@ -280,6 +275,7 @@ CONFIG_IP_PNP_DHCP=y
 # CONFIG_INET_AH is not set
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
 # CONFIG_INET_TUNNEL is not set
 # CONFIG_INET_DIAG is not set
 # CONFIG_TCP_CONG_ADVANCED is not set
@@ -290,6 +286,8 @@ CONFIG_TCP_CONG_BIC=y
 #
 # CONFIG_IP_VS is not set
 # CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
 CONFIG_NETFILTER=y
 # CONFIG_NETFILTER_DEBUG is not set
 CONFIG_BRIDGE_NETFILTER=y
@@ -314,6 +312,7 @@ CONFIG_IP_NF_FTP=m
 # CONFIG_IP_NF_TFTP is not set
 # CONFIG_IP_NF_AMANDA is not set
 # CONFIG_IP_NF_PPTP is not set
+# CONFIG_IP_NF_H323 is not set
 # CONFIG_IP_NF_QUEUE is not set
 
 #
@@ -339,6 +338,7 @@ CONFIG_BRIDGE=y
 CONFIG_BRIDGE=y
 # CONFIG_VLAN_8021Q is not set
 # CONFIG_DECNET is not set
+CONFIG_LLC=y
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -542,6 +542,7 @@ CONFIG_AIC79XX_DEBUG_MASK=0
 CONFIG_AIC79XX_DEBUG_MASK=0
 CONFIG_AIC79XX_REG_PRETTY_PRINT=y
 # CONFIG_SCSI_DPT_I2O is not set
+CONFIG_SCSI_ADVANSYS=y
 CONFIG_MEGARAID_NEWGEN=y
 # CONFIG_MEGARAID_MM is not set
 # CONFIG_MEGARAID_LEGACY is not set
@@ -573,7 +574,6 @@ CONFIG_SCSI_SATA_INTEL_COMBINED=y
 # CONFIG_SCSI_INIA100 is not set
 # CONFIG_SCSI_SYM53C8XX_2 is not set
 # CONFIG_SCSI_IPR is not set
-# CONFIG_SCSI_QLOGIC_FC is not set
 # CONFIG_SCSI_QLOGIC_1280 is not set
 # CONFIG_SCSI_QLA_FC is not set
 # CONFIG_SCSI_LPFC is not set
@@ -592,6 +592,7 @@ CONFIG_MD_RAID1=y
 CONFIG_MD_RAID1=y
 # CONFIG_MD_RAID10 is not set
 CONFIG_MD_RAID5=y
+# CONFIG_MD_RAID5_RESHAPE is not set
 # CONFIG_MD_RAID6 is not set
 # CONFIG_MD_MULTIPATH is not set
 # CONFIG_MD_FAULTY is not set
@@ -905,18 +906,16 @@ CONFIG_DRM_SIS=m
 # CONFIG_IBM_ASM is not set
 
 #
-# Multimedia Capabilities Port drivers
-#
-
-#
 # Multimedia devices
 #
 # CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_V4L2=y
 
 #
 # Digital Video Broadcasting Devices
 #
 # CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
 
 #
 # Graphics support
@@ -928,6 +927,7 @@ CONFIG_DRM_SIS=m
 # Console display driver support
 #
 CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
 CONFIG_DUMMY_CONSOLE=y
 
 #
@@ -940,6 +940,7 @@ CONFIG_DUMMY_CONSOLE=y
 #
 CONFIG_USB_ARCH_HAS_HCD=y
 CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
 CONFIG_USB=y
 # CONFIG_USB_DEBUG is not set
 
@@ -992,9 +993,7 @@ CONFIG_USB_HIDINPUT=y
 # CONFIG_USB_ACECAD is not set
 # CONFIG_USB_KBTAB is not set
 # CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_MTOUCH is not set
-# CONFIG_USB_ITMTOUCH is not set
-# CONFIG_USB_EGALAX is not set
+# CONFIG_USB_TOUCHSCREEN is not set
 # CONFIG_USB_YEALINK is not set
 # CONFIG_USB_XPAD is not set
 # CONFIG_USB_ATI_REMOTE is not set
@@ -1007,15 +1006,6 @@ CONFIG_USB_HIDINPUT=y
 #
 # CONFIG_USB_MDC800 is not set
 # CONFIG_USB_MICROTEK is not set
-
-#
-# USB Multimedia devices
-#
-# CONFIG_USB_DABUSB is not set
-
-#
-# Video4Linux support is needed for USB Multimedia device support
-#
 
 #
 # USB Network Adapters
@@ -1067,6 +1057,19 @@ CONFIG_USB_MON=y
 # CONFIG_MMC is not set
 
 #
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
 # InfiniBand support
 #
 # CONFIG_INFINIBAND is not set
@@ -1075,6 +1078,25 @@ CONFIG_USB_MON=y
 # EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
 #
 # CONFIG_EDAC is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=m
+CONFIG_RTC_CLASS=m
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=m
+CONFIG_RTC_INTF_PROC=m
+CONFIG_RTC_INTF_DEV=m
+
+#
+# RTC drivers
+#
+CONFIG_RTC_DRV_M48T86=m
+CONFIG_RTC_DRV_TEST=m
 
 #
 # File systems
@@ -1134,7 +1156,6 @@ CONFIG_TMPFS=y
 CONFIG_TMPFS=y
 # CONFIG_HUGETLB_PAGE is not set
 CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -1258,11 +1279,13 @@ CONFIG_DEBUG_BUGVERBOSE=y
 # CONFIG_DEBUG_FS is not set
 # CONFIG_DEBUG_VM is not set
 CONFIG_FRAME_POINTER=y
+# CONFIG_UNWIND_INFO is not set
 CONFIG_FORCED_INLINING=y
 # CONFIG_RCU_TORTURE_TEST is not set
 CONFIG_EARLY_PRINTK=y
 # CONFIG_DEBUG_STACKOVERFLOW is not set
 # CONFIG_DEBUG_STACK_USAGE is not set
+CONFIG_STACK_BACKTRACE_COLS=2
 # CONFIG_DEBUG_PAGEALLOC is not set
 # CONFIG_DEBUG_RODATA is not set
 # CONFIG_4KSTACKS is not set
@@ -1310,24 +1333,26 @@ CONFIG_CRYPTO_CRC32C=m
 #
 # CONFIG_CRYPTO_DEV_PADLOCK is not set
 CONFIG_XEN=y
-CONFIG_XEN_INTERFACE_VERSION=0x00030202
+CONFIG_XEN_INTERFACE_VERSION=0x00030203
 
 #
 # XEN
 #
 CONFIG_XEN_PRIVILEGED_GUEST=y
 # CONFIG_XEN_UNPRIVILEGED_GUEST is not set
+CONFIG_XEN_PRIVCMD=y
+CONFIG_XEN_XENBUS_DEV=y
 CONFIG_XEN_BACKEND=y
+CONFIG_XEN_BLKDEV_BACKEND=y
+CONFIG_XEN_BLKDEV_TAP=y
+CONFIG_XEN_NETDEV_BACKEND=y
+# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
+CONFIG_XEN_NETDEV_LOOPBACK=y
 CONFIG_XEN_PCIDEV_BACKEND=y
 # CONFIG_XEN_PCIDEV_BACKEND_VPCI is not set
 CONFIG_XEN_PCIDEV_BACKEND_PASS=y
 # CONFIG_XEN_PCIDEV_BACKEND_SLOT is not set
 # CONFIG_XEN_PCIDEV_BE_DEBUG is not set
-CONFIG_XEN_BLKDEV_BACKEND=y
-CONFIG_XEN_BLKDEV_TAP=y
-CONFIG_XEN_NETDEV_BACKEND=y
-# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
-CONFIG_XEN_NETDEV_LOOPBACK=y
 # CONFIG_XEN_TPMDEV_BACKEND is not set
 CONFIG_XEN_BLKDEV_FRONTEND=y
 CONFIG_XEN_NETDEV_FRONTEND=y
@@ -1339,7 +1364,13 @@ CONFIG_XEN_COMPAT_030002=y
 CONFIG_XEN_COMPAT_030002=y
 CONFIG_HAVE_ARCH_ALLOC_SKB=y
 CONFIG_HAVE_ARCH_DEV_ALLOC_SKB=y
+CONFIG_HAVE_IRQ_IGNORE_UNHANDLED=y
 CONFIG_NO_IDLE_HZ=y
+CONFIG_XEN_UTIL=y
+CONFIG_XEN_BALLOON=y
+CONFIG_XEN_DEVMEM=y
+CONFIG_XEN_SKBUFF=y
+CONFIG_XEN_REBOOT=y
 
 #
 # Library routines
diff -r 6d6a4d5801bd -r 4fad820a2233 buildconfigs/linux-defconfig_xen0_x86_64
--- a/buildconfigs/linux-defconfig_xen0_x86_64  Tue Jan 09 10:50:46 2007 +0000
+++ b/buildconfigs/linux-defconfig_xen0_x86_64  Fri Jan 12 14:30:49 2007 +0000
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16.13-xen0
-# Thu May 11 17:17:19 2006
+# Linux kernel version: 2.6.17-xen0
+# Thu Jan 11 09:46:03 2007
 #
 CONFIG_X86_64=y
 CONFIG_64BIT=y
@@ -9,6 +9,7 @@ CONFIG_SEMAPHORE_SLEEPERS=y
 CONFIG_SEMAPHORE_SLEEPERS=y
 CONFIG_MMU=y
 CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
 CONFIG_GENERIC_CALIBRATE_DELAY=y
 CONFIG_X86_CMPXCHG=y
 CONFIG_EARLY_PRINTK=y
@@ -36,6 +37,7 @@ CONFIG_SYSCTL=y
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
 # CONFIG_IKCONFIG is not set
+# CONFIG_RELAY is not set
 CONFIG_INITRAMFS_SOURCE=""
 CONFIG_UID16=y
 CONFIG_VM86=y
@@ -52,10 +54,6 @@ CONFIG_FUTEX=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
 CONFIG_SLAB=y
 # CONFIG_TINY_SHMEM is not set
 CONFIG_BASE_SMALL=0
@@ -67,7 +65,6 @@ CONFIG_MODULES=y
 CONFIG_MODULES=y
 CONFIG_MODULE_UNLOAD=y
 # CONFIG_MODULE_FORCE_UNLOAD is not set
-CONFIG_OBSOLETE_MODPARM=y
 # CONFIG_MODVERSIONS is not set
 # CONFIG_MODULE_SRCVERSION_ALL is not set
 CONFIG_KMOD=y
@@ -76,6 +73,8 @@ CONFIG_KMOD=y
 # Block layer
 #
 # CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+CONFIG_LSF=y
 
 #
 # IO Schedulers
@@ -103,6 +102,7 @@ CONFIG_X86_NO_IDT=y
 CONFIG_X86_NO_IDT=y
 CONFIG_X86_L1_CACHE_BYTES=128
 CONFIG_X86_L1_CACHE_SHIFT=7
+CONFIG_X86_INTERNODE_CACHE_BYTES=128
 CONFIG_X86_GOOD_APIC=y
 CONFIG_MICROCODE=y
 # CONFIG_X86_MSR is not set
@@ -115,7 +115,6 @@ CONFIG_PREEMPT_NONE=y
 CONFIG_PREEMPT_NONE=y
 # CONFIG_PREEMPT_VOLUNTARY is not set
 # CONFIG_PREEMPT is not set
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
 CONFIG_ARCH_FLATMEM_ENABLE=y
 CONFIG_SELECT_MEMORY_MODEL=y
 CONFIG_FLATMEM_MANUAL=y
@@ -128,12 +127,13 @@ CONFIG_SWIOTLB=y
 CONFIG_SWIOTLB=y
 CONFIG_KEXEC=y
 # CONFIG_CRASH_DUMP is not set
-CONFIG_PHYSICAL_START=0x100000
+CONFIG_PHYSICAL_START=0x200000
 CONFIG_SECCOMP=y
 CONFIG_HZ_100=y
 # CONFIG_HZ_250 is not set
 # CONFIG_HZ_1000 is not set
 CONFIG_HZ=100
+# CONFIG_REORDER is not set
 CONFIG_GENERIC_HARDIRQS=y
 CONFIG_GENERIC_IRQ_PROBE=y
 CONFIG_ISA_DMA_API=y
@@ -157,6 +157,7 @@ CONFIG_ACPI_THERMAL=m
 CONFIG_ACPI_THERMAL=m
 CONFIG_ACPI_ASUS=m
 CONFIG_ACPI_IBM=m
+# CONFIG_ACPI_IBM_DOCK is not set
 CONFIG_ACPI_TOSHIBA=m
 CONFIG_ACPI_BLACKLIST_YEAR=0
 # CONFIG_ACPI_DEBUG is not set
@@ -164,6 +165,7 @@ CONFIG_ACPI_POWER=y
 CONFIG_ACPI_POWER=y
 CONFIG_ACPI_SYSTEM=y
 # CONFIG_ACPI_CONTAINER is not set
+CONFIG_ACPI_HOTPLUG_MEMORY=m
 
 #
 # CPU Frequency scaling
@@ -178,9 +180,7 @@ CONFIG_PCI_DIRECT=y
 # CONFIG_PCI_MMCONFIG is not set
 CONFIG_XEN_PCIDEV_FRONTEND=y
 # CONFIG_XEN_PCIDEV_FE_DEBUG is not set
-# CONFIG_UNORDERED_IO is not set
 # CONFIG_PCIEPORTBUS is not set
-CONFIG_PCI_LEGACY_PROC=y
 # CONFIG_PCI_DEBUG is not set
 
 #
@@ -231,6 +231,7 @@ CONFIG_IP_PNP_DHCP=y
 # CONFIG_INET_AH is not set
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
 # CONFIG_INET_TUNNEL is not set
 # CONFIG_INET_DIAG is not set
 # CONFIG_TCP_CONG_ADVANCED is not set
@@ -241,6 +242,8 @@ CONFIG_TCP_CONG_BIC=y
 #
 # CONFIG_IP_VS is not set
 # CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
 CONFIG_NETFILTER=y
 # CONFIG_NETFILTER_DEBUG is not set
 CONFIG_BRIDGE_NETFILTER=y
@@ -265,6 +268,7 @@ CONFIG_IP_NF_FTP=m
 # CONFIG_IP_NF_TFTP is not set
 # CONFIG_IP_NF_AMANDA is not set
 # CONFIG_IP_NF_PPTP is not set
+# CONFIG_IP_NF_H323 is not set
 # CONFIG_IP_NF_QUEUE is not set
 
 #
@@ -290,6 +294,7 @@ CONFIG_BRIDGE=y
 CONFIG_BRIDGE=y
 # CONFIG_VLAN_8021Q is not set
 # CONFIG_DECNET is not set
+CONFIG_LLC=y
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -525,7 +530,6 @@ CONFIG_SCSI_BUSLOGIC=y
 # CONFIG_SCSI_INIA100 is not set
 # CONFIG_SCSI_SYM53C8XX_2 is not set
 # CONFIG_SCSI_IPR is not set
-# CONFIG_SCSI_QLOGIC_FC is not set
 # CONFIG_SCSI_QLOGIC_1280 is not set
 # CONFIG_SCSI_QLA_FC is not set
 # CONFIG_SCSI_LPFC is not set
@@ -795,6 +799,8 @@ CONFIG_AGP=m
 CONFIG_AGP=m
 CONFIG_AGP_AMD64=m
 # CONFIG_AGP_INTEL is not set
+CONFIG_AGP_SIS=m
+CONFIG_AGP_VIA=m
 CONFIG_DRM=m
 CONFIG_DRM_TDFX=m
 CONFIG_DRM_R128=m
@@ -842,18 +848,16 @@ CONFIG_DRM_SIS=m
 # CONFIG_IBM_ASM is not set
 
 #
-# Multimedia Capabilities Port drivers
-#
-
-#
 # Multimedia devices
 #
 # CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_V4L2=y
 
 #
 # Digital Video Broadcasting Devices
 #
 # CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
 
 #
 # Graphics support
@@ -865,6 +869,7 @@ CONFIG_DRM_SIS=m
 # Console display driver support
 #
 CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
 CONFIG_DUMMY_CONSOLE=y
 
 #
@@ -877,6 +882,7 @@ CONFIG_DUMMY_CONSOLE=y
 #
 CONFIG_USB_ARCH_HAS_HCD=y
 CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
 CONFIG_USB=y
 # CONFIG_USB_DEBUG is not set
 
@@ -929,9 +935,7 @@ CONFIG_USB_HIDINPUT=y
 # CONFIG_USB_ACECAD is not set
 # CONFIG_USB_KBTAB is not set
 # CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_MTOUCH is not set
-# CONFIG_USB_ITMTOUCH is not set
-# CONFIG_USB_EGALAX is not set
+# CONFIG_USB_TOUCHSCREEN is not set
 # CONFIG_USB_YEALINK is not set
 # CONFIG_USB_XPAD is not set
 # CONFIG_USB_ATI_REMOTE is not set
@@ -944,15 +948,6 @@ CONFIG_USB_HIDINPUT=y
 #
 # CONFIG_USB_MDC800 is not set
 # CONFIG_USB_MICROTEK is not set
-
-#
-# USB Multimedia devices
-#
-# CONFIG_USB_DABUSB is not set
-
-#
-# Video4Linux support is needed for USB Multimedia device support
-#
 
 #
 # USB Network Adapters
@@ -1004,6 +999,23 @@ CONFIG_USB_MON=y
 # CONFIG_MMC is not set
 
 #
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=m
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+
+#
 # InfiniBand support
 #
 CONFIG_INFINIBAND=y
@@ -1020,6 +1032,25 @@ CONFIG_INFINIBAND_SRP=y
 # EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
 #
 # CONFIG_EDAC is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=m
+CONFIG_RTC_CLASS=m
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=m
+CONFIG_RTC_INTF_PROC=m
+CONFIG_RTC_INTF_DEV=m
+
+#
+# RTC drivers
+#
+CONFIG_RTC_DRV_M48T86=m
+CONFIG_RTC_DRV_TEST=m
 
 #
 # Firmware Drivers
@@ -1085,7 +1116,6 @@ CONFIG_TMPFS=y
 CONFIG_TMPFS=y
 # CONFIG_HUGETLB_PAGE is not set
 CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -1207,6 +1237,7 @@ CONFIG_DETECT_SOFTLOCKUP=y
 # CONFIG_DEBUG_FS is not set
 # CONFIG_DEBUG_VM is not set
 CONFIG_FRAME_POINTER=y
+# CONFIG_UNWIND_INFO is not set
 CONFIG_FORCED_INLINING=y
 # CONFIG_RCU_TORTURE_TEST is not set
 # CONFIG_DEBUG_RODATA is not set
@@ -1251,24 +1282,26 @@ CONFIG_CRYPTO_CRC32C=m
 # Hardware crypto devices
 #
 CONFIG_XEN=y
-CONFIG_XEN_INTERFACE_VERSION=0x00030202
+CONFIG_XEN_INTERFACE_VERSION=0x00030203
 
 #
 # XEN
 #
 CONFIG_XEN_PRIVILEGED_GUEST=y
 # CONFIG_XEN_UNPRIVILEGED_GUEST is not set
+CONFIG_XEN_PRIVCMD=y
+CONFIG_XEN_XENBUS_DEV=y
 CONFIG_XEN_BACKEND=y
+CONFIG_XEN_BLKDEV_BACKEND=y
+CONFIG_XEN_BLKDEV_TAP=y
+CONFIG_XEN_NETDEV_BACKEND=y
+# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
+CONFIG_XEN_NETDEV_LOOPBACK=y
 CONFIG_XEN_PCIDEV_BACKEND=y
 # CONFIG_XEN_PCIDEV_BACKEND_VPCI is not set
 CONFIG_XEN_PCIDEV_BACKEND_PASS=y
 # CONFIG_XEN_PCIDEV_BACKEND_SLOT is not set
 # CONFIG_XEN_PCIDEV_BE_DEBUG is not set
-CONFIG_XEN_BLKDEV_BACKEND=y
-CONFIG_XEN_BLKDEV_TAP=y
-CONFIG_XEN_NETDEV_BACKEND=y
-# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
-CONFIG_XEN_NETDEV_LOOPBACK=y
 # CONFIG_XEN_TPMDEV_BACKEND is not set
 CONFIG_XEN_BLKDEV_FRONTEND=y
 CONFIG_XEN_NETDEV_FRONTEND=y
@@ -1280,7 +1313,13 @@ CONFIG_XEN_COMPAT_030002=y
 CONFIG_XEN_COMPAT_030002=y
 CONFIG_HAVE_ARCH_ALLOC_SKB=y
 CONFIG_HAVE_ARCH_DEV_ALLOC_SKB=y
+CONFIG_HAVE_IRQ_IGNORE_UNHANDLED=y
 CONFIG_NO_IDLE_HZ=y
+CONFIG_XEN_UTIL=y
+CONFIG_XEN_BALLOON=y
+CONFIG_XEN_DEVMEM=y
+CONFIG_XEN_SKBUFF=y
+CONFIG_XEN_REBOOT=y
 
 #
 # Library routines
diff -r 6d6a4d5801bd -r 4fad820a2233 buildconfigs/linux-defconfig_xenU_x86_32
--- a/buildconfigs/linux-defconfig_xenU_x86_32  Tue Jan 09 10:50:46 2007 +0000
+++ b/buildconfigs/linux-defconfig_xenU_x86_32  Fri Jan 12 14:30:49 2007 +0000
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16.13-xenU
-# Thu May 11 17:08:12 2006
+# Linux kernel version: 2.6.17-xenU
+# Thu Jan 11 10:26:13 2007
 #
 CONFIG_X86_32=y
 CONFIG_SEMAPHORE_SLEEPERS=y
@@ -9,6 +9,7 @@ CONFIG_MMU=y
 CONFIG_MMU=y
 CONFIG_GENERIC_ISA_DMA=y
 CONFIG_GENERIC_IOMAP=y
+CONFIG_GENERIC_HWEIGHT=y
 CONFIG_ARCH_MAY_HAVE_PC_FDC=y
 CONFIG_DMI=y
 
@@ -32,6 +33,7 @@ CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
 # CONFIG_IKCONFIG is not set
 # CONFIG_CPUSETS is not set
+# CONFIG_RELAY is not set
 CONFIG_INITRAMFS_SOURCE=""
 CONFIG_UID16=y
 CONFIG_VM86=y
@@ -48,10 +50,6 @@ CONFIG_FUTEX=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
 CONFIG_SLAB=y
 # CONFIG_TINY_SHMEM is not set
 CONFIG_BASE_SMALL=0
@@ -63,7 +61,6 @@ CONFIG_MODULES=y
 CONFIG_MODULES=y
 CONFIG_MODULE_UNLOAD=y
 # CONFIG_MODULE_FORCE_UNLOAD is not set
-CONFIG_OBSOLETE_MODPARM=y
 # CONFIG_MODVERSIONS is not set
 # CONFIG_MODULE_SRCVERSION_ALL is not set
 CONFIG_KMOD=y
@@ -73,6 +70,8 @@ CONFIG_STOP_MACHINE=y
 # Block layer
 #
 # CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+CONFIG_LSF=y
 
 #
 # IO Schedulers
@@ -90,6 +89,7 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 #
 # Processor type and features
 #
+CONFIG_SMP=y
 # CONFIG_X86_PC is not set
 CONFIG_X86_XEN=y
 # CONFIG_X86_ELAN is not set
@@ -137,9 +137,8 @@ CONFIG_X86_GOOD_APIC=y
 CONFIG_X86_GOOD_APIC=y
 CONFIG_X86_USE_PPRO_CHECKSUM=y
 CONFIG_X86_TSC=y
-CONFIG_SMP=y
-CONFIG_SMP_ALTERNATIVES=y
 CONFIG_NR_CPUS=8
+# CONFIG_SCHED_MC is not set
 CONFIG_PREEMPT_NONE=y
 # CONFIG_PREEMPT_VOLUNTARY is not set
 # CONFIG_PREEMPT is not set
@@ -158,10 +157,6 @@ CONFIG_SWIOTLB=y
 # CONFIG_NOHIGHMEM is not set
 CONFIG_HIGHMEM4G=y
 # CONFIG_HIGHMEM64G is not set
-CONFIG_VMSPLIT_3G=y
-# CONFIG_VMSPLIT_3G_OPT is not set
-# CONFIG_VMSPLIT_2G is not set
-# CONFIG_VMSPLIT_1G is not set
 CONFIG_PAGE_OFFSET=0xC0000000
 CONFIG_HIGHMEM=y
 CONFIG_SELECT_MEMORY_MODEL=y
@@ -233,11 +228,14 @@ CONFIG_IP_PNP=y
 # CONFIG_INET_AH is not set
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
 # CONFIG_INET_TUNNEL is not set
 # CONFIG_INET_DIAG is not set
 # CONFIG_TCP_CONG_ADVANCED is not set
 CONFIG_TCP_CONG_BIC=y
 # CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
 # CONFIG_NETFILTER is not set
 
 #
@@ -562,13 +560,10 @@ CONFIG_LEGACY_PTY_COUNT=256
 #
 
 #
-# Multimedia Capabilities Port drivers
-#
-
-#
 # Multimedia devices
 #
 # CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_V4L2=y
 
 #
 # Digital Video Broadcasting Devices
@@ -585,6 +580,7 @@ CONFIG_LEGACY_PTY_COUNT=256
 # Console display driver support
 #
 CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
 CONFIG_DUMMY_CONSOLE=y
 
 #
@@ -597,6 +593,7 @@ CONFIG_DUMMY_CONSOLE=y
 #
 # CONFIG_USB_ARCH_HAS_HCD is not set
 # CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
 
 #
 # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
@@ -613,6 +610,19 @@ CONFIG_DUMMY_CONSOLE=y
 # CONFIG_MMC is not set
 
 #
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
 # InfiniBand support
 #
 
@@ -620,6 +630,11 @@ CONFIG_DUMMY_CONSOLE=y
 # EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
 #
 # CONFIG_EDAC is not set
+
+#
+# Real Time Clock
+#
+# CONFIG_RTC_CLASS is not set
 
 #
 # File systems
@@ -679,7 +694,6 @@ CONFIG_TMPFS=y
 CONFIG_TMPFS=y
 # CONFIG_HUGETLB_PAGE is not set
 CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -798,11 +812,13 @@ CONFIG_DEBUG_BUGVERBOSE=y
 # CONFIG_DEBUG_FS is not set
 # CONFIG_DEBUG_VM is not set
 CONFIG_FRAME_POINTER=y
+# CONFIG_UNWIND_INFO is not set
 CONFIG_FORCED_INLINING=y
 # CONFIG_RCU_TORTURE_TEST is not set
 CONFIG_EARLY_PRINTK=y
 # CONFIG_DEBUG_STACKOVERFLOW is not set
 # CONFIG_DEBUG_STACK_USAGE is not set
+CONFIG_STACK_BACKTRACE_COLS=2
 # CONFIG_DEBUG_PAGEALLOC is not set
 # CONFIG_DEBUG_RODATA is not set
 # CONFIG_4KSTACKS is not set
@@ -848,13 +864,15 @@ CONFIG_CRYPTO_CRC32C=m
 #
 # CONFIG_CRYPTO_DEV_PADLOCK is not set
 CONFIG_XEN=y
-CONFIG_XEN_INTERFACE_VERSION=0x00030202
+CONFIG_XEN_INTERFACE_VERSION=0x00030203
 
 #
 # XEN
 #
 # CONFIG_XEN_PRIVILEGED_GUEST is not set
 CONFIG_XEN_UNPRIVILEGED_GUEST=y
+CONFIG_XEN_PRIVCMD=y
+CONFIG_XEN_XENBUS_DEV=y
 # CONFIG_XEN_BACKEND is not set
 CONFIG_XEN_BLKDEV_FRONTEND=y
 CONFIG_XEN_NETDEV_FRONTEND=y
@@ -866,7 +884,14 @@ CONFIG_XEN_COMPAT_030002=y
 CONFIG_XEN_COMPAT_030002=y
 CONFIG_HAVE_ARCH_ALLOC_SKB=y
 CONFIG_HAVE_ARCH_DEV_ALLOC_SKB=y
+CONFIG_HAVE_IRQ_IGNORE_UNHANDLED=y
 CONFIG_NO_IDLE_HZ=y
+CONFIG_XEN_UTIL=y
+CONFIG_XEN_BALLOON=y
+CONFIG_XEN_DEVMEM=y
+CONFIG_XEN_SKBUFF=y
+CONFIG_XEN_REBOOT=y
+CONFIG_XEN_SMPBOOT=y
 
 #
 # Library routines
diff -r 6d6a4d5801bd -r 4fad820a2233 buildconfigs/linux-defconfig_xenU_x86_64
--- a/buildconfigs/linux-defconfig_xenU_x86_64  Tue Jan 09 10:50:46 2007 +0000
+++ b/buildconfigs/linux-defconfig_xenU_x86_64  Fri Jan 12 14:30:49 2007 +0000
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16.13-xenU
-# Thu May 11 17:17:57 2006
+# Linux kernel version: 2.6.17-xenU
+# Thu Jan 11 10:17:30 2007
 #
 CONFIG_X86_64=y
 CONFIG_64BIT=y
@@ -9,6 +9,7 @@ CONFIG_SEMAPHORE_SLEEPERS=y
 CONFIG_SEMAPHORE_SLEEPERS=y
 CONFIG_MMU=y
 CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
 CONFIG_GENERIC_CALIBRATE_DELAY=y
 CONFIG_X86_CMPXCHG=y
 CONFIG_EARLY_PRINTK=y
@@ -39,6 +40,7 @@ CONFIG_AUDITSYSCALL=y
 CONFIG_AUDITSYSCALL=y
 # CONFIG_IKCONFIG is not set
 # CONFIG_CPUSETS is not set
+# CONFIG_RELAY is not set
 CONFIG_INITRAMFS_SOURCE=""
 CONFIG_UID16=y
 CONFIG_VM86=y
@@ -55,10 +57,6 @@ CONFIG_FUTEX=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
 CONFIG_SLAB=y
 # CONFIG_TINY_SHMEM is not set
 CONFIG_BASE_SMALL=0
@@ -70,7 +68,6 @@ CONFIG_MODULES=y
 CONFIG_MODULES=y
 CONFIG_MODULE_UNLOAD=y
 # CONFIG_MODULE_FORCE_UNLOAD is not set
-CONFIG_OBSOLETE_MODPARM=y
 CONFIG_MODVERSIONS=y
 # CONFIG_MODULE_SRCVERSION_ALL is not set
 CONFIG_KMOD=y
@@ -80,6 +77,8 @@ CONFIG_STOP_MACHINE=y
 # Block layer
 #
 CONFIG_LBD=y
+# CONFIG_BLK_DEV_IO_TRACE is not set
+CONFIG_LSF=y
 
 #
 # IO Schedulers
@@ -107,17 +106,18 @@ CONFIG_X86_NO_IDT=y
 CONFIG_X86_NO_IDT=y
 CONFIG_X86_L1_CACHE_BYTES=128
 CONFIG_X86_L1_CACHE_SHIFT=7
+CONFIG_X86_INTERNODE_CACHE_BYTES=128
 CONFIG_X86_GOOD_APIC=y
 # CONFIG_MICROCODE is not set
 # CONFIG_X86_MSR is not set
 CONFIG_X86_CPUID=y
 CONFIG_X86_XEN_GENAPIC=y
 CONFIG_SMP=y
+# CONFIG_SCHED_MC is not set
 CONFIG_PREEMPT_NONE=y
 # CONFIG_PREEMPT_VOLUNTARY is not set
 # CONFIG_PREEMPT is not set
 CONFIG_PREEMPT_BKL=y
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
 CONFIG_ARCH_FLATMEM_ENABLE=y
 CONFIG_SELECT_MEMORY_MODEL=y
 CONFIG_FLATMEM_MANUAL=y
@@ -131,12 +131,13 @@ CONFIG_HOTPLUG_CPU=y
 CONFIG_HOTPLUG_CPU=y
 CONFIG_SWIOTLB=y
 # CONFIG_CRASH_DUMP is not set
-CONFIG_PHYSICAL_START=0x100000
+CONFIG_PHYSICAL_START=0x200000
 CONFIG_SECCOMP=y
 CONFIG_HZ_100=y
 # CONFIG_HZ_250 is not set
 # CONFIG_HZ_1000 is not set
 CONFIG_HZ=100
+# CONFIG_REORDER is not set
 CONFIG_GENERIC_HARDIRQS=y
 CONFIG_GENERIC_IRQ_PROBE=y
 CONFIG_ISA_DMA_API=y
@@ -146,7 +147,6 @@ CONFIG_GENERIC_PENDING_IRQ=y
 # Bus options (PCI etc.)
 #
 # CONFIG_PCI is not set
-# CONFIG_UNORDERED_IO is not set
 
 #
 # PCCARD (PCMCIA/CardBus) support
@@ -208,6 +208,7 @@ CONFIG_INET_AH=m
 CONFIG_INET_AH=m
 CONFIG_INET_ESP=m
 CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
 CONFIG_INET_TUNNEL=m
 # CONFIG_INET_DIAG is not set
 # CONFIG_TCP_CONG_ADVANCED is not set
@@ -248,9 +249,11 @@ CONFIG_IP_VS_FTP=m
 CONFIG_IP_VS_FTP=m
 CONFIG_IPV6=m
 CONFIG_IPV6_PRIVACY=y
+# CONFIG_IPV6_ROUTER_PREF is not set
 CONFIG_INET6_AH=m
 CONFIG_INET6_ESP=m
 CONFIG_INET6_IPCOMP=m
+CONFIG_INET6_XFRM_TUNNEL=m
 CONFIG_INET6_TUNNEL=m
 CONFIG_IPV6_TUNNEL=m
 CONFIG_NETFILTER=y
@@ -277,6 +280,7 @@ CONFIG_IP_NF_TFTP=m
 CONFIG_IP_NF_TFTP=m
 CONFIG_IP_NF_AMANDA=m
 # CONFIG_IP_NF_PPTP is not set
+# CONFIG_IP_NF_H323 is not set
 CONFIG_IP_NF_QUEUE=m
 
 #
@@ -435,6 +439,7 @@ CONFIG_ESI_DONGLE=m
 CONFIG_ESI_DONGLE=m
 CONFIG_ACTISYS_DONGLE=m
 CONFIG_TEKRAM_DONGLE=m
+# CONFIG_TOIM3232_DONGLE is not set
 CONFIG_LITELINK_DONGLE=m
 CONFIG_MA600_DONGLE=m
 CONFIG_GIRBIL_DONGLE=m
@@ -476,6 +481,7 @@ CONFIG_BT_HCIUART_BCSP=y
 CONFIG_BT_HCIUART_BCSP=y
 CONFIG_BT_HCIVHCI=m
 # CONFIG_IEEE80211 is not set
+CONFIG_WIRELESS_EXT=y
 
 #
 # Device Drivers
@@ -578,6 +584,7 @@ CONFIG_MD_RAID1=m
 CONFIG_MD_RAID1=m
 CONFIG_MD_RAID10=m
 CONFIG_MD_RAID5=m
+# CONFIG_MD_RAID5_RESHAPE is not set
 CONFIG_MD_RAID6=m
 CONFIG_MD_MULTIPATH=m
 # CONFIG_MD_FAULTY is not set
@@ -637,12 +644,12 @@ CONFIG_MII=m
 # Wireless LAN (non-hamradio)
 #
 CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
 
 #
 # Obsolete Wireless cards support (pre-802.11)
 #
 # CONFIG_STRIP is not set
-CONFIG_ATMEL=m
 # CONFIG_HOSTAP is not set
 
 #
@@ -800,13 +807,10 @@ CONFIG_LEGACY_PTY_COUNT=256
 #
 
 #
-# Multimedia Capabilities Port drivers
-#
-
-#
 # Multimedia devices
 #
 # CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_V4L2=y
 
 #
 # Digital Video Broadcasting Devices
@@ -823,6 +827,7 @@ CONFIG_LEGACY_PTY_COUNT=256
 # Console display driver support
 #
 CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
 CONFIG_DUMMY_CONSOLE=y
 
 #
@@ -835,6 +840,7 @@ CONFIG_DUMMY_CONSOLE=y
 #
 # CONFIG_USB_ARCH_HAS_HCD is not set
 # CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
 
 #
 # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
@@ -851,6 +857,19 @@ CONFIG_DUMMY_CONSOLE=y
 # CONFIG_MMC is not set
 
 #
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
 # InfiniBand support
 #
 
@@ -858,6 +877,11 @@ CONFIG_DUMMY_CONSOLE=y
 # EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
 #
 # CONFIG_EDAC is not set
+
+#
+# Real Time Clock
+#
+# CONFIG_RTC_CLASS is not set
 
 #
 # Firmware Drivers
@@ -940,7 +964,6 @@ CONFIG_TMPFS=y
 CONFIG_TMPFS=y
 # CONFIG_HUGETLB_PAGE is not set
 CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -1091,6 +1114,7 @@ CONFIG_DETECT_SOFTLOCKUP=y
 # CONFIG_DEBUG_FS is not set
 # CONFIG_DEBUG_VM is not set
 CONFIG_FRAME_POINTER=y
+# CONFIG_UNWIND_INFO is not set
 CONFIG_FORCED_INLINING=y
 # CONFIG_RCU_TORTURE_TEST is not set
 # CONFIG_DEBUG_RODATA is not set
@@ -1135,13 +1159,15 @@ CONFIG_CRYPTO_CRC32C=m
 # Hardware crypto devices
 #
 CONFIG_XEN=y
-CONFIG_XEN_INTERFACE_VERSION=0x00030202
+CONFIG_XEN_INTERFACE_VERSION=0x00030203
 
 #
 # XEN
 #
 # CONFIG_XEN_PRIVILEGED_GUEST is not set
 CONFIG_XEN_UNPRIVILEGED_GUEST=y
+CONFIG_XEN_PRIVCMD=y
+CONFIG_XEN_XENBUS_DEV=y
 # CONFIG_XEN_BACKEND is not set
 CONFIG_XEN_BLKDEV_FRONTEND=y
 CONFIG_XEN_NETDEV_FRONTEND=y
@@ -1153,7 +1179,14 @@ CONFIG_XEN_COMPAT_030002=y
 CONFIG_XEN_COMPAT_030002=y
 CONFIG_HAVE_ARCH_ALLOC_SKB=y
 CONFIG_HAVE_ARCH_DEV_ALLOC_SKB=y
+CONFIG_HAVE_IRQ_IGNORE_UNHANDLED=y
 CONFIG_NO_IDLE_HZ=y
+CONFIG_XEN_UTIL=y
+CONFIG_XEN_BALLOON=y
+CONFIG_XEN_DEVMEM=y
+CONFIG_XEN_SKBUFF=y
+CONFIG_XEN_REBOOT=y
+CONFIG_XEN_SMPBOOT=y
 
 #
 # Library routines
diff -r 6d6a4d5801bd -r 4fad820a2233 buildconfigs/linux-defconfig_xen_x86_32
--- a/buildconfigs/linux-defconfig_xen_x86_32   Tue Jan 09 10:50:46 2007 +0000
+++ b/buildconfigs/linux-defconfig_xen_x86_32   Fri Jan 12 14:30:49 2007 +0000
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16.13-xen
-# Thu May 11 17:11:00 2006
+# Linux kernel version: 2.6.17-xen
+# Thu Jan 11 10:45:59 2007
 #
 CONFIG_X86_32=y
 CONFIG_SEMAPHORE_SLEEPERS=y
@@ -9,6 +9,7 @@ CONFIG_MMU=y
 CONFIG_MMU=y
 CONFIG_GENERIC_ISA_DMA=y
 CONFIG_GENERIC_IOMAP=y
+CONFIG_GENERIC_HWEIGHT=y
 CONFIG_ARCH_MAY_HAVE_PC_FDC=y
 CONFIG_DMI=y
 
@@ -35,6 +36,7 @@ CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_CPUSETS=y
+# CONFIG_RELAY is not set
 CONFIG_INITRAMFS_SOURCE=""
 CONFIG_UID16=y
 CONFIG_VM86=y
@@ -51,10 +53,6 @@ CONFIG_FUTEX=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
 CONFIG_SLAB=y
 # CONFIG_TINY_SHMEM is not set
 CONFIG_BASE_SMALL=0
@@ -67,7 +65,6 @@ CONFIG_MODULES=y
 CONFIG_MODULES=y
 CONFIG_MODULE_UNLOAD=y
 CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
 CONFIG_MODVERSIONS=y
 CONFIG_MODULE_SRCVERSION_ALL=y
 CONFIG_KMOD=y
@@ -77,6 +74,8 @@ CONFIG_STOP_MACHINE=y
 # Block layer
 #
 CONFIG_LBD=y
+# CONFIG_BLK_DEV_IO_TRACE is not set
+CONFIG_LSF=y
 
 #
 # IO Schedulers
@@ -94,6 +93,7 @@ CONFIG_DEFAULT_IOSCHED="cfq"
 #
 # Processor type and features
 #
+CONFIG_SMP=y
 # CONFIG_X86_PC is not set
 CONFIG_X86_XEN=y
 # CONFIG_X86_ELAN is not set
@@ -142,9 +142,8 @@ CONFIG_X86_INTEL_USERCOPY=y
 CONFIG_X86_INTEL_USERCOPY=y
 CONFIG_X86_USE_PPRO_CHECKSUM=y
 CONFIG_X86_TSC=y
-CONFIG_SMP=y
-CONFIG_SMP_ALTERNATIVES=y
 CONFIG_NR_CPUS=32
+# CONFIG_SCHED_MC is not set
 # CONFIG_PREEMPT_NONE is not set
 CONFIG_PREEMPT_VOLUNTARY=y
 # CONFIG_PREEMPT is not set
@@ -166,10 +165,6 @@ CONFIG_DCDBAS=m
 # CONFIG_NOHIGHMEM is not set
 CONFIG_HIGHMEM4G=y
 # CONFIG_HIGHMEM64G is not set
-CONFIG_VMSPLIT_3G=y
-# CONFIG_VMSPLIT_3G_OPT is not set
-# CONFIG_VMSPLIT_2G is not set
-# CONFIG_VMSPLIT_1G is not set
 CONFIG_PAGE_OFFSET=0xC0000000
 CONFIG_HIGHMEM=y
 CONFIG_SELECT_MEMORY_MODEL=y
@@ -184,10 +179,10 @@ CONFIG_REGPARM=y
 CONFIG_REGPARM=y
 CONFIG_SECCOMP=y
 CONFIG_HZ_100=y
-CONFIG_KEXEC=y
 # CONFIG_HZ_250 is not set
 # CONFIG_HZ_1000 is not set
 CONFIG_HZ=100
+CONFIG_KEXEC=y
 # CONFIG_CRASH_DUMP is not set
 CONFIG_PHYSICAL_START=0x100000
 CONFIG_HOTPLUG_CPU=y
@@ -212,6 +207,7 @@ CONFIG_ACPI_THERMAL=m
 CONFIG_ACPI_THERMAL=m
 CONFIG_ACPI_ASUS=m
 CONFIG_ACPI_IBM=m
+# CONFIG_ACPI_IBM_DOCK is not set
 CONFIG_ACPI_TOSHIBA=m
 CONFIG_ACPI_BLACKLIST_YEAR=0
 # CONFIG_ACPI_DEBUG is not set
@@ -239,7 +235,6 @@ CONFIG_XEN_PCIDEV_FRONTEND=y
 CONFIG_XEN_PCIDEV_FRONTEND=y
 # CONFIG_XEN_PCIDEV_FE_DEBUG is not set
 # CONFIG_PCIEPORTBUS is not set
-# CONFIG_PCI_LEGACY_PROC is not set
 # CONFIG_PCI_DEBUG is not set
 CONFIG_ISA_DMA_API=y
 CONFIG_SCx200=m
@@ -325,6 +320,7 @@ CONFIG_INET_AH=m
 CONFIG_INET_AH=m
 CONFIG_INET_ESP=m
 CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
 CONFIG_INET_TUNNEL=m
 CONFIG_INET_DIAG=m
 CONFIG_INET_TCP_DIAG=m
@@ -377,9 +373,11 @@ CONFIG_IP_VS_FTP=m
 CONFIG_IP_VS_FTP=m
 CONFIG_IPV6=m
 CONFIG_IPV6_PRIVACY=y
+# CONFIG_IPV6_ROUTER_PREF is not set
 CONFIG_INET6_AH=m
 CONFIG_INET6_ESP=m
 CONFIG_INET6_IPCOMP=m
+CONFIG_INET6_XFRM_TUNNEL=m
 CONFIG_INET6_TUNNEL=m
 CONFIG_IPV6_TUNNEL=m
 CONFIG_NETFILTER=y
@@ -403,11 +401,14 @@ CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
 CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
 CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
 CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
 CONFIG_NETFILTER_XT_MATCH_HELPER=m
 CONFIG_NETFILTER_XT_MATCH_LENGTH=m
 CONFIG_NETFILTER_XT_MATCH_LIMIT=m
 CONFIG_NETFILTER_XT_MATCH_MAC=m
 CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
 CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
 CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
 CONFIG_NETFILTER_XT_MATCH_REALM=m
@@ -431,20 +432,19 @@ CONFIG_IP_NF_TFTP=m
 CONFIG_IP_NF_TFTP=m
 CONFIG_IP_NF_AMANDA=m
 CONFIG_IP_NF_PPTP=m
+CONFIG_IP_NF_H323=m
 CONFIG_IP_NF_QUEUE=m
 CONFIG_IP_NF_IPTABLES=m
 CONFIG_IP_NF_MATCH_IPRANGE=m
-CONFIG_IP_NF_MATCH_MULTIPORT=m
 CONFIG_IP_NF_MATCH_TOS=m
 CONFIG_IP_NF_MATCH_RECENT=m
 CONFIG_IP_NF_MATCH_ECN=m
 CONFIG_IP_NF_MATCH_DSCP=m
-CONFIG_IP_NF_MATCH_AH_ESP=m
+CONFIG_IP_NF_MATCH_AH=m
 CONFIG_IP_NF_MATCH_TTL=m
 CONFIG_IP_NF_MATCH_OWNER=m
 CONFIG_IP_NF_MATCH_ADDRTYPE=m
 CONFIG_IP_NF_MATCH_HASHLIMIT=m
-CONFIG_IP_NF_MATCH_POLICY=m
 CONFIG_IP_NF_FILTER=m
 CONFIG_IP_NF_TARGET_REJECT=m
 CONFIG_IP_NF_TARGET_LOG=m
@@ -462,6 +462,7 @@ CONFIG_IP_NF_NAT_TFTP=m
 CONFIG_IP_NF_NAT_TFTP=m
 CONFIG_IP_NF_NAT_AMANDA=m
 CONFIG_IP_NF_NAT_PPTP=m
+CONFIG_IP_NF_NAT_H323=m
 CONFIG_IP_NF_MANGLE=m
 CONFIG_IP_NF_TARGET_TOS=m
 CONFIG_IP_NF_TARGET_ECN=m
@@ -482,12 +483,10 @@ CONFIG_IP6_NF_MATCH_OPTS=m
 CONFIG_IP6_NF_MATCH_OPTS=m
 CONFIG_IP6_NF_MATCH_FRAG=m
 CONFIG_IP6_NF_MATCH_HL=m
-CONFIG_IP6_NF_MATCH_MULTIPORT=m
 CONFIG_IP6_NF_MATCH_OWNER=m
 CONFIG_IP6_NF_MATCH_IPV6HEADER=m
-CONFIG_IP6_NF_MATCH_AHESP=m
+CONFIG_IP6_NF_MATCH_AH=m
 CONFIG_IP6_NF_MATCH_EUI64=m
-CONFIG_IP6_NF_MATCH_POLICY=m
 CONFIG_IP6_NF_FILTER=m
 CONFIG_IP6_NF_TARGET_LOG=m
 CONFIG_IP6_NF_TARGET_REJECT=m
@@ -529,10 +528,12 @@ CONFIG_BRIDGE_EBT_ULOG=m
 #
 CONFIG_IP_DCCP=m
 CONFIG_INET_DCCP_DIAG=m
+CONFIG_IP_DCCP_ACKVEC=y
 
 #
 # DCCP CCIDs Configuration (EXPERIMENTAL)
 #
+CONFIG_IP_DCCP_CCID2=m
 CONFIG_IP_DCCP_CCID3=m
 CONFIG_IP_DCCP_TFRC_LIB=m
 
@@ -540,7 +541,6 @@ CONFIG_IP_DCCP_TFRC_LIB=m
 # DCCP Kernel Hacking
 #
 # CONFIG_IP_DCCP_DEBUG is not set
-# CONFIG_IP_DCCP_UNLOAD_HACK is not set
 
 #
 # SCTP Configuration (EXPERIMENTAL)
@@ -694,6 +694,7 @@ CONFIG_ESI_DONGLE=m
 CONFIG_ESI_DONGLE=m
 CONFIG_ACTISYS_DONGLE=m
 CONFIG_TEKRAM_DONGLE=m
+CONFIG_TOIM3232_DONGLE=m
 CONFIG_LITELINK_DONGLE=m
 CONFIG_MA600_DONGLE=m
 CONFIG_GIRBIL_DONGLE=m
@@ -753,6 +754,9 @@ CONFIG_IEEE80211_CRYPT_WEP=m
 CONFIG_IEEE80211_CRYPT_WEP=m
 CONFIG_IEEE80211_CRYPT_CCMP=m
 CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_WIRELESS_EXT=y
 
 #
 # Device Drivers
@@ -820,7 +824,6 @@ CONFIG_MTD_CFI_I2=y
 # CONFIG_MTD_OTP is not set
 CONFIG_MTD_CFI_INTELEXT=m
 CONFIG_MTD_CFI_AMDSTD=m
-CONFIG_MTD_CFI_AMDSTD_RETRY=0
 CONFIG_MTD_CFI_STAA=m
 CONFIG_MTD_CFI_UTIL=m
 CONFIG_MTD_RAM=m
@@ -865,7 +868,6 @@ CONFIG_MTD_MTDRAM=m
 CONFIG_MTD_MTDRAM=m
 CONFIG_MTDRAM_TOTAL_SIZE=4096
 CONFIG_MTDRAM_ERASE_SIZE=128
-CONFIG_MTD_BLKMTD=m
 CONFIG_MTD_BLOCK2MTD=m
 
 #
@@ -1102,6 +1104,7 @@ CONFIG_AIC79XX_DEBUG_MASK=0
 CONFIG_AIC79XX_DEBUG_MASK=0
 CONFIG_AIC79XX_REG_PRETTY_PRINT=y
 CONFIG_SCSI_DPT_I2O=m
+CONFIG_SCSI_ADVANSYS=m
 CONFIG_MEGARAID_NEWGEN=y
 CONFIG_MEGARAID_MM=m
 CONFIG_MEGARAID_MAILBOX=m
@@ -1144,12 +1147,10 @@ CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MOD
 CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
 CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
 CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
-# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
+CONFIG_SCSI_SYM53C8XX_MMIO=y
 CONFIG_SCSI_IPR=m
 CONFIG_SCSI_IPR_TRACE=y
 CONFIG_SCSI_IPR_DUMP=y
-CONFIG_SCSI_QLOGIC_FC=m
-CONFIG_SCSI_QLOGIC_FC_FIRMWARE=y
 CONFIG_SCSI_QLOGIC_1280=m
 CONFIG_SCSI_QLA_FC=m
 # CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE is not set
@@ -1178,6 +1179,7 @@ CONFIG_MD_RAID1=m
 CONFIG_MD_RAID1=m
 CONFIG_MD_RAID10=m
 CONFIG_MD_RAID5=m
+CONFIG_MD_RAID5_RESHAPE=y
 CONFIG_MD_RAID6=m
 CONFIG_MD_MULTIPATH=m
 CONFIG_MD_FAULTY=m
@@ -1236,7 +1238,6 @@ CONFIG_I2O=m
 CONFIG_I2O=m
 CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
 CONFIG_I2O_EXT_ADAPTEC=y
-CONFIG_I2O_EXT_ADAPTEC_DMA64=y
 CONFIG_I2O_CONFIG=m
 CONFIG_I2O_CONFIG_OLD_IOCTL=y
 CONFIG_I2O_BUS=m
@@ -1388,6 +1389,7 @@ CONFIG_ABYSS=m
 # Wireless LAN (non-hamradio)
 #
 CONFIG_NET_RADIO=y
+CONFIG_NET_WIRELESS_RTNETLINK=y
 
 #
 # Obsolete Wireless cards support (pre-802.11)
@@ -1408,6 +1410,8 @@ CONFIG_IPW2100_MONITOR=y
 CONFIG_IPW2100_MONITOR=y
 # CONFIG_IPW2100_DEBUG is not set
 CONFIG_IPW2200=m
+CONFIG_IPW2200_MONITOR=y
+CONFIG_IPW_QOS=y
 # CONFIG_IPW2200_DEBUG is not set
 CONFIG_AIRO=m
 CONFIG_HERMES=m
@@ -1437,6 +1441,13 @@ CONFIG_HOSTAP_PLX=m
 CONFIG_HOSTAP_PLX=m
 CONFIG_HOSTAP_PCI=m
 CONFIG_HOSTAP_CS=m
+CONFIG_BCM43XX=m
+CONFIG_BCM43XX_DEBUG=y
+CONFIG_BCM43XX_DMA=y
+CONFIG_BCM43XX_PIO=y
+CONFIG_BCM43XX_DMA_AND_PIO_MODE=y
+# CONFIG_BCM43XX_DMA_MODE is not set
+# CONFIG_BCM43XX_PIO_MODE is not set
 CONFIG_NET_WIRELESS=y
 
 #
@@ -1637,6 +1648,15 @@ CONFIG_HISAX_HDLC=y
 #
 
 #
+# Siemens Gigaset
+#
+CONFIG_ISDN_DRV_GIGASET=m
+CONFIG_GIGASET_BASE=m
+CONFIG_GIGASET_M105=m
+# CONFIG_GIGASET_DEBUG is not set
+# CONFIG_GIGASET_UNDOCREQ is not set
+
+#
 # CAPI subsystem
 #
 CONFIG_ISDN_CAPI=m
@@ -1777,8 +1797,9 @@ CONFIG_HW_CONSOLE=y
 # Serial drivers
 #
 CONFIG_SERIAL_8250=m
+CONFIG_SERIAL_8250_PCI=m
+CONFIG_SERIAL_8250_PNP=m
 # CONFIG_SERIAL_8250_CS is not set
-# CONFIG_SERIAL_8250_ACPI is not set
 CONFIG_SERIAL_8250_NR_UARTS=4
 CONFIG_SERIAL_8250_RUNTIME_UARTS=4
 # CONFIG_SERIAL_8250_EXTENDED is not set
@@ -1963,9 +1984,7 @@ CONFIG_SENSORS_PCF8574=m
 CONFIG_SENSORS_PCF8574=m
 CONFIG_SENSORS_PCA9539=m
 CONFIG_SENSORS_PCF8591=m
-CONFIG_SENSORS_RTC8564=m
 CONFIG_SENSORS_MAX6875=m
-CONFIG_RTC_X1205_I2C=m
 # CONFIG_I2C_DEBUG_CORE is not set
 # CONFIG_I2C_DEBUG_ALGO is not set
 # CONFIG_I2C_DEBUG_BUS is not set
@@ -1992,13 +2011,21 @@ CONFIG_SPI_BUTTERFLY=m
 # Dallas's 1-wire bus
 #
 CONFIG_W1=m
-CONFIG_W1_MATROX=m
-CONFIG_W1_DS9490=m
-CONFIG_W1_DS9490_BRIDGE=m
-CONFIG_W1_THERM=m
-CONFIG_W1_SMEM=m
-CONFIG_W1_DS2433=m
-CONFIG_W1_DS2433_CRC=y
+
+#
+# 1-wire Bus Masters
+#
+CONFIG_W1_MASTER_MATROX=m
+CONFIG_W1_MASTER_DS9490=m
+CONFIG_W1_MASTER_DS9490_BRIDGE=m
+CONFIG_W1_MASTER_DS2482=m
+
+#
+# 1-wire Slaves
+#
+CONFIG_W1_SLAVE_THERM=m
+CONFIG_W1_SLAVE_SMEM=m
+CONFIG_W1_SLAVE_DS2433=m
 
 #
 # Hardware Monitoring support
@@ -2050,22 +2077,22 @@ CONFIG_IBM_ASM=m
 CONFIG_IBM_ASM=m
 
 #
-# Multimedia Capabilities Port drivers
-#
-
-#
 # Multimedia devices
 #
 CONFIG_VIDEO_DEV=m
-
-#
-# Video For Linux
-#
-
-#
-# Video Adapters
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=m
+
+#
+# Video Capture Adapters
+#
+
+#
+# Video Capture Adapters
 #
 # CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_VIVI=m
 CONFIG_VIDEO_BT848=m
 CONFIG_VIDEO_BT848_DVB=y
 CONFIG_VIDEO_SAA6588=m
@@ -2075,6 +2102,7 @@ CONFIG_VIDEO_CPIA=m
 CONFIG_VIDEO_CPIA=m
 CONFIG_VIDEO_CPIA_PP=m
 CONFIG_VIDEO_CPIA_USB=m
+CONFIG_VIDEO_CPIA2=m
 CONFIG_VIDEO_SAA5246A=m
 CONFIG_VIDEO_SAA5249=m
 CONFIG_TUNER_3036=m
@@ -2095,15 +2123,43 @@ CONFIG_VIDEO_DPC=m
 CONFIG_VIDEO_DPC=m
 CONFIG_VIDEO_HEXIUM_ORION=m
 CONFIG_VIDEO_HEXIUM_GEMINI=m
+CONFIG_VIDEO_CX88_VP3054=m
 CONFIG_VIDEO_CX88=m
 CONFIG_VIDEO_CX88_ALSA=m
 CONFIG_VIDEO_CX88_DVB=m
 CONFIG_VIDEO_CX88_DVB_ALL_FRONTENDS=y
-CONFIG_VIDEO_CX88_VP3054=m
+CONFIG_VIDEO_OVCAMCHIP=m
+
+#
+# Encoders and Decoders
+#
+CONFIG_VIDEO_MSP3400=m
+CONFIG_VIDEO_CS53L32A=m
+CONFIG_VIDEO_WM8775=m
+CONFIG_VIDEO_WM8739=m
+CONFIG_VIDEO_CX25840=m
+CONFIG_VIDEO_SAA711X=m
+CONFIG_VIDEO_SAA7127=m
+CONFIG_VIDEO_UPD64031A=m
+CONFIG_VIDEO_UPD64083=m
+
+#
+# V4L USB devices
+#
 CONFIG_VIDEO_EM28XX=m
-CONFIG_VIDEO_OVCAMCHIP=m
-CONFIG_VIDEO_AUDIO_DECODER=m
-CONFIG_VIDEO_DECODER=m
+CONFIG_USB_DSBR=m
+CONFIG_VIDEO_USBVIDEO=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+CONFIG_USB_ET61X251=m
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+CONFIG_USB_W9968CF=m
+CONFIG_USB_ZC0301=m
+CONFIG_USB_PWC=m
 
 #
 # Radio Adapters
@@ -2197,6 +2253,7 @@ CONFIG_DVB_TDA1004X=m
 CONFIG_DVB_TDA1004X=m
 CONFIG_DVB_NXT6000=m
 CONFIG_DVB_MT352=m
+CONFIG_DVB_ZL10353=m
 CONFIG_DVB_DIB3000MB=m
 CONFIG_DVB_DIB3000MC=m
 
@@ -2224,6 +2281,7 @@ CONFIG_VIDEO_BTCX=m
 CONFIG_VIDEO_BTCX=m
 CONFIG_VIDEO_IR=m
 CONFIG_VIDEO_TVEEPROM=m
+CONFIG_USB_DABUSB=m
 
 #
 # Graphics support
@@ -2233,6 +2291,7 @@ CONFIG_FB_CFB_COPYAREA=y
 CONFIG_FB_CFB_COPYAREA=y
 CONFIG_FB_CFB_IMAGEBLIT=y
 # CONFIG_FB_MACMODES is not set
+CONFIG_FB_FIRMWARE_EDID=y
 CONFIG_FB_MODE_HELPERS=y
 CONFIG_FB_TILEBLITTING=y
 CONFIG_FB_CIRRUS=m
@@ -2263,7 +2322,6 @@ CONFIG_FB_MATROX_G=y
 CONFIG_FB_MATROX_G=y
 # CONFIG_FB_MATROX_I2C is not set
 CONFIG_FB_MATROX_MULTIHEAD=y
-# CONFIG_FB_RADEON_OLD is not set
 CONFIG_FB_RADEON=m
 CONFIG_FB_RADEON_I2C=y
 # CONFIG_FB_RADEON_DEBUG is not set
@@ -2287,6 +2345,7 @@ CONFIG_FB_TRIDENT=m
 CONFIG_FB_TRIDENT=m
 # CONFIG_FB_TRIDENT_ACCEL is not set
 CONFIG_FB_GEODE=y
+CONFIG_FB_GEODE_GX=m
 CONFIG_FB_GEODE_GX1=m
 CONFIG_FB_VIRTUAL=m
 
@@ -2294,6 +2353,7 @@ CONFIG_FB_VIRTUAL=m
 # Console display driver support
 #
 CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
 CONFIG_DUMMY_CONSOLE=y
 CONFIG_FRAMEBUFFER_CONSOLE=m
 # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
@@ -2329,11 +2389,13 @@ CONFIG_SND_OSSEMUL=y
 CONFIG_SND_OSSEMUL=y
 CONFIG_SND_MIXER_OSS=m
 CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
 CONFIG_SND_SEQUENCER_OSS=y
 CONFIG_SND_RTCTIMER=m
 CONFIG_SND_SEQ_RTCTIMER_DEFAULT=y
 # CONFIG_SND_DYNAMIC_MINORS is not set
 CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
 # CONFIG_SND_VERBOSE_PRINTK is not set
 # CONFIG_SND_DEBUG is not set
 
@@ -2355,6 +2417,7 @@ CONFIG_SND_MPU401=m
 # PCI devices
 #
 CONFIG_SND_AD1889=m
+CONFIG_SND_ALS300=m
 CONFIG_SND_ALS4000=m
 CONFIG_SND_ALI5451=m
 CONFIG_SND_ATIIXP=m
@@ -2378,7 +2441,6 @@ CONFIG_SND_ES1938=m
 CONFIG_SND_ES1938=m
 CONFIG_SND_ES1968=m
 CONFIG_SND_FM801=m
-# CONFIG_SND_FM801_TEA575X_BOOL is not set
 CONFIG_SND_FM801_TEA575X=m
 CONFIG_SND_HDA_INTEL=m
 CONFIG_SND_HDSP=m
@@ -2392,6 +2454,7 @@ CONFIG_SND_MIXART=m
 CONFIG_SND_MIXART=m
 CONFIG_SND_NM256=m
 CONFIG_SND_PCXHR=m
+CONFIG_SND_RIPTIDE=m
 CONFIG_SND_RME32=m
 CONFIG_SND_RME96=m
 CONFIG_SND_RME9652=m
@@ -2411,17 +2474,24 @@ CONFIG_SND_USB_USX2Y=m
 #
 # PCMCIA devices
 #
+CONFIG_SND_VXPOCKET=m
+CONFIG_SND_PDAUDIOCF=m
 
 #
 # Open Sound System
 #
 CONFIG_SOUND_PRIME=m
-# CONFIG_OBSOLETE_OSS_DRIVER is not set
+CONFIG_SOUND_BT878=m
+CONFIG_SOUND_EMU10K1=m
+# CONFIG_MIDI_EMU10K1 is not set
 CONFIG_SOUND_FUSION=m
+CONFIG_SOUND_ES1371=m
 CONFIG_SOUND_ICH=m
 CONFIG_SOUND_TRIDENT=m
 # CONFIG_SOUND_MSNDCLAS is not set
 # CONFIG_SOUND_MSNDPIN is not set
+CONFIG_SOUND_VIA82CXXX=m
+# CONFIG_MIDI_VIA82CXXX is not set
 # CONFIG_SOUND_OSS is not set
 CONFIG_SOUND_TVMIXER=m
 
@@ -2430,6 +2500,7 @@ CONFIG_SOUND_TVMIXER=m
 #
 CONFIG_USB_ARCH_HAS_HCD=y
 CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
 CONFIG_USB=m
 # CONFIG_USB_DEBUG is not set
 
@@ -2459,7 +2530,6 @@ CONFIG_USB_SL811_CS=m
 #
 # USB Device Class drivers
 #
-# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
 CONFIG_USB_ACM=m
 CONFIG_USB_PRINTER=m
 
@@ -2505,9 +2575,11 @@ CONFIG_USB_ACECAD=m
 CONFIG_USB_ACECAD=m
 CONFIG_USB_KBTAB=m
 CONFIG_USB_POWERMATE=m
-CONFIG_USB_MTOUCH=m
-CONFIG_USB_ITMTOUCH=m
-CONFIG_USB_EGALAX=m
+CONFIG_USB_TOUCHSCREEN=m
+CONFIG_USB_TOUCHSCREEN_EGALAX=y
+CONFIG_USB_TOUCHSCREEN_PANJIT=y
+CONFIG_USB_TOUCHSCREEN_3M=y
+CONFIG_USB_TOUCHSCREEN_ITM=y
 CONFIG_USB_YEALINK=m
 CONFIG_USB_XPAD=m
 CONFIG_USB_ATI_REMOTE=m
@@ -2520,22 +2592,6 @@ CONFIG_USB_APPLETOUCH=m
 #
 CONFIG_USB_MDC800=m
 CONFIG_USB_MICROTEK=m
-
-#
-# USB Multimedia devices
-#
-CONFIG_USB_DABUSB=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_DSBR=m
-CONFIG_USB_ET61X251=m
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-CONFIG_USB_W9968CF=m
-CONFIG_USB_PWC=m
 
 #
 # USB Network Adapters
@@ -2573,6 +2629,7 @@ CONFIG_USB_SERIAL_GENERIC=y
 CONFIG_USB_SERIAL_GENERIC=y
 CONFIG_USB_SERIAL_AIRPRIME=m
 CONFIG_USB_SERIAL_ANYDATA=m
+CONFIG_USB_SERIAL_ARK3116=m
 CONFIG_USB_SERIAL_BELKIN=m
 CONFIG_USB_SERIAL_WHITEHEAT=m
 CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
@@ -2580,6 +2637,7 @@ CONFIG_USB_SERIAL_CYPRESS_M8=m
 CONFIG_USB_SERIAL_CYPRESS_M8=m
 CONFIG_USB_SERIAL_EMPEG=m
 CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
 CONFIG_USB_SERIAL_VISOR=m
 CONFIG_USB_SERIAL_IPAQ=m
 CONFIG_USB_SERIAL_IR=m
@@ -2604,6 +2662,7 @@ CONFIG_USB_SERIAL_KLSI=m
 CONFIG_USB_SERIAL_KLSI=m
 CONFIG_USB_SERIAL_KOBIL_SCT=m
 CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_NAVMAN=m
 CONFIG_USB_SERIAL_PL2303=m
 CONFIG_USB_SERIAL_HP4X=m
 CONFIG_USB_SERIAL_SAFE=m
@@ -2655,6 +2714,7 @@ CONFIG_USB_NET2280=m
 # CONFIG_USB_GADGET_GOKU is not set
 # CONFIG_USB_GADGET_LH7A40X is not set
 # CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
 # CONFIG_USB_GADGET_DUMMY_HCD is not set
 CONFIG_USB_GADGET_DUALSPEED=y
 CONFIG_USB_ZERO=m
@@ -2671,7 +2731,25 @@ CONFIG_MMC=m
 CONFIG_MMC=m
 # CONFIG_MMC_DEBUG is not set
 CONFIG_MMC_BLOCK=m
+CONFIG_MMC_SDHCI=m
 CONFIG_MMC_WBSD=m
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=m
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
 
 #
 # InfiniBand support
@@ -2680,9 +2758,10 @@ CONFIG_INFINIBAND_USER_MAD=m
 CONFIG_INFINIBAND_USER_MAD=m
 CONFIG_INFINIBAND_USER_ACCESS=m
 CONFIG_INFINIBAND_MTHCA=m
-# CONFIG_INFINIBAND_MTHCA_DEBUG is not set
+CONFIG_INFINIBAND_MTHCA_DEBUG=y
 CONFIG_INFINIBAND_IPOIB=m
-# CONFIG_INFINIBAND_IPOIB_DEBUG is not set
+CONFIG_INFINIBAND_IPOIB_DEBUG=y
+# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
 CONFIG_INFINIBAND_SRP=m
 
 #
@@ -2702,6 +2781,29 @@ CONFIG_EDAC_I82860=m
 CONFIG_EDAC_I82860=m
 CONFIG_EDAC_R82600=m
 CONFIG_EDAC_POLL=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=m
+CONFIG_RTC_CLASS=m
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=m
+CONFIG_RTC_INTF_PROC=m
+CONFIG_RTC_INTF_DEV=m
+
+#
+# RTC drivers
+#
+CONFIG_RTC_DRV_X1205=m
+CONFIG_RTC_DRV_DS1672=m
+CONFIG_RTC_DRV_PCF8563=m
+CONFIG_RTC_DRV_RS5C372=m
+CONFIG_RTC_DRV_M48T86=m
+CONFIG_RTC_DRV_TEST=m
 
 #
 # File systems
@@ -2777,12 +2879,10 @@ CONFIG_NTFS_FS=m
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
-# CONFIG_PROC_VMCORE is not set
 CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_HUGETLB_PAGE is not set
 CONFIG_RAMFS=y
-CONFIG_RELAYFS_FS=m
 CONFIG_CONFIGFS_FS=m
 
 #
@@ -2954,11 +3054,13 @@ CONFIG_DEBUG_BUGVERBOSE=y
 # CONFIG_DEBUG_FS is not set
 # CONFIG_DEBUG_VM is not set
 # CONFIG_FRAME_POINTER is not set
+# CONFIG_UNWIND_INFO is not set
 CONFIG_FORCED_INLINING=y
 # CONFIG_RCU_TORTURE_TEST is not set
 CONFIG_EARLY_PRINTK=y
 CONFIG_DEBUG_STACKOVERFLOW=y
 # CONFIG_DEBUG_STACK_USAGE is not set
+CONFIG_STACK_BACKTRACE_COLS=2
 # CONFIG_DEBUG_PAGEALLOC is not set
 # CONFIG_DEBUG_RODATA is not set
 # CONFIG_4KSTACKS is not set
@@ -3013,24 +3115,26 @@ CONFIG_CRYPTO_TEST=m
 #
 # CONFIG_CRYPTO_DEV_PADLOCK is not set
 CONFIG_XEN=y
-CONFIG_XEN_INTERFACE_VERSION=0x00030202
+CONFIG_XEN_INTERFACE_VERSION=0x00030203
 
 #
 # XEN
 #
 CONFIG_XEN_PRIVILEGED_GUEST=y
 # CONFIG_XEN_UNPRIVILEGED_GUEST is not set
+CONFIG_XEN_PRIVCMD=y
+CONFIG_XEN_XENBUS_DEV=y
 CONFIG_XEN_BACKEND=y
+CONFIG_XEN_BLKDEV_BACKEND=y
+CONFIG_XEN_BLKDEV_TAP=y
+CONFIG_XEN_NETDEV_BACKEND=y
+# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
+CONFIG_XEN_NETDEV_LOOPBACK=y
 CONFIG_XEN_PCIDEV_BACKEND=m
 CONFIG_XEN_PCIDEV_BACKEND_VPCI=y
 # CONFIG_XEN_PCIDEV_BACKEND_PASS is not set
 # CONFIG_XEN_PCIDEV_BACKEND_SLOT is not set
 # CONFIG_XEN_PCIDEV_BE_DEBUG is not set
-CONFIG_XEN_BLKDEV_BACKEND=y
-CONFIG_XEN_BLKDEV_TAP=y
-CONFIG_XEN_NETDEV_BACKEND=y
-# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
-CONFIG_XEN_NETDEV_LOOPBACK=y
 # CONFIG_XEN_TPMDEV_BACKEND is not set
 CONFIG_XEN_BLKDEV_FRONTEND=y
 CONFIG_XEN_NETDEV_FRONTEND=y
@@ -3044,7 +3148,14 @@ CONFIG_XEN_COMPAT_030002=y
 CONFIG_XEN_COMPAT_030002=y
 CONFIG_HAVE_ARCH_ALLOC_SKB=y
 CONFIG_HAVE_ARCH_DEV_ALLOC_SKB=y
+CONFIG_HAVE_IRQ_IGNORE_UNHANDLED=y
 CONFIG_NO_IDLE_HZ=y
+CONFIG_XEN_UTIL=y
+CONFIG_XEN_BALLOON=y
+CONFIG_XEN_DEVMEM=y
+CONFIG_XEN_SKBUFF=y
+CONFIG_XEN_REBOOT=y
+CONFIG_XEN_SMPBOOT=y
 
 #
 # Library routines
diff -r 6d6a4d5801bd -r 4fad820a2233 buildconfigs/linux-defconfig_xen_x86_64
--- a/buildconfigs/linux-defconfig_xen_x86_64   Tue Jan 09 10:50:46 2007 +0000
+++ b/buildconfigs/linux-defconfig_xen_x86_64   Fri Jan 12 14:30:49 2007 +0000
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16.13-xen
-# Thu May 11 17:18:58 2006
+# Linux kernel version: 2.6.17-xen
+# Thu Jan 11 10:10:22 2007
 #
 CONFIG_X86_64=y
 CONFIG_64BIT=y
@@ -9,6 +9,7 @@ CONFIG_SEMAPHORE_SLEEPERS=y
 CONFIG_SEMAPHORE_SLEEPERS=y
 CONFIG_MMU=y
 CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
 CONFIG_GENERIC_CALIBRATE_DELAY=y
 CONFIG_X86_CMPXCHG=y
 CONFIG_EARLY_PRINTK=y
@@ -40,6 +41,7 @@ CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_CPUSETS=y
+# CONFIG_RELAY is not set
 CONFIG_INITRAMFS_SOURCE=""
 CONFIG_UID16=y
 CONFIG_VM86=y
@@ -56,10 +58,6 @@ CONFIG_FUTEX=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
 CONFIG_SLAB=y
 # CONFIG_TINY_SHMEM is not set
 CONFIG_BASE_SMALL=0
@@ -72,7 +70,6 @@ CONFIG_MODULES=y
 CONFIG_MODULES=y
 CONFIG_MODULE_UNLOAD=y
 CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
 CONFIG_MODVERSIONS=y
 CONFIG_MODULE_SRCVERSION_ALL=y
 CONFIG_KMOD=y
@@ -82,6 +79,8 @@ CONFIG_STOP_MACHINE=y
 # Block layer
 #
 CONFIG_LBD=y
+# CONFIG_BLK_DEV_IO_TRACE is not set
+CONFIG_LSF=y
 
 #
 # IO Schedulers
@@ -109,6 +108,7 @@ CONFIG_X86_NO_IDT=y
 CONFIG_X86_NO_IDT=y
 CONFIG_X86_L1_CACHE_BYTES=128
 CONFIG_X86_L1_CACHE_SHIFT=7
+CONFIG_X86_INTERNODE_CACHE_BYTES=128
 CONFIG_X86_GOOD_APIC=y
 CONFIG_MICROCODE=y
 CONFIG_X86_MSR=m
@@ -118,11 +118,11 @@ CONFIG_X86_LOCAL_APIC=y
 CONFIG_X86_LOCAL_APIC=y
 CONFIG_MTRR=y
 CONFIG_SMP=y
+# CONFIG_SCHED_MC is not set
 # CONFIG_PREEMPT_NONE is not set
 CONFIG_PREEMPT_VOLUNTARY=y
 # CONFIG_PREEMPT is not set
 CONFIG_PREEMPT_BKL=y
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
 CONFIG_ARCH_FLATMEM_ENABLE=y
 CONFIG_SELECT_MEMORY_MODEL=y
 CONFIG_FLATMEM_MANUAL=y
@@ -135,14 +135,15 @@ CONFIG_NR_CPUS=32
 CONFIG_NR_CPUS=32
 CONFIG_HOTPLUG_CPU=y
 CONFIG_SWIOTLB=y
+CONFIG_KEXEC=y
 # CONFIG_CRASH_DUMP is not set
-CONFIG_PHYSICAL_START=0x100000
+CONFIG_PHYSICAL_START=0x200000
 CONFIG_SECCOMP=y
 CONFIG_HZ_100=y
-CONFIG_KEXEC=y
 # CONFIG_HZ_250 is not set
 # CONFIG_HZ_1000 is not set
 CONFIG_HZ=100
+# CONFIG_REORDER is not set
 CONFIG_GENERIC_HARDIRQS=y
 CONFIG_GENERIC_IRQ_PROBE=y
 CONFIG_ISA_DMA_API=y
@@ -168,6 +169,7 @@ CONFIG_ACPI_THERMAL=m
 CONFIG_ACPI_THERMAL=m
 CONFIG_ACPI_ASUS=m
 CONFIG_ACPI_IBM=m
+# CONFIG_ACPI_IBM_DOCK is not set
 CONFIG_ACPI_TOSHIBA=m
 CONFIG_ACPI_BLACKLIST_YEAR=0
 # CONFIG_ACPI_DEBUG is not set
@@ -175,6 +177,7 @@ CONFIG_ACPI_POWER=y
 CONFIG_ACPI_POWER=y
 CONFIG_ACPI_SYSTEM=y
 CONFIG_ACPI_CONTAINER=m
+CONFIG_ACPI_HOTPLUG_MEMORY=m
 
 #
 # CPU Frequency scaling
@@ -189,9 +192,7 @@ CONFIG_PCI_DIRECT=y
 # CONFIG_PCI_MMCONFIG is not set
 CONFIG_XEN_PCIDEV_FRONTEND=y
 # CONFIG_XEN_PCIDEV_FE_DEBUG is not set
-# CONFIG_UNORDERED_IO is not set
 # CONFIG_PCIEPORTBUS is not set
-# CONFIG_PCI_LEGACY_PROC is not set
 # CONFIG_PCI_DEBUG is not set
 
 #
@@ -277,6 +278,7 @@ CONFIG_INET_AH=m
 CONFIG_INET_AH=m
 CONFIG_INET_ESP=m
 CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
 CONFIG_INET_TUNNEL=m
 CONFIG_INET_DIAG=m
 CONFIG_INET_TCP_DIAG=m
@@ -329,9 +331,11 @@ CONFIG_IP_VS_FTP=m
 CONFIG_IP_VS_FTP=m
 CONFIG_IPV6=m
 CONFIG_IPV6_PRIVACY=y
+# CONFIG_IPV6_ROUTER_PREF is not set
 CONFIG_INET6_AH=m
 CONFIG_INET6_ESP=m
 CONFIG_INET6_IPCOMP=m
+CONFIG_INET6_XFRM_TUNNEL=m
 CONFIG_INET6_TUNNEL=m
 CONFIG_IPV6_TUNNEL=m
 CONFIG_NETFILTER=y
@@ -355,11 +359,14 @@ CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
 CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
 CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
 CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
 CONFIG_NETFILTER_XT_MATCH_HELPER=m
 CONFIG_NETFILTER_XT_MATCH_LENGTH=m
 CONFIG_NETFILTER_XT_MATCH_LIMIT=m
 CONFIG_NETFILTER_XT_MATCH_MAC=m
 CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
 CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
 CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
 CONFIG_NETFILTER_XT_MATCH_REALM=m
@@ -383,20 +390,19 @@ CONFIG_IP_NF_TFTP=m
 CONFIG_IP_NF_TFTP=m
 CONFIG_IP_NF_AMANDA=m
 CONFIG_IP_NF_PPTP=m
+CONFIG_IP_NF_H323=m
 CONFIG_IP_NF_QUEUE=m
 CONFIG_IP_NF_IPTABLES=m
 CONFIG_IP_NF_MATCH_IPRANGE=m
-CONFIG_IP_NF_MATCH_MULTIPORT=m
 CONFIG_IP_NF_MATCH_TOS=m
 CONFIG_IP_NF_MATCH_RECENT=m
 CONFIG_IP_NF_MATCH_ECN=m
 CONFIG_IP_NF_MATCH_DSCP=m
-CONFIG_IP_NF_MATCH_AH_ESP=m
+CONFIG_IP_NF_MATCH_AH=m
 CONFIG_IP_NF_MATCH_TTL=m
 CONFIG_IP_NF_MATCH_OWNER=m
 CONFIG_IP_NF_MATCH_ADDRTYPE=m
 CONFIG_IP_NF_MATCH_HASHLIMIT=m
-CONFIG_IP_NF_MATCH_POLICY=m
 CONFIG_IP_NF_FILTER=m
 CONFIG_IP_NF_TARGET_REJECT=m
 CONFIG_IP_NF_TARGET_LOG=m
@@ -414,6 +420,7 @@ CONFIG_IP_NF_NAT_TFTP=m
 CONFIG_IP_NF_NAT_TFTP=m
 CONFIG_IP_NF_NAT_AMANDA=m
 CONFIG_IP_NF_NAT_PPTP=m
+CONFIG_IP_NF_NAT_H323=m
 CONFIG_IP_NF_MANGLE=m
 CONFIG_IP_NF_TARGET_TOS=m
 CONFIG_IP_NF_TARGET_ECN=m
@@ -434,12 +441,10 @@ CONFIG_IP6_NF_MATCH_OPTS=m
 CONFIG_IP6_NF_MATCH_OPTS=m
 CONFIG_IP6_NF_MATCH_FRAG=m
 CONFIG_IP6_NF_MATCH_HL=m
-CONFIG_IP6_NF_MATCH_MULTIPORT=m
 CONFIG_IP6_NF_MATCH_OWNER=m
 CONFIG_IP6_NF_MATCH_IPV6HEADER=m
-CONFIG_IP6_NF_MATCH_AHESP=m
+CONFIG_IP6_NF_MATCH_AH=m
 CONFIG_IP6_NF_MATCH_EUI64=m
-CONFIG_IP6_NF_MATCH_POLICY=m
 CONFIG_IP6_NF_FILTER=m
 CONFIG_IP6_NF_TARGET_LOG=m
 CONFIG_IP6_NF_TARGET_REJECT=m
@@ -481,10 +486,12 @@ CONFIG_BRIDGE_EBT_ULOG=m
 #
 CONFIG_IP_DCCP=m
 CONFIG_INET_DCCP_DIAG=m
+CONFIG_IP_DCCP_ACKVEC=y
 
 #
 # DCCP CCIDs Configuration (EXPERIMENTAL)
 #
+CONFIG_IP_DCCP_CCID2=m
 CONFIG_IP_DCCP_CCID3=m
 CONFIG_IP_DCCP_TFRC_LIB=m
 
@@ -492,7 +499,6 @@ CONFIG_IP_DCCP_TFRC_LIB=m
 # DCCP Kernel Hacking
 #
 # CONFIG_IP_DCCP_DEBUG is not set
-# CONFIG_IP_DCCP_UNLOAD_HACK is not set
 
 #
 # SCTP Configuration (EXPERIMENTAL)
@@ -646,6 +652,7 @@ CONFIG_ESI_DONGLE=m
 CONFIG_ESI_DONGLE=m
 CONFIG_ACTISYS_DONGLE=m
 CONFIG_TEKRAM_DONGLE=m
+CONFIG_TOIM3232_DONGLE=m
 CONFIG_LITELINK_DONGLE=m
 CONFIG_MA600_DONGLE=m
 CONFIG_GIRBIL_DONGLE=m
@@ -704,6 +711,9 @@ CONFIG_IEEE80211_CRYPT_WEP=m
 CONFIG_IEEE80211_CRYPT_WEP=m
 CONFIG_IEEE80211_CRYPT_CCMP=m
 CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_WIRELESS_EXT=y
 
 #
 # Device Drivers
@@ -772,7 +782,6 @@ CONFIG_MTD_CFI_I2=y
 # CONFIG_MTD_OTP is not set
 CONFIG_MTD_CFI_INTELEXT=m
 CONFIG_MTD_CFI_AMDSTD=m
-CONFIG_MTD_CFI_AMDSTD_RETRY=3
 CONFIG_MTD_CFI_STAA=m
 CONFIG_MTD_CFI_UTIL=m
 CONFIG_MTD_RAM=m
@@ -815,7 +824,6 @@ CONFIG_MTD_MTDRAM=m
 CONFIG_MTD_MTDRAM=m
 CONFIG_MTDRAM_TOTAL_SIZE=4096
 CONFIG_MTDRAM_ERASE_SIZE=128
-# CONFIG_MTD_BLKMTD is not set
 CONFIG_MTD_BLOCK2MTD=m
 
 #
@@ -1092,10 +1100,8 @@ CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MOD
 CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
 CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
 CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
-# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
+CONFIG_SCSI_SYM53C8XX_MMIO=y
 # CONFIG_SCSI_IPR is not set
-CONFIG_SCSI_QLOGIC_FC=m
-CONFIG_SCSI_QLOGIC_FC_FIRMWARE=y
 CONFIG_SCSI_QLOGIC_1280=m
 CONFIG_SCSI_QLA_FC=m
 # CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE is not set
@@ -1121,6 +1127,7 @@ CONFIG_MD_RAID1=m
 CONFIG_MD_RAID1=m
 CONFIG_MD_RAID10=m
 CONFIG_MD_RAID5=m
+CONFIG_MD_RAID5_RESHAPE=y
 CONFIG_MD_RAID6=m
 CONFIG_MD_MULTIPATH=m
 CONFIG_MD_FAULTY=m
@@ -1326,6 +1333,7 @@ CONFIG_ABYSS=m
 # Wireless LAN (non-hamradio)
 #
 CONFIG_NET_RADIO=y
+CONFIG_NET_WIRELESS_RTNETLINK=y
 
 #
 # Obsolete Wireless cards support (pre-802.11)
@@ -1346,6 +1354,8 @@ CONFIG_IPW2100_MONITOR=y
 CONFIG_IPW2100_MONITOR=y
 # CONFIG_IPW2100_DEBUG is not set
 CONFIG_IPW2200=m
+CONFIG_IPW2200_MONITOR=y
+CONFIG_IPW_QOS=y
 # CONFIG_IPW2200_DEBUG is not set
 CONFIG_AIRO=m
 CONFIG_HERMES=m
@@ -1375,6 +1385,13 @@ CONFIG_HOSTAP_PLX=m
 CONFIG_HOSTAP_PLX=m
 CONFIG_HOSTAP_PCI=m
 # CONFIG_HOSTAP_CS is not set
+CONFIG_BCM43XX=m
+CONFIG_BCM43XX_DEBUG=y
+CONFIG_BCM43XX_DMA=y
+CONFIG_BCM43XX_PIO=y
+CONFIG_BCM43XX_DMA_AND_PIO_MODE=y
+# CONFIG_BCM43XX_DMA_MODE is not set
+# CONFIG_BCM43XX_PIO_MODE is not set
 CONFIG_NET_WIRELESS=y
 
 #
@@ -1528,6 +1545,15 @@ CONFIG_HISAX_HDLC=y
 #
 
 #
+# Siemens Gigaset
+#
+CONFIG_ISDN_DRV_GIGASET=m
+CONFIG_GIGASET_BASE=m
+CONFIG_GIGASET_M105=m
+# CONFIG_GIGASET_DEBUG is not set
+# CONFIG_GIGASET_UNDOCREQ is not set
+
+#
 # CAPI subsystem
 #
 CONFIG_ISDN_CAPI=m
@@ -1739,6 +1765,8 @@ CONFIG_AGP=m
 CONFIG_AGP=m
 CONFIG_AGP_AMD64=m
 CONFIG_AGP_INTEL=m
+CONFIG_AGP_SIS=m
+CONFIG_AGP_VIA=m
 CONFIG_DRM=m
 CONFIG_DRM_TDFX=m
 CONFIG_DRM_R128=m
@@ -1804,7 +1832,6 @@ CONFIG_I2C_PARPORT_LIGHT=m
 CONFIG_I2C_PARPORT_LIGHT=m
 CONFIG_I2C_PROSAVAGE=m
 CONFIG_I2C_SAVAGE4=m
-CONFIG_SCx200_ACB=m
 CONFIG_I2C_SIS5595=m
 CONFIG_I2C_SIS630=m
 CONFIG_I2C_SIS96X=m
@@ -1823,9 +1850,7 @@ CONFIG_SENSORS_PCF8574=m
 CONFIG_SENSORS_PCF8574=m
 CONFIG_SENSORS_PCA9539=m
 CONFIG_SENSORS_PCF8591=m
-CONFIG_SENSORS_RTC8564=m
 CONFIG_SENSORS_MAX6875=m
-CONFIG_RTC_X1205_I2C=m
 # CONFIG_I2C_DEBUG_CORE is not set
 # CONFIG_I2C_DEBUG_ALGO is not set
 # CONFIG_I2C_DEBUG_BUS is not set
@@ -1852,13 +1877,21 @@ CONFIG_SPI_BUTTERFLY=m
 # Dallas's 1-wire bus
 #
 CONFIG_W1=m
-CONFIG_W1_MATROX=m
-CONFIG_W1_DS9490=m
-CONFIG_W1_DS9490_BRIDGE=m
-CONFIG_W1_THERM=m
-CONFIG_W1_SMEM=m
-CONFIG_W1_DS2433=m
-CONFIG_W1_DS2433_CRC=y
+
+#
+# 1-wire Bus Masters
+#
+CONFIG_W1_MASTER_MATROX=m
+CONFIG_W1_MASTER_DS9490=m
+CONFIG_W1_MASTER_DS9490_BRIDGE=m
+CONFIG_W1_MASTER_DS2482=m
+
+#
+# 1-wire Slaves
+#
+CONFIG_W1_SLAVE_THERM=m
+CONFIG_W1_SLAVE_SMEM=m
+CONFIG_W1_SLAVE_DS2433=m
 
 #
 # Hardware Monitoring support
@@ -1910,22 +1943,22 @@ CONFIG_IBM_ASM=m
 CONFIG_IBM_ASM=m
 
 #
-# Multimedia Capabilities Port drivers
-#
-
-#
 # Multimedia devices
 #
 CONFIG_VIDEO_DEV=m
-
-#
-# Video For Linux
-#
-
-#
-# Video Adapters
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=m
+
+#
+# Video Capture Adapters
+#
+
+#
+# Video Capture Adapters
 #
 # CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_VIVI=m
 CONFIG_VIDEO_BT848=m
 CONFIG_VIDEO_BT848_DVB=y
 CONFIG_VIDEO_SAA6588=m
@@ -1935,6 +1968,7 @@ CONFIG_VIDEO_CPIA=m
 CONFIG_VIDEO_CPIA=m
 CONFIG_VIDEO_CPIA_PP=m
 CONFIG_VIDEO_CPIA_USB=m
+CONFIG_VIDEO_CPIA2=m
 CONFIG_VIDEO_SAA5246A=m
 CONFIG_VIDEO_SAA5249=m
 CONFIG_TUNER_3036=m
@@ -1953,15 +1987,43 @@ CONFIG_VIDEO_DPC=m
 CONFIG_VIDEO_DPC=m
 CONFIG_VIDEO_HEXIUM_ORION=m
 CONFIG_VIDEO_HEXIUM_GEMINI=m
+CONFIG_VIDEO_CX88_VP3054=m
 CONFIG_VIDEO_CX88=m
 CONFIG_VIDEO_CX88_ALSA=m
 CONFIG_VIDEO_CX88_DVB=m
 CONFIG_VIDEO_CX88_DVB_ALL_FRONTENDS=y
-CONFIG_VIDEO_CX88_VP3054=m
+CONFIG_VIDEO_OVCAMCHIP=m
+
+#
+# Encoders and Decoders
+#
+CONFIG_VIDEO_MSP3400=m
+CONFIG_VIDEO_CS53L32A=m
+CONFIG_VIDEO_WM8775=m
+CONFIG_VIDEO_WM8739=m
+CONFIG_VIDEO_CX25840=m
+CONFIG_VIDEO_SAA711X=m
+CONFIG_VIDEO_SAA7127=m
+CONFIG_VIDEO_UPD64031A=m
+CONFIG_VIDEO_UPD64083=m
+
+#
+# V4L USB devices
+#
 CONFIG_VIDEO_EM28XX=m
-CONFIG_VIDEO_OVCAMCHIP=m
-CONFIG_VIDEO_AUDIO_DECODER=m
-CONFIG_VIDEO_DECODER=m
+CONFIG_USB_DSBR=m
+CONFIG_VIDEO_USBVIDEO=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+CONFIG_USB_ET61X251=m
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+CONFIG_USB_W9968CF=m
+CONFIG_USB_ZC0301=m
+CONFIG_USB_PWC=m
 
 #
 # Radio Adapters
@@ -2060,6 +2122,7 @@ CONFIG_DVB_TDA1004X=m
 CONFIG_DVB_TDA1004X=m
 CONFIG_DVB_NXT6000=m
 CONFIG_DVB_MT352=m
+CONFIG_DVB_ZL10353=m
 CONFIG_DVB_DIB3000MB=m
 CONFIG_DVB_DIB3000MC=m
 
@@ -2087,6 +2150,7 @@ CONFIG_VIDEO_BTCX=m
 CONFIG_VIDEO_BTCX=m
 CONFIG_VIDEO_IR=m
 CONFIG_VIDEO_TVEEPROM=m
+CONFIG_USB_DABUSB=m
 
 #
 # Graphics support
@@ -2096,6 +2160,7 @@ CONFIG_FB_CFB_COPYAREA=y
 CONFIG_FB_CFB_COPYAREA=y
 CONFIG_FB_CFB_IMAGEBLIT=y
 # CONFIG_FB_MACMODES is not set
+CONFIG_FB_FIRMWARE_EDID=y
 CONFIG_FB_MODE_HELPERS=y
 CONFIG_FB_TILEBLITTING=y
 CONFIG_FB_CIRRUS=m
@@ -2122,7 +2187,6 @@ CONFIG_FB_MATROX_I2C=m
 CONFIG_FB_MATROX_I2C=m
 CONFIG_FB_MATROX_MAVEN=m
 CONFIG_FB_MATROX_MULTIHEAD=y
-# CONFIG_FB_RADEON_OLD is not set
 CONFIG_FB_RADEON=m
 CONFIG_FB_RADEON_I2C=y
 # CONFIG_FB_RADEON_DEBUG is not set
@@ -2145,6 +2209,7 @@ CONFIG_FB_TRIDENT=m
 CONFIG_FB_TRIDENT=m
 CONFIG_FB_TRIDENT_ACCEL=y
 CONFIG_FB_GEODE=y
+CONFIG_FB_GEODE_GX=m
 CONFIG_FB_GEODE_GX1=m
 CONFIG_FB_VIRTUAL=m
 
@@ -2152,6 +2217,7 @@ CONFIG_FB_VIRTUAL=m
 # Console display driver support
 #
 CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
 CONFIG_DUMMY_CONSOLE=y
 CONFIG_FRAMEBUFFER_CONSOLE=y
 CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
@@ -2190,11 +2256,13 @@ CONFIG_SND_OSSEMUL=y
 CONFIG_SND_OSSEMUL=y
 CONFIG_SND_MIXER_OSS=m
 CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
 CONFIG_SND_SEQUENCER_OSS=y
 CONFIG_SND_RTCTIMER=m
 CONFIG_SND_SEQ_RTCTIMER_DEFAULT=y
 CONFIG_SND_DYNAMIC_MINORS=y
 CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
 # CONFIG_SND_VERBOSE_PRINTK is not set
 # CONFIG_SND_DEBUG is not set
 
@@ -2216,6 +2284,7 @@ CONFIG_SND_MPU401=m
 # PCI devices
 #
 CONFIG_SND_AD1889=m
+CONFIG_SND_ALS300=m
 CONFIG_SND_ALS4000=m
 CONFIG_SND_ALI5451=m
 CONFIG_SND_ATIIXP=m
@@ -2238,7 +2307,6 @@ CONFIG_SND_ES1938=m
 CONFIG_SND_ES1938=m
 CONFIG_SND_ES1968=m
 CONFIG_SND_FM801=m
-# CONFIG_SND_FM801_TEA575X_BOOL is not set
 CONFIG_SND_FM801_TEA575X=m
 CONFIG_SND_HDA_INTEL=m
 CONFIG_SND_HDSP=m
@@ -2252,6 +2320,7 @@ CONFIG_SND_MIXART=m
 CONFIG_SND_MIXART=m
 CONFIG_SND_NM256=m
 CONFIG_SND_PCXHR=m
+CONFIG_SND_RIPTIDE=m
 CONFIG_SND_RME32=m
 CONFIG_SND_RME96=m
 CONFIG_SND_RME9652=m
@@ -2271,6 +2340,8 @@ CONFIG_SND_USB_USX2Y=m
 #
 # PCMCIA devices
 #
+CONFIG_SND_VXPOCKET=m
+CONFIG_SND_PDAUDIOCF=m
 
 #
 # Open Sound System
@@ -2282,6 +2353,7 @@ CONFIG_SND_USB_USX2Y=m
 #
 CONFIG_USB_ARCH_HAS_HCD=y
 CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
 CONFIG_USB=m
 # CONFIG_USB_DEBUG is not set
 
@@ -2311,7 +2383,6 @@ CONFIG_USB_SL811_HCD=m
 #
 # USB Device Class drivers
 #
-# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
 CONFIG_USB_ACM=m
 CONFIG_USB_PRINTER=m
 
@@ -2357,9 +2428,11 @@ CONFIG_USB_ACECAD=m
 CONFIG_USB_ACECAD=m
 CONFIG_USB_KBTAB=m
 CONFIG_USB_POWERMATE=m
-CONFIG_USB_MTOUCH=m
-CONFIG_USB_ITMTOUCH=m
-CONFIG_USB_EGALAX=m
+CONFIG_USB_TOUCHSCREEN=m
+CONFIG_USB_TOUCHSCREEN_EGALAX=y
+CONFIG_USB_TOUCHSCREEN_PANJIT=y
+CONFIG_USB_TOUCHSCREEN_3M=y
+CONFIG_USB_TOUCHSCREEN_ITM=y
 CONFIG_USB_YEALINK=m
 CONFIG_USB_XPAD=m
 CONFIG_USB_ATI_REMOTE=m
@@ -2372,22 +2445,6 @@ CONFIG_USB_APPLETOUCH=m
 #
 CONFIG_USB_MDC800=m
 CONFIG_USB_MICROTEK=m
-
-#
-# USB Multimedia devices
-#
-CONFIG_USB_DABUSB=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_DSBR=m
-CONFIG_USB_ET61X251=m
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-CONFIG_USB_W9968CF=m
-CONFIG_USB_PWC=m
 
 #
 # USB Network Adapters
@@ -2425,6 +2482,7 @@ CONFIG_USB_SERIAL_GENERIC=y
 CONFIG_USB_SERIAL_GENERIC=y
 CONFIG_USB_SERIAL_AIRPRIME=m
 CONFIG_USB_SERIAL_ANYDATA=m
+CONFIG_USB_SERIAL_ARK3116=m
 CONFIG_USB_SERIAL_BELKIN=m
 CONFIG_USB_SERIAL_WHITEHEAT=m
 CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
@@ -2432,6 +2490,7 @@ CONFIG_USB_SERIAL_CYPRESS_M8=m
 CONFIG_USB_SERIAL_CYPRESS_M8=m
 CONFIG_USB_SERIAL_EMPEG=m
 CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
 CONFIG_USB_SERIAL_VISOR=m
 CONFIG_USB_SERIAL_IPAQ=m
 CONFIG_USB_SERIAL_IR=m
@@ -2456,6 +2515,7 @@ CONFIG_USB_SERIAL_KLSI=m
 CONFIG_USB_SERIAL_KLSI=m
 CONFIG_USB_SERIAL_KOBIL_SCT=m
 CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_NAVMAN=m
 CONFIG_USB_SERIAL_PL2303=m
 CONFIG_USB_SERIAL_HP4X=m
 CONFIG_USB_SERIAL_SAFE=m
@@ -2506,7 +2566,25 @@ CONFIG_MMC=m
 CONFIG_MMC=m
 # CONFIG_MMC_DEBUG is not set
 CONFIG_MMC_BLOCK=m
+CONFIG_MMC_SDHCI=m
 CONFIG_MMC_WBSD=m
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=m
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
 
 #
 # InfiniBand support
@@ -2515,9 +2593,10 @@ CONFIG_INFINIBAND_USER_MAD=m
 CONFIG_INFINIBAND_USER_MAD=m
 CONFIG_INFINIBAND_USER_ACCESS=m
 CONFIG_INFINIBAND_MTHCA=m
-# CONFIG_INFINIBAND_MTHCA_DEBUG is not set
+CONFIG_INFINIBAND_MTHCA_DEBUG=y
 CONFIG_INFINIBAND_IPOIB=m
-# CONFIG_INFINIBAND_IPOIB_DEBUG is not set
+CONFIG_INFINIBAND_IPOIB_DEBUG=y
+# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
 CONFIG_INFINIBAND_SRP=m
 
 #
@@ -2530,12 +2609,31 @@ CONFIG_EDAC=m
 #
 # CONFIG_EDAC_DEBUG is not set
 CONFIG_EDAC_MM_EDAC=m
-CONFIG_EDAC_E7XXX=m
 CONFIG_EDAC_E752X=m
-CONFIG_EDAC_I82875P=m
-CONFIG_EDAC_I82860=m
-CONFIG_EDAC_R82600=m
 CONFIG_EDAC_POLL=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=m
+CONFIG_RTC_CLASS=m
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=m
+CONFIG_RTC_INTF_PROC=m
+CONFIG_RTC_INTF_DEV=m
+
+#
+# RTC drivers
+#
+CONFIG_RTC_DRV_X1205=m
+CONFIG_RTC_DRV_DS1672=m
+CONFIG_RTC_DRV_PCF8563=m
+CONFIG_RTC_DRV_RS5C372=m
+CONFIG_RTC_DRV_M48T86=m
+CONFIG_RTC_DRV_TEST=m
 
 #
 # Firmware Drivers
@@ -2621,7 +2719,6 @@ CONFIG_TMPFS=y
 CONFIG_TMPFS=y
 # CONFIG_HUGETLB_PAGE is not set
 CONFIG_RAMFS=y
-CONFIG_RELAYFS_FS=m
 CONFIG_CONFIGFS_FS=m
 
 #
@@ -2793,6 +2890,7 @@ CONFIG_DETECT_SOFTLOCKUP=y
 # CONFIG_DEBUG_FS is not set
 # CONFIG_DEBUG_VM is not set
 # CONFIG_FRAME_POINTER is not set
+# CONFIG_UNWIND_INFO is not set
 CONFIG_FORCED_INLINING=y
 # CONFIG_RCU_TORTURE_TEST is not set
 # CONFIG_DEBUG_RODATA is not set
@@ -2844,26 +2942,27 @@ CONFIG_CRYPTO_TEST=m
 # Hardware crypto devices
 #
 CONFIG_XEN=y
-CONFIG_XEN_INTERFACE_VERSION=0x00030202
+CONFIG_XEN_INTERFACE_VERSION=0x00030203
 
 #
 # XEN
 #
 CONFIG_XEN_PRIVILEGED_GUEST=y
 # CONFIG_XEN_UNPRIVILEGED_GUEST is not set
+CONFIG_XEN_PRIVCMD=y
+CONFIG_XEN_XENBUS_DEV=y
 CONFIG_XEN_BACKEND=y
+CONFIG_XEN_BLKDEV_BACKEND=y
+CONFIG_XEN_BLKDEV_TAP=y
+CONFIG_XEN_NETDEV_BACKEND=y
+# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
+CONFIG_XEN_NETDEV_LOOPBACK=y
 CONFIG_XEN_PCIDEV_BACKEND=m
 # CONFIG_XEN_PCIDEV_BACKEND_VPCI is not set
 CONFIG_XEN_PCIDEV_BACKEND_PASS=y
 # CONFIG_XEN_PCIDEV_BACKEND_SLOT is not set
 # CONFIG_XEN_PCIDEV_BE_DEBUG is not set
-CONFIG_XEN_BLKDEV_BACKEND=y
-CONFIG_XEN_BLKDEV_TAP=y
-CONFIG_XEN_NETDEV_BACKEND=y
-# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
-CONFIG_XEN_NETDEV_LOOPBACK=y
 CONFIG_XEN_TPMDEV_BACKEND=m
-# CONFIG_XEN_TPMDEV_CLOSE_IF_VTPM_FAILS is not set
 CONFIG_XEN_BLKDEV_FRONTEND=y
 CONFIG_XEN_NETDEV_FRONTEND=y
 CONFIG_XEN_FRAMEBUFFER=y
@@ -2876,7 +2975,14 @@ CONFIG_XEN_COMPAT_030002=y
 CONFIG_XEN_COMPAT_030002=y
 CONFIG_HAVE_ARCH_ALLOC_SKB=y
 CONFIG_HAVE_ARCH_DEV_ALLOC_SKB=y
+CONFIG_HAVE_IRQ_IGNORE_UNHANDLED=y
 CONFIG_NO_IDLE_HZ=y
+CONFIG_XEN_UTIL=y
+CONFIG_XEN_BALLOON=y
+CONFIG_XEN_DEVMEM=y
+CONFIG_XEN_SKBUFF=y
+CONFIG_XEN_REBOOT=y
+CONFIG_XEN_SMPBOOT=y
 
 #
 # Library routines
diff -r 6d6a4d5801bd -r 4fad820a2233 buildconfigs/mk.linux-2.6-xen
--- a/buildconfigs/mk.linux-2.6-xen     Tue Jan 09 10:50:46 2007 +0000
+++ b/buildconfigs/mk.linux-2.6-xen     Fri Jan 12 14:30:49 2007 +0000
@@ -1,5 +1,5 @@ LINUX_SERIES = 2.6
 LINUX_SERIES = 2.6
-LINUX_VER    = 2.6.16.33
+LINUX_VER    = 2.6.17
 
 EXTRAVERSION ?= xen
 
diff -r 6d6a4d5801bd -r 4fad820a2233 linux-2.6-xen-sparse/arch/i386/Kconfig
--- a/linux-2.6-xen-sparse/arch/i386/Kconfig    Tue Jan 09 10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/Kconfig    Fri Jan 12 14:30:49 2007 +0000
@@ -37,6 +37,10 @@ config GENERIC_IOMAP
        bool
        default y
 
+config GENERIC_HWEIGHT
+       bool
+       default y
+
 config ARCH_MAY_HAVE_PC_FDC
        bool
        default y
@@ -48,6 +52,35 @@ source "init/Kconfig"
 source "init/Kconfig"
 
 menu "Processor type and features"
+
+config SMP
+       bool "Symmetric multi-processing support"
+       ---help---
+         This enables support for systems with more than one CPU. If you have
+         a system with only one CPU, like most personal computers, say N. If
+         you have a system with more than one CPU, say Y.
+
+         If you say N here, the kernel will run on single and multiprocessor
+         machines, but will use only one CPU of a multiprocessor machine. If
+         you say Y here, the kernel will run on many, but not all,
+         singleprocessor machines. On a singleprocessor machine, the kernel
+         will run faster if you say N here.
+
+         Note that if you say Y here and choose architecture "586" or
+         "Pentium" under "Processor family", the kernel will not work on 486
+         architectures. Similarly, multiprocessor kernels for the "PPro"
+         architecture may not work on all Pentium based boards.
+
+         People using multiprocessor machines who say Y here should also say
+         Y to "Enhanced Real Time Clock Support", below. The "Advanced Power
+         Management" code will be disabled if you say Y here.
+
+         See also the <file:Documentation/smp.txt>,
+         <file:Documentation/i386/IO-APIC.txt>,
+         <file:Documentation/nmi_watchdog.txt> and the SMP-HOWTO available at
+         <http://www.tldp.org/docs.html#howto>.
+
+         If you don't know what to do here, say N.
 
 choice
        prompt "Subarchitecture Type"
@@ -89,6 +122,7 @@ config X86_VOYAGER
 
 config X86_NUMAQ
        bool "NUMAQ (IBM/Sequent)"
+       select SMP
        select NUMA
        help
          This option is used for getting Linux to run on a (IBM/Sequent) NUMA
@@ -183,48 +217,6 @@ config HPET_EMULATE_RTC
        depends on HPET_TIMER && RTC=y
        default y
 
-config SMP
-       bool "Symmetric multi-processing support"
-       ---help---
-         This enables support for systems with more than one CPU. If you have
-         a system with only one CPU, like most personal computers, say N. If
-         you have a system with more than one CPU, say Y.
-
-         If you say N here, the kernel will run on single and multiprocessor
-         machines, but will use only one CPU of a multiprocessor machine. If
-         you say Y here, the kernel will run on many, but not all,
-         singleprocessor machines. On a singleprocessor machine, the kernel
-         will run faster if you say N here.
-
-         Note that if you say Y here and choose architecture "586" or
-         "Pentium" under "Processor family", the kernel will not work on 486
-         architectures. Similarly, multiprocessor kernels for the "PPro"
-         architecture may not work on all Pentium based boards.
-
-         People using multiprocessor machines who say Y here should also say
-         Y to "Enhanced Real Time Clock Support", below. The "Advanced Power
-         Management" code will be disabled if you say Y here.
-
-         See also the <file:Documentation/smp.txt>,
-         <file:Documentation/i386/IO-APIC.txt>,
-         <file:Documentation/nmi_watchdog.txt> and the SMP-HOWTO available at
-         <http://www.tldp.org/docs.html#howto>.
-
-         If you don't know what to do here, say N.
-
-config SMP_ALTERNATIVES
-       bool "SMP alternatives support (EXPERIMENTAL)"
-       depends on SMP && EXPERIMENTAL
-       help
-         Try to reduce the overhead of running an SMP kernel on a uniprocessor
-         host slightly by replacing certain key instruction sequences
-         according to whether we currently have more than one CPU available.
-         This should provide a noticeable boost to performance when
-         running SMP kernels on UP machines, and have negligible impact
-         when running on an true SMP host.
-
-          If unsure, say N.
-         
 config NR_CPUS
        int "Maximum number of CPUs (2-255)"
        range 2 255
@@ -248,6 +240,15 @@ config SCHED_SMT
          when dealing with Intel Pentium 4 chips with HyperThreading at a
          cost of slightly increased overhead in some places. If unsure say
          N here.
+
+config SCHED_MC
+       bool "Multi-core scheduler support"
+       depends on SMP
+       default y
+       help
+         Multi-core scheduler support improves the CPU scheduler's decision
+         making when dealing with multi-core CPU chips at a cost of slightly
+         increased overhead in some places. If unsure say N here.
 
 source "kernel/Kconfig.preempt"
 
@@ -434,6 +435,7 @@ choice
 
 config NOHIGHMEM
        bool "off"
+       depends on !X86_NUMAQ
        ---help---
          Linux can use up to 64 Gigabytes of physical memory on x86 systems.
          However, the address space of 32-bit x86 processors is only 4
@@ -470,6 +472,7 @@ config NOHIGHMEM
 
 config HIGHMEM4G
        bool "4GB"
+       depends on !X86_NUMAQ
        help
          Select this if you have a 32-bit processor and between 1 and 4
          gigabytes of physical RAM.
@@ -485,7 +488,7 @@ endchoice
 
 choice
        depends on EXPERIMENTAL && !X86_PAE
-       prompt "Memory split"
+       prompt "Memory split" if EMBEDDED
        default VMSPLIT_3G
        help
          Select the desired split between kernel and user memory.
@@ -537,12 +540,14 @@ config NUMA
        default n if X86_PC
        default y if (X86_NUMAQ || X86_SUMMIT)
 
-# Need comments to help the hapless user trying to turn on NUMA support
-comment "NUMA (NUMA-Q) requires SMP, 64GB highmem support"
-       depends on X86_NUMAQ && (!HIGHMEM64G || !SMP)
-
 comment "NUMA (Summit) requires SMP, 64GB highmem support, ACPI"
        depends on X86_SUMMIT && (!HIGHMEM64G || !ACPI)
+
+config NODES_SHIFT
+       int
+       default "4" if X86_NUMAQ
+       default "3"
+       depends on NEED_MULTIPLE_NODES
 
 config HAVE_ARCH_BOOTMEM_NODE
        bool
@@ -697,13 +702,18 @@ config BOOT_IOREMAP
        default y
 
 config REGPARM
-       bool "Use register arguments (EXPERIMENTAL)"
-       depends on EXPERIMENTAL
-       default n
-       help
-       Compile the kernel with -mregparm=3. This uses a different ABI
-       and passes the first three arguments of a function call in registers.
-       This will probably break binary only modules.
+       bool "Use register arguments"
+       default y
+       help
+       Compile the kernel with -mregparm=3. This instructs gcc to use
+       a more efficient function call ABI which passes the first three
+       arguments of a function call via registers, which results in denser
+       and faster code.
+
+       If this option is disabled, then the default ABI of passing
+       arguments via the stack is used.
+
+       If unsure, say Y.
 
 config SECCOMP
        bool "Enable seccomp to safely compute untrusted bytecode"
@@ -772,26 +782,12 @@ config HOTPLUG_CPU
        bool "Support for hot-pluggable CPUs (EXPERIMENTAL)"
        depends on SMP && HOTPLUG && EXPERIMENTAL && !X86_VOYAGER
        ---help---
-         Say Y here to experiment with turning CPUs off and on.  CPUs
-         can be controlled through /sys/devices/system/cpu.
-
-         Say N.
-
-config DOUBLEFAULT
-       default y
-       bool "Enable doublefault exception handler" if EMBEDDED
-       depends on !X86_NO_TSS
-       help
-          This option allows trapping of rare doublefault exceptions that
-          would otherwise cause a system to silently reboot. Disabling this
-          option saves about 4k and might cause you much additional grey
-          hair.
+         Say Y here to experiment with turning CPUs off and on, and to
+         enable suspend on SMP systems. CPUs can be controlled through
+         /sys/devices/system/cpu.
 
 endmenu
 
-config ARCH_ENABLE_MEMORY_HOTPLUG
-       def_bool y
-       depends on HIGHMEM
 
 menu "Power management options (ACPI, APM)"
        depends on !(X86_VOYAGER || XEN_UNPRIVILEGED_GUEST)
diff -r 6d6a4d5801bd -r 4fad820a2233 linux-2.6-xen-sparse/arch/i386/Kconfig.cpu
--- a/linux-2.6-xen-sparse/arch/i386/Kconfig.cpu        Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/Kconfig.cpu        Fri Jan 12 14:30:49 
2007 +0000
@@ -311,5 +311,5 @@ config X86_OOSTORE
 
 config X86_TSC
        bool
-       depends on (MWINCHIP3D || MWINCHIP2 || MCRUSOE || MEFFICEON || 
MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII 
|| M686 || M586MMX || M586TSC || MK8 || MVIAC3_2 || MGEODEGX1) && !X86_NUMAQ
-       default y
+       depends on (MWINCHIP3D || MWINCHIP2 || MCRUSOE || MEFFICEON || 
MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII 
|| M686 || M586MMX || M586TSC || MK8 || MVIAC3_2 || MGEODEGX1 || MGEODE_LX) && 
!X86_NUMAQ
+       default y
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/Kconfig.debug
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/Kconfig.debug      Fri Jan 12 14:30:49 
2007 +0000
@@ -0,0 +1,94 @@
+menu "Kernel hacking"
+
+source "lib/Kconfig.debug"
+
+config EARLY_PRINTK
+       bool "Early printk" if EMBEDDED && DEBUG_KERNEL
+       default y
+       help
+         Write kernel log output directly into the VGA buffer or to a serial
+         port.
+
+         This is useful for kernel debugging when your machine crashes very
+         early before the console code is initialized. For normal operation
+         it is not recommended because it looks ugly and doesn't cooperate
+         with klogd/syslogd or the X server. You should normally N here,
+         unless you want to debug such a crash.
+
+config DEBUG_STACKOVERFLOW
+       bool "Check for stack overflows"
+       depends on DEBUG_KERNEL
+       help
+         This option will cause messages to be printed if free stack space
+         drops below a certain limit.
+
+config DEBUG_STACK_USAGE
+       bool "Stack utilization instrumentation"
+       depends on DEBUG_KERNEL
+       help
+         Enables the display of the minimum amount of free stack which each
+         task has ever had available in the sysrq-T and sysrq-P debug output.
+
+         This option will slow down process creation somewhat.
+
+config STACK_BACKTRACE_COLS
+       int "Stack backtraces per line" if DEBUG_KERNEL
+       range 1 3
+       default 2
+       help
+         Selects how many stack backtrace entries per line to display.
+
+         This can save screen space when displaying traces.
+
+comment "Page alloc debug is incompatible with Software Suspend on i386"
+       depends on DEBUG_KERNEL && SOFTWARE_SUSPEND
+
+config DEBUG_PAGEALLOC
+       bool "Debug page memory allocations"
+       depends on DEBUG_KERNEL && !SOFTWARE_SUSPEND && !HUGETLBFS
+       help
+         Unmap pages from the kernel linear mapping after free_pages().
+         This results in a large slowdown, but helps to find certain types
+         of memory corruptions.
+
+config DEBUG_RODATA
+       bool "Write protect kernel read-only data structures"
+       depends on DEBUG_KERNEL
+       help
+         Mark the kernel read-only data as write-protected in the pagetables,
+         in order to catch accidental (and incorrect) writes to such const
+         data. This option may have a slight performance impact because a
+         portion of the kernel code won't be covered by a 2MB TLB anymore.
+         If in doubt, say "N".
+
+config 4KSTACKS
+       bool "Use 4Kb for kernel stacks instead of 8Kb"
+       depends on DEBUG_KERNEL
+       help
+         If you say Y here the kernel will use a 4Kb stacksize for the
+         kernel stack attached to each process/thread. This facilitates
+         running more threads on a system and also reduces the pressure
+         on the VM subsystem for higher order allocations. This option
+         will also use IRQ stacks to compensate for the reduced stackspace.
+
+config X86_FIND_SMP_CONFIG
+       bool
+       depends on X86_LOCAL_APIC || X86_VOYAGER
+       default y
+
+config X86_MPPARSE
+       bool
+       depends on X86_LOCAL_APIC && !X86_VISWS
+       default y
+
+config DOUBLEFAULT
+       default y
+       bool "Enable doublefault exception handler" if EMBEDDED
+       depends on !X86_NO_TSS
+       help
+          This option allows trapping of rare doublefault exceptions that
+          would otherwise cause a system to silently reboot. Disabling this
+          option saves about 4k and might cause you much additional grey
+          hair.
+
+endmenu
diff -r 6d6a4d5801bd -r 4fad820a2233 linux-2.6-xen-sparse/arch/i386/Makefile
--- a/linux-2.6-xen-sparse/arch/i386/Makefile   Tue Jan 09 10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/Makefile   Fri Jan 12 14:30:49 2007 +0000
@@ -38,6 +38,9 @@ include $(srctree)/arch/i386/Makefile.cp
 include $(srctree)/arch/i386/Makefile.cpu
 
 cflags-$(CONFIG_REGPARM) += -mregparm=3
+
+# temporary until string.h is fixed
+cflags-y += -ffreestanding
 
 # Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use
 # a lot more stack due to the lack of sharing of stacklots:
@@ -108,8 +111,8 @@ AFLAGS += $(mflags-y)
 
 boot := arch/i386/boot
 
-.PHONY: zImage bzImage compressed zlilo bzlilo \
-       zdisk bzdisk fdimage fdimage144 fdimage288 install
+PHONY += zImage bzImage compressed zlilo bzlilo \
+         zdisk bzdisk fdimage fdimage144 fdimage288 isoimage install
 
 ifdef CONFIG_XEN
 CPPFLAGS := -Iinclude$(if $(KBUILD_SRC),2)/asm/mach-xen $(CPPFLAGS)
@@ -141,7 +144,7 @@ zdisk bzdisk: vmlinux
 zdisk bzdisk: vmlinux
        $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) zdisk
 
-fdimage fdimage144 fdimage288: vmlinux
+fdimage fdimage144 fdimage288 isoimage: vmlinux
        $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@
 
 install:
@@ -159,7 +162,10 @@ define archhelp
   echo  '                 install to $$(INSTALL_PATH) and run lilo'
   echo  '  bzdisk       - Create a boot floppy in /dev/fd0'
   echo  '  fdimage      - Create a boot floppy image'
+  echo  '  isoimage     - Create a boot CD-ROM image'
 endef
 
-CLEAN_FILES += arch/$(ARCH)/boot/fdimage arch/$(ARCH)/boot/mtools.conf
+CLEAN_FILES += arch/$(ARCH)/boot/fdimage \
+              arch/$(ARCH)/boot/image.iso \
+              arch/$(ARCH)/boot/mtools.conf
 CLEAN_FILES += vmlinuz vmlinux-stripped
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/kernel/Makefile
--- a/linux-2.6-xen-sparse/arch/i386/kernel/Makefile    Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/Makefile    Fri Jan 12 14:30:49 
2007 +0000
@@ -6,8 +6,8 @@ extra-y := head.o init_task.o vmlinux.ld
 
 obj-y  := process.o semaphore.o signal.o entry.o traps.o irq.o \
                ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_i386.o \
-               pci-dma.o i386_ksyms.o i387.o dmi_scan.o bootflag.o \
-               quirks.o i8237.o topology.o
+               pci-dma.o i386_ksyms.o i387.o bootflag.o \
+               quirks.o i8237.o topology.o alternative.o
 
 obj-y                          += cpu/
 obj-y                          += timers/
@@ -37,7 +37,6 @@ obj-$(CONFIG_DOUBLEFAULT)     += doublefaul
 obj-$(CONFIG_DOUBLEFAULT)      += doublefault.o
 obj-$(CONFIG_VM86)             += vm86.o
 obj-$(CONFIG_EARLY_PRINTK)     += early_printk.o
-obj-$(CONFIG_SMP_ALTERNATIVES) += smpalts.o
 
 EXTRA_AFLAGS   := -traditional
 
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/kernel/acpi/boot-xen.c
--- a/linux-2.6-xen-sparse/arch/i386/kernel/acpi/boot-xen.c     Tue Jan 09 
10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/acpi/boot-xen.c     Fri Jan 12 
14:30:49 2007 +0000
@@ -671,10 +671,10 @@ unsigned long __init acpi_find_rsdp(void
        unsigned long rsdp_phys = 0;
 
        if (efi_enabled) {
-               if (efi.acpi20)
-                       return __pa(efi.acpi20);
-               else if (efi.acpi)
-                       return __pa(efi.acpi);
+               if (efi.acpi20 != EFI_INVALID_TABLE_ADDR)
+                       return efi.acpi20;
+               else if (efi.acpi != EFI_INVALID_TABLE_ADDR)
+                       return efi.acpi;
        }
        /*
         * Scan memory looking for the RSDP signature. First search EBDA (low
@@ -695,6 +695,9 @@ static int __init acpi_parse_madt_lapic_
 static int __init acpi_parse_madt_lapic_entries(void)
 {
        int count;
+
+       if (!cpu_has_apic)
+               return -ENODEV;
 
        /* 
         * Note that the LAPIC address is obtained from the MADT (32-bit value)
@@ -753,6 +756,9 @@ static int __init acpi_parse_madt_ioapic
        if (acpi_disabled || acpi_noirq) {
                return -ENODEV;
        }
+
+       if (!cpu_has_apic)
+               return -ENODEV;
 
        /*
         * if "noapic" boot option, don't look for IO-APICs
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/kernel/apic-xen.c
--- a/linux-2.6-xen-sparse/arch/i386/kernel/apic-xen.c  Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/apic-xen.c  Fri Jan 12 14:30:49 
2007 +0000
@@ -38,6 +38,7 @@
 #include <asm/i8253.h>
 
 #include <mach_apic.h>
+#include <mach_apicdef.h>
 #include <mach_ipi.h>
 
 #include "io_ports.h"
@@ -59,6 +60,18 @@ int enable_local_apic __initdata = 0; /*
  * Debug level
  */
 int apic_verbosity;
+
+int modern_apic(void)
+{
+       unsigned int lvr, version;
+       /* AMD systems use old APIC versions, so check the CPU */
+       if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD &&
+               boot_cpu_data.x86 >= 0xf)
+               return 1;
+       lvr = apic_read(APIC_LVR);
+       version = GET_APIC_VERSION(lvr);
+       return version >= 0x14;
+}
 
 /*
  * 'what should we do if we get a hw irq event on an illegal vector'.
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/kernel/cpu/common-xen.c
--- a/linux-2.6-xen-sparse/arch/i386/kernel/cpu/common-xen.c    Tue Jan 09 
10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/cpu/common-xen.c    Fri Jan 12 
14:30:49 2007 +0000
@@ -15,6 +15,10 @@
 #include <asm/mpspec.h>
 #include <asm/apic.h>
 #include <mach_apic.h>
+#else
+#ifdef CONFIG_XEN
+#define phys_pkg_id(a,b) a
+#endif
 #endif
 #include <asm/hypervisor.h>
 
@@ -28,9 +32,10 @@ EXPORT_PER_CPU_SYMBOL(cpu_16bit_stack);
 EXPORT_PER_CPU_SYMBOL(cpu_16bit_stack);
 #endif
 
-static int cachesize_override __devinitdata = -1;
-static int disable_x86_fxsr __devinitdata = 0;
-static int disable_x86_serial_nr __devinitdata = 1;
+static int cachesize_override __cpuinitdata = -1;
+static int disable_x86_fxsr __cpuinitdata;
+static int disable_x86_serial_nr __cpuinitdata = 1;
+static int disable_x86_sep __cpuinitdata;
 
 struct cpu_dev * cpu_devs[X86_VENDOR_NUM] = {};
 
@@ -62,7 +67,7 @@ static int __init cachesize_setup(char *
 }
 __setup("cachesize=", cachesize_setup);
 
-int __devinit get_model_name(struct cpuinfo_x86 *c)
+int __cpuinit get_model_name(struct cpuinfo_x86 *c)
 {
        unsigned int *v;
        char *p, *q;
@@ -92,7 +97,7 @@ int __devinit get_model_name(struct cpui
 }
 
 
-void __devinit display_cacheinfo(struct cpuinfo_x86 *c)
+void __cpuinit display_cacheinfo(struct cpuinfo_x86 *c)
 {
        unsigned int n, dummy, ecx, edx, l2size;
 
@@ -133,7 +138,7 @@ void __devinit display_cacheinfo(struct 
 /* in particular, if CPUID levels 0x80000002..4 are supported, this isn't used 
*/
 
 /* Look up CPU names by table lookup. */
-static char __devinit *table_lookup_model(struct cpuinfo_x86 *c)
+static char __cpuinit *table_lookup_model(struct cpuinfo_x86 *c)
 {
        struct cpu_model_info *info;
 
@@ -154,7 +159,7 @@ static char __devinit *table_lookup_mode
 }
 
 
-static void __devinit get_cpu_vendor(struct cpuinfo_x86 *c, int early)
+static void __cpuinit get_cpu_vendor(struct cpuinfo_x86 *c, int early)
 {
        char *v = c->x86_vendor_id;
        int i;
@@ -188,6 +193,14 @@ static int __init x86_fxsr_setup(char * 
        return 1;
 }
 __setup("nofxsr", x86_fxsr_setup);
+
+
+static int __init x86_sep_setup(char * s)
+{
+       disable_x86_sep = 1;
+       return 1;
+}
+__setup("nosep", x86_sep_setup);
 
 
 /* Standard macro to see if a specific flag is changeable */
@@ -213,7 +226,7 @@ static inline int flag_is_changeable_p(u
 
 
 /* Probe for the CPUID instruction */
-static int __devinit have_cpuid_p(void)
+static int __cpuinit have_cpuid_p(void)
 {
        return flag_is_changeable_p(X86_EFLAGS_ID);
 }
@@ -257,10 +270,10 @@ static void __init early_cpu_detect(void
        }
 }
 
-void __devinit generic_identify(struct cpuinfo_x86 * c)
+void __cpuinit generic_identify(struct cpuinfo_x86 * c)
 {
        u32 tfms, xlvl;
-       int junk;
+       int ebx;
 
        if (have_cpuid_p()) {
                /* Get vendor name */
@@ -276,7 +289,7 @@ void __devinit generic_identify(struct c
                /* Intel-defined flags: level 0x00000001 */
                if ( c->cpuid_level >= 0x00000001 ) {
                        u32 capability, excap;
-                       cpuid(0x00000001, &tfms, &junk, &excap, &capability);
+                       cpuid(0x00000001, &tfms, &ebx, &excap, &capability);
                        c->x86_capability[0] = capability;
                        c->x86_capability[4] = excap;
                        c->x86 = (tfms >> 8) & 15;
@@ -286,6 +299,11 @@ void __devinit generic_identify(struct c
                        if (c->x86 >= 0x6)
                                c->x86_model += ((tfms >> 16) & 0xF) << 4;
                        c->x86_mask = tfms & 15;
+#ifdef CONFIG_SMP
+                       c->apicid = phys_pkg_id((ebx >> 24) & 0xFF, 0);
+#else
+                       c->apicid = (ebx >> 24) & 0xFF;
+#endif
                } else {
                        /* Have CPUID level 0 only - unheard of */
                        c->x86 = 4;
@@ -310,7 +328,7 @@ void __devinit generic_identify(struct c
 #endif
 }
 
-static void __devinit squash_the_stupid_serial_number(struct cpuinfo_x86 *c)
+static void __cpuinit squash_the_stupid_serial_number(struct cpuinfo_x86 *c)
 {
        if (cpu_has(c, X86_FEATURE_PN) && disable_x86_serial_nr ) {
                /* Disable processor serial number */
@@ -338,7 +356,7 @@ __setup("serialnumber", x86_serial_nr_se
 /*
  * This does the hard work of actually picking apart the CPU stuff...
  */
-void __devinit identify_cpu(struct cpuinfo_x86 *c)
+void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
 {
        int i;
 
@@ -408,6 +426,10 @@ void __devinit identify_cpu(struct cpuin
                clear_bit(X86_FEATURE_XMM, c->x86_capability);
        }
 
+       /* SEP disabled? */
+       if (disable_x86_sep)
+               clear_bit(X86_FEATURE_SEP, c->x86_capability);
+
        if (disable_pse)
                clear_bit(X86_FEATURE_PSE, c->x86_capability);
 
@@ -420,7 +442,7 @@ void __devinit identify_cpu(struct cpuin
                else
                        /* Last resort... */
                        sprintf(c->x86_model_id, "%02x/%02x",
-                               c->x86_vendor, c->x86_model);
+                               c->x86, c->x86_model);
        }
 
        /* Now the feature flags better reflect actual CPU features! */
@@ -456,7 +478,7 @@ void __devinit identify_cpu(struct cpuin
 }
 
 #ifdef CONFIG_X86_HT
-void __devinit detect_ht(struct cpuinfo_x86 *c)
+void __cpuinit detect_ht(struct cpuinfo_x86 *c)
 {
        u32     eax, ebx, ecx, edx;
        int     index_msb, core_bits;
@@ -464,7 +486,6 @@ void __devinit detect_ht(struct cpuinfo_
 
        cpuid(1, &eax, &ebx, &ecx, &edx);
 
-       c->apicid = phys_pkg_id((ebx >> 24) & 0xFF, 0);
 
        if (!cpu_has(c, X86_FEATURE_HT) || cpu_has(c, X86_FEATURE_CMP_LEGACY))
                return;
@@ -503,7 +524,7 @@ void __devinit detect_ht(struct cpuinfo_
 }
 #endif
 
-void __devinit print_cpu_info(struct cpuinfo_x86 *c)
+void __cpuinit print_cpu_info(struct cpuinfo_x86 *c)
 {
        char *vendor = NULL;
 
@@ -703,7 +724,7 @@ void __cpuinit cpu_init(void)
 }
 
 #ifdef CONFIG_HOTPLUG_CPU
-void __devinit cpu_uninit(void)
+void __cpuinit cpu_uninit(void)
 {
        int cpu = raw_smp_processor_id();
        cpu_clear(cpu, cpu_initialized);
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/kernel/cpu/intel_cacheinfo-xen.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/cpu/intel_cacheinfo-xen.c   Fri Jan 
12 14:30:49 2007 +0000
@@ -0,0 +1,693 @@
+/*
+ *      Routines to indentify caches on Intel CPU.
+ *
+ *      Changes:
+ *      Venkatesh Pallipadi    : Adding cache identification through cpuid(4)
+ *             Ashok Raj <ashok.raj@xxxxxxxxx>: Work with CPU hotplug 
infrastructure.
+ */
+
+#include <linux/init.h>
+#include <linux/slab.h>
+#include <linux/device.h>
+#include <linux/compiler.h>
+#include <linux/cpu.h>
+#include <linux/sched.h>
+
+#include <asm/processor.h>
+#include <asm/smp.h>
+
+#define LVL_1_INST     1
+#define LVL_1_DATA     2
+#define LVL_2          3
+#define LVL_3          4
+#define LVL_TRACE      5
+
+struct _cache_table
+{
+       unsigned char descriptor;
+       char cache_type;
+       short size;
+};
+
+/* all the cache descriptor types we care about (no TLB or trace cache 
entries) */
+static struct _cache_table cache_table[] __cpuinitdata =
+{
+       { 0x06, LVL_1_INST, 8 },        /* 4-way set assoc, 32 byte line size */
+       { 0x08, LVL_1_INST, 16 },       /* 4-way set assoc, 32 byte line size */
+       { 0x0a, LVL_1_DATA, 8 },        /* 2 way set assoc, 32 byte line size */
+       { 0x0c, LVL_1_DATA, 16 },       /* 4-way set assoc, 32 byte line size */
+       { 0x22, LVL_3,      512 },      /* 4-way set assoc, sectored cache, 64 
byte line size */
+       { 0x23, LVL_3,      1024 },     /* 8-way set assoc, sectored cache, 64 
byte line size */
+       { 0x25, LVL_3,      2048 },     /* 8-way set assoc, sectored cache, 64 
byte line size */
+       { 0x29, LVL_3,      4096 },     /* 8-way set assoc, sectored cache, 64 
byte line size */
+       { 0x2c, LVL_1_DATA, 32 },       /* 8-way set assoc, 64 byte line size */
+       { 0x30, LVL_1_INST, 32 },       /* 8-way set assoc, 64 byte line size */
+       { 0x39, LVL_2,      128 },      /* 4-way set assoc, sectored cache, 64 
byte line size */
+       { 0x3a, LVL_2,      192 },      /* 6-way set assoc, sectored cache, 64 
byte line size */
+       { 0x3b, LVL_2,      128 },      /* 2-way set assoc, sectored cache, 64 
byte line size */
+       { 0x3c, LVL_2,      256 },      /* 4-way set assoc, sectored cache, 64 
byte line size */
+       { 0x3d, LVL_2,      384 },      /* 6-way set assoc, sectored cache, 64 
byte line size */
+       { 0x3e, LVL_2,      512 },      /* 4-way set assoc, sectored cache, 64 
byte line size */
+       { 0x41, LVL_2,      128 },      /* 4-way set assoc, 32 byte line size */
+       { 0x42, LVL_2,      256 },      /* 4-way set assoc, 32 byte line size */
+       { 0x43, LVL_2,      512 },      /* 4-way set assoc, 32 byte line size */
+       { 0x44, LVL_2,      1024 },     /* 4-way set assoc, 32 byte line size */
+       { 0x45, LVL_2,      2048 },     /* 4-way set assoc, 32 byte line size */
+       { 0x46, LVL_3,      4096 },     /* 4-way set assoc, 64 byte line size */
+       { 0x47, LVL_3,      8192 },     /* 8-way set assoc, 64 byte line size */
+       { 0x49, LVL_3,      4096 },     /* 16-way set assoc, 64 byte line size 
*/
+       { 0x4a, LVL_3,      6144 },     /* 12-way set assoc, 64 byte line size 
*/
+       { 0x4b, LVL_3,      8192 },     /* 16-way set assoc, 64 byte line size 
*/
+       { 0x4c, LVL_3,     12288 },     /* 12-way set assoc, 64 byte line size 
*/
+       { 0x4d, LVL_3,     16384 },     /* 16-way set assoc, 64 byte line size 
*/
+       { 0x60, LVL_1_DATA, 16 },       /* 8-way set assoc, sectored cache, 64 
byte line size */
+       { 0x66, LVL_1_DATA, 8 },        /* 4-way set assoc, sectored cache, 64 
byte line size */
+       { 0x67, LVL_1_DATA, 16 },       /* 4-way set assoc, sectored cache, 64 
byte line size */
+       { 0x68, LVL_1_DATA, 32 },       /* 4-way set assoc, sectored cache, 64 
byte line size */
+       { 0x70, LVL_TRACE,  12 },       /* 8-way set assoc */
+       { 0x71, LVL_TRACE,  16 },       /* 8-way set assoc */
+       { 0x72, LVL_TRACE,  32 },       /* 8-way set assoc */
+       { 0x73, LVL_TRACE,  64 },       /* 8-way set assoc */
+       { 0x78, LVL_2,    1024 },       /* 4-way set assoc, 64 byte line size */
+       { 0x79, LVL_2,     128 },       /* 8-way set assoc, sectored cache, 64 
byte line size */
+       { 0x7a, LVL_2,     256 },       /* 8-way set assoc, sectored cache, 64 
byte line size */
+       { 0x7b, LVL_2,     512 },       /* 8-way set assoc, sectored cache, 64 
byte line size */
+       { 0x7c, LVL_2,    1024 },       /* 8-way set assoc, sectored cache, 64 
byte line size */
+       { 0x7d, LVL_2,    2048 },       /* 8-way set assoc, 64 byte line size */
+       { 0x7f, LVL_2,     512 },       /* 2-way set assoc, 64 byte line size */
+       { 0x82, LVL_2,     256 },       /* 8-way set assoc, 32 byte line size */
+       { 0x83, LVL_2,     512 },       /* 8-way set assoc, 32 byte line size */
+       { 0x84, LVL_2,    1024 },       /* 8-way set assoc, 32 byte line size */
+       { 0x85, LVL_2,    2048 },       /* 8-way set assoc, 32 byte line size */
+       { 0x86, LVL_2,     512 },       /* 4-way set assoc, 64 byte line size */
+       { 0x87, LVL_2,    1024 },       /* 8-way set assoc, 64 byte line size */
+       { 0x00, 0, 0}
+};
+
+
+enum _cache_type
+{
+       CACHE_TYPE_NULL = 0,
+       CACHE_TYPE_DATA = 1,
+       CACHE_TYPE_INST = 2,
+       CACHE_TYPE_UNIFIED = 3
+};
+
+union _cpuid4_leaf_eax {
+       struct {
+               enum _cache_type        type:5;
+               unsigned int            level:3;
+               unsigned int            is_self_initializing:1;
+               unsigned int            is_fully_associative:1;
+               unsigned int            reserved:4;
+               unsigned int            num_threads_sharing:12;
+               unsigned int            num_cores_on_die:6;
+       } split;
+       u32 full;
+};
+
+union _cpuid4_leaf_ebx {
+       struct {
+               unsigned int            coherency_line_size:12;
+               unsigned int            physical_line_partition:10;
+               unsigned int            ways_of_associativity:10;
+       } split;
+       u32 full;
+};
+
+union _cpuid4_leaf_ecx {
+       struct {
+               unsigned int            number_of_sets:32;
+       } split;
+       u32 full;
+};
+
+struct _cpuid4_info {
+       union _cpuid4_leaf_eax eax;
+       union _cpuid4_leaf_ebx ebx;
+       union _cpuid4_leaf_ecx ecx;
+       unsigned long size;
+       cpumask_t shared_cpu_map;
+};
+
+static unsigned short                  num_cache_leaves;
+
+static int __cpuinit cpuid4_cache_lookup(int index, struct _cpuid4_info 
*this_leaf)
+{
+       unsigned int            eax, ebx, ecx, edx;
+       union _cpuid4_leaf_eax  cache_eax;
+
+       cpuid_count(4, index, &eax, &ebx, &ecx, &edx);
+       cache_eax.full = eax;
+       if (cache_eax.split.type == CACHE_TYPE_NULL)
+               return -EIO; /* better error ? */
+
+       this_leaf->eax.full = eax;
+       this_leaf->ebx.full = ebx;
+       this_leaf->ecx.full = ecx;
+       this_leaf->size = (this_leaf->ecx.split.number_of_sets + 1) *
+               (this_leaf->ebx.split.coherency_line_size + 1) *
+               (this_leaf->ebx.split.physical_line_partition + 1) *
+               (this_leaf->ebx.split.ways_of_associativity + 1);
+       return 0;
+}
+
+/* will only be called once; __init is safe here */
+static int __init find_num_cache_leaves(void)
+{
+       unsigned int            eax, ebx, ecx, edx;
+       union _cpuid4_leaf_eax  cache_eax;
+       int                     i = -1;
+
+       do {
+               ++i;
+               /* Do cpuid(4) loop to find out num_cache_leaves */
+               cpuid_count(4, i, &eax, &ebx, &ecx, &edx);
+               cache_eax.full = eax;
+       } while (cache_eax.split.type != CACHE_TYPE_NULL);
+       return i;
+}
+
+unsigned int __cpuinit init_intel_cacheinfo(struct cpuinfo_x86 *c)
+{
+       unsigned int trace = 0, l1i = 0, l1d = 0, l2 = 0, l3 = 0; /* Cache 
sizes */
+       unsigned int new_l1d = 0, new_l1i = 0; /* Cache sizes from cpuid(4) */
+       unsigned int new_l2 = 0, new_l3 = 0, i; /* Cache sizes from cpuid(4) */
+       unsigned int l2_id = 0, l3_id = 0, num_threads_sharing, index_msb;
+#ifdef CONFIG_SMP
+#ifndef CONFIG_XEN
+       unsigned int cpu = (c == &boot_cpu_data) ? 0 : (c - cpu_data);
+#endif
+#endif
+
+       if (c->cpuid_level > 3) {
+               static int is_initialized;
+
+               if (is_initialized == 0) {
+                       /* Init num_cache_leaves from boot CPU */
+                       num_cache_leaves = find_num_cache_leaves();
+                       is_initialized++;
+               }
+
+               /*
+                * Whenever possible use cpuid(4), deterministic cache
+                * parameters cpuid leaf to find the cache details
+                */
+               for (i = 0; i < num_cache_leaves; i++) {
+                       struct _cpuid4_info this_leaf;
+
+                       int retval;
+
+                       retval = cpuid4_cache_lookup(i, &this_leaf);
+                       if (retval >= 0) {
+                               switch(this_leaf.eax.split.level) {
+                                   case 1:
+                                       if (this_leaf.eax.split.type ==
+                                                       CACHE_TYPE_DATA)
+                                               new_l1d = this_leaf.size/1024;
+                                       else if (this_leaf.eax.split.type ==
+                                                       CACHE_TYPE_INST)
+                                               new_l1i = this_leaf.size/1024;
+                                       break;
+                                   case 2:
+                                       new_l2 = this_leaf.size/1024;
+                                       num_threads_sharing = 1 + 
this_leaf.eax.split.num_threads_sharing;
+                                       index_msb = 
get_count_order(num_threads_sharing);
+                                       l2_id = c->apicid >> index_msb;
+                                       break;
+                                   case 3:
+                                       new_l3 = this_leaf.size/1024;
+                                       num_threads_sharing = 1 + 
this_leaf.eax.split.num_threads_sharing;
+                                       index_msb = 
get_count_order(num_threads_sharing);
+                                       l3_id = c->apicid >> index_msb;
+                                       break;
+                                   default:
+                                       break;
+                               }
+                       }
+               }
+       }
+       /*
+        * Don't use cpuid2 if cpuid4 is supported. For P4, we use cpuid2 for
+        * trace cache
+        */
+       if ((num_cache_leaves == 0 || c->x86 == 15) && c->cpuid_level > 1) {
+               /* supports eax=2  call */
+               int i, j, n;
+               int regs[4];
+               unsigned char *dp = (unsigned char *)regs;
+               int only_trace = 0;
+
+               if (num_cache_leaves != 0 && c->x86 == 15)
+                       only_trace = 1;
+
+               /* Number of times to iterate */
+               n = cpuid_eax(2) & 0xFF;
+
+               for ( i = 0 ; i < n ; i++ ) {
+                       cpuid(2, &regs[0], &regs[1], &regs[2], &regs[3]);
+
+                       /* If bit 31 is set, this is an unknown format */
+                       for ( j = 0 ; j < 3 ; j++ ) {
+                               if ( regs[j] < 0 ) regs[j] = 0;
+                       }
+
+                       /* Byte 0 is level count, not a descriptor */
+                       for ( j = 1 ; j < 16 ; j++ ) {
+                               unsigned char des = dp[j];
+                               unsigned char k = 0;
+
+                               /* look up this descriptor in the table */
+                               while (cache_table[k].descriptor != 0)
+                               {
+                                       if (cache_table[k].descriptor == des) {
+                                               if (only_trace && 
cache_table[k].cache_type != LVL_TRACE)
+                                                       break;
+                                               switch 
(cache_table[k].cache_type) {
+                                               case LVL_1_INST:
+                                                       l1i += 
cache_table[k].size;
+                                                       break;
+                                               case LVL_1_DATA:
+                                                       l1d += 
cache_table[k].size;
+                                                       break;
+                                               case LVL_2:
+                                                       l2 += 
cache_table[k].size;
+                                                       break;
+                                               case LVL_3:
+                                                       l3 += 
cache_table[k].size;
+                                                       break;
+                                               case LVL_TRACE:
+                                                       trace += 
cache_table[k].size;
+                                                       break;
+                                               }
+
+                                               break;
+                                       }
+
+                                       k++;
+                               }
+                       }
+               }
+       }
+
+       if (new_l1d)
+               l1d = new_l1d;
+
+       if (new_l1i)
+               l1i = new_l1i;
+
+       if (new_l2) {
+               l2 = new_l2;
+#ifdef CONFIG_SMP
+#ifndef CONFIG_XEN
+               cpu_llc_id[cpu] = l2_id;
+#endif
+#endif
+       }
+
+       if (new_l3) {
+               l3 = new_l3;
+#ifdef CONFIG_SMP
+#ifndef CONFIG_XEN
+               cpu_llc_id[cpu] = l3_id;
+#endif
+#endif
+       }
+
+       if (trace)
+               printk (KERN_INFO "CPU: Trace cache: %dK uops", trace);
+       else if ( l1i )
+               printk (KERN_INFO "CPU: L1 I cache: %dK", l1i);
+
+       if (l1d)
+               printk(", L1 D cache: %dK\n", l1d);
+       else
+               printk("\n");
+
+       if (l2)
+               printk(KERN_INFO "CPU: L2 cache: %dK\n", l2);
+
+       if (l3)
+               printk(KERN_INFO "CPU: L3 cache: %dK\n", l3);
+
+       c->x86_cache_size = l3 ? l3 : (l2 ? l2 : (l1i+l1d));
+
+       return l2;
+}
+
+/* pointer to _cpuid4_info array (for each cache leaf) */
+static struct _cpuid4_info *cpuid4_info[NR_CPUS];
+#define CPUID4_INFO_IDX(x,y)    (&((cpuid4_info[x])[y]))
+
+#ifdef CONFIG_SMP
+static void __cpuinit cache_shared_cpu_map_setup(unsigned int cpu, int index)
+{
+       struct _cpuid4_info     *this_leaf, *sibling_leaf;
+       unsigned long num_threads_sharing;
+       int index_msb, i;
+       struct cpuinfo_x86 *c = cpu_data;
+
+       this_leaf = CPUID4_INFO_IDX(cpu, index);
+       num_threads_sharing = 1 + this_leaf->eax.split.num_threads_sharing;
+
+       if (num_threads_sharing == 1)
+               cpu_set(cpu, this_leaf->shared_cpu_map);
+       else {
+               index_msb = get_count_order(num_threads_sharing);
+
+               for_each_online_cpu(i) {
+                       if (c[i].apicid >> index_msb ==
+                           c[cpu].apicid >> index_msb) {
+                               cpu_set(i, this_leaf->shared_cpu_map);
+                               if (i != cpu && cpuid4_info[i])  {
+                                       sibling_leaf = CPUID4_INFO_IDX(i, 
index);
+                                       cpu_set(cpu, 
sibling_leaf->shared_cpu_map);
+                               }
+                       }
+               }
+       }
+}
+static void __cpuinit cache_remove_shared_cpu_map(unsigned int cpu, int index)
+{
+       struct _cpuid4_info     *this_leaf, *sibling_leaf;
+       int sibling;
+
+       this_leaf = CPUID4_INFO_IDX(cpu, index);
+       for_each_cpu_mask(sibling, this_leaf->shared_cpu_map) {
+               sibling_leaf = CPUID4_INFO_IDX(sibling, index); 
+               cpu_clear(cpu, sibling_leaf->shared_cpu_map);
+       }
+}
+#else
+static void __init cache_shared_cpu_map_setup(unsigned int cpu, int index) {}
+static void __init cache_remove_shared_cpu_map(unsigned int cpu, int index) {}
+#endif
+
+static void free_cache_attributes(unsigned int cpu)
+{
+       kfree(cpuid4_info[cpu]);
+       cpuid4_info[cpu] = NULL;
+}
+
+static int __cpuinit detect_cache_attributes(unsigned int cpu)
+{
+       struct _cpuid4_info     *this_leaf;
+       unsigned long           j;
+       int                     retval;
+       cpumask_t               oldmask;
+
+       if (num_cache_leaves == 0)
+               return -ENOENT;
+
+       cpuid4_info[cpu] = kmalloc(
+           sizeof(struct _cpuid4_info) * num_cache_leaves, GFP_KERNEL);
+       if (unlikely(cpuid4_info[cpu] == NULL))
+               return -ENOMEM;
+       memset(cpuid4_info[cpu], 0,
+           sizeof(struct _cpuid4_info) * num_cache_leaves);
+
+       oldmask = current->cpus_allowed;
+       retval = set_cpus_allowed(current, cpumask_of_cpu(cpu));
+       if (retval)
+               goto out;
+
+       /* Do cpuid and store the results */
+       retval = 0;
+       for (j = 0; j < num_cache_leaves; j++) {
+               this_leaf = CPUID4_INFO_IDX(cpu, j);
+               retval = cpuid4_cache_lookup(j, this_leaf);
+               if (unlikely(retval < 0))
+                       break;
+               cache_shared_cpu_map_setup(cpu, j);
+       }
+       set_cpus_allowed(current, oldmask);
+
+out:
+       if (retval)
+               free_cache_attributes(cpu);
+       return retval;
+}
+
+#ifdef CONFIG_SYSFS
+
+#include <linux/kobject.h>
+#include <linux/sysfs.h>
+
+extern struct sysdev_class cpu_sysdev_class; /* from drivers/base/cpu.c */
+
+/* pointer to kobject for cpuX/cache */
+static struct kobject * cache_kobject[NR_CPUS];
+
+struct _index_kobject {
+       struct kobject kobj;
+       unsigned int cpu;
+       unsigned short index;
+};
+
+/* pointer to array of kobjects for cpuX/cache/indexY */
+static struct _index_kobject *index_kobject[NR_CPUS];
+#define INDEX_KOBJECT_PTR(x,y)    (&((index_kobject[x])[y]))
+
+#define show_one_plus(file_name, object, val)                          \
+static ssize_t show_##file_name                                                
\
+                       (struct _cpuid4_info *this_leaf, char *buf)     \
+{                                                                      \
+       return sprintf (buf, "%lu\n", (unsigned long)this_leaf->object + val); \
+}
+
+show_one_plus(level, eax.split.level, 0);
+show_one_plus(coherency_line_size, ebx.split.coherency_line_size, 1);
+show_one_plus(physical_line_partition, ebx.split.physical_line_partition, 1);
+show_one_plus(ways_of_associativity, ebx.split.ways_of_associativity, 1);
+show_one_plus(number_of_sets, ecx.split.number_of_sets, 1);
+
+static ssize_t show_size(struct _cpuid4_info *this_leaf, char *buf)
+{
+       return sprintf (buf, "%luK\n", this_leaf->size / 1024);
+}
+
+static ssize_t show_shared_cpu_map(struct _cpuid4_info *this_leaf, char *buf)
+{
+       char mask_str[NR_CPUS];
+       cpumask_scnprintf(mask_str, NR_CPUS, this_leaf->shared_cpu_map);
+       return sprintf(buf, "%s\n", mask_str);
+}
+
+static ssize_t show_type(struct _cpuid4_info *this_leaf, char *buf) {
+       switch(this_leaf->eax.split.type) {
+           case CACHE_TYPE_DATA:
+               return sprintf(buf, "Data\n");
+               break;
+           case CACHE_TYPE_INST:
+               return sprintf(buf, "Instruction\n");
+               break;
+           case CACHE_TYPE_UNIFIED:
+               return sprintf(buf, "Unified\n");
+               break;
+           default:
+               return sprintf(buf, "Unknown\n");
+               break;
+       }
+}
+
+struct _cache_attr {
+       struct attribute attr;
+       ssize_t (*show)(struct _cpuid4_info *, char *);
+       ssize_t (*store)(struct _cpuid4_info *, const char *, size_t count);
+};
+
+#define define_one_ro(_name) \
+static struct _cache_attr _name = \
+       __ATTR(_name, 0444, show_##_name, NULL)
+
+define_one_ro(level);
+define_one_ro(type);
+define_one_ro(coherency_line_size);
+define_one_ro(physical_line_partition);
+define_one_ro(ways_of_associativity);
+define_one_ro(number_of_sets);
+define_one_ro(size);
+define_one_ro(shared_cpu_map);
+
+static struct attribute * default_attrs[] = {
+       &type.attr,
+       &level.attr,
+       &coherency_line_size.attr,
+       &physical_line_partition.attr,
+       &ways_of_associativity.attr,
+       &number_of_sets.attr,
+       &size.attr,
+       &shared_cpu_map.attr,
+       NULL
+};
+
+#define to_object(k) container_of(k, struct _index_kobject, kobj)
+#define to_attr(a) container_of(a, struct _cache_attr, attr)
+
+static ssize_t show(struct kobject * kobj, struct attribute * attr, char * buf)
+{
+       struct _cache_attr *fattr = to_attr(attr);
+       struct _index_kobject *this_leaf = to_object(kobj);
+       ssize_t ret;
+
+       ret = fattr->show ?
+               fattr->show(CPUID4_INFO_IDX(this_leaf->cpu, this_leaf->index),
+                       buf) :
+               0;
+       return ret;
+}
+
+static ssize_t store(struct kobject * kobj, struct attribute * attr,
+                    const char * buf, size_t count)
+{
+       return 0;
+}
+
+static struct sysfs_ops sysfs_ops = {
+       .show   = show,
+       .store  = store,
+};
+
+static struct kobj_type ktype_cache = {
+       .sysfs_ops      = &sysfs_ops,
+       .default_attrs  = default_attrs,
+};
+
+static struct kobj_type ktype_percpu_entry = {
+       .sysfs_ops      = &sysfs_ops,
+};
+
+static void cpuid4_cache_sysfs_exit(unsigned int cpu)
+{
+       kfree(cache_kobject[cpu]);
+       kfree(index_kobject[cpu]);
+       cache_kobject[cpu] = NULL;
+       index_kobject[cpu] = NULL;
+       free_cache_attributes(cpu);
+}
+
+static int __cpuinit cpuid4_cache_sysfs_init(unsigned int cpu)
+{
+
+       if (num_cache_leaves == 0)
+               return -ENOENT;
+
+       detect_cache_attributes(cpu);
+       if (cpuid4_info[cpu] == NULL)
+               return -ENOENT;
+
+       /* Allocate all required memory */
+       cache_kobject[cpu] = kmalloc(sizeof(struct kobject), GFP_KERNEL);
+       if (unlikely(cache_kobject[cpu] == NULL))
+               goto err_out;
+       memset(cache_kobject[cpu], 0, sizeof(struct kobject));
+
+       index_kobject[cpu] = kmalloc(
+           sizeof(struct _index_kobject ) * num_cache_leaves, GFP_KERNEL);
+       if (unlikely(index_kobject[cpu] == NULL))
+               goto err_out;
+       memset(index_kobject[cpu], 0,
+           sizeof(struct _index_kobject) * num_cache_leaves);
+
+       return 0;
+
+err_out:
+       cpuid4_cache_sysfs_exit(cpu);
+       return -ENOMEM;
+}
+
+/* Add/Remove cache interface for CPU device */
+static int __cpuinit cache_add_dev(struct sys_device * sys_dev)
+{
+       unsigned int cpu = sys_dev->id;
+       unsigned long i, j;
+       struct _index_kobject *this_object;
+       int retval = 0;
+
+       retval = cpuid4_cache_sysfs_init(cpu);
+       if (unlikely(retval < 0))
+               return retval;
+
+       cache_kobject[cpu]->parent = &sys_dev->kobj;
+       kobject_set_name(cache_kobject[cpu], "%s", "cache");
+       cache_kobject[cpu]->ktype = &ktype_percpu_entry;
+       retval = kobject_register(cache_kobject[cpu]);
+
+       for (i = 0; i < num_cache_leaves; i++) {
+               this_object = INDEX_KOBJECT_PTR(cpu,i);
+               this_object->cpu = cpu;
+               this_object->index = i;
+               this_object->kobj.parent = cache_kobject[cpu];
+               kobject_set_name(&(this_object->kobj), "index%1lu", i);
+               this_object->kobj.ktype = &ktype_cache;
+               retval = kobject_register(&(this_object->kobj));
+               if (unlikely(retval)) {
+                       for (j = 0; j < i; j++) {
+                               kobject_unregister(
+                                       &(INDEX_KOBJECT_PTR(cpu,j)->kobj));
+                       }
+                       kobject_unregister(cache_kobject[cpu]);
+                       cpuid4_cache_sysfs_exit(cpu);
+                       break;
+               }
+       }
+       return retval;
+}
+
+static void __cpuexit cache_remove_dev(struct sys_device * sys_dev)
+{
+       unsigned int cpu = sys_dev->id;
+       unsigned long i;
+
+       for (i = 0; i < num_cache_leaves; i++) {
+               cache_remove_shared_cpu_map(cpu, i);
+               kobject_unregister(&(INDEX_KOBJECT_PTR(cpu,i)->kobj));
+       }
+       kobject_unregister(cache_kobject[cpu]);
+       cpuid4_cache_sysfs_exit(cpu);
+       return;
+}
+
+static int cacheinfo_cpu_callback(struct notifier_block *nfb,
+                                       unsigned long action, void *hcpu)
+{
+       unsigned int cpu = (unsigned long)hcpu;
+       struct sys_device *sys_dev;
+
+       sys_dev = get_cpu_sysdev(cpu);
+       switch (action) {
+       case CPU_ONLINE:
+               cache_add_dev(sys_dev);
+               break;
+       case CPU_DEAD:
+               cache_remove_dev(sys_dev);
+               break;
+       }
+       return NOTIFY_OK;
+}
+
+static struct notifier_block cacheinfo_cpu_notifier =
+{
+    .notifier_call = cacheinfo_cpu_callback,
+};
+
+static int __cpuinit cache_sysfs_init(void)
+{
+       int i;
+
+       if (num_cache_leaves == 0)
+               return 0;
+
+       register_cpu_notifier(&cacheinfo_cpu_notifier);
+
+       for_each_online_cpu(i) {
+               cacheinfo_cpu_callback(&cacheinfo_cpu_notifier, CPU_ONLINE,
+                       (void *)(long)i);
+       }
+
+       return 0;
+}
+
+device_initcall(cache_sysfs_init);
+
+#endif
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/kernel/cpu/mtrr/main-xen.c
--- a/linux-2.6-xen-sparse/arch/i386/kernel/cpu/mtrr/main-xen.c Tue Jan 09 
10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/cpu/mtrr/main-xen.c Fri Jan 12 
14:30:49 2007 +0000
@@ -4,11 +4,12 @@
 #include <linux/module.h>
 #include <linux/seq_file.h>
 #include <asm/uaccess.h>
+#include <linux/mutex.h>
 
 #include <asm/mtrr.h>
 #include "mtrr.h"
 
-static DECLARE_MUTEX(mtrr_sem);
+static DEFINE_MUTEX(mtrr_mutex);
 
 void generic_get_mtrr(unsigned int reg, unsigned long *base,
                      unsigned int *size, mtrr_type * type)
@@ -65,7 +66,7 @@ int mtrr_add_page(unsigned long base, un
        int error;
        dom0_op_t op;
 
-       down(&mtrr_sem);
+       mutex_lock(&mtrr_mutex);
 
        op.cmd = DOM0_ADD_MEMTYPE;
        op.u.add_memtype.mfn     = base;
@@ -73,7 +74,7 @@ int mtrr_add_page(unsigned long base, un
        op.u.add_memtype.type    = type;
        error = HYPERVISOR_dom0_op(&op);
        if (error) {
-               up(&mtrr_sem);
+               mutex_unlock(&mtrr_mutex);
                BUG_ON(error > 0);
                return error;
        }
@@ -81,7 +82,7 @@ int mtrr_add_page(unsigned long base, un
        if (increment)
                ++usage_table[op.u.add_memtype.reg];
 
-       up(&mtrr_sem);
+       mutex_unlock(&mtrr_mutex);
 
        return op.u.add_memtype.reg;
 }
@@ -118,7 +119,7 @@ int mtrr_del_page(int reg, unsigned long
        int error = -EINVAL;
        dom0_op_t op;
 
-       down(&mtrr_sem);
+       mutex_lock(&mtrr_mutex);
 
        if (reg < 0) {
                /*  Search for existing MTRR  */
@@ -151,7 +152,7 @@ int mtrr_del_page(int reg, unsigned long
        }
        error = reg;
  out:
-       up(&mtrr_sem);
+       mutex_unlock(&mtrr_mutex);
        return error;
 }
 
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/kernel/crash.c
--- a/linux-2.6-xen-sparse/arch/i386/kernel/crash.c     Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/crash.c     Fri Jan 12 14:30:49 
2007 +0000
@@ -69,7 +69,7 @@ static void crash_save_this_cpu(struct p
         * for the data I pass, and I need tags
         * on the data to indicate what information I have
         * squirrelled away.  ELF notes happen to provide
-        * all of that that no need to invent something new.
+        * all of that, so there is no need to invent something new.
         */
        buf = (u32*)per_cpu_ptr(crash_notes, cpu);
        if (!buf)
@@ -106,7 +106,7 @@ static int crash_nmi_callback(struct pt_
                return 1;
        local_irq_disable();
 
-       if (!user_mode(regs)) {
+       if (!user_mode_vm(regs)) {
                crash_fixup_ss_esp(&fixed_regs, regs);
                regs = &fixed_regs;
        }
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/kernel/entry-xen.S
--- a/linux-2.6-xen-sparse/arch/i386/kernel/entry-xen.S Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/entry-xen.S Fri Jan 12 14:30:49 
2007 +0000
@@ -271,6 +271,10 @@ ENTRY(system_call)
        pushl %eax                      # save orig_eax
        SAVE_ALL
        GET_THREAD_INFO(%ebp)
+       testl $TF_MASK,EFLAGS(%esp)
+       jz no_singlestep
+       orl $_TIF_SINGLESTEP,TI_flags(%ebp)
+no_singlestep:
                                        # system call tracing in operation / 
emulation
        /* Note, _TIF_SECCOMP is bit number 8, and so it needs testw and not 
testb */
        testw 
$(_TIF_SYSCALL_EMU|_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT),TI_flags(%ebp)
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/kernel/head-xen.S
--- a/linux-2.6-xen-sparse/arch/i386/kernel/head-xen.S  Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/head-xen.S  Fri Jan 12 14:30:49 
2007 +0000
@@ -7,6 +7,7 @@
 #include <linux/linkage.h>
 #include <asm/segment.h>
 #include <asm/page.h>
+#include <asm/cache.h>
 #include <asm/thread_info.h>
 #include <asm/asm-offsets.h>
 #include <xen/interface/xen.h>
@@ -92,6 +93,7 @@ ENTRY(empty_zero_page)
 /*
  * The Global Descriptor Table contains 28 quadwords, per-CPU.
  */
+       .align L1_CACHE_BYTES
 ENTRY(cpu_gdt_table)
        .quad 0x0000000000000000        /* NULL descriptor */
        .quad 0x0000000000000000        /* 0x0b reserved */
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/kernel/io_apic-xen.c
--- a/linux-2.6-xen-sparse/arch/i386/kernel/io_apic-xen.c       Tue Jan 09 
10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/io_apic-xen.c       Fri Jan 12 
14:30:49 2007 +0000
@@ -394,8 +394,8 @@ static inline void rotate_irqs_among_cpu
 {
        int i, j;
        Dprintk("Rotating IRQs among CPUs.\n");
-       for (i = 0; i < NR_CPUS; i++) {
-               for (j = 0; cpu_online(i) && (j < NR_IRQS); j++) {
+       for_each_online_cpu(i) {
+               for (j = 0; j < NR_IRQS; j++) {
                        if (!irq_desc[j].action)
                                continue;
                        /* Is it a significant load ?  */
@@ -424,7 +424,7 @@ static void do_irq_balance(void)
        unsigned long imbalance = 0;
        cpumask_t allowed_mask, target_cpu_mask, tmp;
 
-       for (i = 0; i < NR_CPUS; i++) {
+       for_each_possible_cpu(i) {
                int package_index;
                CPU_IRQ(i) = 0;
                if (!cpu_online(i))
@@ -465,9 +465,7 @@ static void do_irq_balance(void)
                }
        }
        /* Find the least loaded processor package */
-       for (i = 0; i < NR_CPUS; i++) {
-               if (!cpu_online(i))
-                       continue;
+       for_each_online_cpu(i) {
                if (i != CPU_TO_PACKAGEINDEX(i))
                        continue;
                if (min_cpu_irq > CPU_IRQ(i)) {
@@ -484,9 +482,7 @@ tryanothercpu:
         */
        tmp_cpu_irq = 0;
        tmp_loaded = -1;
-       for (i = 0; i < NR_CPUS; i++) {
-               if (!cpu_online(i))
-                       continue;
+       for_each_online_cpu(i) {
                if (i != CPU_TO_PACKAGEINDEX(i))
                        continue;
                if (max_cpu_irq <= CPU_IRQ(i)) 
@@ -662,9 +658,7 @@ static int __init balanced_irq_init(void
        if (smp_num_siblings > 1 && !cpus_empty(tmp))
                physical_balance = 1;
 
-       for (i = 0; i < NR_CPUS; i++) {
-               if (!cpu_online(i))
-                       continue;
+       for_each_online_cpu(i) {
                irq_cpu_data[i].irq_delta = kmalloc(sizeof(unsigned long) * 
NR_IRQS, GFP_KERNEL);
                irq_cpu_data[i].last_irq = kmalloc(sizeof(unsigned long) * 
NR_IRQS, GFP_KERNEL);
                if (irq_cpu_data[i].irq_delta == NULL || 
irq_cpu_data[i].last_irq == NULL) {
@@ -681,9 +675,11 @@ static int __init balanced_irq_init(void
        else 
                printk(KERN_ERR "balanced_irq_init: failed to spawn 
balanced_irq");
 failed:
-       for (i = 0; i < NR_CPUS; i++) {
+       for_each_possible_cpu(i) {
                kfree(irq_cpu_data[i].irq_delta);
+               irq_cpu_data[i].irq_delta = NULL;
                kfree(irq_cpu_data[i].last_irq);
+               irq_cpu_data[i].last_irq = NULL;
        }
        return 0;
 }
@@ -691,7 +687,7 @@ int __init irqbalance_disable(char *str)
 int __init irqbalance_disable(char *str)
 {
        irqbalance_disabled = 1;
-       return 0;
+       return 1;
 }
 
 __setup("noirqbalance", irqbalance_disable);
@@ -1813,7 +1809,8 @@ static void __init setup_ioapic_ids_from
         * Don't check I/O APIC IDs for xAPIC systems.  They have
         * no meaning without the serial APIC bus.
         */
-       if (!(boot_cpu_data.x86_vendor == X86_VENDOR_INTEL && boot_cpu_data.x86 
< 15))
+       if (!(boot_cpu_data.x86_vendor == X86_VENDOR_INTEL)
+               || APIC_XAPIC(apic_version[boot_cpu_physical_apicid]))
                return;
        /*
         * This is broken; anything with a real cpu count has to
@@ -2298,6 +2295,8 @@ static inline void unlock_ExtINT_logic(v
        spin_unlock_irqrestore(&ioapic_lock, flags);
 }
 
+int timer_uses_ioapic_pin_0;
+
 /*
  * This code may look a bit paranoid, but it's supposed to cooperate with
  * a wide range of boards and BIOS bugs.  Fortunately only the timer IRQ
@@ -2333,6 +2332,9 @@ static inline void check_timer(void)
        apic1 = find_isa_irq_apic(0, mp_INT);
        pin2  = ioapic_i8259.pin;
        apic2 = ioapic_i8259.apic;
+
+       if (pin1 == 0)
+               timer_uses_ioapic_pin_0 = 1;
 
        printk(KERN_INFO "..TIMER: vector=0x%02X apic1=%d pin1=%d apic2=%d 
pin2=%d\n",
                vector, apic1, pin1, apic2, pin2);
@@ -2419,6 +2421,7 @@ static inline void check_timer(void)
                "report.  Then try booting with the 'noapic' option");
 }
 #else
+int timer_uses_ioapic_pin_0 = 0;
 #define check_timer() ((void)0)
 #endif
 
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/kernel/microcode-xen.c
--- a/linux-2.6-xen-sparse/arch/i386/kernel/microcode-xen.c     Tue Jan 09 
10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/microcode-xen.c     Fri Jan 12 
14:30:49 2007 +0000
@@ -32,6 +32,7 @@
 #include <linux/miscdevice.h>
 #include <linux/spinlock.h>
 #include <linux/mm.h>
+#include <linux/mutex.h>
 #include <linux/syscalls.h>
 
 #include <asm/msr.h>
@@ -49,7 +50,7 @@ MODULE_LICENSE("GPL");
 #define DEFAULT_UCODE_TOTALSIZE (DEFAULT_UCODE_DATASIZE + MC_HEADER_SIZE) /* 
2048 bytes */
 
 /* no concurrent ->write()s are allowed on /dev/cpu/microcode */
-static DECLARE_MUTEX(microcode_sem);
+static DEFINE_MUTEX(microcode_mutex);
                                
 static int microcode_open (struct inode *unused1, struct file *unused2)
 {
@@ -90,37 +91,20 @@ static ssize_t microcode_write (struct f
                return -EINVAL;
        }
 
-       down(&microcode_sem);
+       mutex_lock(&microcode_mutex);
 
        ret = do_microcode_update(buf, len);
        if (!ret)
                ret = (ssize_t)len;
 
-       up(&microcode_sem);
+       mutex_unlock(&microcode_mutex);
 
        return ret;
-}
-
-static int microcode_ioctl (struct inode *inode, struct file *file, 
-               unsigned int cmd, unsigned long arg)
-{
-       switch (cmd) {
-               /* 
-                *  XXX: will be removed after microcode_ctl 
-                *  is updated to ignore failure of this ioctl()
-                */
-               case MICROCODE_IOCFREE:
-                       return 0;
-               default:
-                       return -EINVAL;
-       }
-       return -EINVAL;
 }
 
 static struct file_operations microcode_fops = {
        .owner          = THIS_MODULE,
        .write          = microcode_write,
-       .ioctl          = microcode_ioctl,
        .open           = microcode_open,
 };
 
@@ -151,7 +135,6 @@ static void __exit microcode_exit (void)
 static void __exit microcode_exit (void)
 {
        misc_deregister(&microcode_dev);
-       printk(KERN_INFO "IA-32 Microcode Update Driver v" MICROCODE_VERSION " 
unregistered\n");
 }
 
 module_init(microcode_init)
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/kernel/mpparse-xen.c
--- a/linux-2.6-xen-sparse/arch/i386/kernel/mpparse-xen.c       Tue Jan 09 
10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/mpparse-xen.c       Fri Jan 12 
14:30:49 2007 +0000
@@ -38,12 +38,6 @@ int smp_found_config;
 int smp_found_config;
 unsigned int __initdata maxcpus = NR_CPUS;
 
-#ifdef CONFIG_HOTPLUG_CPU
-#define CPU_HOTPLUG_ENABLED    (1)
-#else
-#define CPU_HOTPLUG_ENABLED    (0)
-#endif
-
 /*
  * Various Linux-internal data structures created from the
  * MP-table.
@@ -109,21 +103,6 @@ static int __init mpf_checksum(unsigned 
 
 static int mpc_record; 
 static struct mpc_config_translation *translation_table[MAX_MPC_ENTRY] 
__initdata;
-
-#ifdef CONFIG_X86_NUMAQ
-static int MP_valid_apicid(int apicid, int version)
-{
-       return hweight_long(apicid & 0xf) == 1 && (apicid >> 4) != 0xf;
-}
-#elif !defined(CONFIG_XEN)
-static int MP_valid_apicid(int apicid, int version)
-{
-       if (version >= 0x14)
-               return apicid < 0xff;
-       else
-               return apicid < 0xf;
-}
-#endif
 
 #ifndef CONFIG_XEN
 static void __devinit MP_processor_info (struct mpc_config_processor *m)
@@ -191,12 +170,6 @@ static void __devinit MP_processor_info 
 
        ver = m->mpc_apicver;
 
-       if (!MP_valid_apicid(apicid, ver)) {
-               printk(KERN_WARNING "Processor #%d INVALID. (Max ID: %d).\n",
-                       m->mpc_apicid, MAX_APICS);
-               return;
-       }
-
        /*
         * Validate version
         */
@@ -226,7 +199,14 @@ static void __devinit MP_processor_info 
        cpu_set(num_processors, cpu_possible_map);
        num_processors++;
 
-       if (CPU_HOTPLUG_ENABLED || (num_processors > 8)) {
+       /*
+        * Would be preferable to switch to bigsmp when CONFIG_HOTPLUG_CPU=y
+        * but we need to work other dependencies like SMP_SUSPEND etc
+        * before this can be done without some confusion.
+        * if (CPU_HOTPLUG_ENABLED || num_processors > 8)
+        *       - Ashok Raj <ashok.raj@xxxxxxxxx>
+        */
+       if (num_processors > 8) {
                switch (boot_cpu_data.x86_vendor) {
                case X86_VENDOR_INTEL:
                        if (!APIC_XAPIC(ver)) {
@@ -255,6 +235,13 @@ static void __init MP_bus_info (struct m
        str[6] = 0;
 
        mpc_oem_bus_info(m, str, translation_table[mpc_record]);
+
+       if (m->mpc_busid >= MAX_MP_BUSSES) {
+               printk(KERN_WARNING "MP table busid value (%d) for bustype %s "
+                       " is too large, max. supported is %d\n",
+                       m->mpc_busid, str, MAX_MP_BUSSES - 1);
+               return;
+       }
 
        if (strncmp(str, BUSTYPE_ISA, sizeof(BUSTYPE_ISA)-1) == 0) {
                mp_bus_id_to_type[m->mpc_busid] = MP_BUS_ISA;
@@ -844,6 +831,8 @@ void __init find_smp_config (void)
 #endif
 }
 
+int es7000_plat;
+
 /* --------------------------------------------------------------------------
                             ACPI-based MP Configuration
    -------------------------------------------------------------------------- 
*/
@@ -957,7 +946,8 @@ void __init mp_register_ioapic (
 #ifndef CONFIG_XEN
        set_fixmap_nocache(FIX_IO_APIC_BASE_0 + idx, address);
 #endif
-       if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) && 
(boot_cpu_data.x86 < 15))
+       if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL)
+               && !APIC_XAPIC(apic_version[boot_cpu_physical_apicid]))
                tmpid = io_apic_get_unique_id(idx, id);
        else
                tmpid = id;
@@ -1033,8 +1023,6 @@ void __init mp_override_legacy_irq (
        return;
 }
 
-int es7000_plat;
-
 void __init mp_config_acpi_legacy_irqs (void)
 {
        struct mpc_config_intsrc intsrc;
@@ -1164,7 +1152,17 @@ int mp_register_gsi (u32 gsi, int trigge
                 */
                int irq = gsi;
                if (gsi < MAX_GSI_NUM) {
-                       if (gsi > 15)
+                       /*
+                        * Retain the VIA chipset work-around (gsi > 15), but
+                        * avoid a problem where the 8254 timer (IRQ0) is setup
+                        * via an override (so it's not on pin 0 of the ioapic),
+                        * and at the same time, the pin 0 interrupt is a PCI
+                        * type.  The gsi > 15 test could cause these two pins
+                        * to be shared as IRQ0, and they are not shareable.
+                        * So test for this condition, and if necessary, avoid
+                        * the pin collision.
+                        */
+                       if (gsi > 15 || (gsi == 0 && !timer_uses_ioapic_pin_0))
                                gsi = pci_irq++;
                        /*
                         * Don't assign IRQ used by ACPI SCI
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/kernel/process-xen.c
--- a/linux-2.6-xen-sparse/arch/i386/kernel/process-xen.c       Tue Jan 09 
10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/process-xen.c       Fri Jan 12 
14:30:49 2007 +0000
@@ -38,7 +38,6 @@
 #include <linux/kallsyms.h>
 #include <linux/ptrace.h>
 #include <linux/random.h>
-#include <linux/kprobes.h>
 
 #include <asm/uaccess.h>
 #include <asm/pgtable.h>
@@ -245,7 +244,7 @@ void show_regs(struct pt_regs * regs)
        printk("EIP: %04x:[<%08lx>] CPU: %d\n",0xffff & regs->xcs,regs->eip, 
smp_processor_id());
        print_symbol("EIP is at %s\n", regs->eip);
 
-       if (user_mode(regs))
+       if (user_mode_vm(regs))
                printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp);
        printk(" EFLAGS: %08lx    %s  (%s %.*s)\n",
               regs->eflags, print_tainted(), system_utsname.release,
@@ -313,13 +312,6 @@ void exit_thread(void)
 {
        struct task_struct *tsk = current;
        struct thread_struct *t = &tsk->thread;
-
-       /*
-        * Remove function-return probe instances associated with this task
-        * and put them back on the free list. Do not insert an exit probe for
-        * this function, it will be disabled by kprobe_flush_task if you do.
-        */
-       kprobe_flush_task(tsk);
 
        /* The process may have allocated an io port bitmap... nuke it. */
        if (unlikely(NULL != t->io_bitmap_ptr)) {
@@ -731,7 +723,6 @@ unsigned long get_wchan(struct task_stru
        } while (count++ < 16);
        return 0;
 }
-EXPORT_SYMBOL(get_wchan);
 
 /*
  * sys_alloc_thread_area: get a yet unused TLS descriptor index.
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c
--- a/linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c Fri Jan 12 14:30:49 
2007 +0000
@@ -34,6 +34,7 @@
 #include <linux/initrd.h>
 #include <linux/bootmem.h>
 #include <linux/seq_file.h>
+#include <linux/platform_device.h>
 #include <linux/console.h>
 #include <linux/mca.h>
 #include <linux/root_dev.h>
@@ -49,6 +50,7 @@
 #include <linux/kexec.h>
 #include <linux/crash_dump.h>
 #include <linux/dmi.h>
+#include <linux/pfn.h>
 
 #include <video/edid.h>
 
@@ -1027,6 +1029,38 @@ efi_memory_present_wrapper(unsigned long
        return 0;
 }
 
+ /*
+  * This function checks if the entire range <start,end> is mapped with type.
+  *
+  * Note: this function only works correct if the e820 table is sorted and
+  * not-overlapping, which is the case
+  */
+int __init
+e820_all_mapped(unsigned long s, unsigned long e, unsigned type)
+{
+       u64 start = s;
+       u64 end = e;
+       int i;
+       for (i = 0; i < e820.nr_map; i++) {
+               struct e820entry *ei = &e820.map[i];
+               if (type && ei->type != type)
+                       continue;
+               /* is the region (part) in overlap with the current region ?*/
+               if (ei->addr >= end || ei->addr + ei->size <= start)
+                       continue;
+               /* if the region is at the beginning of <start,end> we move
+                * start to the end of the region since it's ok until there
+                */
+               if (ei->addr <= start)
+                       start = ei->addr + ei->size;
+               /* if start is now at or beyond end, we're done, full
+                * coverage */
+               if (start >= end)
+                       return 1; /* we're done */
+       }
+       return 0;
+}
+
 /*
  * Find the highest page frame number we have available
  */
@@ -1124,10 +1158,10 @@ free_available_memory(unsigned long star
 free_available_memory(unsigned long start, unsigned long end, void *arg)
 {
        /* check max_low_pfn */
-       if (start >= ((max_low_pfn + 1) << PAGE_SHIFT))
+       if (start >= (max_low_pfn << PAGE_SHIFT))
                return 0;
-       if (end >= ((max_low_pfn + 1) << PAGE_SHIFT))
-               end = (max_low_pfn + 1) << PAGE_SHIFT;
+       if (end >= (max_low_pfn << PAGE_SHIFT))
+               end = max_low_pfn << PAGE_SHIFT;
        if (start < end)
                free_bootmem(start, end - start);
 
@@ -1380,7 +1414,7 @@ legacy_init_iomem_resources(struct e820e
                struct resource *res;
                if (e820[i].addr + e820[i].size > 0x100000000ULL)
                        continue;
-               res = alloc_bootmem_low(sizeof(struct resource));
+               res = kzalloc(sizeof(struct resource), GFP_ATOMIC);
                switch (e820[i].type) {
                case E820_RAM:  res->name = "System RAM"; break;
                case E820_ACPI: res->name = "ACPI Tables"; break;
@@ -1467,8 +1501,11 @@ e820_setup_gap(struct e820entry *e820, i
 
 /*
  * Request address space for all standard resources
- */
-static void __init register_memory(void)
+ *
+ * This is called just before pcibios_init(), which is also a
+ * subsys_initcall, but is linked in later (in arch/i386/pci/common.c).
+ */
+static int __init request_standard_resources(void)
 {
 #ifdef CONFIG_XEN
        struct xen_memory_map memmap;
@@ -1477,8 +1514,9 @@ static void __init register_memory(void)
 
        /* Nothing to do if not running in dom0. */
        if (!is_initial_xendomain())
-               return;
-
+               return 0;
+
+       printk("Setting up standard PCI resources\n");
 #ifdef CONFIG_XEN
        memmap.nr_entries = E820MAX;
        set_xen_guest_handle(memmap.buffer, machine_e820.map);
@@ -1503,107 +1541,19 @@ static void __init register_memory(void)
        /* request I/O space for devices used on all i[345]86 PCs */
        for (i = 0; i < STANDARD_IO_RESOURCES; i++)
                request_resource(&ioport_resource, &standard_io_resources[i]);
+       return 0;
+}
+
+subsys_initcall(request_standard_resources);
+
+static void __init register_memory(void)
+{
 
 #ifdef CONFIG_XEN
        e820_setup_gap(machine_e820.map, machine_e820.nr_map);
 #else
        e820_setup_gap(e820.map, e820.nr_map);
 #endif
-}
-
-/* Use inline assembly to define this because the nops are defined 
-   as inline assembly strings in the include files and we cannot 
-   get them easily into strings. */
-asm("\t.data\nintelnops: " 
-    GENERIC_NOP1 GENERIC_NOP2 GENERIC_NOP3 GENERIC_NOP4 GENERIC_NOP5 
GENERIC_NOP6
-    GENERIC_NOP7 GENERIC_NOP8); 
-asm("\t.data\nk8nops: " 
-    K8_NOP1 K8_NOP2 K8_NOP3 K8_NOP4 K8_NOP5 K8_NOP6
-    K8_NOP7 K8_NOP8); 
-asm("\t.data\nk7nops: " 
-    K7_NOP1 K7_NOP2 K7_NOP3 K7_NOP4 K7_NOP5 K7_NOP6
-    K7_NOP7 K7_NOP8); 
-    
-extern unsigned char intelnops[], k8nops[], k7nops[];
-static unsigned char *intel_nops[ASM_NOP_MAX+1] = { 
-     NULL,
-     intelnops,
-     intelnops + 1,
-     intelnops + 1 + 2,
-     intelnops + 1 + 2 + 3,
-     intelnops + 1 + 2 + 3 + 4,
-     intelnops + 1 + 2 + 3 + 4 + 5,
-     intelnops + 1 + 2 + 3 + 4 + 5 + 6,
-     intelnops + 1 + 2 + 3 + 4 + 5 + 6 + 7,
-}; 
-static unsigned char *k8_nops[ASM_NOP_MAX+1] = { 
-     NULL,
-     k8nops,
-     k8nops + 1,
-     k8nops + 1 + 2,
-     k8nops + 1 + 2 + 3,
-     k8nops + 1 + 2 + 3 + 4,
-     k8nops + 1 + 2 + 3 + 4 + 5,
-     k8nops + 1 + 2 + 3 + 4 + 5 + 6,
-     k8nops + 1 + 2 + 3 + 4 + 5 + 6 + 7,
-}; 
-static unsigned char *k7_nops[ASM_NOP_MAX+1] = { 
-     NULL,
-     k7nops,
-     k7nops + 1,
-     k7nops + 1 + 2,
-     k7nops + 1 + 2 + 3,
-     k7nops + 1 + 2 + 3 + 4,
-     k7nops + 1 + 2 + 3 + 4 + 5,
-     k7nops + 1 + 2 + 3 + 4 + 5 + 6,
-     k7nops + 1 + 2 + 3 + 4 + 5 + 6 + 7,
-}; 
-static struct nop { 
-     int cpuid; 
-     unsigned char **noptable; 
-} noptypes[] = { 
-     { X86_FEATURE_K8, k8_nops }, 
-     { X86_FEATURE_K7, k7_nops }, 
-     { -1, NULL }
-}; 
-
-/* Replace instructions with better alternatives for this CPU type.
-
-   This runs before SMP is initialized to avoid SMP problems with
-   self modifying code. This implies that assymetric systems where
-   APs have less capabilities than the boot processor are not handled. 
-   Tough. Make sure you disable such features by hand. */ 
-void apply_alternatives(void *start, void *end) 
-{ 
-       struct alt_instr *a; 
-       int diff, i, k;
-        unsigned char **noptable = intel_nops; 
-       for (i = 0; noptypes[i].cpuid >= 0; i++) { 
-               if (boot_cpu_has(noptypes[i].cpuid)) { 
-                       noptable = noptypes[i].noptable;
-                       break;
-               }
-       } 
-       for (a = start; (void *)a < end; a++) { 
-               if (!boot_cpu_has(a->cpuid))
-                       continue;
-               BUG_ON(a->replacementlen > a->instrlen); 
-               memcpy(a->instr, a->replacement, a->replacementlen); 
-               diff = a->instrlen - a->replacementlen; 
-               /* Pad the rest with nops */
-               for (i = a->replacementlen; diff > 0; diff -= k, i += k) {
-                       k = diff;
-                       if (k > ASM_NOP_MAX)
-                               k = ASM_NOP_MAX;
-                       memcpy(a->instr + i, noptable[k], k); 
-               } 
-       }
-} 
-
-void __init alternative_instructions(void)
-{
-       extern struct alt_instr __alt_instructions[], __alt_instructions_end[];
-       apply_alternatives(__alt_instructions, __alt_instructions_end);
 }
 
 static char * __init machine_specific_memory_setup(void);
@@ -1636,7 +1586,7 @@ void __init setup_arch(char **cmdline_p)
                panic_timeout = 1;
 
        /* Register a call for panic conditions. */
-       notifier_chain_register(&panic_notifier_list, &xen_panic_block);
+       atomic_notifier_chain_register(&panic_notifier_list, &xen_panic_block);
 
        HYPERVISOR_vm_assist(VMASST_CMD_enable, VMASST_TYPE_4gb_segments);
        HYPERVISOR_vm_assist(VMASST_CMD_enable,
@@ -1644,6 +1594,9 @@ void __init setup_arch(char **cmdline_p)
 
        memcpy(&boot_cpu_data, &new_cpu_data, sizeof(new_cpu_data));
        early_cpu_init();
+#ifdef CONFIG_SMP
+       prefill_possible_map();
+#endif
 
        /*
         * FIXME: This isn't an official loader_type right
@@ -1731,6 +1684,16 @@ void __init setup_arch(char **cmdline_p)
 
        parse_cmdline_early(cmdline_p);
 
+#ifdef CONFIG_EARLY_PRINTK
+       {
+               char *s = strstr(*cmdline_p, "earlyprintk=");
+               if (s) {
+                       setup_early_printk(strchr(s, '=') + 1);
+                       printk("early console enabled\n");
+               }
+       }
+#endif
+
        max_low_pfn = setup_memory();
 
        /*
@@ -1801,18 +1764,6 @@ void __init setup_arch(char **cmdline_p)
         * NOTE: at this point the bootmem allocator is fully available.
         */
 
-#ifdef CONFIG_EARLY_PRINTK
-       {
-               char *s = strstr(*cmdline_p, "earlyprintk=");
-               if (s) {
-                       extern void setup_early_printk(char *);
-
-                       setup_early_printk(strchr(s, '=') + 1);
-                       printk("early console enabled\n");
-               }
-       }
-#endif
-
        if (is_initial_xendomain())
                dmi_scan_machine();
 
@@ -1825,10 +1776,6 @@ void __init setup_arch(char **cmdline_p)
        set_iopl.iopl = 1;
        HYPERVISOR_physdev_op(PHYSDEVOP_set_iopl, &set_iopl);
 
-#ifdef CONFIG_X86_IO_APIC
-       check_acpi_pci();       /* Checks more than just ACPI actually */
-#endif
-
 #ifdef CONFIG_ACPI
        if (!is_initial_xendomain()) {
                printk(KERN_INFO "ACPI in unprivileged domain disabled\n");
@@ -1840,6 +1787,13 @@ void __init setup_arch(char **cmdline_p)
         * Parse the ACPI tables for possible boot-time SMP configuration.
         */
        acpi_boot_table_init();
+#endif
+
+#ifdef CONFIG_X86_IO_APIC
+       check_acpi_pci();       /* Checks more than just ACPI actually */
+#endif
+
+#ifdef CONFIG_ACPI
        acpi_boot_init();
 
 #if defined(CONFIG_SMP) && defined(CONFIG_X86_PC)
@@ -1882,6 +1836,23 @@ xen_panic_event(struct notifier_block *t
        return NOTIFY_DONE;
 }
 
+static __init int add_pcspkr(void)
+{
+       struct platform_device *pd;
+       int ret;
+
+       pd = platform_device_alloc("pcspkr", -1);
+       if (!pd)
+               return -ENOMEM;
+
+       ret = platform_device_add(pd);
+       if (ret)
+               platform_device_put(pd);
+
+       return ret;
+}
+device_initcall(add_pcspkr);
+
 #include "setup_arch_post.h"
 /*
  * Local Variables:
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/kernel/smp-xen.c
--- a/linux-2.6-xen-sparse/arch/i386/kernel/smp-xen.c   Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/smp-xen.c   Fri Jan 12 14:30:49 
2007 +0000
@@ -483,27 +483,23 @@ void unlock_ipi_call_lock(void)
        spin_unlock_irq(&call_lock);
 }
 
-static struct call_data_struct * call_data;
-
-/*
- * this function sends a 'generic call function' IPI to all other CPUs
- * in the system.
- */
-
+static struct call_data_struct *call_data;
+
+/**
+ * smp_call_function(): Run a function on all other CPUs.
+ * @func: The function to run. This must be fast and non-blocking.
+ * @info: An arbitrary pointer to pass to the function.
+ * @nonatomic: currently unused.
+ * @wait: If true, wait (atomically) until function has completed on other 
CPUs.
+ *
+ * Returns 0 on success, else a negative status code. Does not return until
+ * remote CPUs are nearly ready to execute <<func>> or are or have executed.
+ *
+ * You must not call this function with disabled interrupts or from a
+ * hardware interrupt handler or from a bottom half handler.
+ */
 int smp_call_function (void (*func) (void *info), void *info, int nonatomic,
                        int wait)
-/*
- * [SUMMARY] Run a function on all other CPUs.
- * <func> The function to run. This must be fast and non-blocking.
- * <info> An arbitrary pointer to pass to the function.
- * <nonatomic> currently unused.
- * <wait> If true, wait (atomically) until function has completed on other 
CPUs.
- * [RETURNS] 0 on success, else a negative status code. Does not return until
- * remote CPUs are nearly ready to execute <<func>> or are or have executed.
- *
- * You must not call this function with disabled interrupts or from a
- * hardware interrupt handler or from a bottom half handler.
- */
 {
        struct call_data_struct data;
        int cpus;
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/kernel/smpalts.c
--- a/linux-2.6-xen-sparse/arch/i386/kernel/smpalts.c   Tue Jan 09 10:50:46 
2007 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-#include <linux/kernel.h>
-#include <asm/system.h>
-#include <asm/smp_alt.h>
-#include <asm/processor.h>
-#include <asm/string.h>
-
-struct smp_replacement_record {
-       unsigned char targ_size;
-       unsigned char smp1_size;
-       unsigned char smp2_size;
-       unsigned char up_size;
-       unsigned char feature;
-       unsigned char data[0];
-};
-
-struct smp_alternative_record {
-       void *targ_start;
-       struct smp_replacement_record *repl;
-};
-
-extern struct smp_alternative_record __start_smp_alternatives_table,
-  __stop_smp_alternatives_table;
-extern unsigned long __init_begin, __init_end;
-
-void prepare_for_smp(void)
-{
-       struct smp_alternative_record *r;
-       printk(KERN_INFO "Enabling SMP...\n");
-       for (r = &__start_smp_alternatives_table;
-            r != &__stop_smp_alternatives_table;
-            r++) {
-               BUG_ON(r->repl->targ_size < r->repl->smp1_size);
-               BUG_ON(r->repl->targ_size < r->repl->smp2_size);
-               BUG_ON(r->repl->targ_size < r->repl->up_size);
-               if (system_state == SYSTEM_RUNNING &&
-                   r->targ_start >= (void *)&__init_begin &&
-                   r->targ_start < (void *)&__init_end)
-                       continue;
-               if (r->repl->feature != (unsigned char)-1 &&
-                   boot_cpu_has(r->repl->feature)) {
-                       memcpy(r->targ_start,
-                              r->repl->data + r->repl->smp1_size,
-                              r->repl->smp2_size);
-                       memset(r->targ_start + r->repl->smp2_size,
-                              0x90,
-                              r->repl->targ_size - r->repl->smp2_size);
-               } else {
-                       memcpy(r->targ_start,
-                              r->repl->data,
-                              r->repl->smp1_size);
-                       memset(r->targ_start + r->repl->smp1_size,
-                              0x90,
-                              r->repl->targ_size - r->repl->smp1_size);
-               }
-       }
-       /* Paranoia */
-       asm volatile ("jmp 1f\n1:");
-       mb();
-}
-
-void unprepare_for_smp(void)
-{
-       struct smp_alternative_record *r;
-       printk(KERN_INFO "Disabling SMP...\n");
-       for (r = &__start_smp_alternatives_table;
-            r != &__stop_smp_alternatives_table;
-            r++) {
-               BUG_ON(r->repl->targ_size < r->repl->smp1_size);
-               BUG_ON(r->repl->targ_size < r->repl->smp2_size);
-               BUG_ON(r->repl->targ_size < r->repl->up_size);
-               if (system_state == SYSTEM_RUNNING &&
-                   r->targ_start >= (void *)&__init_begin &&
-                   r->targ_start < (void *)&__init_end)
-                       continue;
-               memcpy(r->targ_start,
-                      r->repl->data + r->repl->smp1_size + r->repl->smp2_size,
-                      r->repl->up_size);
-               memset(r->targ_start + r->repl->up_size,
-                      0x90,
-                      r->repl->targ_size - r->repl->up_size);
-       }
-       /* Paranoia */
-       asm volatile ("jmp 1f\n1:");
-       mb();
-}
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/kernel/smpboot.c
--- a/linux-2.6-xen-sparse/arch/i386/kernel/smpboot.c   Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/smpboot.c   Fri Jan 12 14:30:49 
2007 +0000
@@ -72,6 +72,9 @@ int phys_proc_id[NR_CPUS] __read_mostly 
 /* Core ID of each logical CPU */
 int cpu_core_id[NR_CPUS] __read_mostly = {[0 ... NR_CPUS-1] = BAD_APICID};
 
+/* Last level cache ID of each logical CPU */
+int cpu_llc_id[NR_CPUS] __cpuinitdata = {[0 ... NR_CPUS-1] = BAD_APICID};
+
 /* representing HT siblings of each logical CPU */
 cpumask_t cpu_sibling_map[NR_CPUS] __read_mostly;
 EXPORT_SYMBOL(cpu_sibling_map);
@@ -310,7 +313,9 @@ static void __init synchronize_tsc_bp (v
                        if (tsc_values[i] < avg)
                                realdelta = -realdelta;
 
-                       printk(KERN_INFO "CPU#%d had %ld usecs TSC skew, fixed 
it up.\n", i, realdelta);
+                       if (realdelta > 0)
+                               printk(KERN_INFO "CPU#%d had %ld usecs TSC "
+                                       "skew, fixed it up.\n", i, realdelta);
                }
 
                sum += delta;
@@ -439,6 +444,18 @@ static void __devinit smp_callin(void)
 }
 
 static int cpucount;
+
+/* maps the cpu to the sched domain representing multi-core */
+cpumask_t cpu_coregroup_map(int cpu)
+{
+       struct cpuinfo_x86 *c = cpu_data + cpu;
+       /*
+        * For perf, we return last level cache shared map.
+        * TBD: when power saving sched policy is added, we will return
+        *      cpu_core_map when power saving policy is enabled
+        */
+       return c->llc_shared_map;
+}
 
 /* representing cpus for which sibling maps can be computed */
 static cpumask_t cpu_sibling_setup_map;
@@ -459,12 +476,16 @@ set_cpu_sibling_map(int cpu)
                                cpu_set(cpu, cpu_sibling_map[i]);
                                cpu_set(i, cpu_core_map[cpu]);
                                cpu_set(cpu, cpu_core_map[i]);
+                               cpu_set(i, c[cpu].llc_shared_map);
+                               cpu_set(cpu, c[i].llc_shared_map);
                        }
                }
        } else {
                cpu_set(cpu, cpu_sibling_map[cpu]);
        }
 
+       cpu_set(cpu, c[cpu].llc_shared_map);
+
        if (current_cpu_data.x86_max_cores == 1) {
                cpu_core_map[cpu] = cpu_sibling_map[cpu];
                c[cpu].booted_cores = 1;
@@ -472,6 +493,11 @@ set_cpu_sibling_map(int cpu)
        }
 
        for_each_cpu_mask(i, cpu_sibling_setup_map) {
+               if (cpu_llc_id[cpu] != BAD_APICID &&
+                   cpu_llc_id[cpu] == cpu_llc_id[i]) {
+                       cpu_set(i, c[cpu].llc_shared_map);
+                       cpu_set(cpu, c[i].llc_shared_map);
+               }
                if (phys_proc_id[cpu] == phys_proc_id[i]) {
                        cpu_set(i, cpu_core_map[cpu]);
                        cpu_set(cpu, cpu_core_map[i]);
@@ -899,6 +925,7 @@ static int __devinit do_boot_cpu(int api
        unsigned short nmi_high = 0, nmi_low = 0;
 
        ++cpucount;
+       alternatives_smp_switch(1);
 
        /*
         * We can't use kernel_thread since we must avoid to
@@ -1002,7 +1029,6 @@ void cpu_exit_clear(void)
 
        cpu_clear(cpu, cpu_callout_map);
        cpu_clear(cpu, cpu_callin_map);
-       cpu_clear(cpu, cpu_present_map);
 
        cpu_clear(cpu, smp_commenced_mask);
        unmap_cpu_to_logical_apicid(cpu);
@@ -1014,30 +1040,19 @@ struct warm_boot_cpu_info {
        int cpu;
 };
 
-static void __devinit do_warm_boot_cpu(void *p)
+static void __cpuinit do_warm_boot_cpu(void *p)
 {
        struct warm_boot_cpu_info *info = p;
        do_boot_cpu(info->apicid, info->cpu);
        complete(info->complete);
 }
 
-int __devinit smp_prepare_cpu(int cpu)
+static int __cpuinit __smp_prepare_cpu(int cpu)
 {
        DECLARE_COMPLETION(done);
        struct warm_boot_cpu_info info;
        struct work_struct task;
        int     apicid, ret;
-
-       lock_cpu_hotplug();
-
-       /*
-        * On x86, CPU0 is never offlined.  Trying to bring up an
-        * already-booted CPU will hang.  So check for that case.
-        */
-       if (cpu_online(cpu)) {
-               ret = -EINVAL;
-               goto exit;
-       }
 
        apicid = x86_cpu_to_apicid[cpu];
        if (apicid == BAD_APICID) {
@@ -1063,7 +1078,6 @@ int __devinit smp_prepare_cpu(int cpu)
        zap_low_mappings();
        ret = 0;
 exit:
-       unlock_cpu_hotplug();
        return ret;
 }
 #endif
@@ -1218,11 +1232,6 @@ static void __init smp_boot_cpus(unsigne
                if (max_cpus <= cpucount+1)
                        continue;
 
-#ifdef CONFIG_SMP_ALTERNATIVES
-               if (kicked == 1)
-                       prepare_for_smp();
-#endif
-
                if (((cpu = alloc_cpu_id()) <= 0) || do_boot_cpu(apicid, cpu))
                        printk("CPU #%d not responding - cannot use it.\n",
                                                                apicid);
@@ -1373,6 +1382,8 @@ void __cpu_die(unsigned int cpu)
                /* They ack this in play_dead by setting CPU_DEAD */
                if (per_cpu(cpu_state, cpu) == CPU_DEAD) {
                        printk ("CPU %d is now offline\n", cpu);
+                       if (1 == num_online_cpus())
+                               alternatives_smp_switch(0);
                        return;
                }
                msleep(100);
@@ -1394,17 +1405,28 @@ void __cpu_die(unsigned int cpu)
 
 int __devinit __cpu_up(unsigned int cpu)
 {
+#ifdef CONFIG_HOTPLUG_CPU
+       int ret=0;
+
+       /*
+        * We do warm boot only on cpus that had booted earlier
+        * Otherwise cold boot is all handled from smp_boot_cpus().
+        * cpu_callin_map is set during AP kickstart process. Its reset
+        * when a cpu is taken offline from cpu_exit_clear().
+        */
+       if (!cpu_isset(cpu, cpu_callin_map))
+               ret = __smp_prepare_cpu(cpu);
+
+       if (ret)
+               return -EIO;
+#endif
+
        /* In case one didn't come up */
        if (!cpu_isset(cpu, cpu_callin_map)) {
                printk(KERN_DEBUG "skipping cpu%d, didn't come online\n", cpu);
                local_irq_enable();
                return -EIO;
        }
-
-#ifdef CONFIG_SMP_ALTERNATIVES
-       if (num_online_cpus() == 1)
-               prepare_for_smp();
-#endif
 
        local_irq_enable();
        per_cpu(cpu_state, cpu) = CPU_UP_PREPARE;
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/kernel/traps-xen.c
--- a/linux-2.6-xen-sparse/arch/i386/kernel/traps-xen.c Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/traps-xen.c Fri Jan 12 14:30:49 
2007 +0000
@@ -98,19 +98,20 @@ asmlinkage void machine_check(void);
 asmlinkage void machine_check(void);
 
 static int kstack_depth_to_print = 24;
-struct notifier_block *i386die_chain;
-static DEFINE_SPINLOCK(die_notifier_lock);
+ATOMIC_NOTIFIER_HEAD(i386die_chain);
 
 int register_die_notifier(struct notifier_block *nb)
 {
-       int err = 0;
-       unsigned long flags;
-       spin_lock_irqsave(&die_notifier_lock, flags);
-       err = notifier_chain_register(&i386die_chain, nb);
-       spin_unlock_irqrestore(&die_notifier_lock, flags);
-       return err;
+       vmalloc_sync_all();
+       return atomic_notifier_chain_register(&i386die_chain, nb);
 }
 EXPORT_SYMBOL(register_die_notifier);
+
+int unregister_die_notifier(struct notifier_block *nb)
+{
+       return atomic_notifier_chain_unregister(&i386die_chain, nb);
+}
+EXPORT_SYMBOL(unregister_die_notifier);
 
 static inline int valid_stack_ptr(struct thread_info *tinfo, void *p)
 {
@@ -118,12 +119,29 @@ static inline int valid_stack_ptr(struct
                p < (void *)tinfo + THREAD_SIZE - 3;
 }
 
-static void print_addr_and_symbol(unsigned long addr, char *log_lvl)
-{
-       printk(log_lvl);
+/*
+ * Print CONFIG_STACK_BACKTRACE_COLS address/symbol entries per line.
+ */
+static inline int print_addr_and_symbol(unsigned long addr, char *log_lvl,
+                                       int printed)
+{
+       if (!printed)
+               printk(log_lvl);
+
+#if CONFIG_STACK_BACKTRACE_COLS == 1
        printk(" [<%08lx>] ", addr);
+#else
+       printk(" <%08lx> ", addr);
+#endif
        print_symbol("%s", addr);
-       printk("\n");
+
+       printed = (printed + 1) % CONFIG_STACK_BACKTRACE_COLS;
+       if (printed)
+               printk(" ");
+       else
+               printk("\n");
+
+       return printed;
 }
 
 static inline unsigned long print_context_stack(struct thread_info *tinfo,
@@ -131,20 +149,24 @@ static inline unsigned long print_contex
                                char *log_lvl)
 {
        unsigned long addr;
+       int printed = 0; /* nr of entries already printed on current line */
 
 #ifdef CONFIG_FRAME_POINTER
        while (valid_stack_ptr(tinfo, (void *)ebp)) {
                addr = *(unsigned long *)(ebp + 4);
-               print_addr_and_symbol(addr, log_lvl);
+               printed = print_addr_and_symbol(addr, log_lvl, printed);
                ebp = *(unsigned long *)ebp;
        }
 #else
        while (valid_stack_ptr(tinfo, stack)) {
                addr = *stack++;
                if (__kernel_text_address(addr))
-                       print_addr_and_symbol(addr, log_lvl);
-       }
-#endif
+                       printed = print_addr_and_symbol(addr, log_lvl, printed);
+       }
+#endif
+       if (printed)
+               printk("\n");
+
        return ebp;
 }
 
@@ -172,8 +194,7 @@ static void show_trace_log_lvl(struct ta
                stack = (unsigned long*)context->previous_esp;
                if (!stack)
                        break;
-               printk(log_lvl);
-               printk(" =======================\n");
+               printk("%s =======================\n", log_lvl);
        }
 }
 
@@ -196,25 +217,20 @@ static void show_stack_log_lvl(struct ta
        }
 
        stack = esp;
-       printk(log_lvl);
        for(i = 0; i < kstack_depth_to_print; i++) {
                if (kstack_end(stack))
                        break;
-               if (i && ((i % 8) == 0)) {
-                       printk("\n");
-                       printk(log_lvl);
-                       printk("       ");
-               }
+               if (i && ((i % 8) == 0))
+                       printk("\n%s       ", log_lvl);
                printk("%08lx ", *stack++);
        }
-       printk("\n");
-       printk(log_lvl);
-       printk("Call Trace:\n");
+       printk("\n%sCall Trace:\n", log_lvl);
        show_trace_log_lvl(task, esp, log_lvl);
 }
 
 void show_stack(struct task_struct *task, unsigned long *esp)
 {
+       printk("       ");
        show_stack_log_lvl(task, esp, "");
 }
 
@@ -239,7 +255,7 @@ void show_registers(struct pt_regs *regs
 
        esp = (unsigned long) (&regs->esp);
        savesegment(ss, ss);
-       if (user_mode(regs)) {
+       if (user_mode_vm(regs)) {
                in_kernel = 0;
                esp = regs->esp;
                ss = regs->xss & 0xffff;
@@ -339,6 +355,8 @@ void die(const char * str, struct pt_reg
        static int die_counter;
        unsigned long flags;
 
+       oops_enter();
+
        if (die.lock_owner != raw_smp_processor_id()) {
                console_verbose();
                spin_lock_irqsave(&die.lock, flags);
@@ -351,6 +369,9 @@ void die(const char * str, struct pt_reg
 
        if (++die.lock_owner_depth < 3) {
                int nl = 0;
+               unsigned long esp;
+               unsigned short ss;
+
                handle_BUG(regs);
                printk(KERN_EMERG "%s: %04lx [#%d]\n", str, err & 0xffff, 
++die_counter);
 #ifdef CONFIG_PREEMPT
@@ -371,14 +392,32 @@ void die(const char * str, struct pt_reg
 #endif
                if (nl)
                        printk("\n");
-       notify_die(DIE_OOPS, (char *)str, regs, err, 255, SIGSEGV);
-               show_registers(regs);
+               if (notify_die(DIE_OOPS, str, regs, err,
+                                       current->thread.trap_no, SIGSEGV) !=
+                               NOTIFY_STOP) {
+                       show_registers(regs);
+                       /* Executive summary in case the oops scrolled away */
+                       esp = (unsigned long) (&regs->esp);
+                       savesegment(ss, ss);
+                       if (user_mode(regs)) {
+                               esp = regs->esp;
+                               ss = regs->xss & 0xffff;
+                       }
+                       printk(KERN_EMERG "EIP: [<%08lx>] ", regs->eip);
+                       print_symbol("%s", regs->eip);
+                       printk(" SS:ESP %04x:%08lx\n", ss, esp);
+               }
+               else
+                       regs = NULL;
        } else
                printk(KERN_EMERG "Recursive die() failure, output 
suppressed\n");
 
        bust_spinlocks(0);
        die.lock_owner = -1;
        spin_unlock_irqrestore(&die.lock, flags);
+
+       if (!regs)
+               return;
 
        if (kexec_should_crash(current))
                crash_kexec(regs);
@@ -391,6 +430,7 @@ void die(const char * str, struct pt_reg
                ssleep(5);
                panic("Fatal exception");
        }
+       oops_exit();
        do_exit(SIGSEGV);
 }
 
@@ -569,7 +609,7 @@ static DEFINE_SPINLOCK(nmi_print_lock);
 
 void die_nmi (struct pt_regs *regs, const char *msg)
 {
-       if (notify_die(DIE_NMIWATCHDOG, msg, regs, 0, 0, SIGINT) ==
+       if (notify_die(DIE_NMIWATCHDOG, msg, regs, 0, 2, SIGINT) ==
            NOTIFY_STOP)
                return;
 
@@ -591,7 +631,7 @@ void die_nmi (struct pt_regs *regs, cons
        /* If we are in kernel we are probably nested up pretty bad
         * and might aswell get out now while we still can.
        */
-       if (!user_mode(regs)) {
+       if (!user_mode_vm(regs)) {
                current->thread.trap_no = 2;
                crash_kexec(regs);
        }
@@ -608,7 +648,7 @@ static void default_do_nmi(struct pt_reg
                reason = get_nmi_reason();
  
        if (!(reason & 0xc0)) {
-               if (notify_die(DIE_NMI_IPI, "nmi_ipi", regs, reason, 0, SIGINT)
+               if (notify_die(DIE_NMI_IPI, "nmi_ipi", regs, reason, 2, SIGINT)
                                                        == NOTIFY_STOP)
                        return;
 #ifdef CONFIG_X86_LOCAL_APIC
@@ -624,7 +664,7 @@ static void default_do_nmi(struct pt_reg
                unknown_nmi_error(reason, regs);
                return;
        }
-       if (notify_die(DIE_NMI, "nmi", regs, reason, 0, SIGINT) == NOTIFY_STOP)
+       if (notify_die(DIE_NMI, "nmi", regs, reason, 2, SIGINT) == NOTIFY_STOP)
                return;
        if (reason & 0x80)
                mem_parity_error(reason, regs);
@@ -662,6 +702,7 @@ fastcall void do_nmi(struct pt_regs * re
 
 void set_nmi_callback(nmi_callback_t callback)
 {
+       vmalloc_sync_all();
        rcu_assign_pointer(nmi_callback, callback);
 }
 EXPORT_SYMBOL_GPL(set_nmi_callback);
@@ -1089,6 +1130,6 @@ static int __init kstack_setup(char *s)
 static int __init kstack_setup(char *s)
 {
        kstack_depth_to_print = simple_strtoul(s, NULL, 0);
-       return 0;
+       return 1;
 }
 __setup("kstack=", kstack_setup);
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/kernel/traps.c
--- a/linux-2.6-xen-sparse/arch/i386/kernel/traps.c     Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/traps.c     Fri Jan 12 14:30:49 
2007 +0000
@@ -92,19 +92,20 @@ asmlinkage void machine_check(void);
 asmlinkage void machine_check(void);
 
 static int kstack_depth_to_print = 24;
-struct notifier_block *i386die_chain;
-static DEFINE_SPINLOCK(die_notifier_lock);
+ATOMIC_NOTIFIER_HEAD(i386die_chain);
 
 int register_die_notifier(struct notifier_block *nb)
 {
-       int err = 0;
-       unsigned long flags;
-       spin_lock_irqsave(&die_notifier_lock, flags);
-       err = notifier_chain_register(&i386die_chain, nb);
-       spin_unlock_irqrestore(&die_notifier_lock, flags);
-       return err;
+       vmalloc_sync_all();
+       return atomic_notifier_chain_register(&i386die_chain, nb);
 }
 EXPORT_SYMBOL(register_die_notifier);
+
+int unregister_die_notifier(struct notifier_block *nb)
+{
+       return atomic_notifier_chain_unregister(&i386die_chain, nb);
+}
+EXPORT_SYMBOL(unregister_die_notifier);
 
 static inline int valid_stack_ptr(struct thread_info *tinfo, void *p)
 {
@@ -112,12 +113,29 @@ static inline int valid_stack_ptr(struct
                p < (void *)tinfo + THREAD_SIZE - 3;
 }
 
-static void print_addr_and_symbol(unsigned long addr, char *log_lvl)
-{
-       printk(log_lvl);
+/*
+ * Print CONFIG_STACK_BACKTRACE_COLS address/symbol entries per line.
+ */
+static inline int print_addr_and_symbol(unsigned long addr, char *log_lvl,
+                                       int printed)
+{
+       if (!printed)
+               printk(log_lvl);
+
+#if CONFIG_STACK_BACKTRACE_COLS == 1
        printk(" [<%08lx>] ", addr);
+#else
+       printk(" <%08lx> ", addr);
+#endif
        print_symbol("%s", addr);
-       printk("\n");
+
+       printed = (printed + 1) % CONFIG_STACK_BACKTRACE_COLS;
+       if (printed)
+               printk(" ");
+       else
+               printk("\n");
+
+       return printed;
 }
 
 static inline unsigned long print_context_stack(struct thread_info *tinfo,
@@ -125,20 +143,24 @@ static inline unsigned long print_contex
                                char *log_lvl)
 {
        unsigned long addr;
+       int printed = 0; /* nr of entries already printed on current line */
 
 #ifdef CONFIG_FRAME_POINTER
        while (valid_stack_ptr(tinfo, (void *)ebp)) {
                addr = *(unsigned long *)(ebp + 4);
-               print_addr_and_symbol(addr, log_lvl);
+               printed = print_addr_and_symbol(addr, log_lvl, printed);
                ebp = *(unsigned long *)ebp;
        }
 #else
        while (valid_stack_ptr(tinfo, stack)) {
                addr = *stack++;
                if (__kernel_text_address(addr))
-                       print_addr_and_symbol(addr, log_lvl);
-       }
-#endif
+                       printed = print_addr_and_symbol(addr, log_lvl, printed);
+       }
+#endif
+       if (printed)
+               printk("\n");
+
        return ebp;
 }
 
@@ -166,8 +188,7 @@ static void show_trace_log_lvl(struct ta
                stack = (unsigned long*)context->previous_esp;
                if (!stack)
                        break;
-               printk(log_lvl);
-               printk(" =======================\n");
+               printk("%s =======================\n", log_lvl);
        }
 }
 
@@ -190,25 +211,20 @@ static void show_stack_log_lvl(struct ta
        }
 
        stack = esp;
-       printk(log_lvl);
        for(i = 0; i < kstack_depth_to_print; i++) {
                if (kstack_end(stack))
                        break;
-               if (i && ((i % 8) == 0)) {
-                       printk("\n");
-                       printk(log_lvl);
-                       printk("       ");
-               }
+               if (i && ((i % 8) == 0))
+                       printk("\n%s       ", log_lvl);
                printk("%08lx ", *stack++);
        }
-       printk("\n");
-       printk(log_lvl);
-       printk("Call Trace:\n");
+       printk("\n%sCall Trace:\n", log_lvl);
        show_trace_log_lvl(task, esp, log_lvl);
 }
 
 void show_stack(struct task_struct *task, unsigned long *esp)
 {
+       printk("       ");
        show_stack_log_lvl(task, esp, "");
 }
 
@@ -233,7 +249,7 @@ void show_registers(struct pt_regs *regs
 
        esp = (unsigned long) (&regs->esp);
        savesegment(ss, ss);
-       if (user_mode(regs)) {
+       if (user_mode_vm(regs)) {
                in_kernel = 0;
                esp = regs->esp;
                ss = regs->xss & 0xffff;
@@ -333,6 +349,8 @@ void die(const char * str, struct pt_reg
        static int die_counter;
        unsigned long flags;
 
+       oops_enter();
+
        if (die.lock_owner != raw_smp_processor_id()) {
                console_verbose();
                spin_lock_irqsave(&die.lock, flags);
@@ -345,6 +363,9 @@ void die(const char * str, struct pt_reg
 
        if (++die.lock_owner_depth < 3) {
                int nl = 0;
+               unsigned long esp;
+               unsigned short ss;
+
                handle_BUG(regs);
                printk(KERN_EMERG "%s: %04lx [#%d]\n", str, err & 0xffff, 
++die_counter);
 #ifdef CONFIG_PREEMPT
@@ -365,14 +386,32 @@ void die(const char * str, struct pt_reg
 #endif
                if (nl)
                        printk("\n");
-       notify_die(DIE_OOPS, (char *)str, regs, err, 255, SIGSEGV);
-               show_registers(regs);
+               if (notify_die(DIE_OOPS, str, regs, err,
+                                       current->thread.trap_no, SIGSEGV) !=
+                               NOTIFY_STOP) {
+                       show_registers(regs);
+                       /* Executive summary in case the oops scrolled away */
+                       esp = (unsigned long) (&regs->esp);
+                       savesegment(ss, ss);
+                       if (user_mode(regs)) {
+                               esp = regs->esp;
+                               ss = regs->xss & 0xffff;
+                       }
+                       printk(KERN_EMERG "EIP: [<%08lx>] ", regs->eip);
+                       print_symbol("%s", regs->eip);
+                       printk(" SS:ESP %04x:%08lx\n", ss, esp);
+               }
+               else
+                       regs = NULL;
        } else
                printk(KERN_EMERG "Recursive die() failure, output 
suppressed\n");
 
        bust_spinlocks(0);
        die.lock_owner = -1;
        spin_unlock_irqrestore(&die.lock, flags);
+
+       if (!regs)
+               return;
 
        if (kexec_should_crash(current))
                crash_kexec(regs);
@@ -385,6 +424,7 @@ void die(const char * str, struct pt_reg
                ssleep(5);
                panic("Fatal exception");
        }
+       oops_exit();
        do_exit(SIGSEGV);
 }
 
@@ -594,7 +634,7 @@ static DEFINE_SPINLOCK(nmi_print_lock);
 
 void die_nmi (struct pt_regs *regs, const char *msg)
 {
-       if (notify_die(DIE_NMIWATCHDOG, msg, regs, 0, 0, SIGINT) ==
+       if (notify_die(DIE_NMIWATCHDOG, msg, regs, 0, 2, SIGINT) ==
            NOTIFY_STOP)
                return;
 
@@ -616,7 +656,7 @@ void die_nmi (struct pt_regs *regs, cons
        /* If we are in kernel we are probably nested up pretty bad
         * and might aswell get out now while we still can.
        */
-       if (!user_mode(regs)) {
+       if (!user_mode_vm(regs)) {
                current->thread.trap_no = 2;
                crash_kexec(regs);
        }
@@ -633,7 +673,7 @@ static void default_do_nmi(struct pt_reg
                reason = get_nmi_reason();
  
        if (!(reason & 0xc0)) {
-               if (notify_die(DIE_NMI_IPI, "nmi_ipi", regs, reason, 0, SIGINT)
+               if (notify_die(DIE_NMI_IPI, "nmi_ipi", regs, reason, 2, SIGINT)
                                                        == NOTIFY_STOP)
                        return;
 #ifdef CONFIG_X86_LOCAL_APIC
@@ -649,7 +689,7 @@ static void default_do_nmi(struct pt_reg
                unknown_nmi_error(reason, regs);
                return;
        }
-       if (notify_die(DIE_NMI, "nmi", regs, reason, 0, SIGINT) == NOTIFY_STOP)
+       if (notify_die(DIE_NMI, "nmi", regs, reason, 2, SIGINT) == NOTIFY_STOP)
                return;
        if (reason & 0x80)
                mem_parity_error(reason, regs);
@@ -687,6 +727,7 @@ fastcall void do_nmi(struct pt_regs * re
 
 void set_nmi_callback(nmi_callback_t callback)
 {
+       vmalloc_sync_all();
        rcu_assign_pointer(nmi_callback, callback);
 }
 EXPORT_SYMBOL_GPL(set_nmi_callback);
@@ -1157,6 +1198,6 @@ static int __init kstack_setup(char *s)
 static int __init kstack_setup(char *s)
 {
        kstack_depth_to_print = simple_strtoul(s, NULL, 0);
-       return 0;
+       return 1;
 }
 __setup("kstack=", kstack_setup);
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/kernel/vm86.c
--- a/linux-2.6-xen-sparse/arch/i386/kernel/vm86.c      Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/vm86.c      Fri Jan 12 14:30:49 
2007 +0000
@@ -324,7 +324,7 @@ static void do_sys_vm86(struct kernel_vm
 
        /*call audit_syscall_exit since we do not exit via the normal paths */
        if (unlikely(current->audit_context))
-               audit_syscall_exit(current, AUDITSC_RESULT(eax), eax);
+               audit_syscall_exit(AUDITSC_RESULT(eax), eax);
 
        __asm__ __volatile__(
                "movl %0,%%esp\n\t"
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/kernel/vmlinux.lds.S
--- a/linux-2.6-xen-sparse/arch/i386/kernel/vmlinux.lds.S       Tue Jan 09 
10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/vmlinux.lds.S       Fri Jan 12 
14:30:49 2007 +0000
@@ -7,6 +7,7 @@
 #include <asm-generic/vmlinux.lds.h>
 #include <asm/thread_info.h>
 #include <asm/page.h>
+#include <asm/cache.h>
 
 OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
 OUTPUT_ARCH(i386)
@@ -39,13 +40,6 @@ SECTIONS
   __start___ex_table = .;
   __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) { *(__ex_table) }
   __stop___ex_table = .;
-
-  . = ALIGN(16);
-  __start_smp_alternatives_table = .;
-  __smp_alternatives : AT(ADDR(__smp_alternatives) - LOAD_OFFSET) { 
*(__smp_alternatives) }
-  __stop_smp_alternatives_table = .;
-
-  __smp_replacements : AT(ADDR(__smp_replacements) - LOAD_OFFSET) { 
*(__smp_replacements) }
 
   RODATA
 
@@ -80,6 +74,26 @@ SECTIONS
   .data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) {
        *(.data.init_task)
   }
+
+  /* might get freed after init */
+  . = ALIGN(4096);
+  __smp_alt_begin = .;
+  __smp_alt_instructions = .;
+  .smp_altinstructions : AT(ADDR(.smp_altinstructions) - LOAD_OFFSET) {
+       *(.smp_altinstructions)
+  }
+  __smp_alt_instructions_end = .;
+  . = ALIGN(4);
+  __smp_locks = .;
+  .smp_locks : AT(ADDR(.smp_locks) - LOAD_OFFSET) {
+       *(.smp_locks)
+  }
+  __smp_locks_end = .;
+  .smp_altinstr_replacement : AT(ADDR(.smp_altinstr_replacement) - 
LOAD_OFFSET) {
+       *(.smp_altinstr_replacement)
+  }
+  . = ALIGN(4096);
+  __smp_alt_end = .;
 
   /* will be freed after init */
   . = ALIGN(4096);             /* Init code and data */
@@ -128,7 +142,7 @@ SECTIONS
   __initramfs_start = .;
   .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { *(.init.ramfs) }
   __initramfs_end = .;
-  . = ALIGN(32);
+  . = ALIGN(L1_CACHE_BYTES);
   __per_cpu_start = .;
   .data.percpu  : AT(ADDR(.data.percpu) - LOAD_OFFSET) { *(.data.percpu) }
   __per_cpu_end = .;
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/mm/fault-xen.c
--- a/linux-2.6-xen-sparse/arch/i386/mm/fault-xen.c     Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/mm/fault-xen.c     Fri Jan 12 14:30:49 
2007 +0000
@@ -252,8 +252,9 @@ static void dump_fault_path(unsigned lon
 
        page = read_cr3();
        page = ((unsigned long *) __va(page))[address >> 22];
-       printk(KERN_ALERT "*pde = ma %08lx pa %08lx\n", page,
-              machine_to_phys(page));
+       if (oops_may_print())
+               printk(KERN_ALERT "*pde = ma %08lx pa %08lx\n", page,
+                      machine_to_phys(page));
        /*
         * We must not directly access the pte in the highpte
         * case, the page table might be allocated in highmem.
@@ -261,7 +262,7 @@ static void dump_fault_path(unsigned lon
         * it's allocated already.
         */
 #ifndef CONFIG_HIGHPTE
-       if (page & 1) {
+       if ((page & 1) && oops_may_print()) {
                page &= PAGE_MASK;
                address &= 0x003ff000;
                page = machine_to_phys(page);
@@ -311,6 +312,76 @@ static int spurious_fault(struct pt_regs
        return 1;
 }
 
+static inline pmd_t *vmalloc_sync_one(pgd_t *pgd, unsigned long address)
+{
+       unsigned index = pgd_index(address);
+       pgd_t *pgd_k;
+       pud_t *pud, *pud_k;
+       pmd_t *pmd, *pmd_k;
+
+       pgd += index;
+       pgd_k = init_mm.pgd + index;
+
+       if (!pgd_present(*pgd_k))
+               return NULL;
+
+       /*
+        * set_pgd(pgd, *pgd_k); here would be useless on PAE
+        * and redundant with the set_pmd() on non-PAE. As would
+        * set_pud.
+        */
+
+       pud = pud_offset(pgd, address);
+       pud_k = pud_offset(pgd_k, address);
+       if (!pud_present(*pud_k))
+               return NULL;
+
+       pmd = pmd_offset(pud, address);
+       pmd_k = pmd_offset(pud_k, address);
+       if (!pmd_present(*pmd_k))
+               return NULL;
+       if (!pmd_present(*pmd))
+#ifndef CONFIG_XEN
+               set_pmd(pmd, *pmd_k);
+#else
+               /*
+                * When running on Xen we must launder *pmd_k through
+                * pmd_val() to ensure that _PAGE_PRESENT is correctly set.
+                */
+               set_pmd(pmd, __pmd(pmd_val(*pmd_k)));
+#endif
+       else
+               BUG_ON(pmd_page(*pmd) != pmd_page(*pmd_k));
+       return pmd_k;
+}
+
+/*
+ * Handle a fault on the vmalloc or module mapping area
+ *
+ * This assumes no large pages in there.
+ */
+static inline int vmalloc_fault(unsigned long address)
+{
+       unsigned long pgd_paddr;
+       pmd_t *pmd_k;
+       pte_t *pte_k;
+       /*
+        * Synchronize this task's top level page-table
+        * with the 'reference' page table.
+        *
+        * Do _not_ use "current" here. We might be inside
+        * an interrupt in the middle of a task switch..
+        */
+       pgd_paddr = read_cr3();
+       pmd_k = vmalloc_sync_one(__va(pgd_paddr), address);
+       if (!pmd_k)
+               return -1;
+       pte_k = pte_offset_kernel(pmd_k, address);
+       if (!pte_present(*pte_k))
+               return -1;
+       return 0;
+}
+
 /*
  * This routine handles page faults.  It determines the address,
  * and the problem, and then passes it off to one of the appropriate
@@ -320,6 +391,8 @@ static int spurious_fault(struct pt_regs
  *     bit 0 == 0 means no page found, 1 means protection fault
  *     bit 1 == 0 means read, 1 means write
  *     bit 2 == 0 means kernel, 1 means user-mode
+ *     bit 3 == 1 means use of reserved bit detected
+ *     bit 4 == 1 means fault was an instruction fetch
  */
 fastcall void __kprobes do_page_fault(struct pt_regs *regs,
                                      unsigned long error_code)
@@ -338,13 +411,6 @@ fastcall void __kprobes do_page_fault(st
        error_code |= (regs->xcs & 2) << 1;
        if (regs->eflags & X86_EFLAGS_VM)
                error_code |= 4;
-
-       if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
-                                       SIGSEGV) == NOTIFY_STOP)
-               return;
-       /* It's safe to allow irq's after cr2 has been saved */
-       if (regs->eflags & (X86_EFLAGS_IF|VM_MASK))
-               local_irq_enable();
 
        tsk = current;
 
@@ -361,25 +427,37 @@ fastcall void __kprobes do_page_fault(st
         *
         * This verifies that the fault happens in kernel space
         * (error_code & 4) == 0, and that the fault was not a
-        * protection error (error_code & 1) == 0.
-        */
-       if (unlikely(address >= TASK_SIZE)) { 
+        * protection error (error_code & 9) == 0.
+        */
+       if (unlikely(address >= TASK_SIZE)) {
 #ifdef CONFIG_XEN
                /* Faults in hypervisor area can never be patched up. */
                if (address >= hypervisor_virt_start)
                        goto bad_area_nosemaphore;
 #endif
-               if (!(error_code & 5))
-                       goto vmalloc_fault;
+               if (!(error_code & 0x0000000d) && vmalloc_fault(address) >= 0)
+                       return;
                /* Can take a spurious fault if mapping changes R/O -> R/W. */
                if (spurious_fault(regs, address, error_code))
+                       return;
+               if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 
14,
+                                               SIGSEGV) == NOTIFY_STOP)
                        return;
                /* 
                 * Don't take the mm semaphore here. If we fixup a prefetch
                 * fault we could otherwise deadlock.
                 */
                goto bad_area_nosemaphore;
-       } 
+       }
+
+       if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
+                                       SIGSEGV) == NOTIFY_STOP)
+               return;
+
+       /* It's safe to allow irq's after cr2 has been saved and the vmalloc
+          fault has been handled. */
+       if (regs->eflags & (X86_EFLAGS_IF|VM_MASK))
+               local_irq_enable();
 
        mm = tsk->mm;
 
@@ -550,21 +628,27 @@ no_context:
 
        bust_spinlocks(1);
 
-#ifdef CONFIG_X86_PAE
-       if (error_code & 16) {
-               pte_t *pte = lookup_address(address);
-
-               if (pte && pte_present(*pte) && !pte_exec_kernel(*pte))
-                       printk(KERN_CRIT "kernel tried to execute NX-protected 
page - exploit attempt? (uid: %d)\n", current->uid);
-       }
-#endif
-       if (address < PAGE_SIZE)
-               printk(KERN_ALERT "Unable to handle kernel NULL pointer 
dereference");
-       else
-               printk(KERN_ALERT "Unable to handle kernel paging request");
-       printk(" at virtual address %08lx\n",address);
-       printk(KERN_ALERT " printing eip:\n");
-       printk("%08lx\n", regs->eip);
+       if (oops_may_print()) {
+       #ifdef CONFIG_X86_PAE
+               if (error_code & 16) {
+                       pte_t *pte = lookup_address(address);
+
+                       if (pte && pte_present(*pte) && !pte_exec_kernel(*pte))
+                               printk(KERN_CRIT "kernel tried to execute "
+                                       "NX-protected page - exploit attempt? "
+                                       "(uid: %d)\n", current->uid);
+               }
+       #endif
+               if (address < PAGE_SIZE)
+                       printk(KERN_ALERT "BUG: unable to handle kernel NULL "
+                                       "pointer dereference");
+               else
+                       printk(KERN_ALERT "BUG: unable to handle kernel paging"
+                                       " request");
+               printk(" at virtual address %08lx\n",address);
+               printk(KERN_ALERT " printing eip:\n");
+               printk("%08lx\n", regs->eip);
+       }
        dump_fault_path(address);
        tsk->thread.cr2 = address;
        tsk->thread.trap_no = 14;
@@ -604,59 +688,41 @@ do_sigbus:
        tsk->thread.error_code = error_code;
        tsk->thread.trap_no = 14;
        force_sig_info_fault(SIGBUS, BUS_ADRERR, address, tsk);
-       return;
-
-vmalloc_fault:
-       {
-               /*
-                * Synchronize this task's top level page-table
-                * with the 'reference' page table.
-                *
-                * Do _not_ use "tsk" here. We might be inside
-                * an interrupt in the middle of a task switch..
-                */
-               int index = pgd_index(address);
-               unsigned long pgd_paddr;
-               pgd_t *pgd, *pgd_k;
-               pud_t *pud, *pud_k;
-               pmd_t *pmd, *pmd_k;
-               pte_t *pte_k;
-
-               pgd_paddr = read_cr3();
-               pgd = index + (pgd_t *)__va(pgd_paddr);
-               pgd_k = init_mm.pgd + index;
-
-               if (!pgd_present(*pgd_k))
-                       goto no_context;
-
-               /*
-                * set_pgd(pgd, *pgd_k); here would be useless on PAE
-                * and redundant with the set_pmd() on non-PAE. As would
-                * set_pud.
-                */
-
-               pud = pud_offset(pgd, address);
-               pud_k = pud_offset(pgd_k, address);
-               if (!pud_present(*pud_k))
-                       goto no_context;
-               
-               pmd = pmd_offset(pud, address);
-               pmd_k = pmd_offset(pud_k, address);
-               if (!pmd_present(*pmd_k))
-                       goto no_context;
-#ifndef CONFIG_XEN
-               set_pmd(pmd, *pmd_k);
-#else
-               /*
-                * When running on Xen we must launder *pmd_k through
-                * pmd_val() to ensure that _PAGE_PRESENT is correctly set.
-                */
-               set_pmd(pmd, __pmd(pmd_val(*pmd_k)));
-#endif
-
-               pte_k = pte_offset_kernel(pmd_k, address);
-               if (!pte_present(*pte_k))
-                       goto no_context;
-               return;
-       }
-}
+}
+
+#ifndef CONFIG_X86_PAE
+void vmalloc_sync_all(void)
+{
+       /*
+        * Note that races in the updates of insync and start aren't
+        * problematic: insync can only get set bits added, and updates to
+        * start are only improving performance (without affecting correctness
+        * if undone).
+        */
+       static DECLARE_BITMAP(insync, PTRS_PER_PGD);
+       static unsigned long start = TASK_SIZE;
+       unsigned long address;
+
+       BUILD_BUG_ON(TASK_SIZE & ~PGDIR_MASK);
+       for (address = start; address >= TASK_SIZE; address += PGDIR_SIZE) {
+               if (!test_bit(pgd_index(address), insync)) {
+                       unsigned long flags;
+                       struct page *page;
+
+                       spin_lock_irqsave(&pgd_lock, flags);
+                       for (page = pgd_list; page; page =
+                                       (struct page *)page->index)
+                               if (!vmalloc_sync_one(page_address(page),
+                                                               address)) {
+                                       BUG_ON(page != pgd_list);
+                                       break;
+                               }
+                       spin_unlock_irqrestore(&pgd_lock, flags);
+                       if (!page)
+                               set_bit(pgd_index(address), insync);
+               }
+               if (address == start && test_bit(pgd_index(address), insync))
+                       start = address + PGDIR_SIZE;
+       }
+}
+#endif
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/mm/init-xen.c
--- a/linux-2.6-xen-sparse/arch/i386/mm/init-xen.c      Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/mm/init-xen.c      Fri Jan 12 14:30:49 
2007 +0000
@@ -313,7 +313,7 @@ static void __init permanent_kmaps_init(
 
 static void __meminit free_new_highpage(struct page *page, int pfn)
 {
-       set_page_count(page, 1);
+       init_page_count(page);
        if (pfn < xen_start_info->nr_pages)
                __free_page(page);
        totalhigh_pages++;
@@ -664,7 +664,7 @@ void __init mem_init(void)
        /* XEN: init and count low-mem pages outside initial allocation. */
        for (pfn = xen_start_info->nr_pages; pfn < max_low_pfn; pfn++) {
                ClearPageReserved(pfn_to_page(pfn));
-               set_page_count(pfn_to_page(pfn), 1);
+               init_page_count(pfn_to_page(pfn));
                totalram_pages++;
        }
 
@@ -721,6 +721,7 @@ void __init mem_init(void)
  * Specifically, in the case of x86, we will always add
  * memory to the highmem for now.
  */
+#ifdef CONFIG_MEMORY_HOTPLUG
 #ifndef CONFIG_NEED_MULTIPLE_NODES
 int add_memory(u64 start, u64 size)
 {
@@ -736,6 +737,7 @@ int remove_memory(u64 start, u64 size)
 {
        return -EINVAL;
 }
+#endif
 #endif
 
 kmem_cache_t *pgd_cache;
@@ -795,21 +797,6 @@ static int noinline do_test_wp_bit(void)
        return flag;
 }
 
-void free_initmem(void)
-{
-       unsigned long addr;
-
-       addr = (unsigned long)(&__init_begin);
-       for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) {
-               ClearPageReserved(virt_to_page(addr));
-               set_page_count(virt_to_page(addr), 1);
-               memset((void *)addr, 0xcc, PAGE_SIZE);
-               free_page(addr);
-               totalram_pages++;
-       }
-       printk (KERN_INFO "Freeing unused kernel memory: %dk freed\n", 
(__init_end - __init_begin) >> 10);
-}
-
 #ifdef CONFIG_DEBUG_RODATA
 
 extern char __start_rodata, __end_rodata;
@@ -833,17 +820,31 @@ void mark_rodata_ro(void)
 }
 #endif
 
+void free_init_pages(char *what, unsigned long begin, unsigned long end)
+{
+       unsigned long addr;
+
+       for (addr = begin; addr < end; addr += PAGE_SIZE) {
+               ClearPageReserved(virt_to_page(addr));
+               init_page_count(virt_to_page(addr));
+               memset((void *)addr, 0xcc, PAGE_SIZE);
+               free_page(addr);
+               totalram_pages++;
+       }
+       printk(KERN_INFO "Freeing %s: %ldk freed\n", what, (end - begin) >> 10);
+}
+
+void free_initmem(void)
+{
+       free_init_pages("unused kernel memory",
+                       (unsigned long)(&__init_begin),
+                       (unsigned long)(&__init_end));
+}
 
 #ifdef CONFIG_BLK_DEV_INITRD
 void free_initrd_mem(unsigned long start, unsigned long end)
 {
-       if (start < end)
-               printk (KERN_INFO "Freeing initrd memory: %ldk freed\n", (end - 
start) >> 10);
-       for (; start < end; start += PAGE_SIZE) {
-               ClearPageReserved(virt_to_page(start));
-               set_page_count(virt_to_page(start), 1);
-               free_page(start);
-               totalram_pages++;
-       }
-}
-#endif
+       free_init_pages("initrd memory", start, end);
+}
+#endif
+
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/mm/pgtable-xen.c
--- a/linux-2.6-xen-sparse/arch/i386/mm/pgtable-xen.c   Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/mm/pgtable-xen.c   Fri Jan 12 14:30:49 
2007 +0000
@@ -45,7 +45,7 @@ void show_mem(void)
        printk(KERN_INFO "Mem-info:\n");
        show_free_areas();
        printk(KERN_INFO "Free swap:       %6ldkB\n", 
nr_swap_pages<<(PAGE_SHIFT-10));
-       for_each_pgdat(pgdat) {
+       for_each_online_pgdat(pgdat) {
                pgdat_resize_lock(pgdat, &flags);
                for (i = 0; i < pgdat->node_spanned_pages; ++i) {
                        page = pgdat_page_nr(pgdat, i);
@@ -242,7 +242,7 @@ struct page *pte_alloc_one(struct mm_str
        pte = alloc_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO, 0);
        if (pte) {
                SetPageForeign(pte, pte_free);
-               set_page_count(pte, 1);
+               init_page_count(pte);
        }
 #endif
        return pte;
@@ -257,7 +257,7 @@ void pte_free(struct page *pte)
                        va, pfn_pte(page_to_pfn(pte), PAGE_KERNEL), 0));
 
        ClearPageForeign(pte);
-       set_page_count(pte, 1);
+       init_page_count(pte);
 
        __free_page(pte);
 }
diff -r 6d6a4d5801bd -r 4fad820a2233 linux-2.6-xen-sparse/arch/i386/mm/pgtable.c
--- a/linux-2.6-xen-sparse/arch/i386/mm/pgtable.c       Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/mm/pgtable.c       Fri Jan 12 14:30:49 
2007 +0000
@@ -37,7 +37,7 @@ void show_mem(void)
        printk(KERN_INFO "Mem-info:\n");
        show_free_areas();
        printk(KERN_INFO "Free swap:       %6ldkB\n", 
nr_swap_pages<<(PAGE_SHIFT-10));
-       for_each_pgdat(pgdat) {
+       for_each_online_pgdat(pgdat) {
                pgdat_resize_lock(pgdat, &flags);
                for (i = 0; i < pgdat->node_spanned_pages; ++i) {
                        page = pgdat_page_nr(pgdat, i);
diff -r 6d6a4d5801bd -r 4fad820a2233 linux-2.6-xen-sparse/arch/i386/pci/Makefile
--- a/linux-2.6-xen-sparse/arch/i386/pci/Makefile       Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/pci/Makefile       Fri Jan 12 14:30:49 
2007 +0000
@@ -1,4 +1,4 @@ obj-y                           := i386.o
-obj-y                          := i386.o
+obj-y                          := i386.o init.o
 
 obj-$(CONFIG_PCI_BIOS)         += pcbios.o
 obj-$(CONFIG_PCI_MMCONFIG)     += mmconfig.o direct.o
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/i386/pci/irq-xen.c
--- a/linux-2.6-xen-sparse/arch/i386/pci/irq-xen.c      Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/i386/pci/irq-xen.c      Fri Jan 12 14:30:49 
2007 +0000
@@ -260,13 +260,13 @@ static int pirq_via_set(struct pci_dev *
  */
 static int pirq_via586_get(struct pci_dev *router, struct pci_dev *dev, int 
pirq)
 {
-       static unsigned int pirqmap[5] = { 3, 2, 5, 1, 1 };
+       static unsigned int pirqmap[4] = { 3, 2, 5, 1 };
        return read_config_nybble(router, 0x55, pirqmap[pirq-1]);
 }
 
 static int pirq_via586_set(struct pci_dev *router, struct pci_dev *dev, int 
pirq, int irq)
 {
-       static unsigned int pirqmap[5] = { 3, 2, 5, 1, 1 };
+       static unsigned int pirqmap[4] = { 3, 2, 5, 1 };
        write_config_nybble(router, 0x55, pirqmap[pirq-1], irq);
        return 1;
 }
@@ -592,7 +592,9 @@ static __init int via_router_probe(struc
        case PCI_DEVICE_ID_VIA_82C596:
        case PCI_DEVICE_ID_VIA_82C686:
        case PCI_DEVICE_ID_VIA_8231:
+       case PCI_DEVICE_ID_VIA_8233A:
        case PCI_DEVICE_ID_VIA_8235:
+       case PCI_DEVICE_ID_VIA_8237:
                /* FIXME: add new ones for 8233/5 */
                r->name = "VIA";
                r->get = pirq_via_get;
diff -r 6d6a4d5801bd -r 4fad820a2233 linux-2.6-xen-sparse/arch/ia64/Kconfig
--- a/linux-2.6-xen-sparse/arch/ia64/Kconfig    Tue Jan 09 10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/ia64/Kconfig    Fri Jan 12 14:30:49 2007 +0000
@@ -34,11 +34,19 @@ config RWSEM_XCHGADD_ALGORITHM
        bool
        default y
 
+config GENERIC_FIND_NEXT_BIT
+       bool
+       default y
+
 config GENERIC_CALIBRATE_DELAY
        bool
        default y
 
 config TIME_INTERPOLATION
+       bool
+       default y
+
+config DMI
        bool
        default y
 
@@ -290,9 +298,6 @@ config HOTPLUG_CPU
          can be controlled through /sys/devices/system/cpu/cpu#.
          Say N if you want to disable CPU hotplug.
 
-config ARCH_ENABLE_MEMORY_HOTPLUG
-       def_bool y
-
 config SCHED_SMT
        bool "SMT scheduler support"
        depends on SMP
@@ -301,6 +306,25 @@ config SCHED_SMT
          Improves the CPU scheduler's decision making when dealing with
          Intel IA64 chips with MultiThreading at a cost of slightly increased
          overhead in some places. If unsure say N here.
+
+config PERMIT_BSP_REMOVE
+       bool "Support removal of Bootstrap Processor"
+       depends on HOTPLUG_CPU
+       default n
+       ---help---
+       Say Y here if your platform SAL will support removal of BSP with 
HOTPLUG_CPU
+       support. 
+
+config FORCE_CPEI_RETARGET
+       bool "Force assumption that CPEI can be re-targetted"
+       depends on PERMIT_BSP_REMOVE
+       default n
+       ---help---
+       Say Y if you need to force the assumption that CPEI can be re-targetted 
to
+       any cpu in the system. This hint is available via ACPI 3.0 
specifications.
+       Tiger4 systems are capable of re-directing CPEI to any CPU other than 
BSP.
+       This option it useful to enable this feature on older BIOS's as well.
+       You can also enable this by using boot command line option force_cpei=1.
 
 config PREEMPT
        bool "Preemptible Kernel"
@@ -347,6 +371,16 @@ config NUMA
          Access).  This option is for configuring high-end multiprocessor
          server systems.  If in doubt, say N.
 
+config NODES_SHIFT
+       int "Max num nodes shift(3-10)"
+       range 3 10
+       default "8"
+       depends on NEED_MULTIPLE_NODES
+       help
+         This option specifies the maximum number of nodes in your SSI system.
+         MAX_NUMNODES will be 2^(This value).
+         If in doubt, use the default.
+
 # VIRTUAL_MEM_MAP and FLAT_NODE_MEM_MAP are functionally equivalent.
 # VIRTUAL_MEM_MAP has been retained for historical reasons.
 config VIRTUAL_MEM_MAP
@@ -407,6 +441,8 @@ config SGI_SN
 config SGI_SN
        def_bool y if (IA64_SGI_SN2 || IA64_GENERIC)
 
+source "drivers/sn/Kconfig"
+
 source "drivers/firmware/Kconfig"
 
 source "fs/Kconfig.binfmt"
diff -r 6d6a4d5801bd -r 4fad820a2233 linux-2.6-xen-sparse/arch/ia64/Makefile
--- a/linux-2.6-xen-sparse/arch/ia64/Makefile   Tue Jan 09 10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/ia64/Makefile   Fri Jan 12 14:30:49 2007 +0000
@@ -1,5 +1,8 @@
 #
 # ia64/Makefile
+#
+# This file is included by the global makefile so that you can add your own
+# architecture-specific flags and dependencies.
 #
 # This file is subject to the terms and conditions of the GNU General Public
 # License.  See the file "COPYING" in the main directory of this archive
@@ -74,7 +77,7 @@ drivers-$(CONFIG_OPROFILE)    += arch/ia64/
 
 boot := arch/ia64/hp/sim/boot
 
-.PHONY: boot compressed check
+PHONY += boot compressed check
 
 all: compressed unwcheck
 
diff -r 6d6a4d5801bd -r 4fad820a2233 linux-2.6-xen-sparse/arch/ia64/dig/setup.c
--- a/linux-2.6-xen-sparse/arch/ia64/dig/setup.c        Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/ia64/dig/setup.c        Fri Jan 12 14:30:49 
2007 +0000
@@ -86,8 +86,3 @@ dig_setup (char **cmdline_p)
        xen_start_info->console.domU.evtchn = 0;
 #endif
 }
-
-void __init
-dig_irq_init (void)
-{
-}
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/ia64/kernel/entry.S
--- a/linux-2.6-xen-sparse/arch/ia64/kernel/entry.S     Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/ia64/kernel/entry.S     Fri Jan 12 14:30:49 
2007 +0000
@@ -1108,9 +1108,6 @@ skip_rbs_switch:
        st8 [r2]=r8
        st8 [r3]=r10
 .work_pending:
-       tbit.nz p6,p0=r31,TIF_SIGDELAYED                // signal delayed from  
MCA/INIT/NMI/PMI context?
-(p6)   br.cond.sptk.few .sigdelayed
-       ;;
        tbit.z p6,p0=r31,TIF_NEED_RESCHED               // 
current_thread_info()->need_resched==0?
 (p6)   br.cond.sptk.few .notify
 #ifdef CONFIG_PREEMPT
@@ -1136,17 +1133,6 @@ skip_rbs_switch:
 .ret10:        cmp.ne p6,p0=r0,r0                              // p6 <- 0
 (pLvSys)br.cond.sptk.few  .work_pending_syscall_end
        br.cond.sptk.many .work_processed_kernel        // don't re-check
-
-// There is a delayed signal that was detected in MCA/INIT/NMI/PMI context 
where
-// it could not be delivered.  Deliver it now.  The signal might be for us and
-// may set TIF_SIGPENDING, so redrive ia64_leave_* after processing the delayed
-// signal.
-
-.sigdelayed:
-       br.call.sptk.many rp=do_sigdelayed
-       cmp.eq p6,p0=r0,r0                              // p6 <- 1, always 
re-check
-(pLvSys)br.cond.sptk.few  .work_pending_syscall_end
-       br.cond.sptk.many .work_processed_kernel        // re-check
 
 .work_pending_syscall_end:
        adds r2=PT(R8)+16,r12
@@ -1625,5 +1611,11 @@ sys_call_table:
        data8 sys_ni_syscall                    // reserved for pselect
        data8 sys_ni_syscall                    // 1295 reserved for ppoll
        data8 sys_unshare
+       data8 sys_splice
+       data8 sys_set_robust_list
+       data8 sys_get_robust_list
+       data8 sys_sync_file_range               // 1300
+       data8 sys_tee
+       data8 sys_vmsplice
 
        .org sys_call_table + 8*NR_syscalls     // guard against failures to 
increase NR_syscalls
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/ia64/kernel/gate.lds.S
--- a/linux-2.6-xen-sparse/arch/ia64/kernel/gate.lds.S  Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/ia64/kernel/gate.lds.S  Fri Jan 12 14:30:49 
2007 +0000
@@ -82,6 +82,7 @@ SECTIONS
        *(.dynbss)
        *(.bss .bss.* .gnu.linkonce.b.*)
        *(__ex_table)
+       *(__mca_table)
   }
 }
 
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/ia64/kernel/iosapic.c
--- a/linux-2.6-xen-sparse/arch/ia64/kernel/iosapic.c   Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/ia64/kernel/iosapic.c   Fri Jan 12 14:30:49 
2007 +0000
@@ -9,54 +9,65 @@
  * Copyright (C) 1999 VA Linux Systems
  * Copyright (C) 1999,2000 Walt Drummond <drummond@xxxxxxxxxxx>
  *
- * 00/04/19    D. Mosberger    Rewritten to mirror more closely the x86 I/O 
APIC code.
- *                             In particular, we now have separate handlers 
for edge
- *                             and level triggered interrupts.
- * 00/10/27    Asit Mallick, Goutham Rao <goutham.rao@xxxxxxxxx> IRQ vector 
allocation
- *                             PCI to vector mapping, shared PCI interrupts.
- * 00/10/27    D. Mosberger    Document things a bit more to make them more 
understandable.
- *                             Clean up much of the old IOSAPIC cruft.
- * 01/07/27    J.I. Lee        PCI irq routing, Platform/Legacy interrupts and 
fixes for
- *                             ACPI S5(SoftOff) support.
+ * 00/04/19    D. Mosberger    Rewritten to mirror more closely the x86 I/O
+ *                             APIC code.  In particular, we now have separate
+ *                             handlers for edge and level triggered
+ *                             interrupts.
+ * 00/10/27    Asit Mallick, Goutham Rao <goutham.rao@xxxxxxxxx> IRQ vector
+ *                             allocation PCI to vector mapping, shared PCI
+ *                             interrupts.
+ * 00/10/27    D. Mosberger    Document things a bit more to make them more
+ *                             understandable.  Clean up much of the old
+ *                             IOSAPIC cruft.
+ * 01/07/27    J.I. Lee        PCI irq routing, Platform/Legacy interrupts
+ *                             and fixes for ACPI S5(SoftOff) support.
  * 02/01/23    J.I. Lee        iosapic pgm fixes for PCI irq routing from _PRT
- * 02/01/07     E. Focht        <efocht@xxxxxxxxxx> Redirectable interrupt 
vectors in
- *                              iosapic_set_affinity(), initializations for
- *                              /proc/irq/#/smp_affinity
+ * 02/01/07     E. Focht        <efocht@xxxxxxxxxx> Redirectable interrupt
+ *                             vectors in iosapic_set_affinity(),
+ *                             initializations for /proc/irq/#/smp_affinity
  * 02/04/02    P. Diefenbaugh  Cleaned up ACPI PCI IRQ routing.
  * 02/04/18    J.I. Lee        bug fix in iosapic_init_pci_irq
- * 02/04/30    J.I. Lee        bug fix in find_iosapic to fix ACPI PCI IRQ to 
IOSAPIC mapping
- *                             error
+ * 02/04/30    J.I. Lee        bug fix in find_iosapic to fix ACPI PCI IRQ to
+ *                             IOSAPIC mapping error
  * 02/07/29    T. Kochi        Allocate interrupt vectors dynamically
- * 02/08/04    T. Kochi        Cleaned up terminology (irq, global system 
interrupt, vector, etc.)
- * 02/09/20    D. Mosberger    Simplified by taking advantage of ACPI's 
pci_irq code.
+ * 02/08/04    T. Kochi        Cleaned up terminology (irq, global system
+ *                             interrupt, vector, etc.)
+ * 02/09/20    D. Mosberger    Simplified by taking advantage of ACPI's
+ *                             pci_irq code.
  * 03/02/19    B. Helgaas      Make pcat_compat system-wide, not per-IOSAPIC.
- *                             Remove iosapic_address & gsi_base from external 
interfaces.
- *                             Rationalize __init/__devinit attributes.
+ *                             Remove iosapic_address & gsi_base from
+ *                             external interfaces.  Rationalize
+ *                             __init/__devinit attributes.
  * 04/12/04 Ashok Raj  <ashok.raj@xxxxxxxxx> Intel Corporation 2004
- *                             Updated to work with irq migration necessary 
for CPU Hotplug
+ *                             Updated to work with irq migration necessary
+ *                             for CPU Hotplug
  */
 /*
- * Here is what the interrupt logic between a PCI device and the kernel looks 
like:
+ * Here is what the interrupt logic between a PCI device and the kernel looks
+ * like:
  *
- * (1) A PCI device raises one of the four interrupt pins (INTA, INTB, INTC, 
INTD).  The
- *     device is uniquely identified by its bus--, and slot-number (the 
function
- *     number does not matter here because all functions share the same 
interrupt
- *     lines).
+ * (1) A PCI device raises one of the four interrupt pins (INTA, INTB, INTC,
+ *     INTD).  The device is uniquely identified by its bus-, and slot-number
+ *     (the function number does not matter here because all functions share
+ *     the same interrupt lines).
  *
- * (2) The motherboard routes the interrupt line to a pin on a IOSAPIC 
controller.
- *     Multiple interrupt lines may have to share the same IOSAPIC pin (if 
they're level
- *     triggered and use the same polarity).  Each interrupt line has a unique 
Global
- *     System Interrupt (GSI) number which can be calculated as the sum of the 
controller's
- *     base GSI number and the IOSAPIC pin number to which the line connects.
+ * (2) The motherboard routes the interrupt line to a pin on a IOSAPIC
+ *     controller.  Multiple interrupt lines may have to share the same
+ *     IOSAPIC pin (if they're level triggered and use the same polarity).
+ *     Each interrupt line has a unique Global System Interrupt (GSI) number
+ *     which can be calculated as the sum of the controller's base GSI number
+ *     and the IOSAPIC pin number to which the line connects.
  *
- * (3) The IOSAPIC uses an internal routing table entries (RTEs) to map the 
IOSAPIC pin
- *     into the IA-64 interrupt vector.  This interrupt vector is then sent to 
the CPU.
+ * (3) The IOSAPIC uses an internal routing table entries (RTEs) to map the
+ * IOSAPIC pin into the IA-64 interrupt vector.  This interrupt vector is then
+ * sent to the CPU.
  *
- * (4) The kernel recognizes an interrupt as an IRQ.  The IRQ interface is 
used as
- *     architecture-independent interrupt handling mechanism in Linux.  As an
- *     IRQ is a number, we have to have IA-64 interrupt vector number <-> IRQ 
number
- *     mapping.  On smaller systems, we use one-to-one mapping between IA-64 
vector and
- *     IRQ.  A platform can implement platform_irq_to_vector(irq) and
+ * (4) The kernel recognizes an interrupt as an IRQ.  The IRQ interface is
+ *     used as architecture-independent interrupt handling mechanism in Linux.
+ *     As an IRQ is a number, we have to have
+ *     IA-64 interrupt vector number <-> IRQ number mapping.  On smaller
+ *     systems, we use one-to-one mapping between IA-64 vector and IRQ.  A
+ *     platform can implement platform_irq_to_vector(irq) and
  *     platform_local_vector_to_irq(vector) APIs to differentiate the mapping.
  *     Please see also include/asm-ia64/hw_irq.h for those APIs.
  *
@@ -64,9 +75,9 @@
  *
  *     PCI pin -> global system interrupt (GSI) -> IA-64 vector <-> IRQ
  *
- * Note: The term "IRQ" is loosely used everywhere in Linux kernel to describe 
interrupts.
- * Now we use "IRQ" only for Linux IRQ's.  ISA IRQ (isa_irq) is the only 
exception in this
- * source code.
+ * Note: The term "IRQ" is loosely used everywhere in Linux kernel to
+ * describeinterrupts.  Now we use "IRQ" only for Linux IRQ's.  ISA IRQ
+ * (isa_irq) is the only exception in this source code.
  */
 #include <linux/config.h>
 
@@ -90,7 +101,6 @@
 #include <asm/ptrace.h>
 #include <asm/system.h>
 
-
 #undef DEBUG_INTERRUPT_ROUTING
 
 #ifdef DEBUG_INTERRUPT_ROUTING
@@ -99,36 +109,46 @@
 #define DBG(fmt...)
 #endif
 
-#define NR_PREALLOCATE_RTE_ENTRIES     (PAGE_SIZE / sizeof(struct 
iosapic_rte_info))
+#define NR_PREALLOCATE_RTE_ENTRIES \
+       (PAGE_SIZE / sizeof(struct iosapic_rte_info))
 #define RTE_PREALLOCATED       (1)
 
 static DEFINE_SPINLOCK(iosapic_lock);
 
-/* These tables map IA-64 vectors to the IOSAPIC pin that generates this 
vector. */
+/*
+ * These tables map IA-64 vectors to the IOSAPIC pin that generates this
+ * vector.
+ */
 
 struct iosapic_rte_info {
-       struct list_head rte_list;      /* node in list of RTEs sharing the 
same vector */
+       struct list_head rte_list;      /* node in list of RTEs sharing the
+                                        * same vector */
        char __iomem    *addr;          /* base address of IOSAPIC */
-       unsigned int    gsi_base;       /* first GSI assigned to this IOSAPIC */
+       unsigned int    gsi_base;       /* first GSI assigned to this
+                                        * IOSAPIC */
        char            rte_index;      /* IOSAPIC RTE index */
        int             refcnt;         /* reference counter */
        unsigned int    flags;          /* flags */
 } ____cacheline_aligned;
 
 static struct iosapic_intr_info {
-       struct list_head rtes;          /* RTEs using this vector (empty => not 
an IOSAPIC interrupt) */
+       struct list_head rtes;          /* RTEs using this vector (empty =>
+                                        * not an IOSAPIC interrupt) */
        int             count;          /* # of RTEs that shares this vector */
-       u32             low32;          /* current value of low word of 
Redirection table entry */
+       u32             low32;          /* current value of low word of
+                                        * Redirection table entry */
        unsigned int    dest;           /* destination CPU physical ID */
        unsigned char   dmode   : 3;    /* delivery mode (see iosapic.h) */
-       unsigned char   polarity: 1;    /* interrupt polarity (see iosapic.h) */
+       unsigned char   polarity: 1;    /* interrupt polarity
+                                        * (see iosapic.h) */
        unsigned char   trigger : 1;    /* trigger mode (see iosapic.h) */
 } iosapic_intr_info[IA64_NUM_VECTORS];
 
 static struct iosapic {
        char __iomem    *addr;          /* base address of IOSAPIC */
-       unsigned int    gsi_base;       /* first GSI assigned to this IOSAPIC */
-       unsigned short  num_rte;        /* number of RTE in this IOSAPIC */
+       unsigned int    gsi_base;       /* first GSI assigned to this
+                                        * IOSAPIC */
+       unsigned short  num_rte;        /* # of RTEs on this IOSAPIC */
        int             rtes_inuse;     /* # of RTEs in use on this IOSAPIC */
 #ifdef CONFIG_NUMA
        unsigned short  node;           /* numa node association via pxm */
@@ -218,7 +238,8 @@ find_iosapic (unsigned int gsi)
        int i;
 
        for (i = 0; i < NR_IOSAPICS; i++) {
-               if ((unsigned) (gsi - iosapic_lists[i].gsi_base) < 
iosapic_lists[i].num_rte)
+               if ((unsigned) (gsi - iosapic_lists[i].gsi_base) <
+                   iosapic_lists[i].num_rte)
                        return i;
        }
 
@@ -231,7 +252,8 @@ _gsi_to_vector (unsigned int gsi)
        struct iosapic_intr_info *info;
        struct iosapic_rte_info *rte;
 
-       for (info = iosapic_intr_info; info < iosapic_intr_info + 
IA64_NUM_VECTORS; ++info)
+       for (info = iosapic_intr_info; info <
+                    iosapic_intr_info + IA64_NUM_VECTORS; ++info)
                list_for_each_entry(rte, &info->rtes, rte_list)
                        if (rte->gsi_base + rte->rte_index == gsi)
                                return info - iosapic_intr_info;
@@ -254,8 +276,8 @@ gsi_to_irq (unsigned int gsi)
        unsigned long flags;
        int irq;
        /*
-        * XXX fix me: this assumes an identity mapping vetween IA-64 vector 
and Linux irq
-        * numbers...
+        * XXX fix me: this assumes an identity mapping between IA-64 vector
+        * and Linux irq numbers...
         */
        spin_lock_irqsave(&iosapic_lock, flags);
        {
@@ -266,7 +288,8 @@ gsi_to_irq (unsigned int gsi)
        return irq;
 }
 
-static struct iosapic_rte_info *gsi_vector_to_rte(unsigned int gsi, unsigned 
int vec)
+static struct iosapic_rte_info *gsi_vector_to_rte(unsigned int gsi,
+                                                 unsigned int vec)
 {
        struct iosapic_rte_info *rte;
 
@@ -306,7 +329,9 @@ set_rte (unsigned int gsi, unsigned int 
 
                for (irq = 0; irq < NR_IRQS; ++irq)
                        if (irq_to_vector(irq) == vector) {
-                               set_irq_affinity_info(irq, (int)(dest & 
0xffff), redir);
+                               set_irq_affinity_info(irq,
+                                                     (int)(dest & 0xffff),
+                                                     redir);
                                break;
                        }
        }
@@ -328,7 +353,7 @@ set_rte (unsigned int gsi, unsigned int 
 }
 
 static void
-nop (unsigned int vector)
+nop (unsigned int irq)
 {
        /* do nothing... */
 }
@@ -350,7 +375,8 @@ mask_irq (unsigned int irq)
        {
                /* set only the mask bit */
                low32 = iosapic_intr_info[vec].low32 |= IOSAPIC_MASK;
-               list_for_each_entry(rte, &iosapic_intr_info[vec].rtes, 
rte_list) {
+               list_for_each_entry(rte, &iosapic_intr_info[vec].rtes,
+                                   rte_list) {
                        addr = rte->addr;
                        rte_index = rte->rte_index;
                        iosapic_write(addr, IOSAPIC_RTE_LOW(rte_index), low32);
@@ -375,7 +401,8 @@ unmask_irq (unsigned int irq)
        spin_lock_irqsave(&iosapic_lock, flags);
        {
                low32 = iosapic_intr_info[vec].low32 &= ~IOSAPIC_MASK;
-               list_for_each_entry(rte, &iosapic_intr_info[vec].rtes, 
rte_list) {
+               list_for_each_entry(rte, &iosapic_intr_info[vec].rtes,
+                                   rte_list) {
                        addr = rte->addr;
                        rte_index = rte->rte_index;
                        iosapic_write(addr, IOSAPIC_RTE_LOW(rte_index), low32);
@@ -415,21 +442,25 @@ iosapic_set_affinity (unsigned int irq, 
 
        spin_lock_irqsave(&iosapic_lock, flags);
        {
-               low32 = iosapic_intr_info[vec].low32 & ~(7 << 
IOSAPIC_DELIVERY_SHIFT);
+               low32 = iosapic_intr_info[vec].low32 &
+                       ~(7 << IOSAPIC_DELIVERY_SHIFT);
 
                if (redir)
                        /* change delivery mode to lowest priority */
-                       low32 |= (IOSAPIC_LOWEST_PRIORITY << 
IOSAPIC_DELIVERY_SHIFT);
+                       low32 |= (IOSAPIC_LOWEST_PRIORITY <<
+                                 IOSAPIC_DELIVERY_SHIFT);
                else
                        /* change delivery mode to fixed */
                        low32 |= (IOSAPIC_FIXED << IOSAPIC_DELIVERY_SHIFT);
 
                iosapic_intr_info[vec].low32 = low32;
                iosapic_intr_info[vec].dest = dest;
-               list_for_each_entry(rte, &iosapic_intr_info[vec].rtes, 
rte_list) {
+               list_for_each_entry(rte, &iosapic_intr_info[vec].rtes,
+                                   rte_list) {
                        addr = rte->addr;
                        rte_index = rte->rte_index;
-                       iosapic_write(addr, IOSAPIC_RTE_HIGH(rte_index), 
high32);
+                       iosapic_write(addr, IOSAPIC_RTE_HIGH(rte_index),
+                                     high32);
                        iosapic_write(addr, IOSAPIC_RTE_LOW(rte_index), low32);
                }
        }
@@ -454,7 +485,7 @@ iosapic_end_level_irq (unsigned int irq)
        ia64_vector vec = irq_to_vector(irq);
        struct iosapic_rte_info *rte;
 
-       move_irq(irq);
+       move_native_irq(irq);
        list_for_each_entry(rte, &iosapic_intr_info[vec].rtes, rte_list)
                iosapic_eoi(rte->addr, vec);
 }
@@ -496,13 +527,14 @@ iosapic_ack_edge_irq (unsigned int irq)
 {
        irq_desc_t *idesc = irq_descp(irq);
 
-       move_irq(irq);
+       move_native_irq(irq);
        /*
         * Once we have recorded IRQ_PENDING already, we can mask the
         * interrupt for real. This prevents IRQ storms from unhandled
         * devices.
         */
-       if ((idesc->status & (IRQ_PENDING|IRQ_DISABLED)) == 
(IRQ_PENDING|IRQ_DISABLED))
+       if ((idesc->status & (IRQ_PENDING|IRQ_DISABLED)) ==
+           (IRQ_PENDING|IRQ_DISABLED))
                mask_irq(irq);
 }
 
@@ -536,7 +568,8 @@ iosapic_version (char __iomem *addr)
        return iosapic_read(addr, IOSAPIC_VERSION);
 }
 
-static int iosapic_find_sharable_vector (unsigned long trigger, unsigned long 
pol)
+static int iosapic_find_sharable_vector (unsigned long trigger,
+                                        unsigned long pol)
 {
        int i, vector = -1, min_count = -1;
        struct iosapic_intr_info *info;
@@ -551,7 +584,8 @@ static int iosapic_find_sharable_vector 
        for (i = IA64_FIRST_DEVICE_VECTOR; i <= IA64_LAST_DEVICE_VECTOR; i++) {
                info = &iosapic_intr_info[i];
                if (info->trigger == trigger && info->polarity == pol &&
-                   (info->dmode == IOSAPIC_FIXED || info->dmode == 
IOSAPIC_LOWEST_PRIORITY)) {
+                   (info->dmode == IOSAPIC_FIXED || info->dmode ==
+                    IOSAPIC_LOWEST_PRIORITY)) {
                        if (min_count == -1 || info->count < min_count) {
                                vector = i;
                                min_count = info->count;
@@ -575,12 +609,15 @@ iosapic_reassign_vector (int vector)
                new_vector = assign_irq_vector(AUTO_ASSIGN);
                if (new_vector < 0)
                        panic("%s: out of interrupt vectors!\n", __FUNCTION__);
-               printk(KERN_INFO "Reassigning vector %d to %d\n", vector, 
new_vector);
+               printk(KERN_INFO "Reassigning vector %d to %d\n",
+                      vector, new_vector);
                memcpy(&iosapic_intr_info[new_vector], 
&iosapic_intr_info[vector],
                       sizeof(struct iosapic_intr_info));
                INIT_LIST_HEAD(&iosapic_intr_info[new_vector].rtes);
-               list_move(iosapic_intr_info[vector].rtes.next, 
&iosapic_intr_info[new_vector].rtes);
-               memset(&iosapic_intr_info[vector], 0, sizeof(struct 
iosapic_intr_info));
+               list_move(iosapic_intr_info[vector].rtes.next,
+                         &iosapic_intr_info[new_vector].rtes);
+               memset(&iosapic_intr_info[vector], 0,
+                      sizeof(struct iosapic_intr_info));
                iosapic_intr_info[vector].low32 = IOSAPIC_MASK;
                INIT_LIST_HEAD(&iosapic_intr_info[vector].rtes);
        }
@@ -593,7 +630,8 @@ static struct iosapic_rte_info *iosapic_
        int preallocated = 0;
 
        if (!iosapic_kmalloc_ok && list_empty(&free_rte_list)) {
-               rte = alloc_bootmem(sizeof(struct iosapic_rte_info) * 
NR_PREALLOCATE_RTE_ENTRIES);
+               rte = alloc_bootmem(sizeof(struct iosapic_rte_info) *
+                                   NR_PREALLOCATE_RTE_ENTRIES);
                if (!rte)
                        return NULL;
                for (i = 0; i < NR_PREALLOCATE_RTE_ENTRIES; i++, rte++)
@@ -601,7 +639,8 @@ static struct iosapic_rte_info *iosapic_
        }
 
        if (!list_empty(&free_rte_list)) {
-               rte = list_entry(free_rte_list.next, struct iosapic_rte_info, 
rte_list);
+               rte = list_entry(free_rte_list.next, struct iosapic_rte_info,
+                                rte_list);
                list_del(&rte->rte_list);
                preallocated++;
        } else {
@@ -644,7 +683,8 @@ register_intr (unsigned int gsi, int vec
 
        index = find_iosapic(gsi);
        if (index < 0) {
-               printk(KERN_WARNING "%s: No IOSAPIC for GSI %u\n", 
__FUNCTION__, gsi);
+               printk(KERN_WARNING "%s: No IOSAPIC for GSI %u\n",
+                      __FUNCTION__, gsi);
                return -ENODEV;
        }
 
@@ -655,7 +695,8 @@ register_intr (unsigned int gsi, int vec
        if (!rte) {
                rte = iosapic_alloc_rte();
                if (!rte) {
-                       printk(KERN_WARNING "%s: cannot allocate memory\n", 
__FUNCTION__);
+                       printk(KERN_WARNING "%s: cannot allocate memory\n",
+                              __FUNCTION__);
                        return -ENOMEM;
                }
 
@@ -671,7 +712,9 @@ register_intr (unsigned int gsi, int vec
        else if (vector_is_shared(vector)) {
                struct iosapic_intr_info *info = &iosapic_intr_info[vector];
                if (info->trigger != trigger || info->polarity != polarity) {
-                       printk (KERN_WARNING "%s: cannot override the 
interrupt\n", __FUNCTION__);
+                       printk (KERN_WARNING
+                               "%s: cannot override the interrupt\n",
+                               __FUNCTION__);
                        return -EINVAL;
                }
        }
@@ -691,8 +734,10 @@ register_intr (unsigned int gsi, int vec
        idesc = irq_descp(vector);
        if (idesc->handler != irq_type) {
                if (idesc->handler != &no_irq_type)
-                       printk(KERN_WARNING "%s: changing vector %d from %s to 
%s\n",
-                              __FUNCTION__, vector, idesc->handler->typename, 
irq_type->typename);
+                       printk(KERN_WARNING
+                              "%s: changing vector %d from %s to %s\n",
+                              __FUNCTION__, vector,
+                              idesc->handler->typename, irq_type->typename);
                idesc->handler = irq_type;
        }
        return 0;
@@ -703,6 +748,7 @@ get_target_cpu (unsigned int gsi, int ve
 {
 #ifdef CONFIG_SMP
        static int cpu = -1;
+       extern int cpe_vector;
 
        /*
         * In case of vector shared by multiple RTEs, all RTEs that
@@ -725,6 +771,11 @@ get_target_cpu (unsigned int gsi, int ve
        if (!cpu_online(smp_processor_id()))
                return cpu_physical_id(smp_processor_id());
 
+#ifdef CONFIG_ACPI
+       if (cpe_vector > 0 && vector == IA64_CPEP_VECTOR)
+               return get_cpei_target_cpu();
+#endif
+
 #ifdef CONFIG_NUMA
        {
                int num_cpus, cpu_index, iosapic_index, numa_cpu, i = 0;
@@ -747,7 +798,7 @@ get_target_cpu (unsigned int gsi, int ve
                if (!num_cpus)
                        goto skip_numa_setup;
 
-               /* Use vector assigment to distribute across cpus in node */
+               /* Use vector assignment to distribute across cpus in node */
                cpu_index = vector % num_cpus;
 
                for (numa_cpu = first_cpu(cpu_mask) ; i < cpu_index ; i++)
@@ -769,7 +820,7 @@ skip_numa_setup:
        } while (!cpu_online(cpu));
 
        return cpu_physical_id(cpu);
-#else
+#else  /* CONFIG_SMP */
        return cpu_physical_id(smp_processor_id());
 #endif
 }
@@ -821,7 +872,8 @@ again:
                        if (list_empty(&iosapic_intr_info[vector].rtes))
                                free_irq_vector(vector);
                        spin_unlock(&iosapic_lock);
-                       spin_unlock_irqrestore(&irq_descp(vector)->lock, flags);
+                       spin_unlock_irqrestore(&irq_descp(vector)->lock,
+                                              flags);
                        goto again;
                }
 
@@ -830,7 +882,8 @@ again:
                              polarity, trigger);
                if (err < 0) {
                        spin_unlock(&iosapic_lock);
-                       spin_unlock_irqrestore(&irq_descp(vector)->lock, flags);
+                       spin_unlock_irqrestore(&irq_descp(vector)->lock,
+                                              flags);
                        return err;
                }
 
@@ -872,7 +925,8 @@ iosapic_unregister_intr (unsigned int gs
         */
        irq = gsi_to_irq(gsi);
        if (irq < 0) {
-               printk(KERN_ERR "iosapic_unregister_intr(%u) unbalanced\n", 
gsi);
+               printk(KERN_ERR "iosapic_unregister_intr(%u) unbalanced\n",
+                      gsi);
                WARN_ON(1);
                return;
        }
@@ -883,7 +937,9 @@ iosapic_unregister_intr (unsigned int gs
        spin_lock(&iosapic_lock);
        {
                if ((rte = gsi_vector_to_rte(gsi, vector)) == NULL) {
-                       printk(KERN_ERR "iosapic_unregister_intr(%u) 
unbalanced\n", gsi);
+                       printk(KERN_ERR
+                              "iosapic_unregister_intr(%u) unbalanced\n",
+                              gsi);
                        WARN_ON(1);
                        goto out;
                }
@@ -893,7 +949,8 @@ iosapic_unregister_intr (unsigned int gs
 
                /* Mask the interrupt */
                low32 = iosapic_intr_info[vector].low32 | IOSAPIC_MASK;
-               iosapic_write(rte->addr, IOSAPIC_RTE_LOW(rte->rte_index), 
low32);
+               iosapic_write(rte->addr, IOSAPIC_RTE_LOW(rte->rte_index),
+                             low32);
 
                /* Remove the rte entry from the list */
                list_del(&rte->rte_list);
@@ -906,7 +963,9 @@ iosapic_unregister_intr (unsigned int gs
                trigger  = iosapic_intr_info[vector].trigger;
                polarity = iosapic_intr_info[vector].polarity;
                dest     = iosapic_intr_info[vector].dest;
-               printk(KERN_INFO "GSI %u (%s, %s) -> CPU %d (0x%04x) vector %d 
unregistered\n",
+               printk(KERN_INFO
+                      "GSI %u (%s, %s) -> CPU %d (0x%04x)"
+                      " vector %d unregistered\n",
                       gsi, (trigger == IOSAPIC_EDGE ? "edge" : "level"),
                       (polarity == IOSAPIC_POL_HIGH ? "high" : "low"),
                       cpu_logical_id(dest), dest, vector);
@@ -919,12 +978,15 @@ iosapic_unregister_intr (unsigned int gs
                        idesc->handler = &no_irq_type;
 
                        /* Clear the interrupt information */
-                       memset(&iosapic_intr_info[vector], 0, sizeof(struct 
iosapic_intr_info));
+                       memset(&iosapic_intr_info[vector], 0,
+                              sizeof(struct iosapic_intr_info));
                        iosapic_intr_info[vector].low32 |= IOSAPIC_MASK;
                        INIT_LIST_HEAD(&iosapic_intr_info[vector].rtes);
 
                        if (idesc->action) {
-                               printk(KERN_ERR "interrupt handlers still exist 
on IRQ %u\n", irq);
+                               printk(KERN_ERR
+                                      "interrupt handlers still exist on"
+                                      "IRQ %u\n", irq);
                                WARN_ON(1);
                        }
 
@@ -939,7 +1001,6 @@ iosapic_unregister_intr (unsigned int gs
 
 /*
  * ACPI calls this when it finds an entry for a platform interrupt.
- * Note that the irq_base and IOSAPIC address must be set in iosapic_init().
  */
 int __init
 iosapic_register_platform_intr (u32 int_type, unsigned int gsi,
@@ -973,13 +1034,16 @@ iosapic_register_platform_intr (u32 int_
                mask = 1;
                break;
              default:
-               printk(KERN_ERR "iosapic_register_platform_irq(): invalid int 
type 0x%x\n", int_type);
+               printk(KERN_ERR "%s: invalid int type 0x%x\n", __FUNCTION__,
+                      int_type);
                return -1;
        }
 
        register_intr(gsi, vector, delivery, polarity, trigger);
 
-       printk(KERN_INFO "PLATFORM int %s (0x%x): GSI %u (%s, %s) -> CPU %d 
(0x%04x) vector %d\n",
+       printk(KERN_INFO
+              "PLATFORM int %s (0x%x): GSI %u (%s, %s) -> CPU %d (0x%04x)"
+              " vector %d\n",
               int_type < ARRAY_SIZE(name) ? name[int_type] : "unknown",
               int_type, gsi, (trigger == IOSAPIC_EDGE ? "edge" : "level"),
               (polarity == IOSAPIC_POL_HIGH ? "high" : "low"),
@@ -989,10 +1053,8 @@ iosapic_register_platform_intr (u32 int_
        return vector;
 }
 
-
 /*
  * ACPI calls this when it finds an entry for a legacy ISA IRQ override.
- * Note that the gsi_base and IOSAPIC address must be set in iosapic_init().
  */
 void __init
 iosapic_override_isa_irq (unsigned int isa_irq, unsigned int gsi,
@@ -1021,7 +1083,8 @@ iosapic_system_init (int system_pcat_com
 
        for (vector = 0; vector < IA64_NUM_VECTORS; ++vector) {
                iosapic_intr_info[vector].low32 = IOSAPIC_MASK;
-               INIT_LIST_HEAD(&iosapic_intr_info[vector].rtes);        /* mark 
as unused */
+               /* mark as unused */
+               INIT_LIST_HEAD(&iosapic_intr_info[vector].rtes);
        }
 
        pcat_compat = system_pcat_compat;
@@ -1030,10 +1093,12 @@ iosapic_system_init (int system_pcat_com
 
        if (pcat_compat) {
                /*
-                * Disable the compatibility mode interrupts (8259 style), 
needs IN/OUT support
-                * enabled.
+                * Disable the compatibility mode interrupts (8259 style),
+                * needs IN/OUT support enabled.
                 */
-               printk(KERN_INFO "%s: Disabling PC-AT compatible 8259 
interrupts\n", __FUNCTION__);
+               printk(KERN_INFO
+                      "%s: Disabling PC-AT compatible 8259 interrupts\n",
+                      __FUNCTION__);
                outb(0xff, 0xA1);
                outb(0xff, 0x21);
        }
@@ -1073,10 +1138,7 @@ iosapic_check_gsi_range (unsigned int gs
                base = iosapic_lists[index].gsi_base;
                end  = base + iosapic_lists[index].num_rte - 1;
 
-               if (gsi_base < base && gsi_end < base)
-                       continue;/* OK */
-
-               if (gsi_base > end && gsi_end > end)
+               if (gsi_end < base || end < gsi_base)
                        continue; /* OK */
 
                return -EBUSY;
@@ -1122,12 +1184,14 @@ iosapic_init (unsigned long phys_addr, u
 
        if ((gsi_base == 0) && pcat_compat) {
                /*
-                * Map the legacy ISA devices into the IOSAPIC data.  Some of 
these may
-                * get reprogrammed later on with data from the ACPI Interrupt 
Source
-                * Override table.
+                * Map the legacy ISA devices into the IOSAPIC data.  Some of
+                * these may get reprogrammed later on with data from the ACPI
+                * Interrupt Source Override table.
                 */
                for (isa_irq = 0; isa_irq < 16; ++isa_irq)
-                       iosapic_override_isa_irq(isa_irq, isa_irq, 
IOSAPIC_POL_HIGH, IOSAPIC_EDGE);
+                       iosapic_override_isa_irq(isa_irq, isa_irq,
+                                                IOSAPIC_POL_HIGH,
+                                                IOSAPIC_EDGE);
        }
        return 0;
 }
@@ -1150,7 +1214,8 @@ iosapic_remove (unsigned int gsi_base)
 
                if (iosapic_lists[index].rtes_inuse) {
                        err = -EBUSY;
-                       printk(KERN_WARNING "%s: IOSAPIC for GSI base %u is 
busy\n",
+                       printk(KERN_WARNING
+                              "%s: IOSAPIC for GSI base %u is busy\n",
                               __FUNCTION__, gsi_base);
                        goto out;
                }
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/ia64/kernel/patch.c
--- a/linux-2.6-xen-sparse/arch/ia64/kernel/patch.c     Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/ia64/kernel/patch.c     Fri Jan 12 14:30:49 
2007 +0000
@@ -115,7 +115,7 @@ ia64_patch_vtop (unsigned long start, un
        ia64_srlz_i();
 }
 
-void
+void __init
 ia64_patch_mckinley_e9 (unsigned long start, unsigned long end)
 {
        static int first_time = 1;
@@ -149,7 +149,7 @@ ia64_patch_mckinley_e9 (unsigned long st
        ia64_srlz_i();
 }
 
-static void
+static void __init
 patch_fsyscall_table (unsigned long start, unsigned long end)
 {
        extern unsigned long fsyscall_table[NR_syscalls];
@@ -166,7 +166,7 @@ patch_fsyscall_table (unsigned long star
        ia64_srlz_i();
 }
 
-static void
+static void __init
 patch_brl_fsys_bubble_down (unsigned long start, unsigned long end)
 {
        extern char fsys_bubble_down[];
@@ -251,7 +251,7 @@ patch_brl_in_vdso(void)
 #define patch_brl_in_vdso()                    do { } while (0)
 #endif
 
-void
+void __init
 ia64_patch_gate (void)
 {
 #      define START(name)      ((unsigned long) 
__start_gate_##name##_patchlist)
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/ia64/kernel/perfmon.c
--- a/linux-2.6-xen-sparse/arch/ia64/kernel/perfmon.c   Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/ia64/kernel/perfmon.c   Fri Jan 12 14:30:49 
2007 +0000
@@ -5026,15 +5026,13 @@ abort_locked:
        if (likely(ctx)) {
                DPRINT(("context unlocked\n"));
                UNPROTECT_CTX(ctx, flags);
+               fput(file);
        }
 
        /* copy argument back to user, if needed */
        if (call_made && PFM_CMD_RW_ARG(cmd) && copy_to_user(arg, args_k, 
base_sz*count)) ret = -EFAULT;
 
 error_args:
-       if (file)
-               fput(file);
-
        kfree(args_k);
 
        DPRINT(("cmd=%s ret=%ld\n", PFM_CMD_NAME(cmd), ret));
@@ -6813,6 +6811,7 @@ void
 void
 pfm_init_percpu (void)
 {
+       static int first_time=1;
        /*
         * make sure no measurement is active
         * (may inherit programmed PMCs from EFI).
@@ -6825,8 +6824,10 @@ pfm_init_percpu (void)
         */
        pfm_unfreeze_pmu();
 
-       if (smp_processor_id() == 0)
+       if (first_time) {
                register_percpu_irq(IA64_PERFMON_VECTOR, &perfmon_irqaction);
+               first_time=0;
+       }
 
        ia64_setreg(_IA64_REG_CR_PMV, IA64_PERFMON_VECTOR);
        ia64_srlz_d();
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/ia64/kernel/setup.c
--- a/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c     Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c     Fri Jan 12 14:30:49 
2007 +0000
@@ -37,11 +37,11 @@
 #include <linux/string.h>
 #include <linux/threads.h>
 #include <linux/tty.h>
+#include <linux/dmi.h>
 #include <linux/serial.h>
 #include <linux/serial_core.h>
 #include <linux/efi.h>
 #include <linux/initrd.h>
-#include <linux/platform.h>
 #include <linux/pm.h>
 #include <linux/cpufreq.h>
 
@@ -150,8 +150,8 @@ EXPORT_SYMBOL(ia64_max_iommu_merge_mask)
 /*
  * We use a special marker for the end of memory and it uses the extra (+1) 
slot
  */
-struct rsvd_region rsvd_region[IA64_MAX_RSVD_REGIONS + 1];
-int num_rsvd_regions;
+struct rsvd_region rsvd_region[IA64_MAX_RSVD_REGIONS + 1] __initdata;
+int num_rsvd_regions __initdata;
 
 
 /*
@@ -160,7 +160,7 @@ int num_rsvd_regions;
  * caller-specified function is called with the memory ranges that remain 
after filtering.
  * This routine does not assume the incoming segments are sorted.
  */
-int
+int __init
 filter_rsvd_memory (unsigned long start, unsigned long end, void *arg)
 {
        unsigned long range_start, range_end, prev_start;
@@ -196,7 +196,7 @@ filter_rsvd_memory (unsigned long start,
        return 0;
 }
 
-static void
+static void __init
 sort_regions (struct rsvd_region *rsvd_region, int max)
 {
        int j;
@@ -237,7 +237,7 @@ __initcall(register_memory);
  * initrd, etc.  There are currently %IA64_MAX_RSVD_REGIONS defined,
  * see include/asm-ia64/meminit.h if you need to define more.
  */
-void
+void __init
 reserve_memory (void)
 {
        int n = 0;
@@ -298,7 +298,7 @@ reserve_memory (void)
  * Grab the initrd start and end from the boot parameter struct given us by
  * the boot loader.
  */
-void
+void __init
 find_initrd (void)
 {
 #ifdef CONFIG_BLK_DEV_INITRD
@@ -400,7 +400,7 @@ mark_bsp_online (void)
 }
 
 #ifdef CONFIG_SMP
-static void
+static void __init
 check_for_logical_procs (void)
 {
        pal_logical_to_physical_t info;
@@ -427,6 +427,14 @@ check_for_logical_procs (void)
 }
 #endif
 
+static __initdata int nomca;
+static __init int setup_nomca(char *s)
+{
+       nomca = 1;
+       return 0;
+}
+early_param("nomca", setup_nomca);
+
 void __init
 setup_arch (char **cmdline_p)
 {
@@ -451,35 +459,15 @@ setup_arch (char **cmdline_p)
        efi_init();
        io_port_init();
 
+       parse_early_param();
+
 #ifdef CONFIG_IA64_GENERIC
-       {
-               const char *mvec_name = strstr (*cmdline_p, "machvec=");
-               char str[64];
-
-               if (mvec_name) {
-                       const char *end;
-                       size_t len;
-
-                       mvec_name += 8;
-                       end = strchr (mvec_name, ' ');
-                       if (end)
-                               len = end - mvec_name;
-                       else
-                               len = strlen (mvec_name);
-                       len = min(len, sizeof (str) - 1);
-                       strncpy (str, mvec_name, len);
-                       str[len] = '\0';
-                       mvec_name = str;
-               } else
-                       mvec_name = acpi_get_sysname();
-               machvec_init(mvec_name);
-       }
+       machvec_init(NULL);
 #endif
 
        if (early_console_setup(*cmdline_p) == 0)
                mark_bsp_online();
 
-       parse_early_param();
 #ifdef CONFIG_ACPI
        /* Initialize the ACPI boot-time table parser */
        acpi_table_init();
@@ -495,7 +483,7 @@ setup_arch (char **cmdline_p)
        find_memory();
 
        /* process SAL system table: */
-       ia64_sal_init(efi.sal_systab);
+       ia64_sal_init(__va(efi.sal_systab));
 
        ia64_setup_printk_clock();
 
@@ -561,7 +549,7 @@ setup_arch (char **cmdline_p)
 
 
        /* enable IA-64 Machine Check Abort Handling unless disabled */
-       if (!strstr(saved_command_line, "nomca"))
+       if (!nomca)
                ia64_mca_init();
 
        platform_setup(cmdline_p);
@@ -694,7 +682,7 @@ struct seq_operations cpuinfo_op = {
        .show =         show_cpuinfo
 };
 
-void
+static void __cpuinit
 identify_cpu (struct cpuinfo_ia64 *c)
 {
        union {
@@ -771,7 +759,7 @@ setup_per_cpu_areas (void)
  * In addition, the minimum of the i-cache stride sizes is calculated for
  * "flush_icache_range()".
  */
-static void
+static void __cpuinit
 get_max_cacheline_size (void)
 {
        unsigned long line_size, max = 1;
@@ -834,10 +822,10 @@ get_max_cacheline_size (void)
  * cpu_init() initializes state that is per-CPU.  This function acts
  * as a 'CPU state barrier', nothing should get across.
  */
-void
+void __cpuinit
 cpu_init (void)
 {
-       extern void __devinit ia64_mmu_init (void *);
+       extern void __cpuinit ia64_mmu_init (void *);
        unsigned long num_phys_stacked;
        pal_vm_info_2_u_t vmi;
        unsigned int max_ctx;
@@ -974,9 +962,16 @@ void sched_cacheflush(void)
        ia64_sal_cache_flush(3);
 }
 
-void
+void __init
 check_bugs (void)
 {
        ia64_patch_mckinley_e9((unsigned long) __start___mckinley_e9_bundles,
                               (unsigned long) __end___mckinley_e9_bundles);
 }
+
+static int __init run_dmi_scan(void)
+{
+       dmi_scan_machine();
+       return 0;
+}
+core_initcall(run_dmi_scan);
diff -r 6d6a4d5801bd -r 4fad820a2233 linux-2.6-xen-sparse/arch/ia64/mm/ioremap.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/linux-2.6-xen-sparse/arch/ia64/mm/ioremap.c       Fri Jan 12 14:30:49 
2007 +0000
@@ -0,0 +1,46 @@
+/*
+ * (c) Copyright 2006 Hewlett-Packard Development Company, L.P.
+ *     Bjorn Helgaas <bjorn.helgaas@xxxxxx>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/compiler.h>
+#include <linux/module.h>
+#include <linux/efi.h>
+#include <asm/io.h>
+
+static inline void __iomem *
+__ioremap (unsigned long offset, unsigned long size)
+{
+       offset = HYPERVISOR_ioremap(offset, size);
+       if (IS_ERR_VALUE(offset))
+               return (void __iomem*)offset;
+       return (void __iomem *) (__IA64_UNCACHED_OFFSET | offset);
+}
+
+void __iomem *
+ioremap (unsigned long offset, unsigned long size)
+{
+       if (efi_mem_attribute_range(offset, size, EFI_MEMORY_WB))
+               return phys_to_virt(offset);
+
+       if (efi_mem_attribute_range(offset, size, EFI_MEMORY_UC))
+               return __ioremap(offset, size);
+
+       /*
+        * Someday this should check ACPI resources so we
+        * can do the right thing for hot-plugged regions.
+        */
+       return __ioremap(offset, size);
+}
+EXPORT_SYMBOL(ioremap);
+
+void __iomem *
+ioremap_nocache (unsigned long offset, unsigned long size)
+{
+       return __ioremap(offset, size);
+}
+EXPORT_SYMBOL(ioremap_nocache);
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/um/kernel/physmem.c
--- a/linux-2.6-xen-sparse/arch/um/kernel/physmem.c     Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/um/kernel/physmem.c     Fri Jan 12 14:30:49 
2007 +0000
@@ -9,6 +9,7 @@
 #include "linux/vmalloc.h"
 #include "linux/bootmem.h"
 #include "linux/module.h"
+#include "linux/pfn.h"
 #include "asm/types.h"
 #include "asm/pgtable.h"
 #include "kern_util.h"
@@ -281,7 +282,7 @@ int init_maps(unsigned long physmem, uns
 
        for(i = 0; i < total_pages; i++){
                p = &map[i];
-               set_page_count(p, 0);
+               memset(p, 0, sizeof(struct page));
                SetPageReserved(p);
                INIT_LIST_HEAD(&p->lru);
        }
@@ -318,8 +319,6 @@ void map_memory(unsigned long virt, unsi
        }
 }
 
-#define PFN_UP(x) (((x) + PAGE_SIZE-1) >> PAGE_SHIFT)
-
 extern int __syscall_stub_start, __binary_start;
 
 void setup_physmem(unsigned long start, unsigned long reserve_end,
@@ -410,6 +409,8 @@ unsigned long find_iomem(char *driver, u
                        *len_out = region->size;
                        return(region->virt);
                }
+
+               region = region->next;
        }
 
        return(0);
diff -r 6d6a4d5801bd -r 4fad820a2233 linux-2.6-xen-sparse/arch/x86_64/Kconfig
--- a/linux-2.6-xen-sparse/arch/x86_64/Kconfig  Tue Jan 09 10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/Kconfig  Fri Jan 12 14:30:49 2007 +0000
@@ -44,6 +44,10 @@ config RWSEM_GENERIC_SPINLOCK
 
 config RWSEM_XCHGADD_ALGORITHM
        bool
+
+config GENERIC_HWEIGHT
+       bool
+       default y
 
 config GENERIC_CALIBRATE_DELAY
        bool
@@ -147,6 +151,11 @@ config X86_L1_CACHE_SHIFT
        int
        default "7" if GENERIC_CPU || MPSC
        default "6" if MK8
+
+config X86_INTERNODE_CACHE_BYTES
+       int
+       default "4096" if X86_VSMP
+       default X86_L1_CACHE_BYTES if !X86_VSMP
 
 config X86_TSC
        bool
@@ -271,6 +280,15 @@ config SCHED_SMT
          cost of slightly increased overhead in some places. If unsure say
          N here.
 
+config SCHED_MC
+       bool "Multi-core scheduler support"
+       depends on SMP
+       default y
+       help
+         Multi-core scheduler support improves the CPU scheduler's decision
+         making when dealing with multi-core CPU chips at a cost of slightly
+         increased overhead in some places. If unsure say N here.
+
 source "kernel/Kconfig.preempt"
 
 config NUMA
@@ -295,6 +313,11 @@ config K8_NUMA
         Northbridge of Opteron. It is recommended to use X86_64_ACPI_NUMA
         instead, which also takes priority if both are compiled in.   
 
+config NODES_SHIFT
+       int
+       default "6"
+       depends on NEED_MULTIPLE_NODES
+
 # Dummy CONFIG option to select ACPI_NUMA from drivers/acpi/Kconfig.
 
 config X86_64_ACPI_NUMA
@@ -346,9 +369,13 @@ config HAVE_ARCH_EARLY_PFN_TO_NID
        def_bool y
        depends on NUMA
 
+config OUT_OF_LINE_PFN_TO_PAGE
+       def_bool y
+       depends on DISCONTIGMEM
+
 config NR_CPUS
        int "Maximum number of CPUs (2-256)"
-       range 2 256
+       range 2 255
        depends on SMP
        default "16" if X86_64_XEN
        default "8"
@@ -368,8 +395,6 @@ config HOTPLUG_CPU
                can be controlled through /sys/devices/system/cpu/cpu#.
                Say N if you want to disable CPU hotplug.
 
-config ARCH_ENABLE_MEMORY_HOTPLUG
-       def_bool y
 
 config HPET_TIMER
        bool
@@ -393,13 +418,15 @@ config GART_IOMMU
        select SWIOTLB
        depends on PCI && !X86_64_XEN
        help
-         Support the IOMMU. Needed to run systems with more than 3GB of memory
-         properly with 32-bit PCI devices that do not support DAC (Double 
Address
-         Cycle). The IOMMU can be turned off at runtime with the iommu=off 
parameter.
-         Normally the kernel will take the right choice by itself.
-         This option includes a driver for the AMD Opteron/Athlon64 
northbridge IOMMU
-         and a software emulation used on other systems.
-         If unsure, say Y.
+         Support for hardware IOMMU in AMD's Opteron/Athlon64 Processors
+         and for the bounce buffering software IOMMU.
+         Needed to run systems with more than 3GB of memory properly with
+         32-bit PCI devices that do not support DAC (Double Address Cycle).
+         The IOMMU can be turned off at runtime with the iommu=off parameter.
+         Normally the kernel will take the right choice by itself.
+         This option includes a driver for the AMD Opteron/Athlon64 IOMMU
+         northbridge and a software emulation used on other systems without
+         hardware IOMMU.  If unsure, say Y.
 
 # need this always enabled with GART_IOMMU for the VIA workaround
 config SWIOTLB
@@ -459,10 +486,10 @@ config PHYSICAL_START
 config PHYSICAL_START
        hex "Physical address where the kernel is loaded" if (EMBEDDED || 
CRASH_DUMP)
        default "0x1000000" if CRASH_DUMP
-       default "0x100000"
+       default "0x200000"
        help
          This gives the physical address where the kernel is loaded. Normally
-         for regular kernels this value is 0x100000 (1MB). But in the case
+         for regular kernels this value is 0x200000 (2MB). But in the case
          of kexec on panic the fail safe kernel needs to run at a different
          address than the panic-ed kernel. This option is used to set the load
          address for kernels used to capture crash dump on being kexec'ed
@@ -494,6 +521,14 @@ config SECCOMP
 
 source kernel/Kconfig.hz
 
+config REORDER
+       bool "Function reordering"
+       default n
+       help
+         This option enables the toolchain to reorder functions for a more 
+         optimal TLB usage. If you have pretty much any version of binutils, 
+        this can increase your kernel build time by roughly one minute.
+
 endmenu
 
 #
@@ -559,16 +594,6 @@ config XEN_PCIDEV_FE_DEBUG
        default n
        help
          Enables some debug statements within the PCI Frontend.
-
-config UNORDERED_IO
-       bool "Unordered IO mapping access"
-       depends on EXPERIMENTAL
-       help
-         Use unordered stores to access IO memory mappings in device drivers.
-        Still very experimental. When a driver works on IA64/ppc64/pa-risc it 
should
-        work with this option, but it makes the drivers behave differently
-        from i386. Requires that the driver writer used memory barriers
-        properly.
 
 source "drivers/pci/pcie/Kconfig"
 
diff -r 6d6a4d5801bd -r 4fad820a2233 linux-2.6-xen-sparse/arch/x86_64/Makefile
--- a/linux-2.6-xen-sparse/arch/x86_64/Makefile Tue Jan 09 10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/Makefile Fri Jan 12 14:30:49 2007 +0000
@@ -24,39 +24,41 @@ LDFLAGS             := -m elf_x86_64
 LDFLAGS                := -m elf_x86_64
 OBJCOPYFLAGS   := -O binary -R .note -R .comment -S
 LDFLAGS_vmlinux :=
-
 CHECKFLAGS      += -D__x86_64__ -m64
 
+cflags-y       :=
 cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8)
 cflags-$(CONFIG_MPSC) += $(call cc-option,-march=nocona)
-CFLAGS += $(cflags-y)
+cflags-$(CONFIG_GENERIC_CPU) += $(call cc-option,-mtune=generic)
 
 cppflags-$(CONFIG_XEN) += \
        -D__XEN_INTERFACE_VERSION__=$(CONFIG_XEN_INTERFACE_VERSION)
 CPPFLAGS += $(cppflags-y)
 
-CFLAGS += -m64
-CFLAGS += -mno-red-zone
-CFLAGS += -mcmodel=kernel
-CFLAGS += -pipe
+cflags-y += -m64
+cflags-y += -mno-red-zone
+cflags-y += -mcmodel=kernel
+cflags-y += -pipe
+cflags-$(CONFIG_REORDER) += -ffunction-sections
 # this makes reading assembly source easier, but produces worse code
 # actually it makes the kernel smaller too.
-CFLAGS += -fno-reorder-blocks  
-CFLAGS += -Wno-sign-compare
+cflags-y += -fno-reorder-blocks
+cflags-y += -Wno-sign-compare
 ifneq ($(CONFIG_UNWIND_INFO),y)
-CFLAGS += -fno-asynchronous-unwind-tables
+cflags-y += -fno-asynchronous-unwind-tables
 endif
 ifneq ($(CONFIG_DEBUG_INFO),y)
 # -fweb shrinks the kernel a bit, but the difference is very small
 # it also messes up debugging, so don't use it for now.
-#CFLAGS += $(call cc-option,-fweb)
+#cflags-y += $(call cc-option,-fweb)
 endif
 # -funit-at-a-time shrinks the kernel .text considerably
 # unfortunately it makes reading oopses harder.
-CFLAGS += $(call cc-option,-funit-at-a-time)
+cflags-y += $(call cc-option,-funit-at-a-time)
 # prevent gcc from generating any FP code by mistake
-CFLAGS += $(call cc-option,-mno-sse -mno-mmx -mno-sse2 -mno-3dnow,)
+cflags-y += $(call cc-option,-mno-sse -mno-mmx -mno-sse2 -mno-3dnow,)
 
+CFLAGS += $(cflags-y)
 AFLAGS += -m64
 
 head-y := arch/x86_64/kernel/head.o arch/x86_64/kernel/head64.o 
arch/x86_64/kernel/init_task.o
@@ -71,8 +73,8 @@ drivers-$(CONFIG_OPROFILE)            += arch/x86_
 
 boot := arch/x86_64/boot
 
-.PHONY: bzImage bzlilo install archmrproper \
-       fdimage fdimage144 fdimage288 archclean
+PHONY += bzImage bzlilo install archmrproper \
+        fdimage fdimage144 fdimage288 isoimage archclean
 
 ifdef CONFIG_XEN
 CPPFLAGS := -Iinclude$(if $(KBUILD_SRC),2)/asm/mach-xen $(CPPFLAGS)
@@ -104,7 +106,7 @@ bzdisk: vmlinux
 bzdisk: vmlinux
        $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) zdisk
 
-fdimage fdimage144 fdimage288: vmlinux
+fdimage fdimage144 fdimage288 isoimage: vmlinux
        $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) $@
 
 install:
@@ -117,11 +119,16 @@ define archhelp
 define archhelp
   echo  '* bzImage     - Compressed kernel image (arch/$(ARCH)/boot/bzImage)'
   echo  '  install     - Install kernel using'
-  echo  '                  (your) ~/bin/installkernel or'
-  echo  '                  (distribution) /sbin/installkernel or'
-  echo  '                install to $$(INSTALL_PATH) and run lilo'
+  echo  '                 (your) ~/bin/installkernel or'
+  echo  '                 (distribution) /sbin/installkernel or'
+  echo  '                 install to $$(INSTALL_PATH) and run lilo'
+  echo  '  bzdisk       - Create a boot floppy in /dev/fd0'
+  echo  '  fdimage      - Create a boot floppy image'
+  echo  '  isoimage     - Create a boot CD-ROM image'
 endef
 
-CLEAN_FILES += arch/$(ARCH)/boot/fdimage arch/$(ARCH)/boot/mtools.conf
+CLEAN_FILES += arch/$(ARCH)/boot/fdimage \
+              arch/$(ARCH)/boot/image.iso \
+              arch/$(ARCH)/boot/mtools.conf
 
 
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/x86_64/ia32/ia32entry-xen.S
--- a/linux-2.6-xen-sparse/arch/x86_64/ia32/ia32entry-xen.S     Tue Jan 09 
10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/ia32/ia32entry-xen.S     Fri Jan 12 
14:30:49 2007 +0000
@@ -16,7 +16,9 @@
 #include <linux/linkage.h>
 
 #define __XEN_X86_64 1
-       
+
+#define IA32_NR_syscalls ((ia32_syscall_end - ia32_sys_call_table)/8)
+
        .macro IA32_ARG_FIXUP noebp=0
        movl    %edi,%r8d
        .if \noebp
@@ -127,8 +129,8 @@ 1:  movl    (%rbp),%r9d
        CFI_REMEMBER_STATE
        jnz  sysenter_tracesys
 sysenter_do_call:      
-       cmpl    $(IA32_NR_syscalls),%eax
-       jae     ia32_badsys
+       cmpl    $(IA32_NR_syscalls-1),%eax
+       ja      ia32_badsys
        IA32_ARG_FIXUP 1
        call    *ia32_sys_call_table(,%rax,8)
        movq    %rax,RAX-ARGOFFSET(%rsp)
@@ -231,8 +233,8 @@ 1:  movl    (%r8),%r9d
        CFI_REMEMBER_STATE
        jnz   cstar_tracesys
 cstar_do_call: 
-       cmpl $IA32_NR_syscalls,%eax
-       jae  ia32_badsys
+       cmpl $IA32_NR_syscalls-1,%eax
+       ja  ia32_badsys
        IA32_ARG_FIXUP 1
        call *ia32_sys_call_table(,%rax,8)
        movq %rax,RAX-ARGOFFSET(%rsp)
@@ -323,8 +325,8 @@ ENTRY(ia32_syscall)
        testl 
$(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%r10)
        jnz ia32_tracesys
 ia32_do_syscall:       
-       cmpl $(IA32_NR_syscalls),%eax
-       jae  ia32_badsys
+       cmpl $(IA32_NR_syscalls-1),%eax
+       ja  ia32_badsys
        IA32_ARG_FIXUP
        call *ia32_sys_call_table(,%rax,8) # xxx: rip relative
 ia32_sysret:
@@ -528,7 +530,7 @@ ia32_sys_call_table:
        .quad sys_setdomainname
        .quad sys_uname
        .quad sys_modify_ldt
-       .quad sys32_adjtimex
+       .quad compat_sys_adjtimex
        .quad sys32_mprotect            /* 125 */
        .quad compat_sys_sigprocmask
        .quad quiet_ni_syscall          /* create_module */
@@ -712,10 +714,13 @@ ia32_sys_call_table:
        .quad sys_readlinkat            /* 305 */
        .quad sys_fchmodat
        .quad sys_faccessat
-       .quad sys_ni_syscall            /* pselect6 for now */
-       .quad sys_ni_syscall            /* ppoll for now */
+       .quad quiet_ni_syscall          /* pselect6 for now */
+       .quad quiet_ni_syscall          /* ppoll for now */
        .quad sys_unshare               /* 310 */
+       .quad compat_sys_set_robust_list
+       .quad compat_sys_get_robust_list
+       .quad sys_splice
+       .quad sys_sync_file_range
+       .quad sys_tee
+       .quad compat_sys_vmsplice
 ia32_syscall_end:              
-       .rept IA32_NR_syscalls-(ia32_syscall_end-ia32_sys_call_table)/8
-               .quad ni_syscall
-       .endr
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/x86_64/ia32/vsyscall-sigreturn.S
--- a/linux-2.6-xen-sparse/arch/x86_64/ia32/vsyscall-sigreturn.S        Tue Jan 
09 10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/ia32/vsyscall-sigreturn.S        Fri Jan 
12 14:30:49 2007 +0000
@@ -32,9 +32,28 @@ __kernel_rt_sigreturn:
        .size __kernel_rt_sigreturn,.-.LSTART_rt_sigreturn
 
        .section .eh_frame,"a",@progbits
+.LSTARTFRAMES:
+        .long .LENDCIES-.LSTARTCIES
+.LSTARTCIES:
+       .long 0                 /* CIE ID */
+       .byte 1                 /* Version number */
+       .string "zRS"           /* NUL-terminated augmentation string */
+       .uleb128 1              /* Code alignment factor */
+       .sleb128 -4             /* Data alignment factor */
+       .byte 8                 /* Return address register column */
+       .uleb128 1              /* Augmentation value length */
+       .byte 0x1b              /* DW_EH_PE_pcrel|DW_EH_PE_sdata4. */
+       .byte 0x0c              /* DW_CFA_def_cfa */
+       .uleb128 4
+       .uleb128 4
+       .byte 0x88              /* DW_CFA_offset, column 0x8 */
+       .uleb128 1
+       .align 4
+.LENDCIES:
+
        .long .LENDFDE2-.LSTARTFDE2     /* Length FDE */
 .LSTARTFDE2:
-       .long .LSTARTFDE2-.LSTARTFRAME  /* CIE pointer */
+       .long .LSTARTFDE2-.LSTARTFRAMES /* CIE pointer */
        /* HACK: The dwarf2 unwind routines will subtract 1 from the
           return address to get an address in the middle of the
           presumed call instruction.  Since we didn't get here via
@@ -97,7 +116,7 @@ 1:
 
        .long .LENDFDE3-.LSTARTFDE3     /* Length FDE */
 .LSTARTFDE3:
-       .long .LSTARTFDE3-.LSTARTFRAME  /* CIE pointer */
+       .long .LSTARTFDE3-.LSTARTFRAMES /* CIE pointer */
        /* HACK: See above wrt unwind library assumptions.  */
        .long .LSTART_rt_sigreturn-1-.  /* PC-relative start address */
        .long .LEND_rt_sigreturn-.LSTART_rt_sigreturn+1
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/x86_64/kernel/Makefile
--- a/linux-2.6-xen-sparse/arch/x86_64/kernel/Makefile  Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/Makefile  Fri Jan 12 14:30:49 
2007 +0000
@@ -8,7 +8,7 @@ obj-y   := process.o signal.o entry.o trap
                ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_x86_64.o \
                x8664_ksyms.o i387.o syscall.o vsyscall.o \
                setup64.o bootflag.o e820.o reboot.o quirks.o i8237.o \
-               dmi_scan.o pci-dma.o pci-nommu.o
+               pci-dma.o pci-nommu.o
 
 obj-$(CONFIG_X86_MCE)         += mce.o
 obj-$(CONFIG_X86_MCE_INTEL)    += mce_intel.o
@@ -47,11 +47,10 @@ cpuid-$(subst m,y,$(CONFIG_X86_CPUID))  
 cpuid-$(subst m,y,$(CONFIG_X86_CPUID))  += ../../i386/kernel/cpuid.o
 topology-y                     += ../../i386/kernel/topology.o
 microcode-$(subst m,y,$(CONFIG_MICROCODE))  += ../../i386/kernel/microcode.o
-intel_cacheinfo-y              += ../../i386/kernel/cpu/intel_cacheinfo.o
+intel_cacheinfo-y              += ../../i386/kernel/cpu/intel_cacheinfo-xen.o
 quirks-y                       += ../../i386/kernel/quirks.o
 i8237-y                                += ../../i386/kernel/i8237.o
 msr-$(subst m,y,$(CONFIG_X86_MSR))  += ../../i386/kernel/msr.o
-dmi_scan-y                     += ../../i386/kernel/dmi_scan.o
 
 ifdef CONFIG_XEN
 time-y                         += ../../i386/kernel/time-xen.o
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/x86_64/kernel/acpi/Makefile
--- a/linux-2.6-xen-sparse/arch/x86_64/kernel/acpi/Makefile     Tue Jan 09 
10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/acpi/Makefile     Fri Jan 12 
14:30:49 2007 +0000
@@ -4,7 +4,6 @@ obj-$(CONFIG_ACPI_SLEEP)        += sleep.o wake
 
 ifneq ($(CONFIG_ACPI_PROCESSOR),)
 obj-y                  += processor.o
-processor-y            := ../../../i386/kernel/acpi/processor.o 
../../../i386/kernel/acpi/cstate.o
 endif
 
 boot-$(CONFIG_XEN)             := ../../../i386/kernel/acpi/boot-xen.o
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/x86_64/kernel/apic-xen.c
--- a/linux-2.6-xen-sparse/arch/x86_64/kernel/apic-xen.c        Tue Jan 09 
10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/apic-xen.c        Fri Jan 12 
14:30:49 2007 +0000
@@ -194,5 +194,5 @@ int __init APIC_init_uniprocessor (void)
                        setup_IO_APIC();
 #endif
 
-       return 0;
+       return 1;
 }
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/x86_64/kernel/e820-xen.c
--- a/linux-2.6-xen-sparse/arch/x86_64/kernel/e820-xen.c        Tue Jan 09 
10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/e820-xen.c        Fri Jan 12 
14:30:49 2007 +0000
@@ -78,6 +78,12 @@ static inline int bad_addr(unsigned long
                *addrp = __pa_symbol(&_end);
                return 1;
        }
+
+       if (last >= ebda_addr && addr < ebda_addr + ebda_size) {
+               *addrp = ebda_addr + ebda_size;
+               return 1;
+       }
+
        /* XXX ramdisk image here? */ 
 #else
        if (last < (table_end<<PAGE_SHIFT)) {
@@ -89,7 +95,12 @@ static inline int bad_addr(unsigned long
 } 
 
 #ifndef CONFIG_XEN
-int __init e820_mapped(unsigned long start, unsigned long end, unsigned type) 
+/*
+ * This function checks if any part of the range <start,end> is mapped
+ * with type.
+ */
+int __meminit
+e820_any_mapped(unsigned long start, unsigned long end, unsigned type)
 { 
        int i;
        for (i = 0; i < e820.nr_map; i++) { 
@@ -103,6 +114,35 @@ int __init e820_mapped(unsigned long sta
        return 0;
 }
 #endif
+
+/*
+ * This function checks if the entire range <start,end> is mapped with type.
+ *
+ * Note: this function only works correct if the e820 table is sorted and
+ * not-overlapping, which is the case
+ */
+int __init e820_all_mapped(unsigned long start, unsigned long end, unsigned 
type)
+{
+       int i;
+       for (i = 0; i < e820.nr_map; i++) {
+               struct e820entry *ei = &e820.map[i];
+               if (type && ei->type != type)
+                       continue;
+               /* is the region (part) in overlap with the current region ?*/
+               if (ei->addr >= end || ei->addr + ei->size <= start)
+                       continue;
+
+               /* if the region is at the beginning of <start,end> we move
+                * start to the end of the region since it's ok until there
+                */
+               if (ei->addr <= start)
+                       start = ei->addr + ei->size;
+               /* if start is now at or beyond end, we're done, full coverage 
*/
+               if (start >= end)
+                       return 1; /* we're done */
+       }
+       return 0;
+}
 
 /* 
  * Find a free area in a specific range. 
@@ -119,7 +159,7 @@ unsigned long __init find_e820_area(unsi
                        addr = start;
                if (addr > ei->addr + ei->size) 
                        continue; 
-               while (bad_addr(&addr, size) && addr+size < ei->addr + ei->size)
+               while (bad_addr(&addr, size) && addr+size <= ei->addr+ei->size)
                        ;
                last = addr + size;
                if (last > ei->addr + ei->size)
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/x86_64/kernel/early_printk-xen.c
--- a/linux-2.6-xen-sparse/arch/x86_64/kernel/early_printk-xen.c        Tue Jan 
09 10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/early_printk-xen.c        Fri Jan 
12 14:30:49 2007 +0000
@@ -18,13 +18,10 @@
 #define VGABASE                ((void __iomem *)0xffffffff800b8000UL)
 #endif
 
-#define MAX_YPOS       max_ypos
-#define MAX_XPOS       max_xpos
-
 static int max_ypos = 25, max_xpos = 80;
 
 #ifndef CONFIG_XEN
-static int current_ypos = 1, current_xpos = 0; 
+static int current_ypos = 25, current_xpos = 0; 
 
 static void early_vga_write(struct console *con, const char *str, unsigned n)
 {
@@ -32,26 +29,26 @@ static void early_vga_write(struct conso
        int  i, k, j;
 
        while ((c = *str++) != '\0' && n-- > 0) {
-               if (current_ypos >= MAX_YPOS) {
+               if (current_ypos >= max_ypos) {
                        /* scroll 1 line up */
-                       for (k = 1, j = 0; k < MAX_YPOS; k++, j++) {
-                               for (i = 0; i < MAX_XPOS; i++) {
-                                       writew(readw(VGABASE + 2*(MAX_XPOS*k + 
i)),
-                                              VGABASE + 2*(MAX_XPOS*j + i));
+                       for (k = 1, j = 0; k < max_ypos; k++, j++) {
+                               for (i = 0; i < max_xpos; i++) {
+                                       writew(readw(VGABASE+2*(max_xpos*k+i)),
+                                              VGABASE + 2*(max_xpos*j + i));
                                }
                        }
-                       for (i = 0; i < MAX_XPOS; i++)
-                               writew(0x720, VGABASE + 2*(MAX_XPOS*j + i));
-                       current_ypos = MAX_YPOS-1;
+                       for (i = 0; i < max_xpos; i++)
+                               writew(0x720, VGABASE + 2*(max_xpos*j + i));
+                       current_ypos = max_ypos-1;
                }
                if (c == '\n') {
                        current_xpos = 0;
                        current_ypos++;
                } else if (c != '\r')  {
                        writew(((0x7 << 8) | (unsigned short) c),
-                              VGABASE + 2*(MAX_XPOS*current_ypos +
+                              VGABASE + 2*(max_xpos*current_ypos +
                                                current_xpos++));
-                       if (current_xpos >= MAX_XPOS) {
+                       if (current_xpos >= max_xpos) {
                                current_xpos = 0;
                                current_ypos++;
                        }
@@ -66,7 +63,7 @@ static struct console early_vga_console 
        .index =        -1,
 };
 
-/* Serial functions loosely based on a similar package from Klaus P. Gerlicher 
*/ 
+/* Serial functions loosely based on a similar package from Klaus P. Gerlicher 
*/
 
 static int early_serial_base = 0x3f8;  /* ttyS0 */
 
@@ -86,30 +83,30 @@ static int early_serial_base = 0x3f8;  /
 #define DLL             0       /*  Divisor Latch Low         */
 #define DLH             1       /*  Divisor latch High        */
 
-static int early_serial_putc(unsigned char ch) 
-{ 
-       unsigned timeout = 0xffff; 
-       while ((inb(early_serial_base + LSR) & XMTRDY) == 0 && --timeout) 
+static int early_serial_putc(unsigned char ch)
+{
+       unsigned timeout = 0xffff;
+       while ((inb(early_serial_base + LSR) & XMTRDY) == 0 && --timeout)
                cpu_relax();
        outb(ch, early_serial_base + TXR);
        return timeout ? 0 : -1;
-} 
+}
 
 static void early_serial_write(struct console *con, const char *s, unsigned n)
 {
-       while (*s && n-- > 0) { 
-               early_serial_putc(*s); 
-               if (*s == '\n') 
-                       early_serial_putc('\r'); 
-               s++; 
-       } 
-} 
+       while (*s && n-- > 0) {
+               early_serial_putc(*s);
+               if (*s == '\n')
+                       early_serial_putc('\r');
+               s++;
+       }
+}
 
 #define DEFAULT_BAUD 9600
 
 static __init void early_serial_init(char *s)
 {
-       unsigned char c; 
+       unsigned char c;
        unsigned divisor;
        unsigned baud = DEFAULT_BAUD;
        char *e;
@@ -118,7 +115,7 @@ static __init void early_serial_init(cha
                ++s;
 
        if (*s) {
-               unsigned port; 
+               unsigned port;
                if (!strncmp(s,"0x",2)) {
                        early_serial_base = simple_strtoul(s, &e, 16);
                } else {
@@ -142,16 +139,16 @@ static __init void early_serial_init(cha
        outb(0x3, early_serial_base + MCR);     /* DTR + RTS */
 
        if (*s) {
-               baud = simple_strtoul(s, &e, 0); 
-               if (baud == 0 || s == e) 
+               baud = simple_strtoul(s, &e, 0);
+               if (baud == 0 || s == e)
                        baud = DEFAULT_BAUD;
-       } 
-       
-       divisor = 115200 / baud; 
-       c = inb(early_serial_base + LCR); 
-       outb(c | DLAB, early_serial_base + LCR); 
-       outb(divisor & 0xff, early_serial_base + DLL); 
-       outb((divisor >> 8) & 0xff, early_serial_base + DLH); 
+       }
+
+       divisor = 115200 / baud;
+       c = inb(early_serial_base + LCR);
+       outb(c | DLAB, early_serial_base + LCR);
+       outb(divisor & 0xff, early_serial_base + DLL);
+       outb((divisor >> 8) & 0xff, early_serial_base + DLH);
        outb(c & ~DLAB, early_serial_base + LCR);
 }
 
@@ -240,67 +237,70 @@ static int early_console_initialized = 0
 static int early_console_initialized = 0;
 
 void early_printk(const char *fmt, ...)
-{ 
-       char buf[512]; 
-       int n; 
+{
+       char buf[512];
+       int n;
        va_list ap;
 
-       va_start(ap,fmt); 
+       va_start(ap,fmt);
        n = vscnprintf(buf,512,fmt,ap);
        early_console->write(early_console,buf,n);
-       va_end(ap); 
-} 
+       va_end(ap);
+}
 
 static int __initdata keep_early;
 
-int __init setup_early_printk(char *opt) 
-{  
+int __init setup_early_printk(char *opt)
+{
        char *space;
-       char buf[256]; 
+       char buf[256];
 
        if (early_console_initialized)
-               return -1;
-
-       strlcpy(buf,opt,sizeof(buf)); 
-       space = strchr(buf, ' '); 
+               return 1;
+
+       strlcpy(buf,opt,sizeof(buf));
+       space = strchr(buf, ' ');
        if (space)
-               *space = 0; 
+               *space = 0;
 
        if (strstr(buf,"keep"))
-               keep_early = 1; 
-
-       if (!strncmp(buf, "serial", 6)) { 
+               keep_early = 1;
+
+       if (!strncmp(buf, "serial", 6)) {
                early_serial_init(buf + 6);
                early_console = &early_serial_console;
-       } else if (!strncmp(buf, "ttyS", 4)) { 
+       } else if (!strncmp(buf, "ttyS", 4)) {
                early_serial_init(buf);
-               early_console = &early_serial_console;          
+               early_console = &early_serial_console;
        } else if (!strncmp(buf, "vga", 3)
                   && SCREEN_INFO.orig_video_isVGA == 1) {
                max_xpos = SCREEN_INFO.orig_video_cols;
                max_ypos = SCREEN_INFO.orig_video_lines;
-               early_console = &early_vga_console; 
+#ifndef CONFIG_XEN
+               current_ypos = SCREEN_INFO.orig_y;
+#endif
+               early_console = &early_vga_console;
        } else if (!strncmp(buf, "simnow", 6)) {
                simnow_init(buf + 6);
                early_console = &simnow_console;
                keep_early = 1;
        }
        early_console_initialized = 1;
-       register_console(early_console);       
+       register_console(early_console);
        return 0;
 }
 
 void __init disable_early_printk(void)
-{ 
+{
        if (!early_console_initialized || !early_console)
                return;
        if (!keep_early) {
                printk("disabling early console\n");
                unregister_console(early_console);
                early_console_initialized = 0;
-       } else { 
+       } else {
                printk("keeping early console\n");
        }
-} 
+}
 
 __setup("earlyprintk=", setup_early_printk);
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/x86_64/kernel/entry-xen.S
--- a/linux-2.6-xen-sparse/arch/x86_64/kernel/entry-xen.S       Tue Jan 09 
10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/entry-xen.S       Fri Jan 12 
14:30:49 2007 +0000
@@ -868,7 +868,7 @@ ENTRY(failsafe_callback)
        movq (%rsp),%rcx
        movq 8(%rsp),%r11
        addq $0x30,%rsp
-       movq $-9999,%rdi        /* better code? */
+       movq $11,%rdi   /* SIGSEGV */
        jmp do_exit                     
 1:     /* Segment mismatch => Category 1 (Bad segment). Retry the IRET. */
        movq (%rsp),%rcx
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/x86_64/kernel/head-xen.S
--- a/linux-2.6-xen-sparse/arch/x86_64/kernel/head-xen.S        Tue Jan 09 
10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/head-xen.S        Fri Jan 12 
14:30:49 2007 +0000
@@ -79,9 +79,6 @@ NEXT_PAGE(level2_kernel_pgt)
 NEXT_PAGE(level2_kernel_pgt)
        .fill   512,8,0
 
-NEXT_PAGE(empty_zero_page)
-       .skip PAGE_SIZE
-
 NEXT_PAGE(hypercall_page)
        .fill   512,8,0
 
@@ -92,7 +89,7 @@ NEXT_PAGE(hypercall_page)
        .align 16
        .globl cpu_gdt_descr
 cpu_gdt_descr:
-       .word   gdt_end-cpu_gdt_table
+       .word   gdt_end-cpu_gdt_table-1
 gdt:
        .quad   cpu_gdt_table
 #ifdef CONFIG_SMP
@@ -133,6 +130,11 @@ gdt_end:
 
        /* zero the remaining page */
        .fill PAGE_SIZE / 8 - GDT_ENTRIES,8,0
+
+       .section .bss.page_aligned, "aw", @nobits
+       .align PAGE_SIZE
+ENTRY(empty_zero_page)
+       .skip PAGE_SIZE
 
 #ifdef CONFIG_XEN_COMPAT_030002
 /*
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/x86_64/kernel/io_apic-xen.c
--- a/linux-2.6-xen-sparse/arch/x86_64/kernel/io_apic-xen.c     Tue Jan 09 
10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/io_apic-xen.c     Fri Jan 12 
14:30:49 2007 +0000
@@ -51,7 +51,7 @@ int disable_timer_pin_1 __initdata;
 int disable_timer_pin_1 __initdata;
 
 #ifndef CONFIG_XEN
-int timer_over_8254 __initdata = 1;
+int timer_over_8254 __initdata = 0;
 
 /* Where if anywhere is the i8259 connect in external int mode */
 static struct { int pin, apic; } ioapic_i8259 = { -1, -1 };
@@ -321,6 +321,18 @@ __setup("enable_8254_timer", setup_enabl
 #include <linux/pci_ids.h>
 #include <linux/pci.h>
 
+
+#ifdef CONFIG_ACPI
+
+static int nvidia_hpet_detected __initdata;
+
+static int __init nvidia_hpet_check(unsigned long phys, unsigned long size)
+{
+       nvidia_hpet_detected = 1;
+       return 0;
+}
+#endif
+
 /* Temporary Hack. Nvidia and VIA boards currently only work with IO-APIC
    off. Check for an Nvidia or VIA PCI bridge and turn it off.
    Use pci direct infrastructure because this runs before the PCI subsystem. 
@@ -360,18 +372,26 @@ void __init check_ioapic(void)
                                             force_iommu) &&
                                            !iommu_aperture_allowed) {
                                                printk(KERN_INFO
-    "Looks like a VIA chipset. Disabling IOMMU. Overwrite with 
\"iommu=allowed\"\n");
+    "Looks like a VIA chipset. Disabling IOMMU. Override with 
\"iommu=allowed\"\n");
                                                iommu_aperture_disabled = 1;
                                        }
 #endif
                                        return;
                                case PCI_VENDOR_ID_NVIDIA:
 #ifdef CONFIG_ACPI
-                                       /* All timer overrides on Nvidia
-                                          seem to be wrong. Skip them. */
-                                       acpi_skip_timer_override = 1;
-                                       printk(KERN_INFO 
-            "Nvidia board detected. Ignoring ACPI timer override.\n");
+                                       /*
+                                        * All timer overrides on Nvidia are
+                                        * wrong unless HPET is enabled.
+                                        */
+                                       nvidia_hpet_detected = 0;
+                                       acpi_table_parse(ACPI_HPET,
+                                                       nvidia_hpet_check);
+                                       if (nvidia_hpet_detected == 0) {
+                                               acpi_skip_timer_override = 1;
+                                               printk(KERN_INFO "Nvidia board "
+                                                   "detected. Ignoring ACPI "
+                                                   "timer override.\n");
+                                       }
 #endif
                                        /* RED-PEN skip them on mptables too? */
                                        return;
@@ -1849,6 +1869,8 @@ static inline void unlock_ExtINT_logic(v
        spin_unlock_irqrestore(&ioapic_lock, flags);
 }
 
+int timer_uses_ioapic_pin_0;
+
 /*
  * This code may look a bit paranoid, but it's supposed to cooperate with
  * a wide range of boards and BIOS bugs.  Fortunately only the timer IRQ
@@ -1885,6 +1907,9 @@ static inline void check_timer(void)
        apic1 = find_isa_irq_apic(0, mp_INT);
        pin2  = ioapic_i8259.pin;
        apic2 = ioapic_i8259.apic;
+
+       if (pin1 == 0)
+               timer_uses_ioapic_pin_0 = 1;
 
        apic_printk(APIC_VERBOSE,KERN_INFO "..TIMER: vector=0x%02X apic1=%d 
pin1=%d apic2=%d pin2=%d\n",
                vector, apic1, pin1, apic2, pin2);
@@ -1920,7 +1945,7 @@ static inline void check_timer(void)
                 */
                setup_ExtINT_IRQ0_pin(apic2, pin2, vector);
                if (timer_irq_works()) {
-                       printk("works.\n");
+                       apic_printk(APIC_VERBOSE," works.\n");
                        nmi_watchdog_default();
                        if (nmi_watchdog == NMI_IO_APIC) {
                                setup_nmi();
@@ -1932,7 +1957,7 @@ static inline void check_timer(void)
                 */
                clear_IO_APIC_pin(apic2, pin2);
        }
-       printk(" failed.\n");
+       apic_printk(APIC_VERBOSE," failed.\n");
 
        if (nmi_watchdog == NMI_IO_APIC) {
                printk(KERN_WARNING "timer doesn't work through the IO-APIC - 
disabling NMI Watchdog!\n");
@@ -1947,7 +1972,7 @@ static inline void check_timer(void)
        enable_8259A_irq(0);
 
        if (timer_irq_works()) {
-               apic_printk(APIC_QUIET, " works.\n");
+               apic_printk(APIC_VERBOSE," works.\n");
                return;
        }
        apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_FIXED | vector);
@@ -1970,6 +1995,7 @@ static inline void check_timer(void)
 }
 #else
 #define check_timer() ((void)0)
+int timer_uses_ioapic_pin_0 = 0;
 #endif /* !CONFIG_XEN */
 
 static int __init notimercheck(char *s)
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/x86_64/kernel/irq-xen.c
--- a/linux-2.6-xen-sparse/arch/x86_64/kernel/irq-xen.c Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/irq-xen.c Fri Jan 12 14:30:49 
2007 +0000
@@ -38,9 +38,8 @@ int show_interrupts(struct seq_file *p, 
 
        if (i == 0) {
                seq_printf(p, "           ");
-               for (j=0; j<NR_CPUS; j++)
-                       if (cpu_online(j))
-                               seq_printf(p, "CPU%d       ",j);
+               for_each_online_cpu(j)
+                       seq_printf(p, "CPU%d       ",j);
                seq_putc(p, '\n');
        }
 
@@ -53,10 +52,8 @@ int show_interrupts(struct seq_file *p, 
 #ifndef CONFIG_SMP
                seq_printf(p, "%10u ", kstat_irqs(i));
 #else
-               for (j=0; j<NR_CPUS; j++)
-                       if (cpu_online(j))
-                       seq_printf(p, "%10u ",
-                               kstat_cpu(j).irqs[i]);
+               for_each_online_cpu(j)
+                       seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
 #endif
                seq_printf(p, " %14s", irq_desc[i].handler->typename);
 
@@ -68,15 +65,13 @@ skip:
                spin_unlock_irqrestore(&irq_desc[i].lock, flags);
        } else if (i == NR_IRQS) {
                seq_printf(p, "NMI: ");
-               for (j = 0; j < NR_CPUS; j++)
-                       if (cpu_online(j))
-                               seq_printf(p, "%10u ", cpu_pda(j)->__nmi_count);
+               for_each_online_cpu(j)
+                       seq_printf(p, "%10u ", cpu_pda(j)->__nmi_count);
                seq_putc(p, '\n');
 #ifdef CONFIG_X86_LOCAL_APIC
                seq_printf(p, "LOC: ");
-               for (j = 0; j < NR_CPUS; j++)
-                       if (cpu_online(j))
-                               seq_printf(p, "%10u ", 
cpu_pda(j)->apic_timer_irqs);
+               for_each_online_cpu(j)
+                       seq_printf(p, "%10u ", cpu_pda(j)->apic_timer_irqs);
                seq_putc(p, '\n');
 #endif
                seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count));
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/x86_64/kernel/mpparse-xen.c
--- a/linux-2.6-xen-sparse/arch/x86_64/kernel/mpparse-xen.c     Tue Jan 09 
10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/mpparse-xen.c     Fri Jan 12 
14:30:49 2007 +0000
@@ -107,11 +107,11 @@ static int __init mpf_checksum(unsigned 
 }
 
 #ifndef CONFIG_XEN
-static void __init MP_processor_info (struct mpc_config_processor *m)
+static void __cpuinit MP_processor_info (struct mpc_config_processor *m)
 {
        int cpu;
        unsigned char ver;
-       static int found_bsp=0;
+       cpumask_t tmp_map;
 
        if (!(m->mpc_cpuflag & CPU_ENABLED)) {
                disabled_cpus++;
@@ -134,8 +134,10 @@ static void __init MP_processor_info (st
                return;
        }
 
-       cpu = num_processors++;
-       
+       num_processors++;
+       cpus_complement(tmp_map, cpu_present_map);
+       cpu = first_cpu(tmp_map);
+
 #if MAX_APICS < 255    
        if ((int)m->mpc_apicid > MAX_APICS) {
                printk(KERN_ERR "Processor #%d INVALID. (Max ID: %d).\n",
@@ -161,12 +163,7 @@ static void __init MP_processor_info (st
                 * entry is BSP, and so on.
                 */
                cpu = 0;
-
-               bios_cpu_apicid[0] = m->mpc_apicid;
-               x86_cpu_to_apicid[0] = m->mpc_apicid;
-               found_bsp = 1;
-       } else
-               cpu = num_processors - found_bsp;
+       }
        bios_cpu_apicid[cpu] = m->mpc_apicid;
        x86_cpu_to_apicid[cpu] = m->mpc_apicid;
 
@@ -697,7 +694,7 @@ void __init mp_register_lapic_address (
 }
 
 
-void __init mp_register_lapic (
+void __cpuinit mp_register_lapic (
        u8                      id, 
        u8                      enabled)
 {
@@ -981,7 +978,17 @@ int mp_register_gsi(u32 gsi, int trigger
                 */
                int irq = gsi;
                if (gsi < MAX_GSI_NUM) {
-                       if (gsi > 15)
+                       /*
+                        * Retain the VIA chipset work-around (gsi > 15), but
+                        * avoid a problem where the 8254 timer (IRQ0) is setup
+                        * via an override (so it's not on pin 0 of the ioapic),
+                        * and at the same time, the pin 0 interrupt is a PCI
+                        * type.  The gsi > 15 test could cause these two pins
+                        * to be shared as IRQ0, and they are not shareable.
+                        * So test for this condition, and if necessary, avoid
+                        * the pin collision.
+                        */
+                       if (gsi > 15 || (gsi == 0 && !timer_uses_ioapic_pin_0))
                                gsi = pci_irq++;
                        /*
                         * Don't assign IRQ used by ACPI SCI
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/x86_64/kernel/process-xen.c
--- a/linux-2.6-xen-sparse/arch/x86_64/kernel/process-xen.c     Tue Jan 09 
10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/process-xen.c     Fri Jan 12 
14:30:49 2007 +0000
@@ -38,8 +38,8 @@
 #include <linux/ptrace.h>
 #include <linux/utsname.h>
 #include <linux/random.h>
+#include <linux/notifier.h>
 #include <linux/kprobes.h>
-#include <linux/notifier.h>
 
 #include <asm/uaccess.h>
 #include <asm/pgtable.h>
@@ -75,24 +75,17 @@ void (*pm_idle)(void);
 void (*pm_idle)(void);
 static DEFINE_PER_CPU(unsigned int, cpu_idle_state);
 
-static struct notifier_block *idle_notifier;
-static DEFINE_SPINLOCK(idle_notifier_lock);
+static ATOMIC_NOTIFIER_HEAD(idle_notifier);
 
 void idle_notifier_register(struct notifier_block *n)
 {
-       unsigned long flags;
-       spin_lock_irqsave(&idle_notifier_lock, flags);
-       notifier_chain_register(&idle_notifier, n);
-       spin_unlock_irqrestore(&idle_notifier_lock, flags);
+       atomic_notifier_chain_register(&idle_notifier, n);
 }
 EXPORT_SYMBOL_GPL(idle_notifier_register);
 
 void idle_notifier_unregister(struct notifier_block *n)
 {
-       unsigned long flags;
-       spin_lock_irqsave(&idle_notifier_lock, flags);
-       notifier_chain_unregister(&idle_notifier, n);
-       spin_unlock_irqrestore(&idle_notifier_lock, flags);
+       atomic_notifier_chain_unregister(&idle_notifier, n);
 }
 EXPORT_SYMBOL(idle_notifier_unregister);
 
@@ -102,13 +95,13 @@ void enter_idle(void)
 void enter_idle(void)
 {
        __get_cpu_var(idle_state) = CPU_IDLE;
-       notifier_call_chain(&idle_notifier, IDLE_START, NULL);
+       atomic_notifier_call_chain(&idle_notifier, IDLE_START, NULL);
 }
 
 static void __exit_idle(void)
 {
        __get_cpu_var(idle_state) = CPU_NOT_IDLE;
-       notifier_call_chain(&idle_notifier, IDLE_END, NULL);
+       atomic_notifier_call_chain(&idle_notifier, IDLE_END, NULL);
 }
 
 /* Called from interrupts to signify idle end */
@@ -309,13 +302,6 @@ void exit_thread(void)
        struct task_struct *me = current;
        struct thread_struct *t = &me->thread;
 
-       /*
-        * Remove function-return probe instances associated with this task
-        * and put them back on the free list. Do not insert an exit probe for
-        * this function, it will be disabled by kprobe_flush_task if you do.
-        */
-       kprobe_flush_task(me);
-
        if (me->thread.io_bitmap_ptr) { 
 #ifndef CONFIG_X86_NO_TSS
                struct tss_struct *tss = &per_cpu(init_tss, get_cpu());
@@ -512,7 +498,7 @@ __switch_to(struct task_struct *prev_p, 
         * multicall to indicate FPU task switch, rather than
         * synchronously trapping to Xen.
         * This must be here to ensure both math_state_restore() and
-        * kernel_fpu_begin() work consistently.
+        * kernel_fpu_begin() work consistently. 
         * The AMD workaround requires it to be after DS reload, or
         * after DS has been cleared, which we do in __prepare_arch_switch.
         */
@@ -591,7 +577,7 @@ __switch_to(struct task_struct *prev_p, 
                HYPERVISOR_set_segment_base(SEGBASE_GS_USER, next->gs); 
 
        /* 
-        * Switch the PDA context.
+        * Switch the PDA and FPU contexts.
         */
        prev->userrsp = read_pda(oldrsp); 
        write_pda(oldrsp, next->userrsp); 
@@ -781,10 +767,16 @@ long do_arch_prctl(struct task_struct *t
        }
        case ARCH_GET_GS: { 
                unsigned long base;
+               unsigned gsindex;
                if (task->thread.gsindex == GS_TLS_SEL)
                        base = read_32bit_tls(task, GS_TLS);
-               else if (doit)
-                       rdmsrl(MSR_KERNEL_GS_BASE, base);
+               else if (doit) {
+                       asm("movl %%gs,%0" : "=r" (gsindex));
+                       if (gsindex)
+                               rdmsrl(MSR_KERNEL_GS_BASE, base);
+                       else
+                               base = task->thread.gs;
+               }
                else
                        base = task->thread.gs;
                ret = put_user(base, (unsigned long __user *)addr); 
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c
--- a/linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c       Tue Jan 09 
10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c       Fri Jan 12 
14:30:49 2007 +0000
@@ -46,6 +46,7 @@
 #include <linux/cpufreq.h>
 #include <linux/dmi.h>
 #include <linux/dma-mapping.h>
+#include <linux/ctype.h>
 
 #include <asm/mtrr.h>
 #include <asm/uaccess.h>
@@ -67,6 +68,7 @@
 #include <asm/swiotlb.h>
 #include <asm/sections.h>
 #include <asm/gart-mapping.h>
+#include <asm/dmi.h>
 #ifdef CONFIG_XEN
 #include <linux/percpu.h>
 #include <xen/interface/physdev.h>
@@ -136,6 +138,12 @@ int bootloader_type;
 int bootloader_type;
 
 unsigned long saved_video_mode;
+
+/* 
+ * Early DMI memory
+ */
+int dmi_alloc_index;
+char dmi_alloc_data[DMI_MAX_DATA];
 
 /*
  * Setup options
@@ -325,6 +333,13 @@ static void __init probe_roms(void)
        }
 }
 
+/* Check for full argument with no trailing characters */
+static int fullarg(char *p, char *arg)
+{
+       int l = strlen(arg);
+       return !memcmp(p, arg, l) && (p[l] == 0 || isspace(p[l]));
+}
+
 static __init void parse_cmdline_early (char ** cmdline_p)
 {
        char c = ' ', *to = command_line, *from = COMMAND_LINE;
@@ -348,10 +363,10 @@ static __init void parse_cmdline_early (
 #endif
 #ifdef CONFIG_ACPI
                /* "acpi=off" disables both ACPI table parsing and interpreter 
init */
-               if (!memcmp(from, "acpi=off", 8))
+               if (fullarg(from,"acpi=off"))
                        disable_acpi();
 
-               if (!memcmp(from, "acpi=force", 10)) { 
+               if (fullarg(from, "acpi=force")) { 
                        /* add later when we do DMI horrors: */
                        acpi_force = 1;
                        acpi_disabled = 0;
@@ -359,48 +374,45 @@ static __init void parse_cmdline_early (
 
                /* acpi=ht just means: do ACPI MADT parsing 
                   at bootup, but don't enable the full ACPI interpreter */
-               if (!memcmp(from, "acpi=ht", 7)) { 
+               if (fullarg(from, "acpi=ht")) { 
                        if (!acpi_force)
                                disable_acpi();
                        acpi_ht = 1; 
                }
-                else if (!memcmp(from, "pci=noacpi", 10)) 
+                else if (fullarg(from, "pci=noacpi")) 
                        acpi_disable_pci();
-               else if (!memcmp(from, "acpi=noirq", 10))
+               else if (fullarg(from, "acpi=noirq"))
                        acpi_noirq_set();
 
-               else if (!memcmp(from, "acpi_sci=edge", 13))
+               else if (fullarg(from, "acpi_sci=edge"))
                        acpi_sci_flags.trigger =  1;
-               else if (!memcmp(from, "acpi_sci=level", 14))
+               else if (fullarg(from, "acpi_sci=level"))
                        acpi_sci_flags.trigger = 3;
-               else if (!memcmp(from, "acpi_sci=high", 13))
+               else if (fullarg(from, "acpi_sci=high"))
                        acpi_sci_flags.polarity = 1;
-               else if (!memcmp(from, "acpi_sci=low", 12))
+               else if (fullarg(from, "acpi_sci=low"))
                        acpi_sci_flags.polarity = 3;
 
                /* acpi=strict disables out-of-spec workarounds */
-               else if (!memcmp(from, "acpi=strict", 11)) {
+               else if (fullarg(from, "acpi=strict")) {
                        acpi_strict = 1;
                }
 #ifdef CONFIG_X86_IO_APIC
-               else if (!memcmp(from, "acpi_skip_timer_override", 24))
+               else if (fullarg(from, "acpi_skip_timer_override"))
                        acpi_skip_timer_override = 1;
 #endif
 #endif
 
 #ifndef CONFIG_XEN
-               if (!memcmp(from, "nolapic", 7) ||
-                   !memcmp(from, "disableapic", 11))
+               if (fullarg(from, "nolapic") || fullarg(from, "disableapic")) {
+                       clear_bit(X86_FEATURE_APIC, 
boot_cpu_data.x86_capability);
                        disable_apic = 1;
-
-               /* Don't confuse with noapictimer */
-               if (!memcmp(from, "noapic", 6) &&
-                       (from[6] == ' ' || from[6] == 0))
+               }
+
+               if (fullarg(from, "noapic"))
                        skip_ioapic_setup = 1;
 
-               /* Make sure to not confuse with apic= */
-               if (!memcmp(from, "apic", 4) &&
-                       (from[4] == ' ' || from[4] == 0)) {
+               if (fullarg(from,"apic")) {
                        skip_ioapic_setup = 0;
                        ioapic_force = 1;
                }
@@ -440,7 +452,7 @@ static __init void parse_cmdline_early (
                        iommu_setup(from+6); 
                }
 
-               if (!memcmp(from,"oops=panic", 10))
+               if (fullarg(from,"oops=panic"))
                        panic_on_oops = 1;
 
                if (!memcmp(from, "noexec=", 7))
@@ -591,7 +603,7 @@ static int __init noreplacement_setup(ch
 static int __init noreplacement_setup(char *s)
 { 
      no_replacement = 1; 
-     return 0; 
+     return 1;
 } 
 
 __setup("noreplacement", noreplacement_setup); 
@@ -621,17 +633,28 @@ static inline void copy_edd(void)
 
 #ifndef CONFIG_XEN
 #define EBDA_ADDR_POINTER 0x40E
-static void __init reserve_ebda_region(void)
-{
-       unsigned int addr;
-       /** 
+
+unsigned __initdata ebda_addr;
+unsigned __initdata ebda_size;
+
+static void discover_ebda(void)
+{
+       /*
         * there is a real-mode segmented pointer pointing to the 
         * 4K EBDA area at 0x40E
         */
-       addr = *(unsigned short *)phys_to_virt(EBDA_ADDR_POINTER);
-       addr <<= 4;
-       if (addr)
-               reserve_bootmem_generic(addr, PAGE_SIZE);
+       ebda_addr = *(unsigned short *)EBDA_ADDR_POINTER;
+       ebda_addr <<= 4;
+
+       ebda_size = *(unsigned short *)(unsigned long)ebda_addr;
+
+       /* Round EBDA up to pages */
+       if (ebda_size == 0)
+               ebda_size = 1;
+       ebda_size <<= 10;
+       ebda_size = round_up(ebda_size + (ebda_addr & ~PAGE_MASK), PAGE_SIZE);
+       if (ebda_size > 64*1024)
+               ebda_size = 64*1024;
 }
 #endif
 
@@ -642,7 +665,7 @@ void __init setup_arch(char **cmdline_p)
 
 #ifdef CONFIG_XEN
        /* Register a call for panic conditions. */
-       notifier_chain_register(&panic_notifier_list, &xen_panic_block);
+       atomic_notifier_chain_register(&panic_notifier_list, &xen_panic_block);
 
        ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); 
        kernel_end = 0;         /* dummy */
@@ -726,10 +749,17 @@ void __init setup_arch(char **cmdline_p)
         * we are rounding upwards:
         */
        end_pfn = e820_end_of_ram();
+       num_physpages = end_pfn;                /* for pfn_valid */
 
        check_efer();
 
+#ifndef CONFIG_XEN
+       discover_ebda();
+#endif
+
        init_memory_mapping(0, (end_pfn_map << PAGE_SHIFT));
+
+       /* dmi_scan_machine(); */
 
 #ifdef CONFIG_ACPI_NUMA
        /*
@@ -763,7 +793,8 @@ void __init setup_arch(char **cmdline_p)
        reserve_bootmem_generic(0, PAGE_SIZE);
 
        /* reserve ebda region */
-       reserve_ebda_region();
+       if (ebda_addr)
+               reserve_bootmem_generic(ebda_addr, ebda_size);
 #endif
 
 #ifdef CONFIG_SMP
@@ -898,6 +929,12 @@ void __init setup_arch(char **cmdline_p)
 
        zap_low_mappings(0);
 
+       /*
+        * set this early, so we dont allocate cpu0
+        * if MADT list doesnt list BSP first
+        * mpparse.c/MP_processor_info() allocates logical cpu numbers.
+        */
+       cpu_set(0, cpu_present_map);
 #ifdef CONFIG_ACPI
        /*
         * Initialize the ACPI boot-time table parser (gets the RSDP and SDT).
@@ -1092,7 +1129,7 @@ static void __init amd_detect_cmp(struct
        unsigned bits;
 #ifdef CONFIG_NUMA
        int node = 0;
-       unsigned apicid = phys_proc_id[cpu];
+       unsigned apicid = hard_smp_processor_id();
 #endif
 
        bits = 0;
@@ -1102,7 +1139,7 @@ static void __init amd_detect_cmp(struct
        /* Low order bits define the core id (index of core in socket) */
        cpu_core_id[cpu] = phys_proc_id[cpu] & ((1 << bits)-1);
        /* Convert the APIC ID into the socket ID */
-       phys_proc_id[cpu] >>= bits;
+       phys_proc_id[cpu] = phys_pkg_id(bits);
 
 #ifdef CONFIG_NUMA
        node = phys_proc_id[cpu];
@@ -1128,8 +1165,8 @@ static void __init amd_detect_cmp(struct
        }
        numa_set_node(cpu, node);
 
-       printk(KERN_INFO "CPU %d(%d) -> Node %d -> Core %d\n",
-                       cpu, c->x86_max_cores, node, cpu_core_id[cpu]);
+       printk(KERN_INFO "CPU %d/%x(%d) -> Node %d -> Core %d\n",
+                       cpu, apicid, c->x86_max_cores, node, cpu_core_id[cpu]);
 #endif
 #endif
 }
@@ -1187,8 +1224,6 @@ static int __init init_amd(struct cpuinf
 
        if (c->extended_cpuid_level >= 0x80000008) {
                c->x86_max_cores = (cpuid_ecx(0x80000008) & 0xff) + 1;
-               if (c->x86_max_cores & (c->x86_max_cores - 1))
-                       c->x86_max_cores = 1;
 
                amd_detect_cmp(c);
        }
@@ -1205,7 +1240,6 @@ static void __cpuinit detect_ht(struct c
 
        cpuid(1, &eax, &ebx, &ecx, &edx);
 
-       c->apicid = phys_pkg_id(0);
 
        if (!cpu_has(c, X86_FEATURE_HT) || cpu_has(c, X86_FEATURE_CMP_LEGACY))
                return;
@@ -1275,7 +1309,7 @@ static void srat_detect_node(void)
           for now. */
        node = apicid_to_node[hard_smp_processor_id()];
        if (node == NUMA_NO_NODE)
-               node = 0;
+               node = first_node(node_online_map);
        numa_set_node(cpu, node);
 
        if (acpi_numa > 0)
@@ -1414,6 +1448,10 @@ void __cpuinit identify_cpu(struct cpuin
                        c->x86_capability[2] = cpuid_edx(0x80860001);
        }
 
+#ifdef CONFIG_X86_XEN_GENAPIC
+       c->apicid = phys_pkg_id(0);
+#endif
+
        /*
         * Vendor-specific initialization.  In this section we
         * canonicalize the feature flags, meaning if there are
@@ -1521,7 +1559,7 @@ static int show_cpuinfo(struct seq_file 
                NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 
                /* Intel-defined (#2) */
-               "pni", NULL, NULL, "monitor", "ds_cpl", "vmx", NULL, "est",
+               "pni", NULL, NULL, "monitor", "ds_cpl", "vmx", "smx", "est",
                "tm2", NULL, "cid", NULL, NULL, "cx16", "xtpr", NULL,
                NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
                NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
@@ -1604,8 +1642,7 @@ static int show_cpuinfo(struct seq_file 
        { 
                int i; 
                for ( i = 0 ; i < 32*NCAPINTS ; i++ )
-                       if ( test_bit(i, &c->x86_capability) &&
-                            x86_cap_flags[i] != NULL )
+                       if (cpu_has(c, i) && x86_cap_flags[i] != NULL)
                                seq_printf(m, " %s", x86_cap_flags[i]);
        }
                
@@ -1670,3 +1707,22 @@ static int __init run_dmi_scan(void)
 }
 core_initcall(run_dmi_scan);
 
+#ifdef CONFIG_INPUT_PCSPKR
+#include <linux/platform_device.h>
+static __init int add_pcspkr(void)
+{
+       struct platform_device *pd;
+       int ret;
+
+       pd = platform_device_alloc("pcspkr", -1);
+       if (!pd)
+               return -ENOMEM;
+
+       ret = platform_device_add(pd);
+       if (ret)
+               platform_device_put(pd);
+
+       return ret;
+}
+device_initcall(add_pcspkr);
+#endif
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/x86_64/kernel/setup64-xen.c
--- a/linux-2.6-xen-sparse/arch/x86_64/kernel/setup64-xen.c     Tue Jan 09 
10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/setup64-xen.c     Fri Jan 12 
14:30:49 2007 +0000
@@ -41,7 +41,7 @@ struct x8664_pda boot_cpu_pda[NR_CPUS] _
 struct x8664_pda boot_cpu_pda[NR_CPUS] __cacheline_aligned;
 
 #ifndef CONFIG_X86_NO_IDT
-struct desc_ptr idt_descr = { 256 * 16, (unsigned long) idt_table }; 
+struct desc_ptr idt_descr = { 256 * 16 - 1, (unsigned long) idt_table }; 
 #endif
 
 char boot_cpu_stack[IRQSTACKSIZE] 
__attribute__((section(".bss.page_aligned")));
@@ -64,11 +64,11 @@ int __init nonx_setup(char *str)
                do_not_nx = 1;
                __supported_pte_mask &= ~_PAGE_NX;
         }
-       return 0;
+       return 1;
 } 
 __setup("noexec=", nonx_setup);        /* parsed early actually */
 
-int force_personality32 = READ_IMPLIES_EXEC;
+int force_personality32 = 0; 
 
 /* noexec32=on|off
 Control non executable heap for 32bit processes.
@@ -83,7 +83,7 @@ static int __init nonx32_setup(char *str
                force_personality32 &= ~READ_IMPLIES_EXEC;
        else if (!strcmp(str, "off"))
                force_personality32 |= READ_IMPLIES_EXEC;
-       return 0;
+       return 1;
 }
 __setup("noexec32=", nonx32_setup);
 
@@ -311,7 +311,7 @@ void __cpuinit cpu_init (void)
                switch (v + 1) {
 #if DEBUG_STKSZ > EXCEPTION_STKSZ
                case DEBUG_STACK:
-                       cpu_pda[cpu].debugstack = (unsigned long)estacks;
+                       cpu_pda(cpu)->debugstack = (unsigned long)estacks;
                        estacks += DEBUG_STKSZ;
                        break;
 #endif
@@ -349,12 +349,12 @@ void __cpuinit cpu_init (void)
         * Clear all 6 debug registers:
         */
 
-       set_debug(0UL, 0);
-       set_debug(0UL, 1);
-       set_debug(0UL, 2);
-       set_debug(0UL, 3);
-       set_debug(0UL, 6);
-       set_debug(0UL, 7);
+       set_debugreg(0UL, 0);
+       set_debugreg(0UL, 1);
+       set_debugreg(0UL, 2);
+       set_debugreg(0UL, 3);
+       set_debugreg(0UL, 6);
+       set_debugreg(0UL, 7);
 
        fpu_init(); 
 }
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/x86_64/kernel/smp-xen.c
--- a/linux-2.6-xen-sparse/arch/x86_64/kernel/smp-xen.c Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/smp-xen.c Fri Jan 12 14:30:49 
2007 +0000
@@ -80,7 +80,7 @@ static inline void leave_mm(unsigned lon
 {
        if (read_pda(mmu_state) == TLBSTATE_OK)
                BUG();
-       clear_bit(cpu, &read_pda(active_mm)->cpu_vm_mask);
+       cpu_clear(cpu, read_pda(active_mm)->cpu_vm_mask);
        load_cr3(swapper_pg_dir);
 }
 
@@ -91,7 +91,7 @@ static inline void leave_mm(unsigned lon
  * [cpu0: the cpu that switches]
  * 1) switch_mm() either 1a) or 1b)
  * 1a) thread switch to a different mm
- * 1a1) clear_bit(cpu, &old_mm->cpu_vm_mask);
+ * 1a1) cpu_clear(cpu, old_mm->cpu_vm_mask);
  *     Stop ipi delivery for the old mm. This is not synchronized with
  *     the other cpus, but smp_invalidate_interrupt ignore flush ipis
  *     for the wrong mm, and in the worst case we perform a superfluous
@@ -101,7 +101,7 @@ static inline void leave_mm(unsigned lon
  *     was in lazy tlb mode.
  * 1a3) update cpu active_mm
  *     Now cpu0 accepts tlb flushes for the new mm.
- * 1a4) set_bit(cpu, &new_mm->cpu_vm_mask);
+ * 1a4) cpu_set(cpu, new_mm->cpu_vm_mask);
  *     Now the other cpus will send tlb flush ipis.
  * 1a4) change cr3.
  * 1b) thread switch without mm change
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/x86_64/kernel/traps-xen.c
--- a/linux-2.6-xen-sparse/arch/x86_64/kernel/traps-xen.c       Tue Jan 09 
10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/traps-xen.c       Fri Jan 12 
14:30:49 2007 +0000
@@ -48,10 +48,6 @@
 #include <asm/proto.h>
 #include <asm/nmi.h>
 
-#ifndef CONFIG_X86_NO_IDT
-extern struct gate_struct idt_table[256]; 
-#endif
-
 asmlinkage void divide_error(void);
 asmlinkage void debug(void);
 asmlinkage void nmi(void);
@@ -74,18 +70,20 @@ asmlinkage void machine_check(void);
 asmlinkage void machine_check(void);
 asmlinkage void spurious_interrupt_bug(void);
 
-struct notifier_block *die_chain;
-static DEFINE_SPINLOCK(die_notifier_lock);
+ATOMIC_NOTIFIER_HEAD(die_chain);
 
 int register_die_notifier(struct notifier_block *nb)
 {
-       int err = 0;
-       unsigned long flags;
-       spin_lock_irqsave(&die_notifier_lock, flags);
-       err = notifier_chain_register(&die_chain, nb);
-       spin_unlock_irqrestore(&die_notifier_lock, flags);
-       return err;
-}
+       vmalloc_sync_all();
+       return atomic_notifier_chain_register(&die_chain, nb);
+}
+EXPORT_SYMBOL(register_die_notifier);
+
+int unregister_die_notifier(struct notifier_block *nb)
+{
+       return atomic_notifier_chain_unregister(&die_chain, nb);
+}
+EXPORT_SYMBOL(unregister_die_notifier);
 
 static inline void conditional_sti(struct pt_regs *regs)
 {
@@ -104,6 +102,8 @@ static inline void preempt_conditional_c
 {
        if (regs->eflags & X86_EFLAGS_IF)
                local_irq_disable();
+       /* Make sure to not schedule here because we could be running
+          on an exception stack. */
        preempt_enable_no_resched();
 }
 
@@ -125,7 +125,7 @@ int printk_address(unsigned long address
        if (!modname) 
                modname = delim = "";           
         return printk("<%016lx>{%s%s%s%s%+ld}",
-                     address,delim,modname,delim,symname,offset); 
+                     address, delim, modname, delim, symname, offset); 
 } 
 #else
 int printk_address(unsigned long address)
@@ -339,13 +339,12 @@ void show_registers(struct pt_regs *regs
                show_stack(NULL, (unsigned long*)rsp);
 
                printk("\nCode: ");
-               if(regs->rip < PAGE_OFFSET)
+               if (regs->rip < PAGE_OFFSET)
                        goto bad;
 
-               for(i=0;i<20;i++)
-               {
+               for (i=0; i<20; i++) {
                        unsigned char c;
-                       if(__get_user(c, &((unsigned char*)regs->rip)[i])) {
+                       if (__get_user(c, &((unsigned char*)regs->rip)[i])) {
 bad:
                                printk(" Bad RIP value.");
                                break;
@@ -390,6 +389,7 @@ void out_of_line_bug(void)
 
 static DEFINE_SPINLOCK(die_lock);
 static int die_owner = -1;
+static unsigned int die_nest_count;
 
 unsigned __kprobes long oops_begin(void)
 {
@@ -404,6 +404,7 @@ unsigned __kprobes long oops_begin(void)
                else
                        spin_lock(&die_lock);
        }
+       die_nest_count++;
        die_owner = cpu;
        console_verbose();
        bust_spinlocks(1);
@@ -414,7 +415,13 @@ void __kprobes oops_end(unsigned long fl
 { 
        die_owner = -1;
        bust_spinlocks(0);
-       spin_unlock_irqrestore(&die_lock, flags);
+       die_nest_count--;
+       if (die_nest_count)
+               /* We still own the lock */
+               local_irq_restore(flags);
+       else
+               /* Nest count reaches zero, release the lock. */
+               spin_unlock_irqrestore(&die_lock, flags);
        if (panic_on_oops)
                panic("Oops");
 }
@@ -470,6 +477,8 @@ void __kprobes die_nmi(char *str, struct
                panic("nmi watchdog");
        printk("console shuts up ...\n");
        oops_end(flags);
+       nmi_exit();
+       local_irq_enable();
        do_exit(SIGSEGV);
 }
 #endif
@@ -479,8 +488,6 @@ static void __kprobes do_trap(int trapnr
                              siginfo_t *info)
 {
        struct task_struct *tsk = current;
-
-       conditional_sti(regs);
 
        tsk->thread.error_code = error_code;
        tsk->thread.trap_no = trapnr;
@@ -490,7 +497,7 @@ static void __kprobes do_trap(int trapnr
                        printk(KERN_INFO
                               "%s[%d] trap %s rip:%lx rsp:%lx error:%lx\n",
                               tsk->comm, tsk->pid, str,
-                              regs->rip,regs->rsp,error_code); 
+                              regs->rip, regs->rsp, error_code); 
 
                if (info)
                        force_sig_info(signr, info, tsk);
@@ -504,9 +511,9 @@ static void __kprobes do_trap(int trapnr
        {            
                const struct exception_table_entry *fixup;
                fixup = search_exception_tables(regs->rip);
-               if (fixup) {
+               if (fixup)
                        regs->rip = fixup->fixup;
-               } else  
+               else    
                        die(str, regs, error_code);
                return;
        }
@@ -518,6 +525,7 @@ asmlinkage void do_##name(struct pt_regs
        if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) \
                                                        == NOTIFY_STOP) \
                return; \
+       conditional_sti(regs);                                          \
        do_trap(trapnr, signr, str, regs, error_code, NULL); \
 }
 
@@ -532,6 +540,7 @@ asmlinkage void do_##name(struct pt_regs
        if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) \
                                                        == NOTIFY_STOP) \
                return; \
+       conditional_sti(regs);                                          \
        do_trap(trapnr, signr, str, regs, error_code, &info); \
 }
 
@@ -545,7 +554,17 @@ DO_ERROR(11, SIGBUS,  "segment not prese
 DO_ERROR(11, SIGBUS,  "segment not present", segment_not_present)
 DO_ERROR_INFO(17, SIGBUS, "alignment check", alignment_check, BUS_ADRALN, 0)
 DO_ERROR(18, SIGSEGV, "reserved", reserved)
-DO_ERROR(12, SIGBUS,  "stack segment", stack_segment)
+
+/* Runs on IST stack */
+asmlinkage void do_stack_segment(struct pt_regs *regs, long error_code)
+{
+       if (notify_die(DIE_TRAP, "stack segment", regs, error_code,
+                       12, SIGBUS) == NOTIFY_STOP)
+               return;
+       preempt_conditional_sti(regs);
+       do_trap(12, SIGBUS, "stack segment", regs, error_code, NULL);
+       preempt_conditional_cli(regs);
+}
 
 asmlinkage void do_double_fault(struct pt_regs * regs, long error_code)
 {
@@ -579,7 +598,7 @@ asmlinkage void __kprobes do_general_pro
                        printk(KERN_INFO
                       "%s[%d] general protection rip:%lx rsp:%lx error:%lx\n",
                               tsk->comm, tsk->pid,
-                              regs->rip,regs->rsp,error_code); 
+                              regs->rip, regs->rsp, error_code); 
 
                force_sig(SIGSEGV, tsk);
                return;
@@ -683,8 +702,9 @@ asmlinkage void __kprobes do_int3(struct
        if (notify_die(DIE_INT3, "int3", regs, error_code, 3, SIGTRAP) == 
NOTIFY_STOP) {
                return;
        }
+       preempt_conditional_sti(regs);
        do_trap(3, SIGTRAP, "int3", regs, error_code, NULL);
-       return;
+       preempt_conditional_cli(regs);
 }
 
 /* Help handler running on IST stack to switch back to user stack
@@ -1015,14 +1035,14 @@ static int __init oops_dummy(char *s)
 static int __init oops_dummy(char *s)
 { 
        panic_on_oops = 1;
-       return -1; 
+       return 1;
 } 
 __setup("oops=", oops_dummy); 
 
 static int __init kstack_setup(char *s)
 {
        kstack_depth_to_print = simple_strtoul(s,NULL,0);
-       return 0;
+       return 1;
 }
 __setup("kstack=", kstack_setup);
 
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/x86_64/kernel/x8664_ksyms-xen.c
--- a/linux-2.6-xen-sparse/arch/x86_64/kernel/x8664_ksyms-xen.c Tue Jan 09 
10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/x8664_ksyms-xen.c Fri Jan 12 
14:30:49 2007 +0000
@@ -95,8 +95,6 @@ EXPORT_SYMBOL(screen_info);
 EXPORT_SYMBOL(screen_info);
 #endif
 
-EXPORT_SYMBOL(get_wchan);
-
 #ifdef CONFIG_X86_LOCAL_APIC
 EXPORT_SYMBOL_GPL(set_nmi_callback);
 EXPORT_SYMBOL_GPL(unset_nmi_callback);
@@ -107,7 +105,6 @@ EXPORT_SYMBOL_GPL(unset_nmi_callback);
 #undef memcpy
 #undef memset
 #undef memmove
-#undef strlen
 
 extern void * memset(void *,int,__kernel_size_t);
 extern size_t strlen(const char *);
@@ -116,7 +113,6 @@ extern void * __memcpy(void *,const void
 extern void * __memcpy(void *,const void *,__kernel_size_t);
 
 EXPORT_SYMBOL(memset);
-EXPORT_SYMBOL(strlen);
 EXPORT_SYMBOL(memmove);
 EXPORT_SYMBOL(memcpy);
 EXPORT_SYMBOL(__memcpy);
@@ -136,15 +132,11 @@ EXPORT_SYMBOL(empty_zero_page);
 EXPORT_SYMBOL(empty_zero_page);
 
 EXPORT_SYMBOL(die_chain);
-EXPORT_SYMBOL(register_die_notifier);
 
 #ifdef CONFIG_SMP
 EXPORT_SYMBOL(cpu_sibling_map);
 EXPORT_SYMBOL(smp_num_siblings);
 #endif
-
-extern void do_softirq_thunk(void);
-EXPORT_SYMBOL(do_softirq_thunk);
 
 #ifdef CONFIG_BUG
 EXPORT_SYMBOL(out_of_line_bug);
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/x86_64/mm/fault-xen.c
--- a/linux-2.6-xen-sparse/arch/x86_64/mm/fault-xen.c   Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/mm/fault-xen.c   Fri Jan 12 14:30:49 
2007 +0000
@@ -265,6 +265,8 @@ static int vmalloc_fault(unsigned long a
                return -1;
        if (pgd_none(*pgd))
                set_pgd(pgd, *pgd_ref);
+       else
+               BUG_ON(pgd_page(*pgd) != pgd_page(*pgd_ref));
 
        /* Below here mismatches are bugs because these lower tables
           are shared */
@@ -370,22 +372,14 @@ asmlinkage void __kprobes do_page_fault(
        if (!user_mode(regs))
                error_code &= ~PF_USER; /* means kernel */
 
+       tsk = current;
+       mm = tsk->mm;
+       prefetchw(&mm->mmap_sem);
+
        /* get the address */
        address = HYPERVISOR_shared_info->vcpu_info[
                smp_processor_id()].arch.cr2;
-       if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
-                                       SIGSEGV) == NOTIFY_STOP)
-               return;
-
-       if (likely(regs->eflags & X86_EFLAGS_IF))
-               local_irq_enable();
-
-       if (unlikely(page_fault_trace))
-               printk("pagefault rip:%lx rsp:%lx cs:%lu ss:%lu address %lx 
error %lx\n",
-                      
regs->rip,regs->rsp,regs->cs,regs->ss,address,error_code); 
-
-       tsk = current;
-       mm = tsk->mm;
+
        info.si_code = SEGV_MAPERR;
 
 
@@ -410,12 +404,14 @@ asmlinkage void __kprobes do_page_fault(
                 */
                if (!(error_code & (PF_RSVD|PF_USER|PF_PROT)) &&
                      ((address >= VMALLOC_START && address < VMALLOC_END))) {
-                       if (vmalloc_fault(address) < 0)
-                               goto bad_area_nosemaphore;
-                       return;
+                       if (vmalloc_fault(address) >= 0)
+                               return;
                }
                /* Can take a spurious fault if mapping changes R/O -> R/W. */
                if (spurious_fault(regs, address, error_code))
+                       return;
+               if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 
14,
+                                               SIGSEGV) == NOTIFY_STOP)
                        return;
                /*
                 * Don't take the mm semaphore here. If we fixup a prefetch
@@ -423,6 +419,17 @@ asmlinkage void __kprobes do_page_fault(
                 */
                goto bad_area_nosemaphore;
        }
+
+       if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
+                                       SIGSEGV) == NOTIFY_STOP)
+               return;
+
+       if (likely(regs->eflags & X86_EFLAGS_IF))
+               local_irq_enable();
+
+       if (unlikely(page_fault_trace))
+               printk("pagefault rip:%lx rsp:%lx cs:%lu ss:%lu address %lx 
error %lx\n",
+                      
regs->rip,regs->rsp,regs->cs,regs->ss,address,error_code); 
 
        if (unlikely(error_code & PF_RSVD))
                pgtable_bad(address, regs, error_code);
@@ -633,9 +640,51 @@ do_sigbus:
        return;
 }
 
+DEFINE_SPINLOCK(pgd_lock);
+struct page *pgd_list;
+
+void vmalloc_sync_all(void)
+{
+       /* Note that races in the updates of insync and start aren't 
+          problematic:
+          insync can only get set bits added, and updates to start are only
+          improving performance (without affecting correctness if undone). */
+       static DECLARE_BITMAP(insync, PTRS_PER_PGD);
+       static unsigned long start = VMALLOC_START & PGDIR_MASK;
+       unsigned long address;
+
+       for (address = start; address <= VMALLOC_END; address += PGDIR_SIZE) {
+               if (!test_bit(pgd_index(address), insync)) {
+                       const pgd_t *pgd_ref = pgd_offset_k(address);
+                       struct page *page;
+
+                       if (pgd_none(*pgd_ref))
+                               continue;
+                       spin_lock(&pgd_lock);
+                       for (page = pgd_list; page;
+                            page = (struct page *)page->index) {
+                               pgd_t *pgd;
+                               pgd = (pgd_t *)page_address(page) + 
pgd_index(address);
+                               if (pgd_none(*pgd))
+                                       set_pgd(pgd, *pgd_ref);
+                               else
+                                       BUG_ON(pgd_page(*pgd) != 
pgd_page(*pgd_ref));
+                       }
+                       spin_unlock(&pgd_lock);
+                       set_bit(pgd_index(address), insync);
+               }
+               if (address == start)
+                       start = address + PGDIR_SIZE;
+       }
+       /* Check that there is no need to do the same for the modules area. */
+       BUILD_BUG_ON(!(MODULES_VADDR > __START_KERNEL));
+       BUILD_BUG_ON(!(((MODULES_END - 1) & PGDIR_MASK) == 
+                               (__START_KERNEL & PGDIR_MASK)));
+}
+
 static int __init enable_pagefaulttrace(char *str)
 {
        page_fault_trace = 1;
-       return 0;
+       return 1;
 }
 __setup("pagefaulttrace", enable_pagefaulttrace);
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c
--- a/linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c    Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c    Fri Jan 12 14:30:49 
2007 +0000
@@ -185,7 +185,7 @@ void show_mem(void)
        show_free_areas();
        printk(KERN_INFO "Free swap:       %6ldkB\n", 
nr_swap_pages<<(PAGE_SHIFT-10));
 
-       for_each_pgdat(pgdat) {
+       for_each_online_pgdat(pgdat) {
                for (i = 0; i < pgdat->node_spanned_pages; ++i) {
                        page = pfn_to_page(pgdat->node_start_pfn + i);
                        total++;
@@ -207,7 +207,7 @@ void show_mem(void)
 
 int after_bootmem;
 
-static void *spp_getpage(void)
+static __init void *spp_getpage(void)
 { 
        void *ptr;
        if (after_bootmem)
@@ -230,7 +230,7 @@ static inline pud_t *pud_offset_u(unsign
        return pud + pud_index(address);
 }
 
-static void set_pte_phys(unsigned long vaddr,
+static __init void set_pte_phys(unsigned long vaddr,
                         unsigned long phys, pgprot_t prot, int user_mode)
 {
        pgd_t *pgd;
@@ -345,7 +345,8 @@ static void set_pte_phys_ma(unsigned lon
 #define SET_FIXMAP_USER   1
 
 /* NOTE: this is meant to be run only at boot */
-void __set_fixmap (enum fixed_addresses idx, unsigned long phys, pgprot_t prot)
+void __init 
+__set_fixmap (enum fixed_addresses idx, unsigned long phys, pgprot_t prot)
 {
        unsigned long address = __fix_to_virt(idx);
 
@@ -437,6 +438,18 @@ static inline int make_readonly(unsigned
                readonly = 1;
 
        return readonly;
+}
+
+/* Must run before zap_low_mappings */
+__init void *early_ioremap(unsigned long addr, unsigned long size)
+{
+       return ioremap(addr, size);
+}
+
+/* To avoid virtual aliases later */
+__init void early_iounmap(void *addr, unsigned long size)
+{
+       iounmap(addr);
 }
 
 static void __meminit
@@ -686,7 +699,7 @@ void __meminit init_memory_mapping(unsig
                pud_t *pud;
 
                if (after_bootmem) {
-                       pud = pud_offset_k(pgd, __PAGE_OFFSET);
+                       pud = pud_offset_k(pgd, start & PGDIR_MASK);
                        make_page_readonly(pud, XENFEAT_writable_page_tables);
                        pud_phys = __pa(pud);
                } else {
@@ -869,19 +882,50 @@ void __init clear_kernel_mapping(unsigne
 
 /*
  * Memory hotplug specific functions
- * These are only for non-NUMA machines right now.
  */
-#ifdef CONFIG_MEMORY_HOTPLUG
+#if defined(CONFIG_ACPI_HOTPLUG_MEMORY) || 
defined(CONFIG_ACPI_HOTPLUG_MEMORY_MODULE)
 
 void online_page(struct page *page)
 {
        ClearPageReserved(page);
-       set_page_count(page, 1);
+       init_page_count(page);
        __free_page(page);
        totalram_pages++;
        num_physpages++;
 }
 
+#ifndef CONFIG_MEMORY_HOTPLUG
+/*
+ * Memory Hotadd without sparsemem. The mem_maps have been allocated in 
advance,
+ * just online the pages.
+ */
+int __add_pages(struct zone *z, unsigned long start_pfn, unsigned long 
nr_pages)
+{
+       int err = -EIO;
+       unsigned long pfn;
+       unsigned long total = 0, mem = 0;
+       for (pfn = start_pfn; pfn < start_pfn + nr_pages; pfn++) {
+               if (pfn_valid(pfn)) {
+                       online_page(pfn_to_page(pfn));
+                       err = 0;
+                       mem++;
+               }
+               total++;
+       }
+       if (!err) {
+               z->spanned_pages += total;
+               z->present_pages += mem;
+               z->zone_pgdat->node_spanned_pages += total;
+               z->zone_pgdat->node_present_pages += mem;
+       }
+       return err;
+}
+#endif
+
+/*
+ * Memory is added always to NORMAL zone. This means you will never get
+ * additional DMA/DMA32 memory.
+ */
 int add_memory(u64 start, u64 size)
 {
        struct pglist_data *pgdat = NODE_DATA(0);
@@ -949,7 +993,7 @@ void __init mem_init(void)
        /* XEN: init and count pages outside initial allocation. */
        for (pfn = xen_start_info->nr_pages; pfn < max_pfn; pfn++) {
                ClearPageReserved(pfn_to_page(pfn));
-               set_page_count(pfn_to_page(pfn), 1);
+               init_page_count(pfn_to_page(pfn));
                totalram_pages++;
        }
        reservedpages = end_pfn - totalram_pages - e820_hole_size(0, end_pfn);
@@ -1001,7 +1045,7 @@ void free_initmem(void)
        addr = (unsigned long)(&__init_begin);
        for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) {
                ClearPageReserved(virt_to_page(addr));
-               set_page_count(virt_to_page(addr), 1);
+               init_page_count(virt_to_page(addr));
                memset((void *)(addr & ~(PAGE_SIZE-1)), 0xcc, PAGE_SIZE); 
                make_page_writable(
                        __va(__pa(addr)), XENFEAT_writable_page_tables);
@@ -1049,7 +1093,7 @@ void free_initrd_mem(unsigned long start
        printk ("Freeing initrd memory: %ldk freed\n", (end - start) >> 10);
        for (; start < end; start += PAGE_SIZE) {
                ClearPageReserved(virt_to_page(start));
-               set_page_count(virt_to_page(start), 1);
+               init_page_count(virt_to_page(start));
                free_page(start);
                totalram_pages++;
        }
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/x86_64/mm/pageattr-xen.c
--- a/linux-2.6-xen-sparse/arch/x86_64/mm/pageattr-xen.c        Tue Jan 09 
10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/mm/pageattr-xen.c        Fri Jan 12 
14:30:49 2007 +0000
@@ -206,6 +206,13 @@ static struct page *split_large_page(uns
        pte_t *pbase;
        if (!base) 
                return NULL;
+       /*
+        * page_private is used to track the number of entries in
+        * the page table page have non standard attributes.
+        */
+       SetPagePrivate(base);
+       page_private(base) = 0;
+
        address = __pa(address);
        addr = address & LARGE_PAGE_MASK; 
        pbase = (pte_t *)page_address(base);
@@ -238,26 +245,12 @@ static inline void flush_map(unsigned lo
        on_each_cpu(flush_kernel_map, (void *)address, 1, 1);
 }
 
-struct deferred_page { 
-       struct deferred_page *next; 
-       struct page *fpage;
-       unsigned long address;
-}; 
-static struct deferred_page *df_list; /* protected by init_mm.mmap_sem */
-
-static inline void save_page(unsigned long address, struct page *fpage)
-{
-       struct deferred_page *df;
-       df = kmalloc(sizeof(struct deferred_page), GFP_KERNEL); 
-       if (!df) {
-               flush_map(address);
-               __free_page(fpage);
-       } else { 
-               df->next = df_list;
-               df->fpage = fpage;
-               df->address = address;
-               df_list = df;
-       }                       
+static struct page *deferred_pages; /* protected by init_mm.mmap_sem */
+
+static inline void save_page(struct page *fpage)
+{
+       fpage->lru.next = (struct list_head *)deferred_pages;
+       deferred_pages = fpage;
 }
 
 /* 
@@ -299,8 +292,8 @@ __change_page_attr(unsigned long address
                        set_pte(kpte, pfn_pte(pfn, prot));
                } else {
                        /*
-                        * split_large_page will take the reference for this 
change_page_attr
-                        * on the split page.
+                        * split_large_page will take the reference for this
+                        * change_page_attr on the split page.
                         */
 
                        struct page *split;
@@ -312,10 +305,11 @@ __change_page_attr(unsigned long address
                        set_pte(kpte,mk_pte(split, ref_prot2));
                        kpte_page = split;
                }       
-               get_page(kpte_page);
+               page_private(kpte_page)++;
        } else if ((kpte_flags & _PAGE_PSE) == 0) { 
                set_pte(kpte, pfn_pte(pfn, ref_prot));
-               __put_page(kpte_page);
+               BUG_ON(page_private(kpte_page) == 0);
+               page_private(kpte_page)--;
        } else
                BUG();
 
@@ -329,16 +323,14 @@ __change_page_attr(unsigned long address
 #ifndef CONFIG_XEN
        BUG_ON(PageReserved(kpte_page));
 #else
-       if (!PageReserved(kpte_page))
+       if (PageReserved(kpte_page))
+               return 0;
 #endif
-               switch (page_count(kpte_page)) {
-               case 1:
-                       save_page(address, kpte_page);               
-                       revert_page(address, ref_prot);
-                       break;
-               case 0:
-                       BUG(); /* memleak and failed 2M page regeneration */
-               }
+
+       if (page_private(kpte_page) == 0) {
+               save_page(kpte_page);
+               revert_page(address, ref_prot);
+       }
        return 0;
 } 
 
@@ -390,17 +382,18 @@ int change_page_attr(struct page *page, 
 
 void global_flush_tlb(void)
 { 
-       struct deferred_page *df, *next_df;
+       struct page *dpage;
 
        down_read(&init_mm.mmap_sem);
-       df = xchg(&df_list, NULL);
+       dpage = xchg(&deferred_pages, NULL);
        up_read(&init_mm.mmap_sem);
-       flush_map((df && !df->next) ? df->address : 0);
-       for (; df; df = next_df) { 
-               next_df = df->next;
-               if (df->fpage) 
-                       __free_page(df->fpage);
-               kfree(df);
+
+       flush_map((dpage && !dpage->lru.next) ? (unsigned 
long)page_address(dpage) : 0);
+       while (dpage) {
+               struct page *tmp = dpage;
+               dpage = (struct page *)dpage->lru.next;
+               ClearPagePrivate(tmp);
+               __free_page(tmp);
        } 
 } 
 
diff -r 6d6a4d5801bd -r 4fad820a2233 
linux-2.6-xen-sparse/arch/x86_64/pci/Makefile
--- a/linux-2.6-xen-sparse/arch/x86_64/pci/Makefile     Tue Jan 09 10:50:46 
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/pci/Makefile     Fri Jan 12 14:30:49 
2007 +0000
@@ -7,7 +7,7 @@ CFLAGS += -Iarch/i386/pci
 
 obj-y          := i386.o
 obj-$(CONFIG_PCI_DIRECT)+= direct.o
-obj-y          += fixup.o
+obj-y          += fixup.o init.o
 obj-$(CONFIG_ACPI)     += acpi.o
 obj-y                  += legacy.o irq.o common.o
 # mmconfig has a 64bit special
@@ -27,6 +27,7 @@ common-y += ../../i386/pci/common.o
 common-y += ../../i386/pci/common.o
 fixup-y  += ../../i386/pci/fixup.o
 i386-y  += ../../i386/pci/i386.o
+init-y += ../../i386/pci/init.o
 
 ifdef CONFIG_XEN
 irq-y          := ../../i386/pci/irq-xen.o
diff -r 6d6a4d5801bd -r 4fad820a2233 linux-2.6-xen-sparse/drivers/Makefile
--- a/linux-2.6-xen-sparse/drivers/Makefile     Tue Jan 09 10:50:46 2007 +0000
+++ b/linux-2.6-xen-sparse/drivers/Makefile     Fri Jan 12 14:30:49 2007 +0000
@@ -25,9 +25,6 @@ obj-$(CONFIG_FB_I810)           += video
 obj-$(CONFIG_FB_I810)           += video/i810/
 obj-$(CONFIG_FB_INTEL)          += video/intelfb/
 
-# we also need input/serio early so serio bus is initialized by the time
-# serial drivers start registering their serio ports
-obj-$(CONFIG_SERIO)            += input/serio/
 obj-y                          += serial/
 obj-$(CONFIG_PARPORT)          += parport/
 obj-y                          += base/ block/ misc/ mfd/ net/ media/
@@ -54,9 +51,11 @@ obj-$(CONFIG_USB)            += usb/
 obj-$(CONFIG_USB)              += usb/
 obj-$(CONFIG_PCI)              += usb/
 obj-$(CONFIG_USB_GADGET)       += usb/gadget/
+obj-$(CONFIG_SERIO)            += input/serio/
 obj-$(CONFIG_GAMEPORT)         += input/gameport/
 obj-$(CONFIG_INPUT)            += input/
 obj-$(CONFIG_I2O)              += message/
+obj-$(CONFIG_RTC_LIB)          += rtc/
 obj-$(CONFIG_I2C)              += i2c/
 obj-$(CONFIG_W1)               += w1/
 obj-$(CONFIG_HWMON)            += hwmon/
@@ -69,7 +68,9 @@ obj-$(CONFIG_EISA)            += eisa/
 obj-$(CONFIG_EISA)             += eisa/
 obj-$(CONFIG_CPU_FREQ)         += cpufreq/
 obj-$(CONFIG_MMC)              += mmc/
+obj-$(CONFIG_NEW_LEDS)         += leds/
 obj-$(CONFIG_INFINIBAND)       += infiniband/

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.