Tom - Yes please.

> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Lendacky, 
> Thomas
> Sent: Tuesday, September 24, 2019 7:31 AM
> To: Dong, Eric <eric.d...@intel.com>; Ni, Ray <ray...@intel.com>
> 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>;
> 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>; devel@edk2.groups.io
> Subject: Re: [edk2-devel] [RFC PATCH v2 00/44] SEV-ES guest support
> 
> 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 (#48049): https://edk2.groups.io/g/devel/message/48049
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