The live migration of Hygon CSV1/2/3 guest depends on the KVM
hypercall KVM_HC_MAP_GPA_RANGE, add code to sync page enc/dec
status to KVM.
The MMIO routine of VC handler will get memory encrypt status to
validate MMIO address. MemEncryptSevGetEncryptionMask() will enable
interrupt while interrupt must be disabled during VC. During DXE
stage, VC routine as below:
CcExitHandleVc
-> MemEncryptSevGetAddressRangeState
-> MemEncryptSevGetEncryptionMask->PcdGet64(PcdPteMemoryEncryptionAddressOrMask)
Signed-off-by: hanliyang <hanliyang@hygon.cn>
36 lines
1.3 KiB
Diff
36 lines
1.3 KiB
Diff
From fbdd6e4664e41eb299a797f1ab615d81b1bd958b Mon Sep 17 00:00:00 2001
|
|
From: hanliyang <hanliyang@hygon.cn>
|
|
Date: Mon, 17 Jan 2022 01:19:21 -0500
|
|
Subject: [PATCH 7/9] OvmfPkg/BaseMemcryptSevLib: Correct the calculation of
|
|
page range that notified to hypervisor
|
|
|
|
Correct the calculation of page range that notified to hypervisor.
|
|
|
|
Signed-off-by: hanliyang <hanliyang@hygon.cn>
|
|
---
|
|
.../Library/BaseMemEncryptSevLib/X64/PeiDxeVirtualMemory.c | 6 +++++-
|
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/OvmfPkg/Library/BaseMemEncryptSevLib/X64/PeiDxeVirtualMemory.c b/OvmfPkg/Library/BaseMemEncryptSevLib/X64/PeiDxeVirtualMemory.c
|
|
index 42e3b03f..69ada871 100644
|
|
--- a/OvmfPkg/Library/BaseMemEncryptSevLib/X64/PeiDxeVirtualMemory.c
|
|
+++ b/OvmfPkg/Library/BaseMemEncryptSevLib/X64/PeiDxeVirtualMemory.c
|
|
@@ -999,9 +999,13 @@ SetMemoryEncDec (
|
|
// Notify Hypervisor on C-bit status
|
|
//
|
|
if (CBitChanged) {
|
|
+ UINTN StartPfn = OrigPhysicalAddress >> EFI_PAGE_SHIFT;
|
|
+ UINTN EndPfn = (OrigPhysicalAddress + OrigLength +
|
|
+ ((1 << EFI_PAGE_SHIFT) - 1)) >> EFI_PAGE_SHIFT;
|
|
+
|
|
Status = SetMemoryEncDecHypercall3 (
|
|
OrigPhysicalAddress,
|
|
- EFI_SIZE_TO_PAGES (OrigLength),
|
|
+ (EndPfn - StartPfn),
|
|
(Mode == SetCBit) ? TRUE : FALSE
|
|
);
|
|
}
|
|
--
|
|
2.25.1
|
|
|