Message ID | 1458788142-17509-4-git-send-email-peterx@redhat.com |
---|---|
State | New |
Headers | show |
On 24/03/16 05:55, Peter Xu wrote: > This can be used when probing whether KVM support specific device. Here, > a raw vmfd is used. > > Signed-off-by: Peter Xu <peterx@redhat.com> Acked-by: Sergey Fedorov <serge.fdrv@gmail.com> Kind regards, Sergey > --- > include/sysemu/kvm.h | 9 +++++++++ > kvm-all.c | 15 +++++++++++++++ > 2 files changed, 24 insertions(+) > > diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h > index 6695fa7..0e18f15 100644 > --- a/include/sysemu/kvm.h > +++ b/include/sysemu/kvm.h > @@ -306,6 +306,15 @@ void kvm_device_access(int fd, int group, uint64_t attr, > */ > int kvm_create_device(KVMState *s, uint64_t type, bool test); > > +/** > + * kvm_device_supported - probe whether KVM supports specific device > + * > + * @vmfd: The fd handler for VM > + * @type: type of device > + * > + * @return: true if supported, otherwise false. > + */ > +bool kvm_device_supported(int vmfd, uint64_t type); > > /* Arch specific hooks */ > > diff --git a/kvm-all.c b/kvm-all.c > index 44c0464..e7b66df 100644 > --- a/kvm-all.c > +++ b/kvm-all.c > @@ -2339,6 +2339,21 @@ int kvm_create_device(KVMState *s, uint64_t type, bool test) > return test ? 0 : create_dev.fd; > } > > +bool kvm_device_supported(int vmfd, uint64_t type) > +{ > + struct kvm_create_device create_dev = { > + .type = type, > + .fd = -1, > + .flags = KVM_CREATE_DEVICE_TEST, > + }; > + > + if (ioctl(vmfd, KVM_CHECK_EXTENSION, KVM_CAP_DEVICE_CTRL) <= 0) { > + return false; > + } > + > + return (ioctl(vmfd, KVM_CREATE_DEVICE, &create_dev) >= 0); > +} > + > int kvm_set_one_reg(CPUState *cs, uint64_t id, void *source) > { > struct kvm_one_reg reg;
diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h index 6695fa7..0e18f15 100644 --- a/include/sysemu/kvm.h +++ b/include/sysemu/kvm.h @@ -306,6 +306,15 @@ void kvm_device_access(int fd, int group, uint64_t attr, */ int kvm_create_device(KVMState *s, uint64_t type, bool test); +/** + * kvm_device_supported - probe whether KVM supports specific device + * + * @vmfd: The fd handler for VM + * @type: type of device + * + * @return: true if supported, otherwise false. + */ +bool kvm_device_supported(int vmfd, uint64_t type); /* Arch specific hooks */ diff --git a/kvm-all.c b/kvm-all.c index 44c0464..e7b66df 100644 --- a/kvm-all.c +++ b/kvm-all.c @@ -2339,6 +2339,21 @@ int kvm_create_device(KVMState *s, uint64_t type, bool test) return test ? 0 : create_dev.fd; } +bool kvm_device_supported(int vmfd, uint64_t type) +{ + struct kvm_create_device create_dev = { + .type = type, + .fd = -1, + .flags = KVM_CREATE_DEVICE_TEST, + }; + + if (ioctl(vmfd, KVM_CHECK_EXTENSION, KVM_CAP_DEVICE_CTRL) <= 0) { + return false; + } + + return (ioctl(vmfd, KVM_CREATE_DEVICE, &create_dev) >= 0); +} + int kvm_set_one_reg(CPUState *cs, uint64_t id, void *source) { struct kvm_one_reg reg;
This can be used when probing whether KVM support specific device. Here, a raw vmfd is used. Signed-off-by: Peter Xu <peterx@redhat.com> --- include/sysemu/kvm.h | 9 +++++++++ kvm-all.c | 15 +++++++++++++++ 2 files changed, 24 insertions(+)