449a6e4 OvmfPkg: Create GHCB pages for use during Pei and Dxe phase

5 files Authored by Tom Lendacky 3 years ago, Committed by mergify[bot] 3 years ago,
    OvmfPkg: Create GHCB pages for use during Pei and Dxe phase
    
    BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=2198
    
    Allocate memory for the GHCB pages and the per-CPU variable pages during
    SEV initialization for use during Pei and Dxe phases. The GHCB page(s)
    must be shared pages, so clear the encryption mask from the current page
    table entries. Upon successful allocation, set the GHCB PCDs (PcdGhcbBase
    and PcdGhcbSize).
    
    The per-CPU variable page needs to be unique per AP. Using the page after
    the GHCB ensures that it is unique per AP. Only the GHCB page is marked as
    shared, keeping the per-CPU variable page encyrpted. The same logic is
    used in DXE using CreateIdentityMappingPageTables() before switching to
    the DXE pagetables.
    
    The GHCB pages (one per vCPU) will be used by the PEI and DXE #VC
    exception handlers. The #VC exception handler will fill in the necessary
    fields of the GHCB and exit to the hypervisor using the VMGEXIT
    instruction. The hypervisor then accesses the GHCB associated with the
    vCPU in order to perform the requested function.
    
    Cc: Jordan Justen <jordan.l.justen@intel.com>
    Cc: Laszlo Ersek <lersek@redhat.com>
    Cc: Ard Biesheuvel <ard.biesheuvel@arm.com>
    Reviewed-by: Laszlo Ersek <lersek@redhat.com>
    Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
    Regression-tested-by: Laszlo Ersek <lersek@redhat.com>
    
        
file modified
+2 -0
file modified
+2 -0
file modified
+2 -0
file modified
+44 -1