5667dc4 OvmfPkg/VmgExitLib: Support nested #VCs

13 files Authored by Tom Lendacky 3 years ago, Committed by mergify[bot] 3 years ago,
    OvmfPkg/VmgExitLib: Support nested #VCs
    
    BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3108
    
    In order to be able to issue messages or make interface calls that cause
    another #VC (e.g. GetLocalApicBaseAddress () issues RDMSR), add support
    for nested #VCs.
    
    In order to support nested #VCs, GHCB backup pages are required. If a #VC
    is received while currently processing a #VC, a backup of the current GHCB
    content is made. This allows the #VC handler to continue processing the
    new #VC. Upon completion of the new #VC, the GHCB is restored from the
    backup page. The #VC recursion level is tracked in the per-vCPU variable
    area.
    
    Support is added to handle up to one nested #VC (or two #VCs total). If
    a second nested #VC is encountered, an ASSERT will be issued and the vCPU
    will enter CpuDeadLoop ().
    
    For SEC, the GHCB backup pages are reserved in the OvmfPkgX64.fdf memory
    layout, with two new fixed PCDs to provide the address and size of the
    backup area.
    
    For PEI/DXE, the GHCB backup pages are allocated as boot services pages
    using the memory allocation library.
    
    Cc: Jordan Justen <jordan.l.justen@intel.com>
    Cc: Laszlo Ersek <lersek@redhat.com>
    Cc: Ard Biesheuvel <ard.biesheuvel@arm.com>
    Cc: Brijesh Singh <brijesh.singh@amd.com>
    Acked-by: Laszlo Ersek <lersek@redhat.com>
    Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
    Message-Id: <ac2e8203fc41a351b43f60d68bdad6b57c4fb106.1610045305.git.thomas.lendacky@amd.com>
    
        
file modified
+1 -0
file modified
+3 -0
file modified
+2 -0
file modified
+1 -0
file modified
+3 -0
file modified
+32 -6