Re: [GIT PULL] KVM: x86: Selftests changes for 6.6

From: Paolo Bonzini
Date: Thu Aug 31 2023 - 13:22:10 EST


On Wed, Aug 30, 2023 at 2:07 AM Sean Christopherson <seanjc@xxxxxxxxxx> wrote:
>
> Selftests changes for 6.6. The big highlight (and really the highlight of all
> the x86 pull requests IMO) is the addition of printf() support in guest code,
> courtesy of Aaron.
>
> Speaking of which, the vast majority of this has been merged into the s390 tree,
> i.e. if you do the s390 pull request first you'll already have most of this.
> The immutable tag I created has waaaay more stuff than was strictly needed by
> the s390 folks, but I forgot to create the tag earlier and I wasn't sure if
> they had already merged kvm-x86/selftests, so I went with the approach I was
> most confident wouldn't throw a wrench in s390 or delay their pull request, even
> though the result is rather gross.

Pulling this first for exactly this reason, thanks.

Paolo

> The following changes since commit fdf0eaf11452d72945af31804e2a1048ee1b574c:
>
> Linux 6.5-rc2 (2023-07-16 15:10:37 -0700)
>
> are available in the Git repository at:
>
> https://github.com/kvm-x86/linux.git tags/kvm-x86-selftests-6.6
>
> for you to fetch changes up to c92b922a8c526e1bb11945a703cba9f85976de7e:
>
> KVM: x86: Update MAINTAINTERS to include selftests (2023-08-25 09:04:34 -0700)
>
> ----------------------------------------------------------------
> KVM: x86: Selftests changes for 6.6:
>
> - Add testcases to x86's sync_regs_test for detecting KVM TOCTOU bugs
>
> - Add support for printf() in guest code and covert all guest asserts to use
> printf-based reporting
>
> - Clean up the PMU event filter test and add new testcases
>
> - Include x86 selftests in the KVM x86 MAINTAINERS entry
>
> ----------------------------------------------------------------
> Aaron Lewis (5):
> KVM: selftests: Add strnlen() to the string overrides
> KVM: selftests: Add guest_snprintf() to KVM selftests
> KVM: selftests: Add additional pages to the guest to accommodate ucall
> KVM: selftests: Add string formatting options to ucall
> KVM: selftests: Add a selftest for guest prints and formatted asserts
>
> Bibo Mao (1):
> KVM: selftests: use unified time type for comparison
>
> Jinrong Liang (6):
> KVM: selftests: Add x86 properties for Intel PMU in processor.h
> KVM: selftests: Drop the return of remove_event()
> KVM: selftests: Introduce "struct __kvm_pmu_event_filter" to manipulate filter
> KVM: selftests: Add test cases for unsupported PMU event filter input values
> KVM: selftests: Test if event filter meets expectations on fixed counters
> KVM: selftests: Test gp event filters don't affect fixed event filters
>
> Michal Luczaj (4):
> KVM: x86: Fix KVM_CAP_SYNC_REGS's sync_regs() TOCTOU issues
> KVM: selftests: Extend x86's sync_regs_test to check for CR4 races
> KVM: selftests: Extend x86's sync_regs_test to check for event vector races
> KVM: selftests: Extend x86's sync_regs_test to check for exception races
>
> Minjie Du (1):
> KVM: selftests: Remove superfluous variable assignment
>
> Sean Christopherson (33):
> KVM: selftests: Make TEST_ASSERT_EQ() output look like normal TEST_ASSERT()
> KVM: selftests: Add a shameful hack to preserve/clobber GPRs across ucall
> KVM: selftests: Add formatted guest assert support in ucall framework
> KVM: selftests: Add arch ucall.h and inline simple arch hooks
> KVM: selftests: Add #define of expected KVM exit reason for ucall
> KVM: selftests: Convert aarch_timer to printf style GUEST_ASSERT
> KVM: selftests: Convert debug-exceptions to printf style GUEST_ASSERT
> KVM: selftests: Convert ARM's hypercalls test to printf style GUEST_ASSERT
> KVM: selftests: Convert ARM's page fault test to printf style GUEST_ASSERT
> KVM: selftests: Convert ARM's vGIC IRQ test to printf style GUEST_ASSERT
> KVM: selftests: Convert the memslot performance test to printf guest asserts
> KVM: selftests: Convert s390's memop test to printf style GUEST_ASSERT
> KVM: selftests: Convert s390's tprot test to printf style GUEST_ASSERT
> KVM: selftests: Convert set_memory_region_test to printf-based GUEST_ASSERT
> KVM: selftests: Convert steal_time test to printf style GUEST_ASSERT
> KVM: selftests: Convert x86's CPUID test to printf style GUEST_ASSERT
> KVM: selftests: Convert the Hyper-V extended hypercalls test to printf asserts
> KVM: selftests: Convert the Hyper-V feature test to printf style GUEST_ASSERT
> KVM: selftests: Convert x86's KVM paravirt test to printf style GUEST_ASSERT
> KVM: selftests: Convert the MONITOR/MWAIT test to use printf guest asserts
> KVM: selftests: Convert x86's nested exceptions test to printf guest asserts
> KVM: selftests: Convert x86's set BSP ID test to printf style guest asserts
> KVM: selftests: Convert the nSVM software interrupt test to printf guest asserts
> KVM: selftests: Convert x86's TSC MSRs test to use printf guest asserts
> KVM: selftests: Convert the x86 userspace I/O test to printf guest assert
> KVM: selftests: Convert VMX's PMU capabilities test to printf guest asserts
> KVM: selftests: Convert x86's XCR0 test to use printf-based guest asserts
> KVM: selftests: Rip out old, param-based guest assert macros
> KVM: selftests: Print out guest RIP on unhandled exception
> KVM: selftests: Use GUEST_FAIL() in ARM's arch timer helpers
> KVM: selftests: Reload "good" vCPU state if vCPU hits shutdown
> KVM: selftests: Explicit set #UD when *potentially* injecting exception
> KVM: x86: Update MAINTAINTERS to include selftests
>
> Thomas Huth (1):
> KVM: selftests: Rename the ASSERT_EQ macro
>
> MAINTAINERS | 2 +
> arch/x86/kvm/x86.c | 13 +-
> tools/testing/selftests/kvm/Makefile | 6 +
> .../selftests/kvm/aarch64/aarch32_id_regs.c | 8 +-
> tools/testing/selftests/kvm/aarch64/arch_timer.c | 22 +-
> .../selftests/kvm/aarch64/debug-exceptions.c | 8 +-
> tools/testing/selftests/kvm/aarch64/hypercalls.c | 20 +-
> .../selftests/kvm/aarch64/page_fault_test.c | 17 +-
> tools/testing/selftests/kvm/aarch64/vgic_irq.c | 3 +-
> tools/testing/selftests/kvm/guest_print_test.c | 219 ++++++++++++++
> .../selftests/kvm/include/aarch64/arch_timer.h | 12 +-
> .../testing/selftests/kvm/include/aarch64/ucall.h | 20 ++
> tools/testing/selftests/kvm/include/riscv/ucall.h | 20 ++
> tools/testing/selftests/kvm/include/s390x/ucall.h | 19 ++
> tools/testing/selftests/kvm/include/test_util.h | 18 +-
> tools/testing/selftests/kvm/include/ucall_common.h | 98 +++----
> .../selftests/kvm/include/x86_64/processor.h | 5 +
> tools/testing/selftests/kvm/include/x86_64/ucall.h | 13 +
> tools/testing/selftests/kvm/kvm_page_table_test.c | 8 +-
> tools/testing/selftests/kvm/lib/aarch64/ucall.c | 11 +-
> tools/testing/selftests/kvm/lib/guest_sprintf.c | 307 ++++++++++++++++++++
> tools/testing/selftests/kvm/lib/kvm_util.c | 6 +-
> tools/testing/selftests/kvm/lib/riscv/ucall.c | 11 -
> tools/testing/selftests/kvm/lib/s390x/ucall.c | 10 -
> tools/testing/selftests/kvm/lib/sparsebit.c | 1 -
> tools/testing/selftests/kvm/lib/string_override.c | 9 +
> tools/testing/selftests/kvm/lib/ucall_common.c | 44 +++
> tools/testing/selftests/kvm/lib/x86_64/processor.c | 18 +-
> tools/testing/selftests/kvm/lib/x86_64/ucall.c | 36 ++-
> .../testing/selftests/kvm/max_guest_memory_test.c | 2 +-
> tools/testing/selftests/kvm/memslot_perf_test.c | 4 +-
> tools/testing/selftests/kvm/s390x/cmma_test.c | 62 ++--
> tools/testing/selftests/kvm/s390x/memop.c | 13 +-
> tools/testing/selftests/kvm/s390x/tprot.c | 11 +-
> .../testing/selftests/kvm/set_memory_region_test.c | 21 +-
> tools/testing/selftests/kvm/steal_time.c | 20 +-
> tools/testing/selftests/kvm/x86_64/cpuid_test.c | 12 +-
> .../kvm/x86_64/dirty_log_page_splitting_test.c | 18 +-
> .../kvm/x86_64/exit_on_emulation_failure_test.c | 2 +-
> .../kvm/x86_64/hyperv_extended_hypercalls.c | 3 +-
> .../testing/selftests/kvm/x86_64/hyperv_features.c | 29 +-
> tools/testing/selftests/kvm/x86_64/kvm_pv_test.c | 8 +-
> .../selftests/kvm/x86_64/monitor_mwait_test.c | 35 ++-
> .../selftests/kvm/x86_64/nested_exceptions_test.c | 16 +-
> .../selftests/kvm/x86_64/pmu_event_filter_test.c | 317 +++++++++++++++------
> .../selftests/kvm/x86_64/recalc_apic_map_test.c | 6 +-
> .../testing/selftests/kvm/x86_64/set_boot_cpu_id.c | 6 +-
> .../kvm/x86_64/svm_nested_soft_inject_test.c | 22 +-
> .../testing/selftests/kvm/x86_64/sync_regs_test.c | 132 +++++++++
> tools/testing/selftests/kvm/x86_64/tsc_msrs_test.c | 34 +--
> .../selftests/kvm/x86_64/userspace_io_test.c | 10 +-
> .../vmx_exception_with_invalid_guest_state.c | 2 +-
> .../selftests/kvm/x86_64/vmx_pmu_caps_test.c | 31 +-
> .../selftests/kvm/x86_64/xapic_state_test.c | 8 +-
> .../testing/selftests/kvm/x86_64/xcr0_cpuid_test.c | 29 +-
> .../testing/selftests/kvm/x86_64/xen_vmcall_test.c | 20 +-
> 56 files changed, 1389 insertions(+), 468 deletions(-)
> create mode 100644 tools/testing/selftests/kvm/guest_print_test.c
> create mode 100644 tools/testing/selftests/kvm/include/aarch64/ucall.h
> create mode 100644 tools/testing/selftests/kvm/include/riscv/ucall.h
> create mode 100644 tools/testing/selftests/kvm/include/s390x/ucall.h
> create mode 100644 tools/testing/selftests/kvm/include/x86_64/ucall.h
> create mode 100644 tools/testing/selftests/kvm/lib/guest_sprintf.c
>