direct-io.hg

changeset 4492:d6ceb5c6bfd8

bitkeeper revision 1.1236.60.1 (42539fb5RDSrpMSePpTfUbKsp5hWqQ)

X86_64 fixes.
From: "Nakajima, Jun" <jun.nakajima@intel.com>
Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
author cl349@firebug.cl.cam.ac.uk
date Wed Apr 06 08:37:09 2005 +0000 (2005-04-06)
parents 38d7ac8f210f
children 608f95d3df77
files .rootkeys linux-2.6.11-xen-sparse/arch/xen/Kconfig linux-2.6.11-xen-sparse/arch/xen/configs/xen0_defconfig_x86_32 linux-2.6.11-xen-sparse/arch/xen/configs/xen0_defconfig_x86_64 linux-2.6.11-xen-sparse/arch/xen/configs/xenU_defconfig_x86_32 linux-2.6.11-xen-sparse/arch/xen/i386/Kconfig linux-2.6.11-xen-sparse/arch/xen/kernel/evtchn.c linux-2.6.11-xen-sparse/arch/xen/x86_64/Kconfig linux-2.6.11-xen-sparse/arch/xen/x86_64/defconfig linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/entry.S linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/ioport.c linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/ldt.c linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/pci-dma.c linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/process.c linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/setup.c linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/setup64.c linux-2.6.11-xen-sparse/arch/xen/x86_64/mm/hypervisor.c linux-2.6.11-xen-sparse/arch/xen/x86_64/mm/init.c linux-2.6.11-xen-sparse/arch/xen/x86_64/mm/ioremap.c linux-2.6.11-xen-sparse/arch/xen/x86_64/mm/pageattr.c linux-2.6.11-xen-sparse/drivers/xen/privcmd/privcmd.c linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/hypercall.h linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/desc.h linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/fixmap.h linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/hypercall.h linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/mmu_context.h linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/pgalloc.h linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/pgtable.h linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/system.h linux-2.6.11-xen-sparse/include/asm-xen/hypervisor.h
line diff
     1.1 --- a/.rootkeys	Tue Apr 05 10:41:39 2005 +0000
     1.2 +++ b/.rootkeys	Wed Apr 06 08:37:09 2005 +0000
     1.3 @@ -262,7 +262,6 @@ 418f90e4lGdeJK9rmbOB1kN-IKSjsQ linux-2.6
     1.4  3f68905c5eiA-lBMQSvXLMWS1ikDEA linux-2.6.11-xen-sparse/arch/xen/kernel/xen_proc.c
     1.5  424efaa6xahU2q85_dT-SjUJEaivfg linux-2.6.11-xen-sparse/arch/xen/x86_64/Kconfig
     1.6  424efaa6kKleWe45IrqsG8gkejgEQA linux-2.6.11-xen-sparse/arch/xen/x86_64/Makefile
     1.7 -424efaa7hjpGexXRf5TYBwgP7uT5Wg linux-2.6.11-xen-sparse/arch/xen/x86_64/defconfig
     1.8  424efaa6HSyuVodl6SxFGj39vlp6MA linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/Makefile
     1.9  424efaa7bVAw3Z_q0SdFivfNVavyIg linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/asm-offsets.c
    1.10  424efaa7ddTVabh547Opf0u9vKmUXw linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/e820.c
    1.11 @@ -344,6 +343,7 @@ 4107adf1E5O4ztGHNGMzCCNhcvqNow linux-2.6
    1.12  40f5623akIoBsQ3KxSB2kufkbgONXQ linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/fixmap.h
    1.13  41979925z1MsKU1SfuuheM1IFDQ_bA linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/floppy.h
    1.14  4118b6a418gnL6AZsTdglC92YGqYTg linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/highmem.h
    1.15 +42539fb5A9hsS3NFQ-2VY4y1TONZZQ linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/hypercall.h
    1.16  40f5623aJVXQwpJMOLE99XgvGsfQ8Q linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/io.h
    1.17  40f5623aKXkBBxgpLx2NcvkncQ1Yyw linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/mach-xen/irq_vectors.h
    1.18  40f5623aDMCsWOFO0jktZ4e8sjwvEg linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_post.h
     2.1 --- a/linux-2.6.11-xen-sparse/arch/xen/Kconfig	Tue Apr 05 10:41:39 2005 +0000
     2.2 +++ b/linux-2.6.11-xen-sparse/arch/xen/Kconfig	Wed Apr 06 08:37:09 2005 +0000
     2.3 @@ -136,17 +136,17 @@ config XEN_SCRUB_PAGES
     2.4  
     2.5  choice
     2.6  	prompt "Processor Type"
     2.7 -	default X86
     2.8 +	default XEN_X86
     2.9  
    2.10 -config X86
    2.11 +config XEN_X86
    2.12  	bool "X86"
    2.13  	help
    2.14  	  Choose this option if your computer is a X86 architecture.
    2.15  
    2.16 -config X86_64
    2.17 +config XEN_X86_64
    2.18  	bool "X86_64"
    2.19  	help
    2.20 -	  Choose this option if your computer is a X86 architecture.
    2.21 +	  Choose this option if your computer is a X86_64 architecture.
    2.22  
    2.23  endchoice
    2.24  
    2.25 @@ -158,11 +158,11 @@ config HAVE_ARCH_DEV_ALLOC_SKB
    2.26  
    2.27  source "init/Kconfig"
    2.28  
    2.29 -if X86
    2.30 +if XEN_X86
    2.31  source "arch/xen/i386/Kconfig"
    2.32  endif
    2.33  
    2.34 -if X86_64
    2.35 +if XEN_X86_64
    2.36  source "arch/xen/x86_64/Kconfig"
    2.37  endif
    2.38  
     3.1 --- a/linux-2.6.11-xen-sparse/arch/xen/configs/xen0_defconfig_x86_32	Tue Apr 05 10:41:39 2005 +0000
     3.2 +++ b/linux-2.6.11-xen-sparse/arch/xen/configs/xen0_defconfig_x86_32	Wed Apr 06 08:37:09 2005 +0000
     3.3 @@ -1,7 +1,7 @@
     3.4  #
     3.5  # Automatically generated make config: don't edit
     3.6  # Linux kernel version: 2.6.11-xen0
     3.7 -# Sat Mar 19 19:42:39 2005
     3.8 +# Wed Apr  6 09:19:05 2005
     3.9  #
    3.10  CONFIG_XEN=y
    3.11  CONFIG_ARCH_XEN=y
    3.12 @@ -14,14 +14,15 @@ CONFIG_XEN_PRIVILEGED_GUEST=y
    3.13  CONFIG_XEN_PHYSDEV_ACCESS=y
    3.14  CONFIG_XEN_BLKDEV_BACKEND=y
    3.15  # CONFIG_XEN_BLKDEV_TAP_BE is not set
    3.16 +CONFIG_XEN_BLKDEV_GRANT=y
    3.17  CONFIG_XEN_NETDEV_BACKEND=y
    3.18  CONFIG_XEN_BLKDEV_FRONTEND=y
    3.19  CONFIG_XEN_NETDEV_FRONTEND=y
    3.20  # CONFIG_XEN_NETDEV_FRONTEND_PIPELINED_TRANSMITTER is not set
    3.21  # CONFIG_XEN_BLKDEV_TAP is not set
    3.22  CONFIG_XEN_SCRUB_PAGES=y
    3.23 -CONFIG_X86=y
    3.24 -# CONFIG_X86_64 is not set
    3.25 +CONFIG_XEN_X86=y
    3.26 +# CONFIG_XEN_X86_64 is not set
    3.27  CONFIG_HAVE_ARCH_DEV_ALLOC_SKB=y
    3.28  
    3.29  #
    3.30 @@ -75,6 +76,7 @@ CONFIG_KMOD=y
    3.31  # X86 Processor Configuration
    3.32  #
    3.33  CONFIG_XENARCH="i386"
    3.34 +CONFIG_X86=y
    3.35  CONFIG_MMU=y
    3.36  CONFIG_UID16=y
    3.37  CONFIG_GENERIC_ISA_DMA=y
     4.1 --- a/linux-2.6.11-xen-sparse/arch/xen/configs/xen0_defconfig_x86_64	Tue Apr 05 10:41:39 2005 +0000
     4.2 +++ b/linux-2.6.11-xen-sparse/arch/xen/configs/xen0_defconfig_x86_64	Wed Apr 06 08:37:09 2005 +0000
     4.3 @@ -1,7 +1,7 @@
     4.4  #
     4.5  # Automatically generated make config: don't edit
     4.6 -# Linux kernel version: 2.6.10-xen0
     4.7 -# Tue Mar 15 10:39:50 2005
     4.8 +# Linux kernel version: 2.6.11-xen0
     4.9 +# Wed Apr  6 09:21:54 2005
    4.10  #
    4.11  CONFIG_XEN=y
    4.12  CONFIG_ARCH_XEN=y
    4.13 @@ -14,12 +14,12 @@ CONFIG_XEN_PRIVILEGED_GUEST=y
    4.14  CONFIG_XEN_PHYSDEV_ACCESS=y
    4.15  CONFIG_XEN_BLKDEV_BACKEND=y
    4.16  # CONFIG_XEN_BLKDEV_TAP_BE is not set
    4.17 +CONFIG_XEN_BLKDEV_GRANT=y
    4.18  CONFIG_XEN_NETDEV_BACKEND=y
    4.19  CONFIG_XEN_BLKDEV_FRONTEND=y
    4.20  CONFIG_XEN_NETDEV_FRONTEND=y
    4.21  # CONFIG_XEN_NETDEV_FRONTEND_PIPELINED_TRANSMITTER is not set
    4.22  # CONFIG_XEN_BLKDEV_TAP is not set
    4.23 -# CONFIG_XEN_WRITABLE_PAGETABLES=y
    4.24  CONFIG_XEN_SCRUB_PAGES=y
    4.25  # CONFIG_XEN_X86 is not set
    4.26  CONFIG_XEN_X86_64=y
    4.27 @@ -67,13 +67,14 @@ CONFIG_OBSOLETE_MODPARM=y
    4.28  # CONFIG_MODULE_SRCVERSION_ALL is not set
    4.29  CONFIG_KMOD=y
    4.30  CONFIG_XENARCH="x86_64"
    4.31 +CONFIG_X86=y
    4.32  CONFIG_MMU=y
    4.33  CONFIG_GENERIC_ISA_DMA=y
    4.34  CONFIG_GENERIC_IOMAP=y
    4.35 -# CONFIG_MK8 is not set
    4.36  CONFIG_X86_CMPXCHG=y
    4.37  CONFIG_X86_L1_CACHE_SHIFT=7
    4.38  CONFIG_RWSEM_GENERIC_SPINLOCK=y
    4.39 +CONFIG_GENERIC_CALIBRATE_DELAY=y
    4.40  CONFIG_X86_GOOD_APIC=y
    4.41  # CONFIG_HPET_TIMER is not set
    4.42  # CONFIG_SMP is not set
    4.43 @@ -92,7 +93,6 @@ CONFIG_GENERIC_IRQ_PROBE=y
    4.44  # X86_64 processor configuration
    4.45  #
    4.46  CONFIG_X86_64=y
    4.47 -CONFIG_X86=y
    4.48  CONFIG_64BIT=y
    4.49  
    4.50  #
    4.51 @@ -116,7 +116,6 @@ CONFIG_DUMMY_IOMMU=y
    4.52  # ACPI (Advanced Configuration and Power Interface) Support
    4.53  #
    4.54  # CONFIG_ACPI is not set
    4.55 -# CONFIG_ACPI_BLACKLIST_YEAR=0
    4.56  
    4.57  #
    4.58  # CPU Frequency scaling
    4.59 @@ -124,20 +123,11 @@ CONFIG_DUMMY_IOMMU=y
    4.60  # CONFIG_CPU_FREQ is not set
    4.61  
    4.62  #
    4.63 -# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    4.64 +# Bus options (PCI etc.)
    4.65  #
    4.66 -CONFIG_PCI=y
    4.67 -CONFIG_PCI_DIRECT=y
    4.68 -CONFIG_PCI_LEGACY_PROC=y
    4.69 -# CONFIG_PCI_NAMES is not set
    4.70  # CONFIG_PCI_MMCONFIG is not set
    4.71  
    4.72  #
    4.73 -# PCCARD (PCMCIA/CardBus) support
    4.74 -#
    4.75 -# CONFIG_PCCARD is not set
    4.76 -
    4.77 -#
    4.78  # Executable file formats / Emulations
    4.79  #
    4.80  # CONFIG_IA32_EMULATION is not set
    4.81 @@ -180,6 +170,7 @@ CONFIG_BLK_DEV_FD=y
    4.82  # CONFIG_BLK_CPQ_DA is not set
    4.83  # CONFIG_BLK_CPQ_CISS_DA is not set
    4.84  # CONFIG_BLK_DEV_DAC960 is not set
    4.85 +# CONFIG_BLK_DEV_COW_COMMON is not set
    4.86  CONFIG_BLK_DEV_LOOP=y
    4.87  # CONFIG_BLK_DEV_CRYPTOLOOP is not set
    4.88  # CONFIG_BLK_DEV_NBD is not set
    4.89 @@ -252,37 +243,22 @@ CONFIG_SCSI_SATA=y
    4.90  # CONFIG_SCSI_SATA_AHCI is not set
    4.91  # CONFIG_SCSI_SATA_SVW is not set
    4.92  CONFIG_SCSI_ATA_PIIX=y
    4.93 -# CONFIG_SCSI_SATA_NV is not set
    4.94  CONFIG_SCSI_SATA_PROMISE=y
    4.95  # CONFIG_SCSI_SATA_QSTOR is not set
    4.96 -CONFIG_SCSI_SATA_SX4=y
    4.97 -CONFIG_SCSI_SATA_SIL=y
    4.98 -# CONFIG_SCSI_SATA_SIS is not set
    4.99 -# CONFIG_SCSI_SATA_ULI is not set
   4.100  # CONFIG_SCSI_SATA_VIA is not set
   4.101  # CONFIG_SCSI_SATA_VITESSE is not set
   4.102  CONFIG_SCSI_BUSLOGIC=y
   4.103  # CONFIG_SCSI_OMIT_FLASHPOINT is not set
   4.104 -# CONFIG_SCSI_CPQFCTS is not set
   4.105  # CONFIG_SCSI_DMX3191D is not set
   4.106 -# CONFIG_SCSI_DTC3280 is not set
   4.107  # CONFIG_SCSI_EATA is not set
   4.108  # CONFIG_SCSI_EATA_PIO is not set
   4.109  # CONFIG_SCSI_FUTURE_DOMAIN is not set
   4.110  # CONFIG_SCSI_GDTH is not set
   4.111 -# CONFIG_SCSI_GENERIC_NCR5380 is not set
   4.112 -# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
   4.113  # CONFIG_SCSI_IPS is not set
   4.114  # CONFIG_SCSI_INITIO is not set
   4.115  # CONFIG_SCSI_INIA100 is not set
   4.116 -# CONFIG_SCSI_NCR53C406A is not set
   4.117  # CONFIG_SCSI_SYM53C8XX_2 is not set
   4.118  # CONFIG_SCSI_IPR is not set
   4.119 -# CONFIG_SCSI_PAS16 is not set
   4.120 -# CONFIG_SCSI_PCI2000 is not set
   4.121 -# CONFIG_SCSI_PCI2220I is not set
   4.122 -# CONFIG_SCSI_PSI240I is not set
   4.123 -# CONFIG_SCSI_QLOGIC_FAS is not set
   4.124  # CONFIG_SCSI_QLOGIC_ISP is not set
   4.125  # CONFIG_SCSI_QLOGIC_FC is not set
   4.126  # CONFIG_SCSI_QLOGIC_1280 is not set
   4.127 @@ -292,14 +268,7 @@ CONFIG_SCSI_QLA2XXX=y
   4.128  # CONFIG_SCSI_QLA2300 is not set
   4.129  # CONFIG_SCSI_QLA2322 is not set
   4.130  # CONFIG_SCSI_QLA6312 is not set
   4.131 -# CONFIG_SCSI_SEAGATE is not set
   4.132 -# CONFIG_SCSI_SYM53C416 is not set
   4.133 -# CONFIG_SCSI_DC395x is not set
   4.134  # CONFIG_SCSI_DC390T is not set
   4.135 -# CONFIG_SCSI_T128 is not set
   4.136 -# CONFIG_SCSI_U14_34F is not set
   4.137 -# CONFIG_SCSI_ULTRASTOR is not set
   4.138 -# CONFIG_SCSI_NSP32 is not set
   4.139  # CONFIG_SCSI_DEBUG is not set
   4.140  
   4.141  #
   4.142 @@ -409,6 +378,7 @@ CONFIG_SERIO_I8042=y
   4.143  CONFIG_SERIO_SERPORT=y
   4.144  # CONFIG_SERIO_CT82C710 is not set
   4.145  # CONFIG_SERIO_PCIPS2 is not set
   4.146 +CONFIG_SERIO_LIBPS2=y
   4.147  # CONFIG_SERIO_RAW is not set
   4.148  
   4.149  #
   4.150 @@ -533,6 +503,16 @@ CONFIG_USB_ARCH_HAS_OHCI=y
   4.151  # CONFIG_USB_GADGET is not set
   4.152  
   4.153  #
   4.154 +# MMC/SD Card support
   4.155 +#
   4.156 +# CONFIG_MMC is not set
   4.157 +
   4.158 +#
   4.159 +# InfiniBand support
   4.160 +#
   4.161 +# CONFIG_INFINIBAND is not set
   4.162 +
   4.163 +#
   4.164  # File systems
   4.165  #
   4.166  CONFIG_EXT2_FS=y
   4.167 @@ -548,6 +528,10 @@ CONFIG_JBD=y
   4.168  CONFIG_FS_MBCACHE=y
   4.169  # CONFIG_REISERFS_FS is not set
   4.170  # CONFIG_JFS_FS is not set
   4.171 +
   4.172 +#
   4.173 +# XFS support
   4.174 +#
   4.175  # CONFIG_XFS_FS is not set
   4.176  # CONFIG_MINIX_FS is not set
   4.177  # CONFIG_ROMFS_FS is not set
   4.178 @@ -607,7 +591,6 @@ CONFIG_RAMFS=y
   4.179  #
   4.180  # CONFIG_NFS_FS is not set
   4.181  # CONFIG_NFSD is not set
   4.182 -# CONFIG_EXPORTFS is not set
   4.183  # CONFIG_SMB_FS is not set
   4.184  # CONFIG_CIFS is not set
   4.185  # CONFIG_NCP_FS is not set
   4.186 @@ -689,15 +672,13 @@ CONFIG_NLS_CODEPAGE_437=y
   4.187  # CONFIG_CRYPTO is not set
   4.188  
   4.189  #
   4.190 +# Hardware crypto devices
   4.191 +#
   4.192 +
   4.193 +#
   4.194  # Library routines
   4.195  #
   4.196  CONFIG_CRC_CCITT=y
   4.197  CONFIG_CRC32=y
   4.198  CONFIG_LIBCRC32C=y
   4.199  CONFIG_ZLIB_INFLATE=y
   4.200 -
   4.201 -#
   4.202 -# Firmware Drivers
   4.203 -#
   4.204 -CONFIG_PCI_LEGACY_PROC=y
   4.205 -CONFIG_PCI_NAMES=y
     5.1 --- a/linux-2.6.11-xen-sparse/arch/xen/configs/xenU_defconfig_x86_32	Tue Apr 05 10:41:39 2005 +0000
     5.2 +++ b/linux-2.6.11-xen-sparse/arch/xen/configs/xenU_defconfig_x86_32	Wed Apr 06 08:37:09 2005 +0000
     5.3 @@ -1,7 +1,7 @@
     5.4  #
     5.5  # Automatically generated make config: don't edit
     5.6  # Linux kernel version: 2.6.11-xenU
     5.7 -# Fri Mar 11 01:20:28 2005
     5.8 +# Wed Apr  6 09:20:09 2005
     5.9  #
    5.10  CONFIG_XEN=y
    5.11  CONFIG_ARCH_XEN=y
    5.12 @@ -12,13 +12,14 @@ CONFIG_NO_IDLE_HZ=y
    5.13  #
    5.14  # CONFIG_XEN_PRIVILEGED_GUEST is not set
    5.15  # CONFIG_XEN_PHYSDEV_ACCESS is not set
    5.16 +CONFIG_XEN_BLKDEV_GRANT=y
    5.17  CONFIG_XEN_BLKDEV_FRONTEND=y
    5.18  CONFIG_XEN_NETDEV_FRONTEND=y
    5.19  # CONFIG_XEN_NETDEV_FRONTEND_PIPELINED_TRANSMITTER is not set
    5.20  # CONFIG_XEN_BLKDEV_TAP is not set
    5.21  CONFIG_XEN_SCRUB_PAGES=y
    5.22 -CONFIG_X86=y
    5.23 -# CONFIG_X86_64 is not set
    5.24 +CONFIG_XEN_X86=y
    5.25 +# CONFIG_XEN_X86_64 is not set
    5.26  CONFIG_HAVE_ARCH_DEV_ALLOC_SKB=y
    5.27  
    5.28  #
    5.29 @@ -71,6 +72,7 @@ CONFIG_KMOD=y
    5.30  # X86 Processor Configuration
    5.31  #
    5.32  CONFIG_XENARCH="i386"
    5.33 +CONFIG_X86=y
    5.34  CONFIG_MMU=y
    5.35  CONFIG_UID16=y
    5.36  CONFIG_GENERIC_ISA_DMA=y
     6.1 --- a/linux-2.6.11-xen-sparse/arch/xen/i386/Kconfig	Tue Apr 05 10:41:39 2005 +0000
     6.2 +++ b/linux-2.6.11-xen-sparse/arch/xen/i386/Kconfig	Wed Apr 06 08:37:09 2005 +0000
     6.3 @@ -9,6 +9,10 @@ config XENARCH
     6.4  	string
     6.5  	default i386
     6.6  
     6.7 +config X86
     6.8 +	bool
     6.9 +	default y
    6.10 +
    6.11  config MMU
    6.12  	bool
    6.13  	default y
     7.1 --- a/linux-2.6.11-xen-sparse/arch/xen/kernel/evtchn.c	Tue Apr 05 10:41:39 2005 +0000
     7.2 +++ b/linux-2.6.11-xen-sparse/arch/xen/kernel/evtchn.c	Wed Apr 06 08:37:09 2005 +0000
     7.3 @@ -81,8 +81,13 @@ extern fastcall unsigned int do_IRQ(stru
     7.4  #else
     7.5  extern asmlinkage unsigned int do_IRQ(struct pt_regs *regs);
     7.6  #endif
     7.7 +#if defined (__i386__)
     7.8 +#define IRQ_REG orig_eax
     7.9 +#elif defined (__x86_64__)
    7.10 +#define IRQ_REG orig_rax
    7.11 +#endif
    7.12  #define do_IRQ(irq, regs) do {		\
    7.13 -    (regs)->orig_eax = (irq);		\
    7.14 +    (regs)->IRQ_REG = (irq);		\
    7.15      do_IRQ((regs));			\
    7.16  } while (0)
    7.17  #endif
    7.18 @@ -102,7 +107,7 @@ void force_evtchn_callback(void)
    7.19  /* NB. Interrupts are disabled on entry. */
    7.20  asmlinkage void evtchn_do_upcall(struct pt_regs *regs)
    7.21  {
    7.22 -    unsigned long  l1, l2;
    7.23 +    u32 	   l1, l2;
    7.24      unsigned int   l1i, l2i, port;
    7.25      int            irq;
    7.26      shared_info_t *s = HYPERVISOR_shared_info;
     8.1 --- a/linux-2.6.11-xen-sparse/arch/xen/x86_64/Kconfig	Tue Apr 05 10:41:39 2005 +0000
     8.2 +++ b/linux-2.6.11-xen-sparse/arch/xen/x86_64/Kconfig	Wed Apr 06 08:37:09 2005 +0000
     8.3 @@ -13,6 +13,18 @@ config XENARCH
     8.4  	string
     8.5  	default x86_64
     8.6  
     8.7 +config X86_64
     8.8 +	bool
     8.9 +	default y
    8.10 +	help
    8.11 +	  Port to the x86-64 architecture. x86-64 is a 64-bit extension to the
    8.12 +	  classical 32-bit x86 architecture. For details see
    8.13 +	  <http://www.x86-64.org/>.
    8.14 +
    8.15 +config X86
    8.16 +	bool
    8.17 +	default y
    8.18 +
    8.19  config 64BIT
    8.20  	def_bool y
    8.21  
     9.1 --- a/linux-2.6.11-xen-sparse/arch/xen/x86_64/defconfig	Tue Apr 05 10:41:39 2005 +0000
     9.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.3 @@ -1,1249 +0,0 @@
     9.4 -#
     9.5 -# Automatically generated make config: don't edit
     9.6 -# Linux kernel version: 2.6.10-xen0
     9.7 -# Fri Mar 11 14:30:42 2005
     9.8 -#
     9.9 -CONFIG_XEN=y
    9.10 -CONFIG_ARCH_XEN=y
    9.11 -CONFIG_NO_IDLE_HZ=y
    9.12 -
    9.13 -#
    9.14 -# XEN
    9.15 -#
    9.16 -CONFIG_XEN_PRIVILEGED_GUEST=y
    9.17 -CONFIG_XEN_PHYSDEV_ACCESS=y
    9.18 -CONFIG_XEN_BLKDEV_BACKEND=y
    9.19 -CONFIG_XEN_NETDEV_BACKEND=y
    9.20 -CONFIG_XEN_BLKDEV_FRONTEND=y
    9.21 -CONFIG_XEN_NETDEV_FRONTEND=y
    9.22 -# CONFIG_XEN_NETDEV_FRONTEND_PIPELINED_TRANSMITTER is not set
    9.23 -# CONFIG_XEN_BLKDEV_TAP is not set
    9.24 -CONFIG_XEN_WRITABLE_PAGETABLES=y
    9.25 -CONFIG_XEN_SCRUB_PAGES=y
    9.26 -# CONFIG_XEN_X86 is not set
    9.27 -CONFIG_XEN_X86_64=y
    9.28 -CONFIG_HAVE_ARCH_DEV_ALLOC_SKB=y
    9.29 -
    9.30 -#
    9.31 -# Code maturity level options
    9.32 -#
    9.33 -CONFIG_EXPERIMENTAL=y
    9.34 -CONFIG_CLEAN_COMPILE=y
    9.35 -CONFIG_BROKEN_ON_SMP=y
    9.36 -
    9.37 -#
    9.38 -# General setup
    9.39 -#
    9.40 -CONFIG_LOCALVERSION=""
    9.41 -CONFIG_SWAP=y
    9.42 -CONFIG_SYSVIPC=y
    9.43 -CONFIG_POSIX_MQUEUE=y
    9.44 -CONFIG_BSD_PROCESS_ACCT=y
    9.45 -# CONFIG_BSD_PROCESS_ACCT_V3 is not set
    9.46 -CONFIG_SYSCTL=y
    9.47 -CONFIG_AUDIT=y
    9.48 -CONFIG_AUDITSYSCALL=y
    9.49 -CONFIG_LOG_BUF_SHIFT=14
    9.50 -# CONFIG_HOTPLUG is not set
    9.51 -CONFIG_KOBJECT_UEVENT=y
    9.52 -# CONFIG_IKCONFIG is not set
    9.53 -# CONFIG_EMBEDDED is not set
    9.54 -CONFIG_KALLSYMS=y
    9.55 -CONFIG_KALLSYMS_EXTRA_PASS=y
    9.56 -CONFIG_FUTEX=y
    9.57 -CONFIG_EPOLL=y
    9.58 -# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
    9.59 -CONFIG_SHMEM=y
    9.60 -CONFIG_CC_ALIGN_FUNCTIONS=0
    9.61 -CONFIG_CC_ALIGN_LABELS=0
    9.62 -CONFIG_CC_ALIGN_LOOPS=0
    9.63 -CONFIG_CC_ALIGN_JUMPS=0
    9.64 -# CONFIG_TINY_SHMEM is not set
    9.65 -
    9.66 -#
    9.67 -# Loadable module support
    9.68 -#
    9.69 -CONFIG_MODULES=y
    9.70 -CONFIG_MODULE_UNLOAD=y
    9.71 -# CONFIG_MODULE_FORCE_UNLOAD is not set
    9.72 -CONFIG_OBSOLETE_MODPARM=y
    9.73 -CONFIG_MODVERSIONS=y
    9.74 -# CONFIG_MODULE_SRCVERSION_ALL is not set
    9.75 -CONFIG_KMOD=y
    9.76 -CONFIG_XENARCH="x86_64"
    9.77 -CONFIG_MMU=y
    9.78 -CONFIG_GENERIC_ISA_DMA=y
    9.79 -CONFIG_GENERIC_IOMAP=y
    9.80 -# CONFIG_MK8 is not set
    9.81 -CONFIG_X86_CMPXCHG=y
    9.82 -CONFIG_X86_L1_CACHE_SHIFT=7
    9.83 -CONFIG_RWSEM_GENERIC_SPINLOCK=y
    9.84 -CONFIG_X86_GOOD_APIC=y
    9.85 -# CONFIG_HPET_TIMER is not set
    9.86 -# CONFIG_SMP is not set
    9.87 -# CONFIG_PREEMPT is not set
    9.88 -CONFIG_MICROCODE=y
    9.89 -CONFIG_X86_CPUID=y
    9.90 -# CONFIG_NUMA is not set
    9.91 -# CONFIG_MTRR is not set
    9.92 -CONFIG_PCI=y
    9.93 -CONFIG_PCI_DIRECT=y
    9.94 -# CONFIG_EARLY_PRINTK is not set
    9.95 -CONFIG_GENERIC_HARDIRQS=y
    9.96 -CONFIG_GENERIC_IRQ_PROBE=y
    9.97 -
    9.98 -#
    9.99 -# X86_64 processor configuration
   9.100 -#
   9.101 -CONFIG_X86_64=y
   9.102 -CONFIG_X86=y
   9.103 -CONFIG_64BIT=y
   9.104 -
   9.105 -#
   9.106 -# Processor type and features
   9.107 -#
   9.108 -# CONFIG_MPSC is not set
   9.109 -CONFIG_GENERIC_CPU=y
   9.110 -CONFIG_X86_L1_CACHE_BYTES=128
   9.111 -# CONFIG_X86_TSC is not set
   9.112 -# CONFIG_X86_MSR is not set
   9.113 -# CONFIG_GART_IOMMU is not set
   9.114 -CONFIG_DUMMY_IOMMU=y
   9.115 -# CONFIG_X86_MCE is not set
   9.116 -
   9.117 -#
   9.118 -# Power management options
   9.119 -#
   9.120 -# CONFIG_PM is not set
   9.121 -
   9.122 -#
   9.123 -# ACPI (Advanced Configuration and Power Interface) Support
   9.124 -#
   9.125 -# CONFIG_ACPI is not set
   9.126 -CONFIG_ACPI_BLACKLIST_YEAR=0
   9.127 -
   9.128 -#
   9.129 -# CPU Frequency scaling
   9.130 -#
   9.131 -# CONFIG_CPU_FREQ is not set
   9.132 -
   9.133 -#
   9.134 -# Bus options (PCI etc.)
   9.135 -#
   9.136 -# CONFIG_PCI_MMCONFIG is not set
   9.137 -# CONFIG_UNORDERED_IO is not set
   9.138 -
   9.139 -#
   9.140 -# Executable file formats / Emulations
   9.141 -#
   9.142 -# CONFIG_IA32_EMULATION is not set
   9.143 -
   9.144 -#
   9.145 -# Executable file formats
   9.146 -#
   9.147 -CONFIG_BINFMT_ELF=y
   9.148 -CONFIG_BINFMT_MISC=y
   9.149 -
   9.150 -#
   9.151 -# Device Drivers
   9.152 -#
   9.153 -
   9.154 -#
   9.155 -# Generic Driver Options
   9.156 -#
   9.157 -CONFIG_STANDALONE=y
   9.158 -# CONFIG_PREVENT_FIRMWARE_BUILD is not set
   9.159 -CONFIG_FW_LOADER=m
   9.160 -
   9.161 -#
   9.162 -# Memory Technology Devices (MTD)
   9.163 -#
   9.164 -# CONFIG_MTD is not set
   9.165 -
   9.166 -#
   9.167 -# Parallel port support
   9.168 -#
   9.169 -# CONFIG_PARPORT is not set
   9.170 -
   9.171 -#
   9.172 -# Plug and Play support
   9.173 -#
   9.174 -
   9.175 -#
   9.176 -# Block devices
   9.177 -#
   9.178 -# CONFIG_BLK_DEV_FD is not set
   9.179 -# CONFIG_BLK_CPQ_DA is not set
   9.180 -# CONFIG_BLK_CPQ_CISS_DA is not set
   9.181 -# CONFIG_BLK_DEV_DAC960 is not set
   9.182 -# CONFIG_BLK_DEV_UMEM is not set
   9.183 -CONFIG_BLK_DEV_LOOP=y
   9.184 -CONFIG_BLK_DEV_CRYPTOLOOP=m
   9.185 -CONFIG_BLK_DEV_NBD=m
   9.186 -# CONFIG_BLK_DEV_SX8 is not set
   9.187 -CONFIG_BLK_DEV_RAM=y
   9.188 -CONFIG_BLK_DEV_RAM_COUNT=16
   9.189 -CONFIG_BLK_DEV_RAM_SIZE=16384
   9.190 -CONFIG_BLK_DEV_INITRD=y
   9.191 -CONFIG_INITRAMFS_SOURCE=""
   9.192 -# CONFIG_LBD is not set
   9.193 -# CONFIG_CDROM_PKTCDVD is not set
   9.194 -
   9.195 -#
   9.196 -# IO Schedulers
   9.197 -#
   9.198 -CONFIG_IOSCHED_NOOP=y
   9.199 -CONFIG_IOSCHED_AS=y
   9.200 -CONFIG_IOSCHED_DEADLINE=y
   9.201 -CONFIG_IOSCHED_CFQ=y
   9.202 -
   9.203 -#
   9.204 -# ATA/ATAPI/MFM/RLL support
   9.205 -#
   9.206 -CONFIG_IDE=y
   9.207 -CONFIG_BLK_DEV_IDE=y
   9.208 -
   9.209 -#
   9.210 -# Please see Documentation/ide.txt for help/info on IDE drives
   9.211 -#
   9.212 -# CONFIG_BLK_DEV_IDE_SATA is not set
   9.213 -# CONFIG_BLK_DEV_HD_IDE is not set
   9.214 -CONFIG_BLK_DEV_IDEDISK=y
   9.215 -CONFIG_IDEDISK_MULTI_MODE=y
   9.216 -CONFIG_BLK_DEV_IDECD=y
   9.217 -# CONFIG_BLK_DEV_IDETAPE is not set
   9.218 -# CONFIG_BLK_DEV_IDEFLOPPY is not set
   9.219 -CONFIG_BLK_DEV_IDESCSI=y
   9.220 -# CONFIG_IDE_TASK_IOCTL is not set
   9.221 -
   9.222 -#
   9.223 -# IDE chipset support/bugfixes
   9.224 -#
   9.225 -CONFIG_IDE_GENERIC=y
   9.226 -# CONFIG_BLK_DEV_CMD640 is not set
   9.227 -CONFIG_BLK_DEV_IDEPCI=y
   9.228 -CONFIG_IDEPCI_SHARE_IRQ=y
   9.229 -# CONFIG_BLK_DEV_OFFBOARD is not set
   9.230 -CONFIG_BLK_DEV_GENERIC=y
   9.231 -# CONFIG_BLK_DEV_OPTI621 is not set
   9.232 -# CONFIG_BLK_DEV_RZ1000 is not set
   9.233 -CONFIG_BLK_DEV_IDEDMA_PCI=y
   9.234 -# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
   9.235 -CONFIG_IDEDMA_PCI_AUTO=y
   9.236 -# CONFIG_IDEDMA_ONLYDISK is not set
   9.237 -# CONFIG_BLK_DEV_AEC62XX is not set
   9.238 -# CONFIG_BLK_DEV_ALI15X3 is not set
   9.239 -# CONFIG_BLK_DEV_AMD74XX is not set
   9.240 -# CONFIG_BLK_DEV_ATIIXP is not set
   9.241 -# CONFIG_BLK_DEV_CMD64X is not set
   9.242 -# CONFIG_BLK_DEV_TRIFLEX is not set
   9.243 -# CONFIG_BLK_DEV_CY82C693 is not set
   9.244 -# CONFIG_BLK_DEV_CS5520 is not set
   9.245 -# CONFIG_BLK_DEV_CS5530 is not set
   9.246 -# CONFIG_BLK_DEV_HPT34X is not set
   9.247 -# CONFIG_BLK_DEV_HPT366 is not set
   9.248 -# CONFIG_BLK_DEV_SC1200 is not set
   9.249 -CONFIG_BLK_DEV_PIIX=y
   9.250 -# CONFIG_BLK_DEV_NS87415 is not set
   9.251 -# CONFIG_BLK_DEV_PDC202XX_OLD is not set
   9.252 -# CONFIG_BLK_DEV_PDC202XX_NEW is not set
   9.253 -# CONFIG_BLK_DEV_SVWKS is not set
   9.254 -# CONFIG_BLK_DEV_SIIMAGE is not set
   9.255 -# CONFIG_BLK_DEV_SIS5513 is not set
   9.256 -# CONFIG_BLK_DEV_SLC90E66 is not set
   9.257 -# CONFIG_BLK_DEV_TRM290 is not set
   9.258 -# CONFIG_BLK_DEV_VIA82CXXX is not set
   9.259 -# CONFIG_IDE_ARM is not set
   9.260 -CONFIG_BLK_DEV_IDEDMA=y
   9.261 -# CONFIG_IDEDMA_IVB is not set
   9.262 -CONFIG_IDEDMA_AUTO=y
   9.263 -# CONFIG_BLK_DEV_HD is not set
   9.264 -
   9.265 -#
   9.266 -# SCSI device support
   9.267 -#
   9.268 -CONFIG_SCSI=y
   9.269 -CONFIG_SCSI_PROC_FS=y
   9.270 -
   9.271 -#
   9.272 -# SCSI support type (disk, tape, CD-ROM)
   9.273 -#
   9.274 -CONFIG_BLK_DEV_SD=y
   9.275 -CONFIG_CHR_DEV_ST=m
   9.276 -CONFIG_CHR_DEV_OSST=m
   9.277 -CONFIG_BLK_DEV_SR=m
   9.278 -CONFIG_BLK_DEV_SR_VENDOR=y
   9.279 -CONFIG_CHR_DEV_SG=y
   9.280 -
   9.281 -#
   9.282 -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
   9.283 -#
   9.284 -# CONFIG_SCSI_MULTI_LUN is not set
   9.285 -CONFIG_SCSI_CONSTANTS=y
   9.286 -CONFIG_SCSI_LOGGING=y
   9.287 -
   9.288 -#
   9.289 -# SCSI Transport Attributes
   9.290 -#
   9.291 -CONFIG_SCSI_SPI_ATTRS=m
   9.292 -CONFIG_SCSI_FC_ATTRS=m
   9.293 -
   9.294 -#
   9.295 -# SCSI low-level drivers
   9.296 -#
   9.297 -# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
   9.298 -# CONFIG_SCSI_3W_9XXX is not set
   9.299 -# CONFIG_SCSI_ACARD is not set
   9.300 -# CONFIG_SCSI_AACRAID is not set
   9.301 -# CONFIG_SCSI_AIC7XXX is not set
   9.302 -# CONFIG_SCSI_AIC7XXX_OLD is not set
   9.303 -# CONFIG_SCSI_AIC79XX is not set
   9.304 -# CONFIG_MEGARAID_NEWGEN is not set
   9.305 -# CONFIG_MEGARAID_LEGACY is not set
   9.306 -CONFIG_SCSI_SATA=y
   9.307 -# CONFIG_SCSI_SATA_AHCI is not set
   9.308 -# CONFIG_SCSI_SATA_SVW is not set
   9.309 -CONFIG_SCSI_ATA_PIIX=y
   9.310 -# CONFIG_SCSI_SATA_NV is not set
   9.311 -# CONFIG_SCSI_SATA_PROMISE is not set
   9.312 -# CONFIG_SCSI_SATA_SX4 is not set
   9.313 -# CONFIG_SCSI_SATA_SIL is not set
   9.314 -# CONFIG_SCSI_SATA_SIS is not set
   9.315 -# CONFIG_SCSI_SATA_ULI is not set
   9.316 -# CONFIG_SCSI_SATA_VIA is not set
   9.317 -# CONFIG_SCSI_SATA_VITESSE is not set
   9.318 -# CONFIG_SCSI_BUSLOGIC is not set
   9.319 -# CONFIG_SCSI_DMX3191D is not set
   9.320 -# CONFIG_SCSI_EATA is not set
   9.321 -# CONFIG_SCSI_EATA_PIO is not set
   9.322 -# CONFIG_SCSI_FUTURE_DOMAIN is not set
   9.323 -# CONFIG_SCSI_GDTH is not set
   9.324 -# CONFIG_SCSI_IPS is not set
   9.325 -# CONFIG_SCSI_INITIO is not set
   9.326 -# CONFIG_SCSI_INIA100 is not set
   9.327 -# CONFIG_SCSI_SYM53C8XX_2 is not set
   9.328 -# CONFIG_SCSI_IPR is not set
   9.329 -# CONFIG_SCSI_QLOGIC_ISP is not set
   9.330 -# CONFIG_SCSI_QLOGIC_FC is not set
   9.331 -# CONFIG_SCSI_QLOGIC_1280 is not set
   9.332 -CONFIG_SCSI_QLA2XXX=y
   9.333 -# CONFIG_SCSI_QLA21XX is not set
   9.334 -# CONFIG_SCSI_QLA22XX is not set
   9.335 -# CONFIG_SCSI_QLA2300 is not set
   9.336 -# CONFIG_SCSI_QLA2322 is not set
   9.337 -# CONFIG_SCSI_QLA6312 is not set
   9.338 -# CONFIG_SCSI_QLA6322 is not set
   9.339 -# CONFIG_SCSI_DC395x is not set
   9.340 -# CONFIG_SCSI_DC390T is not set
   9.341 -# CONFIG_SCSI_DEBUG is not set
   9.342 -
   9.343 -#
   9.344 -# Multi-device support (RAID and LVM)
   9.345 -#
   9.346 -CONFIG_MD=y
   9.347 -CONFIG_BLK_DEV_MD=y
   9.348 -CONFIG_MD_LINEAR=m
   9.349 -CONFIG_MD_RAID0=m
   9.350 -CONFIG_MD_RAID1=m
   9.351 -CONFIG_MD_RAID10=m
   9.352 -CONFIG_MD_RAID5=m
   9.353 -CONFIG_MD_RAID6=m
   9.354 -CONFIG_MD_MULTIPATH=m
   9.355 -# CONFIG_MD_FAULTY is not set
   9.356 -CONFIG_BLK_DEV_DM=m
   9.357 -CONFIG_DM_CRYPT=m
   9.358 -CONFIG_DM_SNAPSHOT=m
   9.359 -CONFIG_DM_MIRROR=m
   9.360 -CONFIG_DM_ZERO=m
   9.361 -
   9.362 -#
   9.363 -# Fusion MPT device support
   9.364 -#
   9.365 -# CONFIG_FUSION is not set
   9.366 -
   9.367 -#
   9.368 -# IEEE 1394 (FireWire) support
   9.369 -#
   9.370 -# CONFIG_IEEE1394 is not set
   9.371 -
   9.372 -#
   9.373 -# I2O device support
   9.374 -#
   9.375 -# CONFIG_I2O is not set
   9.376 -
   9.377 -#
   9.378 -# Networking support
   9.379 -#
   9.380 -CONFIG_NET=y
   9.381 -
   9.382 -#
   9.383 -# Networking options
   9.384 -#
   9.385 -CONFIG_PACKET=y
   9.386 -CONFIG_PACKET_MMAP=y
   9.387 -CONFIG_NETLINK_DEV=y
   9.388 -CONFIG_UNIX=y
   9.389 -CONFIG_NET_KEY=m
   9.390 -CONFIG_INET=y
   9.391 -CONFIG_IP_MULTICAST=y
   9.392 -CONFIG_IP_ADVANCED_ROUTER=y
   9.393 -CONFIG_IP_MULTIPLE_TABLES=y
   9.394 -CONFIG_IP_ROUTE_FWMARK=y
   9.395 -CONFIG_IP_ROUTE_MULTIPATH=y
   9.396 -CONFIG_IP_ROUTE_VERBOSE=y
   9.397 -# CONFIG_IP_PNP is not set
   9.398 -CONFIG_NET_IPIP=m
   9.399 -CONFIG_NET_IPGRE=m
   9.400 -CONFIG_NET_IPGRE_BROADCAST=y
   9.401 -CONFIG_IP_MROUTE=y
   9.402 -CONFIG_IP_PIMSM_V1=y
   9.403 -CONFIG_IP_PIMSM_V2=y
   9.404 -# CONFIG_ARPD is not set
   9.405 -CONFIG_SYN_COOKIES=y
   9.406 -CONFIG_INET_AH=m
   9.407 -CONFIG_INET_ESP=m
   9.408 -CONFIG_INET_IPCOMP=m
   9.409 -CONFIG_INET_TUNNEL=m
   9.410 -CONFIG_IP_TCPDIAG=y
   9.411 -# CONFIG_IP_TCPDIAG_IPV6 is not set
   9.412 -
   9.413 -#
   9.414 -# IP: Virtual Server Configuration
   9.415 -#
   9.416 -CONFIG_IP_VS=m
   9.417 -# CONFIG_IP_VS_DEBUG is not set
   9.418 -CONFIG_IP_VS_TAB_BITS=12
   9.419 -
   9.420 -#
   9.421 -# IPVS transport protocol load balancing support
   9.422 -#
   9.423 -CONFIG_IP_VS_PROTO_TCP=y
   9.424 -CONFIG_IP_VS_PROTO_UDP=y
   9.425 -CONFIG_IP_VS_PROTO_ESP=y
   9.426 -CONFIG_IP_VS_PROTO_AH=y
   9.427 -
   9.428 -#
   9.429 -# IPVS scheduler
   9.430 -#
   9.431 -CONFIG_IP_VS_RR=m
   9.432 -CONFIG_IP_VS_WRR=m
   9.433 -CONFIG_IP_VS_LC=m
   9.434 -CONFIG_IP_VS_WLC=m
   9.435 -CONFIG_IP_VS_LBLC=m
   9.436 -CONFIG_IP_VS_LBLCR=m
   9.437 -CONFIG_IP_VS_DH=m
   9.438 -CONFIG_IP_VS_SH=m
   9.439 -CONFIG_IP_VS_SED=m
   9.440 -CONFIG_IP_VS_NQ=m
   9.441 -
   9.442 -#
   9.443 -# IPVS application helper
   9.444 -#
   9.445 -CONFIG_IP_VS_FTP=m
   9.446 -CONFIG_IPV6=m
   9.447 -CONFIG_IPV6_PRIVACY=y
   9.448 -CONFIG_INET6_AH=m
   9.449 -CONFIG_INET6_ESP=m
   9.450 -CONFIG_INET6_IPCOMP=m
   9.451 -CONFIG_INET6_TUNNEL=m
   9.452 -CONFIG_IPV6_TUNNEL=m
   9.453 -CONFIG_NETFILTER=y
   9.454 -# CONFIG_NETFILTER_DEBUG is not set
   9.455 -CONFIG_BRIDGE_NETFILTER=y
   9.456 -
   9.457 -#
   9.458 -# IP: Netfilter Configuration
   9.459 -#
   9.460 -CONFIG_IP_NF_CONNTRACK=m
   9.461 -CONFIG_IP_NF_CT_ACCT=y
   9.462 -# CONFIG_IP_NF_CONNTRACK_MARK is not set
   9.463 -CONFIG_IP_NF_CT_PROTO_SCTP=m
   9.464 -CONFIG_IP_NF_FTP=m
   9.465 -CONFIG_IP_NF_IRC=m
   9.466 -CONFIG_IP_NF_TFTP=m
   9.467 -CONFIG_IP_NF_AMANDA=m
   9.468 -CONFIG_IP_NF_QUEUE=m
   9.469 -CONFIG_IP_NF_IPTABLES=m
   9.470 -CONFIG_IP_NF_MATCH_LIMIT=m
   9.471 -CONFIG_IP_NF_MATCH_IPRANGE=m
   9.472 -CONFIG_IP_NF_MATCH_MAC=m
   9.473 -CONFIG_IP_NF_MATCH_PKTTYPE=m
   9.474 -CONFIG_IP_NF_MATCH_MARK=m
   9.475 -CONFIG_IP_NF_MATCH_MULTIPORT=m
   9.476 -CONFIG_IP_NF_MATCH_TOS=m
   9.477 -CONFIG_IP_NF_MATCH_RECENT=m
   9.478 -CONFIG_IP_NF_MATCH_ECN=m
   9.479 -CONFIG_IP_NF_MATCH_DSCP=m
   9.480 -CONFIG_IP_NF_MATCH_AH_ESP=m
   9.481 -CONFIG_IP_NF_MATCH_LENGTH=m
   9.482 -CONFIG_IP_NF_MATCH_TTL=m
   9.483 -CONFIG_IP_NF_MATCH_TCPMSS=m
   9.484 -CONFIG_IP_NF_MATCH_HELPER=m
   9.485 -CONFIG_IP_NF_MATCH_STATE=m
   9.486 -CONFIG_IP_NF_MATCH_CONNTRACK=m
   9.487 -CONFIG_IP_NF_MATCH_OWNER=m
   9.488 -CONFIG_IP_NF_MATCH_PHYSDEV=m
   9.489 -CONFIG_IP_NF_MATCH_ADDRTYPE=m
   9.490 -CONFIG_IP_NF_MATCH_REALM=m
   9.491 -CONFIG_IP_NF_MATCH_SCTP=m
   9.492 -CONFIG_IP_NF_MATCH_COMMENT=m
   9.493 -# CONFIG_IP_NF_MATCH_HASHLIMIT is not set
   9.494 -CONFIG_IP_NF_FILTER=m
   9.495 -CONFIG_IP_NF_TARGET_REJECT=m
   9.496 -CONFIG_IP_NF_TARGET_LOG=m
   9.497 -CONFIG_IP_NF_TARGET_ULOG=m
   9.498 -CONFIG_IP_NF_TARGET_TCPMSS=m
   9.499 -CONFIG_IP_NF_NAT=m
   9.500 -CONFIG_IP_NF_NAT_NEEDED=y
   9.501 -CONFIG_IP_NF_TARGET_MASQUERADE=m
   9.502 -CONFIG_IP_NF_TARGET_REDIRECT=m
   9.503 -CONFIG_IP_NF_TARGET_NETMAP=m
   9.504 -CONFIG_IP_NF_TARGET_SAME=m
   9.505 -CONFIG_IP_NF_NAT_LOCAL=y
   9.506 -CONFIG_IP_NF_NAT_SNMP_BASIC=m
   9.507 -CONFIG_IP_NF_NAT_IRC=m
   9.508 -CONFIG_IP_NF_NAT_FTP=m
   9.509 -CONFIG_IP_NF_NAT_TFTP=m
   9.510 -CONFIG_IP_NF_NAT_AMANDA=m
   9.511 -CONFIG_IP_NF_MANGLE=m
   9.512 -CONFIG_IP_NF_TARGET_TOS=m
   9.513 -CONFIG_IP_NF_TARGET_ECN=m
   9.514 -CONFIG_IP_NF_TARGET_DSCP=m
   9.515 -CONFIG_IP_NF_TARGET_MARK=m
   9.516 -CONFIG_IP_NF_TARGET_CLASSIFY=m
   9.517 -CONFIG_IP_NF_RAW=m
   9.518 -CONFIG_IP_NF_TARGET_NOTRACK=m
   9.519 -CONFIG_IP_NF_ARPTABLES=m
   9.520 -CONFIG_IP_NF_ARPFILTER=m
   9.521 -CONFIG_IP_NF_ARP_MANGLE=m
   9.522 -# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
   9.523 -# CONFIG_IP_NF_COMPAT_IPFWADM is not set
   9.524 -
   9.525 -#
   9.526 -# IPv6: Netfilter Configuration
   9.527 -#
   9.528 -# CONFIG_IP6_NF_QUEUE is not set
   9.529 -CONFIG_IP6_NF_IPTABLES=m
   9.530 -CONFIG_IP6_NF_MATCH_LIMIT=m
   9.531 -CONFIG_IP6_NF_MATCH_MAC=m
   9.532 -CONFIG_IP6_NF_MATCH_RT=m
   9.533 -CONFIG_IP6_NF_MATCH_OPTS=m
   9.534 -CONFIG_IP6_NF_MATCH_FRAG=m
   9.535 -CONFIG_IP6_NF_MATCH_HL=m
   9.536 -CONFIG_IP6_NF_MATCH_MULTIPORT=m
   9.537 -CONFIG_IP6_NF_MATCH_OWNER=m
   9.538 -CONFIG_IP6_NF_MATCH_MARK=m
   9.539 -CONFIG_IP6_NF_MATCH_IPV6HEADER=m
   9.540 -CONFIG_IP6_NF_MATCH_AHESP=m
   9.541 -CONFIG_IP6_NF_MATCH_LENGTH=m
   9.542 -CONFIG_IP6_NF_MATCH_EUI64=m
   9.543 -CONFIG_IP6_NF_MATCH_PHYSDEV=m
   9.544 -CONFIG_IP6_NF_FILTER=m
   9.545 -CONFIG_IP6_NF_TARGET_LOG=m
   9.546 -CONFIG_IP6_NF_MANGLE=m
   9.547 -CONFIG_IP6_NF_TARGET_MARK=m
   9.548 -CONFIG_IP6_NF_RAW=m
   9.549 -
   9.550 -#
   9.551 -# Bridge: Netfilter Configuration
   9.552 -#
   9.553 -CONFIG_BRIDGE_NF_EBTABLES=m
   9.554 -CONFIG_BRIDGE_EBT_BROUTE=m
   9.555 -CONFIG_BRIDGE_EBT_T_FILTER=m
   9.556 -CONFIG_BRIDGE_EBT_T_NAT=m
   9.557 -CONFIG_BRIDGE_EBT_802_3=m
   9.558 -CONFIG_BRIDGE_EBT_AMONG=m
   9.559 -CONFIG_BRIDGE_EBT_ARP=m
   9.560 -CONFIG_BRIDGE_EBT_IP=m
   9.561 -CONFIG_BRIDGE_EBT_LIMIT=m
   9.562 -CONFIG_BRIDGE_EBT_MARK=m
   9.563 -CONFIG_BRIDGE_EBT_PKTTYPE=m
   9.564 -CONFIG_BRIDGE_EBT_STP=m
   9.565 -CONFIG_BRIDGE_EBT_VLAN=m
   9.566 -CONFIG_BRIDGE_EBT_ARPREPLY=m
   9.567 -CONFIG_BRIDGE_EBT_DNAT=m
   9.568 -CONFIG_BRIDGE_EBT_MARK_T=m
   9.569 -CONFIG_BRIDGE_EBT_REDIRECT=m
   9.570 -CONFIG_BRIDGE_EBT_SNAT=m
   9.571 -CONFIG_BRIDGE_EBT_LOG=m
   9.572 -CONFIG_XFRM=y
   9.573 -CONFIG_XFRM_USER=y
   9.574 -
   9.575 -#
   9.576 -# SCTP Configuration (EXPERIMENTAL)
   9.577 -#
   9.578 -CONFIG_IP_SCTP=m
   9.579 -# CONFIG_SCTP_DBG_MSG is not set
   9.580 -# CONFIG_SCTP_DBG_OBJCNT is not set
   9.581 -# CONFIG_SCTP_HMAC_NONE is not set
   9.582 -# CONFIG_SCTP_HMAC_SHA1 is not set
   9.583 -CONFIG_SCTP_HMAC_MD5=y
   9.584 -CONFIG_ATM=m
   9.585 -CONFIG_ATM_CLIP=m
   9.586 -# CONFIG_ATM_CLIP_NO_ICMP is not set
   9.587 -CONFIG_ATM_LANE=m
   9.588 -# CONFIG_ATM_MPOA is not set
   9.589 -CONFIG_ATM_BR2684=m
   9.590 -# CONFIG_ATM_BR2684_IPFILTER is not set
   9.591 -CONFIG_BRIDGE=m
   9.592 -CONFIG_VLAN_8021Q=m
   9.593 -# CONFIG_DECNET is not set
   9.594 -CONFIG_LLC=m
   9.595 -# CONFIG_LLC2 is not set
   9.596 -CONFIG_IPX=m
   9.597 -# CONFIG_IPX_INTERN is not set
   9.598 -CONFIG_ATALK=m
   9.599 -CONFIG_DEV_APPLETALK=y
   9.600 -CONFIG_IPDDP=m
   9.601 -CONFIG_IPDDP_ENCAP=y
   9.602 -CONFIG_IPDDP_DECAP=y
   9.603 -# CONFIG_X25 is not set
   9.604 -# CONFIG_LAPB is not set
   9.605 -CONFIG_NET_DIVERT=y
   9.606 -# CONFIG_ECONET is not set
   9.607 -CONFIG_WAN_ROUTER=m
   9.608 -
   9.609 -#
   9.610 -# QoS and/or fair queueing
   9.611 -#
   9.612 -CONFIG_NET_SCHED=y
   9.613 -CONFIG_NET_SCH_CLK_JIFFIES=y
   9.614 -# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
   9.615 -# CONFIG_NET_SCH_CLK_CPU is not set
   9.616 -CONFIG_NET_SCH_CBQ=m
   9.617 -CONFIG_NET_SCH_HTB=m
   9.618 -CONFIG_NET_SCH_HFSC=m
   9.619 -CONFIG_NET_SCH_ATM=m
   9.620 -CONFIG_NET_SCH_PRIO=m
   9.621 -CONFIG_NET_SCH_RED=m
   9.622 -CONFIG_NET_SCH_SFQ=m
   9.623 -CONFIG_NET_SCH_TEQL=m
   9.624 -CONFIG_NET_SCH_TBF=m
   9.625 -CONFIG_NET_SCH_GRED=m
   9.626 -CONFIG_NET_SCH_DSMARK=m
   9.627 -CONFIG_NET_SCH_NETEM=m
   9.628 -CONFIG_NET_SCH_INGRESS=m
   9.629 -CONFIG_NET_QOS=y
   9.630 -CONFIG_NET_ESTIMATOR=y
   9.631 -CONFIG_NET_CLS=y
   9.632 -CONFIG_NET_CLS_TCINDEX=m
   9.633 -CONFIG_NET_CLS_ROUTE4=m
   9.634 -CONFIG_NET_CLS_ROUTE=y
   9.635 -CONFIG_NET_CLS_FW=m
   9.636 -CONFIG_NET_CLS_U32=m
   9.637 -CONFIG_CLS_U32_PERF=y
   9.638 -CONFIG_NET_CLS_IND=y
   9.639 -CONFIG_NET_CLS_RSVP=m
   9.640 -CONFIG_NET_CLS_RSVP6=m
   9.641 -# CONFIG_NET_CLS_ACT is not set
   9.642 -CONFIG_NET_CLS_POLICE=y
   9.643 -
   9.644 -#
   9.645 -# Network testing
   9.646 -#
   9.647 -# CONFIG_NET_PKTGEN is not set
   9.648 -CONFIG_NETPOLL=y
   9.649 -# CONFIG_NETPOLL_RX is not set
   9.650 -CONFIG_NETPOLL_TRAP=y
   9.651 -CONFIG_NET_POLL_CONTROLLER=y
   9.652 -# CONFIG_HAMRADIO is not set
   9.653 -CONFIG_IRDA=m
   9.654 -
   9.655 -#
   9.656 -# IrDA protocols
   9.657 -#
   9.658 -CONFIG_IRLAN=m
   9.659 -CONFIG_IRNET=m
   9.660 -CONFIG_IRCOMM=m
   9.661 -# CONFIG_IRDA_ULTRA is not set
   9.662 -
   9.663 -#
   9.664 -# IrDA options
   9.665 -#
   9.666 -CONFIG_IRDA_CACHE_LAST_LSAP=y
   9.667 -CONFIG_IRDA_FAST_RR=y
   9.668 -# CONFIG_IRDA_DEBUG is not set
   9.669 -
   9.670 -#
   9.671 -# Infrared-port device drivers
   9.672 -#
   9.673 -
   9.674 -#
   9.675 -# SIR device drivers
   9.676 -#
   9.677 -CONFIG_IRTTY_SIR=m
   9.678 -
   9.679 -#
   9.680 -# Dongle support
   9.681 -#
   9.682 -CONFIG_DONGLE=y
   9.683 -CONFIG_ESI_DONGLE=m
   9.684 -CONFIG_ACTISYS_DONGLE=m
   9.685 -CONFIG_TEKRAM_DONGLE=m
   9.686 -CONFIG_LITELINK_DONGLE=m
   9.687 -CONFIG_MA600_DONGLE=m
   9.688 -CONFIG_GIRBIL_DONGLE=m
   9.689 -CONFIG_MCP2120_DONGLE=m
   9.690 -CONFIG_OLD_BELKIN_DONGLE=m
   9.691 -CONFIG_ACT200L_DONGLE=m
   9.692 -
   9.693 -#
   9.694 -# Old SIR device drivers
   9.695 -#
   9.696 -# CONFIG_IRPORT_SIR is not set
   9.697 -
   9.698 -#
   9.699 -# Old Serial dongle support
   9.700 -#
   9.701 -
   9.702 -#
   9.703 -# FIR device drivers
   9.704 -#
   9.705 -# CONFIG_VLSI_FIR is not set
   9.706 -CONFIG_BT=m
   9.707 -CONFIG_BT_L2CAP=m
   9.708 -CONFIG_BT_SCO=m
   9.709 -CONFIG_BT_RFCOMM=m
   9.710 -CONFIG_BT_RFCOMM_TTY=y
   9.711 -CONFIG_BT_BNEP=m
   9.712 -CONFIG_BT_BNEP_MC_FILTER=y
   9.713 -CONFIG_BT_BNEP_PROTO_FILTER=y
   9.714 -CONFIG_BT_HIDP=m
   9.715 -
   9.716 -#
   9.717 -# Bluetooth device drivers
   9.718 -#
   9.719 -CONFIG_BT_HCIUART=m
   9.720 -CONFIG_BT_HCIUART_H4=y
   9.721 -CONFIG_BT_HCIUART_BCSP=y
   9.722 -CONFIG_BT_HCIUART_BCSP_TXCRC=y
   9.723 -CONFIG_BT_HCIVHCI=m
   9.724 -CONFIG_NETDEVICES=y
   9.725 -CONFIG_DUMMY=m
   9.726 -CONFIG_BONDING=m
   9.727 -CONFIG_EQUALIZER=m
   9.728 -CONFIG_TUN=m
   9.729 -CONFIG_ETHERTAP=m
   9.730 -
   9.731 -#
   9.732 -# ARCnet devices
   9.733 -#
   9.734 -# CONFIG_ARCNET is not set
   9.735 -
   9.736 -#
   9.737 -# Ethernet (10 or 100Mbit)
   9.738 -#
   9.739 -CONFIG_NET_ETHERNET=y
   9.740 -CONFIG_MII=y
   9.741 -# CONFIG_HAPPYMEAL is not set
   9.742 -# CONFIG_SUNGEM is not set
   9.743 -# CONFIG_NET_VENDOR_3COM is not set
   9.744 -
   9.745 -#
   9.746 -# Tulip family network device support
   9.747 -#
   9.748 -# CONFIG_NET_TULIP is not set
   9.749 -CONFIG_HP100=y
   9.750 -CONFIG_NET_PCI=y
   9.751 -# CONFIG_PCNET32 is not set
   9.752 -# CONFIG_AMD8111_ETH is not set
   9.753 -# CONFIG_ADAPTEC_STARFIRE is not set
   9.754 -# CONFIG_B44 is not set
   9.755 -# CONFIG_FORCEDETH is not set
   9.756 -# CONFIG_DGRS is not set
   9.757 -# CONFIG_EEPRO100 is not set
   9.758 -CONFIG_E100=y
   9.759 -# CONFIG_E100_NAPI is not set
   9.760 -# CONFIG_FEALNX is not set
   9.761 -# CONFIG_NATSEMI is not set
   9.762 -# CONFIG_NE2K_PCI is not set
   9.763 -# CONFIG_8139CP is not set
   9.764 -# CONFIG_8139TOO is not set
   9.765 -# CONFIG_SIS900 is not set
   9.766 -# CONFIG_EPIC100 is not set
   9.767 -# CONFIG_SUNDANCE is not set
   9.768 -# CONFIG_VIA_RHINE is not set
   9.769 -
   9.770 -#
   9.771 -# Ethernet (1000 Mbit)
   9.772 -#
   9.773 -# CONFIG_ACENIC is not set
   9.774 -# CONFIG_DL2K is not set
   9.775 -CONFIG_E1000=y
   9.776 -# CONFIG_E1000_NAPI is not set
   9.777 -# CONFIG_NS83820 is not set
   9.778 -# CONFIG_HAMACHI is not set
   9.779 -# CONFIG_YELLOWFIN is not set
   9.780 -# CONFIG_R8169 is not set
   9.781 -# CONFIG_SK98LIN is not set
   9.782 -# CONFIG_VIA_VELOCITY is not set
   9.783 -# CONFIG_TIGON3 is not set
   9.784 -
   9.785 -#
   9.786 -# Ethernet (10000 Mbit)
   9.787 -#
   9.788 -# CONFIG_IXGB is not set
   9.789 -# CONFIG_S2IO is not set
   9.790 -
   9.791 -#
   9.792 -# Token Ring devices
   9.793 -#
   9.794 -# CONFIG_TR is not set
   9.795 -
   9.796 -#
   9.797 -# Wireless LAN (non-hamradio)
   9.798 -#
   9.799 -CONFIG_NET_RADIO=y
   9.800 -
   9.801 -#
   9.802 -# Obsolete Wireless cards support (pre-802.11)
   9.803 -#
   9.804 -# CONFIG_STRIP is not set
   9.805 -
   9.806 -#
   9.807 -# Wireless 802.11b ISA/PCI cards support
   9.808 -#
   9.809 -# CONFIG_HERMES is not set
   9.810 -CONFIG_ATMEL=m
   9.811 -# CONFIG_PCI_ATMEL is not set
   9.812 -
   9.813 -#
   9.814 -# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
   9.815 -#
   9.816 -CONFIG_NET_WIRELESS=y
   9.817 -
   9.818 -#
   9.819 -# Wan interfaces
   9.820 -#
   9.821 -# CONFIG_WAN is not set
   9.822 -
   9.823 -#
   9.824 -# ATM drivers
   9.825 -#
   9.826 -CONFIG_ATM_TCP=m
   9.827 -# CONFIG_ATM_LANAI is not set
   9.828 -# CONFIG_ATM_ENI is not set
   9.829 -# CONFIG_ATM_FIRESTREAM is not set
   9.830 -# CONFIG_ATM_ZATM is not set
   9.831 -# CONFIG_ATM_IDT77252 is not set
   9.832 -# CONFIG_ATM_AMBASSADOR is not set
   9.833 -# CONFIG_ATM_HORIZON is not set
   9.834 -# CONFIG_ATM_FORE200E_MAYBE is not set
   9.835 -# CONFIG_ATM_HE is not set
   9.836 -# CONFIG_FDDI is not set
   9.837 -# CONFIG_HIPPI is not set
   9.838 -CONFIG_PPP=m
   9.839 -CONFIG_PPP_MULTILINK=y
   9.840 -CONFIG_PPP_FILTER=y
   9.841 -CONFIG_PPP_ASYNC=m
   9.842 -CONFIG_PPP_SYNC_TTY=m
   9.843 -CONFIG_PPP_DEFLATE=m
   9.844 -# CONFIG_PPP_BSDCOMP is not set
   9.845 -CONFIG_PPPOE=m
   9.846 -CONFIG_PPPOATM=m
   9.847 -CONFIG_SLIP=m
   9.848 -CONFIG_SLIP_COMPRESSED=y
   9.849 -CONFIG_SLIP_SMART=y
   9.850 -# CONFIG_SLIP_MODE_SLIP6 is not set
   9.851 -# CONFIG_NET_FC is not set
   9.852 -# CONFIG_SHAPER is not set
   9.853 -CONFIG_NETCONSOLE=m
   9.854 -
   9.855 -#
   9.856 -# ISDN subsystem
   9.857 -#
   9.858 -# CONFIG_ISDN is not set
   9.859 -
   9.860 -#
   9.861 -# Telephony Support
   9.862 -#
   9.863 -# CONFIG_PHONE is not set
   9.864 -
   9.865 -#
   9.866 -# Input device support
   9.867 -#
   9.868 -CONFIG_INPUT=y
   9.869 -
   9.870 -#
   9.871 -# Userland interfaces
   9.872 -#
   9.873 -CONFIG_INPUT_MOUSEDEV=y
   9.874 -CONFIG_INPUT_MOUSEDEV_PSAUX=y
   9.875 -CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
   9.876 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
   9.877 -# CONFIG_INPUT_JOYDEV is not set
   9.878 -# CONFIG_INPUT_TSDEV is not set
   9.879 -# CONFIG_INPUT_EVDEV is not set
   9.880 -# CONFIG_INPUT_EVBUG is not set
   9.881 -
   9.882 -#
   9.883 -# Input I/O drivers
   9.884 -#
   9.885 -# CONFIG_GAMEPORT is not set
   9.886 -CONFIG_SOUND_GAMEPORT=y
   9.887 -CONFIG_SERIO=y
   9.888 -CONFIG_SERIO_I8042=y
   9.889 -CONFIG_SERIO_SERPORT=y
   9.890 -# CONFIG_SERIO_CT82C710 is not set
   9.891 -# CONFIG_SERIO_PCIPS2 is not set
   9.892 -# CONFIG_SERIO_RAW is not set
   9.893 -
   9.894 -#
   9.895 -# Input Device Drivers
   9.896 -#
   9.897 -CONFIG_INPUT_KEYBOARD=y
   9.898 -CONFIG_KEYBOARD_ATKBD=y
   9.899 -# CONFIG_KEYBOARD_SUNKBD is not set
   9.900 -# CONFIG_KEYBOARD_LKKBD is not set
   9.901 -# CONFIG_KEYBOARD_XTKBD is not set
   9.902 -# CONFIG_KEYBOARD_NEWTON is not set
   9.903 -CONFIG_INPUT_MOUSE=y
   9.904 -CONFIG_MOUSE_PS2=y
   9.905 -# CONFIG_MOUSE_SERIAL is not set
   9.906 -# CONFIG_MOUSE_VSXXXAA is not set
   9.907 -# CONFIG_INPUT_JOYSTICK is not set
   9.908 -# CONFIG_INPUT_TOUCHSCREEN is not set
   9.909 -# CONFIG_INPUT_MISC is not set
   9.910 -
   9.911 -#
   9.912 -# Character devices
   9.913 -#
   9.914 -CONFIG_VT=y
   9.915 -CONFIG_VT_CONSOLE=y
   9.916 -CONFIG_HW_CONSOLE=y
   9.917 -# CONFIG_SERIAL_NONSTANDARD is not set
   9.918 -
   9.919 -#
   9.920 -# Serial drivers
   9.921 -#
   9.922 -# CONFIG_SERIAL_8250 is not set
   9.923 -
   9.924 -#
   9.925 -# Non-8250 serial port support
   9.926 -#
   9.927 -CONFIG_UNIX98_PTYS=y
   9.928 -CONFIG_LEGACY_PTYS=y
   9.929 -CONFIG_LEGACY_PTY_COUNT=256
   9.930 -
   9.931 -#
   9.932 -# IPMI
   9.933 -#
   9.934 -# CONFIG_IPMI_HANDLER is not set
   9.935 -
   9.936 -#
   9.937 -# Watchdog Cards
   9.938 -#
   9.939 -# CONFIG_WATCHDOG is not set
   9.940 -# CONFIG_HW_RANDOM is not set
   9.941 -# CONFIG_NVRAM is not set
   9.942 -# CONFIG_RTC is not set
   9.943 -# CONFIG_GEN_RTC is not set
   9.944 -# CONFIG_DTLK is not set
   9.945 -# CONFIG_R3964 is not set
   9.946 -# CONFIG_APPLICOM is not set
   9.947 -
   9.948 -#
   9.949 -# Ftape, the floppy tape device driver
   9.950 -#
   9.951 -# CONFIG_FTAPE is not set
   9.952 -# CONFIG_AGP is not set
   9.953 -# CONFIG_DRM is not set
   9.954 -# CONFIG_MWAVE is not set
   9.955 -# CONFIG_RAW_DRIVER is not set
   9.956 -# CONFIG_HANGCHECK_TIMER is not set
   9.957 -
   9.958 -#
   9.959 -# I2C support
   9.960 -#
   9.961 -# CONFIG_I2C is not set
   9.962 -
   9.963 -#
   9.964 -# Dallas's 1-wire bus
   9.965 -#
   9.966 -# CONFIG_W1 is not set
   9.967 -
   9.968 -#
   9.969 -# Misc devices
   9.970 -#
   9.971 -# CONFIG_IBM_ASM is not set
   9.972 -
   9.973 -#
   9.974 -# Multimedia devices
   9.975 -#
   9.976 -# CONFIG_VIDEO_DEV is not set
   9.977 -
   9.978 -#
   9.979 -# Digital Video Broadcasting Devices
   9.980 -#
   9.981 -# CONFIG_DVB is not set
   9.982 -
   9.983 -#
   9.984 -# Graphics support
   9.985 -#
   9.986 -# CONFIG_FB is not set
   9.987 -# CONFIG_VIDEO_SELECT is not set
   9.988 -
   9.989 -#
   9.990 -# Console display driver support
   9.991 -#
   9.992 -CONFIG_VGA_CONSOLE=y
   9.993 -CONFIG_DUMMY_CONSOLE=y
   9.994 -
   9.995 -#
   9.996 -# Sound
   9.997 -#
   9.998 -# CONFIG_SOUND is not set
   9.999 -
  9.1000 -#
  9.1001 -# USB support
  9.1002 -#
  9.1003 -# CONFIG_USB is not set
  9.1004 -CONFIG_USB_ARCH_HAS_HCD=y
  9.1005 -CONFIG_USB_ARCH_HAS_OHCI=y
  9.1006 -
  9.1007 -#
  9.1008 -# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
  9.1009 -#
  9.1010 -
  9.1011 -#
  9.1012 -# USB Gadget Support
  9.1013 -#
  9.1014 -# CONFIG_USB_GADGET is not set
  9.1015 -
  9.1016 -#
  9.1017 -# File systems
  9.1018 -#
  9.1019 -# CONFIG_EXT2_FS is not set
  9.1020 -CONFIG_EXT3_FS=y
  9.1021 -CONFIG_EXT3_FS_XATTR=y
  9.1022 -CONFIG_EXT3_FS_POSIX_ACL=y
  9.1023 -CONFIG_EXT3_FS_SECURITY=y
  9.1024 -CONFIG_JBD=y
  9.1025 -# CONFIG_JBD_DEBUG is not set
  9.1026 -CONFIG_FS_MBCACHE=y
  9.1027 -# CONFIG_REISERFS_FS is not set
  9.1028 -# CONFIG_JFS_FS is not set
  9.1029 -CONFIG_FS_POSIX_ACL=y
  9.1030 -# CONFIG_XFS_FS is not set
  9.1031 -# CONFIG_MINIX_FS is not set
  9.1032 -# CONFIG_ROMFS_FS is not set
  9.1033 -# CONFIG_QUOTA is not set
  9.1034 -CONFIG_DNOTIFY=y
  9.1035 -# CONFIG_AUTOFS_FS is not set
  9.1036 -# CONFIG_AUTOFS4_FS is not set
  9.1037 -
  9.1038 -#
  9.1039 -# CD-ROM/DVD Filesystems
  9.1040 -#
  9.1041 -CONFIG_ISO9660_FS=y
  9.1042 -CONFIG_JOLIET=y
  9.1043 -CONFIG_ZISOFS=y
  9.1044 -CONFIG_ZISOFS_FS=y
  9.1045 -CONFIG_UDF_FS=m
  9.1046 -CONFIG_UDF_NLS=y
  9.1047 -
  9.1048 -#
  9.1049 -# DOS/FAT/NT Filesystems
  9.1050 -#
  9.1051 -CONFIG_FAT_FS=m
  9.1052 -CONFIG_MSDOS_FS=m
  9.1053 -CONFIG_VFAT_FS=m
  9.1054 -CONFIG_FAT_DEFAULT_CODEPAGE=437
  9.1055 -CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
  9.1056 -# CONFIG_NTFS_FS is not set
  9.1057 -
  9.1058 -#
  9.1059 -# Pseudo filesystems
  9.1060 -#
  9.1061 -CONFIG_PROC_FS=y
  9.1062 -# CONFIG_PROC_KCORE is not set
  9.1063 -CONFIG_SYSFS=y
  9.1064 -# CONFIG_DEVFS_FS is not set
  9.1065 -CONFIG_DEVPTS_FS_XATTR=y
  9.1066 -CONFIG_DEVPTS_FS_SECURITY=y
  9.1067 -CONFIG_TMPFS=y
  9.1068 -CONFIG_TMPFS_XATTR=y
  9.1069 -CONFIG_TMPFS_SECURITY=y
  9.1070 -# CONFIG_HUGETLBFS is not set
  9.1071 -# CONFIG_HUGETLB_PAGE is not set
  9.1072 -CONFIG_RAMFS=y
  9.1073 -
  9.1074 -#
  9.1075 -# Miscellaneous filesystems
  9.1076 -#
  9.1077 -# CONFIG_ADFS_FS is not set
  9.1078 -CONFIG_AFFS_FS=m
  9.1079 -CONFIG_HFS_FS=m
  9.1080 -CONFIG_HFSPLUS_FS=m
  9.1081 -CONFIG_BEFS_FS=m
  9.1082 -# CONFIG_BEFS_DEBUG is not set
  9.1083 -CONFIG_BFS_FS=m
  9.1084 -CONFIG_EFS_FS=m
  9.1085 -CONFIG_CRAMFS=m
  9.1086 -CONFIG_VXFS_FS=m
  9.1087 -# CONFIG_HPFS_FS is not set
  9.1088 -CONFIG_QNX4FS_FS=m
  9.1089 -# CONFIG_QNX4FS_RW is not set
  9.1090 -CONFIG_SYSV_FS=m
  9.1091 -CONFIG_UFS_FS=m
  9.1092 -# CONFIG_UFS_FS_WRITE is not set
  9.1093 -
  9.1094 -#
  9.1095 -# Network File Systems
  9.1096 -#
  9.1097 -CONFIG_NFS_FS=m
  9.1098 -CONFIG_NFS_V3=y
  9.1099 -CONFIG_NFS_V4=y
  9.1100 -CONFIG_NFS_DIRECTIO=y
  9.1101 -CONFIG_NFSD=m
  9.1102 -CONFIG_NFSD_V3=y
  9.1103 -CONFIG_NFSD_V4=y
  9.1104 -CONFIG_NFSD_TCP=y
  9.1105 -CONFIG_LOCKD=m
  9.1106 -CONFIG_LOCKD_V4=y
  9.1107 -CONFIG_EXPORTFS=m
  9.1108 -CONFIG_SUNRPC=m
  9.1109 -CONFIG_SUNRPC_GSS=m
  9.1110 -CONFIG_RPCSEC_GSS_KRB5=m
  9.1111 -CONFIG_RPCSEC_GSS_SPKM3=m
  9.1112 -CONFIG_SMB_FS=m
  9.1113 -# CONFIG_SMB_NLS_DEFAULT is not set
  9.1114 -CONFIG_CIFS=m
  9.1115 -# CONFIG_CIFS_STATS is not set
  9.1116 -CONFIG_CIFS_XATTR=y
  9.1117 -CONFIG_CIFS_POSIX=y
  9.1118 -# CONFIG_CIFS_EXPERIMENTAL is not set
  9.1119 -CONFIG_NCP_FS=m
  9.1120 -CONFIG_NCPFS_PACKET_SIGNING=y
  9.1121 -CONFIG_NCPFS_IOCTL_LOCKING=y
  9.1122 -CONFIG_NCPFS_STRONG=y
  9.1123 -CONFIG_NCPFS_NFS_NS=y
  9.1124 -CONFIG_NCPFS_OS2_NS=y
  9.1125 -CONFIG_NCPFS_SMALLDOS=y
  9.1126 -CONFIG_NCPFS_NLS=y
  9.1127 -CONFIG_NCPFS_EXTRAS=y
  9.1128 -# CONFIG_CODA_FS is not set
  9.1129 -# CONFIG_AFS_FS is not set
  9.1130 -
  9.1131 -#
  9.1132 -# Partition Types
  9.1133 -#
  9.1134 -CONFIG_PARTITION_ADVANCED=y
  9.1135 -# CONFIG_ACORN_PARTITION is not set
  9.1136 -CONFIG_OSF_PARTITION=y
  9.1137 -# CONFIG_AMIGA_PARTITION is not set
  9.1138 -# CONFIG_ATARI_PARTITION is not set
  9.1139 -CONFIG_MAC_PARTITION=y
  9.1140 -CONFIG_MSDOS_PARTITION=y
  9.1141 -CONFIG_BSD_DISKLABEL=y
  9.1142 -CONFIG_MINIX_SUBPARTITION=y
  9.1143 -CONFIG_SOLARIS_X86_PARTITION=y
  9.1144 -CONFIG_UNIXWARE_DISKLABEL=y
  9.1145 -# CONFIG_LDM_PARTITION is not set
  9.1146 -CONFIG_SGI_PARTITION=y
  9.1147 -# CONFIG_ULTRIX_PARTITION is not set
  9.1148 -CONFIG_SUN_PARTITION=y
  9.1149 -CONFIG_EFI_PARTITION=y
  9.1150 -
  9.1151 -#
  9.1152 -# Native Language Support
  9.1153 -#
  9.1154 -CONFIG_NLS=y
  9.1155 -CONFIG_NLS_DEFAULT="utf8"
  9.1156 -CONFIG_NLS_CODEPAGE_437=y
  9.1157 -CONFIG_NLS_CODEPAGE_737=m
  9.1158 -CONFIG_NLS_CODEPAGE_775=m
  9.1159 -CONFIG_NLS_CODEPAGE_850=m
  9.1160 -CONFIG_NLS_CODEPAGE_852=m
  9.1161 -CONFIG_NLS_CODEPAGE_855=m
  9.1162 -CONFIG_NLS_CODEPAGE_857=m
  9.1163 -CONFIG_NLS_CODEPAGE_860=m
  9.1164 -CONFIG_NLS_CODEPAGE_861=m
  9.1165 -CONFIG_NLS_CODEPAGE_862=m
  9.1166 -CONFIG_NLS_CODEPAGE_863=m
  9.1167 -CONFIG_NLS_CODEPAGE_864=m
  9.1168 -CONFIG_NLS_CODEPAGE_865=m
  9.1169 -CONFIG_NLS_CODEPAGE_866=m
  9.1170 -CONFIG_NLS_CODEPAGE_869=m
  9.1171 -CONFIG_NLS_CODEPAGE_936=m
  9.1172 -CONFIG_NLS_CODEPAGE_950=m
  9.1173 -CONFIG_NLS_CODEPAGE_932=m
  9.1174 -CONFIG_NLS_CODEPAGE_949=m
  9.1175 -CONFIG_NLS_CODEPAGE_874=m
  9.1176 -CONFIG_NLS_ISO8859_8=m
  9.1177 -CONFIG_NLS_CODEPAGE_1250=m
  9.1178 -CONFIG_NLS_CODEPAGE_1251=m
  9.1179 -CONFIG_NLS_ASCII=y
  9.1180 -CONFIG_NLS_ISO8859_1=m
  9.1181 -CONFIG_NLS_ISO8859_2=m
  9.1182 -CONFIG_NLS_ISO8859_3=m
  9.1183 -CONFIG_NLS_ISO8859_4=m
  9.1184 -CONFIG_NLS_ISO8859_5=m
  9.1185 -CONFIG_NLS_ISO8859_6=m
  9.1186 -CONFIG_NLS_ISO8859_7=m
  9.1187 -CONFIG_NLS_ISO8859_9=m
  9.1188 -CONFIG_NLS_ISO8859_13=m
  9.1189 -CONFIG_NLS_ISO8859_14=m
  9.1190 -CONFIG_NLS_ISO8859_15=m
  9.1191 -CONFIG_NLS_KOI8_R=m
  9.1192 -CONFIG_NLS_KOI8_U=m
  9.1193 -CONFIG_NLS_UTF8=m
  9.1194 -
  9.1195 -#
  9.1196 -# Security options
  9.1197 -#
  9.1198 -# CONFIG_KEYS is not set
  9.1199 -CONFIG_SECURITY=y
  9.1200 -CONFIG_SECURITY_NETWORK=y
  9.1201 -CONFIG_SECURITY_CAPABILITIES=y
  9.1202 -# CONFIG_SECURITY_SECLVL is not set
  9.1203 -CONFIG_SECURITY_SELINUX=y
  9.1204 -CONFIG_SECURITY_SELINUX_BOOTPARAM=y
  9.1205 -CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=1
  9.1206 -CONFIG_SECURITY_SELINUX_DISABLE=y
  9.1207 -CONFIG_SECURITY_SELINUX_DEVELOP=y
  9.1208 -# CONFIG_SECURITY_SELINUX_MLS is not set
  9.1209 -
  9.1210 -#
  9.1211 -# Cryptographic options
  9.1212 -#
  9.1213 -CONFIG_CRYPTO=y
  9.1214 -CONFIG_CRYPTO_HMAC=y
  9.1215 -CONFIG_CRYPTO_NULL=m
  9.1216 -CONFIG_CRYPTO_MD4=m
  9.1217 -CONFIG_CRYPTO_MD5=m
  9.1218 -CONFIG_CRYPTO_SHA1=y
  9.1219 -CONFIG_CRYPTO_SHA256=m
  9.1220 -CONFIG_CRYPTO_SHA512=m
  9.1221 -CONFIG_CRYPTO_WP512=m
  9.1222 -CONFIG_CRYPTO_DES=m
  9.1223 -CONFIG_CRYPTO_BLOWFISH=m
  9.1224 -CONFIG_CRYPTO_TWOFISH=m
  9.1225 -CONFIG_CRYPTO_SERPENT=m
  9.1226 -# CONFIG_CRYPTO_AES is not set
  9.1227 -CONFIG_CRYPTO_CAST5=m
  9.1228 -CONFIG_CRYPTO_CAST6=m
  9.1229 -CONFIG_CRYPTO_TEA=m
  9.1230 -CONFIG_CRYPTO_ARC4=m
  9.1231 -CONFIG_CRYPTO_KHAZAD=m
  9.1232 -# CONFIG_CRYPTO_ANUBIS is not set
  9.1233 -CONFIG_CRYPTO_DEFLATE=m
  9.1234 -CONFIG_CRYPTO_MICHAEL_MIC=m
  9.1235 -CONFIG_CRYPTO_CRC32C=m
  9.1236 -# CONFIG_CRYPTO_TEST is not set
  9.1237 -
  9.1238 -#
  9.1239 -# Library routines
  9.1240 -#
  9.1241 -CONFIG_CRC_CCITT=m
  9.1242 -CONFIG_CRC32=y
  9.1243 -CONFIG_LIBCRC32C=m
  9.1244 -CONFIG_ZLIB_INFLATE=y
  9.1245 -CONFIG_ZLIB_DEFLATE=m
  9.1246 -
  9.1247 -#
  9.1248 -# Firmware Drivers
  9.1249 -#
  9.1250 -# CONFIG_EDD is not set
  9.1251 -# CONFIG_PCI_LEGACY_PROC is not set
  9.1252 -# CONFIG_PCI_NAMES is not set
    10.1 --- a/linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/entry.S	Tue Apr 05 10:41:39 2005 +0000
    10.2 +++ b/linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/entry.S	Wed Apr 06 08:37:09 2005 +0000
    10.3 @@ -336,7 +336,7 @@ badsys:
    10.4  ENTRY(int_ret_from_sys_call)	
    10.5          XEN_GET_VCPU_INFO(%r11)
    10.6          XEN_BLOCK_EVENTS(%r11)
    10.7 -	testb $1,SS-ARGOFFSET+4(%rsp)
    10.8 +	testb $3,CS-ARGOFFSET(%rsp)
    10.9          jnz 1f
   10.10          /* Need to set the proper %ss (not NULL) for ring 3 iretq */
   10.11          movl $__KERNEL_DS,SS-ARGOFFSET(%rsp)
    11.1 --- a/linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/ioport.c	Tue Apr 05 10:41:39 2005 +0000
    11.2 +++ b/linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/ioport.c	Wed Apr 06 08:37:09 2005 +0000
    11.3 @@ -16,7 +16,7 @@
    11.4  #include <linux/stddef.h>
    11.5  #include <linux/slab.h>
    11.6  #include <linux/thread_info.h>
    11.7 -#include <asm-xen/xen-public/dom0_ops.h>
    11.8 +#include <asm-xen/xen-public/physdev.h>
    11.9  
   11.10  /*
   11.11   * sys_iopl has to be used when you want to access the IO ports
   11.12 @@ -29,19 +29,15 @@
   11.13  asmlinkage long sys_iopl(unsigned int new_io_pl)
   11.14  {
   11.15          unsigned int old_io_pl = current->thread.io_pl;
   11.16 -        dom0_op_t op;
   11.17 +        physdev_op_t op;
   11.18  
   11.19  
   11.20  	if (new_io_pl > 3)
   11.21  		return -EINVAL;
   11.22 -	/* Trying to gain more privileges? */
   11.23 -	if (new_io_pl > old_io_pl) {
   11.24 -		if (!capable(CAP_SYS_RAWIO))
   11.25 -			return -EPERM;
   11.26 -	}
   11.27 -        
   11.28 -        if (!(xen_start_info.flags & SIF_PRIVILEGED))
   11.29 -                return -EPERM;
   11.30 +
   11.31 +	/* Need "raw I/O" privileges for direct port access. */
   11.32 +	if ((new_io_pl > old_io_pl) && !capable(CAP_SYS_RAWIO))
   11.33 +		return -EPERM;
   11.34  
   11.35  	/* Maintain OS privileges even if user attempts to relinquish them. */
   11.36  	if (new_io_pl == 0)
   11.37 @@ -51,13 +47,11 @@ asmlinkage long sys_iopl(unsigned int ne
   11.38  	current->thread.io_pl = new_io_pl;
   11.39  
   11.40  	/* Force the change at ring 0. */
   11.41 -	op.cmd           = DOM0_IOPL;
   11.42 -	op.u.iopl.domain = DOMID_SELF;
   11.43 -	op.u.iopl.iopl   = new_io_pl;
   11.44 -	HYPERVISOR_dom0_op(&op);
   11.45 +	op.cmd             = PHYSDEVOP_SET_IOPL;
   11.46 +	op.u.set_iopl.iopl = new_io_pl;
   11.47 +	HYPERVISOR_physdev_op(&op);
   11.48  
   11.49  	return 0;
   11.50 -        
   11.51  }
   11.52  
   11.53  /*
    12.1 --- a/linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/ldt.c	Tue Apr 05 10:41:39 2005 +0000
    12.2 +++ b/linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/ldt.c	Wed Apr 06 08:37:09 2005 +0000
    12.3 @@ -29,7 +29,6 @@ static void flush_ldt(void *null)
    12.4  {
    12.5          if (current->active_mm) {
    12.6                  load_LDT(&current->active_mm->context);
    12.7 -                flush_page_update_queue();
    12.8          }
    12.9  }
   12.10  #endif
   12.11 @@ -70,7 +69,6 @@ static int alloc_ldt(mm_context_t *pc, u
   12.12  		make_pages_readonly(pc->ldt, (pc->size * LDT_ENTRY_SIZE) /
   12.13  				    PAGE_SIZE);
   12.14  		load_LDT(pc);
   12.15 -		flush_page_update_queue();
   12.16  #ifdef CONFIG_SMP
   12.17  		mask = cpumask_of_cpu(smp_processor_id());
   12.18  		if (!cpus_equal(current->mm->cpu_vm_mask, mask))
   12.19 @@ -83,7 +81,6 @@ static int alloc_ldt(mm_context_t *pc, u
   12.20  	if (oldsize) {
   12.21  		make_pages_writable(oldldt, (oldsize * LDT_ENTRY_SIZE) /
   12.22  			PAGE_SIZE);
   12.23 -		flush_page_update_queue();
   12.24  		if (oldsize*LDT_ENTRY_SIZE > PAGE_SIZE)
   12.25  			vfree(oldldt);
   12.26  		else
   12.27 @@ -100,7 +97,6 @@ static inline int copy_ldt(mm_context_t 
   12.28  	memcpy(new->ldt, old->ldt, old->size*LDT_ENTRY_SIZE);
   12.29  	make_pages_readonly(new->ldt, (new->size * LDT_ENTRY_SIZE) /
   12.30  			    PAGE_SIZE);
   12.31 -	flush_page_update_queue();
   12.32  	return 0;
   12.33  }
   12.34  
   12.35 @@ -136,7 +132,6 @@ void destroy_context(struct mm_struct *m
   12.36  		make_pages_writable(mm->context.ldt, 
   12.37  				    (mm->context.size * LDT_ENTRY_SIZE) /
   12.38  				    PAGE_SIZE);
   12.39 -		flush_page_update_queue();
   12.40  		if (mm->context.size*LDT_ENTRY_SIZE > PAGE_SIZE)
   12.41  			vfree(mm->context.ldt);
   12.42  		else
    13.1 --- a/linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/pci-dma.c	Tue Apr 05 10:41:39 2005 +0000
    13.2 +++ b/linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/pci-dma.c	Wed Apr 06 08:37:09 2005 +0000
    13.3 @@ -97,10 +97,9 @@ xen_contig_memory(unsigned long vstart, 
    13.4  		pmd = pmd_offset(pud, (vstart + (i*PAGE_SIZE)));
    13.5  		pte = pte_offset_kernel(pmd, (vstart + (i*PAGE_SIZE)));
    13.6  		pfn = pte->pte >> PAGE_SHIFT;
    13.7 -		queue_l1_entry_update(pte, 0);
    13.8 +		xen_l1_entry_update(pte, 0);
    13.9  		phys_to_machine_mapping[(__pa(vstart)>>PAGE_SHIFT)+i] =
   13.10  			(u32)INVALID_P2M_ENTRY;
   13.11 -		flush_page_update_queue();
   13.12  		if (HYPERVISOR_dom_mem_op(MEMOP_decrease_reservation, 
   13.13  					  &pfn, 1, 0) != 1) BUG();
   13.14  	}
   13.15 @@ -113,9 +112,9 @@ xen_contig_memory(unsigned long vstart, 
   13.16  		pud = pud_offset(pgd, (vstart + (i*PAGE_SIZE)));
   13.17  		pmd = pmd_offset(pud, (vstart + (i*PAGE_SIZE)));
   13.18  		pte = pte_offset_kernel(pmd, (vstart + (i*PAGE_SIZE)));
   13.19 -		queue_l1_entry_update(
   13.20 +		xen_l1_entry_update(
   13.21  			pte, ((pfn+i)<<PAGE_SHIFT)|__PAGE_KERNEL);
   13.22 -		queue_machphys_update(
   13.23 +		xen_machphys_update(
   13.24  			pfn+i, (__pa(vstart)>>PAGE_SHIFT)+i);
   13.25  		phys_to_machine_mapping[(__pa(vstart)>>PAGE_SHIFT)+i] =
   13.26  			pfn+i;
    14.1 --- a/linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/process.c	Tue Apr 05 10:41:39 2005 +0000
    14.2 +++ b/linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/process.c	Wed Apr 06 08:37:09 2005 +0000
    14.3 @@ -47,8 +47,8 @@
    14.4  #include <asm/pda.h>
    14.5  #include <asm/prctl.h>
    14.6  #include <asm/kdebug.h>
    14.7 -#include <asm-xen/multicall.h>
    14.8  #include <asm-xen/xen-public/dom0_ops.h>
    14.9 +#include <asm-xen/xen-public/physdev.h>
   14.10  #include <asm/desc.h>
   14.11  #include <asm/proto.h>
   14.12  #include <asm/hardirq.h>
   14.13 @@ -203,7 +203,7 @@ void exit_thread(void)
   14.14  
   14.15  void load_gs_index(unsigned gs)
   14.16  {
   14.17 -    __load_gs_index(gs);
   14.18 +	HYPERVISOR_set_segment_base(SEGBASE_GS_USER_SEL, gs);
   14.19  }
   14.20  
   14.21  void flush_thread(void)
   14.22 @@ -346,6 +346,14 @@ out:
   14.23  		HYPERVISOR_set_debugreg((register),	\
   14.24  			(thread->debugreg ## register))
   14.25  
   14.26 +
   14.27 +static inline void __save_init_fpu( struct task_struct *tsk )
   14.28 +{
   14.29 +	asm volatile( "rex64 ; fxsave %0 ; fnclex"
   14.30 +		      : "=m" (tsk->thread.i387.fxsave));
   14.31 +	tsk->thread_info->status &= ~TS_USEDFPU;
   14.32 +}
   14.33 +
   14.34  /*
   14.35   *	switch_to(x,y) should switch tasks from x to y.
   14.36   *
   14.37 @@ -359,61 +367,68 @@ struct task_struct *__switch_to(struct t
   14.38  				 *next = &next_p->thread;
   14.39  	int cpu = smp_processor_id();  
   14.40  	struct tss_struct *tss = &per_cpu(init_tss, cpu);
   14.41 -        dom0_op_t op;
   14.42 -
   14.43 -        /* NB. No need to disable interrupts as already done in sched.c */
   14.44 -        /* __cli(); */
   14.45 -
   14.46 -//	MULTICALL_flush_page_update_queue();
   14.47 -
   14.48 -	/* never put a printk in __switch_to... printk() calls wake_up*() indirectly */
   14.49 -
   14.50 +	physdev_op_t iopl_op, iobmp_op;
   14.51 +	multicall_entry_t _mcl[8], *mcl = _mcl;
   14.52 + 
   14.53  	/*
   14.54  	 * This is basically '__unlazy_fpu', except that we queue a
   14.55  	 * multicall to indicate FPU task switch, rather than
   14.56  	 * synchronously trapping to Xen.
   14.57  	 */
   14.58  	if (prev_p->thread_info->status & TS_USEDFPU) {
   14.59 -		save_init_fpu(prev_p);
   14.60 -		queue_multicall0(__HYPERVISOR_fpu_taskswitch);
   14.61 +		__save_init_fpu(prev_p); /* _not_ save_init_fpu() */
   14.62 +		mcl->op      = __HYPERVISOR_fpu_taskswitch;
   14.63 +		mcl->args[0] = 1;
   14.64 +		mcl++;
   14.65  	}
   14.66  
   14.67  	/*
   14.68  	 * Reload esp0, LDT and the page table pointer:
   14.69  	 */
   14.70  	tss->rsp0 = next->rsp0;
   14.71 -//	queue_multicall1(__HYPERVISOR_stack_switch, tss->rsp0);
   14.72 -	HYPERVISOR_stack_switch(__KERNEL_DS, tss->rsp0);
   14.73 +	mcl->op      = __HYPERVISOR_stack_switch;
   14.74 +	mcl->args[0] = __KERNEL_DS;
   14.75 +	mcl->args[1] = tss->rsp0;
   14.76 +	mcl++;
   14.77  
   14.78  	/*
   14.79  	 * Load the per-thread Thread-Local Storage descriptor.
   14.80  	 * This is load_TLS(next, cpu) with multicalls.
   14.81  	 */
   14.82  #define C(i) do {							\
   14.83 -          if (unlikely(next->tls_array[i] != prev->tls_array[i]))       \
   14.84 -            queue_multicall2(__HYPERVISOR_update_descriptor,            \
   14.85 -                             virt_to_machine(&get_cpu_gdt_table(cpu)    \
   14.86 -                                             [GDT_ENTRY_TLS_MIN + i]),  \
   14.87 -                             (unsigned long) &next->tls_array[i]);      \
   14.88 +	if (unlikely(next->tls_array[i] != prev->tls_array[i])) {	\
   14.89 +		mcl->op      = __HYPERVISOR_update_descriptor;		\
   14.90 +		mcl->args[0] = virt_to_machine(&get_cpu_gdt_table(cpu)	\
   14.91 +					       [GDT_ENTRY_TLS_MIN + i]); \
   14.92 +		mcl->args[1] = (unsigned long) ((u64 *) &next->tls_array[i]); \
   14.93 +		mcl->args[2] = (unsigned long) ((u64 *) &next->tls_array[i]); \
   14.94 +		mcl++;							\
   14.95 +	}								\
   14.96  } while (0)
   14.97  	C(0); C(1); C(2);
   14.98  #undef C
   14.99  
  14.100 -	if (xen_start_info.flags & SIF_PRIVILEGED) {
  14.101 -		op.cmd           = DOM0_IOPL;
  14.102 -		op.u.iopl.domain = DOMID_SELF;
  14.103 -		op.u.iopl.iopl   = next->io_pl;
  14.104 -		op.interface_version = DOM0_INTERFACE_VERSION;
  14.105 -		HYPERVISOR_dom0_op(&op);
  14.106 -#if 0
  14.107 -		queue_multicall1(__HYPERVISOR_dom0_op, (unsigned long)&op);
  14.108 -#endif
  14.109 +	if (unlikely(prev->io_pl != next->io_pl)) {
  14.110 +		iopl_op.cmd             = PHYSDEVOP_SET_IOPL;
  14.111 +		iopl_op.u.set_iopl.iopl = next->io_pl;
  14.112 +		mcl->op      = __HYPERVISOR_physdev_op;
  14.113 +		mcl->args[0] = (unsigned long)&iopl_op;
  14.114 +		mcl++;
  14.115  	}
  14.116  
  14.117 -	/* EXECUTE ALL TASK SWITCH XEN SYSCALLS AT THIS POINT. */
  14.118 -//	execute_multicall_list();
  14.119 -        /* __sti(); */
  14.120 +	if (unlikely(prev->io_bitmap_ptr || next->io_bitmap_ptr)) {
  14.121 +		iobmp_op.cmd                     =
  14.122 +			PHYSDEVOP_SET_IOBITMAP;
  14.123 +		iobmp_op.u.set_iobitmap.bitmap   =
  14.124 +			(unsigned long)next->io_bitmap_ptr;
  14.125 +		iobmp_op.u.set_iobitmap.nr_ports =
  14.126 +			next->io_bitmap_ptr ? IO_BITMAP_BITS : 0;
  14.127 +		mcl->op      = __HYPERVISOR_physdev_op;
  14.128 +		mcl->args[0] = (unsigned long)&iobmp_op;
  14.129 +		mcl++;
  14.130 +	}
  14.131  
  14.132 +	(void)HYPERVISOR_multicall(_mcl, mcl - _mcl);
  14.133  	/* 
  14.134  	 * Switch DS and ES.
  14.135  	 * This won't pick up thread selector changes, but I guess that is ok.
  14.136 @@ -485,25 +500,6 @@ struct task_struct *__switch_to(struct t
  14.137  		loaddebug(next, 7);
  14.138  	}
  14.139  
  14.140 -	/* 
  14.141 -	 * Handle the IO bitmap 
  14.142 -	 */ 
  14.143 -	if (unlikely(prev->io_bitmap_ptr || next->io_bitmap_ptr)) {
  14.144 -		if (next->io_bitmap_ptr)
  14.145 -			/*
  14.146 -			 * Copy the relevant range of the IO bitmap.
  14.147 -			 * Normally this is 128 bytes or less:
  14.148 - 			 */
  14.149 -			memcpy(tss->io_bitmap, next->io_bitmap_ptr,
  14.150 -				max(prev->io_bitmap_max, next->io_bitmap_max));
  14.151 -		else {
  14.152 -			/*
  14.153 -			 * Clear any possible leftover bits:
  14.154 -			 */
  14.155 -			memset(tss->io_bitmap, 0xff, prev->io_bitmap_max);
  14.156 -		}
  14.157 -	}
  14.158 -
  14.159  	return prev_p;
  14.160  }
  14.161  
    15.1 --- a/linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/setup.c	Tue Apr 05 10:41:39 2005 +0000
    15.2 +++ b/linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/setup.c	Wed Apr 06 08:37:09 2005 +0000
    15.3 @@ -58,7 +58,7 @@
    15.4  #include <asm/setup.h>
    15.5  #include <asm/mach_apic.h>
    15.6  #include <asm/numa.h>
    15.7 -
    15.8 +#include <asm-xen/xen-public/physdev.h>
    15.9  #include "setup_arch_pre.h"
   15.10  #include <asm-xen/hypervisor.h>
   15.11  
   15.12 @@ -604,7 +604,9 @@ static void __init print_memory_map(char
   15.13  void __init setup_arch(char **cmdline_p)
   15.14  {
   15.15  	unsigned long low_mem_size;
   15.16 -        int i,j;
   15.17 +	int i, j;
   15.18 +	physdev_op_t op;
   15.19 + 
   15.20  #if 0
   15.21   	ROOT_DEV = old_decode_dev(ORIG_ROOT_DEV);
   15.22  #else
   15.23 @@ -805,16 +807,6 @@ void __init setup_arch(char **cmdline_p)
   15.24          /* XXX Disable irqdebug until we have a way to avoid interrupt
   15.25  	 * conflicts. */
   15.26  /*	noirqdebug_setup(""); */
   15.27 -	/* If we are a privileged guest OS then we should request IO privs. */
   15.28 -	if (xen_start_info.flags & SIF_PRIVILEGED) {
   15.29 -		dom0_op_t op;
   15.30 -		op.cmd           = DOM0_IOPL;
   15.31 -		op.u.iopl.domain = DOMID_SELF;
   15.32 -		op.u.iopl.iopl   = 3;
   15.33 -		if (HYPERVISOR_dom0_op(&op) != 0)
   15.34 -			panic("Unable to obtain IOPL, despite SIF_PRIVILEGED");
   15.35 -		current->thread.io_pl = 3;
   15.36 -	}
   15.37  
   15.38  #ifdef CONFIG_XEN_PRIVILEGED_GUEST
   15.39  	/*
   15.40 @@ -843,9 +835,13 @@ void __init setup_arch(char **cmdline_p)
   15.41  		pci_mem_start = low_mem_size;
   15.42  
   15.43  #ifdef CONFIG_GART_IOMMU
   15.44 -       iommu_hole_init();
   15.45 +	iommu_hole_init();
   15.46  #endif
   15.47  
   15.48 +	op.cmd             = PHYSDEVOP_SET_IOPL;
   15.49 +	op.u.set_iopl.iopl = current->thread.io_pl = 1;
   15.50 +	HYPERVISOR_physdev_op(&op);
   15.51 +
   15.52  	if (xen_start_info.flags & SIF_INITDOMAIN) {
   15.53  		if (!(xen_start_info.flags & SIF_PRIVILEGED))
   15.54  			panic("Xen granted us console access "
    16.1 --- a/linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/setup64.c	Tue Apr 05 10:41:39 2005 +0000
    16.2 +++ b/linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/setup64.c	Wed Apr 06 08:37:09 2005 +0000
    16.3 @@ -218,7 +218,6 @@ void __init cpu_gdt_init(struct desc_ptr
    16.4  		frames[f] = virt_to_machine(va) >> PAGE_SHIFT;
    16.5  		make_page_readonly((void *)va);
    16.6  	}
    16.7 -	flush_page_update_queue();
    16.8  	if (HYPERVISOR_set_gdt(frames, gdt_descr->size /
    16.9                                 sizeof (struct desc_struct)))
   16.10  		BUG();
   16.11 @@ -328,9 +327,7 @@ void __init cpu_init (void)
   16.12  	enter_lazy_tlb(&init_mm, me);
   16.13  
   16.14  	load_LDT(&init_mm.context);
   16.15 -        flush_page_update_queue();
   16.16  
   16.17 -#if 0                         
   16.18  	/*
   16.19  	 * Clear all 6 debug registers:
   16.20  	 */
   16.21 @@ -339,7 +336,6 @@ void __init cpu_init (void)
   16.22  	CD(0); CD(1); CD(2); CD(3); /* no db4 and db5 */; CD(6); CD(7);
   16.23  
   16.24  #undef CD
   16.25 -#endif
   16.26  #if 0
   16.27  	fpu_init(); 
   16.28  #endif
    17.1 --- a/linux-2.6.11-xen-sparse/arch/xen/x86_64/mm/hypervisor.c	Tue Apr 05 10:41:39 2005 +0000
    17.2 +++ b/linux-2.6.11-xen-sparse/arch/xen/x86_64/mm/hypervisor.c	Wed Apr 06 08:37:09 2005 +0000
    17.3 @@ -38,552 +38,193 @@
    17.4  #include <linux/vmalloc.h>
    17.5  #include <asm/page.h>
    17.6  #include <asm/pgtable.h>
    17.7 +#include <asm/tlbflush.h>
    17.8  #include <asm-xen/hypervisor.h>
    17.9 -#include <asm-xen/multicall.h>
   17.10  #include <asm-xen/balloon.h>
   17.11  #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
   17.12  #include <linux/percpu.h>
   17.13  #endif
   17.14  
   17.15 -/*
   17.16 - * This suffices to protect us if we ever move to SMP domains.
   17.17 - * Further, it protects us against interrupts. At the very least, this is
   17.18 - * required for the network driver which flushes the update queue before
   17.19 - * pushing new receive buffers.
   17.20 - */
   17.21 -static spinlock_t update_lock = SPIN_LOCK_UNLOCKED;
   17.22 -
   17.23 -/* Linux 2.6 isn't using the traditional batched interface. */
   17.24 -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
   17.25 -#define QUEUE_SIZE 2048
   17.26 -#define pte_offset_kernel pte_offset
   17.27 -#else
   17.28 -#ifdef CONFIG_SMP
   17.29 -#define QUEUE_SIZE 1
   17.30 -#else
   17.31 -/* #define QUEUE_SIZE 128 */
   17.32 -#define QUEUE_SIZE 1
   17.33 -#endif
   17.34 -#endif
   17.35 -
   17.36 -DEFINE_PER_CPU(mmu_update_t, update_queue[QUEUE_SIZE]);
   17.37 -DEFINE_PER_CPU(unsigned int, mmu_update_queue_idx);
   17.38 -
   17.39 -/*
   17.40 - * MULTICALL_flush_page_update_queue:
   17.41 - *   This is a version of the flush which queues as part of a multicall.
   17.42 - */
   17.43 -void MULTICALL_flush_page_update_queue(void)
   17.44 -{
   17.45 -    int cpu = smp_processor_id();
   17.46 -    int idx;
   17.47 -    unsigned long flags;
   17.48 -    unsigned int _idx;
   17.49 -    spin_lock_irqsave(&update_lock, flags);
   17.50 -    idx = per_cpu(mmu_update_queue_idx, cpu);
   17.51 -    if ( (_idx = idx) != 0 ) 
   17.52 -    {
   17.53 -        per_cpu(mmu_update_queue_idx, cpu) = 0;
   17.54 -        wmb(); /* Make sure index is cleared first to avoid double updates. */
   17.55 -        queue_multicall3(__HYPERVISOR_mmu_update, 
   17.56 -                         (unsigned long)&per_cpu(update_queue[0], cpu), 
   17.57 -                         (unsigned long)_idx, 
   17.58 -                         (unsigned long)NULL);
   17.59 -    }
   17.60 -    spin_unlock_irqrestore(&update_lock, flags);
   17.61 -}
   17.62 -
   17.63 -static inline void __flush_page_update_queue(void)
   17.64 -{
   17.65 -    int cpu = smp_processor_id();
   17.66 -    unsigned int _idx = per_cpu(mmu_update_queue_idx, cpu);
   17.67 -    per_cpu(mmu_update_queue_idx, cpu) = 0;
   17.68 -    wmb(); /* Make sure index is cleared first to avoid double updates. */
   17.69 -    if ( unlikely(HYPERVISOR_mmu_update(&per_cpu(update_queue[0], cpu), _idx, NULL) < 0) )
   17.70 -    {
   17.71 -        printk(KERN_ALERT "Failed to execute MMU updates (returning to %lx)\n",
   17.72 -               (unsigned long)__builtin_return_address(0));
   17.73 -        BUG();
   17.74 -    }
   17.75 -}
   17.76 -
   17.77 -void _flush_page_update_queue(void)
   17.78 -{
   17.79 -    int cpu = smp_processor_id();
   17.80 -    unsigned long flags;
   17.81 -    spin_lock_irqsave(&update_lock, flags);
   17.82 -    if ( per_cpu(mmu_update_queue_idx, cpu) != 0 ) __flush_page_update_queue();
   17.83 -    spin_unlock_irqrestore(&update_lock, flags);
   17.84 -}
   17.85 -
   17.86 -static inline void increment_index(void)
   17.87 -{
   17.88 -    int cpu = smp_processor_id();
   17.89 -    per_cpu(mmu_update_queue_idx, cpu)++;
   17.90 -    if ( unlikely(per_cpu(mmu_update_queue_idx, cpu) == QUEUE_SIZE) ) __flush_page_update_queue();
   17.91 -}
   17.92 -
   17.93 -static inline void increment_index_and_flush(void)
   17.94 +void xen_l1_entry_update(pte_t *ptr, unsigned long val)
   17.95  {
   17.96 -    int cpu = smp_processor_id();
   17.97 -    per_cpu(mmu_update_queue_idx, cpu)++;
   17.98 -    __flush_page_update_queue();
   17.99 -}
  17.100 -
  17.101 -void queue_l1_entry_update(pte_t *ptr, unsigned long val)
  17.102 -{
  17.103 -    int cpu = smp_processor_id();
  17.104 -    int idx;
  17.105 -    unsigned long flags;
  17.106 -    spin_lock_irqsave(&update_lock, flags);
  17.107 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.108 -    per_cpu(update_queue[idx], cpu).ptr = virt_to_machine(ptr);
  17.109 -    per_cpu(update_queue[idx], cpu).val = val;
  17.110 -    increment_index();
  17.111 -    spin_unlock_irqrestore(&update_lock, flags);
  17.112 -}
  17.113 -
  17.114 -void queue_l2_entry_update(pmd_t *ptr, pmd_t val)
  17.115 -{
  17.116 -    int cpu = smp_processor_id();
  17.117 -    int idx;
  17.118 -    unsigned long flags;
  17.119 -    spin_lock_irqsave(&update_lock, flags);
  17.120 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.121 -    per_cpu(update_queue[idx], cpu).ptr = virt_to_machine(ptr);
  17.122 -    per_cpu(update_queue[idx], cpu).val = val.pmd;
  17.123 -    increment_index();
  17.124 -    spin_unlock_irqrestore(&update_lock, flags);
  17.125 -}
  17.126 -
  17.127 -
  17.128 -void queue_pt_switch(unsigned long ptr)
  17.129 -{
  17.130 -    int cpu = smp_processor_id();
  17.131 -    int idx;
  17.132 -    unsigned long flags;
  17.133 -    spin_lock_irqsave(&update_lock, flags);
  17.134 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.135 -    per_cpu(update_queue[idx], cpu).ptr  = phys_to_machine(ptr);
  17.136 -    per_cpu(update_queue[idx], cpu).ptr |= MMU_EXTENDED_COMMAND;
  17.137 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_NEW_BASEPTR;
  17.138 -    increment_index();
  17.139 -    spin_unlock_irqrestore(&update_lock, flags);
  17.140 -}
  17.141 -
  17.142 -void queue_tlb_flush(void)
  17.143 -{
  17.144 -    int cpu = smp_processor_id();
  17.145 -    int idx;
  17.146 -    unsigned long flags;
  17.147 -    spin_lock_irqsave(&update_lock, flags);
  17.148 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.149 -    per_cpu(update_queue[idx], cpu).ptr  = MMU_EXTENDED_COMMAND;
  17.150 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_TLB_FLUSH;
  17.151 -    increment_index();
  17.152 -    spin_unlock_irqrestore(&update_lock, flags);
  17.153 -}
  17.154 -
  17.155 -void queue_invlpg(unsigned long ptr)
  17.156 -{
  17.157 -    int cpu = smp_processor_id();
  17.158 -    int idx;
  17.159 -    unsigned long flags;
  17.160 -    spin_lock_irqsave(&update_lock, flags);
  17.161 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.162 -    per_cpu(update_queue[idx], cpu).ptr  = MMU_EXTENDED_COMMAND;
  17.163 -    per_cpu(update_queue[idx], cpu).ptr |= ptr & PAGE_MASK;
  17.164 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_INVLPG;
  17.165 -    increment_index();
  17.166 -    spin_unlock_irqrestore(&update_lock, flags);
  17.167 -}
  17.168 -
  17.169 -void queue_pgd_pin(unsigned long ptr)
  17.170 -{
  17.171 -    int cpu = smp_processor_id();
  17.172 -    int idx;
  17.173 -    unsigned long flags;
  17.174 -    spin_lock_irqsave(&update_lock, flags);
  17.175 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.176 -    per_cpu(update_queue[idx], cpu).ptr  = phys_to_machine(ptr);
  17.177 -    per_cpu(update_queue[idx], cpu).ptr |= MMU_EXTENDED_COMMAND;
  17.178 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_PIN_L4_TABLE;
  17.179 -    increment_index();
  17.180 -    spin_unlock_irqrestore(&update_lock, flags);
  17.181 +    mmu_update_t u;
  17.182 +    u.ptr = virt_to_machine(ptr);
  17.183 +    u.val = val;
  17.184 +    BUG_ON(HYPERVISOR_mmu_update(&u, 1, NULL, DOMID_SELF) < 0);
  17.185  }
  17.186  
  17.187 -void queue_pgd_unpin(unsigned long ptr)
  17.188 -{
  17.189 -    int cpu = smp_processor_id();
  17.190 -    int idx;
  17.191 -    unsigned long flags;
  17.192 -    spin_lock_irqsave(&update_lock, flags);
  17.193 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.194 -    per_cpu(update_queue[idx], cpu).ptr  = phys_to_machine(ptr);
  17.195 -    per_cpu(update_queue[idx], cpu).ptr |= MMU_EXTENDED_COMMAND;
  17.196 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_UNPIN_TABLE;
  17.197 -    increment_index();
  17.198 -    spin_unlock_irqrestore(&update_lock, flags);
  17.199 -}
  17.200 -
  17.201 -void queue_pud_pin(unsigned long ptr)
  17.202 -{
  17.203 -    int cpu = smp_processor_id();
  17.204 -    int idx;
  17.205 -    unsigned long flags;
  17.206 -    spin_lock_irqsave(&update_lock, flags);
  17.207 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.208 -    per_cpu(update_queue[idx], cpu).ptr  = phys_to_machine(ptr);
  17.209 -    per_cpu(update_queue[idx], cpu).ptr |= MMU_EXTENDED_COMMAND;
  17.210 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_PIN_L3_TABLE;
  17.211 -    increment_index();
  17.212 -    spin_unlock_irqrestore(&update_lock, flags);
  17.213 -}
  17.214 -
  17.215 -void queue_pud_unpin(unsigned long ptr)
  17.216 +void xen_l2_entry_update(pmd_t *ptr, pmd_t val)
  17.217  {
  17.218 -    int cpu = smp_processor_id();
  17.219 -    int idx;
  17.220 -    unsigned long flags;
  17.221 -    spin_lock_irqsave(&update_lock, flags);
  17.222 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.223 -    per_cpu(update_queue[idx], cpu).ptr  = phys_to_machine(ptr);
  17.224 -    per_cpu(update_queue[idx], cpu).ptr |= MMU_EXTENDED_COMMAND;
  17.225 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_UNPIN_TABLE;
  17.226 -    increment_index();
  17.227 -    spin_unlock_irqrestore(&update_lock, flags);
  17.228 -}
  17.229 -
  17.230 -void queue_pmd_pin(unsigned long ptr)
  17.231 -{
  17.232 -    int cpu = smp_processor_id();
  17.233 -    int idx;
  17.234 -    unsigned long flags;
  17.235 -    spin_lock_irqsave(&update_lock, flags);
  17.236 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.237 -    per_cpu(update_queue[idx], cpu).ptr  = phys_to_machine(ptr);
  17.238 -    per_cpu(update_queue[idx], cpu).ptr |= MMU_EXTENDED_COMMAND;
  17.239 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_PIN_L2_TABLE;
  17.240 -    increment_index();
  17.241 -    spin_unlock_irqrestore(&update_lock, flags);
  17.242 -}
  17.243 -
  17.244 -void queue_pmd_unpin(unsigned long ptr)
  17.245 -{
  17.246 -    int cpu = smp_processor_id();
  17.247 -    int idx;
  17.248 -    unsigned long flags;
  17.249 -    spin_lock_irqsave(&update_lock, flags);
  17.250 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.251 -    per_cpu(update_queue[idx], cpu).ptr  = phys_to_machine(ptr);
  17.252 -    per_cpu(update_queue[idx], cpu).ptr |= MMU_EXTENDED_COMMAND;
  17.253 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_UNPIN_TABLE;
  17.254 -    increment_index();
  17.255 -    spin_unlock_irqrestore(&update_lock, flags);
  17.256 -}
  17.257 -
  17.258 -void queue_pte_pin(unsigned long ptr)
  17.259 -{
  17.260 -    int cpu = smp_processor_id();
  17.261 -    int idx;
  17.262 -    unsigned long flags;
  17.263 -    spin_lock_irqsave(&update_lock, flags);
  17.264 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.265 -    per_cpu(update_queue[idx], cpu).ptr  = phys_to_machine(ptr);
  17.266 -    per_cpu(update_queue[idx], cpu).ptr |= MMU_EXTENDED_COMMAND;
  17.267 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_PIN_L1_TABLE;
  17.268 -    increment_index();
  17.269 -    spin_unlock_irqrestore(&update_lock, flags);
  17.270 +    mmu_update_t u;
  17.271 +    u.ptr = virt_to_machine(ptr);
  17.272 +    u.val = val.pmd;
  17.273 +    BUG_ON(HYPERVISOR_mmu_update(&u, 1, NULL, DOMID_SELF) < 0);
  17.274  }
  17.275  
  17.276 -void queue_pte_unpin(unsigned long ptr)
  17.277 -{
  17.278 -    int cpu = smp_processor_id();
  17.279 -    int idx;
  17.280 -    unsigned long flags;
  17.281 -    spin_lock_irqsave(&update_lock, flags);
  17.282 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.283 -    per_cpu(update_queue[idx], cpu).ptr  = phys_to_machine(ptr);
  17.284 -    per_cpu(update_queue[idx], cpu).ptr |= MMU_EXTENDED_COMMAND;
  17.285 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_UNPIN_TABLE;
  17.286 -    increment_index();
  17.287 -    spin_unlock_irqrestore(&update_lock, flags);
  17.288 -}
  17.289 -
  17.290 -void queue_set_ldt(unsigned long ptr, unsigned long len)
  17.291 +void xen_l3_entry_update(pud_t *ptr, pud_t val)
  17.292  {
  17.293 -    int cpu = smp_processor_id();
  17.294 -    int idx;
  17.295 -    unsigned long flags;
  17.296 -    spin_lock_irqsave(&update_lock, flags);
  17.297 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.298 -    per_cpu(update_queue[idx], cpu).ptr  = MMU_EXTENDED_COMMAND | ptr;
  17.299 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_SET_LDT | (len << MMUEXT_CMD_SHIFT);
  17.300 -    increment_index();
  17.301 -    spin_unlock_irqrestore(&update_lock, flags);
  17.302 -}
  17.303 -
  17.304 -void queue_machphys_update(unsigned long mfn, unsigned long pfn)
  17.305 -{
  17.306 -    int cpu = smp_processor_id();
  17.307 -    int idx;
  17.308 -    unsigned long flags;
  17.309 -    spin_lock_irqsave(&update_lock, flags);
  17.310 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.311 -    per_cpu(update_queue[idx], cpu).ptr = (mfn << PAGE_SHIFT) | MMU_MACHPHYS_UPDATE;
  17.312 -    per_cpu(update_queue[idx], cpu).val = pfn;
  17.313 -    increment_index();
  17.314 -    spin_unlock_irqrestore(&update_lock, flags);
  17.315 +    mmu_update_t u;
  17.316 +    u.ptr = virt_to_machine(ptr);
  17.317 +    u.val = val.pud;
  17.318 +    BUG_ON(HYPERVISOR_mmu_update(&u, 1, NULL, DOMID_SELF) < 0);
  17.319  }
  17.320  
  17.321 -/* queue and flush versions of the above */
  17.322 -void xen_l1_entry_update(pte_t *ptr, unsigned long val)
  17.323 -{
  17.324 -    int cpu = smp_processor_id();
  17.325 -    int idx;
  17.326 -    unsigned long flags;
  17.327 -    spin_lock_irqsave(&update_lock, flags);
  17.328 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.329 -    per_cpu(update_queue[idx], cpu).ptr = virt_to_machine(ptr);
  17.330 -    per_cpu(update_queue[idx], cpu).val = val;
  17.331 -    increment_index_and_flush();
  17.332 -    spin_unlock_irqrestore(&update_lock, flags);
  17.333 -}
  17.334 -
  17.335 -void xen_l2_entry_update(pmd_t *ptr, unsigned long val)
  17.336 +void xen_l4_entry_update(pgd_t *ptr, pgd_t val)
  17.337  {
  17.338 -    int cpu = smp_processor_id();
  17.339 -    int idx;
  17.340 -    unsigned long flags;
  17.341 -    spin_lock_irqsave(&update_lock, flags);
  17.342 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.343 -    per_cpu(update_queue[idx], cpu).ptr = virt_to_machine(ptr);
  17.344 -    per_cpu(update_queue[idx], cpu).val = val;
  17.345 -    increment_index_and_flush();
  17.346 -    spin_unlock_irqrestore(&update_lock, flags);
  17.347 -}
  17.348 -
  17.349 -void xen_l3_entry_update(pud_t *ptr, unsigned long val)
  17.350 -{
  17.351 -    int cpu = smp_processor_id();
  17.352 -    int idx;
  17.353 -    unsigned long flags;
  17.354 -    spin_lock_irqsave(&update_lock, flags);
  17.355 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.356 -    per_cpu(update_queue[idx], cpu).ptr = virt_to_machine(ptr);
  17.357 -    per_cpu(update_queue[idx], cpu).val = val;
  17.358 -    increment_index_and_flush();
  17.359 -    spin_unlock_irqrestore(&update_lock, flags);
  17.360 -}
  17.361 -
  17.362 -void xen_l4_entry_update(pgd_t *ptr, unsigned long val)
  17.363 -{
  17.364 -    int cpu = smp_processor_id();
  17.365 -    int idx;
  17.366 -    unsigned long flags;
  17.367 -    spin_lock_irqsave(&update_lock, flags);
  17.368 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.369 -    per_cpu(update_queue[idx], cpu).ptr = virt_to_machine(ptr);
  17.370 -    per_cpu(update_queue[idx], cpu).val = val;
  17.371 -    increment_index_and_flush();
  17.372 -    spin_unlock_irqrestore(&update_lock, flags);
  17.373 +    mmu_update_t u;
  17.374 +    u.ptr = virt_to_machine(ptr);
  17.375 +    u.val = val.pgd;
  17.376 +    BUG_ON(HYPERVISOR_mmu_update(&u, 1, NULL, DOMID_SELF) < 0);
  17.377  }
  17.378  
  17.379  void xen_pt_switch(unsigned long ptr)
  17.380  {
  17.381 -    int cpu = smp_processor_id();
  17.382 -    int idx;
  17.383 -    unsigned long flags;
  17.384 -    spin_lock_irqsave(&update_lock, flags);
  17.385 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.386 -    per_cpu(update_queue[idx], cpu).ptr  = phys_to_machine(ptr);
  17.387 -    per_cpu(update_queue[idx], cpu).ptr |= MMU_EXTENDED_COMMAND;
  17.388 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_NEW_BASEPTR;
  17.389 -    increment_index_and_flush();
  17.390 -    spin_unlock_irqrestore(&update_lock, flags);
  17.391 +    struct mmuext_op op;
  17.392 +    op.cmd = MMUEXT_NEW_BASEPTR;
  17.393 +    op.mfn = pfn_to_mfn(ptr >> PAGE_SHIFT);
  17.394 +    BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
  17.395  }
  17.396  
  17.397  void xen_new_user_pt(unsigned long ptr)
  17.398  {
  17.399 -    int cpu = smp_processor_id();
  17.400 -    int idx;
  17.401 -    unsigned long flags;
  17.402 -    spin_lock_irqsave(&update_lock, flags);
  17.403 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.404 -    per_cpu(update_queue[idx], cpu).ptr  = phys_to_machine(ptr);
  17.405 -    per_cpu(update_queue[idx], cpu).ptr |= MMU_EXTENDED_COMMAND;
  17.406 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_NEW_USER_BASEPTR;
  17.407 -    increment_index_and_flush();
  17.408 -    spin_unlock_irqrestore(&update_lock, flags);
  17.409 +    struct mmuext_op op;
  17.410 +    op.cmd = MMUEXT_NEW_USER_BASEPTR;
  17.411 +    op.mfn = pfn_to_mfn(ptr >> PAGE_SHIFT);
  17.412 +    BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
  17.413  }
  17.414  
  17.415  void xen_tlb_flush(void)
  17.416  {
  17.417 -    int cpu = smp_processor_id();
  17.418 -    int idx;
  17.419 -    unsigned long flags;
  17.420 -    spin_lock_irqsave(&update_lock, flags);
  17.421 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.422 -    per_cpu(update_queue[idx], cpu).ptr  = MMU_EXTENDED_COMMAND;
  17.423 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_TLB_FLUSH;
  17.424 -    increment_index_and_flush();
  17.425 -    spin_unlock_irqrestore(&update_lock, flags);
  17.426 +    struct mmuext_op op;
  17.427 +    op.cmd = MMUEXT_TLB_FLUSH_LOCAL;
  17.428 +    BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
  17.429  }
  17.430  
  17.431  void xen_invlpg(unsigned long ptr)
  17.432  {
  17.433 -    int cpu = smp_processor_id();
  17.434 -    int idx;
  17.435 -    unsigned long flags;
  17.436 -    spin_lock_irqsave(&update_lock, flags);
  17.437 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.438 -    per_cpu(update_queue[idx], cpu).ptr  = MMU_EXTENDED_COMMAND;
  17.439 -    per_cpu(update_queue[idx], cpu).ptr |= ptr & PAGE_MASK;
  17.440 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_INVLPG;
  17.441 -    increment_index_and_flush();
  17.442 -    spin_unlock_irqrestore(&update_lock, flags);
  17.443 +    struct mmuext_op op;
  17.444 +    op.cmd = MMUEXT_INVLPG_LOCAL;
  17.445 +    op.linear_addr = ptr & PAGE_MASK;
  17.446 +    BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
  17.447 +}
  17.448 +
  17.449 +#ifdef CONFIG_SMP
  17.450 +void xen_tlb_flush_all(void)
  17.451 +{
  17.452 +    struct mmuext_op op;
  17.453 +    op.cmd = MMUEXT_TLB_FLUSH_ALL;
  17.454 +    BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
  17.455  }
  17.456  
  17.457 +void xen_tlb_flush_mask(cpumask_t mask)
  17.458 +{
  17.459 +    struct mmuext_op op;
  17.460 +    op.cmd = MMUEXT_TLB_FLUSH_MULTI;
  17.461 +    op.cpuset = mask.bits[0];
  17.462 +    BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
  17.463 +}
  17.464 +
  17.465 +void xen_invlpg_all(unsigned long ptr)
  17.466 +{
  17.467 +    struct mmuext_op op;
  17.468 +    op.cmd = MMUEXT_INVLPG_ALL;
  17.469 +    op.linear_addr = ptr & PAGE_MASK;
  17.470 +    BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
  17.471 +}
  17.472 +
  17.473 +void xen_invlpg_mask(cpumask_t mask, unsigned long ptr)
  17.474 +{
  17.475 +    struct mmuext_op op;
  17.476 +    op.cmd = MMUEXT_INVLPG_MULTI;
  17.477 +    op.cpuset = mask.bits[0];
  17.478 +    op.linear_addr = ptr & PAGE_MASK;
  17.479 +    BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
  17.480 +}
  17.481 +#endif
  17.482 +
  17.483  void xen_pgd_pin(unsigned long ptr)
  17.484  {
  17.485 -    int cpu = smp_processor_id();
  17.486 -    int idx;
  17.487 -    unsigned long flags;
  17.488 -    spin_lock_irqsave(&update_lock, flags);
  17.489 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.490 -    per_cpu(update_queue[idx], cpu).ptr  = phys_to_machine(ptr);
  17.491 -    per_cpu(update_queue[idx], cpu).ptr |= MMU_EXTENDED_COMMAND;
  17.492 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_PIN_L4_TABLE;
  17.493 -    increment_index_and_flush();
  17.494 -    spin_unlock_irqrestore(&update_lock, flags);
  17.495 +    struct mmuext_op op;
  17.496 +    op.cmd = MMUEXT_PIN_L4_TABLE;
  17.497 +    op.mfn = pfn_to_mfn(ptr >> PAGE_SHIFT);
  17.498 +    BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
  17.499  }
  17.500  
  17.501  void xen_pgd_unpin(unsigned long ptr)
  17.502  {
  17.503 -    int cpu = smp_processor_id();
  17.504 -    int idx;
  17.505 -    unsigned long flags;
  17.506 -    spin_lock_irqsave(&update_lock, flags);
  17.507 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.508 -    per_cpu(update_queue[idx], cpu).ptr  = phys_to_machine(ptr);
  17.509 -    per_cpu(update_queue[idx], cpu).ptr |= MMU_EXTENDED_COMMAND;
  17.510 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_UNPIN_TABLE;
  17.511 -    increment_index_and_flush();
  17.512 -    spin_unlock_irqrestore(&update_lock, flags);
  17.513 +    struct mmuext_op op;
  17.514 +    op.cmd = MMUEXT_UNPIN_TABLE;
  17.515 +    op.mfn = pfn_to_mfn(ptr >> PAGE_SHIFT);
  17.516 +    BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
  17.517  }
  17.518  
  17.519  void xen_pud_pin(unsigned long ptr)
  17.520  {
  17.521 -    int cpu = smp_processor_id();
  17.522 -    int idx;
  17.523 -    unsigned long flags;
  17.524 -    spin_lock_irqsave(&update_lock, flags);
  17.525 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.526 -    per_cpu(update_queue[idx], cpu).ptr  = phys_to_machine(ptr);
  17.527 -    per_cpu(update_queue[idx], cpu).ptr |= MMU_EXTENDED_COMMAND;
  17.528 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_PIN_L3_TABLE;
  17.529 -    increment_index_and_flush();
  17.530 -    spin_unlock_irqrestore(&update_lock, flags);
  17.531 +    struct mmuext_op op;
  17.532 +    op.cmd = MMUEXT_PIN_L3_TABLE;
  17.533 +    op.mfn = pfn_to_mfn(ptr >> PAGE_SHIFT);
  17.534 +    BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
  17.535  }
  17.536  
  17.537  void xen_pud_unpin(unsigned long ptr)
  17.538  {
  17.539 -    int cpu = smp_processor_id();
  17.540 -    int idx;
  17.541 -    unsigned long flags;
  17.542 -    spin_lock_irqsave(&update_lock, flags);
  17.543 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.544 -    per_cpu(update_queue[idx], cpu).ptr  = phys_to_machine(ptr);
  17.545 -    per_cpu(update_queue[idx], cpu).ptr |= MMU_EXTENDED_COMMAND;
  17.546 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_UNPIN_TABLE;
  17.547 -    increment_index_and_flush();
  17.548 -    spin_unlock_irqrestore(&update_lock, flags);
  17.549 +    struct mmuext_op op;
  17.550 +    op.cmd = MMUEXT_UNPIN_TABLE;
  17.551 +    op.mfn = pfn_to_mfn(ptr >> PAGE_SHIFT);
  17.552 +    BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
  17.553  }
  17.554  
  17.555  void xen_pmd_pin(unsigned long ptr)
  17.556  {
  17.557 -    int cpu = smp_processor_id();
  17.558 -    int idx;
  17.559 -    unsigned long flags;
  17.560 -    spin_lock_irqsave(&update_lock, flags);
  17.561 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.562 -    per_cpu(update_queue[idx], cpu).ptr  = phys_to_machine(ptr);
  17.563 -    per_cpu(update_queue[idx], cpu).ptr |= MMU_EXTENDED_COMMAND;
  17.564 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_PIN_L2_TABLE;
  17.565 -    increment_index_and_flush();
  17.566 -    spin_unlock_irqrestore(&update_lock, flags);
  17.567 +    struct mmuext_op op;
  17.568 +    op.cmd = MMUEXT_PIN_L2_TABLE;
  17.569 +    op.mfn = pfn_to_mfn(ptr >> PAGE_SHIFT);
  17.570 +    BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
  17.571  }
  17.572  
  17.573  void xen_pmd_unpin(unsigned long ptr)
  17.574  {
  17.575 -    int cpu = smp_processor_id();
  17.576 -    int idx;
  17.577 -    unsigned long flags;
  17.578 -    spin_lock_irqsave(&update_lock, flags);
  17.579 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.580 -    per_cpu(update_queue[idx], cpu).ptr  = phys_to_machine(ptr);
  17.581 -    per_cpu(update_queue[idx], cpu).ptr |= MMU_EXTENDED_COMMAND;
  17.582 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_UNPIN_TABLE;
  17.583 -    increment_index_and_flush();
  17.584 -    spin_unlock_irqrestore(&update_lock, flags);
  17.585 +    struct mmuext_op op;
  17.586 +    op.cmd = MMUEXT_UNPIN_TABLE;
  17.587 +    op.mfn = pfn_to_mfn(ptr >> PAGE_SHIFT);
  17.588 +    BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
  17.589  }
  17.590  
  17.591  void xen_pte_pin(unsigned long ptr)
  17.592  {
  17.593 -    int cpu = smp_processor_id();
  17.594 -    int idx;
  17.595 -    unsigned long flags;
  17.596 -    spin_lock_irqsave(&update_lock, flags);
  17.597 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.598 -    per_cpu(update_queue[idx], cpu).ptr  = phys_to_machine(ptr);
  17.599 -    per_cpu(update_queue[idx], cpu).ptr |= MMU_EXTENDED_COMMAND;
  17.600 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_PIN_L1_TABLE;
  17.601 -    increment_index_and_flush();
  17.602 -    spin_unlock_irqrestore(&update_lock, flags);
  17.603 +    struct mmuext_op op;
  17.604 +    op.cmd = MMUEXT_PIN_L1_TABLE;
  17.605 +    op.mfn = pfn_to_mfn(ptr >> PAGE_SHIFT);
  17.606 +    BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
  17.607 +
  17.608  }
  17.609  
  17.610  void xen_pte_unpin(unsigned long ptr)
  17.611  {
  17.612 -    int cpu = smp_processor_id();
  17.613 -    int idx;
  17.614 -    unsigned long flags;
  17.615 -    spin_lock_irqsave(&update_lock, flags);
  17.616 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.617 -    per_cpu(update_queue[idx], cpu).ptr  = phys_to_machine(ptr);
  17.618 -    per_cpu(update_queue[idx], cpu).ptr |= MMU_EXTENDED_COMMAND;
  17.619 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_UNPIN_TABLE;
  17.620 -    increment_index_and_flush();
  17.621 -    spin_unlock_irqrestore(&update_lock, flags);
  17.622 +    struct mmuext_op op;
  17.623 +    op.cmd = MMUEXT_UNPIN_TABLE;
  17.624 +    op.mfn = pfn_to_mfn(ptr >> PAGE_SHIFT);
  17.625 +    BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
  17.626  }
  17.627  
  17.628  void xen_set_ldt(unsigned long ptr, unsigned long len)
  17.629  {
  17.630 -    int cpu = smp_processor_id();
  17.631 -    int idx;
  17.632 -    unsigned long flags;
  17.633 -    spin_lock_irqsave(&update_lock, flags);
  17.634 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.635 -    per_cpu(update_queue[idx], cpu).ptr  = MMU_EXTENDED_COMMAND | ptr;
  17.636 -    per_cpu(update_queue[idx], cpu).val  = MMUEXT_SET_LDT | (len << MMUEXT_CMD_SHIFT);
  17.637 -    increment_index_and_flush();
  17.638 -    spin_unlock_irqrestore(&update_lock, flags);
  17.639 +    struct mmuext_op op;
  17.640 +    op.cmd = MMUEXT_SET_LDT;
  17.641 +    op.linear_addr = ptr;
  17.642 +    op.nr_ents = len;
  17.643 +    BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
  17.644  }
  17.645  
  17.646  void xen_machphys_update(unsigned long mfn, unsigned long pfn)
  17.647  {
  17.648 -    int cpu = smp_processor_id();
  17.649 -    int idx;
  17.650 -    unsigned long flags;
  17.651 -    spin_lock_irqsave(&update_lock, flags);
  17.652 -    idx = per_cpu(mmu_update_queue_idx, cpu);
  17.653 -    per_cpu(update_queue[idx], cpu).ptr = (mfn << PAGE_SHIFT) | MMU_MACHPHYS_UPDATE;
  17.654 -    per_cpu(update_queue[idx], cpu).val = pfn;
  17.655 -    increment_index_and_flush();
  17.656 -    spin_unlock_irqrestore(&update_lock, flags);
  17.657 +    mmu_update_t u;
  17.658 +    u.ptr = (mfn << PAGE_SHIFT) | MMU_MACHPHYS_UPDATE;
  17.659 +    u.val = pfn;
  17.660 +    BUG_ON(HYPERVISOR_mmu_update(&u, 1, NULL, DOMID_SELF) < 0);
  17.661  }
  17.662  
  17.663  #ifdef CONFIG_XEN_PHYSDEV_ACCESS
  17.664 -
  17.665  unsigned long allocate_empty_lowmem_region(unsigned long pages)
  17.666  {
  17.667      pgd_t         *pgd;
  17.668 @@ -599,8 +240,6 @@ unsigned long allocate_empty_lowmem_regi
  17.669      if ( vstart == 0 )
  17.670          return 0UL;
  17.671  
  17.672 -    printk("vstart = %lx, order = %d\n", vstart, order);
  17.673 -
  17.674      scrub_pages(vstart, 1 << order);
  17.675  
  17.676      pfn_array = vmalloc((1<<order) * sizeof(*pfn_array));
  17.677 @@ -614,12 +253,12 @@ unsigned long allocate_empty_lowmem_regi
  17.678          pmd = pmd_offset(pud, (vstart + (i*PAGE_SIZE)));
  17.679          pte = pte_offset_kernel(pmd, (vstart + (i*PAGE_SIZE))); 
  17.680          pfn_array[i] = pte->pte >> PAGE_SHIFT;
  17.681 -        queue_l1_entry_update(pte, 0);
  17.682 +        xen_l1_entry_update(pte, 0);
  17.683          phys_to_machine_mapping[__pa(vstart)>>PAGE_SHIFT] = (u32)INVALID_P2M_ENTRY;
  17.684      }
  17.685  
  17.686      /* Flush updates through and flush the TLB. */
  17.687 -    xen_tlb_flush();
  17.688 +    flush_tlb_all();
  17.689  
  17.690      balloon_put_pages(pfn_array, 1 << order);
  17.691  
    18.1 --- a/linux-2.6.11-xen-sparse/arch/xen/x86_64/mm/init.c	Tue Apr 05 10:41:39 2005 +0000
    18.2 +++ b/linux-2.6.11-xen-sparse/arch/xen/x86_64/mm/init.c	Wed Apr 06 08:37:09 2005 +0000
    18.3 @@ -122,7 +122,7 @@ void make_page_readonly(void *va)
    18.4          pud = pud_offset(pgd, addr);
    18.5          pmd = pmd_offset(pud, addr);
    18.6          pte = pte_offset_kernel(pmd, addr);
    18.7 -        queue_l1_entry_update(pte, (*(unsigned long*)pte)&~_PAGE_RW);
    18.8 +        xen_l1_entry_update(pte, (*(unsigned long*)pte)&~_PAGE_RW);
    18.9  	__flush_tlb_one(addr);
   18.10  }
   18.11  
   18.12 @@ -140,7 +140,7 @@ void make_page_writable(void *va)
   18.13          pud = pud_offset(pgd, addr);
   18.14          pmd = pmd_offset(pud, addr);
   18.15          pte = pte_offset_kernel(pmd, addr);
   18.16 -        queue_l1_entry_update(pte, (*(unsigned long*)pte)|_PAGE_RW);
   18.17 +        xen_l1_entry_update(pte, (*(unsigned long*)pte)|_PAGE_RW);
   18.18  	__flush_tlb_one(addr);
   18.19  }
   18.20  
    19.1 --- a/linux-2.6.11-xen-sparse/arch/xen/x86_64/mm/ioremap.c	Tue Apr 05 10:41:39 2005 +0000
    19.2 +++ b/linux-2.6.11-xen-sparse/arch/xen/x86_64/mm/ioremap.c	Wed Apr 06 08:37:09 2005 +0000
    19.3 @@ -417,15 +417,7 @@ int direct_remap_area_pages(struct mm_st
    19.4  	int i;
    19.5  	unsigned long start_address;
    19.6  #define MAX_DIRECTMAP_MMU_QUEUE 130
    19.7 -	mmu_update_t u[MAX_DIRECTMAP_MMU_QUEUE], *w, *v;
    19.8 -
    19.9 -	v = w = &u[0];
   19.10 -	if (domid != DOMID_LOCAL) {
   19.11 -		u[0].ptr  = MMU_EXTENDED_COMMAND;
   19.12 -		u[0].val  = MMUEXT_SET_FOREIGNDOM;
   19.13 -		u[0].val |= (unsigned long)domid << 16;
   19.14 -		v = w = &u[1];
   19.15 -	}
   19.16 +	mmu_update_t u[MAX_DIRECTMAP_MMU_QUEUE], *v = u;
   19.17  
   19.18  	start_address = address;
   19.19  
   19.20 @@ -437,11 +429,11 @@ int direct_remap_area_pages(struct mm_st
   19.21  			__direct_remap_area_pages(mm,
   19.22  						  start_address, 
   19.23  						  address-start_address, 
   19.24 -						  w);
   19.25 +						  u);
   19.26   
   19.27 -			if (HYPERVISOR_mmu_update(u, v - u, NULL) < 0)
   19.28 +			if (HYPERVISOR_mmu_update(u, v - u, NULL, domid) < 0)
   19.29  				return -EFAULT;
   19.30 -			v = w;
   19.31 +			v = u;
   19.32  			start_address = address;
   19.33  		}
   19.34  
   19.35 @@ -456,13 +448,13 @@ int direct_remap_area_pages(struct mm_st
   19.36  		v++;
   19.37  	}
   19.38  
   19.39 -	if (v != w) {
   19.40 +	if (v != u) {
   19.41  		/* get the ptep's filled in */
   19.42  		__direct_remap_area_pages(mm,
   19.43  					  start_address, 
   19.44  					  address-start_address, 
   19.45 -					  w);
   19.46 -		if (unlikely(HYPERVISOR_mmu_update(u, v - u, NULL) < 0))
   19.47 +					  u);
   19.48 +		if (unlikely(HYPERVISOR_mmu_update(u, v - u, NULL, domid) < 0))
   19.49  			return -EFAULT;
   19.50  	}
   19.51  
    20.1 --- a/linux-2.6.11-xen-sparse/arch/xen/x86_64/mm/pageattr.c	Tue Apr 05 10:41:39 2005 +0000
    20.2 +++ b/linux-2.6.11-xen-sparse/arch/xen/x86_64/mm/pageattr.c	Wed Apr 06 08:37:09 2005 +0000
    20.3 @@ -23,7 +23,6 @@ void pte_free(struct page *pte)
    20.4  
    20.5          xen_pte_unpin(__pa(ptep));
    20.6          make_page_writable(ptep);
    20.7 -	flush_page_update_queue(); 
    20.8  	__free_page(pte); 
    20.9  }
   20.10  
    21.1 --- a/linux-2.6.11-xen-sparse/drivers/xen/privcmd/privcmd.c	Tue Apr 05 10:41:39 2005 +0000
    21.2 +++ b/linux-2.6.11-xen-sparse/drivers/xen/privcmd/privcmd.c	Wed Apr 06 08:37:09 2005 +0000
    21.3 @@ -49,6 +49,7 @@ static int privcmd_ioctl(struct inode *i
    21.4          if ( copy_from_user(&hypercall, (void *)data, sizeof(hypercall)) )
    21.5              return -EFAULT;
    21.6  
    21.7 +#if defined(__i386__)
    21.8          __asm__ __volatile__ (
    21.9              "pushl %%ebx; pushl %%ecx; pushl %%edx; pushl %%esi; pushl %%edi; "
   21.10              "movl  4(%%eax),%%ebx ;"
   21.11 @@ -60,7 +61,18 @@ static int privcmd_ioctl(struct inode *i
   21.12              TRAP_INSTR "; "
   21.13              "popl %%edi; popl %%esi; popl %%edx; popl %%ecx; popl %%ebx"
   21.14              : "=a" (ret) : "0" (&hypercall) : "memory" );
   21.15 -
   21.16 +#elif defined (__x86_64__)
   21.17 +	__asm__ __volatile__ (
   21.18 +	    "movq   %5,%%r10; movq %6,%%r8;" TRAP_INSTR
   21.19 +	    : "=a" (ret)
   21.20 +	    : "a" ((unsigned long)hypercall.op), 
   21.21 +	      "D" ((unsigned long)hypercall.arg[0]), 
   21.22 +	      "S" ((unsigned long)hypercall.arg[1]),
   21.23 +	      "d" ((unsigned long)hypercall.arg[2]), 
   21.24 +	      "g" ((unsigned long)hypercall.arg[3]),
   21.25 +	      "g" ((unsigned long)hypercall.arg[4])
   21.26 +	    : "r11","rcx","r8","r10","memory");
   21.27 +#endif
   21.28      }
   21.29      break;
   21.30  
    22.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    22.2 +++ b/linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/hypercall.h	Wed Apr 06 08:37:09 2005 +0000
    22.3 @@ -0,0 +1,536 @@
    22.4 +/******************************************************************************
    22.5 + * hypercall.h
    22.6 + * 
    22.7 + * Linux-specific hypervisor handling.
    22.8 + * 
    22.9 + * Copyright (c) 2002-2004, K A Fraser
   22.10 + * 
   22.11 + * This file may be distributed separately from the Linux kernel, or
   22.12 + * incorporated into other software packages, subject to the following license:
   22.13 + * 
   22.14 + * Permission is hereby granted, free of charge, to any person obtaining a copy
   22.15 + * of this source file (the "Software"), to deal in the Software without
   22.16 + * restriction, including without limitation the rights to use, copy, modify,
   22.17 + * merge, publish, distribute, sublicense, and/or sell copies of the Software,
   22.18 + * and to permit persons to whom the Software is furnished to do so, subject to
   22.19 + * the following conditions:
   22.20 + * 
   22.21 + * The above copyright notice and this permission notice shall be included in
   22.22 + * all copies or substantial portions of the Software.
   22.23 + * 
   22.24 + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   22.25 + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   22.26 + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   22.27 + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   22.28 + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
   22.29 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
   22.30 + * IN THE SOFTWARE.
   22.31 + */
   22.32 +
   22.33 +#ifndef __HYPERCALL_H__
   22.34 +#define __HYPERCALL_H__
   22.35 +#include <asm-xen/xen-public/xen.h>
   22.36 +
   22.37 +/*
   22.38 + * Assembler stubs for hyper-calls.
   22.39 + */
   22.40 +
   22.41 +static inline int
   22.42 +HYPERVISOR_set_trap_table(
   22.43 +    trap_info_t *table)
   22.44 +{
   22.45 +    int ret;
   22.46 +    unsigned long ignore;
   22.47 +
   22.48 +    __asm__ __volatile__ (
   22.49 +        TRAP_INSTR
   22.50 +        : "=a" (ret), "=b" (ignore)
   22.51 +	: "0" (__HYPERVISOR_set_trap_table), "1" (table)
   22.52 +	: "memory" );
   22.53 +
   22.54 +    return ret;
   22.55 +}
   22.56 +
   22.57 +static inline int
   22.58 +HYPERVISOR_mmu_update(
   22.59 +    mmu_update_t *req, int count, int *success_count, domid_t domid)
   22.60 +{
   22.61 +    int ret;
   22.62 +    unsigned long ign1, ign2, ign3, ign4;
   22.63 +
   22.64 +    __asm__ __volatile__ (
   22.65 +        TRAP_INSTR
   22.66 +        : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4)
   22.67 +	: "0" (__HYPERVISOR_mmu_update), "1" (req), "2" (count),
   22.68 +        "3" (success_count), "4" (domid)
   22.69 +	: "memory" );
   22.70 +
   22.71 +    return ret;
   22.72 +}
   22.73 +
   22.74 +static inline int
   22.75 +HYPERVISOR_mmuext_op(
   22.76 +    struct mmuext_op *op, int count, int *success_count, domid_t domid)
   22.77 +{
   22.78 +    int ret;
   22.79 +    unsigned long ign1, ign2, ign3, ign4;
   22.80 +
   22.81 +    __asm__ __volatile__ (
   22.82 +        TRAP_INSTR
   22.83 +        : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4)
   22.84 +	: "0" (__HYPERVISOR_mmuext_op), "1" (op), "2" (count),
   22.85 +        "3" (success_count), "4" (domid)
   22.86 +	: "memory" );
   22.87 +
   22.88 +    return ret;
   22.89 +}
   22.90 +
   22.91 +static inline int
   22.92 +HYPERVISOR_set_gdt(
   22.93 +    unsigned long *frame_list, int entries)
   22.94 +{
   22.95 +    int ret;
   22.96 +    unsigned long ign1, ign2;
   22.97 +
   22.98 +    __asm__ __volatile__ (
   22.99 +        TRAP_INSTR
  22.100 +        : "=a" (ret), "=b" (ign1), "=c" (ign2)
  22.101 +	: "0" (__HYPERVISOR_set_gdt), "1" (frame_list), "2" (entries)
  22.102 +	: "memory" );
  22.103 +
  22.104 +
  22.105 +    return ret;
  22.106 +}
  22.107 +
  22.108 +static inline int
  22.109 +HYPERVISOR_stack_switch(
  22.110 +    unsigned long ss, unsigned long esp)
  22.111 +{
  22.112 +    int ret;
  22.113 +    unsigned long ign1, ign2;
  22.114 +
  22.115 +    __asm__ __volatile__ (
  22.116 +        TRAP_INSTR
  22.117 +        : "=a" (ret), "=b" (ign1), "=c" (ign2)
  22.118 +	: "0" (__HYPERVISOR_stack_switch), "1" (ss), "2" (esp)
  22.119 +	: "memory" );
  22.120 +
  22.121 +    return ret;
  22.122 +}
  22.123 +
  22.124 +static inline int
  22.125 +HYPERVISOR_set_callbacks(
  22.126 +    unsigned long event_selector, unsigned long event_address,
  22.127 +    unsigned long failsafe_selector, unsigned long failsafe_address)
  22.128 +{
  22.129 +    int ret;
  22.130 +    unsigned long ign1, ign2, ign3, ign4;
  22.131 +
  22.132 +    __asm__ __volatile__ (
  22.133 +        TRAP_INSTR
  22.134 +        : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4)
  22.135 +	: "0" (__HYPERVISOR_set_callbacks), "1" (event_selector),
  22.136 +	  "2" (event_address), "3" (failsafe_selector), "4" (failsafe_address)
  22.137 +	: "memory" );
  22.138 +
  22.139 +    return ret;
  22.140 +}
  22.141 +
  22.142 +static inline int
  22.143 +HYPERVISOR_fpu_taskswitch(
  22.144 +    int set)
  22.145 +{
  22.146 +    int ret;
  22.147 +    unsigned long ign;
  22.148 +
  22.149 +    __asm__ __volatile__ (
  22.150 +        TRAP_INSTR
  22.151 +        : "=a" (ret), "=b" (ign)
  22.152 +        : "0" (__HYPERVISOR_fpu_taskswitch), "1" (set)
  22.153 +        : "memory" );
  22.154 +
  22.155 +    return ret;
  22.156 +}
  22.157 +
  22.158 +static inline int
  22.159 +HYPERVISOR_yield(
  22.160 +    void)
  22.161 +{
  22.162 +    int ret;
  22.163 +    unsigned long ign;
  22.164 +
  22.165 +    __asm__ __volatile__ (
  22.166 +        TRAP_INSTR
  22.167 +        : "=a" (ret), "=b" (ign)
  22.168 +	: "0" (__HYPERVISOR_sched_op), "1" (SCHEDOP_yield)
  22.169 +	: "memory" );
  22.170 +
  22.171 +    return ret;
  22.172 +}
  22.173 +
  22.174 +static inline int
  22.175 +HYPERVISOR_block(
  22.176 +    void)
  22.177 +{
  22.178 +    int ret;
  22.179 +    unsigned long ign1;
  22.180 +    __asm__ __volatile__ (
  22.181 +        TRAP_INSTR
  22.182 +        : "=a" (ret), "=b" (ign1)
  22.183 +	: "0" (__HYPERVISOR_sched_op), "1" (SCHEDOP_block)
  22.184 +	: "memory" );
  22.185 +
  22.186 +    return ret;
  22.187 +}
  22.188 +
  22.189 +static inline int
  22.190 +HYPERVISOR_shutdown(
  22.191 +    void)
  22.192 +{
  22.193 +    int ret;
  22.194 +    unsigned long ign1;
  22.195 +    __asm__ __volatile__ (
  22.196 +        TRAP_INSTR
  22.197 +        : "=a" (ret), "=b" (ign1)
  22.198 +	: "0" (__HYPERVISOR_sched_op),
  22.199 +	  "1" (SCHEDOP_shutdown | (SHUTDOWN_poweroff << SCHEDOP_reasonshift))
  22.200 +        : "memory" );
  22.201 +
  22.202 +    return ret;
  22.203 +}
  22.204 +
  22.205 +static inline int
  22.206 +HYPERVISOR_reboot(
  22.207 +    void)
  22.208 +{
  22.209 +    int ret;
  22.210 +    unsigned long ign1;
  22.211 +    __asm__ __volatile__ (
  22.212 +        TRAP_INSTR
  22.213 +        : "=a" (ret), "=b" (ign1)
  22.214 +	: "0" (__HYPERVISOR_sched_op),
  22.215 +	  "1" (SCHEDOP_shutdown | (SHUTDOWN_reboot << SCHEDOP_reasonshift))
  22.216 +        : "memory" );
  22.217 +
  22.218 +    return ret;
  22.219 +}
  22.220 +
  22.221 +static inline int
  22.222 +HYPERVISOR_suspend(
  22.223 +    unsigned long srec)
  22.224 +{
  22.225 +    int ret;
  22.226 +    unsigned long ign1, ign2;
  22.227 +
  22.228 +    /* NB. On suspend, control software expects a suspend record in %esi. */
  22.229 +    __asm__ __volatile__ (
  22.230 +        TRAP_INSTR
  22.231 +        : "=a" (ret), "=b" (ign1), "=S" (ign2)
  22.232 +	: "0" (__HYPERVISOR_sched_op),
  22.233 +        "b" (SCHEDOP_shutdown | (SHUTDOWN_suspend << SCHEDOP_reasonshift)), 
  22.234 +        "S" (srec) : "memory");
  22.235 +
  22.236 +    return ret;
  22.237 +}
  22.238 +
  22.239 +static inline int
  22.240 +HYPERVISOR_crash(
  22.241 +    void)
  22.242 +{
  22.243 +    int ret;
  22.244 +    unsigned long ign1;
  22.245 +    __asm__ __volatile__ (
  22.246 +        TRAP_INSTR
  22.247 +        : "=a" (ret), "=b" (ign1)
  22.248 +	: "0" (__HYPERVISOR_sched_op),
  22.249 +	  "1" (SCHEDOP_shutdown | (SHUTDOWN_crash << SCHEDOP_reasonshift))
  22.250 +        : "memory" );
  22.251 +
  22.252 +    return ret;
  22.253 +}
  22.254 +
  22.255 +static inline long
  22.256 +HYPERVISOR_set_timer_op(
  22.257 +    u64 timeout)
  22.258 +{
  22.259 +    int ret;
  22.260 +    unsigned long timeout_hi = (unsigned long)(timeout>>32);
  22.261 +    unsigned long timeout_lo = (unsigned long)timeout;
  22.262 +    unsigned long ign1, ign2;
  22.263 +
  22.264 +    __asm__ __volatile__ (
  22.265 +        TRAP_INSTR
  22.266 +        : "=a" (ret), "=b" (ign1), "=c" (ign2)
  22.267 +	: "0" (__HYPERVISOR_set_timer_op), "b" (timeout_lo), "c" (timeout_hi)
  22.268 +	: "memory");
  22.269 +
  22.270 +    return ret;
  22.271 +}
  22.272 +
  22.273 +static inline int
  22.274 +HYPERVISOR_dom0_op(
  22.275 +    dom0_op_t *dom0_op)
  22.276 +{
  22.277 +    int ret;
  22.278 +    unsigned long ign1;
  22.279 +
  22.280 +    dom0_op->interface_version = DOM0_INTERFACE_VERSION;
  22.281 +    __asm__ __volatile__ (
  22.282 +        TRAP_INSTR
  22.283 +        : "=a" (ret), "=b" (ign1)
  22.284 +	: "0" (__HYPERVISOR_dom0_op), "1" (dom0_op)
  22.285 +	: "memory");
  22.286 +
  22.287 +    return ret;
  22.288 +}
  22.289 +
  22.290 +static inline int
  22.291 +HYPERVISOR_set_debugreg(
  22.292 +    int reg, unsigned long value)
  22.293 +{
  22.294 +    int ret;
  22.295 +    unsigned long ign1, ign2;
  22.296 +    __asm__ __volatile__ (
  22.297 +        TRAP_INSTR
  22.298 +        : "=a" (ret), "=b" (ign1), "=c" (ign2)
  22.299 +	: "0" (__HYPERVISOR_set_debugreg), "1" (reg), "2" (value)
  22.300 +	: "memory" );
  22.301 +
  22.302 +    return ret;
  22.303 +}
  22.304 +
  22.305 +static inline unsigned long
  22.306 +HYPERVISOR_get_debugreg(
  22.307 +    int reg)
  22.308 +{
  22.309 +    unsigned long ret;
  22.310 +    unsigned long ign;
  22.311 +    __asm__ __volatile__ (
  22.312 +        TRAP_INSTR
  22.313 +        : "=a" (ret), "=b" (ign)
  22.314 +	: "0" (__HYPERVISOR_get_debugreg), "1" (reg)
  22.315 +	: "memory" );
  22.316 +
  22.317 +    return ret;
  22.318 +}
  22.319 +
  22.320 +static inline int
  22.321 +HYPERVISOR_update_descriptor(
  22.322 +    unsigned long ma, unsigned long word1, unsigned long word2)
  22.323 +{
  22.324 +    int ret;
  22.325 +    unsigned long ign1, ign2, ign3;
  22.326 +
  22.327 +    __asm__ __volatile__ (
  22.328 +        TRAP_INSTR
  22.329 +        : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3)
  22.330 +	: "0" (__HYPERVISOR_update_descriptor), "1" (ma), "2" (word1),
  22.331 +	  "3" (word2)
  22.332 +	: "memory" );
  22.333 +
  22.334 +    return ret;
  22.335 +}
  22.336 +
  22.337 +static inline int
  22.338 +HYPERVISOR_set_fast_trap(
  22.339 +    int idx)
  22.340 +{
  22.341 +    int ret;
  22.342 +    unsigned long ign;
  22.343 +
  22.344 +    __asm__ __volatile__ (
  22.345 +        TRAP_INSTR
  22.346 +        : "=a" (ret), "=b" (ign)
  22.347 +	: "0" (__HYPERVISOR_set_fast_trap), "1" (idx)
  22.348 +	: "memory" );
  22.349 +
  22.350 +    return ret;
  22.351 +}
  22.352 +
  22.353 +static inline int
  22.354 +HYPERVISOR_dom_mem_op(
  22.355 +    unsigned int op, unsigned long *extent_list,
  22.356 +    unsigned long nr_extents, unsigned int extent_order)
  22.357 +{
  22.358 +    int ret;
  22.359 +    unsigned long ign1, ign2, ign3, ign4, ign5;
  22.360 +
  22.361 +    __asm__ __volatile__ (
  22.362 +        TRAP_INSTR
  22.363 +        : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4),
  22.364 +	  "=D" (ign5)
  22.365 +	: "0" (__HYPERVISOR_dom_mem_op), "1" (op), "2" (extent_list),
  22.366 +	  "3" (nr_extents), "4" (extent_order), "5" (DOMID_SELF)
  22.367 +        : "memory" );
  22.368 +
  22.369 +    return ret;
  22.370 +}
  22.371 +
  22.372 +static inline int
  22.373 +HYPERVISOR_multicall(
  22.374 +    void *call_list, int nr_calls)
  22.375 +{
  22.376 +    int ret;
  22.377 +    unsigned long ign1, ign2;
  22.378 +
  22.379 +    __asm__ __volatile__ (
  22.380 +        TRAP_INSTR
  22.381 +        : "=a" (ret), "=b" (ign1), "=c" (ign2)
  22.382 +	: "0" (__HYPERVISOR_multicall), "1" (call_list), "2" (nr_calls)
  22.383 +	: "memory" );
  22.384 +
  22.385 +    return ret;
  22.386 +}
  22.387 +
  22.388 +static inline int
  22.389 +HYPERVISOR_update_va_mapping(
  22.390 +    unsigned long va, pte_t new_val, unsigned long flags)
  22.391 +{
  22.392 +    int ret;
  22.393 +    unsigned long ign1, ign2, ign3;
  22.394 +
  22.395 +    __asm__ __volatile__ (
  22.396 +        TRAP_INSTR
  22.397 +        : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3)
  22.398 +	: "0" (__HYPERVISOR_update_va_mapping), 
  22.399 +          "1" (va), "2" ((new_val).pte_low), "3" (flags)
  22.400 +	: "memory" );
  22.401 +
  22.402 +    if ( unlikely(ret < 0) )
  22.403 +    {
  22.404 +        printk(KERN_ALERT "Failed update VA mapping: %08lx, %08lx, %08lx\n",
  22.405 +               va, (new_val).pte_low, flags);
  22.406 +        BUG();
  22.407 +    }
  22.408 +
  22.409 +    return ret;
  22.410 +}
  22.411 +
  22.412 +static inline int
  22.413 +HYPERVISOR_event_channel_op(
  22.414 +    void *op)
  22.415 +{
  22.416 +    int ret;
  22.417 +    unsigned long ignore;
  22.418 +    __asm__ __volatile__ (
  22.419 +        TRAP_INSTR
  22.420 +        : "=a" (ret), "=b" (ignore)
  22.421 +	: "0" (__HYPERVISOR_event_channel_op), "1" (op)
  22.422 +	: "memory" );
  22.423 +
  22.424 +    return ret;
  22.425 +}
  22.426 +
  22.427 +static inline int
  22.428 +HYPERVISOR_xen_version(
  22.429 +    int cmd)
  22.430 +{
  22.431 +    int ret;
  22.432 +    unsigned long ignore;
  22.433 +
  22.434 +    __asm__ __volatile__ (
  22.435 +        TRAP_INSTR
  22.436 +        : "=a" (ret), "=b" (ignore)
  22.437 +	: "0" (__HYPERVISOR_xen_version), "1" (cmd)
  22.438 +	: "memory" );
  22.439 +
  22.440 +    return ret;
  22.441 +}
  22.442 +
  22.443 +static inline int
  22.444 +HYPERVISOR_console_io(
  22.445 +    int cmd, int count, char *str)
  22.446 +{
  22.447 +    int ret;
  22.448 +    unsigned long ign1, ign2, ign3;
  22.449 +    __asm__ __volatile__ (
  22.450 +        TRAP_INSTR
  22.451 +        : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3)
  22.452 +	: "0" (__HYPERVISOR_console_io), "1" (cmd), "2" (count), "3" (str)
  22.453 +	: "memory" );
  22.454 +
  22.455 +    return ret;
  22.456 +}
  22.457 +
  22.458 +static inline int
  22.459 +HYPERVISOR_physdev_op(
  22.460 +    void *physdev_op)
  22.461 +{
  22.462 +    int ret;
  22.463 +    unsigned long ign;
  22.464 +
  22.465 +    __asm__ __volatile__ (
  22.466 +        TRAP_INSTR
  22.467 +        : "=a" (ret), "=b" (ign)
  22.468 +	: "0" (__HYPERVISOR_physdev_op), "1" (physdev_op)
  22.469 +	: "memory" );
  22.470 +
  22.471 +    return ret;
  22.472 +}
  22.473 +
  22.474 +static inline int
  22.475 +HYPERVISOR_grant_table_op(
  22.476 +    unsigned int cmd, void *uop, unsigned int count)
  22.477 +{
  22.478 +    int ret;
  22.479 +    unsigned long ign1, ign2, ign3;
  22.480 +
  22.481 +    __asm__ __volatile__ (
  22.482 +        TRAP_INSTR
  22.483 +        : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3)
  22.484 +	: "0" (__HYPERVISOR_grant_table_op), "1" (cmd), "2" (uop), "3" (count)
  22.485 +	: "memory" );
  22.486 +
  22.487 +    return ret;
  22.488 +}
  22.489 +
  22.490 +static inline int
  22.491 +HYPERVISOR_update_va_mapping_otherdomain(
  22.492 +    unsigned long va, pte_t new_val, unsigned long flags, domid_t domid)
  22.493 +{
  22.494 +    int ret;
  22.495 +    unsigned long ign1, ign2, ign3, ign4;
  22.496 +
  22.497 +    __asm__ __volatile__ (
  22.498 +        TRAP_INSTR
  22.499 +        : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4)
  22.500 +	: "0" (__HYPERVISOR_update_va_mapping_otherdomain),
  22.501 +          "1" (va), "2" ((new_val).pte_low), "3" (flags), "4" (domid) :
  22.502 +        "memory" );
  22.503 +    
  22.504 +    return ret;
  22.505 +}
  22.506 +
  22.507 +static inline int
  22.508 +HYPERVISOR_vm_assist(
  22.509 +    unsigned int cmd, unsigned int type)
  22.510 +{
  22.511 +    int ret;
  22.512 +    unsigned long ign1, ign2;
  22.513 +
  22.514 +    __asm__ __volatile__ (
  22.515 +        TRAP_INSTR
  22.516 +        : "=a" (ret), "=b" (ign1), "=c" (ign2)
  22.517 +	: "0" (__HYPERVISOR_vm_assist), "1" (cmd), "2" (type)
  22.518 +	: "memory" );
  22.519 +
  22.520 +    return ret;
  22.521 +}
  22.522 +
  22.523 +static inline int
  22.524 +HYPERVISOR_boot_vcpu(
  22.525 +    unsigned long vcpu, full_execution_context_t *ctxt)
  22.526 +{
  22.527 +    int ret;
  22.528 +    unsigned long ign1, ign2;
  22.529 +
  22.530 +    __asm__ __volatile__ (
  22.531 +        TRAP_INSTR
  22.532 +        : "=a" (ret), "=b" (ign1), "=c" (ign2)
  22.533 +	: "0" (__HYPERVISOR_boot_vcpu), "1" (vcpu), "2" (ctxt)
  22.534 +	: "memory");
  22.535 +
  22.536 +    return ret;
  22.537 +}
  22.538 +
  22.539 +#endif /* __HYPERCALL_H__ */
    23.1 --- a/linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/desc.h	Tue Apr 05 10:41:39 2005 +0000
    23.2 +++ b/linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/desc.h	Wed Apr 06 08:37:09 2005 +0000
    23.3 @@ -71,7 +71,19 @@ extern struct desc_ptr cpu_gdt_table[NR_
    23.4  
    23.5  #define load_TR_desc() asm volatile("ltr %w0"::"r" (GDT_ENTRY_TSS*8))
    23.6  #define load_LDT_desc() asm volatile("lldt %w0"::"r" (GDT_ENTRY_LDT*8))
    23.7 -#define clear_LDT()  asm volatile("lldt %w0"::"r" (0))
    23.8 +
    23.9 +static inline void clear_LDT(void)
   23.10 +{
   23.11 +	int cpu = get_cpu();
   23.12 +
   23.13 +	/*
   23.14 +	 * NB. We load the default_ldt for lcall7/27 handling on demand, as
   23.15 +	 * it slows down context switching. Noone uses it anyway.
   23.16 +	 */
   23.17 +	cpu = cpu;              /* XXX avoid compiler warning */
   23.18 +	xen_set_ldt(0UL, 0);
   23.19 +	put_cpu();
   23.20 +}
   23.21  
   23.22  /*
   23.23   * This is the ldt that every process will get unless we need
   23.24 @@ -211,7 +223,7 @@ extern inline void load_LDT_nolock (mm_c
   23.25          if (likely(!count))
   23.26                  segments = NULL;
   23.27  
   23.28 -        queue_set_ldt((unsigned long)segments, count);
   23.29 +        xen_set_ldt((unsigned long)segments, count);
   23.30  }
   23.31  
   23.32  static inline void load_LDT(mm_context_t *pc)
    24.1 --- a/linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/fixmap.h	Tue Apr 05 10:41:39 2005 +0000
    24.2 +++ b/linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/fixmap.h	Wed Apr 06 08:37:09 2005 +0000
    24.3 @@ -14,6 +14,7 @@
    24.4  #include <linux/config.h>
    24.5  #include <linux/kernel.h>
    24.6  #include <asm/apicdef.h>
    24.7 +#include <asm-xen/gnttab.h>
    24.8  #include <asm/page.h>
    24.9  #include <asm/vsyscall.h>
   24.10  #include <asm/vsyscall32.h>
   24.11 @@ -46,7 +47,8 @@ enum fixed_addresses {
   24.12  	FIX_IO_APIC_BASE_END = FIX_IO_APIC_BASE_0 + MAX_IO_APICS-1,
   24.13  #endif
   24.14  	FIX_SHARED_INFO,
   24.15 -	FIX_GNTTAB,
   24.16 +	FIX_GNTTAB_BEGIN,
   24.17 +	FIX_GNTTAB_END = FIX_GNTTAB_BEGIN + NR_GRANT_FRAMES - 1,
   24.18  #ifdef CONFIG_XEN_PHYSDEV_ACCESS
   24.19  #define NR_FIX_ISAMAPS	256
   24.20  	FIX_ISAMAP_END,
    25.1 --- a/linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/hypercall.h	Tue Apr 05 10:41:39 2005 +0000
    25.2 +++ b/linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/hypercall.h	Wed Apr 06 08:37:09 2005 +0000
    25.3 @@ -59,16 +59,32 @@ HYPERVISOR_set_trap_table(
    25.4  
    25.5  static inline int
    25.6  HYPERVISOR_mmu_update(
    25.7 -    mmu_update_t *req, int count, int *success_count)
    25.8 +    mmu_update_t *req, int count, int *success_count, domid_t domid)
    25.9  {
   25.10      int ret;
   25.11  
   25.12      __asm__ __volatile__ (
   25.13 -        TRAP_INSTR
   25.14 +        "movq %5, %%r10;" TRAP_INSTR
   25.15          : "=a" (ret)
   25.16  	: "0" ((unsigned long)__HYPERVISOR_mmu_update), "D" (req), "S" ((long)count),
   25.17 -	  "d" (success_count)
   25.18 -	: __syscall_clobber );
   25.19 +	  "d" (success_count), "g" ((unsigned long)domid)
   25.20 +	: __syscall_clobber, "r10" );
   25.21 +
   25.22 +    return ret;
   25.23 +}
   25.24 +
   25.25 +static inline int
   25.26 +HYPERVISOR_mmuext_op(
   25.27 +    struct mmuext_op *op, int count, int *success_count, domid_t domid)
   25.28 +{
   25.29 +    int ret;
   25.30 +
   25.31 +    __asm__ __volatile__ (
   25.32 +        "movq %5, %%r10;" TRAP_INSTR
   25.33 +        : "=a" (ret)
   25.34 +        : "0" (__HYPERVISOR_mmuext_op), "D" (op), "S" ((long)count), 
   25.35 +          "d" (success_count), "g" ((unsigned long)domid)
   25.36 +        : __syscall_clobber, "r10" );
   25.37  
   25.38      return ret;
   25.39  }
   25.40 @@ -223,7 +239,8 @@ HYPERVISOR_set_timer_op(
   25.41      __asm__ __volatile__ (
   25.42          TRAP_INSTR
   25.43          : "=a" (ret)
   25.44 -	: "0" ((unsigned long)__HYPERVISOR_set_timer_op), "D" (timeout)
   25.45 +	: "0" ((unsigned long)__HYPERVISOR_set_timer_op),
   25.46 +	  "D" (timeout)
   25.47  	: __syscall_clobber );
   25.48  
   25.49      return ret;
   25.50 @@ -284,7 +301,8 @@ HYPERVISOR_update_descriptor(
   25.51      __asm__ __volatile__ (
   25.52          TRAP_INSTR
   25.53          : "=a" (ret)
   25.54 -	: "0" ((unsigned long)__HYPERVISOR_update_descriptor), "D" (ma), "S" (word)
   25.55 +	: "0" ((unsigned long)__HYPERVISOR_update_descriptor), "D" (ma),
   25.56 +	  "S" (word)
   25.57  	: __syscall_clobber );
   25.58  
   25.59      return ret;
    26.1 --- a/linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/mmu_context.h	Tue Apr 05 10:41:39 2005 +0000
    26.2 +++ b/linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/mmu_context.h	Wed Apr 06 08:37:09 2005 +0000
    26.3 @@ -71,7 +71,6 @@ static inline void switch_mm(struct mm_s
    26.4  
    26.5  #define activate_mm(prev, next) do {		\
    26.6  	switch_mm((prev),(next),NULL);		\
    26.7 -	flush_page_update_queue();		\
    26.8  } while (0)
    26.9  
   26.10  #endif
    27.1 --- a/linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/pgalloc.h	Tue Apr 05 10:41:39 2005 +0000
    27.2 +++ b/linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/pgalloc.h	Wed Apr 06 08:37:09 2005 +0000
    27.3 @@ -18,19 +18,16 @@ void make_pages_writable(void *va, unsig
    27.4  static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, pte_t *pte)
    27.5  {
    27.6  	set_pmd(pmd, __pmd(_PAGE_TABLE | __pa(pte)));
    27.7 -        flush_page_update_queue();
    27.8  }
    27.9  
   27.10  static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *pte)
   27.11  {
   27.12  	set_pmd(pmd, __pmd(_PAGE_TABLE | (page_to_pfn(pte) << PAGE_SHIFT)));
   27.13 -        flush_page_update_queue();
   27.14  }
   27.15  
   27.16  static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd)
   27.17  {
   27.18  	set_pud(pud, __pud(_PAGE_TABLE | __pa(pmd)));
   27.19 -        flush_page_update_queue();
   27.20  }
   27.21  
   27.22  /*
   27.23 @@ -41,7 +38,6 @@ static inline void pgd_populate(struct m
   27.24  {
   27.25          set_pgd(pgd, __pgd(_PAGE_TABLE | __pa(pud)));
   27.26          set_pgd(__user_pgd(pgd), __pgd(_PAGE_TABLE | __pa(pud)));
   27.27 -        flush_page_update_queue();
   27.28  }
   27.29  
   27.30  extern __inline__ pmd_t *get_pmd(void)
   27.31 @@ -51,7 +47,6 @@ extern __inline__ pmd_t *get_pmd(void)
   27.32  		return NULL;
   27.33          make_page_readonly(pmd);
   27.34          xen_pmd_pin(__pa(pmd));
   27.35 -        flush_page_update_queue();        
   27.36  	return pmd;
   27.37  }
   27.38  
   27.39 @@ -60,7 +55,6 @@ extern __inline__ void pmd_free(pmd_t *p
   27.40  	BUG_ON((unsigned long)pmd & (PAGE_SIZE-1));
   27.41          xen_pmd_unpin(__pa(pmd));
   27.42          make_page_writable(pmd);
   27.43 -        flush_page_update_queue();
   27.44  	free_page((unsigned long)pmd);
   27.45  }
   27.46  
   27.47 @@ -71,7 +65,6 @@ static inline pmd_t *pmd_alloc_one(struc
   27.48  		return NULL;
   27.49          make_page_readonly(pmd);
   27.50          xen_pmd_pin(__pa(pmd)); 
   27.51 -        flush_page_update_queue(); 
   27.52          return pmd;
   27.53  }
   27.54  
   27.55 @@ -82,7 +75,6 @@ static inline pud_t *pud_alloc_one(struc
   27.56  		return NULL;
   27.57          make_page_readonly(pud);
   27.58          xen_pud_pin(__pa(pud)); 
   27.59 -        flush_page_update_queue(); 
   27.60          return pud;
   27.61  }
   27.62  
   27.63 @@ -91,7 +83,6 @@ static inline void pud_free(pud_t *pud)
   27.64  	BUG_ON((unsigned long)pud & (PAGE_SIZE-1));
   27.65          xen_pud_unpin(__pa(pud));
   27.66          make_page_writable(pud);
   27.67 -	flush_page_update_queue(); 
   27.68  	free_page((unsigned long)pud);
   27.69  }
   27.70  
   27.71 @@ -126,7 +117,6 @@ static inline pgd_t *pgd_alloc(struct mm
   27.72           */
   27.73  	set_pgd(__user_pgd(pgd) + pgd_index(VSYSCALL_START), 
   27.74                  mk_kernel_pgd(__pa_symbol(level3_user_pgt)));
   27.75 -        flush_page_update_queue();
   27.76  	return pgd;
   27.77  }
   27.78  
   27.79 @@ -136,7 +126,6 @@ static inline void pgd_free(pgd_t *pgd)
   27.80          xen_pgd_unpin(__pa(pgd));
   27.81          xen_pgd_unpin(__pa(__user_pgd(pgd)));
   27.82          make_pages_writable(pgd, 2);
   27.83 -	flush_page_update_queue(); 
   27.84  	free_pages((unsigned long)pgd, 1);
   27.85  }
   27.86  
   27.87 @@ -147,7 +136,6 @@ static inline pte_t *pte_alloc_one_kerne
   27.88  		return NULL;
   27.89          make_page_readonly(pte);
   27.90          xen_pte_pin(__pa(pte));
   27.91 -	flush_page_update_queue(); 
   27.92  	return pte;
   27.93  }
   27.94  
   27.95 @@ -158,7 +146,6 @@ static inline struct page *pte_alloc_one
   27.96  		return NULL;
   27.97          make_page_readonly(pte);
   27.98          xen_pte_pin(__pa(pte));
   27.99 -	flush_page_update_queue(); 
  27.100  	return virt_to_page((unsigned long)pte);
  27.101  }
  27.102  
  27.103 @@ -170,7 +157,6 @@ extern __inline__ void pte_free_kernel(p
  27.104  	BUG_ON((unsigned long)pte & (PAGE_SIZE-1));
  27.105          xen_pte_unpin(__pa(pte));
  27.106          make_page_writable(pte);
  27.107 -	flush_page_update_queue(); 
  27.108  	free_page((unsigned long)pte); 
  27.109  }
  27.110  
    28.1 --- a/linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/pgtable.h	Tue Apr 05 10:41:39 2005 +0000
    28.2 +++ b/linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/pgtable.h	Wed Apr 06 08:37:09 2005 +0000
    28.3 @@ -91,9 +91,9 @@ static inline void set_pte(pte_t *dst, p
    28.4  #endif
    28.5  #endif
    28.6  
    28.7 -#define set_pmd(pmdptr, pmdval) xen_l2_entry_update(pmdptr, (pmdval).pmd)
    28.8 -#define set_pud(pudptr, pudval) xen_l3_entry_update(pudptr, (pudval).pud)
    28.9 -#define set_pgd(pgdptr, pgdval) xen_l4_entry_update(pgdptr, (pgdval).pgd)
   28.10 +#define set_pmd(pmdptr, pmdval) xen_l2_entry_update(pmdptr, (pmdval))
   28.11 +#define set_pud(pudptr, pudval) xen_l3_entry_update(pudptr, (pudval))
   28.12 +#define set_pgd(pgdptr, pgdval) xen_l4_entry_update(pgdptr, (pgdval))
   28.13  
   28.14  extern inline void pud_clear (pud_t * pud)
   28.15  {
    29.1 --- a/linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/system.h	Tue Apr 05 10:41:39 2005 +0000
    29.2 +++ b/linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/system.h	Wed Apr 06 08:37:09 2005 +0000
    29.3 @@ -54,9 +54,6 @@
    29.4  
    29.5  extern void load_gs_index(unsigned);
    29.6  
    29.7 -#define __load_gs_index(index) \
    29.8 -	HYPERVISOR_set_segment_base(SEGBASE_GS_USER_SEL, index)
    29.9 -
   29.10  /*
   29.11   * Load a segment. Fall back on loading the zero
   29.12   * segment if something goes wrong..
   29.13 @@ -176,13 +173,8 @@ static inline void write_cr4(unsigned lo
   29.14  
   29.15  #define stts() write_cr0(8 | read_cr0())
   29.16  
   29.17 -static inline void wbinvd(void)
   29.18 -{
   29.19 -	mmu_update_t u;
   29.20 -	u.ptr = MMU_EXTENDED_COMMAND;
   29.21 -	u.val = MMUEXT_FLUSH_CACHE;
   29.22 -	(void)HYPERVISOR_mmu_update(&u, 1, NULL);
   29.23 -}
   29.24 +#define wbinvd() \
   29.25 +	__asm__ __volatile__ ("wbinvd": : :"memory");
   29.26  
   29.27  #endif	/* __KERNEL__ */
   29.28  
    30.1 --- a/linux-2.6.11-xen-sparse/include/asm-xen/hypervisor.h	Tue Apr 05 10:41:39 2005 +0000
    30.2 +++ b/linux-2.6.11-xen-sparse/include/asm-xen/hypervisor.h	Wed Apr 06 08:37:09 2005 +0000
    30.3 @@ -39,9 +39,11 @@
    30.4  #include <asm-xen/xen-public/io/domain_controller.h>
    30.5  #include <asm/ptrace.h>
    30.6  #include <asm/page.h>
    30.7 +#if defined(__i386__)
    30.8  #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
    30.9  #include <asm-generic/pgtable-nopmd.h>
   30.10  #endif
   30.11 +#endif
   30.12  
   30.13  /* arch/xen/i386/kernel/setup.c */
   30.14  union xen_start_info_union
   30.15 @@ -73,11 +75,19 @@ void lgdt_finish(void);
   30.16  
   30.17  void xen_l1_entry_update(pte_t *ptr, unsigned long val);
   30.18  void xen_l2_entry_update(pmd_t *ptr, pmd_t val);
   30.19 +void xen_l3_entry_update(pud_t *ptr, pud_t val); /* x86_64 only */
   30.20 +void xen_l4_entry_update(pgd_t *ptr, pgd_t val); /* x86_64 only */
   30.21  void xen_pt_switch(unsigned long ptr);
   30.22 +void xen_new_user_pt(unsigned long ptr); /* x86_64 only */
   30.23 +void xen_load_gs(unsigned int selector); /* x86_64 only */
   30.24  void xen_tlb_flush(void);
   30.25  void xen_invlpg(unsigned long ptr);
   30.26  void xen_pgd_pin(unsigned long ptr);
   30.27  void xen_pgd_unpin(unsigned long ptr);
   30.28 +void xen_pud_pin(unsigned long ptr); /* x86_64 only */
   30.29 +void xen_pud_unpin(unsigned long ptr); /* x86_64 only */
   30.30 +void xen_pmd_pin(unsigned long ptr); /* x86_64 only */
   30.31 +void xen_pmd_unpin(unsigned long ptr); /* x86_64 only */
   30.32  void xen_pte_pin(unsigned long ptr);
   30.33  void xen_pte_unpin(unsigned long ptr);
   30.34  void xen_set_ldt(unsigned long ptr, unsigned long bytes);
   30.35 @@ -112,506 +122,6 @@ void xen_invlpg_mask(cpumask_t mask, uns
   30.36  unsigned long allocate_empty_lowmem_region(unsigned long pages);
   30.37  #endif
   30.38  
   30.39 -/*
   30.40 - * Assembler stubs for hyper-calls.
   30.41 - */
   30.42 -
   30.43 -static inline int
   30.44 -HYPERVISOR_set_trap_table(
   30.45 -    trap_info_t *table)
   30.46 -{
   30.47 -    int ret;
   30.48 -    unsigned long ignore;
   30.49 -
   30.50 -    __asm__ __volatile__ (
   30.51 -        TRAP_INSTR
   30.52 -        : "=a" (ret), "=b" (ignore)
   30.53 -	: "0" (__HYPERVISOR_set_trap_table), "1" (table)
   30.54 -	: "memory" );
   30.55 -
   30.56 -    return ret;
   30.57 -}
   30.58 -
   30.59 -static inline int
   30.60 -HYPERVISOR_mmu_update(
   30.61 -    mmu_update_t *req, int count, int *success_count, domid_t domid)
   30.62 -{
   30.63 -    int ret;
   30.64 -    unsigned long ign1, ign2, ign3, ign4;
   30.65 -
   30.66 -    __asm__ __volatile__ (
   30.67 -        TRAP_INSTR
   30.68 -        : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4)
   30.69 -	: "0" (__HYPERVISOR_mmu_update), "1" (req), "2" (count),
   30.70 -        "3" (success_count), "4" (domid)
   30.71 -	: "memory" );
   30.72 -
   30.73 -    return ret;
   30.74 -}
   30.75 -
   30.76 -static inline int
   30.77 -HYPERVISOR_mmuext_op(
   30.78 -    struct mmuext_op *op, int count, int *success_count, domid_t domid)
   30.79 -{
   30.80 -    int ret;
   30.81 -    unsigned long ign1, ign2, ign3, ign4;
   30.82 -
   30.83 -    __asm__ __volatile__ (
   30.84 -        TRAP_INSTR
   30.85 -        : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4)
   30.86 -	: "0" (__HYPERVISOR_mmuext_op), "1" (op), "2" (count),
   30.87 -        "3" (success_count), "4" (domid)
   30.88 -	: "memory" );
   30.89 -
   30.90 -    return ret;
   30.91 -}
   30.92 -
   30.93 -static inline int
   30.94 -HYPERVISOR_set_gdt(
   30.95 -    unsigned long *frame_list, int entries)
   30.96 -{
   30.97 -    int ret;
   30.98 -    unsigned long ign1, ign2;
   30.99 -
  30.100 -    __asm__ __volatile__ (
  30.101 -        TRAP_INSTR
  30.102 -        : "=a" (ret), "=b" (ign1), "=c" (ign2)
  30.103 -	: "0" (__HYPERVISOR_set_gdt), "1" (frame_list), "2" (entries)
  30.104 -	: "memory" );
  30.105 -
  30.106 -
  30.107 -    return ret;
  30.108 -}
  30.109 -
  30.110 -static inline int
  30.111 -HYPERVISOR_stack_switch(
  30.112 -    unsigned long ss, unsigned long esp)
  30.113 -{
  30.114 -    int ret;
  30.115 -    unsigned long ign1, ign2;
  30.116 -
  30.117 -    __asm__ __volatile__ (
  30.118 -        TRAP_INSTR
  30.119 -        : "=a" (ret), "=b" (ign1), "=c" (ign2)
  30.120 -	: "0" (__HYPERVISOR_stack_switch), "1" (ss), "2" (esp)
  30.121 -	: "memory" );
  30.122 -
  30.123 -    return ret;
  30.124 -}
  30.125 -
  30.126 -static inline int
  30.127 -HYPERVISOR_set_callbacks(
  30.128 -    unsigned long event_selector, unsigned long event_address,
  30.129 -    unsigned long failsafe_selector, unsigned long failsafe_address)
  30.130 -{
  30.131 -    int ret;
  30.132 -    unsigned long ign1, ign2, ign3, ign4;
  30.133 -
  30.134 -    __asm__ __volatile__ (
  30.135 -        TRAP_INSTR
  30.136 -        : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4)
  30.137 -	: "0" (__HYPERVISOR_set_callbacks), "1" (event_selector),
  30.138 -	  "2" (event_address), "3" (failsafe_selector), "4" (failsafe_address)
  30.139 -	: "memory" );
  30.140 -
  30.141 -    return ret;
  30.142 -}
  30.143 -
  30.144 -static inline int
  30.145 -HYPERVISOR_fpu_taskswitch(
  30.146 -    int set)
  30.147 -{
  30.148 -    int ret;
  30.149 -    unsigned long ign;
  30.150 -
  30.151 -    __asm__ __volatile__ (
  30.152 -        TRAP_INSTR
  30.153 -        : "=a" (ret), "=b" (ign)
  30.154 -        : "0" (__HYPERVISOR_fpu_taskswitch), "1" (set)
  30.155 -        : "memory" );
  30.156 -
  30.157 -    return ret;
  30.158 -}
  30.159 -
  30.160 -static inline int
  30.161 -HYPERVISOR_yield(
  30.162 -    void)
  30.163 -{
  30.164 -    int ret;
  30.165 -    unsigned long ign;
  30.166 -
  30.167 -    __asm__ __volatile__ (
  30.168 -        TRAP_INSTR
  30.169 -        : "=a" (ret), "=b" (ign)
  30.170 -	: "0" (__HYPERVISOR_sched_op), "1" (SCHEDOP_yield)
  30.171 -	: "memory" );
  30.172 -
  30.173 -    return ret;
  30.174 -}
  30.175 -
  30.176 -static inline int
  30.177 -HYPERVISOR_block(
  30.178 -    void)
  30.179 -{
  30.180 -    int ret;
  30.181 -    unsigned long ign1;
  30.182 -    __asm__ __volatile__ (
  30.183 -        TRAP_INSTR
  30.184 -        : "=a" (ret), "=b" (ign1)
  30.185 -	: "0" (__HYPERVISOR_sched_op), "1" (SCHEDOP_block)
  30.186 -	: "memory" );
  30.187 -
  30.188 -    return ret;
  30.189 -}
  30.190 -
  30.191 -static inline int
  30.192 -HYPERVISOR_shutdown(
  30.193 -    void)
  30.194 -{
  30.195 -    int ret;
  30.196 -    unsigned long ign1;
  30.197 -    __asm__ __volatile__ (
  30.198 -        TRAP_INSTR
  30.199 -        : "=a" (ret), "=b" (ign1)
  30.200 -	: "0" (__HYPERVISOR_sched_op),
  30.201 -	  "1" (SCHEDOP_shutdown | (SHUTDOWN_poweroff << SCHEDOP_reasonshift))
  30.202 -        : "memory" );
  30.203 -
  30.204 -    return ret;
  30.205 -}
  30.206 -
  30.207 -static inline int
  30.208 -HYPERVISOR_reboot(
  30.209 -    void)
  30.210 -{
  30.211 -    int ret;
  30.212 -    unsigned long ign1;
  30.213 -    __asm__ __volatile__ (
  30.214 -        TRAP_INSTR
  30.215 -        : "=a" (ret), "=b" (ign1)
  30.216 -	: "0" (__HYPERVISOR_sched_op),
  30.217 -	  "1" (SCHEDOP_shutdown | (SHUTDOWN_reboot << SCHEDOP_reasonshift))
  30.218 -        : "memory" );
  30.219 -
  30.220 -    return ret;
  30.221 -}
  30.222 -
  30.223 -static inline int
  30.224 -HYPERVISOR_suspend(
  30.225 -    unsigned long srec)
  30.226 -{
  30.227 -    int ret;
  30.228 -    unsigned long ign1, ign2;
  30.229 -
  30.230 -    /* NB. On suspend, control software expects a suspend record in %esi. */
  30.231 -    __asm__ __volatile__ (
  30.232 -        TRAP_INSTR
  30.233 -        : "=a" (ret), "=b" (ign1), "=S" (ign2)
  30.234 -	: "0" (__HYPERVISOR_sched_op),
  30.235 -        "b" (SCHEDOP_shutdown | (SHUTDOWN_suspend << SCHEDOP_reasonshift)), 
  30.236 -        "S" (srec) : "memory");
  30.237 -
  30.238 -    return ret;
  30.239 -}
  30.240 -
  30.241 -static inline int
  30.242 -HYPERVISOR_crash(
  30.243 -    void)
  30.244 -{
  30.245 -    int ret;
  30.246 -    unsigned long ign1;
  30.247 -    __asm__ __volatile__ (
  30.248 -        TRAP_INSTR
  30.249 -        : "=a" (ret), "=b" (ign1)
  30.250 -	: "0" (__HYPERVISOR_sched_op),
  30.251 -	  "1" (SCHEDOP_shutdown | (SHUTDOWN_crash << SCHEDOP_reasonshift))
  30.252 -        : "memory" );
  30.253 -
  30.254 -    return ret;
  30.255 -}
  30.256 -
  30.257 -static inline long
  30.258 -HYPERVISOR_set_timer_op(
  30.259 -    u64 timeout)
  30.260 -{
  30.261 -    int ret;
  30.262 -    unsigned long timeout_hi = (unsigned long)(timeout>>32);
  30.263 -    unsigned long timeout_lo = (unsigned long)timeout;
  30.264 -    unsigned long ign1, ign2;
  30.265 -
  30.266 -    __asm__ __volatile__ (
  30.267 -        TRAP_INSTR
  30.268 -        : "=a" (ret), "=b" (ign1), "=c" (ign2)
  30.269 -	: "0" (__HYPERVISOR_set_timer_op), "b" (timeout_lo), "c" (timeout_hi)
  30.270 -	: "memory");
  30.271 -
  30.272 -    return ret;
  30.273 -}
  30.274 -
  30.275 -static inline int
  30.276 -HYPERVISOR_dom0_op(
  30.277 -    dom0_op_t *dom0_op)
  30.278 -{
  30.279 -    int ret;
  30.280 -    unsigned long ign1;
  30.281 -
  30.282 -    dom0_op->interface_version = DOM0_INTERFACE_VERSION;
  30.283 -    __asm__ __volatile__ (
  30.284 -        TRAP_INSTR
  30.285 -        : "=a" (ret), "=b" (ign1)
  30.286 -	: "0" (__HYPERVISOR_dom0_op), "1" (dom0_op)
  30.287 -	: "memory");
  30.288 -
  30.289 -    return ret;
  30.290 -}
  30.291 -
  30.292 -static inline int
  30.293 -HYPERVISOR_set_debugreg(
  30.294 -    int reg, unsigned long value)
  30.295 -{
  30.296 -    int ret;
  30.297 -    unsigned long ign1, ign2;
  30.298 -    __asm__ __volatile__ (
  30.299 -        TRAP_INSTR
  30.300 -        : "=a" (ret), "=b" (ign1), "=c" (ign2)
  30.301 -	: "0" (__HYPERVISOR_set_debugreg), "1" (reg), "2" (value)
  30.302 -	: "memory" );
  30.303 -
  30.304 -    return ret;
  30.305 -}
  30.306 -
  30.307 -static inline unsigned long
  30.308 -HYPERVISOR_get_debugreg(
  30.309 -    int reg)
  30.310 -{
  30.311 -    unsigned long ret;
  30.312 -    unsigned long ign;
  30.313 -    __asm__ __volatile__ (
  30.314 -        TRAP_INSTR
  30.315 -        : "=a" (ret), "=b" (ign)
  30.316 -	: "0" (__HYPERVISOR_get_debugreg), "1" (reg)
  30.317 -	: "memory" );
  30.318 -
  30.319 -    return ret;
  30.320 -}
  30.321 -
  30.322 -static inline int
  30.323 -HYPERVISOR_update_descriptor(
  30.324 -    unsigned long ma, unsigned long word1, unsigned long word2)
  30.325 -{
  30.326 -    int ret;
  30.327 -    unsigned long ign1, ign2, ign3;
  30.328 -
  30.329 -    __asm__ __volatile__ (
  30.330 -        TRAP_INSTR
  30.331 -        : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3)
  30.332 -	: "0" (__HYPERVISOR_update_descriptor), "1" (ma), "2" (word1),
  30.333 -	  "3" (word2)
  30.334 -	: "memory" );
  30.335 -
  30.336 -    return ret;
  30.337 -}
  30.338 -
  30.339 -static inline int
  30.340 -HYPERVISOR_set_fast_trap(
  30.341 -    int idx)
  30.342 -{
  30.343 -    int ret;
  30.344 -    unsigned long ign;
  30.345 -
  30.346 -    __asm__ __volatile__ (
  30.347 -        TRAP_INSTR
  30.348 -        : "=a" (ret), "=b" (ign)
  30.349 -	: "0" (__HYPERVISOR_set_fast_trap), "1" (idx)
  30.350 -	: "memory" );
  30.351 -
  30.352 -    return ret;
  30.353 -}
  30.354 -
  30.355 -static inline int
  30.356 -HYPERVISOR_dom_mem_op(
  30.357 -    unsigned int op, unsigned long *extent_list,
  30.358 -    unsigned long nr_extents, unsigned int extent_order)
  30.359 -{
  30.360 -    int ret;
  30.361 -    unsigned long ign1, ign2, ign3, ign4, ign5;
  30.362 -
  30.363 -    __asm__ __volatile__ (
  30.364 -        TRAP_INSTR
  30.365 -        : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4),
  30.366 -	  "=D" (ign5)
  30.367 -	: "0" (__HYPERVISOR_dom_mem_op), "1" (op), "2" (extent_list),
  30.368 -	  "3" (nr_extents), "4" (extent_order), "5" (DOMID_SELF)
  30.369 -        : "memory" );
  30.370 -
  30.371 -    return ret;
  30.372 -}
  30.373 -
  30.374 -static inline int
  30.375 -HYPERVISOR_multicall(
  30.376 -    void *call_list, int nr_calls)
  30.377 -{
  30.378 -    int ret;
  30.379 -    unsigned long ign1, ign2;
  30.380 -
  30.381 -    __asm__ __volatile__ (
  30.382 -        TRAP_INSTR
  30.383 -        : "=a" (ret), "=b" (ign1), "=c" (ign2)
  30.384 -	: "0" (__HYPERVISOR_multicall), "1" (call_list), "2" (nr_calls)
  30.385 -	: "memory" );
  30.386 -
  30.387 -    return ret;
  30.388 -}
  30.389 -
  30.390 -static inline int
  30.391 -HYPERVISOR_update_va_mapping(
  30.392 -    unsigned long va, pte_t new_val, unsigned long flags)
  30.393 -{
  30.394 -    int ret;
  30.395 -    unsigned long ign1, ign2, ign3;
  30.396 -
  30.397 -    __asm__ __volatile__ (
  30.398 -        TRAP_INSTR
  30.399 -        : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3)
  30.400 -	: "0" (__HYPERVISOR_update_va_mapping), 
  30.401 -          "1" (va), "2" ((new_val).pte_low), "3" (flags)
  30.402 -	: "memory" );
  30.403 -
  30.404 -    if ( unlikely(ret < 0) )
  30.405 -    {
  30.406 -        printk(KERN_ALERT "Failed update VA mapping: %08lx, %08lx, %08lx\n",
  30.407 -               va, (new_val).pte_low, flags);
  30.408 -        BUG();
  30.409 -    }
  30.410 -
  30.411 -    return ret;
  30.412 -}
  30.413 -
  30.414 -static inline int
  30.415 -HYPERVISOR_event_channel_op(
  30.416 -    void *op)
  30.417 -{
  30.418 -    int ret;
  30.419 -    unsigned long ignore;
  30.420 -    __asm__ __volatile__ (
  30.421 -        TRAP_INSTR
  30.422 -        : "=a" (ret), "=b" (ignore)
  30.423 -	: "0" (__HYPERVISOR_event_channel_op), "1" (op)
  30.424 -	: "memory" );
  30.425 -
  30.426 -    return ret;
  30.427 -}
  30.428 -
  30.429 -static inline int
  30.430 -HYPERVISOR_xen_version(
  30.431 -    int cmd)
  30.432 -{
  30.433 -    int ret;
  30.434 -    unsigned long ignore;
  30.435 -
  30.436 -    __asm__ __volatile__ (
  30.437 -        TRAP_INSTR
  30.438 -        : "=a" (ret), "=b" (ignore)
  30.439 -	: "0" (__HYPERVISOR_xen_version), "1" (cmd)
  30.440 -	: "memory" );
  30.441 -
  30.442 -    return ret;
  30.443 -}
  30.444 -
  30.445 -static inline int
  30.446 -HYPERVISOR_console_io(
  30.447 -    int cmd, int count, char *str)
  30.448 -{
  30.449 -    int ret;
  30.450 -    unsigned long ign1, ign2, ign3;
  30.451 -    __asm__ __volatile__ (
  30.452 -        TRAP_INSTR
  30.453 -        : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3)
  30.454 -	: "0" (__HYPERVISOR_console_io), "1" (cmd), "2" (count), "3" (str)
  30.455 -	: "memory" );
  30.456 -
  30.457 -    return ret;
  30.458 -}
  30.459 -
  30.460 -static inline int
  30.461 -HYPERVISOR_physdev_op(
  30.462 -    void *physdev_op)
  30.463 -{
  30.464 -    int ret;
  30.465 -    unsigned long ign;
  30.466 -
  30.467 -    __asm__ __volatile__ (
  30.468 -        TRAP_INSTR
  30.469 -        : "=a" (ret), "=b" (ign)
  30.470 -	: "0" (__HYPERVISOR_physdev_op), "1" (physdev_op)
  30.471 -	: "memory" );
  30.472 -
  30.473 -    return ret;
  30.474 -}
  30.475 -
  30.476 -static inline int
  30.477 -HYPERVISOR_grant_table_op(
  30.478 -    unsigned int cmd, void *uop, unsigned int count)
  30.479 -{
  30.480 -    int ret;
  30.481 -    unsigned long ign1, ign2, ign3;
  30.482 -
  30.483 -    __asm__ __volatile__ (
  30.484 -        TRAP_INSTR
  30.485 -        : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3)
  30.486 -	: "0" (__HYPERVISOR_grant_table_op), "1" (cmd), "2" (uop), "3" (count)
  30.487 -	: "memory" );
  30.488 -
  30.489 -    return ret;
  30.490 -}
  30.491 -
  30.492 -static inline int
  30.493 -HYPERVISOR_update_va_mapping_otherdomain(
  30.494 -    unsigned long va, pte_t new_val, unsigned long flags, domid_t domid)
  30.495 -{
  30.496 -    int ret;
  30.497 -    unsigned long ign1, ign2, ign3, ign4;
  30.498 -
  30.499 -    __asm__ __volatile__ (
  30.500 -        TRAP_INSTR
  30.501 -        : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4)
  30.502 -	: "0" (__HYPERVISOR_update_va_mapping_otherdomain),
  30.503 -          "1" (va), "2" ((new_val).pte_low), "3" (flags), "4" (domid) :
  30.504 -        "memory" );
  30.505 -    
  30.506 -    return ret;
  30.507 -}
  30.508 -
  30.509 -static inline int
  30.510 -HYPERVISOR_vm_assist(
  30.511 -    unsigned int cmd, unsigned int type)
  30.512 -{
  30.513 -    int ret;
  30.514 -    unsigned long ign1, ign2;
  30.515 -
  30.516 -    __asm__ __volatile__ (
  30.517 -        TRAP_INSTR
  30.518 -        : "=a" (ret), "=b" (ign1), "=c" (ign2)
  30.519 -	: "0" (__HYPERVISOR_vm_assist), "1" (cmd), "2" (type)
  30.520 -	: "memory" );
  30.521 -
  30.522 -    return ret;
  30.523 -}
  30.524 -
  30.525 -static inline int
  30.526 -HYPERVISOR_boot_vcpu(
  30.527 -    unsigned long vcpu, full_execution_context_t *ctxt)
  30.528 -{
  30.529 -    int ret;
  30.530 -    unsigned long ign1, ign2;
  30.531 -
  30.532 -    __asm__ __volatile__ (
  30.533 -        TRAP_INSTR
  30.534 -        : "=a" (ret), "=b" (ign1), "=c" (ign2)
  30.535 -	: "0" (__HYPERVISOR_boot_vcpu), "1" (vcpu), "2" (ctxt)
  30.536 -	: "memory");
  30.537 -
  30.538 -    return ret;
  30.539 -}
  30.540 +#include <asm/hypercall.h>
  30.541  
  30.542  #endif /* __HYPERVISOR_H__ */