[v3,0/8] Use TAP in some more x86 KVM selftests

Message ID 20240208204844.119326-1-thuth@redhat.com
Headers
Series Use TAP in some more x86 KVM selftests |

Message

Thomas Huth Feb. 8, 2024, 8:48 p.m. UTC
  Basic idea of this series is now to use the kselftest_harness.h
framework to get TAP output in the tests, so that it is easier
for the user to see what is going on, and e.g. to be able to
detect whether a certain test is part of the test binary or not
(which is useful when tests get extended in the course of time).

Since most tests also need a vcpu, we introduce our own macros
to define such tests, so we don't have to repeat this code all
over the place.

v3:
- Add patch from Sean to allow setting vCPU's entry points seperately
- Let each test define the entry point via KVM_ONE_VCPU_TEST(), don't
  do it globally from KVM_ONE_VCPU_TEST_SUITE()

v2:
- Dropped the "Rename the ASSERT_EQ macro" patch (already merged)
- Split the fixes in the sync_regs_test into separate patches
  (see the first two patches)
- Introduce the KVM_ONE_VCPU_TEST_SUITE() macro as suggested
  by Sean (see third patch) and use it in the following patches
- Add a new patch to convert vmx_pmu_caps_test.c, too

Sean Christopherson (1):
  KVM: selftests: Move setting a vCPU's entry point to a dedicated API

Thomas Huth (7):
  KVM: selftests: x86: sync_regs_test: Use vcpu_run() where appropriate
  KVM: selftests: x86: sync_regs_test: Get regs structure before
    modifying it
  KVM: selftests: Add a macro to define a test with one vcpu
  KVM: selftests: x86: Use TAP interface in the sync_regs test
  KVM: selftests: x86: Use TAP interface in the fix_hypercall test
  KVM: selftests: x86: Use TAP interface in the vmx_pmu_caps test
  KVM: selftests: x86: Use TAP interface in the userspace_msr_exit test

 .../selftests/kvm/include/kvm_test_harness.h  |  36 ++++++
 .../selftests/kvm/include/kvm_util_base.h     |  11 +-
 .../selftests/kvm/lib/aarch64/processor.c     |  23 +++-
 .../selftests/kvm/lib/riscv/processor.c       |   9 +-
 .../selftests/kvm/lib/s390x/processor.c       |  13 +-
 .../selftests/kvm/lib/x86_64/processor.c      |  13 +-
 .../selftests/kvm/x86_64/fix_hypercall_test.c |  27 ++--
 .../selftests/kvm/x86_64/sync_regs_test.c     | 121 +++++++++++++-----
 .../kvm/x86_64/userspace_msr_exit_test.c      |  52 ++------
 .../selftests/kvm/x86_64/vmx_pmu_caps_test.c  |  50 ++------
 10 files changed, 215 insertions(+), 140 deletions(-)
 create mode 100644 tools/testing/selftests/kvm/include/kvm_test_harness.h
  

Comments

Sean Christopherson Feb. 27, 2024, 2:21 a.m. UTC | #1
On Thu, 08 Feb 2024 21:48:36 +0100, Thomas Huth wrote:
> Basic idea of this series is now to use the kselftest_harness.h
> framework to get TAP output in the tests, so that it is easier
> for the user to see what is going on, and e.g. to be able to
> detect whether a certain test is part of the test binary or not
> (which is useful when tests get extended in the course of time).
> 
> Since most tests also need a vcpu, we introduce our own macros
> to define such tests, so we don't have to repeat this code all
> over the place.
> 
> [...]

OMG, you didn't tell me this allows sub-tests to run after a failed test!
That alone is worth the conversion :-)

There's definitely a few enhancements we'll want to make, but this is more than
good enough as a starting point.

Applied to kvm-x86 selftests, thanks!

[1/8] KVM: selftests: x86: sync_regs_test: Use vcpu_run() where appropriate
      https://github.com/kvm-x86/linux/commit/e10086285659
[2/8] KVM: selftests: x86: sync_regs_test: Get regs structure before modifying it
      https://github.com/kvm-x86/linux/commit/221d65449453
[3/8] KVM: selftests: Move setting a vCPU's entry point to a dedicated API
      https://github.com/kvm-x86/linux/commit/8ef192609f14
[4/8] KVM: selftests: Add a macro to define a test with one vcpu
      https://github.com/kvm-x86/linux/commit/992178c7219c
[5/8] KVM: selftests: x86: Use TAP interface in the sync_regs test
      https://github.com/kvm-x86/linux/commit/04941eb15439
[6/8] KVM: selftests: x86: Use TAP interface in the fix_hypercall test
      https://github.com/kvm-x86/linux/commit/69fb12492005
[7/8] KVM: selftests: x86: Use TAP interface in the vmx_pmu_caps test
      https://github.com/kvm-x86/linux/commit/200f604dfd07
[8/8] KVM: selftests: x86: Use TAP interface in the userspace_msr_exit test
      https://github.com/kvm-x86/linux/commit/8fd14fc541c7

--
https://github.com/kvm-x86/linux/tree/next
  
Sean Christopherson Feb. 28, 2024, 9:32 p.m. UTC | #2
On Mon, Feb 26, 2024, Sean Christopherson wrote:
> On Thu, 08 Feb 2024 21:48:36 +0100, Thomas Huth wrote:
> > Basic idea of this series is now to use the kselftest_harness.h
> > framework to get TAP output in the tests, so that it is easier
> > for the user to see what is going on, and e.g. to be able to
> > detect whether a certain test is part of the test binary or not
> > (which is useful when tests get extended in the course of time).
> > 
> > Since most tests also need a vcpu, we introduce our own macros
> > to define such tests, so we don't have to repeat this code all
> > over the place.
> > 
> > [...]
> 
> OMG, you didn't tell me this allows sub-tests to run after a failed test!
> That alone is worth the conversion :-)
> 
> There's definitely a few enhancements we'll want to make, but this is more than
> good enough as a starting point.
> 
> Applied to kvm-x86 selftests, thanks!
> 
> [1/8] KVM: selftests: x86: sync_regs_test: Use vcpu_run() where appropriate
>       https://github.com/kvm-x86/linux/commit/e10086285659
> [2/8] KVM: selftests: x86: sync_regs_test: Get regs structure before modifying it
>       https://github.com/kvm-x86/linux/commit/221d65449453
> [3/8] KVM: selftests: Move setting a vCPU's entry point to a dedicated API
>       https://github.com/kvm-x86/linux/commit/8ef192609f14
> [4/8] KVM: selftests: Add a macro to define a test with one vcpu
>       https://github.com/kvm-x86/linux/commit/992178c7219c
> [5/8] KVM: selftests: x86: Use TAP interface in the sync_regs test
>       https://github.com/kvm-x86/linux/commit/04941eb15439
> [6/8] KVM: selftests: x86: Use TAP interface in the fix_hypercall test
>       https://github.com/kvm-x86/linux/commit/69fb12492005
> [7/8] KVM: selftests: x86: Use TAP interface in the vmx_pmu_caps test
>       https://github.com/kvm-x86/linux/commit/200f604dfd07
> [8/8] KVM: selftests: x86: Use TAP interface in the userspace_msr_exit test
>       https://github.com/kvm-x86/linux/commit/8fd14fc541c7

FYI, the hashes have changed for patches 3-8, as I forced pushed to fix an ARM
goof in patch 3.

[1/8] KVM: selftests: x86: sync_regs_test: Use vcpu_run() where appropriate
      https://github.com/kvm-x86/linux/commit/e10086285659
[2/8] KVM: selftests: x86: sync_regs_test: Get regs structure before modifying it
      https://github.com/kvm-x86/linux/commit/221d65449453
[3/8] KVM: selftests: Move setting a vCPU's entry point to a dedicated API
      https://github.com/kvm-x86/linux/commit/53a43dd48f8e
[4/8] KVM: selftests: Add a macro to define a test with one vcpu
      https://github.com/kvm-x86/linux/commit/55f2cf88486c
[5/8] KVM: selftests: x86: Use TAP interface in the sync_regs test
      https://github.com/kvm-x86/linux/commit/ba97ed0af6fe
[6/8] KVM: selftests: x86: Use TAP interface in the fix_hypercall test
      https://github.com/kvm-x86/linux/commit/a6983e8f5fab
[7/8] KVM: selftests: x86: Use TAP interface in the vmx_pmu_caps test
      https://github.com/kvm-x86/linux/commit/de1b03f25f3b
[8/8] KVM: selftests: x86: Use TAP interface in the userspace_msr_exit test
      https://github.com/kvm-x86/linux/commit/8d251856d425