[PATCH v4 00/21] KVM: selftests: Add Nested NPT support
From: Sean Christopherson <seanjc@google.com>
Date: 2025-12-30 23:01:53
Also in:
kvm, kvm-riscv, kvmarm, linux-riscv, lkml, loongarch
Yosry's series to add support for nested NPT, and extends vmx_dirty_log_test and kvm_dirty_log_test (with -n, using memstress) to cover nested SVM. Note, I'm mildly concerned the last patch to extend nested_dirty_log_test to validate KVM's handling of READ faults could be flaky, e.g. maybe if someone is running the test under heavy memory pressure and the to-be-access page is swapped between the write-from-host and read-from-guest? But unless someone knows/shows it'll be flaky, I'm inclined to apply it and hope for the best. v4: - Document the likely reason for setting A/D bits. - Put "mmu" structure in common "struct kvm". - Make it clear PTE accessors are predicates. - Assert that the stage-2 MMU is initialized at most once. - Make READABLE a standalone bit (don't overload USER). - Don't alias PRESENT => READABLE for EPT. - Fix the A/D bit definitions for EPT. - Drop the function comment for __tdp_map(). - Add a patch to extend the nested_dirty_log_test to verify that KVM creates writable SPTEs when the gPTEs are writable and dirty. v3: - https://lore.kernel.org/all/20251127013440.3324671-1-yosry.ahmed@linux.dev (local) - Dropped the patches that landed in kvm-x86. - Reshuffled some patches and cleanups. - Introduced kvm_mmu data structures to hold the root, page table levels, and page table masks (Sean). - Extended memstress as well to cover nested SVM. v2: https://lore.kernel.org/kvm/20251021074736.1324328-1-yosry.ahmed@linux.dev (local) Sean Christopherson (7): KVM: selftests: Add "struct kvm_mmu" to track a given MMU instance KVM: selftests: Plumb "struct kvm_mmu" into x86's MMU APIs KVM: selftests: Add a "struct kvm_mmu_arch arch" member to kvm_mmu KVM: selftests: Add a stage-2 MMU instance to kvm_vm KVM: selftests: Move TDP mapping functions outside of vmx.c KVM: selftests: Rename vm_get_page_table_entry() to vm_get_pte() KVM: selftests: Test READ=>WRITE dirty logging behavior for shadow MMU Yosry Ahmed (14): KVM: selftests: Make __vm_get_page_table_entry() static KVM: selftests: Stop passing a memslot to nested_map_memslot() KVM: selftests: Rename nested TDP mapping functions KVM: selftests: Kill eptPageTablePointer KVM: selftests: Stop setting A/D bits when creating EPT PTEs KVM: selftests: Move PTE bitmasks to kvm_mmu KVM: selftests: Use a TDP MMU to share EPT page tables between vCPUs KVM: selftests: Stop passing VMX metadata to TDP mapping functions KVM: selftests: Reuse virt mapping functions for nested EPTs KVM: selftests: Allow kvm_cpu_has_ept() to be called on AMD CPUs KVM: selftests: Add support for nested NPTs KVM: selftests: Set the user bit on nested NPT PTEs KVM: selftests: Extend vmx_dirty_log_test to cover SVM KVM: selftests: Extend memstress to run on nested SVM tools/testing/selftests/kvm/Makefile.kvm | 2 +- .../kvm/include/arm64/kvm_util_arch.h | 2 + .../testing/selftests/kvm/include/kvm_util.h | 18 +- .../kvm/include/loongarch/kvm_util_arch.h | 1 + .../kvm/include/riscv/kvm_util_arch.h | 1 + .../kvm/include/s390/kvm_util_arch.h | 1 + .../selftests/kvm/include/x86/kvm_util_arch.h | 22 ++ .../selftests/kvm/include/x86/processor.h | 58 +++- .../selftests/kvm/include/x86/svm_util.h | 9 + tools/testing/selftests/kvm/include/x86/vmx.h | 16 +- .../selftests/kvm/lib/arm64/processor.c | 38 +-- tools/testing/selftests/kvm/lib/kvm_util.c | 28 +- .../selftests/kvm/lib/loongarch/processor.c | 28 +- .../selftests/kvm/lib/riscv/processor.c | 31 ++- .../selftests/kvm/lib/s390/processor.c | 16 +- .../testing/selftests/kvm/lib/x86/memstress.c | 66 +++-- .../testing/selftests/kvm/lib/x86/processor.c | 237 ++++++++++++---- tools/testing/selftests/kvm/lib/x86/svm.c | 24 ++ tools/testing/selftests/kvm/lib/x86/vmx.c | 251 ++++------------- .../selftests/kvm/x86/hyperv_tlb_flush.c | 2 +- .../selftests/kvm/x86/nested_dirty_log_test.c | 259 ++++++++++++++++++ .../x86/smaller_maxphyaddr_emulation_test.c | 4 +- .../selftests/kvm/x86/vmx_dirty_log_test.c | 179 ------------ .../kvm/x86/vmx_nested_la57_state_test.c | 2 +- 24 files changed, 726 insertions(+), 569 deletions(-) create mode 100644 tools/testing/selftests/kvm/x86/nested_dirty_log_test.c delete mode 100644 tools/testing/selftests/kvm/x86/vmx_dirty_log_test.c base-commit: 9448598b22c50c8a5bb77a9103e2d49f134c9578 -- 2.52.0.351.gbe84eed79e-goog