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@xxxxxxxxxx> Acked-by: Sergey Fedorov <serge.fdrv@xxxxxxxxx> 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; -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list