mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-18 03:23:53 -04:00
KVM: selftests: Define wrappers for common syscalls to assert success
Add kvm_<sycall> wrappers for munmap(), close(), fallocate(), and ftruncate() to cut down on boilerplate code when a sycall is expected to succeed, and to make it easier for developers to remember to assert success. Implement and use a macro framework similar to the kernel's SYSCALL_DEFINE infrastructure to further cut down on boilerplate code, and to drastically reduce the probability of typos as the kernel's syscall definitions can be copy+paste almost verbatim. Provide macros to build the raw <sycall>() wrappers as well, e.g. to replace hand-coded wrappers (NUMA) or pure open-coded calls. Reviewed-by: Ackerley Tng <ackerleytng@google.com> Tested-by: Ackerley Tng <ackerleytng@google.com> Reviewed-by: Shivank Garg <shivankg@amd.com> Tested-by: Shivank Garg <shivankg@amd.com> Link: https://lore.kernel.org/r/20251016172853.52451-7-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
@@ -704,8 +704,6 @@ userspace_mem_region_find(struct kvm_vm *vm, uint64_t start, uint64_t end)
|
||||
|
||||
static void kvm_stats_release(struct kvm_binary_stats *stats)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (stats->fd < 0)
|
||||
return;
|
||||
|
||||
@@ -714,8 +712,7 @@ static void kvm_stats_release(struct kvm_binary_stats *stats)
|
||||
stats->desc = NULL;
|
||||
}
|
||||
|
||||
ret = close(stats->fd);
|
||||
TEST_ASSERT(!ret, __KVM_SYSCALL_ERROR("close()", ret));
|
||||
kvm_close(stats->fd);
|
||||
stats->fd = -1;
|
||||
}
|
||||
|
||||
@@ -738,8 +735,6 @@ __weak void vcpu_arch_free(struct kvm_vcpu *vcpu)
|
||||
*/
|
||||
static void vm_vcpu_rm(struct kvm_vm *vm, struct kvm_vcpu *vcpu)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (vcpu->dirty_gfns) {
|
||||
kvm_munmap(vcpu->dirty_gfns, vm->dirty_ring_size);
|
||||
vcpu->dirty_gfns = NULL;
|
||||
@@ -747,9 +742,7 @@ static void vm_vcpu_rm(struct kvm_vm *vm, struct kvm_vcpu *vcpu)
|
||||
|
||||
kvm_munmap(vcpu->run, vcpu_mmap_sz());
|
||||
|
||||
ret = close(vcpu->fd);
|
||||
TEST_ASSERT(!ret, __KVM_SYSCALL_ERROR("close()", ret));
|
||||
|
||||
kvm_close(vcpu->fd);
|
||||
kvm_stats_release(&vcpu->stats);
|
||||
|
||||
list_del(&vcpu->list);
|
||||
@@ -761,16 +754,12 @@ static void vm_vcpu_rm(struct kvm_vm *vm, struct kvm_vcpu *vcpu)
|
||||
void kvm_vm_release(struct kvm_vm *vmp)
|
||||
{
|
||||
struct kvm_vcpu *vcpu, *tmp;
|
||||
int ret;
|
||||
|
||||
list_for_each_entry_safe(vcpu, tmp, &vmp->vcpus, list)
|
||||
vm_vcpu_rm(vmp, vcpu);
|
||||
|
||||
ret = close(vmp->fd);
|
||||
TEST_ASSERT(!ret, __KVM_SYSCALL_ERROR("close()", ret));
|
||||
|
||||
ret = close(vmp->kvm_fd);
|
||||
TEST_ASSERT(!ret, __KVM_SYSCALL_ERROR("close()", ret));
|
||||
kvm_close(vmp->fd);
|
||||
kvm_close(vmp->kvm_fd);
|
||||
|
||||
/* Free cached stats metadata and close FD */
|
||||
kvm_stats_release(&vmp->stats);
|
||||
@@ -828,7 +817,7 @@ void kvm_vm_free(struct kvm_vm *vmp)
|
||||
int kvm_memfd_alloc(size_t size, bool hugepages)
|
||||
{
|
||||
int memfd_flags = MFD_CLOEXEC;
|
||||
int fd, r;
|
||||
int fd;
|
||||
|
||||
if (hugepages)
|
||||
memfd_flags |= MFD_HUGETLB;
|
||||
@@ -836,11 +825,8 @@ int kvm_memfd_alloc(size_t size, bool hugepages)
|
||||
fd = memfd_create("kvm_selftest", memfd_flags);
|
||||
TEST_ASSERT(fd != -1, __KVM_SYSCALL_ERROR("memfd_create()", fd));
|
||||
|
||||
r = ftruncate(fd, size);
|
||||
TEST_ASSERT(!r, __KVM_SYSCALL_ERROR("ftruncate()", r));
|
||||
|
||||
r = fallocate(fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, size);
|
||||
TEST_ASSERT(!r, __KVM_SYSCALL_ERROR("fallocate()", r));
|
||||
kvm_ftruncate(fd, size);
|
||||
kvm_fallocate(fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, size);
|
||||
|
||||
return fd;
|
||||
}
|
||||
@@ -1084,8 +1070,7 @@ void vm_mem_add(struct kvm_vm *vm, enum vm_mem_backing_src_type src_type,
|
||||
* needing to track if the fd is owned by the framework
|
||||
* or by the caller.
|
||||
*/
|
||||
guest_memfd = dup(guest_memfd);
|
||||
TEST_ASSERT(guest_memfd >= 0, __KVM_SYSCALL_ERROR("dup()", guest_memfd));
|
||||
guest_memfd = kvm_dup(guest_memfd);
|
||||
}
|
||||
|
||||
region->region.guest_memfd = guest_memfd;
|
||||
|
||||
Reference in New Issue
Block a user