Skip to content

Commit 5afe18d

Browse files
sean-jcoupton
authored andcommitted
KVM: selftests: Don't bother deleting memslots in KVM when freeing VMs
When freeing a VM, don't call into KVM to manually remove each memslot, simply cleanup and free any userspace assets associated with the memory region. KVM is ultimately responsible for ensuring kernel resources are freed when the VM is destroyed, deleting memslots one-by-one is unnecessarily slow, and unless a test is already leaking the VM fd, the VM will be destroyed when kvm_vm_release() is called. Not deleting KVM's memslot also allows cleaning up dead VMs without having to care whether or not the to-be-freed VM is dead or alive. Reported-by: Eric Auger <eric.auger@redhat.com> Reviewed-by: Eric Auger <eric.auger@redhat.com> Tested-by: Eric Auger <eric.auger@redhat.com> Reported-by: Mark Brown <broonie@kernel.org> Signed-off-by: Sean Christopherson <seanjc@google.com> Link: https://lore.kernel.org/kvmarm/Zy0bcM0m-N18gAZz@google.com/ Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
1 parent 38d7aac commit 5afe18d

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

tools/testing/selftests/kvm/lib/kvm_util.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -720,9 +720,6 @@ static void __vm_mem_region_delete(struct kvm_vm *vm,
720720
rb_erase(&region->hva_node, &vm->regions.hva_tree);
721721
hash_del(&region->slot_node);
722722

723-
region->region.memory_size = 0;
724-
vm_ioctl(vm, KVM_SET_USER_MEMORY_REGION2, &region->region);
725-
726723
sparsebit_free(&region->unused_phy_pages);
727724
sparsebit_free(&region->protected_phy_pages);
728725
ret = munmap(region->mmap_start, region->mmap_size);
@@ -1197,7 +1194,12 @@ void vm_mem_region_move(struct kvm_vm *vm, uint32_t slot, uint64_t new_gpa)
11971194
*/
11981195
void vm_mem_region_delete(struct kvm_vm *vm, uint32_t slot)
11991196
{
1200-
__vm_mem_region_delete(vm, memslot2region(vm, slot));
1197+
struct userspace_mem_region *region = memslot2region(vm, slot);
1198+
1199+
region->region.memory_size = 0;
1200+
vm_ioctl(vm, KVM_SET_USER_MEMORY_REGION2, &region->region);
1201+
1202+
__vm_mem_region_delete(vm, region);
12011203
}
12021204

12031205
void vm_guest_mem_fallocate(struct kvm_vm *vm, uint64_t base, uint64_t size,

0 commit comments

Comments
 (0)