KVM: selftests: Add util to delete memory region
Add a utility to delete a memory region, it will be used by x86's set_memory_region_test. Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com> Reviewed-by: Wainer dos Santos Moschetta <wainersm@redhat.com> Reviewed-by: Andrew Jones <drjones@redhat.com> Message-Id: <20200410231707.7128-4-sean.j.christopherson@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
4d9bba9007
commit
8c996e4dae
@ -114,6 +114,7 @@ int _vcpu_ioctl(struct kvm_vm *vm, uint32_t vcpuid, unsigned long ioctl,
|
||||
void vm_ioctl(struct kvm_vm *vm, unsigned long ioctl, void *arg);
|
||||
void vm_mem_region_set_flags(struct kvm_vm *vm, uint32_t slot, uint32_t flags);
|
||||
void vm_mem_region_move(struct kvm_vm *vm, uint32_t slot, uint64_t new_gpa);
|
||||
void vm_mem_region_delete(struct kvm_vm *vm, uint32_t slot);
|
||||
void vm_vcpu_add(struct kvm_vm *vm, uint32_t vcpuid);
|
||||
vm_vaddr_t vm_vaddr_alloc(struct kvm_vm *vm, size_t sz, vm_vaddr_t vaddr_min,
|
||||
uint32_t data_memslot, uint32_t pgd_memslot);
|
||||
|
@ -433,34 +433,38 @@ void kvm_vm_release(struct kvm_vm *vmp)
|
||||
" vmp->kvm_fd: %i rc: %i errno: %i", vmp->kvm_fd, ret, errno);
|
||||
}
|
||||
|
||||
static void __vm_mem_region_delete(struct kvm_vm *vm,
|
||||
struct userspace_mem_region *region)
|
||||
{
|
||||
int ret;
|
||||
|
||||
list_del(®ion->list);
|
||||
|
||||
region->region.memory_size = 0;
|
||||
ret = ioctl(vm->fd, KVM_SET_USER_MEMORY_REGION, ®ion->region);
|
||||
TEST_ASSERT(ret == 0, "KVM_SET_USER_MEMORY_REGION IOCTL failed, "
|
||||
"rc: %i errno: %i", ret, errno);
|
||||
|
||||
sparsebit_free(®ion->unused_phy_pages);
|
||||
ret = munmap(region->mmap_start, region->mmap_size);
|
||||
TEST_ASSERT(ret == 0, "munmap failed, rc: %i errno: %i", ret, errno);
|
||||
|
||||
free(region);
|
||||
}
|
||||
|
||||
/*
|
||||
* Destroys and frees the VM pointed to by vmp.
|
||||
*/
|
||||
void kvm_vm_free(struct kvm_vm *vmp)
|
||||
{
|
||||
struct userspace_mem_region *region, *tmp;
|
||||
int ret;
|
||||
|
||||
if (vmp == NULL)
|
||||
return;
|
||||
|
||||
/* Free userspace_mem_regions. */
|
||||
list_for_each_entry_safe(region, tmp, &vmp->userspace_mem_regions, list) {
|
||||
list_del(®ion->list);
|
||||
|
||||
region->region.memory_size = 0;
|
||||
ret = ioctl(vmp->fd, KVM_SET_USER_MEMORY_REGION,
|
||||
®ion->region);
|
||||
TEST_ASSERT(ret == 0, "KVM_SET_USER_MEMORY_REGION IOCTL failed, "
|
||||
"rc: %i errno: %i", ret, errno);
|
||||
|
||||
sparsebit_free(®ion->unused_phy_pages);
|
||||
ret = munmap(region->mmap_start, region->mmap_size);
|
||||
TEST_ASSERT(ret == 0, "munmap failed, rc: %i errno: %i",
|
||||
ret, errno);
|
||||
|
||||
free(region);
|
||||
}
|
||||
list_for_each_entry_safe(region, tmp, &vmp->userspace_mem_regions, list)
|
||||
__vm_mem_region_delete(vmp, region);
|
||||
|
||||
/* Free sparsebit arrays. */
|
||||
sparsebit_free(&vmp->vpages_valid);
|
||||
@ -775,6 +779,24 @@ void vm_mem_region_move(struct kvm_vm *vm, uint32_t slot, uint64_t new_gpa)
|
||||
ret, errno, slot, new_gpa);
|
||||
}
|
||||
|
||||
/*
|
||||
* VM Memory Region Delete
|
||||
*
|
||||
* Input Args:
|
||||
* vm - Virtual Machine
|
||||
* slot - Slot of the memory region to delete
|
||||
*
|
||||
* Output Args: None
|
||||
*
|
||||
* Return: None
|
||||
*
|
||||
* Delete a memory region.
|
||||
*/
|
||||
void vm_mem_region_delete(struct kvm_vm *vm, uint32_t slot)
|
||||
{
|
||||
__vm_mem_region_delete(vm, memslot2region(vm, slot));
|
||||
}
|
||||
|
||||
/*
|
||||
* VCPU mmap Size
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user