From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60655) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aj1M4-0006wL-Ax for qemu-devel@nongnu.org; Thu, 24 Mar 2016 05:15:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aj1M3-00040H-DM for qemu-devel@nongnu.org; Thu, 24 Mar 2016 05:15:00 -0400 References: <1458788142-17509-1-git-send-email-peterx@redhat.com> <1458788142-17509-4-git-send-email-peterx@redhat.com> From: Sergey Fedorov Message-ID: <56F3B008.7050207@gmail.com> Date: Thu, 24 Mar 2016 12:14:48 +0300 MIME-Version: 1.0 In-Reply-To: <1458788142-17509-4-git-send-email-peterx@redhat.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v7 3/4] kvm: add kvm_device_supported() helper function List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Xu , qemu-devel@nongnu.org Cc: wei@redhat.com, peter.maydell@linaro.org, drjones@redhat.com, mdroth@linux.vnet.ibm.com, libvir-list@redhat.com, armbru@redhat.com, abologna@redhat.com, qemu-arm@nongnu.org, christoffer.dall@linaro.org 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 Acked-by: Sergey Fedorov 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;