public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* Re: [PATCH v2 00/31] Specific platform to run OVMF in Xen PVH and HVM guests
       [not found] <20190408142408.30419-1-anthony.perard@citrix.com>
@ 2019-04-08 15:50 ` Laszlo Ersek
  2019-04-09  8:09   ` Laszlo Ersek
  2019-04-09 10:50   ` Anthony PERARD
  0 siblings, 2 replies; 5+ messages in thread
From: Laszlo Ersek @ 2019-04-08 15:50 UTC (permalink / raw)
  To: Anthony PERARD, edk2-devel
  Cc: Julien Grall, Ard Biesheuvel, Jordan Justen, xen-devel,
	Leif Lindholm, edk2-devel-groups-io

On 04/08/19 16:23, Anthony PERARD wrote:
> Patch series available in this git branch:
> https://xenbits.xen.org/git-http/people/aperard/ovmf.git br.platform-xen-pvh-v2
>
> Hi,
>
> I've started to create a Xen specific platform, in OvmfPkg/XenOvmf.dsc
> with the goal to make it work on both Xen HVM and Xen PVH.

The previous version of this feature dates back to Dec 2016 / Jan 2017;
I haven't forgotten about it, and I'm happy that you are adding the
feature as a separate platform DSC, as I requested.

> The first few patches only create the platform and duplicate some code
> from OvmfPkg and the later patches makes OVMF boot in a Xen PVH guest
> and can boot a Linux guest.
>
> After this patch series, I'd like to wait a bit before removing Xen
> support from the OvmfPkg*.dsc, to allow time to switch to the new Xen
> only platform, maybe 1 year.

I welcome this proposal very much. This will eliminate a significant
amount of complexity in the current modules, allow for
easier-to-understand maintenance assignments/responsibilities, and pave
the way for features that are unique to either Xen or QEMU (in
particular in the variable storage area, for which Xen has just received
a dedicated userspace daemon IIRC, and for which -- on QEMU -- I had
attempted to make pflash a conditional hard requirement, in the past,
but failed due to OvmfPkg*.dsc targeting Xen too).

> Question:
>
> Should we start moving these to a different *Pkg? Like it's done for
> ArmPkg and ArmVirtPkg?  Maybe XenPkg.

I'm pretty happy with the current package structure. ArmPkg is for both
physical and virtual hardware. ArmVirtPkg is virt-only, and we already
have separate platform DSCs/FDFs between Xen (ArmVirtXen) and QEMU/KVM
(ArmVirtQemu[Kernel]). Xen- and QEMU/KVM-specific drivers and library
instances peacefully coexist under ArmVirtPkg; the DSCs/FDFs include
them as appropriate.

The same should map nicely to OvmfPkg. x86 stuff that targets both
physical and virtual hardware belongs under PcAtChipsetPkg and
UefiCpuPkg. Virt-only stuff should go under OvmfPkg; Xen-specific and
QEMU/KVM-specific modules can coexist under OvmfPkg. It's sufficient if
the platform DSCs cherry-pick them as appropriate.

And, if there are Xen-specific (but not arch-specific) PEIMs / drivers /
libraries that work alike on ARM and x86, they should go under OvmfPkg,
as ArmVirtPkg can (and already does) pull Xen-only modules from OvmfPkg.
See for example, in ArmVirtXen.dsc:

  SerialPortLib|OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.inf
  XenHypercallLib|OvmfPkg/Library/XenHypercallLib/XenHypercallLib.inf

  OvmfPkg/XenBusDxe/XenBusDxe.inf
  OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf

> To build and boot:
>
> To build, simply run OvmfPkg/build.sh -p OvmfPkg/XenOvmf.dsc

(1) To stick with the ArmVirt pattern, we should initially call this
platform OvmfXen.

(2) And, once you remove the Xen bits from the current
OvmfPkg*.dsc files, we should likely rename those to OvmfQemu*dsc.

I'll try to process this series in a timely manner. My main focus will
be possible regressions on QEMU/KVM, and formalities (license blocks,
signoffs, edk2 coding style, build issues that I might notice in
review).

I can't provide testing feedback, but xen-devel subscribers (and any
other Xen users too, obviously) are super welcome to test & report
results!

(3) Please file a BZ at <https://bugzilla.tianocore.org/> about this
feature, and assign it to yourself. The BZ should keep track of all
versions of the patch series (from the mailing list archive).

(4) Ideally, the release notes for the edk2 stable release in which the
feature will appear, should mention the feature (via linking the BZ):
<https://github.com/tianocore/tianocore.github.io/wiki/EDK-II-Release-Planning#proposed-features>

(5) The BZ should be referenced in all the commit messages.

(6) The new edk2 development mailing list is at:

https://edk2.groups.io/g/devel

Please subscribe there, and resend this series to that address, i.e.
<devel@edk2.groups.io>. I'm CC'ing the new address myself, for this
initial response, but I'd prefer the rest of my comments to go only to
the new list (without manually updating the CC list on every response).

Thanks!
Laszlo

> Then use OVMF.fd as a kernel of a pvh guest config file (with
> xl/libxl).
>
> Patch series available in this git branch:
> https://xenbits.xen.org/git-http/people/aperard/ovmf.git br.platform-xen-pvh-v2
>
> Anthony PERARD (31):
>   OvmfPkg/ResetSystemLib: Add missing dependency on PciLib
>   OvmfPkg: Create platform XenOvmf
>   OvmfPkg: Introduce XenResetVector
>   OvmfPkg: Introduce XenPlatformPei
>   OvmfPkg/XenOvmf: Creating an ELF header
>   OvmfPkg/XenResetVector: Add new entry point for Xen PVH
>   OvmfPkg/XenResetVector: Saving start of day pointer for PVH guests
>   OvmfPkg/XenResetVector: Allow to jumpstart from either hvmloader or
>     PVH
>   OvmfPkg/XenOvmf: use a TimerLib instance that depends only on the CPU
>   OvmfPkg/XenPlatformPei: Detect OVMF_INFO from hvmloader
>   OvmfPkg/XenPlatformPei: Use mXenHvmloaderInfo to get E820
>   OvmfPkg/XenPlatformPei: Grab RSDP from PVH guest start of day struct
>   OvmfPkg/Library/XenPlatformLib: New library
>   OvmfPkg/AcpiPlatformDxe: Use PVH RSDP if exist
>   OvmfPkg/XenHypercallLib: Enable it in PEIM
>   OvmfPkg/XenPlatformPei: Introduce XenHvmloaderDetected
>   OvmfPkg/XenPlatformPei: Reserve hvmloader's memory only when it as
>     runned
>   OvmfPkg/XenPlatformPei: Setup HyperPages earlier
>   OvmfPkg/XenPlatformPei: Introduce XenPvhDetected
>   OvmfPkg: Import XENMEM_memory_map hypercall to Xen/memory.h
>   OvmfPkg/XenPlatformPei: Get E820 table via hypercall ...
>   OvmfPkg/XenPlatformPei: Rework memory detection
>   OvmfPkg/XenPlatformPei: Reserve VGA memory region, to boot Linux
>   OvmfPkg/XenPlatformPei: Ignore missing PCI Host Bridge on Xen PVH
>   OvmfPkg/PlatformBootManagerLib: Handle the absence of PCI bus on Xen
>     PVH
>   OvmfPkg/XenOvmf: Override PcdFSBClock to Xen vLAPIC timer frequency
>   OvmfPkg/XenOvmf: Introduce XenTimerDxe
>   OvmfPkg/PlatformBootManagerLib: Use a Xen console for ConOut/ConIn
>   OvmfPkg: Introduce XenIoPvhDxe to initialize Grant Tables
>   OvmfPkg: Move XenRealTimeClockLib from ArmVirtPkg
>   OvmfPkg/XenOvmf: use RealTimeClockRuntimeDxe from EmbeddedPkg
>
>  OvmfPkg/OvmfPkg.dec                                                                                                 |   4 +
>  ArmVirtPkg/ArmVirtXen.dsc                                                                                           |   2 +-
>  OvmfPkg/OvmfPkgIa32.dsc                                                                                             |   1 +
>  OvmfPkg/OvmfPkgIa32X64.dsc                                                                                          |   1 +
>  OvmfPkg/OvmfPkgX64.dsc                                                                                              |   1 +
>  OvmfPkg/{OvmfPkgX64.dsc => XenOvmf.dsc}                                                                             | 236 ++------
>  OvmfPkg/XenOvmf.fdf                                                                                                 | 561 ++++++++++++++++++++
>  OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf                                                                         |   2 +-
>  OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf                                                   |   4 +
>  OvmfPkg/Library/ResetSystemLib/ResetSystemLib.inf                                                                   |   1 +
>  OvmfPkg/Library/XenHypercallLib/XenHypercallLib.inf                                                                 |   2 +-
>  ArmVirtPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf => OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf |  30 +-
>  {ArmVirtPkg => OvmfPkg}/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf                                         |   0
>  OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.inf                                                                                 |  35 ++
>  OvmfPkg/XenPlatformPei/XenPlatformPei.inf                                                                           | 107 ++++
>  OvmfPkg/XenResetVector/XenResetVector.inf                                                                           |  46 ++
>  OvmfPkg/XenTimerDxe/XenTimerDxe.inf                                                                                 |  49 ++
>  OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h                                                                              |   6 +-
>  OvmfPkg/Include/Guid/XenInfo.h                                                                                      |   8 +-
>  OvmfPkg/Include/IndustryStandard/Xen/arch-x86/hvm/start_info.h                                                      | 159 ++++++
>  OvmfPkg/Include/IndustryStandard/Xen/memory.h                                                                       |  23 +
>  OvmfPkg/Include/Library/XenHypercallLib.h                                                                           |  12 +
>  OvmfPkg/Include/Library/XenPlatformLib.h                                                                            |  59 ++
>  OvmfPkg/Include/OvmfPlatforms.h                                                                                     |   6 +
>  OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.h                                                                |   1 +
>  OvmfPkg/XenPlatformPei/Cmos.h                                                                                       |  58 ++
>  OvmfPkg/XenPlatformPei/Platform.h                                                                                   | 135 +++++
>  OvmfPkg/{PlatformPei => XenPlatformPei}/Xen.h                                                                       |   0
>  OvmfPkg/XenTimerDxe/XenTimerDxe.h                                                                                   | 183 +++++++
>  OvmfPkg/AcpiPlatformDxe/Xen.c                                                                                       |  41 +-
>  OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c                                                                |  15 +-
>  OvmfPkg/Library/PlatformBootManagerLib/PlatformData.c                                                               |  59 ++
>  OvmfPkg/Library/ResetSystemLib/ResetSystemLib.c                                                                     |   3 +-
>  OvmfPkg/Library/XenHypercallLib/X86XenHypercall.c                                                                   |  11 +
>  OvmfPkg/Library/XenPlatformLib/XenPlatformLib.c                                                                     |  75 +++
>  {ArmVirtPkg => OvmfPkg}/Library/XenRealTimeClockLib/XenRealTimeClockLib.c                                           |   0
>  OvmfPkg/PlatformPei/Xen.c                                                                                           |   3 -
>  OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c                                                                                   |  38 ++
>  OvmfPkg/XenPlatformPei/AmdSev.c                                                                                     |  70 +++
>  OvmfPkg/XenPlatformPei/ClearCache.c                                                                                 | 118 ++++
>  OvmfPkg/XenPlatformPei/Cmos.c                                                                                       |  66 +++
>  OvmfPkg/XenPlatformPei/Fv.c                                                                                         |  82 +++
>  OvmfPkg/XenPlatformPei/MemDetect.c                                                                                  | 498 +++++++++++++++++
>  OvmfPkg/XenPlatformPei/Platform.c                                                                                   | 458 ++++++++++++++++
>  OvmfPkg/XenPlatformPei/Xen.c                                                                                        | 381 +++++++++++++
>  OvmfPkg/XenTimerDxe/XenTimerDxe.c                                                                                   | 361 +++++++++++++
>  generate_elf_header.c                                                                                               |  78 +++
>  OvmfPkg/XenResetVector/Ia16/Real16ToFlat32.asm                                                                      | 144 +++++
>  OvmfPkg/XenResetVector/Ia16/ResetVectorVtf0.asm                                                                     |  87 +++
>  OvmfPkg/XenResetVector/Ia32/Flat32ToFlat64.asm                                                                      |  66 +++
>  OvmfPkg/XenResetVector/Ia32/PageTables64.asm                                                                        | 156 ++++++
>  OvmfPkg/XenResetVector/Ia32/SearchForBfvBase.asm                                                                    |  93 ++++
>  OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm                                                                          |  75 +++
>  OvmfPkg/XenResetVector/XenResetVector.nasmb                                                                         |  78 +++
>  54 files changed, 4526 insertions(+), 262 deletions(-)
>  copy OvmfPkg/{OvmfPkgX64.dsc => XenOvmf.dsc} (78%)
>  create mode 100644 OvmfPkg/XenOvmf.fdf
>  copy ArmVirtPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf => OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf (50%)
>  rename {ArmVirtPkg => OvmfPkg}/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf (100%)
>  create mode 100644 OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.inf
>  create mode 100644 OvmfPkg/XenPlatformPei/XenPlatformPei.inf
>  create mode 100644 OvmfPkg/XenResetVector/XenResetVector.inf
>  create mode 100644 OvmfPkg/XenTimerDxe/XenTimerDxe.inf
>  create mode 100644 OvmfPkg/Include/IndustryStandard/Xen/arch-x86/hvm/start_info.h
>  create mode 100644 OvmfPkg/Include/Library/XenPlatformLib.h
>  create mode 100644 OvmfPkg/XenPlatformPei/Cmos.h
>  create mode 100644 OvmfPkg/XenPlatformPei/Platform.h
>  copy OvmfPkg/{PlatformPei => XenPlatformPei}/Xen.h (100%)
>  create mode 100644 OvmfPkg/XenTimerDxe/XenTimerDxe.h
>  create mode 100644 OvmfPkg/Library/XenPlatformLib/XenPlatformLib.c
>  rename {ArmVirtPkg => OvmfPkg}/Library/XenRealTimeClockLib/XenRealTimeClockLib.c (100%)
>  create mode 100644 OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c
>  create mode 100644 OvmfPkg/XenPlatformPei/AmdSev.c
>  create mode 100644 OvmfPkg/XenPlatformPei/ClearCache.c
>  create mode 100644 OvmfPkg/XenPlatformPei/Cmos.c
>  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/Xen.c
>  create mode 100644 OvmfPkg/XenTimerDxe/XenTimerDxe.c
>  create mode 100644 generate_elf_header.c
>  create mode 100644 OvmfPkg/XenResetVector/Ia16/Real16ToFlat32.asm
>  create mode 100644 OvmfPkg/XenResetVector/Ia16/ResetVectorVtf0.asm
>  create mode 100644 OvmfPkg/XenResetVector/Ia32/Flat32ToFlat64.asm
>  create mode 100644 OvmfPkg/XenResetVector/Ia32/PageTables64.asm
>  create mode 100644 OvmfPkg/XenResetVector/Ia32/SearchForBfvBase.asm
>  create mode 100644 OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm
>  create mode 100644 OvmfPkg/XenResetVector/XenResetVector.nasmb
>


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 00/31] Specific platform to run OVMF in Xen PVH and HVM guests
  2019-04-08 15:50 ` [PATCH v2 00/31] Specific platform to run OVMF in Xen PVH and HVM guests Laszlo Ersek
@ 2019-04-09  8:09   ` Laszlo Ersek
  2019-04-09 11:15     ` [edk2-devel] " Philippe Mathieu-Daudé
  2019-04-09 10:50   ` Anthony PERARD
  1 sibling, 1 reply; 5+ messages in thread
From: Laszlo Ersek @ 2019-04-09  8:09 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Julien Grall, Ard Biesheuvel, Jordan Justen, xen-devel,
	Leif Lindholm, edk2-devel-groups-io

On 04/08/19 17:50, Laszlo Ersek wrote:
> On 04/08/19 16:23, Anthony PERARD wrote:
>> Patch series available in this git branch:
>> https://xenbits.xen.org/git-http/people/aperard/ovmf.git br.platform-xen-pvh-v2
>>
>> Hi,
>>
>> I've started to create a Xen specific platform, in OvmfPkg/XenOvmf.dsc
>> with the goal to make it work on both Xen HVM and Xen PVH.
> 
> The previous version of this feature dates back to Dec 2016 / Jan 2017;
> I haven't forgotten about it, and I'm happy that you are adding the
> feature as a separate platform DSC, as I requested.
> 
>> The first few patches only create the platform and duplicate some code
>> from OvmfPkg and the later patches makes OVMF boot in a Xen PVH guest
>> and can boot a Linux guest.
>>
>> After this patch series, I'd like to wait a bit before removing Xen
>> support from the OvmfPkg*.dsc, to allow time to switch to the new Xen
>> only platform, maybe 1 year.
> 
> I welcome this proposal very much. This will eliminate a significant
> amount of complexity in the current modules, allow for
> easier-to-understand maintenance assignments/responsibilities, and pave
> the way for features that are unique to either Xen or QEMU (in
> particular in the variable storage area, for which Xen has just received
> a dedicated userspace daemon IIRC, and for which -- on QEMU -- I had
> attempted to make pflash a conditional hard requirement, in the past,
> but failed due to OvmfPkg*.dsc targeting Xen too).
> 
>> Question:
>>
>> Should we start moving these to a different *Pkg? Like it's done for
>> ArmPkg and ArmVirtPkg?  Maybe XenPkg.
> 
> I'm pretty happy with the current package structure. ArmPkg is for both
> physical and virtual hardware. ArmVirtPkg is virt-only, and we already
> have separate platform DSCs/FDFs between Xen (ArmVirtXen) and QEMU/KVM
> (ArmVirtQemu[Kernel]). Xen- and QEMU/KVM-specific drivers and library
> instances peacefully coexist under ArmVirtPkg; the DSCs/FDFs include
> them as appropriate.
> 
> The same should map nicely to OvmfPkg. x86 stuff that targets both
> physical and virtual hardware belongs under PcAtChipsetPkg and
> UefiCpuPkg. Virt-only stuff should go under OvmfPkg; Xen-specific and
> QEMU/KVM-specific modules can coexist under OvmfPkg. It's sufficient if
> the platform DSCs cherry-pick them as appropriate.
> 
> And, if there are Xen-specific (but not arch-specific) PEIMs / drivers /
> libraries that work alike on ARM and x86, they should go under OvmfPkg,
> as ArmVirtPkg can (and already does) pull Xen-only modules from OvmfPkg.
> See for example, in ArmVirtXen.dsc:
> 
>   SerialPortLib|OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.inf
>   XenHypercallLib|OvmfPkg/Library/XenHypercallLib/XenHypercallLib.inf
> 
>   OvmfPkg/XenBusDxe/XenBusDxe.inf
>   OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf
> 
>> To build and boot:
>>
>> To build, simply run OvmfPkg/build.sh -p OvmfPkg/XenOvmf.dsc
> 
> (1) To stick with the ArmVirt pattern, we should initially call this
> platform OvmfXen.
> 
> (2) And, once you remove the Xen bits from the current
> OvmfPkg*.dsc files, we should likely rename those to OvmfQemu*dsc.
> 
> I'll try to process this series in a timely manner. My main focus will
> be possible regressions on QEMU/KVM, and formalities (license blocks,
> signoffs, edk2 coding style, build issues that I might notice in
> review).
> 
> I can't provide testing feedback, but xen-devel subscribers (and any
> other Xen users too, obviously) are super welcome to test & report
> results!
> 
> (3) Please file a BZ at <https://bugzilla.tianocore.org/> about this
> feature, and assign it to yourself. The BZ should keep track of all
> versions of the patch series (from the mailing list archive).
> 
> (4) Ideally, the release notes for the edk2 stable release in which the
> feature will appear, should mention the feature (via linking the BZ):
> <https://github.com/tianocore/tianocore.github.io/wiki/EDK-II-Release-Planning#proposed-features>
> 
> (5) The BZ should be referenced in all the commit messages.
> 
> (6) The new edk2 development mailing list is at:
> 
> https://edk2.groups.io/g/devel
> 
> Please subscribe there, and resend this series to that address, i.e.
> <devel@edk2.groups.io>. I'm CC'ing the new address myself, for this
> initial response, but I'd prefer the rest of my comments to go only to
> the new list (without manually updating the CC list on every response).

(7) I forgot to mention that, due to
<https://bugzilla.tianocore.org/show_bug.cgi?id=1373> being very close
to being fixed / pushed, the the "Contributed-under" lines near your
signoffs will no longer be necessary.

Thanks
Laszlo

> 
> Thanks!
> Laszlo
> 
>> Then use OVMF.fd as a kernel of a pvh guest config file (with
>> xl/libxl).
>>
>> Patch series available in this git branch:
>> https://xenbits.xen.org/git-http/people/aperard/ovmf.git br.platform-xen-pvh-v2
>>
>> Anthony PERARD (31):
>>   OvmfPkg/ResetSystemLib: Add missing dependency on PciLib
>>   OvmfPkg: Create platform XenOvmf
>>   OvmfPkg: Introduce XenResetVector
>>   OvmfPkg: Introduce XenPlatformPei
>>   OvmfPkg/XenOvmf: Creating an ELF header
>>   OvmfPkg/XenResetVector: Add new entry point for Xen PVH
>>   OvmfPkg/XenResetVector: Saving start of day pointer for PVH guests
>>   OvmfPkg/XenResetVector: Allow to jumpstart from either hvmloader or
>>     PVH
>>   OvmfPkg/XenOvmf: use a TimerLib instance that depends only on the CPU
>>   OvmfPkg/XenPlatformPei: Detect OVMF_INFO from hvmloader
>>   OvmfPkg/XenPlatformPei: Use mXenHvmloaderInfo to get E820
>>   OvmfPkg/XenPlatformPei: Grab RSDP from PVH guest start of day struct
>>   OvmfPkg/Library/XenPlatformLib: New library
>>   OvmfPkg/AcpiPlatformDxe: Use PVH RSDP if exist
>>   OvmfPkg/XenHypercallLib: Enable it in PEIM
>>   OvmfPkg/XenPlatformPei: Introduce XenHvmloaderDetected
>>   OvmfPkg/XenPlatformPei: Reserve hvmloader's memory only when it as
>>     runned
>>   OvmfPkg/XenPlatformPei: Setup HyperPages earlier
>>   OvmfPkg/XenPlatformPei: Introduce XenPvhDetected
>>   OvmfPkg: Import XENMEM_memory_map hypercall to Xen/memory.h
>>   OvmfPkg/XenPlatformPei: Get E820 table via hypercall ...
>>   OvmfPkg/XenPlatformPei: Rework memory detection
>>   OvmfPkg/XenPlatformPei: Reserve VGA memory region, to boot Linux
>>   OvmfPkg/XenPlatformPei: Ignore missing PCI Host Bridge on Xen PVH
>>   OvmfPkg/PlatformBootManagerLib: Handle the absence of PCI bus on Xen
>>     PVH
>>   OvmfPkg/XenOvmf: Override PcdFSBClock to Xen vLAPIC timer frequency
>>   OvmfPkg/XenOvmf: Introduce XenTimerDxe
>>   OvmfPkg/PlatformBootManagerLib: Use a Xen console for ConOut/ConIn
>>   OvmfPkg: Introduce XenIoPvhDxe to initialize Grant Tables
>>   OvmfPkg: Move XenRealTimeClockLib from ArmVirtPkg
>>   OvmfPkg/XenOvmf: use RealTimeClockRuntimeDxe from EmbeddedPkg
>>
>>  OvmfPkg/OvmfPkg.dec                                                                                                 |   4 +
>>  ArmVirtPkg/ArmVirtXen.dsc                                                                                           |   2 +-
>>  OvmfPkg/OvmfPkgIa32.dsc                                                                                             |   1 +
>>  OvmfPkg/OvmfPkgIa32X64.dsc                                                                                          |   1 +
>>  OvmfPkg/OvmfPkgX64.dsc                                                                                              |   1 +
>>  OvmfPkg/{OvmfPkgX64.dsc => XenOvmf.dsc}                                                                             | 236 ++------
>>  OvmfPkg/XenOvmf.fdf                                                                                                 | 561 ++++++++++++++++++++
>>  OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf                                                                         |   2 +-
>>  OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf                                                   |   4 +
>>  OvmfPkg/Library/ResetSystemLib/ResetSystemLib.inf                                                                   |   1 +
>>  OvmfPkg/Library/XenHypercallLib/XenHypercallLib.inf                                                                 |   2 +-
>>  ArmVirtPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf => OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf |  30 +-
>>  {ArmVirtPkg => OvmfPkg}/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf                                         |   0
>>  OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.inf                                                                                 |  35 ++
>>  OvmfPkg/XenPlatformPei/XenPlatformPei.inf                                                                           | 107 ++++
>>  OvmfPkg/XenResetVector/XenResetVector.inf                                                                           |  46 ++
>>  OvmfPkg/XenTimerDxe/XenTimerDxe.inf                                                                                 |  49 ++
>>  OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h                                                                              |   6 +-
>>  OvmfPkg/Include/Guid/XenInfo.h                                                                                      |   8 +-
>>  OvmfPkg/Include/IndustryStandard/Xen/arch-x86/hvm/start_info.h                                                      | 159 ++++++
>>  OvmfPkg/Include/IndustryStandard/Xen/memory.h                                                                       |  23 +
>>  OvmfPkg/Include/Library/XenHypercallLib.h                                                                           |  12 +
>>  OvmfPkg/Include/Library/XenPlatformLib.h                                                                            |  59 ++
>>  OvmfPkg/Include/OvmfPlatforms.h                                                                                     |   6 +
>>  OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.h                                                                |   1 +
>>  OvmfPkg/XenPlatformPei/Cmos.h                                                                                       |  58 ++
>>  OvmfPkg/XenPlatformPei/Platform.h                                                                                   | 135 +++++
>>  OvmfPkg/{PlatformPei => XenPlatformPei}/Xen.h                                                                       |   0
>>  OvmfPkg/XenTimerDxe/XenTimerDxe.h                                                                                   | 183 +++++++
>>  OvmfPkg/AcpiPlatformDxe/Xen.c                                                                                       |  41 +-
>>  OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c                                                                |  15 +-
>>  OvmfPkg/Library/PlatformBootManagerLib/PlatformData.c                                                               |  59 ++
>>  OvmfPkg/Library/ResetSystemLib/ResetSystemLib.c                                                                     |   3 +-
>>  OvmfPkg/Library/XenHypercallLib/X86XenHypercall.c                                                                   |  11 +
>>  OvmfPkg/Library/XenPlatformLib/XenPlatformLib.c                                                                     |  75 +++
>>  {ArmVirtPkg => OvmfPkg}/Library/XenRealTimeClockLib/XenRealTimeClockLib.c                                           |   0
>>  OvmfPkg/PlatformPei/Xen.c                                                                                           |   3 -
>>  OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c                                                                                   |  38 ++
>>  OvmfPkg/XenPlatformPei/AmdSev.c                                                                                     |  70 +++
>>  OvmfPkg/XenPlatformPei/ClearCache.c                                                                                 | 118 ++++
>>  OvmfPkg/XenPlatformPei/Cmos.c                                                                                       |  66 +++
>>  OvmfPkg/XenPlatformPei/Fv.c                                                                                         |  82 +++
>>  OvmfPkg/XenPlatformPei/MemDetect.c                                                                                  | 498 +++++++++++++++++
>>  OvmfPkg/XenPlatformPei/Platform.c                                                                                   | 458 ++++++++++++++++
>>  OvmfPkg/XenPlatformPei/Xen.c                                                                                        | 381 +++++++++++++
>>  OvmfPkg/XenTimerDxe/XenTimerDxe.c                                                                                   | 361 +++++++++++++
>>  generate_elf_header.c                                                                                               |  78 +++
>>  OvmfPkg/XenResetVector/Ia16/Real16ToFlat32.asm                                                                      | 144 +++++
>>  OvmfPkg/XenResetVector/Ia16/ResetVectorVtf0.asm                                                                     |  87 +++
>>  OvmfPkg/XenResetVector/Ia32/Flat32ToFlat64.asm                                                                      |  66 +++
>>  OvmfPkg/XenResetVector/Ia32/PageTables64.asm                                                                        | 156 ++++++
>>  OvmfPkg/XenResetVector/Ia32/SearchForBfvBase.asm                                                                    |  93 ++++
>>  OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm                                                                          |  75 +++
>>  OvmfPkg/XenResetVector/XenResetVector.nasmb                                                                         |  78 +++
>>  54 files changed, 4526 insertions(+), 262 deletions(-)
>>  copy OvmfPkg/{OvmfPkgX64.dsc => XenOvmf.dsc} (78%)
>>  create mode 100644 OvmfPkg/XenOvmf.fdf
>>  copy ArmVirtPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf => OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf (50%)
>>  rename {ArmVirtPkg => OvmfPkg}/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf (100%)
>>  create mode 100644 OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.inf
>>  create mode 100644 OvmfPkg/XenPlatformPei/XenPlatformPei.inf
>>  create mode 100644 OvmfPkg/XenResetVector/XenResetVector.inf
>>  create mode 100644 OvmfPkg/XenTimerDxe/XenTimerDxe.inf
>>  create mode 100644 OvmfPkg/Include/IndustryStandard/Xen/arch-x86/hvm/start_info.h
>>  create mode 100644 OvmfPkg/Include/Library/XenPlatformLib.h
>>  create mode 100644 OvmfPkg/XenPlatformPei/Cmos.h
>>  create mode 100644 OvmfPkg/XenPlatformPei/Platform.h
>>  copy OvmfPkg/{PlatformPei => XenPlatformPei}/Xen.h (100%)
>>  create mode 100644 OvmfPkg/XenTimerDxe/XenTimerDxe.h
>>  create mode 100644 OvmfPkg/Library/XenPlatformLib/XenPlatformLib.c
>>  rename {ArmVirtPkg => OvmfPkg}/Library/XenRealTimeClockLib/XenRealTimeClockLib.c (100%)
>>  create mode 100644 OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c
>>  create mode 100644 OvmfPkg/XenPlatformPei/AmdSev.c
>>  create mode 100644 OvmfPkg/XenPlatformPei/ClearCache.c
>>  create mode 100644 OvmfPkg/XenPlatformPei/Cmos.c
>>  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/Xen.c
>>  create mode 100644 OvmfPkg/XenTimerDxe/XenTimerDxe.c
>>  create mode 100644 generate_elf_header.c
>>  create mode 100644 OvmfPkg/XenResetVector/Ia16/Real16ToFlat32.asm
>>  create mode 100644 OvmfPkg/XenResetVector/Ia16/ResetVectorVtf0.asm
>>  create mode 100644 OvmfPkg/XenResetVector/Ia32/Flat32ToFlat64.asm
>>  create mode 100644 OvmfPkg/XenResetVector/Ia32/PageTables64.asm
>>  create mode 100644 OvmfPkg/XenResetVector/Ia32/SearchForBfvBase.asm
>>  create mode 100644 OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm
>>  create mode 100644 OvmfPkg/XenResetVector/XenResetVector.nasmb
>>
> 


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 00/31] Specific platform to run OVMF in Xen PVH and HVM guests
  2019-04-08 15:50 ` [PATCH v2 00/31] Specific platform to run OVMF in Xen PVH and HVM guests Laszlo Ersek
  2019-04-09  8:09   ` Laszlo Ersek
@ 2019-04-09 10:50   ` Anthony PERARD
  1 sibling, 0 replies; 5+ messages in thread
From: Anthony PERARD @ 2019-04-09 10:50 UTC (permalink / raw)
  To: Laszlo Ersek
  Cc: edk2-devel, Julien Grall, Ard Biesheuvel, Jordan Justen,
	xen-devel, Leif Lindholm, edk2-devel-groups-io

On Mon, Apr 08, 2019 at 05:50:57PM +0200, Laszlo Ersek wrote:
> On 04/08/19 16:23, Anthony PERARD wrote:
> > Question:
> >
> > Should we start moving these to a different *Pkg? Like it's done for
> > ArmPkg and ArmVirtPkg?  Maybe XenPkg.
> 
> I'm pretty happy with the current package structure. ArmPkg is for both
> physical and virtual hardware. ArmVirtPkg is virt-only, and we already
> have separate platform DSCs/FDFs between Xen (ArmVirtXen) and QEMU/KVM
> (ArmVirtQemu[Kernel]). Xen- and QEMU/KVM-specific drivers and library
> instances peacefully coexist under ArmVirtPkg; the DSCs/FDFs include
> them as appropriate.
> 
> The same should map nicely to OvmfPkg. x86 stuff that targets both
> physical and virtual hardware belongs under PcAtChipsetPkg and
> UefiCpuPkg. Virt-only stuff should go under OvmfPkg; Xen-specific and
> QEMU/KVM-specific modules can coexist under OvmfPkg. It's sufficient if
> the platform DSCs cherry-pick them as appropriate.

Thanks for the feedback, that sounds good.

> > To build and boot:
> >
> > To build, simply run OvmfPkg/build.sh -p OvmfPkg/XenOvmf.dsc
> 
> (1) To stick with the ArmVirt pattern, we should initially call this
> platform OvmfXen.

I'll rename it in v3.

> (3) Please file a BZ at <https://bugzilla.tianocore.org/> about this
> feature, and assign it to yourself. The BZ should keep track of all
> versions of the patch series (from the mailing list archive).

Done: https://bugzilla.tianocore.org/show_bug.cgi?id=1689
I'll add the links for the patch series once there is one for v2.

> (5) The BZ should be referenced in all the commit messages.

I'll do that in v3.

> (6) The new edk2 development mailing list is at:

:-(

> https://edk2.groups.io/g/devel
> 
> Please subscribe there, and resend this series to that address, i.e.
> <devel@edk2.groups.io>. I'm CC'ing the new address myself, for this
> initial response, but I'd prefer the rest of my comments to go only to
> the new list (without manually updating the CC list on every response).

I'm about to do that.

Thanks,

-- 
Anthony PERARD

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v2 00/31] Specific platform to run OVMF in Xen PVH and HVM guests
@ 2019-04-09 11:08 Anthony PERARD
  0 siblings, 0 replies; 5+ messages in thread
From: Anthony PERARD @ 2019-04-09 11:08 UTC (permalink / raw)
  To: devel
  Cc: Jordan Justen, Laszlo Ersek, Ard Biesheuvel, Julien Grall,
	xen-devel, Anthony PERARD

Resent, to send to the new edk2 ML.

Patch series available in this git branch:
https://xenbits.xen.org/git-http/people/aperard/ovmf.git br.platform-xen-pvh-v2

Hi,

I've created a Xen specific platform, in OvmfPkg/XenOvmf.dsc
with the goal to make it work on both Xen HVM and Xen PVH.

https://bugzilla.tianocore.org/show_bug.cgi?id=1689

The first few patches only create the platform and duplicate some code from
OvmfPkg and the later patches makes OVMF boot in a Xen PVH guest and can boot
a Linux guest.

After this patch series, I'd like to wait a bit before removing Xen support
from the OvmfPkg*.dsc, to allow time to switch to the new Xen only platform,
maybe 1 year.

To build and boot:

To build, simply run OvmfPkg/build.sh -p OvmfPkg/XenOvmf.dsc
Then use OVMF.fd as a kernel of a pvh guest config file (with xl/libxl).



Anthony PERARD (31):
  OvmfPkg/ResetSystemLib: Add missing dependency on PciLib
  OvmfPkg: Create platform XenOvmf
  OvmfPkg: Introduce XenResetVector
  OvmfPkg: Introduce XenPlatformPei
  OvmfPkg/XenOvmf: Creating an ELF header
  OvmfPkg/XenResetVector: Add new entry point for Xen PVH
  OvmfPkg/XenResetVector: Saving start of day pointer for PVH guests
  OvmfPkg/XenResetVector: Allow to jumpstart from either hvmloader or
    PVH
  OvmfPkg/XenOvmf: use a TimerLib instance that depends only on the CPU
  OvmfPkg/XenPlatformPei: Detect OVMF_INFO from hvmloader
  OvmfPkg/XenPlatformPei: Use mXenHvmloaderInfo to get E820
  OvmfPkg/XenPlatformPei: Grab RSDP from PVH guest start of day struct
  OvmfPkg/Library/XenPlatformLib: New library
  OvmfPkg/AcpiPlatformDxe: Use PVH RSDP if exist
  OvmfPkg/XenHypercallLib: Enable it in PEIM
  OvmfPkg/XenPlatformPei: Introduce XenHvmloaderDetected
  OvmfPkg/XenPlatformPei: Reserve hvmloader's memory only when it as
    runned
  OvmfPkg/XenPlatformPei: Setup HyperPages earlier
  OvmfPkg/XenPlatformPei: Introduce XenPvhDetected
  OvmfPkg: Import XENMEM_memory_map hypercall to Xen/memory.h
  OvmfPkg/XenPlatformPei: Get E820 table via hypercall ...
  OvmfPkg/XenPlatformPei: Rework memory detection
  OvmfPkg/XenPlatformPei: Reserve VGA memory region, to boot Linux
  OvmfPkg/XenPlatformPei: Ignore missing PCI Host Bridge on Xen PVH
  OvmfPkg/PlatformBootManagerLib: Handle the absence of PCI bus on Xen
    PVH
  OvmfPkg/XenOvmf: Override PcdFSBClock to Xen vLAPIC timer frequency
  OvmfPkg/XenOvmf: Introduce XenTimerDxe
  OvmfPkg/PlatformBootManagerLib: Use a Xen console for ConOut/ConIn
  OvmfPkg: Introduce XenIoPvhDxe to initialize Grant Tables
  OvmfPkg: Move XenRealTimeClockLib from ArmVirtPkg
  OvmfPkg/XenOvmf: use RealTimeClockRuntimeDxe from EmbeddedPkg

 OvmfPkg/OvmfPkg.dec                                                                                                 |   4 +
 ArmVirtPkg/ArmVirtXen.dsc                                                                                           |   2 +-
 OvmfPkg/OvmfPkgIa32.dsc                                                                                             |   1 +
 OvmfPkg/OvmfPkgIa32X64.dsc                                                                                          |   1 +
 OvmfPkg/OvmfPkgX64.dsc                                                                                              |   1 +
 OvmfPkg/{OvmfPkgX64.dsc => XenOvmf.dsc}                                                                             | 236 ++------
 OvmfPkg/XenOvmf.fdf                                                                                                 | 561 ++++++++++++++++++++
 OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf                                                                         |   2 +-
 OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf                                                   |   4 +
 OvmfPkg/Library/ResetSystemLib/ResetSystemLib.inf                                                                   |   1 +
 OvmfPkg/Library/XenHypercallLib/XenHypercallLib.inf                                                                 |   2 +-
 ArmVirtPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf => OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf |  30 +-
 {ArmVirtPkg => OvmfPkg}/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf                                         |   0
 OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.inf                                                                                 |  35 ++
 OvmfPkg/XenPlatformPei/XenPlatformPei.inf                                                                           | 107 ++++
 OvmfPkg/XenResetVector/XenResetVector.inf                                                                           |  46 ++
 OvmfPkg/XenTimerDxe/XenTimerDxe.inf                                                                                 |  49 ++
 OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h                                                                              |   6 +-
 OvmfPkg/Include/Guid/XenInfo.h                                                                                      |   8 +-
 OvmfPkg/Include/IndustryStandard/Xen/arch-x86/hvm/start_info.h                                                      | 159 ++++++
 OvmfPkg/Include/IndustryStandard/Xen/memory.h                                                                       |  23 +
 OvmfPkg/Include/Library/XenHypercallLib.h                                                                           |  12 +
 OvmfPkg/Include/Library/XenPlatformLib.h                                                                            |  59 ++
 OvmfPkg/Include/OvmfPlatforms.h                                                                                     |   6 +
 OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.h                                                                |   1 +
 OvmfPkg/XenPlatformPei/Cmos.h                                                                                       |  58 ++
 OvmfPkg/XenPlatformPei/Platform.h                                                                                   | 135 +++++
 OvmfPkg/{PlatformPei => XenPlatformPei}/Xen.h                                                                       |   0
 OvmfPkg/XenTimerDxe/XenTimerDxe.h                                                                                   | 183 +++++++
 OvmfPkg/AcpiPlatformDxe/Xen.c                                                                                       |  41 +-
 OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c                                                                |  15 +-
 OvmfPkg/Library/PlatformBootManagerLib/PlatformData.c                                                               |  59 ++
 OvmfPkg/Library/ResetSystemLib/ResetSystemLib.c                                                                     |   3 +-
 OvmfPkg/Library/XenHypercallLib/X86XenHypercall.c                                                                   |  11 +
 OvmfPkg/Library/XenPlatformLib/XenPlatformLib.c                                                                     |  75 +++
 {ArmVirtPkg => OvmfPkg}/Library/XenRealTimeClockLib/XenRealTimeClockLib.c                                           |   0
 OvmfPkg/PlatformPei/Xen.c                                                                                           |   3 -
 OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c                                                                                   |  38 ++
 OvmfPkg/XenPlatformPei/AmdSev.c                                                                                     |  70 +++
 OvmfPkg/XenPlatformPei/ClearCache.c                                                                                 | 118 ++++
 OvmfPkg/XenPlatformPei/Cmos.c                                                                                       |  66 +++
 OvmfPkg/XenPlatformPei/Fv.c                                                                                         |  82 +++
 OvmfPkg/XenPlatformPei/MemDetect.c                                                                                  | 498 +++++++++++++++++
 OvmfPkg/XenPlatformPei/Platform.c                                                                                   | 458 ++++++++++++++++
 OvmfPkg/XenPlatformPei/Xen.c                                                                                        | 381 +++++++++++++
 OvmfPkg/XenTimerDxe/XenTimerDxe.c                                                                                   | 361 +++++++++++++
 generate_elf_header.c                                                                                               |  78 +++
 OvmfPkg/XenResetVector/Ia16/Real16ToFlat32.asm                                                                      | 144 +++++
 OvmfPkg/XenResetVector/Ia16/ResetVectorVtf0.asm                                                                     |  87 +++
 OvmfPkg/XenResetVector/Ia32/Flat32ToFlat64.asm                                                                      |  66 +++
 OvmfPkg/XenResetVector/Ia32/PageTables64.asm                                                                        | 156 ++++++
 OvmfPkg/XenResetVector/Ia32/SearchForBfvBase.asm                                                                    |  93 ++++
 OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm                                                                          |  75 +++
 OvmfPkg/XenResetVector/XenResetVector.nasmb                                                                         |  78 +++
 54 files changed, 4526 insertions(+), 262 deletions(-)
 copy OvmfPkg/{OvmfPkgX64.dsc => XenOvmf.dsc} (78%)
 create mode 100644 OvmfPkg/XenOvmf.fdf
 copy ArmVirtPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf => OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf (50%)
 rename {ArmVirtPkg => OvmfPkg}/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf (100%)
 create mode 100644 OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.inf
 create mode 100644 OvmfPkg/XenPlatformPei/XenPlatformPei.inf
 create mode 100644 OvmfPkg/XenResetVector/XenResetVector.inf
 create mode 100644 OvmfPkg/XenTimerDxe/XenTimerDxe.inf
 create mode 100644 OvmfPkg/Include/IndustryStandard/Xen/arch-x86/hvm/start_info.h
 create mode 100644 OvmfPkg/Include/Library/XenPlatformLib.h
 create mode 100644 OvmfPkg/XenPlatformPei/Cmos.h
 create mode 100644 OvmfPkg/XenPlatformPei/Platform.h
 copy OvmfPkg/{PlatformPei => XenPlatformPei}/Xen.h (100%)
 create mode 100644 OvmfPkg/XenTimerDxe/XenTimerDxe.h
 create mode 100644 OvmfPkg/Library/XenPlatformLib/XenPlatformLib.c
 rename {ArmVirtPkg => OvmfPkg}/Library/XenRealTimeClockLib/XenRealTimeClockLib.c (100%)
 create mode 100644 OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c
 create mode 100644 OvmfPkg/XenPlatformPei/AmdSev.c
 create mode 100644 OvmfPkg/XenPlatformPei/ClearCache.c
 create mode 100644 OvmfPkg/XenPlatformPei/Cmos.c
 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/Xen.c
 create mode 100644 OvmfPkg/XenTimerDxe/XenTimerDxe.c
 create mode 100644 generate_elf_header.c
 create mode 100644 OvmfPkg/XenResetVector/Ia16/Real16ToFlat32.asm
 create mode 100644 OvmfPkg/XenResetVector/Ia16/ResetVectorVtf0.asm
 create mode 100644 OvmfPkg/XenResetVector/Ia32/Flat32ToFlat64.asm
 create mode 100644 OvmfPkg/XenResetVector/Ia32/PageTables64.asm
 create mode 100644 OvmfPkg/XenResetVector/Ia32/SearchForBfvBase.asm
 create mode 100644 OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm
 create mode 100644 OvmfPkg/XenResetVector/XenResetVector.nasmb

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [edk2-devel] [PATCH v2 00/31] Specific platform to run OVMF in Xen PVH and HVM guests
  2019-04-09  8:09   ` Laszlo Ersek
@ 2019-04-09 11:15     ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 5+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-04-09 11:15 UTC (permalink / raw)
  To: devel, lersek, Anthony PERARD
  Cc: Julien Grall, Ard Biesheuvel, Jordan Justen, xen-devel,
	Leif Lindholm

On 4/9/19 10:09 AM, Laszlo Ersek wrote:
> On 04/08/19 17:50, Laszlo Ersek wrote:
>> On 04/08/19 16:23, Anthony PERARD wrote:
>>> Patch series available in this git branch:
>>> https://xenbits.xen.org/git-http/people/aperard/ovmf.git br.platform-xen-pvh-v2
>>>
>>> Hi,
>>>
>>> I've started to create a Xen specific platform, in OvmfPkg/XenOvmf.dsc
>>> with the goal to make it work on both Xen HVM and Xen PVH.
>>
>> The previous version of this feature dates back to Dec 2016 / Jan 2017;
>> I haven't forgotten about it, and I'm happy that you are adding the
>> feature as a separate platform DSC, as I requested.
>>
>>> The first few patches only create the platform and duplicate some code
>>> from OvmfPkg and the later patches makes OVMF boot in a Xen PVH guest
>>> and can boot a Linux guest.
>>>
>>> After this patch series, I'd like to wait a bit before removing Xen
>>> support from the OvmfPkg*.dsc, to allow time to switch to the new Xen
>>> only platform, maybe 1 year.
>>
>> I welcome this proposal very much. This will eliminate a significant
>> amount of complexity in the current modules, allow for
>> easier-to-understand maintenance assignments/responsibilities, and pave
>> the way for features that are unique to either Xen or QEMU (in
>> particular in the variable storage area, for which Xen has just received
>> a dedicated userspace daemon IIRC, and for which -- on QEMU -- I had
>> attempted to make pflash a conditional hard requirement, in the past,
>> but failed due to OvmfPkg*.dsc targeting Xen too).
>>
>>> Question:
>>>
>>> Should we start moving these to a different *Pkg? Like it's done for
>>> ArmPkg and ArmVirtPkg?  Maybe XenPkg.
>>
>> I'm pretty happy with the current package structure. ArmPkg is for both
>> physical and virtual hardware. ArmVirtPkg is virt-only, and we already
>> have separate platform DSCs/FDFs between Xen (ArmVirtXen) and QEMU/KVM
>> (ArmVirtQemu[Kernel]). Xen- and QEMU/KVM-specific drivers and library
>> instances peacefully coexist under ArmVirtPkg; the DSCs/FDFs include
>> them as appropriate.
>>
>> The same should map nicely to OvmfPkg. x86 stuff that targets both
>> physical and virtual hardware belongs under PcAtChipsetPkg and
>> UefiCpuPkg. Virt-only stuff should go under OvmfPkg; Xen-specific and
>> QEMU/KVM-specific modules can coexist under OvmfPkg. It's sufficient if
>> the platform DSCs cherry-pick them as appropriate.
>>
>> And, if there are Xen-specific (but not arch-specific) PEIMs / drivers /
>> libraries that work alike on ARM and x86, they should go under OvmfPkg,
>> as ArmVirtPkg can (and already does) pull Xen-only modules from OvmfPkg.
>> See for example, in ArmVirtXen.dsc:
>>
>>   SerialPortLib|OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.inf
>>   XenHypercallLib|OvmfPkg/Library/XenHypercallLib/XenHypercallLib.inf
>>
>>   OvmfPkg/XenBusDxe/XenBusDxe.inf
>>   OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf
>>
>>> To build and boot:
>>>
>>> To build, simply run OvmfPkg/build.sh -p OvmfPkg/XenOvmf.dsc
>>
>> (1) To stick with the ArmVirt pattern, we should initially call this
>> platform OvmfXen.
>>
>> (2) And, once you remove the Xen bits from the current
>> OvmfPkg*.dsc files, we should likely rename those to OvmfQemu*dsc.

I'm happy to read this simplification suggestion :)

>> I'll try to process this series in a timely manner. My main focus will
>> be possible regressions on QEMU/KVM, and formalities (license blocks,
>> signoffs, edk2 coding style, build issues that I might notice in
>> review).
>>
>> I can't provide testing feedback, but xen-devel subscribers (and any
>> other Xen users too, obviously) are super welcome to test & report
>> results!
>>
>> (3) Please file a BZ at <https://bugzilla.tianocore.org/> about this
>> feature, and assign it to yourself. The BZ should keep track of all
>> versions of the patch series (from the mailing list archive).
>>
>> (4) Ideally, the release notes for the edk2 stable release in which the
>> feature will appear, should mention the feature (via linking the BZ):
>> <https://github.com/tianocore/tianocore.github.io/wiki/EDK-II-Release-Planning#proposed-features>
>>
>> (5) The BZ should be referenced in all the commit messages.
>>
>> (6) The new edk2 development mailing list is at:
>>
>> https://edk2.groups.io/g/devel
>>
>> Please subscribe there, and resend this series to that address, i.e.
>> <devel@edk2.groups.io>. I'm CC'ing the new address myself, for this
>> initial response, but I'd prefer the rest of my comments to go only to
>> the new list (without manually updating the CC list on every response).
> 
> (7) I forgot to mention that, due to
> <https://bugzilla.tianocore.org/show_bug.cgi?id=1373> being very close
> to being fixed / pushed, the the "Contributed-under" lines near your
> signoffs will no longer be necessary.
> 
> Thanks
> Laszlo
> 
>>
>> Thanks!
>> Laszlo
>>
>>> Then use OVMF.fd as a kernel of a pvh guest config file (with
>>> xl/libxl).
>>>
>>> Patch series available in this git branch:
>>> https://xenbits.xen.org/git-http/people/aperard/ovmf.git br.platform-xen-pvh-v2
>>>
>>> Anthony PERARD (31):
>>>   OvmfPkg/ResetSystemLib: Add missing dependency on PciLib
>>>   OvmfPkg: Create platform XenOvmf
>>>   OvmfPkg: Introduce XenResetVector
>>>   OvmfPkg: Introduce XenPlatformPei
>>>   OvmfPkg/XenOvmf: Creating an ELF header
>>>   OvmfPkg/XenResetVector: Add new entry point for Xen PVH
>>>   OvmfPkg/XenResetVector: Saving start of day pointer for PVH guests
>>>   OvmfPkg/XenResetVector: Allow to jumpstart from either hvmloader or
>>>     PVH
>>>   OvmfPkg/XenOvmf: use a TimerLib instance that depends only on the CPU
>>>   OvmfPkg/XenPlatformPei: Detect OVMF_INFO from hvmloader
>>>   OvmfPkg/XenPlatformPei: Use mXenHvmloaderInfo to get E820
>>>   OvmfPkg/XenPlatformPei: Grab RSDP from PVH guest start of day struct
>>>   OvmfPkg/Library/XenPlatformLib: New library
>>>   OvmfPkg/AcpiPlatformDxe: Use PVH RSDP if exist
>>>   OvmfPkg/XenHypercallLib: Enable it in PEIM
>>>   OvmfPkg/XenPlatformPei: Introduce XenHvmloaderDetected
>>>   OvmfPkg/XenPlatformPei: Reserve hvmloader's memory only when it as
>>>     runned
>>>   OvmfPkg/XenPlatformPei: Setup HyperPages earlier
>>>   OvmfPkg/XenPlatformPei: Introduce XenPvhDetected
>>>   OvmfPkg: Import XENMEM_memory_map hypercall to Xen/memory.h
>>>   OvmfPkg/XenPlatformPei: Get E820 table via hypercall ...
>>>   OvmfPkg/XenPlatformPei: Rework memory detection
>>>   OvmfPkg/XenPlatformPei: Reserve VGA memory region, to boot Linux
>>>   OvmfPkg/XenPlatformPei: Ignore missing PCI Host Bridge on Xen PVH
>>>   OvmfPkg/PlatformBootManagerLib: Handle the absence of PCI bus on Xen
>>>     PVH
>>>   OvmfPkg/XenOvmf: Override PcdFSBClock to Xen vLAPIC timer frequency
>>>   OvmfPkg/XenOvmf: Introduce XenTimerDxe
>>>   OvmfPkg/PlatformBootManagerLib: Use a Xen console for ConOut/ConIn
>>>   OvmfPkg: Introduce XenIoPvhDxe to initialize Grant Tables
>>>   OvmfPkg: Move XenRealTimeClockLib from ArmVirtPkg
>>>   OvmfPkg/XenOvmf: use RealTimeClockRuntimeDxe from EmbeddedPkg
>>>
>>>  OvmfPkg/OvmfPkg.dec                                                                                                 |   4 +
>>>  ArmVirtPkg/ArmVirtXen.dsc                                                                                           |   2 +-
>>>  OvmfPkg/OvmfPkgIa32.dsc                                                                                             |   1 +
>>>  OvmfPkg/OvmfPkgIa32X64.dsc                                                                                          |   1 +
>>>  OvmfPkg/OvmfPkgX64.dsc                                                                                              |   1 +
>>>  OvmfPkg/{OvmfPkgX64.dsc => XenOvmf.dsc}                                                                             | 236 ++------
>>>  OvmfPkg/XenOvmf.fdf                                                                                                 | 561 ++++++++++++++++++++
>>>  OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf                                                                         |   2 +-
>>>  OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf                                                   |   4 +
>>>  OvmfPkg/Library/ResetSystemLib/ResetSystemLib.inf                                                                   |   1 +
>>>  OvmfPkg/Library/XenHypercallLib/XenHypercallLib.inf                                                                 |   2 +-
>>>  ArmVirtPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf => OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf |  30 +-
>>>  {ArmVirtPkg => OvmfPkg}/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf                                         |   0
>>>  OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.inf                                                                                 |  35 ++
>>>  OvmfPkg/XenPlatformPei/XenPlatformPei.inf                                                                           | 107 ++++
>>>  OvmfPkg/XenResetVector/XenResetVector.inf                                                                           |  46 ++
>>>  OvmfPkg/XenTimerDxe/XenTimerDxe.inf                                                                                 |  49 ++
>>>  OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h                                                                              |   6 +-
>>>  OvmfPkg/Include/Guid/XenInfo.h                                                                                      |   8 +-
>>>  OvmfPkg/Include/IndustryStandard/Xen/arch-x86/hvm/start_info.h                                                      | 159 ++++++
>>>  OvmfPkg/Include/IndustryStandard/Xen/memory.h                                                                       |  23 +
>>>  OvmfPkg/Include/Library/XenHypercallLib.h                                                                           |  12 +
>>>  OvmfPkg/Include/Library/XenPlatformLib.h                                                                            |  59 ++
>>>  OvmfPkg/Include/OvmfPlatforms.h                                                                                     |   6 +
>>>  OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.h                                                                |   1 +
>>>  OvmfPkg/XenPlatformPei/Cmos.h                                                                                       |  58 ++
>>>  OvmfPkg/XenPlatformPei/Platform.h                                                                                   | 135 +++++
>>>  OvmfPkg/{PlatformPei => XenPlatformPei}/Xen.h                                                                       |   0
>>>  OvmfPkg/XenTimerDxe/XenTimerDxe.h                                                                                   | 183 +++++++
>>>  OvmfPkg/AcpiPlatformDxe/Xen.c                                                                                       |  41 +-
>>>  OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c                                                                |  15 +-
>>>  OvmfPkg/Library/PlatformBootManagerLib/PlatformData.c                                                               |  59 ++
>>>  OvmfPkg/Library/ResetSystemLib/ResetSystemLib.c                                                                     |   3 +-
>>>  OvmfPkg/Library/XenHypercallLib/X86XenHypercall.c                                                                   |  11 +
>>>  OvmfPkg/Library/XenPlatformLib/XenPlatformLib.c                                                                     |  75 +++
>>>  {ArmVirtPkg => OvmfPkg}/Library/XenRealTimeClockLib/XenRealTimeClockLib.c                                           |   0
>>>  OvmfPkg/PlatformPei/Xen.c                                                                                           |   3 -
>>>  OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c                                                                                   |  38 ++
>>>  OvmfPkg/XenPlatformPei/AmdSev.c                                                                                     |  70 +++
>>>  OvmfPkg/XenPlatformPei/ClearCache.c                                                                                 | 118 ++++
>>>  OvmfPkg/XenPlatformPei/Cmos.c                                                                                       |  66 +++
>>>  OvmfPkg/XenPlatformPei/Fv.c                                                                                         |  82 +++
>>>  OvmfPkg/XenPlatformPei/MemDetect.c                                                                                  | 498 +++++++++++++++++
>>>  OvmfPkg/XenPlatformPei/Platform.c                                                                                   | 458 ++++++++++++++++
>>>  OvmfPkg/XenPlatformPei/Xen.c                                                                                        | 381 +++++++++++++
>>>  OvmfPkg/XenTimerDxe/XenTimerDxe.c                                                                                   | 361 +++++++++++++
>>>  generate_elf_header.c                                                                                               |  78 +++
>>>  OvmfPkg/XenResetVector/Ia16/Real16ToFlat32.asm                                                                      | 144 +++++
>>>  OvmfPkg/XenResetVector/Ia16/ResetVectorVtf0.asm                                                                     |  87 +++
>>>  OvmfPkg/XenResetVector/Ia32/Flat32ToFlat64.asm                                                                      |  66 +++
>>>  OvmfPkg/XenResetVector/Ia32/PageTables64.asm                                                                        | 156 ++++++
>>>  OvmfPkg/XenResetVector/Ia32/SearchForBfvBase.asm                                                                    |  93 ++++
>>>  OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm                                                                          |  75 +++
>>>  OvmfPkg/XenResetVector/XenResetVector.nasmb                                                                         |  78 +++
>>>  54 files changed, 4526 insertions(+), 262 deletions(-)
>>>  copy OvmfPkg/{OvmfPkgX64.dsc => XenOvmf.dsc} (78%)
>>>  create mode 100644 OvmfPkg/XenOvmf.fdf
>>>  copy ArmVirtPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf => OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf (50%)
>>>  rename {ArmVirtPkg => OvmfPkg}/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf (100%)
>>>  create mode 100644 OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.inf
>>>  create mode 100644 OvmfPkg/XenPlatformPei/XenPlatformPei.inf
>>>  create mode 100644 OvmfPkg/XenResetVector/XenResetVector.inf
>>>  create mode 100644 OvmfPkg/XenTimerDxe/XenTimerDxe.inf
>>>  create mode 100644 OvmfPkg/Include/IndustryStandard/Xen/arch-x86/hvm/start_info.h
>>>  create mode 100644 OvmfPkg/Include/Library/XenPlatformLib.h
>>>  create mode 100644 OvmfPkg/XenPlatformPei/Cmos.h
>>>  create mode 100644 OvmfPkg/XenPlatformPei/Platform.h
>>>  copy OvmfPkg/{PlatformPei => XenPlatformPei}/Xen.h (100%)
>>>  create mode 100644 OvmfPkg/XenTimerDxe/XenTimerDxe.h
>>>  create mode 100644 OvmfPkg/Library/XenPlatformLib/XenPlatformLib.c
>>>  rename {ArmVirtPkg => OvmfPkg}/Library/XenRealTimeClockLib/XenRealTimeClockLib.c (100%)
>>>  create mode 100644 OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c
>>>  create mode 100644 OvmfPkg/XenPlatformPei/AmdSev.c
>>>  create mode 100644 OvmfPkg/XenPlatformPei/ClearCache.c
>>>  create mode 100644 OvmfPkg/XenPlatformPei/Cmos.c
>>>  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/Xen.c
>>>  create mode 100644 OvmfPkg/XenTimerDxe/XenTimerDxe.c
>>>  create mode 100644 generate_elf_header.c
>>>  create mode 100644 OvmfPkg/XenResetVector/Ia16/Real16ToFlat32.asm
>>>  create mode 100644 OvmfPkg/XenResetVector/Ia16/ResetVectorVtf0.asm
>>>  create mode 100644 OvmfPkg/XenResetVector/Ia32/Flat32ToFlat64.asm
>>>  create mode 100644 OvmfPkg/XenResetVector/Ia32/PageTables64.asm
>>>  create mode 100644 OvmfPkg/XenResetVector/Ia32/SearchForBfvBase.asm
>>>  create mode 100644 OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm
>>>  create mode 100644 OvmfPkg/XenResetVector/XenResetVector.nasmb
>>>
>>
> 
> 
> 
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2019-04-09 11:15 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20190408142408.30419-1-anthony.perard@citrix.com>
2019-04-08 15:50 ` [PATCH v2 00/31] Specific platform to run OVMF in Xen PVH and HVM guests Laszlo Ersek
2019-04-09  8:09   ` Laszlo Ersek
2019-04-09 11:15     ` [edk2-devel] " Philippe Mathieu-Daudé
2019-04-09 10:50   ` Anthony PERARD
2019-04-09 11:08 Anthony PERARD

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox