mirror of https://github.com/acidanthera/audk.git
OvmfPkg/VmgExitLib: Set the SwScratch valid bit for MMIO events
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: c45f678a1e
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>
This commit is contained in:
parent
8d9698ecf8
commit
12a0c11e81
|
@ -664,6 +664,7 @@ MmioExit (
|
||||||
CopyMem (Ghcb->SharedBuffer, &InstructionData->Ext.RegData, Bytes);
|
CopyMem (Ghcb->SharedBuffer, &InstructionData->Ext.RegData, Bytes);
|
||||||
|
|
||||||
Ghcb->SaveArea.SwScratch = (UINT64) Ghcb->SharedBuffer;
|
Ghcb->SaveArea.SwScratch = (UINT64) Ghcb->SharedBuffer;
|
||||||
|
VmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_MMIO_WRITE, ExitInfo1, ExitInfo2);
|
Status = VmgExit (Ghcb, SVM_EXIT_MMIO_WRITE, ExitInfo1, ExitInfo2);
|
||||||
if (Status != 0) {
|
if (Status != 0) {
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -693,6 +694,7 @@ MmioExit (
|
||||||
CopyMem (Ghcb->SharedBuffer, InstructionData->Immediate, Bytes);
|
CopyMem (Ghcb->SharedBuffer, InstructionData->Immediate, Bytes);
|
||||||
|
|
||||||
Ghcb->SaveArea.SwScratch = (UINT64) Ghcb->SharedBuffer;
|
Ghcb->SaveArea.SwScratch = (UINT64) Ghcb->SharedBuffer;
|
||||||
|
VmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_MMIO_WRITE, ExitInfo1, ExitInfo2);
|
Status = VmgExit (Ghcb, SVM_EXIT_MMIO_WRITE, ExitInfo1, ExitInfo2);
|
||||||
if (Status != 0) {
|
if (Status != 0) {
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -725,6 +727,7 @@ MmioExit (
|
||||||
ExitInfo2 = Bytes;
|
ExitInfo2 = Bytes;
|
||||||
|
|
||||||
Ghcb->SaveArea.SwScratch = (UINT64) Ghcb->SharedBuffer;
|
Ghcb->SaveArea.SwScratch = (UINT64) Ghcb->SharedBuffer;
|
||||||
|
VmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2);
|
Status = VmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2);
|
||||||
if (Status != 0) {
|
if (Status != 0) {
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -755,6 +758,7 @@ MmioExit (
|
||||||
ExitInfo2 = Bytes;
|
ExitInfo2 = Bytes;
|
||||||
|
|
||||||
Ghcb->SaveArea.SwScratch = (UINT64) Ghcb->SharedBuffer;
|
Ghcb->SaveArea.SwScratch = (UINT64) Ghcb->SharedBuffer;
|
||||||
|
VmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2);
|
Status = VmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2);
|
||||||
if (Status != 0) {
|
if (Status != 0) {
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -780,6 +784,7 @@ MmioExit (
|
||||||
ExitInfo2 = Bytes;
|
ExitInfo2 = Bytes;
|
||||||
|
|
||||||
Ghcb->SaveArea.SwScratch = (UINT64) Ghcb->SharedBuffer;
|
Ghcb->SaveArea.SwScratch = (UINT64) Ghcb->SharedBuffer;
|
||||||
|
VmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2);
|
Status = VmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2);
|
||||||
if (Status != 0) {
|
if (Status != 0) {
|
||||||
return Status;
|
return Status;
|
||||||
|
|
Loading…
Reference in New Issue