lkml.org 
[lkml]   [2022]   [Jun]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH v2 106/144] KVM: selftests: Add VM creation helper that "returns" vCPUs
    From
    Add a VM creator that "returns" the created vCPUs by filling the provided
    array. This will allow converting multi-vCPU tests away from hardcoded
    vCPU IDs.

    Signed-off-by: Sean Christopherson <seanjc@google.com>
    ---
    .../selftests/kvm/include/kvm_util_base.h | 17 +++++++++++++----
    .../testing/selftests/kvm/kvm_page_table_test.c | 4 ++--
    tools/testing/selftests/kvm/lib/kvm_util.c | 17 ++++++++++-------
    .../testing/selftests/kvm/lib/perf_test_util.c | 4 ++--
    4 files changed, 27 insertions(+), 15 deletions(-)

    diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/testing/selftests/kvm/include/kvm_util_base.h
    index 2c7a8a91ebe2..c0b2158a53d5 100644
    --- a/tools/testing/selftests/kvm/include/kvm_util_base.h
    +++ b/tools/testing/selftests/kvm/include/kvm_util_base.h
    @@ -563,10 +563,19 @@ struct kvm_vm *vm_create_default_with_vcpus(uint32_t nr_vcpus, uint64_t extra_me
    uint32_t vcpuids[]);

    /* Like vm_create_default_with_vcpus, but accepts mode and slot0 memory as a parameter */
    -struct kvm_vm *vm_create_with_vcpus(enum vm_guest_mode mode, uint32_t nr_vcpus,
    - uint64_t slot0_mem_pages, uint64_t extra_mem_pages,
    - uint32_t num_percpu_pages, void *guest_code,
    - uint32_t vcpuids[]);
    +struct kvm_vm *__vm_create_with_vcpus(enum vm_guest_mode mode, uint32_t nr_vcpus,
    + uint64_t slot0_mem_pages, uint64_t extra_mem_pages,
    + uint32_t num_percpu_pages, void *guest_code,
    + uint32_t vcpuids[], struct kvm_vcpu *vcpus[]);
    +
    +static inline struct kvm_vm *vm_create_with_vcpus(uint32_t nr_vcpus,
    + void *guest_code,
    + struct kvm_vcpu *vcpus[])
    +{
    + return __vm_create_with_vcpus(VM_MODE_DEFAULT, nr_vcpus,
    + DEFAULT_GUEST_PHY_PAGES, 0, 0,
    + guest_code, NULL, vcpus);
    +}

    /*
    * Create a VM with a single vCPU with reasonable defaults and @extra_mem_pages
    diff --git a/tools/testing/selftests/kvm/kvm_page_table_test.c b/tools/testing/selftests/kvm/kvm_page_table_test.c
    index 2c4a7563a4f8..e91bc7f1400d 100644
    --- a/tools/testing/selftests/kvm/kvm_page_table_test.c
    +++ b/tools/testing/selftests/kvm/kvm_page_table_test.c
    @@ -268,8 +268,8 @@ static struct kvm_vm *pre_init_before_test(enum vm_guest_mode mode, void *arg)

    /* Create a VM with enough guest pages */
    guest_num_pages = test_mem_size / guest_page_size;
    - vm = vm_create_with_vcpus(mode, nr_vcpus, DEFAULT_GUEST_PHY_PAGES,
    - guest_num_pages, 0, guest_code, NULL);
    + vm = __vm_create_with_vcpus(mode, nr_vcpus, DEFAULT_GUEST_PHY_PAGES,
    + guest_num_pages, 0, guest_code, NULL, NULL);

    /* Align down GPA of the testing memslot */
    if (!p->phys_offset)
    diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/selftests/kvm/lib/kvm_util.c
    index 8ed1baf6b0eb..132a591ba029 100644
    --- a/tools/testing/selftests/kvm/lib/kvm_util.c
    +++ b/tools/testing/selftests/kvm/lib/kvm_util.c
    @@ -296,12 +296,13 @@ struct kvm_vm *__vm_create(enum vm_guest_mode mode, uint64_t nr_pages)
    * extra_mem_pages is only used to calculate the maximum page table size,
    * no real memory allocation for non-slot0 memory in this function.
    */
    -struct kvm_vm *vm_create_with_vcpus(enum vm_guest_mode mode, uint32_t nr_vcpus,
    - uint64_t slot0_mem_pages, uint64_t extra_mem_pages,
    - uint32_t num_percpu_pages, void *guest_code,
    - uint32_t vcpuids[])
    +struct kvm_vm *__vm_create_with_vcpus(enum vm_guest_mode mode, uint32_t nr_vcpus,
    + uint64_t slot0_mem_pages, uint64_t extra_mem_pages,
    + uint32_t num_percpu_pages, void *guest_code,
    + uint32_t vcpuids[], struct kvm_vcpu *vcpus[])
    {
    uint64_t vcpu_pages, extra_pg_pages, pages;
    + struct kvm_vcpu *vcpu;
    struct kvm_vm *vm;
    int i;

    @@ -328,7 +329,9 @@ struct kvm_vm *vm_create_with_vcpus(enum vm_guest_mode mode, uint32_t nr_vcpus,
    for (i = 0; i < nr_vcpus; ++i) {
    uint32_t vcpuid = vcpuids ? vcpuids[i] : i;

    - vm_vcpu_add(vm, vcpuid, guest_code);
    + vcpu = vm_vcpu_add(vm, vcpuid, guest_code);
    + if (vcpus)
    + vcpus[i] = vcpu;
    }

    return vm;
    @@ -338,8 +341,8 @@ struct kvm_vm *vm_create_default_with_vcpus(uint32_t nr_vcpus, uint64_t extra_me
    uint32_t num_percpu_pages, void *guest_code,
    uint32_t vcpuids[])
    {
    - return vm_create_with_vcpus(VM_MODE_DEFAULT, nr_vcpus, DEFAULT_GUEST_PHY_PAGES,
    - extra_mem_pages, num_percpu_pages, guest_code, vcpuids);
    + return __vm_create_with_vcpus(VM_MODE_DEFAULT, nr_vcpus, DEFAULT_GUEST_PHY_PAGES,
    + extra_mem_pages, num_percpu_pages, guest_code, vcpuids, NULL);
    }

    struct kvm_vm *vm_create_default(uint32_t vcpuid, uint64_t extra_mem_pages,
    diff --git a/tools/testing/selftests/kvm/lib/perf_test_util.c b/tools/testing/selftests/kvm/lib/perf_test_util.c
    index 722df3a28791..5b80ba7f12e4 100644
    --- a/tools/testing/selftests/kvm/lib/perf_test_util.c
    +++ b/tools/testing/selftests/kvm/lib/perf_test_util.c
    @@ -139,8 +139,8 @@ struct kvm_vm *perf_test_create_vm(enum vm_guest_mode mode, int vcpus,
    * The memory is also added to memslot 0, but that's a benign side
    * effect as KVM allows aliasing HVAs in meslots.
    */
    - vm = vm_create_with_vcpus(mode, vcpus, DEFAULT_GUEST_PHY_PAGES,
    - guest_num_pages, 0, guest_code, NULL);
    + vm = __vm_create_with_vcpus(mode, vcpus, DEFAULT_GUEST_PHY_PAGES,
    + guest_num_pages, 0, guest_code, NULL, NULL);

    pta->vm = vm;

    --
    2.36.1.255.ge46751e96f-goog
    \
     
     \ /
      Last update: 2022-06-03 02:58    [W:3.331 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site