From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 5FCB381944 for ; Wed, 4 Jan 2017 11:52:03 -0800 (PST) Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id EE84AC05683F; Wed, 4 Jan 2017 19:52:03 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-116-72.phx2.redhat.com [10.3.116.72]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v04Jq2gd030978; Wed, 4 Jan 2017 14:52:02 -0500 From: Laszlo Ersek To: Anthony PERARD , edk2-devel@ml01.01.org, xen-devel@lists.xenproject.org References: <20161208153340.2285-1-anthony.perard@citrix.com> Message-ID: <1decd92c-7567-ecc0-3ee7-9097ad15ff6c@redhat.com> Date: Wed, 4 Jan 2017 20:52:00 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.6.0 MIME-Version: 1.0 In-Reply-To: <20161208153340.2285-1-anthony.perard@citrix.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Wed, 04 Jan 2017 19:52:04 +0000 (UTC) Subject: Re: [PATCH RFC 00/14] Specific platform to run OVMF in Xen PVH and HVM guests X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 04 Jan 2017 19:52:03 -0000 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit On 12/08/16 16:33, Anthony PERARD wrote: > Hi, > > I've started to create a Xen specifig plaform, in OvmfPkg/XenOvmf.dsc > with the goal to make it work on both Xen HVM and Xen PVHv2 Does this mean we can ultimately move all Xen roles from the current platform DSC files to the new Xen DSC file entirely? If so (which I think I would like), then for each module M that exhibits all of the following properties: - M is dynamically customized to Xen vs. QEMU, - M is replaced by a dedicated module M' in the Xen DSC, I think we should also remove the Xen-specific code from the original M (as last step, likely in separate patches). In addition, Xen platform specific device drivers should be removed as well from the original DSC files. What do you think? > The first few patches only create the platform and duplicate some code from > OvmfPkg and the later patches (from OvmfPkg/XenPlatformPei: Add xen PVH > specific code) makes OVMF boot in a Xen PVH guest, and can boot a Linux. > > == Part 1: XenOvmf.dsc > > - OvmfPkg: Create platform XenOvmf > which for now remove virtio drivers and some SMM > > - OvmfPkg/XenOvmf: Update debug IO port for Xen > > - OvmfPkg/XenOvmf.dsc: Introduce XenResetVector > Just for one change, enable cache in CR0 as on Xen, OVMF run from RAM, that > disabling cache can make OVMF very slow. > ... I might reply to this email again (the remaining stuff), as I progress with the review. Thanks Laszlo > - OvmfPkg: Introduce XenPlatformPei > remove some QEMU/KVM specific code from PlatformPei. > > - OvmfPkg/Library: add XenPciHostBridgeLib > same with PciHostBridgeLib > > == Part 2: PVH enabled > > - OvmfPkg/XenPlatformPei: Add xen PVH specific code > To figure out the memory size from E820 > > - OvmfPkg/XenResetVector: Add new entry point for Xen PVH > which is in 32bits > > - OvmfPkg/PlatformBootManagerLib: Workaround missing PCI bus on Xen PVH > to avoid the Unknown Host Bridge Device ID error > > - OvmfPkg/ResetSystemLib: Add missing dependency on PciLib > - UefiCpuPkg/BaseXApicX2ApicLib: Fix initialisation on my system and ... > - OvmfPkg/XenOvmf: Adding XenTimerLocalApic > to replace the ACPI timer > > - OvmfPkg/PlatformBootManagerLib: Use a Xen console for ConOut/ConIn > - OvmfPkg: Introduce XenIoPvhDxe to initialize Grant Tables > - XenOvmf: Use a different RTC > which does always return the same value > > == to build and boot > > To build, simply run OvmfPkg/build.sh -p OvmfPkg/XenOvmf.dsc > > To run, I currently use a loader, base on hvmloader which does some setup, read > the e820 and copy ovmf to the right place to start it. > > The loader is avaible in branch `ovmf-pvhloader' from > https://xenbits.xen.org/git-http/people/aperard/xen-unstable.git > > And the guest I'm using: > builder = 'hvm' > memory = 512 > name = "pvh-ovmf" > kernel = 'pvh-ovmf-loader' > ramdisk='OVMF.fd' > extra='ovmf=1' > disk = [ 'file:iso/archlinux-2016.10.01-dual.iso,hdc:cdrom,r', ] > device_model_version = 'none' > serial = 'pty' > > Anthony PERARD (14): > OvmfPkg: Create platform XenOvmf > OvmfPkg/XenOvmf: Update debug IO port for Xen > OvmfPkg/XenOvmf.dsc: Introduce XenResetVector > OvmfPkg: Introduce XenPlatformPei > OvmfPkg/Library: add XenPciHostBridgeLib > OvmfPkg/XenPlatformPei: Add xen PVH specific code > OvmfPkg/XenResetVector: Add new entry point for Xen PVH > OvmfPkg/PlatformBootManagerLib: Workaround missing PCI bus on Xen PVH > OvmfPkg/ResetSystemLib: Add missing dependency on PciLib > UefiCpuPkg/BaseXApicX2ApicLib: Fix initialisation on my system and ... > OvmfPkg/XenOvmf: Adding XenTimerLocalApic > OvmfPkg/PlatformBootManagerLib: Use a Xen console for ConOut/ConIn > OvmfPkg: Introduce XenIoPvhDxe to initialize Grant Tables > XenOvmf: Use a different RTC > > .../Library/PlatformBootManagerLib/BdsPlatform.c | 35 + > .../PlatformBootManagerLib.inf | 2 + > OvmfPkg/Library/ResetSystemLib/ResetSystemLib.inf | 1 + > .../Library/XenPciHostBridgeLib/XenPciHostBridge.h | 75 ++ > .../XenPciHostBridgeLib/XenPciHostBridgeLib.c | 291 ++++++++ > .../XenPciHostBridgeLib/XenPciHostBridgeLib.inf | 58 ++ > OvmfPkg/Library/XenPciHostBridgeLib/XenSupport.c | 456 ++++++++++++ > OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c | 263 +++++++ > OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.inf | 45 ++ > OvmfPkg/XenOvmf.dsc | 809 +++++++++++++++++++++ > OvmfPkg/XenOvmf.fdf | 506 +++++++++++++ > OvmfPkg/XenPlatformPei/Cmos.c | 64 ++ > OvmfPkg/XenPlatformPei/Cmos.h | 56 ++ > OvmfPkg/XenPlatformPei/Fv.c | 100 +++ > OvmfPkg/XenPlatformPei/MemDetect.c | 520 +++++++++++++ > OvmfPkg/XenPlatformPei/Platform.c | 541 ++++++++++++++ > OvmfPkg/XenPlatformPei/Platform.h | 114 +++ > OvmfPkg/XenPlatformPei/Xen.c | 231 ++++++ > OvmfPkg/XenPlatformPei/Xen.h | 45 ++ > OvmfPkg/XenPlatformPei/XenPlatformPei.inf | 110 +++ > OvmfPkg/XenResetVector/Ia16/Real16ToFlat32.asm | 133 ++++ > OvmfPkg/XenResetVector/Ia16/ResetVectorVtf0.asm | 79 ++ > OvmfPkg/XenResetVector/Ia32/PageTables64.asm | 93 +++ > OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm | 23 + > OvmfPkg/XenResetVector/XenResetVector.inf | 37 + > OvmfPkg/XenResetVector/XenResetVector.nasmb | 67 ++ > OvmfPkg/XenTimerLocalApic/Timer.h | 191 +++++ > OvmfPkg/XenTimerLocalApic/XenTimerLocalApic.c | 386 ++++++++++ > OvmfPkg/XenTimerLocalApic/XenTimerLocalApic.inf | 51 ++ > UefiCpuPkg/Include/Library/LocalApicLib.h | 40 + > .../BaseXApicX2ApicLib/BaseXApicX2ApicLib.c | 10 +- > 31 files changed, 5427 insertions(+), 5 deletions(-) > create mode 100644 OvmfPkg/Library/XenPciHostBridgeLib/XenPciHostBridge.h > create mode 100644 OvmfPkg/Library/XenPciHostBridgeLib/XenPciHostBridgeLib.c > create mode 100644 OvmfPkg/Library/XenPciHostBridgeLib/XenPciHostBridgeLib.inf > create mode 100644 OvmfPkg/Library/XenPciHostBridgeLib/XenSupport.c > create mode 100644 OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c > create mode 100644 OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.inf > create mode 100644 OvmfPkg/XenOvmf.dsc > create mode 100644 OvmfPkg/XenOvmf.fdf > create mode 100644 OvmfPkg/XenPlatformPei/Cmos.c > create mode 100644 OvmfPkg/XenPlatformPei/Cmos.h > create mode 100644 OvmfPkg/XenPlatformPei/Fv.c > create mode 100644 OvmfPkg/XenPlatformPei/MemDetect.c > create mode 100644 OvmfPkg/XenPlatformPei/Platform.c > create mode 100644 OvmfPkg/XenPlatformPei/Platform.h > create mode 100644 OvmfPkg/XenPlatformPei/Xen.c > create mode 100644 OvmfPkg/XenPlatformPei/Xen.h > create mode 100644 OvmfPkg/XenPlatformPei/XenPlatformPei.inf > create mode 100644 OvmfPkg/XenResetVector/Ia16/Real16ToFlat32.asm > create mode 100644 OvmfPkg/XenResetVector/Ia16/ResetVectorVtf0.asm > create mode 100644 OvmfPkg/XenResetVector/Ia32/PageTables64.asm > create mode 100644 OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm > create mode 100644 OvmfPkg/XenResetVector/XenResetVector.inf > create mode 100644 OvmfPkg/XenResetVector/XenResetVector.nasmb > create mode 100644 OvmfPkg/XenTimerLocalApic/Timer.h > create mode 100644 OvmfPkg/XenTimerLocalApic/XenTimerLocalApic.c > create mode 100644 OvmfPkg/XenTimerLocalApic/XenTimerLocalApic.inf >