Message ID | 20220209172945.1495014-3-daviddunn@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: x86: Provide per VM capability for disabling PMU virtualization | expand |
Shortlog and new function name are a bit confusing. The framework already supports creating VMs without vCPUs, what it doesn't provide is a helper to load the guest code and do the other "default" stuff. That said, the framework is such an absolute mess that I'm fine going with vm_create_without_vcpus() for now, carving out a more appropriate name will be an exercise in futility without a large-scale renaming and refactoring of the other crud. So just a different shortlog I supposed, though even that seems doomed to be contradictory. Maybe something like this? KVM: selftests: Carve out helper to create "default" VM without vCPUs Default in quotes because the selftests already have a goofy interpretation of "default". On Wed, Feb 09, 2022, David Dunn wrote: > Break out portion of vm_create_with_vcpus so that selftests can modify > the VM prior to creating vcpus. > > Signed-off-by: David Dunn <daviddunn@google.com> > --- > .../selftests/kvm/include/kvm_util_base.h | 3 ++ > tools/testing/selftests/kvm/lib/kvm_util.c | 35 +++++++++++++++---- > 2 files changed, 32 insertions(+), 6 deletions(-) > > diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/testing/selftests/kvm/include/kvm_util_base.h > index 4ed6aa049a91..2bdf96f520aa 100644 > --- a/tools/testing/selftests/kvm/include/kvm_util_base.h > +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h > @@ -336,6 +336,9 @@ struct kvm_vm *vm_create_with_vcpus(enum vm_guest_mode mode, uint32_t nr_vcpus, > uint32_t num_percpu_pages, void *guest_code, > uint32_t vcpuids[]); > > +/* First phase of vm_create_with_vcpus, allows customization before vcpu add */ Eh, drop the comment, the association is obvious from the code, and it's just one more thing that needs to be updated when this stuff finally gets cleaned up. > +struct kvm_vm *vm_create_without_vcpus(enum vm_guest_mode mode, uint64_t pages); > + > /* > * Adds a vCPU with reasonable defaults (e.g. a stack) > *
diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/testing/selftests/kvm/include/kvm_util_base.h index 4ed6aa049a91..2bdf96f520aa 100644 --- a/tools/testing/selftests/kvm/include/kvm_util_base.h +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h @@ -336,6 +336,9 @@ struct kvm_vm *vm_create_with_vcpus(enum vm_guest_mode mode, uint32_t nr_vcpus, uint32_t num_percpu_pages, void *guest_code, uint32_t vcpuids[]); +/* First phase of vm_create_with_vcpus, allows customization before vcpu add */ +struct kvm_vm *vm_create_without_vcpus(enum vm_guest_mode mode, uint64_t pages); + /* * Adds a vCPU with reasonable defaults (e.g. a stack) * diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/selftests/kvm/lib/kvm_util.c index d8cf851ab119..52f1f530564e 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -362,6 +362,34 @@ struct kvm_vm *vm_create(enum vm_guest_mode mode, uint64_t phy_pages, int perm) return vm; } +/* + * VM Create without creating VCPUs + * + * Input Args: + * mode - VM Mode (e.g. VM_MODE_P52V48_4K) + * pages - pages of memory required for VM + * + * Output Args: None + * + * Return: + * Pointer to opaque structure that describes the created VM. + * + * Creates a VM with the mode specified by mode (e.g. VM_MODE_P52V48_4K). + */ +struct kvm_vm *vm_create_without_vcpus(enum vm_guest_mode mode, uint64_t pages) +{ + struct kvm_vm *vm; + + vm = vm_create(mode, pages, O_RDWR); + + kvm_vm_elf_load(vm, program_invocation_name); + +#ifdef __x86_64__ + vm_create_irqchip(vm); +#endif + return vm; +} + /* * VM Create with customized parameters * @@ -412,13 +440,8 @@ struct kvm_vm *vm_create_with_vcpus(enum vm_guest_mode mode, uint32_t nr_vcpus, nr_vcpus, kvm_check_cap(KVM_CAP_MAX_VCPUS)); pages = vm_adjust_num_guest_pages(mode, pages); - vm = vm_create(mode, pages, O_RDWR); - - kvm_vm_elf_load(vm, program_invocation_name); -#ifdef __x86_64__ - vm_create_irqchip(vm); -#endif + vm = vm_create_without_vcpus(mode, pages); for (i = 0; i < nr_vcpus; ++i) { uint32_t vcpuid = vcpuids ? vcpuids[i] : i;
Break out portion of vm_create_with_vcpus so that selftests can modify the VM prior to creating vcpus. Signed-off-by: David Dunn <daviddunn@google.com> --- .../selftests/kvm/include/kvm_util_base.h | 3 ++ tools/testing/selftests/kvm/lib/kvm_util.c | 35 +++++++++++++++---- 2 files changed, 32 insertions(+), 6 deletions(-)