[RFC PATCH 13/21] KVM: X86: Handle private MMIO as shared

Alexey Kardashevskiy
2024-08-23T13:31:14Z

Currently private MMIO nested page faults are not expected so when such
fault occurs, KVM tries moving the faulted page from private to shared
which is not going to work as private MMIO is not backed by memfd.

Handle private MMIO as shared: skip page state change and memfd
page state tracking.

The MMIO KVM memory slot is still marked as shared as the guest can
access it as private or shared so marking the MMIO slot as private
is not going to help.

Signed-off-by: Alexey Kardashevskiy <aik@amd.com>
---
arch/x86/kvm/mmu/mmu.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c
index 928cf84778b0..e74f5c3d0821 100644
--- a/arch/x86/kvm/mmu/mmu.c
+++ b/arch/x86/kvm/mmu/mmu.c
@@ -4366,7 +4366,11 @@ static int __kvm_faultin_pfn(struct kvm_vcpu *vcpu, struct kvm_page_fault *fault
{
bool async;

- if (fault->is_private)
+ if (fault->slot && fault->is_private && !kvm_slot_can_be_private(fault->slot) &&
+ (vcpu->kvm->arch.vm_type == KVM_X86_SNP_VM))
+ pr_warn("%s: private SEV TIO MMIO fault for fault->gfn=%llx\n",
+ __func__, fault->gfn);
+ else if (fault->is_private)
return kvm_faultin_pfn_private(vcpu, fault);

async = false;
--
2.45.2