On 9/23/19 8:55 PM, Dong, Eric wrote:
> Hi Tom,

Hi Eric,

> 
> Thanks for you to contribute such a big changes. Seems like this is a big 
> changes for current code, can you help to do a design review in TianoCore 
> Design Meeting? It will be helpful for us to understand the code change and 
> review it.
> 
> Ray is the owner of that meeting, you can contact him for the arrangement of 
> your topic.

Thanks for the info, Eric.

Ray, I see on the TianoCore wiki that I should contact Stephano to be
added to the meeting agenda. Should I follow those directions?

Thanks,
Tom

> 
> Thanks,
> Eric
> 
>> -----Original Message-----
>> From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of
>> Lendacky, Thomas
>> Sent: Saturday, September 21, 2019 3:25 AM
>> To: devel@edk2.groups.io
>> Cc: Justen, Jordan L <jordan.l.jus...@intel.com>; Laszlo Ersek
>> <ler...@redhat.com>; Ard Biesheuvel <ard.biesheu...@linaro.org>; Kinney,
>> Michael D <michael.d.kin...@intel.com>; Gao, Liming
>> <liming....@intel.com>; Dong, Eric <eric.d...@intel.com>; Ni, Ray
>> <ray...@intel.com>; Singh, Brijesh <brijesh.si...@amd.com>; You, Benjamin
>> <benjamin....@intel.com>; Bi, Dandan <dandan...@intel.com>; Dong, Guo
>> <guo.d...@intel.com>; Wu, Hao A <hao.a...@intel.com>; Wang, Jian J
>> <jian.j.w...@intel.com>; Ma, Maurice <maurice...@intel.com>
>> Subject: Re: [edk2-devel] [RFC PATCH v2 00/44] SEV-ES guest support
>>
>> On 9/19/19 2:52 PM, Lendacky, Thomas wrote:
>>> From: Tom Lendacky <thomas.lenda...@amd.com>
>>>
>>> This patch series provides support for running EDK2/OVMF under SEV-ES.
>>
>> I wanted to provide the full series so that everyone can see what is involved
>> with the support.
>>
>> Providing multiple, smaller series of patches might be easier to review.
>> If that is desired, any suggestions/recommendations on how to best approach
>> that would be great.
>>
>> Thanks,
>> Tom
>>
>>>
>>> Secure Encrypted Virtualization - Encrypted State (SEV-ES) expands on
>>> the SEV support to protect the guest register state from the
>>> hypervisor. See
>>> "AMD64 Architecture Programmer's Manual Volume 2: System
>> Programming",
>>> section "15.35 Encrypted State (SEV-ES)" [1].
>>>
>>> In order to allow a hypervisor to perform functions on behalf of a
>>> guest, there is architectural support for notifying a guest's
>>> operating system when certain types of VMEXITs are about to occur.
>>> This allows the guest to selectively share information with the
>>> hypervisor to satisfy the requested function. The notification is
>>> performed using a new exception, the VMM Communication exception
>>> (#VC). The information is shared through the Guest-Hypervisor
>> Communication Block (GHCB) using the VMGEXIT instruction.
>>> The GHCB format and the protocol for using it is documented in "SEV-ES
>>> Guest-Hypervisor Communication Block Standardization" [2].
>>>
>>> The main areas of the EDK2 code that are updated to support SEV-ES are
>>> around the exception handling support and the AP boot support.
>>>
>>> Exception support is required starting in Sec, continuing through Pei
>>> and into Dxe in order to handle #VC exceptions that are generated.
>>> Each AP requires it's own GHCB page as well as a page to hold values
>>> specific to that AP.
>>>
>>> AP booting poses some interesting challenges. The INIT-SIPI-SIPI
>>> sequence is typically used to boot the APs. However, the hypervisor is
>>> not allowed to update the guest registers. The GHCB document [2] talks
>>> about how SMP booting under SEV-ES is performed.
>>>
>>> Since the GHCB page must be a shared (unencrypted) page, the processor
>>> must be running in long mode in order for the guest and hypervisor to
>>> communicate with each other. As a result, SEV-ES is only supported
>>> under the X64 architecture.
>>>
>>> [1] https://www.amd.com/system/files/TechDocs/24593.pdf
>>> [2] https://developer.amd.com/wp-content/resources/56421.pdf
>>>
>>> ---
>>>
>>> These patches are based on commit:
>>> ada905ab5c0e ("MdeModulePkg DxeCore: Fix for missing Memory Attributes
>>> Table (MAT) update")
>>>
>>> A version of the tree can be found at:
>>> https://github.com/AMDESE/ovmf/tree/sev-es-v7
>>>
>>> Cc: Ard Biesheuvel <ard.biesheu...@linaro.org>
>>> Cc: Benjamin You <benjamin....@intel.com>
>>> Cc: Dandan Bi <dandan...@intel.com>
>>> Cc: Eric Dong <eric.d...@intel.com>
>>> Cc: Guo Dong <guo.d...@intel.com>
>>> Cc: Hao A Wu <hao.a...@intel.com>
>>> Cc: Jian J Wang <jian.j.w...@intel.com>
>>> Cc: Jordan Justen <jordan.l.jus...@intel.com>
>>> Cc: Laszlo Ersek <ler...@redhat.com>
>>> Cc: Liming Gao <liming....@intel.com>
>>> Cc: Maurice Ma <maurice...@intel.com>
>>> Cc: Michael D Kinney <michael.d.kin...@intel.com>
>>> Cc: Ray Ni <ray...@intel.com>
>>>
>>> Changes since v1:
>>> - Patches reworked to be more specific to the component/area being
>> updated
>>>    and order of definition/usage
>>> - Created a library for VMGEXIT-related functions to replace use of inline
>>>    functions
>>> - Allocation method for GDT changed from AllocatePool to AllocatePages
>>> - Early caching only enabled for SEV-ES guests
>>> - Ensure AP loop mode set to halt loop mode for SEV-ES guests
>>> - Reserved SEC GHCB-related memory areas when S3 is enabled
>>>
>>> Tom Lendacky (44):
>>>    MdePkg: Create PCDs to be used in support of SEV-ES
>>>    OvmfPkg/MemEncryptSevLib: Add an SEV-ES guest indicator function
>>>    OvmfPkg: Add support to perform SEV-ES initialization
>>>    OvmfPkg/ResetVector: Add support for a 32-bit SEV check
>>>    MdePkg: Add the MSR definition for the GHCB register
>>>    OvmfPkg: Create a GHCB page for use during Sec phase
>>>    OvmfPkg/PlatformPei: Reserve GHCB-related areas if S3 is supported
>>>    OvmfPkg: Create GHCB pages for use during Pei and Dxe phase
>>>    MdeModulePkg/DxeIplPeim: Support GHCB pages when creating page
>> tables
>>>    OvmfPkg: A per-CPU variable area for #VC usage
>>>    OvmfPkg/PlatformPei: Move early GDT into ram when SEV-ES is enabled
>>>    MdePkg: Add a structure definition for the GHCB
>>>    MdePkg/BaseLib: Add support for the VMGEXIT instruction
>>>    UefiCpuPkg: Implement library support for VMGEXIT
>>>    UefiCpuPkg/CpuExceptionHandler: Add base support for the #VC exception
>>>    OvmfPkg/MemEncryptSevLib: Make MemEncryptSevLib available during
>> SEC
>>>    UefiCpuPkg/CpuExceptionHandler: Add #VC exception handling for Sec
>>>      phase
>>>    OvmfPkg/Sec: Enable cache early to speed up booting
>>>    UefiCpuPkg/CpuExceptionHandler: Add support for IOIO_PROT NAE events
>>>    UefiCpuPkg/CpuExceptionHandler: Support string IO for IOIO_PROT NAE
>>>      events
>>>    MdePkg: Add support for the XGETBV instruction
>>>    UefiCpuPkg/CpuExceptionHandler: Add support for CPUID NAE events
>>>    UefiCpuPkg/CpuExceptionHandler: Add support for MSR_PROT NAE events
>>>    UefiCpuPkg/CpuExceptionHandler: Add support for NPF NAE events (MMIO)
>>>    UefiCpuPkg/CpuExceptionHandler: Add support for WBINVD NAE events
>>>    UefiCpuPkg/CpuExceptionHandler: Add support for RDTSC NAE events
>>>    UefiCpuPkg/CpuExceptionHandler: Add support for RDPMC NAE events
>>>    UefiCpuPkg/CpuExceptionHandler: Add support for INVD NAE events
>>>    UefiCpuPkg/CpuExceptionHandler: Add support for VMMCALL NAE events
>>>    UefiCpuPkg/CpuExceptionHandler: Add support for RDTSCP NAE events
>>>    UefiCpuPkg/CpuExceptionHandler: Add support for MONITOR/MONITORX
>> NAE
>>>      events
>>>    UefiCpuPkg/CpuExceptionHandler: Add support for MWAIT/MWAITX NAE
>>>      events
>>>    UefiCpuPkg/CpuExceptionHandler: Add support for DR7 Read/Write NAE
>>>      events
>>>    UefiCpuPkg/MpInitLib: Update CPU MP data with a flag to indicate if
>>>      SEV-ES is active
>>>    MdeModulePkg: Reserve a 16-bit protected mode code segment descriptor
>>>    UefiCpuPkg: Add a 16-bit protected mode code segment descriptor
>>>    OvmfPkg: Add support for SEV-ES AP reset vector re-directing
>>>    UefiCpuPkg: Allow AP booting under SEV-ES
>>>    OvmfPkg: Move the GHCB allocations into reserved memory
>>>    MdePkg: Add a finalization function to the CPU protocol
>>>    UefiCpuPkg/MpInitLib: Add MP finalization interface to MpInitLib
>>>    UefiCpuPkg/MpInitLib: Prepare SEV-ES guest APs for OS use
>>>    UefiCpuPkg/CpuDxe: Provide an DXE MP finalization routine to support
>>>      SEV-ES
>>>    MdeModulePkg/DxeCore: Perform the CPU protocol finalization support
>>>
>>>   MdeModulePkg/MdeModulePkg.dec                 |   15 +
>>>   OvmfPkg/OvmfPkg.dec                           |   10 +
>>>   UefiCpuPkg/UefiCpuPkg.dec                     |    3 +
>>>   OvmfPkg/OvmfPkgIa32.dsc                       |   10 +
>>>   OvmfPkg/OvmfPkgIa32X64.dsc                    |   10 +
>>>   OvmfPkg/OvmfPkgX64.dsc                        |   10 +
>>>   UefiCpuPkg/UefiCpuPkg.dsc                     |    5 +
>>>   UefiPayloadPkg/UefiPayloadPkgIa32.dsc         |    2 +
>>>   UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc      |    2 +
>>>   OvmfPkg/OvmfPkgX64.fdf                        |    6 +
>>>   MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf       |    2 +
>>>   MdePkg/Library/BaseLib/BaseLib.inf            |    4 +
>>>   .../BaseMemEncryptSevLib.inf                  |    2 +-
>>>   OvmfPkg/PlatformPei/PlatformPei.inf           |    7 +
>>>   OvmfPkg/ResetVector/ResetVector.inf           |    6 +
>>>   OvmfPkg/Sec/SecMain.inf                       |    2 +
>>>   .../DxeCpuExceptionHandlerLib.inf             |    5 +
>>>   .../PeiCpuExceptionHandlerLib.inf             |    5 +
>>>   .../SecPeiCpuExceptionHandlerLib.inf          |    5 +
>>>   UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf |    3 +
>>>   UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf |    3 +
>>>   UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf  |   33 +
>>>   .../Core/DxeIplPeim/X64/VirtualMemory.h       |   12 +-
>>>   MdePkg/Include/Library/BaseLib.h              |   30 +
>>>   MdePkg/Include/Protocol/Cpu.h                 |   18 +
>>>   MdePkg/Include/Register/Amd/Fam17Msr.h        |   28 +
>>>   MdePkg/Include/Register/Amd/Ghcb.h            |  105 ++
>>>   OvmfPkg/Include/Library/MemEncryptSevLib.h    |   12 +
>>>   UefiCpuPkg/CpuDxe/CpuDxe.h                    |   12 +
>>>   UefiCpuPkg/CpuDxe/CpuGdt.h                    |    4 +-
>>>   UefiCpuPkg/Include/Library/MpInitLib.h        |   14 +
>>>   UefiCpuPkg/Include/Library/VmgExitLib.h       |   74 +
>>>   .../CpuExceptionHandlerLib/AMDSevVcCommon.h   |   19 +
>>>   .../CpuExceptionCommon.h                      |    2 +
>>>   UefiCpuPkg/Library/MpInitLib/MpLib.h          |   77 +-
>>>   MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c       |    5 +
>>>   .../Core/DxeIplPeim/Ia32/DxeLoadFunc.c        |    6 +-
>>>   .../Core/DxeIplPeim/X64/DxeLoadFunc.c         |   11 +-
>>>   .../Core/DxeIplPeim/X64/VirtualMemory.c       |   49 +-
>>>   MdePkg/Library/BaseLib/Ia32/GccInline.c       |   45 +
>>>   MdePkg/Library/BaseLib/X64/GccInline.c        |   47 +
>>>   .../MemEncryptSevLibInternal.c                |   77 +-
>>>   OvmfPkg/PlatformPei/AmdSev.c                  |   78 ++
>>>   OvmfPkg/PlatformPei/MemDetect.c               |   23 +
>>>   OvmfPkg/Sec/SecMain.c                         |   39 +-
>>>   UefiCpuPkg/CpuDxe/CpuDxe.c                    |   21 +-
>>>   UefiCpuPkg/CpuDxe/CpuGdt.c                    |    8 +-
>>>   .../CpuExceptionCommon.c                      |    2 +-
>>>   .../Ia32/AMDSevVcCommon.c                     |   13 +
>>>   .../PeiDxeAMDSevVcHandler.c                   |   22 +
>>>   .../PeiDxeSmmCpuException.c                   |   16 +
>>>   .../SecAMDSevVcHandler.c                      |   45 +
>>>   .../SecPeiCpuException.c                      |   16 +
>>>   .../X64/AMDSevVcCommon.c                      | 1200 +++++++++++++++++
>>>   UefiCpuPkg/Library/MpInitLib/DxeMpLib.c       |  136 +-
>>>   UefiCpuPkg/Library/MpInitLib/MpLib.c          |  259 +++-
>>>   UefiCpuPkg/Library/MpInitLib/PeiMpLib.c       |   35 +
>>>   UefiCpuPkg/Library/VmgExitLib/VmgExitLib.c    |   75 ++
>>>   UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmmFuncsArch.c  |    2 +-
>>>   MdePkg/Library/BaseLib/Ia32/VmgExit.nasm      |   31 +
>>>   MdePkg/Library/BaseLib/Ia32/XGetBv.nasm       |   31 +
>>>   MdePkg/Library/BaseLib/X64/VmgExit.nasm       |   32 +
>>>   MdePkg/Library/BaseLib/X64/XGetBv.nasm        |   34 +
>>>   OvmfPkg/ResetVector/Ia16/ResetVectorVtf0.asm  |   80 ++
>>>   OvmfPkg/ResetVector/Ia32/PageTables64.asm     |  256 +++-
>>>   OvmfPkg/ResetVector/ResetVector.nasmb         |   13 +
>>>   .../X64/ExceptionHandlerAsm.nasm              |   15 +
>>>   UefiCpuPkg/Library/MpInitLib/Ia32/MpEqu.inc   |    2 +-
>>>   .../Library/MpInitLib/Ia32/MpFuncs.nasm       |   15 +
>>>   UefiCpuPkg/Library/MpInitLib/X64/MpEqu.inc    |    4 +-
>>>   UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm |  373 ++++-
>>>   UefiCpuPkg/Library/VmgExitLib/VmgExitLib.uni  |   15 +
>>>   .../ResetVector/Vtf0/Ia16/Real16ToFlat32.asm  |    9 +
>>>   73 files changed, 3600 insertions(+), 97 deletions(-)
>>>   create mode 100644 UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf
>>>   create mode 100644 MdePkg/Include/Register/Amd/Ghcb.h
>>>   create mode 100644 UefiCpuPkg/Include/Library/VmgExitLib.h
>>>   create mode 100644
>> UefiCpuPkg/Library/CpuExceptionHandlerLib/AMDSevVcCommon.h
>>>   create mode 100644
>> UefiCpuPkg/Library/CpuExceptionHandlerLib/Ia32/AMDSevVcCommon.c
>>>   create mode 100644
>> UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiDxeAMDSevVcHandler.c
>>>   create mode 100644
>> UefiCpuPkg/Library/CpuExceptionHandlerLib/SecAMDSevVcHandler.c
>>>   create mode 100644
>> UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c
>>>   create mode 100644 UefiCpuPkg/Library/VmgExitLib/VmgExitLib.c
>>>   create mode 100644 MdePkg/Library/BaseLib/Ia32/VmgExit.nasm
>>>   create mode 100644 MdePkg/Library/BaseLib/Ia32/XGetBv.nasm
>>>   create mode 100644 MdePkg/Library/BaseLib/X64/VmgExit.nasm
>>>   create mode 100644 MdePkg/Library/BaseLib/X64/XGetBv.nasm
>>>   create mode 100644 OvmfPkg/ResetVector/Ia16/ResetVectorVtf0.asm
>>>   create mode 100644 UefiCpuPkg/Library/VmgExitLib/VmgExitLib.uni
>>>
>>
>> 
> 

-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#47955): https://edk2.groups.io/g/devel/message/47955
Mute This Topic: https://groups.io/mt/34203534/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to