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

Re: [Xen-devel] [PATCH v5 00/29] Xen/ARM guest support




> -----Original Message-----
> From: Ard Biesheuvel [mailto:ard.biesheuvel@xxxxxxxxxx]
> Sent: Tuesday, March 03, 2015 3:10 PM
> To: Wu, Feng
> Cc: edk2-devel@xxxxxxxxxxxxxxxxxxxxx; olivier.martin@xxxxxxx;
> lersek@xxxxxxxxxx; roy.franz@xxxxxxxxxx; leif.lindholm@xxxxxxxxxx;
> stefano.stabellini@xxxxxxxxxxxxx; ian.campbell@xxxxxxxxxx;
> anthony.perard@xxxxxxxxxx; xen-devel@xxxxxxxxxxxxx; julien.grall@xxxxxxxxxx;
> Justen, Jordan L; Kinney, Michael D; Dong, Eddie; wei.liu2@xxxxxxxxxx
> Subject: Re: [Xen-devel] [PATCH v5 00/29] Xen/ARM guest support
> 
> On 3 March 2015 at 03:00, Wu, Feng <feng.wu@xxxxxxxxx> wrote:
> >
> >
> >> -----Original Message-----
> >> From: xen-devel-bounces@xxxxxxxxxxxxx
> >> [mailto:xen-devel-bounces@xxxxxxxxxxxxx] On Behalf Of Ard Biesheuvel
> >> Sent: Wednesday, February 25, 2015 2:03 AM
> >> To: edk2-devel@xxxxxxxxxxxxxxxxxxxxx; olivier.martin@xxxxxxx;
> >> lersek@xxxxxxxxxx; roy.franz@xxxxxxxxxx; leif.lindholm@xxxxxxxxxx;
> >> stefano.stabellini@xxxxxxxxxxxxx; ian.campbell@xxxxxxxxxx;
> >> anthony.perard@xxxxxxxxxx; xen-devel@xxxxxxxxxxxxx;
> julien.grall@xxxxxxxxxx;
> >> Justen, Jordan L; Kinney, Michael D
> >> Cc: wei.liu2@xxxxxxxxxx; Ard Biesheuvel
> >> Subject: [Xen-devel] [PATCH v5 00/29] Xen/ARM guest support
> >>
> >> This series implements support for executing Tianocore inside a Xen
> >> guest domain on 64-bit ARM systems (AArch64)
> >>
> >> The first part addresses ARM platform specifics, primarily to allow a
> >> Tianocore binary image to be runtime relocatable, and execute from DRAM.
> >>
> >> The second part refactors the XenBus support, and adds some missing
> device
> >> drivers that are needed to execute on ARM: a Xen PV console and a real
> time
> >> clock driver.
> >>
> >> Finally, patch #29 ties it all together and implements the .dsc and .fdf
> >> platform descriptions that can be used to build the binary image.
> >>
> >> NOTES:
> >> - the Xen RTC driver is a dummy implementation, as it is a Runtime driver
> which
> >>   is callable through Runtime Services from the OS, and this is currently 
> >> not
> >>   supportable under Xen, due to the need to share the shared info page
> >> between
> >>   the OS and the firmware
> >> - UEFI maps the entire physical memory space as cached, and relies on Xen
> to
> >>   use the correct stage2 mappings for regions that are backed by devices,
> >> such
> >>   as the GIC or device passthrough. The reason is that the I/O console ring
> and
> >>   grant table are backed by RAM that Xen maps as cached, which means
> that
> >> UEFI
> >>   *must* map those as cached as well. Instead of discovering those
> regions
> >>   early on (i.e., before enabling the MMU) it is much easier to rely on the
> >>   architecturally mandated behavior that stage2 device mappings
> supersede
> >> stage1
> >>   cached mappings for the same region.
> >> - this code is now tested on Ovmf/x86, and no regressions have been
> reported
> >>   (thanks Wei Liu)
> >>
> >> Changes since v4:
> >> - rename InterlockedCompareExchange16 () patch as suggested by Jordan,
> and
> >> added
> >>   his ack
> >> - fix a bug spotted by Anthony in the TestAndClearBit () implementation
> >> - added more acks and R-b's
> >>
> >> Changes since v3:
> >> - rebased onto Olivier's pending GICv3 patches
> >> - moved InterlockedCompareExchange16 () to BaseSynchronizationLib
> >> - reimplemented XenBusDxe's TestAndClearBit () using
> >>   InterlockedCompareExchange16 () so that XenBusDxe itself is now
> >> completely
> >>   architecture agnostic
> >> - various minor style and comment changes based on review feedback from
> >>   Laszlo and Olivier
> >> - added acks and R-b's
> >>
> >> Changes since v2:
> >> - rebased onto latest upstream containing Laszlo's ARM generic timer
> changes,
> >>   with Olivier's pending GICv3 patches applied on top;
> >> - moved the relocatable PrePi to a completely separate module, and
> dropped
> >>   patches changing the original ARM PrePi code: all required changes have
> >> been
> >>   incorporated directly into the split off version
> >> - dropped the ARM BDS entirely, only Intel BDS supported as of now
> >> - added a constructor to XenConsoleSerialPortLib, otherwise there is no
> output
> >>   from the release build;
> >> - implemented all review comments regarding style and correctness,
> including
> >>   cleaning up the DSC in the final patch
> >> - added acks and R-b's
> >>
> >> Changes since v1:
> >> - move to PatchableInModule PCDs for the runtime self-relocating PrePi: 
> >> this
> is
> >>   semantically more correct, and will make the build system help us spot if
> >>   there are remaining instances of FixedPcdGetXX() which need attention
> >> - split some prepi and xen patches to make it easier on the reviewers
> >> - split off the PCI support from XenBusDxe instead of the frankenstein DXE
> from
> >>   v1
> >> - implemented review comments regarding moving of files, splitting of
> libraries
> >>   and some EDK2 optimizations suggested by Laszlo (casting, use of
> specific
> >>   types etc)
> >> - added some acks and R-b's
> >>
> >>
> >> Ard Biesheuvel (29):
> >>   ArmPkg: allow HYP timer interrupt to be omitted
> >>   ArmPkg: allow patchable PCDs for memory, FD and FV addresses
> >>   ArmPlatformPkg: allow patchable PCD for FD base address
> >>   ArmVirtualizationPkg: add GICv3 detection to VirtFdtDxe
> >>   ArmVirtualizationPkg: allow patchable PCD for device tree base address
> >>   ArmVirtualizationPkg: move early UART discovery to PlatformPeim
> >>   ArmVirtualizationPkg: use a HOB to store device tree blob
> >>   ArmVirtualizationPkg: add padding to FDT allocation
> >>   ArmVirtualizationPkg: add a relocatable version of PrePi
> >>   ArmVirtualizationPkg: implement custom MemoryInitPeiLib
> >>   ArmVirtualizationPkg: allow patchable PCD for FV and DT base addresses
> >>   ArmVirtualizationPkg: Xen/PV relocatable platformlib instance
> >>   MdePkg/BaseSynchronizationLib: Added proper support for ARM
> >>     architecture
> >>   MdePkg/BaseSynchronizationLib: Add InterlockedCompareExchange16
> >>   Ovmf/Xen: move Xen interface version to <xen.h>
> >>   Ovmf/Xen: fix pointer to int cast in XenBusDxe
> >>   Ovmf/Xen: refactor XenBusDxe hypercall implementation
> >>   Ovmf/Xen: move XenBusDxe hypercall code to separate library
> >>   Ovmf/Xen: introduce XENIO_PROTOCOL
> >>   Ovmf/Xen: add separate driver for Xen PCI device
> >>   Ovmf/Xen: move XenBusDxe to abstract XENIO_PROTOCOL
> >>   Ovmf/Xen: implement XenHypercallLib for ARM
> >>   Ovmf/Xen: port XenBusDxe to other architectures
> >>   Ovmf/Xen: add Xen PV console SerialPortLib driver
> >>   ArmVirtualizationPkg: implement dummy RealTimeClockLib for Xen
> >>   Ovfm/Xen: add a Vendor Hardware device path GUID for the XenBus root
> >>   ArmVirtualizationPkg: add XenIoMmioLib
> >>   ArmVirtualizationPkg/VirtFdtDxe: wire up XenBusDxe to "xen,xen" DT
> >>     node
> >>   ArmVirtualizationPkg: add platform description for Xen guests
> >>
> >>  ArmPkg/ArmPkg.dec                                  |  25 +-
> >>  ArmPkg/Drivers/TimerDxe/TimerDxe.c                 |  14 +-
> >>  .../ArmVirtualizationPkg/ArmVirtualization.dsc.inc |   2 +
> >>  .../ArmVirtualizationPkg/ArmVirtualizationPkg.dec  |  10 +-
> >>  .../ArmVirtualizationPkg/ArmVirtualizationQemu.dsc |   4 +-
> >>  .../ArmVirtualizationPkg/ArmVirtualizationXen.dsc  | 230 +++++++++++
> >>  .../ArmVirtualizationPkg/ArmVirtualizationXen.fdf  | 302
> ++++++++++++++
> >>  .../ArmVirtualizationMemoryInitPeiLib.c            |  91 +++++
> >>  .../ArmVirtualizationMemoryInitPeiLib.inf          |  66 ++++
> >>  .../ArmVirtualizationPlatformLib.inf               |   6 +-
> >>  .../Library/ArmVirtualizationPlatformLib/Virt.c    |  48 +--
> >>  .../AARCH64/MemnodeParser.S                        | 237
> >> +++++++++++
> >>  .../AARCH64/RelocatableVirtHelper.S                | 167 ++++++++
> >>  .../ArmXenRelocatablePlatformLib.inf               |  59 +++
> >>  .../ArmXenRelocatablePlatformLib/RelocatableVirt.c |  71 ++++
> >>  .../ArmXenRelocatablePlatformLib/XenVirtMem.c      |  83 ++++
> >>  .../Library/PlatformPeiLib/PlatformPeiLib.c        |  65 ++-
> >>  .../Library/PlatformPeiLib/PlatformPeiLib.inf      |  10 +-
> >>  .../XenRealTimeClockLib/XenRealTimeClockLib.c      | 196 +++++++++
> >>  .../XenRealTimeClockLib/XenRealTimeClockLib.inf    |  38 ++
> >>  .../ArmVirtualizationPkg/PrePi/AArch64/ArchPrePi.c |  33 ++
> >>  .../PrePi/AArch64/ModuleEntryPoint.S               | 180 +++++++++
> >>  .../PrePi/ArmVirtPrePiUniCoreRelocatable.inf       | 108 +++++
> >>  .../ArmVirtualizationPkg/PrePi/LzmaDecompress.h    | 103 +++++
> >>  ArmPlatformPkg/ArmVirtualizationPkg/PrePi/PrePi.c  | 203 ++++++++++
> >>  ArmPlatformPkg/ArmVirtualizationPkg/PrePi/PrePi.h  |  77 ++++
> >>  .../PrePi/Scripts/PrePi-PIE.lds                    |  42 ++
> >>  .../ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.c   |  73 +++-
> >>  .../ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.inf |   5 +-
> >>  .../PrePi/PrePiArmPlatformGlobalVariableLib.inf    |   2 +-
> >>  EmbeddedPkg/EmbeddedPkg.dec                        |   2 +
> >>  EmbeddedPkg/Include/Guid/FdtHob.h                  |  26 ++
> >>  MdePkg/Include/Library/SynchronizationLib.h        |  26 ++
> >>  .../AArch64/Synchronization.S                      | 203
> ++++++++++
> >>  .../AArch64/Synchronization.c                      | 115 ------
> >>  .../BaseSynchronizationLib/Arm/Synchronization.S   | 211 ++++++++++
> >>  .../BaseSynchronizationLib/Arm/Synchronization.asm | 212 ++++++++++
> >>  .../BaseSynchronizationLib/Arm/Synchronization.c   | 115 ------
> >>  .../BaseSynchronizationLib.inf                     |  10 +-
> >>  .../BaseSynchronizationLibInternals.h              |  26 ++
> >>  .../BaseSynchronizationLib/Ebc/Synchronization.c   |  31 ++
> >>  .../BaseSynchronizationLib/Ia32/GccInline.c        |  42 ++
> >>  .../Ia32/InterlockedCompareExchange16.asm          |  88 +++--
> >>  .../Ia32/InterlockedCompareExchange16.c            |  89 +++--
> >>  .../Ipf/InterlockedCompareExchange16.s             |  30 ++
> >>  .../BaseSynchronizationLib/Synchronization.c       |  31 ++
> >>  .../BaseSynchronizationLib/SynchronizationGcc.c    |  31 ++
> >>  .../BaseSynchronizationLib/SynchronizationMsc.c    |  31 ++
> >>  .../Library/BaseSynchronizationLib/X64/GccInline.c |  44 +++
> >>  .../X64/InterlockedCompareExchange16.asm           |  83 ++--
> >>  .../X64/InterlockedCompareExchange16.c             |  54 +++
> >>  OvmfPkg/Include/Guid/XenBusRootDevice.h            |  24 ++
> >>  .../Include/IndustryStandard/Xen/arch-arm/xen.h    | 436
> >> +++++++++++++++++++++
> >>  OvmfPkg/Include/IndustryStandard/Xen/io/console.h  |  51 +++
> >>  OvmfPkg/Include/IndustryStandard/Xen/xen.h         |   7 +-
> >>  .../Library/XenHypercallLib.h}                     |  48 +--
> >>  OvmfPkg/Include/Library/XenIoMmioLib.h             |  64 +++
> >>  OvmfPkg/Include/Protocol/XenIo.h                   |  48 +++
> >>  .../XenConsoleSerialPortLib.c                      | 156 ++++++++
> >>  .../XenConsoleSerialPortLib.inf                    |  35 ++
> >>  .../Library/XenHypercallLib/Aarch64/Hypercall.S    |  26 ++
> >>  OvmfPkg/Library/XenHypercallLib/Arm/Hypercall.S    |  25 ++
> >>  .../XenHypercallLib}/Ia32/hypercall.nasm           |   6 +-
> >>  .../XenHypercallLib}/X64/hypercall.nasm            |   6 +-
> >>  OvmfPkg/Library/XenHypercallLib/XenHypercall.c     |  63 +++
> >>  .../Library/XenHypercallLib/XenHypercallIntel.c    |  77 ++++
> >>  .../Library/XenHypercallLib/XenHypercallLibArm.inf |  40 ++
> >>  .../XenHypercallLib/XenHypercallLibIntel.inf       |  52 +++
> >>  OvmfPkg/Library/XenIoMmioLib/XenIoMmioLib.c        | 166 ++++++++
> >>  OvmfPkg/Library/XenIoMmioLib/XenIoMmioLib.inf      |  39 ++
> >>  OvmfPkg/OvmfPkg.dec                                |  10 +
> >>  OvmfPkg/OvmfPkgIa32.dsc                            |   2 +
> >>  OvmfPkg/OvmfPkgIa32.fdf                            |   1 +
> >>  OvmfPkg/OvmfPkgIa32X64.dsc                         |   2 +
> >>  OvmfPkg/OvmfPkgIa32X64.fdf                         |   1 +
> >>  OvmfPkg/OvmfPkgX64.dsc                             |   2 +
> >>  OvmfPkg/OvmfPkgX64.fdf                             |   1 +
> >>  OvmfPkg/XenBusDxe/ComponentName.c                  |   2 +-
> >>  OvmfPkg/XenBusDxe/EventChannel.c                   |  14 +-
> >>  OvmfPkg/XenBusDxe/GrantTable.c                     |  17 +-
> >>  OvmfPkg/XenBusDxe/GrantTable.h                     |   3 +-
> >>  OvmfPkg/XenBusDxe/Ia32/TestAndClearBit.nasm        |  16 -
> >>  OvmfPkg/XenBusDxe/InterlockedCompareExchange16.c   |  33 --
> >>  OvmfPkg/XenBusDxe/TestAndClearBit.c                |  45 +++
> >>  OvmfPkg/XenBusDxe/X64/TestAndClearBit.nasm         |  15 -
> >>  OvmfPkg/XenBusDxe/XenBus.c                         |   6 +-
> >>  OvmfPkg/XenBusDxe/XenBusDxe.c                      | 106 ++---
> >>  OvmfPkg/XenBusDxe/XenBusDxe.h                      |  16 +-
> >>  OvmfPkg/XenBusDxe/XenBusDxe.inf                    |  25 +-
> >>  OvmfPkg/XenBusDxe/XenHypercall.c                   | 118 ------
> >>  OvmfPkg/XenBusDxe/XenStore.c                       |   6 +-
> >>  OvmfPkg/XenIoPciDxe/XenIoPciDxe.c                  | 367
> >> +++++++++++++++++
> >>  OvmfPkg/XenIoPciDxe/XenIoPciDxe.inf                |  45 +++
> >>  OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.h                  |   4 -
> >>  94 files changed, 5492 insertions(+), 784 deletions(-)
> >>  create mode 100644
> >> ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationXen.dsc
> >>  create mode 100644
> >> ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationXen.fdf
> >>  create mode 100644
> >>
> ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPe
> >> iLib/ArmVirtualizationMemoryInitPeiLib.c
> >>  create mode 100644
> >>
> ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPe
> >> iLib/ArmVirtualizationMemoryInitPeiLib.inf
> >>  create mode 100644
> >>
> ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmXenRelocatablePlatformLib/
> >> AARCH64/MemnodeParser.S
> >>  create mode 100644
> >>
> ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmXenRelocatablePlatformLib/
> >> AARCH64/RelocatableVirtHelper.S
> >>  create mode 100644
> >>
> ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmXenRelocatablePlatformLib/
> >> ArmXenRelocatablePlatformLib.inf
> >>  create mode 100644
> >>
> ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmXenRelocatablePlatformLib/
> >> RelocatableVirt.c
> >>  create mode 100644
> >>
> ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmXenRelocatablePlatformLib/
> >> XenVirtMem.c
> >>  create mode 100644
> >>
> ArmPlatformPkg/ArmVirtualizationPkg/Library/XenRealTimeClockLib/XenRealTi
> >> meClockLib.c
> >>  create mode 100644
> >>
> ArmPlatformPkg/ArmVirtualizationPkg/Library/XenRealTimeClockLib/XenRealTi
> >> meClockLib.inf
> >>  create mode 100644
> >> ArmPlatformPkg/ArmVirtualizationPkg/PrePi/AArch64/ArchPrePi.c
> >>  create mode 100644
> >> ArmPlatformPkg/ArmVirtualizationPkg/PrePi/AArch64/ModuleEntryPoint.S
> >>  create mode 100755
> >>
> ArmPlatformPkg/ArmVirtualizationPkg/PrePi/ArmVirtPrePiUniCoreRelocatable.
> >> inf
> >>  create mode 100644
> >> ArmPlatformPkg/ArmVirtualizationPkg/PrePi/LzmaDecompress.h
> >>  create mode 100755 ArmPlatformPkg/ArmVirtualizationPkg/PrePi/PrePi.c
> >>  create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/PrePi/PrePi.h
> >>  create mode 100644
> >> ArmPlatformPkg/ArmVirtualizationPkg/PrePi/Scripts/PrePi-PIE.lds
> >>  create mode 100644 EmbeddedPkg/Include/Guid/FdtHob.h
> >>  create mode 100644
> >> MdePkg/Library/BaseSynchronizationLib/AArch64/Synchronization.S
> >>  delete mode 100644
> >> MdePkg/Library/BaseSynchronizationLib/AArch64/Synchronization.c
> >>  create mode 100644
> >> MdePkg/Library/BaseSynchronizationLib/Arm/Synchronization.S
> >>  create mode 100644
> >> MdePkg/Library/BaseSynchronizationLib/Arm/Synchronization.asm
> >>  delete mode 100644
> >> MdePkg/Library/BaseSynchronizationLib/Arm/Synchronization.c
> >>  mode change 100644 => 100755
> >> MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf
> >>  rename OvmfPkg/XenBusDxe/Ia32/InterlockedCompareExchange16.nasm
> =>
> >>
> MdePkg/Library/BaseSynchronizationLib/Ia32/InterlockedCompareExchange16
> >> .asm (86%)
> >>  rename OvmfPkg/XenBusDxe/InterlockedCompareExchange16.h =>
> >>
> MdePkg/Library/BaseSynchronizationLib/Ia32/InterlockedCompareExchange16
> >> .c (52%)
> >>  create mode 100644
> >>
> MdePkg/Library/BaseSynchronizationLib/Ipf/InterlockedCompareExchange16.s
> >>  rename OvmfPkg/XenBusDxe/X64/InterlockedCompareExchange16.nasm
> =>
> >>
> MdePkg/Library/BaseSynchronizationLib/X64/InterlockedCompareExchange16.
> >> asm (88%)
> >>  create mode 100644
> >>
> MdePkg/Library/BaseSynchronizationLib/X64/InterlockedCompareExchange16.
> >> c
> >>  create mode 100644 OvmfPkg/Include/Guid/XenBusRootDevice.h
> >>  create mode 100644
> OvmfPkg/Include/IndustryStandard/Xen/arch-arm/xen.h
> >>  create mode 100644 OvmfPkg/Include/IndustryStandard/Xen/io/console.h
> >>  rename OvmfPkg/{XenBusDxe/XenHypercall.h =>
> >> Include/Library/XenHypercallLib.h} (57%)
> >>  create mode 100644 OvmfPkg/Include/Library/XenIoMmioLib.h
> >>  create mode 100644 OvmfPkg/Include/Protocol/XenIo.h
> >>  create mode 100644
> >> OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.c
> >>  create mode 100644
> >> OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.inf
> >>  create mode 100644
> OvmfPkg/Library/XenHypercallLib/Aarch64/Hypercall.S
> >>  create mode 100644 OvmfPkg/Library/XenHypercallLib/Arm/Hypercall.S
> >>  rename OvmfPkg/{XenBusDxe =>
> >> Library/XenHypercallLib}/Ia32/hypercall.nasm (81%)
> >>  rename OvmfPkg/{XenBusDxe =>
> >> Library/XenHypercallLib}/X64/hypercall.nasm (78%)
> >>  create mode 100644 OvmfPkg/Library/XenHypercallLib/XenHypercall.c
> >>  create mode 100644
> OvmfPkg/Library/XenHypercallLib/XenHypercallIntel.c
> >>  create mode 100644
> >> OvmfPkg/Library/XenHypercallLib/XenHypercallLibArm.inf
> >>  create mode 100644
> >> OvmfPkg/Library/XenHypercallLib/XenHypercallLibIntel.inf
> >>  create mode 100644 OvmfPkg/Library/XenIoMmioLib/XenIoMmioLib.c
> >>  create mode 100644 OvmfPkg/Library/XenIoMmioLib/XenIoMmioLib.inf
> >>  delete mode 100644 OvmfPkg/XenBusDxe/Ia32/TestAndClearBit.nasm
> >>  delete mode 100644
> OvmfPkg/XenBusDxe/InterlockedCompareExchange16.c
> >>  create mode 100644 OvmfPkg/XenBusDxe/TestAndClearBit.c
> >>  delete mode 100644 OvmfPkg/XenBusDxe/X64/TestAndClearBit.nasm
> >>  delete mode 100644 OvmfPkg/XenBusDxe/XenHypercall.c
> >>  create mode 100644 OvmfPkg/XenIoPciDxe/XenIoPciDxe.c
> >>  create mode 100644 OvmfPkg/XenIoPciDxe/XenIoPciDxe.inf
> >>
> >
> > Which tree will these patches be merged in? Do you develop these based on
> > the same tree with ovmf/x86? Thanks a lot!
> >
> 
> 
> Yes, these have been merged upstream in the mean time by Laszlo.

Thanks a lot for your feedback, Ard.

Thanks,
Feng

> 
> --
> Ard.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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