From: Oliver Upton <oupton@google.com>
To: Andrew Jones <drjones@redhat.com>
Cc: Sean Christopherson <seanjc@google.com>,
linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
Paolo Bonzini <pbonzini@redhat.com>,
Vitaly Kuznetsov <vkuznets@redhat.com>,
Wanpeng Li <wanpengli@tencent.com>,
Jim Mattson <jmattson@google.com>, Joerg Roedel <joro@8bytes.org>,
Thomas Huth <thuth@redhat.com>,
Janosch Frank <frankja@linux.ibm.com>,
Claudio Imbrenda <imbrenda@linux.ibm.com>,
David Hildenbrand <david@redhat.com>,
David Matlack <dmatlack@google.com>,
Ben Gardon <bgardon@google.com>
Subject: Re: [RFC PATCH 000/105] KVM: selftests: Overhaul APIs, purge VCPU_ID
Date: Mon, 14 Mar 2022 17:56:53 +0000 [thread overview]
Message-ID: <Yi+B5bZ1LpaNCUJT@google.com> (raw)
In-Reply-To: <20220314110653.a46vy5hqegt75wpb@gator>
On Mon, Mar 14, 2022 at 12:06:53PM +0100, Andrew Jones wrote:
> On Fri, Mar 11, 2022 at 05:49:11AM +0000, Sean Christopherson wrote:
> > First off, hopefully I didn't just spam you with 106 emails. In theory,
> > unless you're subscribed to LKML, you should see only the cover letter
> > and everything else should be on lore if you want to pull down the mbox
> > (instead of saying "LOL, 105 patches!?!?", or maybe after you say that).
> >
> > This is a (very) early RFC for overhauling KVM's selftests APIs. It's
> > compile tested only (maybe), there are no changelogs, etc...
> >
> > My end goal with an overhaul is to get to a state where adding new
> > features and writing tests is less painful/disgusting (I feel dirty every
> > time I copy+paste VCPU_ID). I opted to directly send only the cover
> > letter because most of the individual patches aren't all that interesting,
> > there's still 46 patches even if the per-test conversions are omitted, and
> > it's the final state that I really care about and want to discuss.
> >
> > The overarching theme of my take on where to go with selftests is to stop
> > treating tests like second class citizens. Stop hiding vcpu, kvm_vm, etc...
> > There's no sensitive data/constructs, and the encapsulation has led to
> > really, really bad and difficult to maintain code. E.g. Want to call a
> > vCPU ioctl()? Hope you have the VM...
>
> Ack to dropping the privateness of structs.
>
> >
> > The other theme in the rework is to deduplicate code and try to set us
> > up for success in the future. E.g. provide macros/helpers instead of
> > spamming CTRL-C => CTRL-V (see the -700 LoC).
>
> Ack to more helper functions. I'm not sure what the best way to document
> or provide examples for the API is though. Currently we mostly rely on
> test writers to read other tests (I suppose the function headers help a
> bit, but, IMO, not much). Maybe we need a heavily commented example.c
> that can help test writers get started, along with better API function
> descriptions for anything exported from the lib.
>
+1. Definitely guilty of copy/pasting a test then tweaking to fit the
problem I'm trying to solve. A barebones example would be helpful.
Haven't looked at the patches yet, but one of my whines about the
selftests is that every test winds up explicitly handling exit reasons
that percolate up from the libraries. Perhaps some helpers around ABORTs
and the like would be useful (and maybe Sean already did this!)
> >
> > I was hoping to get this into a less shabby state before posting, but I'm
> > I'm going to be OOO for the next few weeks and want to get the ball rolling
> > instead of waiting another month or so.
>
> Ideas look good to me, but I'll wait for the cleaned up series posted to
> the KVM ML to review it. Also, I see at least patch 1/105 is a fix. It'd
> be nice to post all fixes separately so they get in sooner than later.
>
> Oh, some of the renaming doesn't look all that important to me, like
> prefixing with kvm_ or adding _arch_, but I don't have strong preferences
> on the names. Also, for the _arch_ functions it'd be nice to create
> common, weak functions which the arch must override. The common function
> would just assert. That should help people who want to port to other
> architectures determine what they need to implement first. And, for
> anything which an arch can optionally adopt a common implementation,
> *not* naming the common function with _arch_, but still defining it as
> weak, would make sense to me too.
I think it may make more sense to only define optional functions as
weak and let the compiler do the screaming for the required ones. Only
discovering that functions are missing at runtime could be annoying if
you're cross-compiling and running on a separate host with a different
architecture.
--
Oliver
next prev parent reply other threads:[~2022-03-14 17:57 UTC|newest]
Thread overview: 112+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-11 5:49 [RFC PATCH 000/105] KVM: selftests: Overhaul APIs, purge VCPU_ID Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 001/105] KVM: selftests: Fix buggy check in test_v3_new_redist_regions() Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 002/105] KVM: selftests: Always open VM file descriptors with O_RDWR Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 003/105] KVM: selftest: Add another underscore to inner ioctl helpers Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 004/105] KVM: selftests: Make vcpu_ioctl() a wrapper to pretty print ioctl name Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 005/105] KVM: selftests: Drop @mode from common vm_create() helper Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 006/105] KVM: selftests: Split vcpu_set_nested_state() into two helpers Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 007/105] KVM: selftests: Add hyperv_svm_test test binary to .gitignore Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 008/105] KVM: sefltests: Use vcpu_ioctl() and __vcpu_ioctl() helpers Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 009/105] KVM: selftests: Add __vcpu_run() helper Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 010/105] KVM: selftests: Use vcpu_access_device_attr() in arm64 code Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 011/105] KVM: selftests: Remove vcpu_get_fd() Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 012/105] KVM: selftests: Add vcpu_get() to retrieve and assert on vCPU existence Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 013/105] KVM: selftests: Make vm_ioctl() a wrapper to pretty print ioctl name Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 014/105] KVM: sefltests: Use vm_ioctl() and __vm_ioctl() helpers Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 015/105] KVM: selftests: Make kvm_ioctl() a wrapper to pretty print ioctl name Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 016/105] KVM: selftests: Use kvm_ioctl() helpers Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 017/105] KVM: selftests: Make x86-64's register dump helpers static Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 018/105] KVM: selftests: Get rid of kvm_util_internal.h Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 019/105] KVM: selftests: Use KVM_IOCTL_ERROR() for one-off arm64 ioctls Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 020/105] KVM: selftests: Drop @test param from kvm_create_device() Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 021/105] KVM: selftests: Move KVM_CREATE_DEVICE_TEST code to separate helper Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 022/105] KVM: selftests: Multiplex return code and fd in __kvm_create_device() Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 023/105] KVM: selftests: Rename KVM_HAS_DEVICE_ATTR helpers for consistency Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 024/105] KVM: selftests: Drop 'int' return from asserting *_device_has_attr() Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 025/105] KVM: selftests: Split get/set device_attr helpers Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 026/105] KVM: selftests: Add a VM backpointer to 'struct vcpu' Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 027/105] KVM: selftests: Add vm_create_*() variants to expose/return " Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 028/105] KVM: selftests: Rename vcpu.state => vcpu.run Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 029/105] KVM: selftests: Rename 'struct vcpu' to 'struct kvm_vcpu' Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 030/105] KVM: selftests: Return the created vCPU from vm_vcpu_add() Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 031/105] KVM: selftests: Convert memslot_perf_test away from VCPU_ID Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 032/105] KVM: selftests: Convert rseq_test " Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 033/105] KVM: selftests: Convert xss_msr_test " Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 034/105] KVM: selftests: Convert vmx_preemption_timer_test " Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 035/105] KVM: selftests: Convert vmx_pmu_msrs_test " Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 036/105] KVM: selftests: Convert vmx_set_nested_state_test " Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 037/105] KVM: selftests: Convert vmx_tsc_adjust_test " Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 038/105] KVM: selftests: Convert mmu_role_test " Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 039/105] KVM: selftests: Convert pmu_event_filter_test " Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 040/105] KVM: selftests: Convert smm_test " Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 041/105] KVM: selftests: Convert state_test " Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 042/105] KVM: selftests: Convert svm_int_ctl_test " Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 043/105] KVM: selftests: Convert svm_vmcall_test " Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 044/105] KVM: selftests: Convert sync_regs_test " Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 045/105] KVM: selftests: Convert hyperv_cpuid " Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 046/105] KVM: selftests: Convert kvm_pv_test " Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 047/105] KVM: selftests: Convert platform_info_test " Sean Christopherson
2022-03-11 5:49 ` [RFC PATCH 048/105] KVM: selftests: Convert vmx_nested_tsc_scaling_test " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 049/105] KVM: selftests: Convert set_sregs_test " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 050/105] KVM: selftests: Convert vmx_dirty_log_test " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 051/105] KVM: selftests: Convert vmx_close_while_nested_test " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 052/105] KVM: selftests: Convert vmx_apic_access_test " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 053/105] KVM: selftests: Convert userspace_msr_exit_test " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 054/105] KVM: selftests: Convert vmx_exception_with_invalid_guest_state " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 055/105] KVM: selftests: Convert tsc_msrs_test " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 056/105] KVM: selftests: Convert kvm_clock_test " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 057/105] KVM: selftests: Convert hyperv_svm_test " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 058/105] KVM: selftests: Convert hyperv_features " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 059/105] KVM: selftests: Convert hyperv_clock " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 060/105] KVM: selftests: Convert evmcs_test " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 061/105] KVM: selftests: Convert emulator_error_test " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 062/105] KVM: selftests: Convert debug_regs " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 063/105] KVM: selftests: Add proper helper for advancing RIP in debug_regs Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 064/105] KVM: selftests: Convert amx_test away from VCPU_ID Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 065/105] KVM: selftests: Convert cr4_cpuid_sync_test " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 066/105] KVM: selftests: Convert cpuid_test " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 067/105] KVM: selftests: Convert userspace_io_test " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 068/105] KVM: selftests: Convert vmx_invalid_nested_guest_state " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 069/105] KVM: selftests: Convert xen_vmcall_test " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 070/105] KVM: selftests: Convert xen_shinfo_test " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 071/105] KVM: selftests: Convert dirty_log_test " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 072/105] KVM: selftests: Convert set_memory_region_test " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 073/105] KVM: selftests: Convert system_counter_offset_test " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 074/105] KVM: selftests: Convert debug-exceptions " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 075/105] KVM: selftests: Convert vgic_irq.c include/aarch64/vgic.h lib/aarch64/vgic " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 076/105] KVM: selftests: Make arm64's guest_get_vcpuid() declaration arm64-only Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 077/105] KVM: selftests: Move vm_is_unrestricted_guest() to x86-64 Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 078/105] KVM: selftests: Add "arch" to common utils that have arch implementations Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 079/105] KVM: selftests: Return created vcpu from vm_vcpu_add_default() Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 080/105] KVM: selftests: Rename vm_vcpu_add* helpers to better show relationships Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 081/105] KVM: selftests: Convert set_boot_cpu_id away from VCPU_ID Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 082/105] KVM: selftests: Convert psci_cpu_on_test " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 083/105] KVM: selftests: Convert hardware_disable_test " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 084/105] KVM: selftests: Add VM creation helper that "returns" vCPUs Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 085/105] KVM: selftests: Convert steal_time away from VCPU_ID Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 086/105] KVM: selftests: Convert arch_timer " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 087/105] KVM: selftests: Fix typo in vgic_init test Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 088/105] KVM: selftests: Convert vgic_init away from vm_create_default_with_vcpus() Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 089/105] KVM: selftests: Convert xapic_ipi_test away from *_VCPU_ID Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 090/105] KVM: selftests: Convert sync_regs_test away from VCPU_ID Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 091/105] KVM: selftests: Convert resets " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 092/105] KVM: selftests: Convert memop " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 093/105] KVM: selftests: Convert s390x/diag318_test_handler " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 094/105] KVM: selftests: Drop vm_create_default* helpers Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 095/105] KVM: selftests: Drop vcpuids param from VM creators Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 096/105] KVM: selftests: Convert kvm_page_table_test away from reliance on vcpu_id Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 097/105] KVM: selftests: Convert kvm_binary_stats_test away from VCPU_ID Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 098/105] KVM: selftests: Convert get-reg-list " Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 099/105] KVM: selftests: Stop conflating vCPU index and ID in perf tests Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 100/105] KVM: selftests: Remove vcpu_get() usage from dirty_log_test Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 101/105] KVM: selftests: Require vCPU output array when creating VM with vCPUs Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 102/105] KVM: selftest: Purge vm+vcpu_id == vcpu silliness Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 103/105] KVM: selftests: Drop vcpu_get(), rename vcpu_find() => vcpu_exists() Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 104/105] KVM: selftests: Remove vcpu_state() helper Sean Christopherson
2022-03-11 5:50 ` [RFC PATCH 105/105] KVM: selftests: Open code and drop kvm_vm accessors Sean Christopherson
2022-03-14 9:49 ` [RFC PATCH 000/105] KVM: selftests: Overhaul APIs, purge VCPU_ID Vitaly Kuznetsov
2022-03-14 11:06 ` Andrew Jones
2022-03-14 17:56 ` Oliver Upton [this message]
2022-03-15 8:08 ` Andrew Jones
2022-03-28 19:02 ` Sean Christopherson
2022-04-06 16:50 ` David Matlack
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=Yi+B5bZ1LpaNCUJT@google.com \
--to=oupton@google.com \
--cc=bgardon@google.com \
--cc=david@redhat.com \
--cc=dmatlack@google.com \
--cc=drjones@redhat.com \
--cc=frankja@linux.ibm.com \
--cc=imbrenda@linux.ibm.com \
--cc=jmattson@google.com \
--cc=joro@8bytes.org \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=thuth@redhat.com \
--cc=vkuznets@redhat.com \
--cc=wanpengli@tencent.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