[V1 PATCH 0/5] Execute hypercalls from guests according to cpu type

Vishal Annapurve posted 5 patches 3 years, 7 months ago
There is a newer version of this series
tools/testing/selftests/kvm/.gitignore        |  1 -
.../selftests/kvm/aarch64/arch_timer.c        |  5 +-
.../selftests/kvm/aarch64/debug-exceptions.c  |  2 +-
.../selftests/kvm/aarch64/get-reg-list.c      |  2 +-
.../selftests/kvm/aarch64/hypercalls.c        |  4 +-
.../testing/selftests/kvm/aarch64/psci_test.c |  2 +-
.../selftests/kvm/aarch64/vcpu_width_config.c |  2 +-
.../testing/selftests/kvm/aarch64/vgic_init.c |  2 +-
.../testing/selftests/kvm/aarch64/vgic_irq.c  |  5 +-
.../selftests/kvm/access_tracking_perf_test.c |  4 +-
.../selftests/kvm/demand_paging_test.c        |  7 +-
.../selftests/kvm/dirty_log_perf_test.c       |  4 +-
tools/testing/selftests/kvm/dirty_log_test.c  |  4 +-
.../selftests/kvm/hardware_disable_test.c     |  2 +-
.../selftests/kvm/include/kvm_util_base.h     | 15 ++++
.../selftests/kvm/include/x86_64/processor.h  | 10 +++
.../selftests/kvm/include/x86_64/vmx.h        |  9 ---
.../selftests/kvm/kvm_binary_stats_test.c     |  3 +-
.../selftests/kvm/kvm_create_max_vcpus.c      |  4 +-
.../selftests/kvm/kvm_page_table_test.c       |  4 +-
.../selftests/kvm/lib/aarch64/processor.c     |  8 ++
tools/testing/selftests/kvm/lib/elf.c         |  2 +
tools/testing/selftests/kvm/lib/kvm_util.c    | 12 +++
.../selftests/kvm/lib/riscv/processor.c       |  8 ++
.../selftests/kvm/lib/s390x/processor.c       |  8 ++
tools/testing/selftests/kvm/lib/sparsebit.c   |  2 +-
.../selftests/kvm/lib/x86_64/perf_test_util.c |  2 +-
.../selftests/kvm/lib/x86_64/processor.c      | 38 +++++++++-
.../selftests/kvm/max_guest_memory_test.c     |  2 +-
.../kvm/memslot_modification_stress_test.c    |  4 +-
.../testing/selftests/kvm/memslot_perf_test.c |  9 +--
tools/testing/selftests/kvm/rseq_test.c       |  7 +-
tools/testing/selftests/kvm/s390x/memop.c     |  4 +-
tools/testing/selftests/kvm/s390x/resets.c    |  4 +-
.../selftests/kvm/s390x/sync_regs_test.c      |  5 +-
tools/testing/selftests/kvm/s390x/tprot.c     |  2 +-
.../selftests/kvm/set_memory_region_test.c    |  7 +-
tools/testing/selftests/kvm/steal_time.c      |  4 +-
.../kvm/system_counter_offset_test.c          |  2 +-
tools/testing/selftests/kvm/x86_64/amx_test.c |  2 +-
.../testing/selftests/kvm/x86_64/cpuid_test.c |  2 +-
.../kvm/x86_64/cr4_cpuid_sync_test.c          |  6 +-
.../testing/selftests/kvm/x86_64/debug_regs.c |  4 +-
.../kvm/x86_64/emulator_error_test.c          |  7 +-
.../testing/selftests/kvm/x86_64/evmcs_test.c |  2 +-
.../selftests/kvm/x86_64/fix_hypercall_test.c |  2 +-
.../kvm/x86_64/get_msr_index_features.c       |  2 +-
.../selftests/kvm/x86_64/hyperv_clock.c       |  2 +-
.../selftests/kvm/x86_64/hyperv_cpuid.c       |  7 +-
.../selftests/kvm/x86_64/hyperv_features.c    |  2 +-
.../selftests/kvm/x86_64/hyperv_svm_test.c    |  2 +-
.../selftests/kvm/x86_64/kvm_clock_test.c     |  2 +-
.../selftests/kvm/x86_64/kvm_pv_test.c        |  2 +-
.../kvm/x86_64/max_vcpuid_cap_test.c          |  3 +-
.../selftests/kvm/x86_64/mmio_warning_test.c  |  4 +-
.../selftests/kvm/x86_64/monitor_mwait_test.c |  3 +-
.../selftests/kvm/x86_64/nx_huge_pages_test.c |  4 +-
.../selftests/kvm/x86_64/platform_info_test.c |  7 +-
.../kvm/x86_64/pmu_event_filter_test.c        |  7 +-
.../selftests/kvm/x86_64/set_boot_cpu_id.c    |  2 +-
.../selftests/kvm/x86_64/set_sregs_test.c     |  7 +-
.../selftests/kvm/x86_64/sev_migrate_tests.c  |  3 +-
tools/testing/selftests/kvm/x86_64/smm_test.c |  4 +-
.../testing/selftests/kvm/x86_64/state_test.c | 10 +--
.../selftests/kvm/x86_64/svm_int_ctl_test.c   |  3 +-
.../kvm/x86_64/svm_nested_soft_inject_test.c  |  7 +-
.../selftests/kvm/x86_64/svm_vmcall_test.c    | 74 -------------------
.../selftests/kvm/x86_64/sync_regs_test.c     |  7 +-
.../kvm/x86_64/triple_fault_event_test.c      |  2 +-
.../selftests/kvm/x86_64/tsc_msrs_test.c      |  4 +-
.../selftests/kvm/x86_64/tsc_scaling_sync.c   |  3 +-
.../kvm/x86_64/ucna_injection_test.c          |  2 +-
.../selftests/kvm/x86_64/userspace_io_test.c  |  6 +-
.../kvm/x86_64/userspace_msr_exit_test.c      |  7 +-
.../kvm/x86_64/vmx_apic_access_test.c         |  5 +-
.../kvm/x86_64/vmx_close_while_nested_test.c  |  2 +-
.../selftests/kvm/x86_64/vmx_dirty_log_test.c |  4 +-
.../vmx_exception_with_invalid_guest_state.c  |  2 +-
.../x86_64/vmx_invalid_nested_guest_state.c   |  2 +-
.../selftests/kvm/x86_64/vmx_msrs_test.c      |  2 +-
.../kvm/x86_64/vmx_nested_tsc_scaling_test.c  |  5 +-
.../selftests/kvm/x86_64/vmx_pmu_caps_test.c  |  2 +-
.../kvm/x86_64/vmx_preemption_timer_test.c    |  4 +-
.../kvm/x86_64/vmx_set_nested_state_test.c    |  3 +-
.../kvm/x86_64/vmx_tsc_adjust_test.c          |  5 +-
.../selftests/kvm/x86_64/xapic_ipi_test.c     |  4 +-
.../selftests/kvm/x86_64/xapic_state_test.c   |  2 +-
.../selftests/kvm/x86_64/xen_shinfo_test.c    | 67 +++++++----------
.../selftests/kvm/x86_64/xen_vmcall_test.c    | 17 +++--
.../selftests/kvm/x86_64/xss_msr_test.c       |  2 +-
90 files changed, 223 insertions(+), 339 deletions(-)
delete mode 100644 tools/testing/selftests/kvm/x86_64/svm_vmcall_test.c
[V1 PATCH 0/5] Execute hypercalls from guests according to cpu type
Posted by Vishal Annapurve 3 years, 7 months ago
This series is posted in context of the discussion at:
https://lore.kernel.org/lkml/Ywa9T+jKUpaHLu%2Fl@google.com/

Major changes:
1) Move common startup logic to a single common main function in
kvm_util.c
2) Introduce following APIs:
	kvm_arch_main: to perform arch specific common startup.
	kvm_post_vm_load: to update the guest memory state to convey
		common information to guests.
3) For x86, capture cpu type at startup and pass on the cpu type to
guest after guest elf is loaded.
4) Execute hypercall instruction from within guest VMs according to the
cpu type. This will help prevent an extra kvm exit during hypercall
execution.

Vishal Annapurve (5):
  selftests: kvm: move common startup logic to kvm_util.c
  selftests: kvm: Introduce kvm_arch_main and helpers
  selftests: kvm: x86: Execute vmcall/vmmcall according to CPU type
  selftests: kvm: delete svm_vmcall_test
  selftests: kvm: Execute vmcall/vmmcall as per cpu type

 tools/testing/selftests/kvm/.gitignore        |  1 -
 .../selftests/kvm/aarch64/arch_timer.c        |  5 +-
 .../selftests/kvm/aarch64/debug-exceptions.c  |  2 +-
 .../selftests/kvm/aarch64/get-reg-list.c      |  2 +-
 .../selftests/kvm/aarch64/hypercalls.c        |  4 +-
 .../testing/selftests/kvm/aarch64/psci_test.c |  2 +-
 .../selftests/kvm/aarch64/vcpu_width_config.c |  2 +-
 .../testing/selftests/kvm/aarch64/vgic_init.c |  2 +-
 .../testing/selftests/kvm/aarch64/vgic_irq.c  |  5 +-
 .../selftests/kvm/access_tracking_perf_test.c |  4 +-
 .../selftests/kvm/demand_paging_test.c        |  7 +-
 .../selftests/kvm/dirty_log_perf_test.c       |  4 +-
 tools/testing/selftests/kvm/dirty_log_test.c  |  4 +-
 .../selftests/kvm/hardware_disable_test.c     |  2 +-
 .../selftests/kvm/include/kvm_util_base.h     | 15 ++++
 .../selftests/kvm/include/x86_64/processor.h  | 10 +++
 .../selftests/kvm/include/x86_64/vmx.h        |  9 ---
 .../selftests/kvm/kvm_binary_stats_test.c     |  3 +-
 .../selftests/kvm/kvm_create_max_vcpus.c      |  4 +-
 .../selftests/kvm/kvm_page_table_test.c       |  4 +-
 .../selftests/kvm/lib/aarch64/processor.c     |  8 ++
 tools/testing/selftests/kvm/lib/elf.c         |  2 +
 tools/testing/selftests/kvm/lib/kvm_util.c    | 12 +++
 .../selftests/kvm/lib/riscv/processor.c       |  8 ++
 .../selftests/kvm/lib/s390x/processor.c       |  8 ++
 tools/testing/selftests/kvm/lib/sparsebit.c   |  2 +-
 .../selftests/kvm/lib/x86_64/perf_test_util.c |  2 +-
 .../selftests/kvm/lib/x86_64/processor.c      | 38 +++++++++-
 .../selftests/kvm/max_guest_memory_test.c     |  2 +-
 .../kvm/memslot_modification_stress_test.c    |  4 +-
 .../testing/selftests/kvm/memslot_perf_test.c |  9 +--
 tools/testing/selftests/kvm/rseq_test.c       |  7 +-
 tools/testing/selftests/kvm/s390x/memop.c     |  4 +-
 tools/testing/selftests/kvm/s390x/resets.c    |  4 +-
 .../selftests/kvm/s390x/sync_regs_test.c      |  5 +-
 tools/testing/selftests/kvm/s390x/tprot.c     |  2 +-
 .../selftests/kvm/set_memory_region_test.c    |  7 +-
 tools/testing/selftests/kvm/steal_time.c      |  4 +-
 .../kvm/system_counter_offset_test.c          |  2 +-
 tools/testing/selftests/kvm/x86_64/amx_test.c |  2 +-
 .../testing/selftests/kvm/x86_64/cpuid_test.c |  2 +-
 .../kvm/x86_64/cr4_cpuid_sync_test.c          |  6 +-
 .../testing/selftests/kvm/x86_64/debug_regs.c |  4 +-
 .../kvm/x86_64/emulator_error_test.c          |  7 +-
 .../testing/selftests/kvm/x86_64/evmcs_test.c |  2 +-
 .../selftests/kvm/x86_64/fix_hypercall_test.c |  2 +-
 .../kvm/x86_64/get_msr_index_features.c       |  2 +-
 .../selftests/kvm/x86_64/hyperv_clock.c       |  2 +-
 .../selftests/kvm/x86_64/hyperv_cpuid.c       |  7 +-
 .../selftests/kvm/x86_64/hyperv_features.c    |  2 +-
 .../selftests/kvm/x86_64/hyperv_svm_test.c    |  2 +-
 .../selftests/kvm/x86_64/kvm_clock_test.c     |  2 +-
 .../selftests/kvm/x86_64/kvm_pv_test.c        |  2 +-
 .../kvm/x86_64/max_vcpuid_cap_test.c          |  3 +-
 .../selftests/kvm/x86_64/mmio_warning_test.c  |  4 +-
 .../selftests/kvm/x86_64/monitor_mwait_test.c |  3 +-
 .../selftests/kvm/x86_64/nx_huge_pages_test.c |  4 +-
 .../selftests/kvm/x86_64/platform_info_test.c |  7 +-
 .../kvm/x86_64/pmu_event_filter_test.c        |  7 +-
 .../selftests/kvm/x86_64/set_boot_cpu_id.c    |  2 +-
 .../selftests/kvm/x86_64/set_sregs_test.c     |  7 +-
 .../selftests/kvm/x86_64/sev_migrate_tests.c  |  3 +-
 tools/testing/selftests/kvm/x86_64/smm_test.c |  4 +-
 .../testing/selftests/kvm/x86_64/state_test.c | 10 +--
 .../selftests/kvm/x86_64/svm_int_ctl_test.c   |  3 +-
 .../kvm/x86_64/svm_nested_soft_inject_test.c  |  7 +-
 .../selftests/kvm/x86_64/svm_vmcall_test.c    | 74 -------------------
 .../selftests/kvm/x86_64/sync_regs_test.c     |  7 +-
 .../kvm/x86_64/triple_fault_event_test.c      |  2 +-
 .../selftests/kvm/x86_64/tsc_msrs_test.c      |  4 +-
 .../selftests/kvm/x86_64/tsc_scaling_sync.c   |  3 +-
 .../kvm/x86_64/ucna_injection_test.c          |  2 +-
 .../selftests/kvm/x86_64/userspace_io_test.c  |  6 +-
 .../kvm/x86_64/userspace_msr_exit_test.c      |  7 +-
 .../kvm/x86_64/vmx_apic_access_test.c         |  5 +-
 .../kvm/x86_64/vmx_close_while_nested_test.c  |  2 +-
 .../selftests/kvm/x86_64/vmx_dirty_log_test.c |  4 +-
 .../vmx_exception_with_invalid_guest_state.c  |  2 +-
 .../x86_64/vmx_invalid_nested_guest_state.c   |  2 +-
 .../selftests/kvm/x86_64/vmx_msrs_test.c      |  2 +-
 .../kvm/x86_64/vmx_nested_tsc_scaling_test.c  |  5 +-
 .../selftests/kvm/x86_64/vmx_pmu_caps_test.c  |  2 +-
 .../kvm/x86_64/vmx_preemption_timer_test.c    |  4 +-
 .../kvm/x86_64/vmx_set_nested_state_test.c    |  3 +-
 .../kvm/x86_64/vmx_tsc_adjust_test.c          |  5 +-
 .../selftests/kvm/x86_64/xapic_ipi_test.c     |  4 +-
 .../selftests/kvm/x86_64/xapic_state_test.c   |  2 +-
 .../selftests/kvm/x86_64/xen_shinfo_test.c    | 67 +++++++----------
 .../selftests/kvm/x86_64/xen_vmcall_test.c    | 17 +++--
 .../selftests/kvm/x86_64/xss_msr_test.c       |  2 +-
 90 files changed, 223 insertions(+), 339 deletions(-)
 delete mode 100644 tools/testing/selftests/kvm/x86_64/svm_vmcall_test.c

-- 
2.37.2.789.g6183377224-goog