KVM: selftests: Multiplex return code and fd in __kvm_create_device()
authorSean Christopherson <seanjc@google.com>
Thu, 17 Feb 2022 20:21:33 +0000 (12:21 -0800)
committerPaolo Bonzini <pbonzini@redhat.com>
Sat, 11 Jun 2022 15:46:22 +0000 (11:46 -0400)
Multiplex the return value and fd (on success) in __kvm_create_device()
to mimic common library helpers that return file descriptors, e.g. open().

Signed-off-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
tools/testing/selftests/kvm/aarch64/vgic_init.c
tools/testing/selftests/kvm/include/kvm_util_base.h
tools/testing/selftests/kvm/lib/aarch64/vgic.c
tools/testing/selftests/kvm/lib/kvm_util.c

index 18054b9..77d6c09 100644 (file)
@@ -643,8 +643,8 @@ static void test_v3_its_region(void)
 int test_kvm_device(uint32_t gic_dev_type)
 {
        struct vm_gic v;
-       int ret, fd;
        uint32_t other;
+       int ret;
 
        v.vm = vm_create_default_with_vcpus(NR_VCPUS, 0, 0, guest_code, NULL);
 
@@ -658,8 +658,8 @@ int test_kvm_device(uint32_t gic_dev_type)
                return ret;
        v.gic_fd = kvm_create_device(v.vm, gic_dev_type);
 
-       ret = __kvm_create_device(v.vm, gic_dev_type, &fd);
-       TEST_ASSERT(ret && errno == EEXIST, "create GIC device twice");
+       ret = __kvm_create_device(v.vm, gic_dev_type);
+       TEST_ASSERT(ret < 0 && errno == EEXIST, "create GIC device twice");
 
        /* try to create the other gic_dev_type */
        other = VGIC_DEV_IS_V2(gic_dev_type) ? KVM_DEV_TYPE_ARM_VGIC_V3
index 8795f46..1ccf448 100644 (file)
@@ -485,7 +485,7 @@ void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, unsigned int num, ...);
 int _kvm_device_check_attr(int dev_fd, uint32_t group, uint64_t attr);
 int kvm_device_check_attr(int dev_fd, uint32_t group, uint64_t attr);
 int __kvm_test_create_device(struct kvm_vm *vm, uint64_t type);
-int __kvm_create_device(struct kvm_vm *vm, uint64_t type, int *fd);
+int __kvm_create_device(struct kvm_vm *vm, uint64_t type);
 int kvm_create_device(struct kvm_vm *vm, uint64_t type);
 int _kvm_device_access(int dev_fd, uint32_t group, uint64_t attr,
                       void *val, bool write);
index 74b4bca..7925b4c 100644 (file)
@@ -51,8 +51,9 @@ int vgic_v3_setup(struct kvm_vm *vm, unsigned int nr_vcpus, uint32_t nr_irqs,
                        nr_vcpus, nr_vcpus_created);
 
        /* Distributor setup */
-       if (__kvm_create_device(vm, KVM_DEV_TYPE_ARM_VGIC_V3, &gic_fd))
-               return -1;
+       gic_fd = __kvm_create_device(vm, KVM_DEV_TYPE_ARM_VGIC_V3);
+       if (gic_fd < 0)
+               return gic_fd;
 
        kvm_device_access(gic_fd, KVM_DEV_ARM_VGIC_GRP_NR_IRQS,
                        0, &nr_irqs, true);
index 9c0122b..17e2261 100644 (file)
@@ -1639,27 +1639,25 @@ int __kvm_test_create_device(struct kvm_vm *vm, uint64_t type)
        return __vm_ioctl(vm, KVM_CREATE_DEVICE, &create_dev);
 }
 
-int __kvm_create_device(struct kvm_vm *vm, uint64_t type, int *fd)
+int __kvm_create_device(struct kvm_vm *vm, uint64_t type)
 {
        struct kvm_create_device create_dev = {
                .type = type,
                .fd = -1,
                .flags = 0,
        };
-       int ret;
+       int err;
 
-       ret = __vm_ioctl(vm, KVM_CREATE_DEVICE, &create_dev);
-       *fd = create_dev.fd;
-       return ret;
+       err = __vm_ioctl(vm, KVM_CREATE_DEVICE, &create_dev);
+       TEST_ASSERT(err <= 0, "KVM_CREATE_DEVICE shouldn't return a positive value");
+       return err ? : create_dev.fd;
 }
 
 int kvm_create_device(struct kvm_vm *vm, uint64_t type)
 {
-       int fd, ret;
-
-       ret = __kvm_create_device(vm, type, &fd);
+       int fd = __kvm_create_device(vm, type);
 
-       TEST_ASSERT(!ret, "KVM_CREATE_DEVICE IOCTL failed, rc: %i errno: %i", ret, errno);
+       TEST_ASSERT(fd >= 0, "KVM_CREATE_DEVICE IOCTL failed, rc: %i errno: %i", fd, errno);
        return fd;
 }