This is a combination of prep work for TDX and SNP, and a clean up of the page fault path to (hopefully) make it easier to follow the rules for private memory, noslot faults, writes to read-only slots, etc. Paolo, this is the series I mentioned in your TDX/SNP prep work series. Stating the obvious, these KVM: x86/mmu: Pass full 64-bit error code when handling page faults KVM: x86: Move synthetic PFERR_* sanity checks to SVM's #NPF handler are the drop-in replacements. Isaku Yamahata (1): KVM: x86/mmu: Pass full 64-bit error code when handling page faults Sean Christopherson (15): KVM: x86/mmu: Exit to userspace with -EFAULT if private fault hits emulation KVM: x86: Remove separate "bit" defines for page fault error code masks KVM: x86: Define more SEV+ page fault error bits/flags for #NPF KVM: x86/mmu: Use synthetic page fault error code to indicate private faults KVM: x86/mmu: WARN if upper 32 bits of legacy #PF error code are non-zero KVM: x86: Move synthetic PFERR_* sanity checks to SVM's #NPF handler KVM: x86/mmu: WARN and skip MMIO cache on private, reserved page faults KVM: x86/mmu: Move private vs. shared check above slot validity checks KVM: x86/mmu: Don't force emulation of L2 accesses to non-APIC internal slots KVM: x86/mmu: Explicitly disallow private accesses to emulated MMIO KVM: x86/mmu: Move slot checks from __kvm_faultin_pfn() to kvm_faultin_pfn() KVM: x86/mmu: Handle no-slot faults at the beginning of kvm_faultin_pfn() KVM: x86/mmu: Set kvm_page_fault.hva to KVM_HVA_ERR_BAD for "no slot" faults KVM: x86/mmu: Initialize kvm_page_fault's pfn and hva to error values KVM: x86/mmu: Sanity check that __kvm_faultin_pfn() doesn't create noslot pfns arch/x86/include/asm/kvm_host.h | 45 ++++----- arch/x86/kvm/mmu.h | 4 +- arch/x86/kvm/mmu/mmu.c | 159 +++++++++++++++++++------------- arch/x86/kvm/mmu/mmu_internal.h | 24 ++++- arch/x86/kvm/mmu/mmutrace.h | 2 +- arch/x86/kvm/svm/svm.c | 9 ++ 6 files changed, 151 insertions(+), 92 deletions(-) base-commit: ec1e3d33557babed2c2c2c7da6e84293c2f56f58 -- 2.44.0.278.ge034bb2e1d-goog