|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [edk2-devel] [PATCH v4 12/35] OvmfPkg/XenPlatformPei: Grab RSDP from PVH guest start of day struct
On Mon, Jul 29, 2019 at 04:39:21PM +0100, Anthony PERARD wrote:
> Check if there's a start of the day struct provided to PVH guest, save
> the ACPI RSDP address for later.
>
> This patch import import arch-x86/hvm/start_info.h from xen.git.
You seem to change the types when importing start_info.h, is that
absolutely necessary?
From my experience working with different projects when importing such
headers it's better to keep them verbatim, this makes importing future
versions from upstream easier.
I have a comment below, but it's more like a question.
> diff --git a/OvmfPkg/XenPlatformPei/Xen.c b/OvmfPkg/XenPlatformPei/Xen.c
> index 5c7d7ddc1c..b366139a0a 100644
> --- a/OvmfPkg/XenPlatformPei/Xen.c
> +++ b/OvmfPkg/XenPlatformPei/Xen.c
> @@ -25,6 +25,7 @@
> #include <IndustryStandard/E820.h>
> #include <Library/ResourcePublicationLib.h>
> #include <Library/MtrrLib.h>
> +#include <IndustryStandard/Xen/arch-x86/hvm/start_info.h>
>
> #include "Platform.h"
> #include "Xen.h"
> @@ -86,6 +87,7 @@ XenConnect (
> UINT32 XenVersion;
> EFI_XEN_OVMF_INFO *Info;
> CHAR8 Sig[sizeof (Info->Signature) + 1];
> + UINT32 *PVHResetVectorData;
>
> AsmCpuid (XenLeaf + 2, &TransferPages, &TransferReg, NULL, NULL);
> mXenInfo.HyperPages = AllocatePages (TransferPages);
> @@ -121,6 +123,29 @@ XenConnect (
> mXenHvmloaderInfo = NULL;
> }
>
> + mXenInfo.RsdpPvh = NULL;
> +
> + //
> + // Locate and use information from the start of day structure if we have
> + // booted via the PVH entry point.
> + //
> +
> + PVHResetVectorData = (VOID *)(UINTN) PcdGet32
> (PcdXenPvhStartOfDayStructPtr);
> + //
> + // That magic value is written in XenResetVector/Ia32/XenPVHMain.asm
> + //
> + if (PVHResetVectorData[1] == SIGNATURE_32 ('X', 'P', 'V', 'H')) {
> + struct hvm_start_info *HVMStartInfo;
> +
> + HVMStartInfo = (VOID *)(UINTN) PVHResetVectorData[0];
> + if (HVMStartInfo->magic == XEN_HVM_START_MAGIC_VALUE) {
> + ASSERT (HVMStartInfo->rsdp_paddr != 0);
> + if (HVMStartInfo->rsdp_paddr != 0) {
> + mXenInfo.RsdpPvh = (VOID *)(UINTN)HVMStartInfo->rsdp_paddr;
I guess you can do this because OVMF has an identity map of virtual
addresses to physical addresses?
I wonder the size of such identity map, and whether you need to check
that the rsdp address is indeed inside of that region before
converting it to a pointer. The same would apply to
PcdXenPvhStartOfDayStructPtr, but that's likely safe because it's
always < 4GB, which I assume OVMF always has identity mapped?
Thanks, Roger.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |