Thank you a lot! I misunderstood the condition for remapping GHCB page in previous code. I'll fix the issue in next version patch.
Thanks, Dun -----Original Message----- From: Tom Lendacky <thomas.lenda...@amd.com> Sent: Tuesday, April 4, 2023 1:14 AM To: Tan, Dun <dun....@intel.com>; devel@edk2.groups.io Cc: Ni, Ray <ray...@intel.com> Subject: Re: [edk2-devel] [Patch V2 0/8] Create page table by CpuPageTableLib in DxeIpl On 4/3/23 09:24, Tom Lendacky wrote: > On 3/31/23 09:35, Tom Lendacky wrote: >> On 3/31/23 04:41, Tan, Dun wrote: >>> Hi Tom, >>> >>> Reccentlly I sent this patch set to change DxeIpl code to use >>> CpuPageTableLib to create page table. I have done some test on Intel >>> CPU to make sure that the page table created by DxeIpl before the >>> change is the same as the page table created by DxeIpl after the >>> change. But there was a remaining case that I didn't cover. The case >>> is that PcdPteMemoryEncryptionAddressOrMask, PcdGhcbBase and >>> PcdGhcbSize are not zero(when memory encryption is enabled on AMD >>> processors supporting the SEV feature). >>> So could you please help do a test on AMD processor to make sure >>> that the SEV feature still works good with this pacth set? >> >> Yes, I can test it. > > This is breaking the SEV-ES and SEV-SNP boots. I'll see if I can > figure out what or where the breakage is, but this patchset can't be merged > as is. The following change to the patch series allows SEV-ES and SEV-SNP guests to boot. Thanks, Tom diff --git a/MdeModulePkg/Core/DxeIplPeim/X64/VirtualMemory.c b/MdeModulePkg/Core/DxeIplPeim/X64/VirtualMemory.c index a9edf4de32..a3f16c7cf9 100644 --- a/MdeModulePkg/Core/DxeIplPeim/X64/VirtualMemory.c +++ b/MdeModulePkg/Core/DxeIplPeim/X64/VirtualMemory.c @@ -416,6 +416,7 @@ CreateIdentityMappingPageTables ( IA32_MAP_ATTRIBUTE MapAttribute; IA32_MAP_ATTRIBUTE MapMask; EFI_PHYSICAL_ADDRESS GhcbBase4K; + EFI_PHYSICAL_ADDRESS GhcbBaseEnd; // // Make sure AddressEncMask is contained to smallest supported address field @@ -504,15 +505,21 @@ CreateIdentityMappingPageTables ( // // The GHCB range consists of two pages per CPU, the GHCB and a // per-CPU variable page. The GHCB page needs to be mapped as an - // unencrypted page while the per-CPU variable page needs to be - // mapped encrypted. These pages alternate in assignment. + // unencrypted page while the per-CPU variable page needs to remain + // mapped as an encrypted page. + // + // Loop through the GHCB range, remapping the GHCB page unencrypted + // and skipping over the per-CPU variable page. // ASSERT (Is64BitPageTable == TRUE); - GhcbBase4K = ALIGN_VALUE (GhcbBase, SIZE_4KB); - MapAttribute.Uint64 = GhcbBase4K; - MapMask.Uint64 = 0; - MapMask.Bits.PageTableBaseAddressLow = 1; - CreateOrUpdatePageTable (&PageTable, PagingMode, GhcbBase4K, SIZE_4KB, &MapAttribute, &MapMask); + GhcbBase4K = ALIGN_VALUE (GhcbBase, SIZE_4KB); + GhcbBaseEnd = ALIGN_VALUE (GhcbBase + GhcbSize, SIZE_4KB); + for (; GhcbBase4K < GhcbBaseEnd; GhcbBase4K += (SIZE_4KB * 2)) { + MapAttribute.Uint64 = GhcbBase4K; + MapMask.Uint64 = 0; + MapMask.Bits.PageTableBaseAddressLow = 1; + CreateOrUpdatePageTable (&PageTable, PagingMode, GhcbBase4K, SIZE_4KB, &MapAttribute, &MapMask); + } } if (PcdGetBool (PcdSetNxForStack)) { > > Thanks, > Tom > >> >> Thanks, >> Tom >> >>> >>> Thanks, >>> Dun >>> >>> -----Original Message----- >>> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of >>> duntan >>> Sent: Friday, March 31, 2023 5:34 PM >>> To: devel@edk2.groups.io >>> Subject: [edk2-devel] [Patch V2 0/8] Create page table by >>> CpuPageTableLib in DxeIpl >>> >>> In this V2 patch set: >>> 1.Remove the unneeded patch for ArmVirtPkg 2.In this patch 'Create >>> page table by CpuPageTableLib', change the input parameter name from >>> Is32BitPageTable to Is64BitPageTable and add a line of >>> "MapAttribute.Bits.Present = 0" before set a range to non-present. >>> 3.In this patch 'Refinement to the code to set PageTable as RO', add >>> a line of "MapAttribute.Bits.ReadWrite = 0" before set a range to ReadOnly. >>> >>> Dun Tan (8): >>> EmulatorPkg: Add CpuPageTableLib required by DxeIpl in DSC >>> IntelFsp2Pkg: Add CpuPageTableLib required by DxeIpl in DSC >>> MdeModulePkg: Add CpuPageTableLib required by DxeIpl in DSC >>> OvmfPkg: Add CpuPageTableLib required by DxeIpl in DSC file >>> MdeModulePkg: Add UefiCpuPkg.dec to pass DependencyCheck >>> MdeModulePkg/DxeIpl: Create page table by CpuPageTableLib >>> MdeModulePkg/DxeIpl: Remove duplicated code to enable NX >>> MdeModulePkg/DxeIpl: Refinement to the code to set PageTable as >>> RO >>> >>> EmulatorPkg/EmulatorPkg.dsc | 3 ++- >>> IntelFsp2Pkg/Tools/Tests/QemuFspPkg.dsc | 3 ++- >>> MdeModulePkg/Core/DxeIplPeim/DxeIpl.h | 3 ++- >>> MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf | 4 +++- >>> MdeModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c | 112 >>> ++++---------------------------------------------------------------- >>> ++++-------------------------------------------- >>> MdeModulePkg/Core/DxeIplPeim/X64/DxeLoadFunc.c | 5 +++-- >>> MdeModulePkg/Core/DxeIplPeim/X64/VirtualMemory.c | 711 >>> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ >>> MdeModulePkg/Core/DxeIplPeim/X64/VirtualMemory.h | 182 >>> ++++++++++---------------------------------------------------------- >>> ++++++++++---------------------------------------------------------- >>> ++++++++++-------------------------------------------------------- >>> MdeModulePkg/MdeModulePkg.ci.yaml | 5 +++-- >>> MdeModulePkg/MdeModulePkg.dsc | 3 ++- >>> OvmfPkg/AmdSev/AmdSevX64.dsc | 2 +- >>> OvmfPkg/Bhyve/BhyveX64.dsc | 3 ++- >>> OvmfPkg/CloudHv/CloudHvX64.dsc | 2 +- >>> OvmfPkg/Microvm/MicrovmX64.dsc | 2 +- >>> OvmfPkg/OvmfPkgIa32.dsc | 3 ++- >>> OvmfPkg/OvmfPkgIa32X64.dsc | 2 +- >>> OvmfPkg/OvmfPkgX64.dsc | 2 +- >>> OvmfPkg/OvmfXen.dsc | 2 +- >>> 18 files changed, 200 insertions(+), 849 deletions(-) >>> >>> -- >>> 2.31.1.windows.1 >>> >>> >>> >>> >>> >>> -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#102452): https://edk2.groups.io/g/devel/message/102452 Mute This Topic: https://groups.io/mt/97969850/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-