diff options
author | Sean Christopherson <sean.j.christopherson@intel.com> | 2020-02-18 13:07:33 -0800 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2020-03-16 17:57:27 +0100 |
commit | 13e48aa9429d1be05ecf8b9eefb212ac58f3f704 (patch) | |
tree | b0d9a0e1bb4c104bb5937476712deb38e8bd16cf /tools/testing/selftests/kvm/lib/kvm_util.c | |
parent | 36947254e5f981aeeedab1c7dfa35fc34d330e80 (diff) | |
download | kernel_replicant_linux-13e48aa9429d1be05ecf8b9eefb212ac58f3f704.tar.gz kernel_replicant_linux-13e48aa9429d1be05ecf8b9eefb212ac58f3f704.tar.bz2 kernel_replicant_linux-13e48aa9429d1be05ecf8b9eefb212ac58f3f704.zip |
KVM: selftests: Add test for KVM_SET_USER_MEMORY_REGION
Add a KVM selftest to test moving the base gfn of a userspace memory
region. Although the basic concept of moving memory regions is not x86
specific, the assumptions regarding large pages and MMIO shenanigans
used to verify the correctness make this x86_64 only for the time being.
Reviewed-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'tools/testing/selftests/kvm/lib/kvm_util.c')
-rw-r--r-- | tools/testing/selftests/kvm/lib/kvm_util.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/selftests/kvm/lib/kvm_util.c index 9e784c5ccc0a..69a28a9211b4 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -760,6 +760,36 @@ void vm_mem_region_set_flags(struct kvm_vm *vm, uint32_t slot, uint32_t flags) } /* + * VM Memory Region Move + * + * Input Args: + * vm - Virtual Machine + * slot - Slot of the memory region to move + * flags - Starting guest physical address + * + * Output Args: None + * + * Return: None + * + * Change the gpa of a memory region. + */ +void vm_mem_region_move(struct kvm_vm *vm, uint32_t slot, uint64_t new_gpa) +{ + struct userspace_mem_region *region; + int ret; + + region = memslot2region(vm, slot); + + region->region.guest_phys_addr = new_gpa; + + ret = ioctl(vm->fd, KVM_SET_USER_MEMORY_REGION, ®ion->region); + + TEST_ASSERT(!ret, "KVM_SET_USER_MEMORY_REGION failed\n" + "ret: %i errno: %i slot: %u flags: 0x%x", + ret, errno, slot, new_gpa); +} + +/* * VCPU mmap Size * * Input Args: None |