On Tue, 18 Feb 2025 22:10:02 +1100 Alexey Kardashevskiy <aik@xxxxxxx> wrote: > 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@xxxxxxx> > --- > 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 74c20dbb92da..32e27080b1c7 100644 > --- a/arch/x86/kvm/mmu/mmu.c > +++ b/arch/x86/kvm/mmu/mmu.c > @@ -4347,7 +4347,11 @@ static int __kvm_mmu_faultin_pfn(struct > kvm_vcpu *vcpu, { > unsigned int foll = fault->write ? FOLL_WRITE : 0; > > - 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_mmu_faultin_pfn_private(vcpu, fault); > Let's fold this in a macro and make this more informative with comments. > foll |= FOLL_NOWAIT;