[GIT PULL] KVM: selftests: Early pile of updates for 6.2

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Please pull a set of selftests updates for 6.2.  Many of these changes are
prep work for future selftests, e.g. for SEV and TDX, and/or have myriad
conflicts, e.g. the former "perf util" code.  I am hoping to get these
changes queued up for 6.2 sooner than later so that the chain of dependent
work doesn't get too long.

Except for the ARM single-step changes[*], everything has been posted for
quite some time and/or has gone through multiple rounds of review.

The ARM single-step changes are a last minute fix to resolve a hilarious
(IMO) collision between the pool-based ucall implementation and the
recently added single-step test.  Turns out that GCC will generate older
flavors of atomics that rely on a monitor to detect conflicts, and that
monitor is cleared by eret.  gdb is allegedly smart enough to skip over
atomic sequences, but our selftest... not so much.

Note, there's one KVM x86 patch hiding in here (cleanup for code that gets
copied into selftests), but its quite innocuous and shouldn't conflict
with anything.

Regarding the "perf util" conflicts, I'm mostly certain I got them right,
but it wouldn't be a bad idea for the folks involved (Cc'd) to double
check that the end result looks correct.

[*] https://lore.kernel.org/all/20221117002350.2178351-1-seanjc@xxxxxxxxxx


The following changes since commit d663b8a285986072428a6a145e5994bc275df994:

  KVM: replace direct irq.h inclusion (2022-11-09 12:31:37 -0500)

are available in the Git repository at:

  https://github.com/kvm-x86/linux tags/kvm-selftests-6.2-1

for you to fetch changes up to 5c107f7085f45e071bbcf13006fffccd8e5de0e1:

  KVM: selftests: Assert in prepare_eptp() that nEPT is supported (2022-11-16 16:59:07 -0800)

----------------------------------------------------------------
KVM selftests updates for 6.2

perf_util:
 - Add support for pinning vCPUs in dirty_log_perf_test.
 - Add a lightweight psuedo RNG for guest use, and use it to randomize
   the access pattern and write vs. read percentage in the so called
   "perf util" tests.
 - Rename the so called "perf_util" framework to "memstress".

ucall:
 - Add a common pool-based ucall implementation (code dedup and pre-work
   for running SEV (and beyond) guests in selftests.
 - Fix an issue in ARM's single-step test when using the new pool-based
   implementation; atomics don't play nice with single-step exceptions.

init:
 - Provide a common constructor and arch hook, which will eventually be
   used by x86 to automatically select the right hypercall (AMD vs. Intel).

x86:
 - Clean up x86's page tabe management.
 - Clean up and enhance the "smaller maxphyaddr" test, and add a related
   test to cover generic emulation failure.
 - Clean up the nEPT support checks.
 - Add X86_PROPERTY_* framework to retrieve multi-bit CPUID values.

----------------------------------------------------------------
Colin Ian King (1):
      KVM: selftests: Fix spelling mistake "begining" -> "beginning"

Colton Lewis (4):
      KVM: selftests: implement random number generator for guest code
      KVM: selftests: create -r argument to specify random seed
      KVM: selftests: randomize which pages are written vs read
      KVM: selftests: randomize page access order

David Matlack (13):
      KVM: selftests: Rename perf_test_util.[ch] to memstress.[ch]
      KVM: selftests: Rename pta (short for perf_test_args) to args
      KVM: selftests: Rename perf_test_util symbols to memstress
      KVM: selftests: Rename emulator_error_test to smaller_maxphyaddr_emulation_test
      KVM: selftests: Explicitly require instructions bytes
      KVM: selftests: Delete dead ucall code
      KVM: selftests: Move flds instruction emulation failure handling to header
      KVM: x86/mmu: Use BIT{,_ULL}() for PFERR masks
      KVM: selftests: Copy KVM PFERR masks into selftests
      KVM: selftests: Expect #PF(RSVD) when TDP is disabled
      KVM: selftests: Add a test for KVM_CAP_EXIT_ON_EMULATION_FAILURE
      KVM: selftests: Check for KVM nEPT support using "feature" MSRs
      KVM: selftests: Assert in prepare_eptp() that nEPT is supported

Gautam Menghani (1):
      KVM: selftests: Don't assume vcpu->id is '0' in xAPIC state test

Peter Gonda (2):
      tools: Add atomic_test_and_set_bit()
      KVM: selftests: Add ucall pool based implementation

Sean Christopherson (28):
      KVM: arm64: selftests: Disable single-step with correct KVM define
      KVM: arm64: selftests: Disable single-step without relying on ucall()
      KVM: selftests: Consolidate common code for populating ucall struct
      KVM: selftests: Consolidate boilerplate code in get_ucall()
      KVM: selftests: Automatically do init_ucall() for non-barebones VMs
      KVM: selftests: Make arm64's MMIO ucall multi-VM friendly
      KVM: selftests: Drop now-unnecessary ucall_uninit()
      KVM: selftests: Drop helpers to read/write page table entries
      KVM: selftests: Drop reserved bit checks from PTE accessor
      KVM: selftests: Remove useless shifts when creating guest page tables
      KVM: selftests: Verify parent PTE is PRESENT when getting child PTE
      KVM: selftests: Use virt_get_pte() when getting PTE pointer
      KVM: selftests: Use vm_get_page_table_entry() in addr_arch_gva2gpa()
      KVM: selftests: Play nice with huge pages when getting PTEs/GPAs
      KVM: selftests: Avoid JMP in non-faulting path of KVM_ASM_SAFE()
      KVM: selftests: Provide error code as a KVM_ASM_SAFE() output
      KVM: selftests: Add X86_FEATURE_PAE and use it calc "fallback" MAXPHYADDR
      KVM: selftests: Refactor X86_FEATURE_* framework to prep for X86_PROPERTY_*
      KVM: selftests: Add X86_PROPERTY_* framework to retrieve CPUID values
      KVM: selftests: Use X86_PROPERTY_MAX_KVM_LEAF in CPUID test
      KVM: selftests: Refactor kvm_cpuid_has() to prep for X86_PROPERTY_* support
      KVM: selftests: Add kvm_cpu_*() support for X86_PROPERTY_*
      KVM: selftests: Convert AMX test to use X86_PROPRETY_XXX
      KVM: selftests: Convert vmx_pmu_caps_test to use X86_PROPERTY_*
      KVM: selftests: Add PMU feature framework, use in PMU event filter test
      KVM: selftests: Add dedicated helpers for getting x86 Family and Model
      KVM: selftests: Add and use KVM helpers for x86 Family and Model
      KVM: selftests: Drop helpers for getting specific KVM supported CPUID entry

Vipin Sharma (7):
      KVM: selftests: Add missing break between -e and -g option in dirty_log_perf_test
      KVM: selftests: Put command line options in alphabetical order in dirty_log_perf_test
      KVM: selftests: Add atoi_paranoid() to catch errors missed by atoi()
      KVM: selftests: Use SZ_* macros from sizes.h in max_guest_memory_test.c
      KVM: selftests: Shorten the test args in memslot_modification_stress_test.c
      KVM: selftests: Add atoi_positive() and atoi_non_negative() for input validation
      KVM: selftests: Allowing running dirty_log_perf_test on specific CPUs

Vishal Annapurve (3):
      KVM: selftests: move common startup logic to kvm_util.c
      KVM: selftests: Add arch specific initialization
      KVM: selftests: Add arch specific post vm creation hook

 arch/x86/include/asm/kvm_host.h                                          |  20 +++---
 tools/arch/x86/include/asm/atomic.h                                      |   7 ++
 tools/include/asm-generic/atomic-gcc.h                                   |  12 ++++
 tools/testing/selftests/kvm/.gitignore                                   |   3 +-
 tools/testing/selftests/kvm/Makefile                                     |   8 ++-
 tools/testing/selftests/kvm/aarch64/aarch32_id_regs.c                    |   3 -
 tools/testing/selftests/kvm/aarch64/arch_timer.c                         |  29 ++------
 tools/testing/selftests/kvm/aarch64/debug-exceptions.c                   |  32 ++++-----
 tools/testing/selftests/kvm/aarch64/hypercalls.c                         |   3 -
 tools/testing/selftests/kvm/aarch64/psci_test.c                          |   1 -
 tools/testing/selftests/kvm/aarch64/vgic_init.c                          |   2 -
 tools/testing/selftests/kvm/aarch64/vgic_irq.c                           |  10 +--
 tools/testing/selftests/kvm/access_tracking_perf_test.c                  |  22 +++---
 tools/testing/selftests/kvm/demand_paging_test.c                         |  24 +++----
 tools/testing/selftests/kvm/dirty_log_perf_test.c                        | 130 ++++++++++++++++++++++-----------
 tools/testing/selftests/kvm/dirty_log_test.c                             |   3 -
 tools/testing/selftests/kvm/include/kvm_util_base.h                      |  28 ++++++++
 tools/testing/selftests/kvm/include/memstress.h                          |  72 +++++++++++++++++++
 tools/testing/selftests/kvm/include/perf_test_util.h                     |  63 ----------------
 tools/testing/selftests/kvm/include/test_util.h                          |  25 +++++++
 tools/testing/selftests/kvm/include/ucall_common.h                       |  10 ++-
 tools/testing/selftests/kvm/include/x86_64/processor.h                   | 364 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------
 tools/testing/selftests/kvm/include/x86_64/vmx.h                         |   2 +-
 tools/testing/selftests/kvm/kvm_page_table_test.c                        |   6 +-
 tools/testing/selftests/kvm/lib/aarch64/processor.c                      |  18 ++---
 tools/testing/selftests/kvm/lib/aarch64/ucall.c                          | 102 ++++----------------------
 tools/testing/selftests/kvm/lib/elf.c                                    |   2 +-
 tools/testing/selftests/kvm/lib/kvm_util.c                               |  85 +++++++++++++++++++++-
 tools/testing/selftests/kvm/lib/{perf_test_util.c => memstress.c}        | 133 ++++++++++++++++++++--------------
 tools/testing/selftests/kvm/lib/riscv/ucall.c                            |  42 ++---------
 tools/testing/selftests/kvm/lib/s390x/ucall.c                            |  39 ++--------
 tools/testing/selftests/kvm/lib/test_util.c                              |  36 ++++++++++
 tools/testing/selftests/kvm/lib/ucall_common.c                           | 103 ++++++++++++++++++++++++++
 tools/testing/selftests/kvm/lib/x86_64/{perf_test_util.c => memstress.c} |  37 +++++-----
 tools/testing/selftests/kvm/lib/x86_64/processor.c                       | 225 +++++++++++++++++++++++----------------------------------
 tools/testing/selftests/kvm/lib/x86_64/ucall.c                           |  39 ++--------
 tools/testing/selftests/kvm/lib/x86_64/vmx.c                             |  12 ++--
 tools/testing/selftests/kvm/max_guest_memory_test.c                      |  21 +++---
 tools/testing/selftests/kvm/memslot_modification_stress_test.c           |  38 +++++-----
 tools/testing/selftests/kvm/memslot_perf_test.c                          |  28 ++------
 tools/testing/selftests/kvm/rseq_test.c                                  |   4 --
 tools/testing/selftests/kvm/s390x/memop.c                                |   2 -
 tools/testing/selftests/kvm/s390x/resets.c                               |   2 -
 tools/testing/selftests/kvm/s390x/sync_regs_test.c                       |   3 -
 tools/testing/selftests/kvm/set_memory_region_test.c                     |   5 +-
 tools/testing/selftests/kvm/steal_time.c                                 |   1 -
 tools/testing/selftests/kvm/system_counter_offset_test.c                 |   1 -
 tools/testing/selftests/kvm/x86_64/amx_test.c                            | 105 +++++++--------------------
 tools/testing/selftests/kvm/x86_64/cpuid_test.c                          |  11 +--
 tools/testing/selftests/kvm/x86_64/cr4_cpuid_sync_test.c                 |   3 -
 tools/testing/selftests/kvm/x86_64/emulator_error_test.c                 | 193 -------------------------------------------------
 tools/testing/selftests/kvm/x86_64/exit_on_emulation_failure_test.c      |  45 ++++++++++++
 tools/testing/selftests/kvm/x86_64/flds_emulation.h                      |  55 ++++++++++++++
 tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c                        |   3 -
 tools/testing/selftests/kvm/x86_64/hyperv_features.c                     |   3 +-
 tools/testing/selftests/kvm/x86_64/nx_huge_pages_test.c                  |   5 +-
 tools/testing/selftests/kvm/x86_64/platform_info_test.c                  |   3 -
 tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c               |  77 +++++---------------
 tools/testing/selftests/kvm/x86_64/set_sregs_test.c                      |   3 -
 tools/testing/selftests/kvm/x86_64/smaller_maxphyaddr_emulation_test.c   | 111 ++++++++++++++++++++++++++++
 tools/testing/selftests/kvm/x86_64/svm_nested_soft_inject_test.c         |   3 -
 tools/testing/selftests/kvm/x86_64/sync_regs_test.c                      |   3 -
 tools/testing/selftests/kvm/x86_64/userspace_io_test.c                   |   3 -
 tools/testing/selftests/kvm/x86_64/userspace_msr_exit_test.c             |   3 -
 tools/testing/selftests/kvm/x86_64/vmx_dirty_log_test.c                  |   1 +
 tools/testing/selftests/kvm/x86_64/vmx_pmu_caps_test.c                   |  19 +----
 tools/testing/selftests/kvm/x86_64/xapic_state_test.c                    |   4 +-
 67 files changed, 1353 insertions(+), 1157 deletions(-)
 create mode 100644 tools/testing/selftests/kvm/include/memstress.h
 delete mode 100644 tools/testing/selftests/kvm/include/perf_test_util.h
 rename tools/testing/selftests/kvm/lib/{perf_test_util.c => memstress.c} (63%)
 create mode 100644 tools/testing/selftests/kvm/lib/ucall_common.c
 rename tools/testing/selftests/kvm/lib/x86_64/{perf_test_util.c => memstress.c} (68%)
 delete mode 100644 tools/testing/selftests/kvm/x86_64/emulator_error_test.c
 create mode 100644 tools/testing/selftests/kvm/x86_64/exit_on_emulation_failure_test.c
 create mode 100644 tools/testing/selftests/kvm/x86_64/flds_emulation.h
 create mode 100644 tools/testing/selftests/kvm/x86_64/smaller_maxphyaddr_emulation_test.c



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux