From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: citrix.com, ip: 216.71.155.175, mailfrom: roger.pau@citrix.com) Received: from esa6.hc3370-68.iphmx.com (esa6.hc3370-68.iphmx.com [216.71.155.175]) by groups.io with SMTP; Wed, 07 Aug 2019 07:36:10 -0700 Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=roger.pau@citrix.com; spf=Pass smtp.mailfrom=roger.pau@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: None (esa6.hc3370-68.iphmx.com: no sender authenticity information available from domain of roger.pau@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa6.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa6.hc3370-68.iphmx.com: domain of roger.pau@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa6.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all" Received-SPF: None (esa6.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa6.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: VoCFuPFBnWfCBjz4Vo1wVghRbL+k4NQFnWZY+w7PiiZqWxNtP6nyx3Ri62w43tk8oDENDUHV4t bUHmQOP1I2W0kCjJ48m8z4J6kc8yXtK0K7OvECPQp6BseCduXdSBVa0B/W7Of429CuRf3Pm1vK O2lHkXtp3cLhl7CwfK/ZcbU/qyWNTonMUe8wh9buAC/TIsZRGPsWue6Fb2BsOu2SrmIxIlqWua X35N9I4XF15Z9HplHjEbuFIhINDYpnkzFNJEWOhtiAgP3Y1tgql4quUHCLSPGgXdqEr1uzPZNP b90= X-SBRS: 2.7 X-MesageID: 4139824 X-Ironport-Server: esa6.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.64,357,1559534400"; d="scan'208";a="4139824" Date: Wed, 7 Aug 2019 16:35:58 +0200 From: =?UTF-8?B?Um9nZXIgUGF1IE1vbm7DqQ==?= To: , CC: Julien Grall , , Jordan Justen , Ard Biesheuvel , Laszlo Ersek Subject: Re: [edk2-devel] [PATCH v4 12/35] OvmfPkg/XenPlatformPei: Grab RSDP from PVH guest start of day struct Message-ID: <20190807143558.uxha44jflgmstdkj@Air-de-Roger> References: <20190729153944.24239-1-anthony.perard@citrix.com> <20190729153944.24239-13-anthony.perard@citrix.com> MIME-Version: 1.0 In-Reply-To: <20190729153944.24239-13-anthony.perard@citrix.com> User-Agent: NeoMutt/20180716 Return-Path: roger.pau@citrix.com X-ClientProxiedBy: AMSPEX02CAS02.citrite.net (10.69.22.113) To AMSPEX02CL02.citrite.net (10.69.22.126) Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline 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 > #include > #include > +#include > > #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.