Add vm_userspace_mem_region_add_map() function to set up memslot, and update spawn_vm() to use it. This helps the test cases to create additional memslots easily.
Signed-off-by: Yohei Kojima <[email protected]> --- .../selftests/kvm/set_memory_region_test.c | 47 ++++++++++++------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/tools/testing/selftests/kvm/set_memory_region_test.c b/tools/testing/selftests/kvm/set_memory_region_test.c index 7fe427ff9b38..8d4fd713347c 100644 --- a/tools/testing/selftests/kvm/set_memory_region_test.c +++ b/tools/testing/selftests/kvm/set_memory_region_test.c @@ -107,31 +107,42 @@ static void wait_for_vcpu(void) usleep(100000); } +static void vm_userspace_mem_region_add_map(struct kvm_vm *vm, + uint64_t addr, uint32_t slot, size_t size, uint32_t flags) +{ + uint64_t *hva; + uint64_t gpa; + + vm_userspace_mem_region_add(vm, VM_MEM_SRC_ANONYMOUS_THP, + addr, slot, + size / getpagesize(), flags); + + /* + * Allocate and map two pages so that the GPA accessed by guest_code() + * stays valid across the memslot move. + */ + gpa = vm_phy_pages_alloc(vm, 2, addr, slot); + TEST_ASSERT(gpa == addr, "Failed vm_phy_pages_alloc\n"); + + virt_map(vm, addr, addr, 2); + + /* Ditto for the host mapping so that both pages can be zeroed. */ + hva = addr_gpa2hva(vm, MEM_REGION_GPA); + memset(hva, 0, 2 * 4096); +} + static struct kvm_vm *spawn_vm(struct kvm_vcpu **vcpu, pthread_t *vcpu_thread, void *guest_code) { struct kvm_vm *vm; - uint64_t *hva; - uint64_t gpa; vm = vm_create_with_one_vcpu(vcpu, guest_code); - vm_userspace_mem_region_add(vm, VM_MEM_SRC_ANONYMOUS_THP, - MEM_REGION_GPA, MEM_REGION_SLOT, - MEM_REGION_SIZE / getpagesize(), 0); - - /* - * Allocate and map two pages so that the GPA accessed by guest_code() - * stays valid across the memslot move. - */ - gpa = vm_phy_pages_alloc(vm, 2, MEM_REGION_GPA, MEM_REGION_SLOT); - TEST_ASSERT(gpa == MEM_REGION_GPA, "Failed vm_phy_pages_alloc\n"); - - virt_map(vm, MEM_REGION_GPA, MEM_REGION_GPA, 2); - - /* Ditto for the host mapping so that both pages can be zeroed. */ - hva = addr_gpa2hva(vm, MEM_REGION_GPA); - memset(hva, 0, 2 * 4096); + vm_userspace_mem_region_add_map(vm, + MEM_REGION_GPA, + MEM_REGION_SLOT, + MEM_REGION_SIZE, + 0); pthread_create(vcpu_thread, NULL, vcpu_worker, *vcpu); -- 2.43.0

