From 1058be0934a043804f2ae0b8ea1aa42454dc0eb8 Mon Sep 17 00:00:00 2001 From: Ashish Kalra Date: Tue, 5 Apr 2022 16:27:26 +0000 Subject: [PATCH 4/9] OvmfPkg/VmgExitLib: Encryption state change hypercall support in VC handler cherry-picked from https://patchew.org/EDK2/cover.1629380011.git.ashish.kalra@amd.com . Make the #VC handler aware of the page encryption state change hypercall by adding support to check KVM_HC_MAP_GPA_RANGE hypercall and add the additional register values used by hypercall in the GHCB. Cc: Jordan Justen Cc: Ard Biesheuvel Signed-off-by: Ashish Kalra --- OvmfPkg/Library/CcExitLib/CcExitVcHandler.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/OvmfPkg/Library/CcExitLib/CcExitVcHandler.c b/OvmfPkg/Library/CcExitLib/CcExitVcHandler.c index 0fc30f7b..5c9a9085 100644 --- a/OvmfPkg/Library/CcExitLib/CcExitVcHandler.c +++ b/OvmfPkg/Library/CcExitLib/CcExitVcHandler.c @@ -677,6 +677,19 @@ VmmCallExit ( Ghcb->SaveArea.Cpl = (UINT8)(Regs->Cs & 0x3); CcExitVmgSetOffsetValid (Ghcb, GhcbCpl); + if (Regs->Rax == KVM_HC_MAP_GPA_RANGE) { + // + // KVM_HC_MAP_GPA_RANGE hypercall requires these + // extra registers. + // + Ghcb->SaveArea.Rbx = Regs->Rbx; + CcExitVmgSetOffsetValid (Ghcb, GhcbRbx); + Ghcb->SaveArea.Rcx = Regs->Rcx; + CcExitVmgSetOffsetValid (Ghcb, GhcbRcx); + Ghcb->SaveArea.Rdx = Regs->Rdx; + CcExitVmgSetOffsetValid (Ghcb, GhcbRdx); + } + Status = CcExitVmgExit (Ghcb, SVM_EXIT_VMMCALL, 0, 0); if (Status != 0) { return Status; -- 2.25.1