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 <gws...@linux.vnet.ibm.com> --- 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; } -- 1.8.3.2