]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg/VmgExitLib: Set the SwScratch valid bit for MMIO events
authorTom Lendacky <thomas.lendacky@amd.com>
Fri, 6 Nov 2020 17:53:08 +0000 (11:53 -0600)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Tue, 10 Nov 2020 19:07:55 +0000 (19:07 +0000)
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3008

All fields that are set in the GHCB should have their associated bit in
the GHCB ValidBitmap field set. Add support to set the bit for the scratch
area field (SwScratch).

Fixes: c45f678a1ea2080344e125dc55b14e4b9f98483d
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Ard Biesheuvel <ard.biesheuvel@arm.com>
Cc: Tom Lendacky <thomas.lendacky@amd.com>
Cc: Brijesh Singh <brijesh.singh@amd.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
Message-Id: <45ccb63c2dadd834e2c47bf10c9e59c6766d7eb6.1604685192.git.thomas.lendacky@amd.com>

OvmfPkg/Library/VmgExitLib/VmgExitVcHandler.c

index e5f14035b06f0c988cd4c548d89f1589e120fe1b..9bf9d160179c1f036a404a7e56e1c70f2024f3c3 100644 (file)
@@ -664,6 +664,7 @@ MmioExit (
     CopyMem (Ghcb->SharedBuffer, &InstructionData->Ext.RegData, Bytes);\r
 \r
     Ghcb->SaveArea.SwScratch = (UINT64) Ghcb->SharedBuffer;\r
+    VmgSetOffsetValid (Ghcb, GhcbSwScratch);\r
     Status = VmgExit (Ghcb, SVM_EXIT_MMIO_WRITE, ExitInfo1, ExitInfo2);\r
     if (Status != 0) {\r
       return Status;\r
@@ -693,6 +694,7 @@ MmioExit (
     CopyMem (Ghcb->SharedBuffer, InstructionData->Immediate, Bytes);\r
 \r
     Ghcb->SaveArea.SwScratch = (UINT64) Ghcb->SharedBuffer;\r
+    VmgSetOffsetValid (Ghcb, GhcbSwScratch);\r
     Status = VmgExit (Ghcb, SVM_EXIT_MMIO_WRITE, ExitInfo1, ExitInfo2);\r
     if (Status != 0) {\r
       return Status;\r
@@ -725,6 +727,7 @@ MmioExit (
     ExitInfo2 = Bytes;\r
 \r
     Ghcb->SaveArea.SwScratch = (UINT64) Ghcb->SharedBuffer;\r
+    VmgSetOffsetValid (Ghcb, GhcbSwScratch);\r
     Status = VmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2);\r
     if (Status != 0) {\r
       return Status;\r
@@ -755,6 +758,7 @@ MmioExit (
     ExitInfo2 = Bytes;\r
 \r
     Ghcb->SaveArea.SwScratch = (UINT64) Ghcb->SharedBuffer;\r
+    VmgSetOffsetValid (Ghcb, GhcbSwScratch);\r
     Status = VmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2);\r
     if (Status != 0) {\r
       return Status;\r
@@ -780,6 +784,7 @@ MmioExit (
     ExitInfo2 = Bytes;\r
 \r
     Ghcb->SaveArea.SwScratch = (UINT64) Ghcb->SharedBuffer;\r
+    VmgSetOffsetValid (Ghcb, GhcbSwScratch);\r
     Status = VmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2);\r
     if (Status != 0) {\r
       return Status;\r