From: Yosry Ahmed <yosry.ahmed@linux.dev>
To: Sean Christopherson <seanjc@google.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
Jim Mattson <jmattson@google.com>,
kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
Yosry Ahmed <yosry.ahmed@linux.dev>
Subject: [PATCH v2 00/23] Extend test coverage for nested SVM
Date: Tue, 21 Oct 2025 07:47:13 +0000 [thread overview]
Message-ID: <20251021074736.1324328-1-yosry.ahmed@linux.dev> (raw)
There are multiple selftests exercising nested VMX that are not specific
to VMX (at least not anymore). Extend their coverage to nested SVM.
This version is significantly different (and longer) than v1 [1], mainly
due to the change of direction to reuse __virt_pg_map() for nested EPT/NPT
mappings instead of extending the existing nested EPT infrastructure. It
also has a lot more fixups and cleanups.
This series depends on two other series:
- "KVM: SVM: GIF and EFER.SVME are independent" [2]
- "KVM: selftests: Add test of SET_NESTED_STATE with 48-bit L2 on 57-bit L1" [3]
The dependency on the former is because set_nested_state_test is now
also a regression test for that fix. The dependency on the latter is
purely to avoid conflicts.
The patch ordering is not perfect, I did some cleanups toward the end
that arguably should have been moved to the beginning, but I had to stop
rebasing and send the patches out at some point:
Block #1 (patch 1 to patch 7):
- Direct successors to the first 6 patches in v1, addressing review
comments from Jim and collecting his review tags. These patch extend 5
of the nVMX tests to cover nSVM.
Block #2 (patch 8 to patch 11):
- Miscellaneous fixups and cleanups.
Block #3 (patch 11 to patch 17):
- Moving nested EPT mapping functions to use __virt_pg_map(), patches 11
to 15 do the prep work, and patch 16 does the switch. Patch 17 is a
minor cleanup on top (which arguably fits better in block #2).
Block #4 (patch 18 to 23):
- Patches 18 to 22 are prep work to generalize the nested EPT mapping
code to work with nested NPT, and patch 23 finally extends the nested
dirty logging test to work with nSVM using the nested NPT
infrastructure. Patch 19 is admittedly an imposter in this block and
should have been in block #2.
[1]https://lore.kernel.org/kvm/20251001145816.1414855-1-yosry.ahmed@linux.dev/
[2]https://lore.kernel.org/kvm/20251009223153.3344555-1-jmattson@google.com/
[3]https://lore.kernel.org/kvm/20250917215031.2567566-1-jmattson@google.com/
Yosry Ahmed (23):
KVM: selftests: Minor improvements to asserts in
test_vmx_nested_state()
KVM: selftests: Extend vmx_set_nested_state_test to cover SVM
KVM: selftests: Extend vmx_close_while_nested_test to cover SVM
KVM: selftests: Extend vmx_nested_tsc_scaling_test to cover SVM
KVM: selftests: Move nested invalid CR3 check to its own test
KVM: selftests: Extend nested_invalid_cr3_test to cover SVM
KVM: selftests: Extend vmx_tsc_adjust_test to cover SVM
KVM: selftests: Stop hardcoding PAGE_SIZE in x86 selftests
KVM: selftests: Remove the unused argument to prepare_eptp()
KVM: selftests: Stop using __virt_pg_map() directly in tests
KVM: selftests: Make sure vm->vpages_mapped is always up-to-date
KVM: selftests: Parameterize the PTE bitmasks for virt mapping
functions
KVM: selftests: Pass the root GPA into virt_get_pte()
KVM: selftests: Pass the root GPA into __virt_pg_map()
KVM: selftests: Stop setting AD bits on nested EPTs on creation
KVM: selftests: Use __virt_pg_map() for nested EPTs
KVM: selftests: Kill eptPageTablePointer
KVM: selftests: Generalize nested mapping functions
KVM: selftests: Move nested MMU mapping functions outside of vmx.c
KVM: selftests: Stop passing a memslot to nested_map_memslot()
KVM: selftests: Allow kvm_cpu_has_ept() to be called on AMD CPUs
KVM: selftests: Set the user bit on nested MMU PTEs
KVM: selftests: Extend vmx_dirty_log_test to cover SVM
tools/testing/selftests/kvm/Makefile.kvm | 11 +-
.../testing/selftests/kvm/include/kvm_util.h | 1 +
.../selftests/kvm/include/x86/processor.h | 34 ++-
.../selftests/kvm/include/x86/svm_util.h | 8 +
tools/testing/selftests/kvm/include/x86/vmx.h | 15 +-
tools/testing/selftests/kvm/lib/kvm_util.c | 3 -
.../testing/selftests/kvm/lib/x86/memstress.c | 6 +-
.../testing/selftests/kvm/lib/x86/processor.c | 184 +++++++++++---
tools/testing/selftests/kvm/lib/x86/svm.c | 19 ++
tools/testing/selftests/kvm/lib/x86/vmx.c | 232 +++---------------
tools/testing/selftests/kvm/mmu_stress_test.c | 6 +-
...ested_test.c => close_while_nested_test.c} | 42 +++-
.../selftests/kvm/x86/hyperv_features.c | 2 +-
tools/testing/selftests/kvm/x86/hyperv_ipi.c | 18 +-
.../selftests/kvm/x86/hyperv_tlb_flush.c | 2 +-
...rty_log_test.c => nested_dirty_log_test.c} | 102 +++++---
.../kvm/x86/nested_invalid_cr3_test.c | 118 +++++++++
...adjust_test.c => nested_tsc_adjust_test.c} | 79 +++---
...aling_test.c => nested_tsc_scaling_test.c} | 48 +++-
...d_state_test.c => set_nested_state_test.c} | 135 +++++++++-
.../selftests/kvm/x86/sev_smoke_test.c | 2 +-
tools/testing/selftests/kvm/x86/state_test.c | 2 +-
.../selftests/kvm/x86/userspace_io_test.c | 2 +-
23 files changed, 695 insertions(+), 376 deletions(-)
rename tools/testing/selftests/kvm/x86/{vmx_close_while_nested_test.c => close_while_nested_test.c} (64%)
rename tools/testing/selftests/kvm/x86/{vmx_dirty_log_test.c => nested_dirty_log_test.c} (57%)
create mode 100644 tools/testing/selftests/kvm/x86/nested_invalid_cr3_test.c
rename tools/testing/selftests/kvm/x86/{vmx_tsc_adjust_test.c => nested_tsc_adjust_test.c} (61%)
rename tools/testing/selftests/kvm/x86/{vmx_nested_tsc_scaling_test.c => nested_tsc_scaling_test.c} (83%)
rename tools/testing/selftests/kvm/x86/{vmx_set_nested_state_test.c => set_nested_state_test.c} (67%)
--
2.51.0.869.ge66316f041-goog
next reply other threads:[~2025-10-21 7:48 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-21 7:47 Yosry Ahmed [this message]
2025-10-21 7:47 ` [PATCH v2 01/23] KVM: selftests: Minor improvements to asserts in test_vmx_nested_state() Yosry Ahmed
2025-11-20 23:40 ` Sean Christopherson
2025-11-20 23:46 ` Yosry Ahmed
2025-10-21 7:47 ` [PATCH v2 02/23] KVM: selftests: Extend vmx_set_nested_state_test to cover SVM Yosry Ahmed
2025-11-20 23:52 ` Sean Christopherson
2025-10-21 7:47 ` [PATCH v2 03/23] KVM: selftests: Extend vmx_close_while_nested_test " Yosry Ahmed
2025-11-20 23:53 ` Sean Christopherson
2025-10-21 7:47 ` [PATCH v2 04/23] KVM: selftests: Extend vmx_nested_tsc_scaling_test " Yosry Ahmed
2025-11-20 23:54 ` Sean Christopherson
2025-10-21 7:47 ` [PATCH v2 05/23] KVM: selftests: Move nested invalid CR3 check to its own test Yosry Ahmed
2025-11-20 23:55 ` Sean Christopherson
2025-10-21 7:47 ` [PATCH v2 06/23] KVM: selftests: Extend nested_invalid_cr3_test to cover SVM Yosry Ahmed
2025-10-21 7:47 ` [PATCH v2 07/23] KVM: selftests: Extend vmx_tsc_adjust_test " Yosry Ahmed
2025-10-21 7:47 ` [PATCH v2 08/23] KVM: selftests: Stop hardcoding PAGE_SIZE in x86 selftests Yosry Ahmed
2025-10-21 7:47 ` [PATCH v2 09/23] KVM: selftests: Remove the unused argument to prepare_eptp() Yosry Ahmed
2025-10-21 7:47 ` [PATCH v2 10/23] KVM: selftests: Stop using __virt_pg_map() directly in tests Yosry Ahmed
2025-10-21 7:47 ` [PATCH v2 11/23] KVM: selftests: Make sure vm->vpages_mapped is always up-to-date Yosry Ahmed
2025-10-21 7:47 ` [PATCH v2 12/23] KVM: selftests: Parameterize the PTE bitmasks for virt mapping functions Yosry Ahmed
2025-11-21 0:07 ` Sean Christopherson
2025-11-21 0:18 ` Yosry Ahmed
2025-10-21 7:47 ` [PATCH v2 13/23] KVM: selftests: Pass the root GPA into virt_get_pte() Yosry Ahmed
2025-10-21 7:47 ` [PATCH v2 14/23] KVM: selftests: Pass the root GPA into __virt_pg_map() Yosry Ahmed
2025-10-21 7:47 ` [PATCH v2 15/23] KVM: selftests: Stop setting AD bits on nested EPTs on creation Yosry Ahmed
2025-10-21 7:47 ` [PATCH v2 16/23] KVM: selftests: Use __virt_pg_map() for nested EPTs Yosry Ahmed
2025-10-21 7:47 ` [PATCH v2 17/23] KVM: selftests: Kill eptPageTablePointer Yosry Ahmed
2025-10-21 7:47 ` [PATCH v2 18/23] KVM: selftests: Generalize nested mapping functions Yosry Ahmed
2025-11-21 0:10 ` Sean Christopherson
2025-11-21 0:20 ` Yosry Ahmed
2025-10-21 7:47 ` [PATCH v2 19/23] KVM: selftests: Move nested MMU mapping functions outside of vmx.c Yosry Ahmed
2025-10-21 7:47 ` [PATCH v2 20/23] KVM: selftests: Stop passing a memslot to nested_map_memslot() Yosry Ahmed
2025-10-21 7:47 ` [PATCH v2 21/23] KVM: selftests: Allow kvm_cpu_has_ept() to be called on AMD CPUs Yosry Ahmed
2025-10-21 7:47 ` [PATCH v2 22/23] KVM: selftests: Set the user bit on nested MMU PTEs Yosry Ahmed
2025-10-21 7:47 ` [PATCH v2 23/23] KVM: selftests: Extend vmx_dirty_log_test to cover SVM Yosry Ahmed
2025-10-29 14:24 ` [PATCH v2 00/23] Extend test coverage for nested SVM Yosry Ahmed
2025-11-18 22:25 ` Yosry Ahmed
2025-11-18 23:00 ` Jim Mattson
2025-11-18 23:22 ` Yosry Ahmed
2025-11-18 23:49 ` Sean Christopherson
2025-11-19 0:01 ` Yosry Ahmed
2025-11-19 0:07 ` Sean Christopherson
2025-11-20 23:51 ` Sean Christopherson
2025-11-20 23:23 ` Sean Christopherson
2025-11-20 23:32 ` Yosry Ahmed
2025-11-20 23:50 ` Sean Christopherson
2025-11-21 0:05 ` Yosry Ahmed
2025-11-21 0:24 ` Sean Christopherson
2025-11-21 0:30 ` Yosry Ahmed
2025-11-21 18:55 ` Sean Christopherson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251021074736.1324328-1-yosry.ahmed@linux.dev \
--to=yosry.ahmed@linux.dev \
--cc=jmattson@google.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®