Commit 98f94ce4 authored by Sean Christopherson's avatar Sean Christopherson Committed by Paolo Bonzini

KVM: selftests: Move KVM_CREATE_DEVICE_TEST code to separate helper

Move KVM_CREATE_DEVICE_TEST to its own helper, identifying "real" versus
"test" device creation based on a hardcoded boolean buried in the middle
of a param list is painful for readers.
Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent f3165dc0
...@@ -649,24 +649,24 @@ int test_kvm_device(uint32_t gic_dev_type) ...@@ -649,24 +649,24 @@ int test_kvm_device(uint32_t gic_dev_type)
v.vm = vm_create_default_with_vcpus(NR_VCPUS, 0, 0, guest_code, NULL); v.vm = vm_create_default_with_vcpus(NR_VCPUS, 0, 0, guest_code, NULL);
/* try to create a non existing KVM device */ /* try to create a non existing KVM device */
ret = _kvm_create_device(v.vm, 0, true, &fd); ret = __kvm_test_create_device(v.vm, 0);
TEST_ASSERT(ret && errno == ENODEV, "unsupported device"); TEST_ASSERT(ret && errno == ENODEV, "unsupported device");
/* trial mode */ /* trial mode */
ret = _kvm_create_device(v.vm, gic_dev_type, true, &fd); ret = __kvm_test_create_device(v.vm, gic_dev_type);
if (ret) if (ret)
return ret; return ret;
v.gic_fd = kvm_create_device(v.vm, gic_dev_type); v.gic_fd = kvm_create_device(v.vm, gic_dev_type);
ret = _kvm_create_device(v.vm, gic_dev_type, false, &fd); ret = __kvm_create_device(v.vm, gic_dev_type, &fd);
TEST_ASSERT(ret && errno == EEXIST, "create GIC device twice"); TEST_ASSERT(ret && errno == EEXIST, "create GIC device twice");
/* try to create the other gic_dev_type */ /* try to create the other gic_dev_type */
other = VGIC_DEV_IS_V2(gic_dev_type) ? KVM_DEV_TYPE_ARM_VGIC_V3 other = VGIC_DEV_IS_V2(gic_dev_type) ? KVM_DEV_TYPE_ARM_VGIC_V3
: KVM_DEV_TYPE_ARM_VGIC_V2; : KVM_DEV_TYPE_ARM_VGIC_V2;
if (!_kvm_create_device(v.vm, other, true, &fd)) { if (!__kvm_test_create_device(v.vm, other)) {
ret = _kvm_create_device(v.vm, other, false, &fd); ret = __kvm_test_create_device(v.vm, other);
TEST_ASSERT(ret && errno == EINVAL, TEST_ASSERT(ret && errno == EINVAL,
"create GIC device while other version exists"); "create GIC device while other version exists");
} }
......
...@@ -484,7 +484,8 @@ void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, unsigned int num, ...); ...@@ -484,7 +484,8 @@ 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_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_create_device(struct kvm_vm *vm, uint64_t type, bool test, int *fd); 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, int _kvm_device_access(int dev_fd, uint32_t group, uint64_t attr,
void *val, bool write); void *val, bool write);
......
...@@ -51,8 +51,7 @@ int vgic_v3_setup(struct kvm_vm *vm, unsigned int nr_vcpus, uint32_t nr_irqs, ...@@ -51,8 +51,7 @@ int vgic_v3_setup(struct kvm_vm *vm, unsigned int nr_vcpus, uint32_t nr_irqs,
nr_vcpus, nr_vcpus_created); nr_vcpus, nr_vcpus_created);
/* Distributor setup */ /* Distributor setup */
if (_kvm_create_device(vm, KVM_DEV_TYPE_ARM_VGIC_V3, if (__kvm_create_device(vm, KVM_DEV_TYPE_ARM_VGIC_V3, &gic_fd))
false, &gic_fd) != 0)
return -1; return -1;
kvm_device_access(gic_fd, KVM_DEV_ARM_VGIC_GRP_NR_IRQS, kvm_device_access(gic_fd, KVM_DEV_ARM_VGIC_GRP_NR_IRQS,
......
...@@ -1629,14 +1629,25 @@ int kvm_device_check_attr(int dev_fd, uint32_t group, uint64_t attr) ...@@ -1629,14 +1629,25 @@ int kvm_device_check_attr(int dev_fd, uint32_t group, uint64_t attr)
return ret; return ret;
} }
int _kvm_create_device(struct kvm_vm *vm, uint64_t type, bool test, int *fd) int __kvm_test_create_device(struct kvm_vm *vm, uint64_t type)
{ {
struct kvm_create_device create_dev; struct kvm_create_device create_dev = {
.type = type,
.flags = KVM_CREATE_DEVICE_TEST,
};
return __vm_ioctl(vm, KVM_CREATE_DEVICE, &create_dev);
}
int __kvm_create_device(struct kvm_vm *vm, uint64_t type, int *fd)
{
struct kvm_create_device create_dev = {
.type = type,
.fd = -1,
.flags = 0,
};
int ret; int ret;
create_dev.type = type;
create_dev.fd = -1;
create_dev.flags = test ? KVM_CREATE_DEVICE_TEST : 0;
ret = __vm_ioctl(vm, KVM_CREATE_DEVICE, &create_dev); ret = __vm_ioctl(vm, KVM_CREATE_DEVICE, &create_dev);
*fd = create_dev.fd; *fd = create_dev.fd;
return ret; return ret;
...@@ -1646,7 +1657,7 @@ int kvm_create_device(struct kvm_vm *vm, uint64_t type) ...@@ -1646,7 +1657,7 @@ int kvm_create_device(struct kvm_vm *vm, uint64_t type)
{ {
int fd, ret; int fd, ret;
ret = _kvm_create_device(vm, type, false, &fd); ret = __kvm_create_device(vm, type, &fd);
TEST_ASSERT(!ret, "KVM_CREATE_DEVICE IOCTL failed, rc: %i errno: %i", ret, errno); TEST_ASSERT(!ret, "KVM_CREATE_DEVICE IOCTL failed, rc: %i errno: %i", ret, errno);
return fd; return fd;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment