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: Sean Christopherson <seanjc@google.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
f3165dc022
commit
98f94ce42a
4 changed files with 25 additions and 14 deletions
|
@ -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, ...);
|
||||||
|
|
||||||
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,
|
||||||
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)
|
||||||
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)
|
||||||
{
|
{
|
||||||
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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue