From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37087) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XMDyf-0003PB-NI for qemu-devel@nongnu.org; Tue, 26 Aug 2014 06:27:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XMDyW-0004Z6-CA for qemu-devel@nongnu.org; Tue, 26 Aug 2014 06:27:49 -0400 Received: from mail-pd0-f169.google.com ([209.85.192.169]:52771) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XMDyW-0004Yy-6g for qemu-devel@nongnu.org; Tue, 26 Aug 2014 06:27:40 -0400 Received: by mail-pd0-f169.google.com with SMTP id y10so22362709pdj.28 for ; Tue, 26 Aug 2014 03:27:36 -0700 (PDT) Message-ID: <53FC6113.5030909@ozlabs.ru> Date: Tue, 26 Aug 2014 20:27:31 +1000 From: Alexey Kardashevskiy MIME-Version: 1.0 References: <1408528328-11560-1-git-send-email-gwshan@linux.vnet.ibm.com> <1408528328-11560-2-git-send-email-gwshan@linux.vnet.ibm.com> In-Reply-To: <1408528328-11560-2-git-send-email-gwshan@linux.vnet.ibm.com> Content-Type: text/plain; charset=koi8-r Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [RFC PATCH 1/2] VFIO: Drop vfio_container_do_ioctl() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gavin Shan , qemu-devel@nongnu.org Cc: alex.williamson@redhat.com On 08/20/2014 07:52 PM, Gavin Shan wrote: > The patch drops vfio_container_do_ioctl() and merges its logic to > parent function call vfio_container_ioctl() so that the subsequent > patches can reused the found VFIO group in vfio_container_ioctl(). > > Signed-off-by: Gavin Shan > --- > hw/misc/vfio.c | 33 +++++++++++++++------------------ > 1 file changed, 15 insertions(+), 18 deletions(-) > > diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c > index 7d5f1bb..1a3e7eb 100644 > --- a/hw/misc/vfio.c > +++ b/hw/misc/vfio.c > @@ -4419,8 +4419,8 @@ static void register_vfio_pci_dev_type(void) > > type_init(register_vfio_pci_dev_type) > > -static int vfio_container_do_ioctl(AddressSpace *as, int32_t groupid, > - int req, void *param) > +int vfio_container_ioctl(AddressSpace *as, int32_t groupid, > + int req, void *param) > { > VFIOGroup *group; > VFIOContainer *container; > @@ -4433,22 +4433,11 @@ static int vfio_container_do_ioctl(AddressSpace *as, int32_t groupid, > } > > container = group->container; > - if (group->container) { > - ret = ioctl(container->fd, req, param); > - if (ret < 0) { > - error_report("vfio: failed to ioctl container: ret=%d, %s", > - ret, strerror(errno)); > - } > + if (!container) { > + error_report("vfio: no container for group %d\n", groupid); > + goto out; > } > > - vfio_put_group(group); > - > - return ret; > -} > - > -int vfio_container_ioctl(AddressSpace *as, int32_t groupid, > - int req, void *param) > -{ > /* We allow only certain ioctls to the container */ > switch (req) { > case VFIO_CHECK_EXTENSION: > @@ -4458,8 +4447,16 @@ int vfio_container_ioctl(AddressSpace *as, int32_t groupid, > default: > /* Return an error on unknown requests */ > error_report("vfio: unsupported ioctl %X", req); > - return -1; > + goto out; > } > > - return vfio_container_do_ioctl(as, groupid, req, param); > + ret = ioctl(container->fd, req, param); > + if (ret < 0) { > + error_report("vfio: failed to ioctl container: ret=%d, %s", > + ret, strerror(errno)); > + } > + > +out: > + vfio_put_group(group); > + return ret; Nack. We specifically separated an ioctl-filtering function and actual code which does ioctl. I understand that you want to save on vfio_get_group() calls for the next EEH patch but this is not a hot path anyway. > } > -- Alexey