From nobody Mon Feb 9 16:01:56 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+73275+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+73275+1787277+3901457@groups.io ARC-Seal: i=1; a=rsa-sha256; t=1616687254; cv=none; d=zohomail.com; s=zohoarc; b=fj6gGPv/3cRqDzn11GH/WpF49dXKIFlX5bytJFO1QmFGCn6W/KmUCVE0nqZRSMzBioM6OLTH8A1oYkXOn4eshQlDScqCMnIxf1BW9vCgnqldGndL1ZIBr2NLaWP6LG0QDXbe5JZMEBqHr1MPiwZaXVpTt0CMJ9PEsGEcWNXjI08= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1616687254; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=HrmlV05AaG78W9ALs1PLwuo1bTw8LCkRwmV5TyHYHac=; b=kyx/ATXvA+XEc+MpXxe0L+bjsGFzeQapwTy+7A4k1wY/dqyvhRpTm6VGIxDVTmWZMneiqIO9n6Z9HaOWWpzAjJF0ZWTRMq9MP80c57DfrJ5h4oF+DqhRR62sPXhy+3+DrTdv9lehzyjZJA/tH0v4M6Y7F46fTy1UWdXiTniw7aQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+73275+1787277+3901457@groups.io Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1616687254652887.9624248291842; Thu, 25 Mar 2021 08:47:34 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id EfKgYY1788612xh1qMXuuA5g; Thu, 25 Mar 2021 08:47:34 -0700 X-Received: from esa2.hc3370-68.iphmx.com (esa2.hc3370-68.iphmx.com [216.71.145.153]) by mx.groups.io with SMTP id smtpd.web08.1254.1616687244200305673 for ; Thu, 25 Mar 2021 08:47:24 -0700 IronPort-SDR: d14wjqQx1UXoMjRctiLYpxhGJHIvK94eQ5c4s89qozIWZQl4KaUHiA3YgwQSaIndFMJzBguBbN 9IzeDXGfoziG3zgZkF8T7Z6jXwxSvbHuNZteB7SBz0bD8wp9azfKqst/LXRuXFKCWHazbYvwIG qsNe2/fjTVOhnELAYg5oT5DoD8p+zOILaJwG0Ne31W+M1HtibMhGIOxAVUyFtTx/JHpWDlkIF7 l3KUNFv5kNfZcFlNLtp5ZdLzN0xKEWDtkQohQm5UC9xNsp4tNbvdtuh+M/XOoc+0RzNGiHjBo4 92E= X-SBRS: 5.1 X-MesageID: 40144197 X-Ironport-Server: esa2.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED IronPort-HdrOrdr: A9a23:z3JXcq0XqT5hO2K8TIRbEQqjBZFyeYIsi2QD101hICF9WsaTm9 my2NES0hHpgDgcMUtQ4uyoEoPoewK+ybde544NMbC+GCzvv2W1JI9vhLGSuQHIMSv46+JbyO NcY7FzYeeAfGRSoOTbxE2DE9gmyMSa66zAv4zj5lpkUA0CUdAG0y5XEQCee3cWeCBnAt4DGI OY9o57oVObCAwqR+ShAH49WfPf4+fnr/vdCyIuIz4CxE2wgSiz6Lj8eiLoris2dz9U278t/S zkvmXCl8Oemsq2wBPdyGPfhq4+8LaMpbV+LfeBhcQPJjLnhhzAXvUZZ5S4sC0ou+bq0V42kb D30mQdFv5u4HDcdHzdm2qO5yDc0S0j43Kn6ViUjWqLm72ceBsGCtFMjY8cTx3B60BIhqAY7I t32Qui16Z/PFflpmDd78KNfwx2nkC0yEBS7NI7vjh6a88iT5N/6aYY51hYFZ8cGjmS0vFaLM B+SMvb4O9fdkPyVQGmgkB/hNq2XnoyGR+aQk8N/syNugIm40xE8w== X-IronPort-AV: E=Sophos;i="5.81,277,1610427600"; d="scan'208";a="40144197" From: "Anthony PERARD via groups.io" To: CC: , Jordan Justen , Anthony PERARD , "Ard Biesheuvel" , Laszlo Ersek , Julien Grall Subject: [edk2-devel] [PATCH v2 5/7] OvmfPkg/XenPlatformPei: Map extra physical address Date: Thu, 25 Mar 2021 15:47:11 +0000 Message-ID: <20210325154713.670104-6-anthony.perard@citrix.com> In-Reply-To: <20210325154713.670104-1-anthony.perard@citrix.com> References: <20210325154713.670104-1-anthony.perard@citrix.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,anthony.perard@citrix.com X-Gm-Message-State: ulousOvFlvAQMIeNgqwzgEgDx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1616687254; bh=HrmlV05AaG78W9ALs1PLwuo1bTw8LCkRwmV5TyHYHac=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=rWrfHHR9roF3KyDQG64HRHkr3ML38lt/KX79yYofQ2F+woDiLPS0bKqUefuuxb6UbnV 9bxF+slVAKTAQPA8YbMMqrKWhZlLbiTcPh6mnjN+qjPtBn6MqyOygavSDyACz+51SY5bd BGWe7j1atxdgndOR+lfcwQfUV4q3SYB1x2o= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" Some information available in a Xen guest can be mapped anywhere in the physical address space and they don't need to be backed by RAM. For example, the shared info page. While it's easier to put those pages anywhere, it is better to avoid mapping it where the RAM is. It might split a nice 1G guest page table into 4k pages and thus reducing performance of the guest when it access its memory. Also mapping a page like the shared info page and then unmapping it or mapping it somewhere else would live a hole in the RAM that the guest would propably not been able to use anymore. So the patch introduce a new function which can be used to 1:1 mapping of guest physical memory above 4G during the PEI phase so we can map the Xen shared pages outside of memory that can be used by guest, and as high as possible. Signed-off-by: Anthony PERARD Acked-by: Laszlo Ersek --- Notes: v2: - new patch OvmfPkg/XenPlatformPei/XenPlatformPei.inf | 1 + OvmfPkg/XenPlatformPei/Platform.h | 5 ++ OvmfPkg/XenPlatformPei/Xen.c | 71 +++++++++++++++++++++++ 3 files changed, 77 insertions(+) diff --git a/OvmfPkg/XenPlatformPei/XenPlatformPei.inf b/OvmfPkg/XenPlatfor= mPei/XenPlatformPei.inf index 0ef77db92c03..8790d907d3ec 100644 --- a/OvmfPkg/XenPlatformPei/XenPlatformPei.inf +++ b/OvmfPkg/XenPlatformPei/XenPlatformPei.inf @@ -66,6 +66,7 @@ [Pcd] gUefiOvmfPkgTokenSpaceGuid.PcdOvmfPeiMemFvSize gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDxeMemFvBase gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDxeMemFvSize + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase gUefiOvmfPkgTokenSpaceGuid.PcdOvmfLockBoxStorageBase gUefiOvmfPkgTokenSpaceGuid.PcdOvmfLockBoxStorageSize gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId diff --git a/OvmfPkg/XenPlatformPei/Platform.h b/OvmfPkg/XenPlatformPei/Pla= tform.h index 7661f4a8de0a..e70ca58078eb 100644 --- a/OvmfPkg/XenPlatformPei/Platform.h +++ b/OvmfPkg/XenPlatformPei/Platform.h @@ -127,6 +127,11 @@ XenGetE820Map ( UINT32 *Count ); =20 +EFI_STATUS +PhysicalAddressIdentityMapping ( + IN EFI_PHYSICAL_ADDRESS AddressToMap + ); + extern EFI_BOOT_MODE mBootMode; =20 extern UINT8 mPhysMemAddressWidth; diff --git a/OvmfPkg/XenPlatformPei/Xen.c b/OvmfPkg/XenPlatformPei/Xen.c index c41fecdc486e..b2a7d1c21dac 100644 --- a/OvmfPkg/XenPlatformPei/Xen.c +++ b/OvmfPkg/XenPlatformPei/Xen.c @@ -17,6 +17,8 @@ // // The Library classes this module consumes // +#include +#include #include #include #include @@ -25,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -386,3 +389,71 @@ InitializeXen ( =20 return EFI_SUCCESS; } + +EFI_STATUS +PhysicalAddressIdentityMapping ( + IN EFI_PHYSICAL_ADDRESS AddressToMap + ) +{ + INTN Index; + PAGE_MAP_AND_DIRECTORY_POINTER *L4, *L3; + PAGE_TABLE_ENTRY *PageTable; + + DEBUG ((DEBUG_INFO, "Mapping 1:1 of address 0x%lx\n", (UINT64)AddressToM= ap)); + + // L4 / Top level Page Directory Pointers + + L4 =3D (VOID*)(UINTN)PcdGet32 (PcdOvmfSecPageTablesBase); + Index =3D PML4_OFFSET (AddressToMap); + + if (!L4[Index].Bits.Present) { + L3 =3D AllocatePages (1); + if (L3 =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + + ZeroMem (L3, EFI_PAGE_SIZE); + + L4[Index].Bits.ReadWrite =3D 1; + L4[Index].Bits.Accessed =3D 1; + L4[Index].Bits.PageTableBaseAddress =3D (EFI_PHYSICAL_ADDRESS)L3 >> 12; + L4[Index].Bits.Present =3D 1; + } + + // L3 / Next level Page Directory Pointers + + L3 =3D (VOID*)(EFI_PHYSICAL_ADDRESS)(L4[Index].Bits.PageTableBaseAddress= << 12); + Index =3D PDP_OFFSET (AddressToMap); + + if (!L3[Index].Bits.Present) { + PageTable =3D AllocatePages (1); + if (PageTable =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + + ZeroMem (PageTable, EFI_PAGE_SIZE); + + L3[Index].Bits.ReadWrite =3D 1; + L3[Index].Bits.Accessed =3D 1; + L3[Index].Bits.PageTableBaseAddress =3D (EFI_PHYSICAL_ADDRESS)PageTabl= e >> 12; + L3[Index].Bits.Present =3D 1; + } + + // L2 / Page Table Entries + + PageTable =3D (VOID*)(EFI_PHYSICAL_ADDRESS)(L3[Index].Bits.PageTableBase= Address << 12); + Index =3D PDE_OFFSET (AddressToMap); + + if (!PageTable[Index].Bits.Present) { + PageTable[Index].Bits.ReadWrite =3D 1; + PageTable[Index].Bits.Accessed =3D 1; + PageTable[Index].Bits.Dirty =3D 1; + PageTable[Index].Bits.MustBe1 =3D 1; + PageTable[Index].Bits.PageTableBaseAddress =3D AddressToMap >> 21; + PageTable[Index].Bits.Present =3D 1; + } + + CpuFlushTlb (); + + return EFI_SUCCESS; +} --=20 Anthony PERARD -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#73275): https://edk2.groups.io/g/devel/message/73275 Mute This Topic: https://groups.io/mt/81605803/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-