From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57575) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WscOL-0003f5-8z for qemu-devel@nongnu.org; Thu, 05 Jun 2014 14:28:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WscOD-0001PZ-Mn for qemu-devel@nongnu.org; Thu, 05 Jun 2014 14:27:57 -0400 Message-ID: <1401992843.9207.203.camel@ul30vt.home> From: Alex Williamson Date: Thu, 05 Jun 2014 12:27:23 -0600 In-Reply-To: <1401951221-32613-4-git-send-email-gwshan@linux.vnet.ibm.com> References: <1401951221-32613-1-git-send-email-gwshan@linux.vnet.ibm.com> <1401951221-32613-4-git-send-email-gwshan@linux.vnet.ibm.com> Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v8 3/4] VFIO: Introduce helper vfio_pci_container_ioctl() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gavin Shan Cc: aik@ozlabs.ru, qemu-devel@nongnu.org, agraf@suse.de, qiudayu@linux.vnet.ibm.com, qemu-ppc@nongnu.org On Thu, 2014-06-05 at 16:53 +1000, Gavin Shan wrote: > The patch introduces helper function vfio_pci_container_ioctl() to > pass ioctl commands to the specified VFIO container that is identified > by IOMMU group id. On sPAPR platform, each container only has one > IOMMU group. > > Signed-off-by: Gavin Shan > --- > hw/misc/vfio.c | 31 +++++++++++++++++++++++++++++++ > include/hw/misc/vfio.h | 2 ++ > 2 files changed, 33 insertions(+) > > diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c > index 0796abf..999d97d 100644 > --- a/hw/misc/vfio.c > +++ b/hw/misc/vfio.c > @@ -4310,3 +4310,34 @@ put_group_exit: > > return n; > } > + > +int vfio_pci_container_ioctl(int iommu_group_id, int req, int opt) > +{ > + VFIOGroup *group; > + int ret, fd = 0; > + > + /* Search container's fd */ > + QLIST_FOREACH(group, &group_list, next) { > + if (group->groupid == iommu_group_id) { > + fd = group->container ? group->container->fd : 0; > + break; > + } > + } > + > + if (fd <= 0) { > + return -ENOENT; > + } > + > + switch (req) { > + case VFIO_EEH_PE_OP: { > + struct vfio_eeh_pe_op op = { .argsz = sizeof(op), .op = opt }; > + > + ret = ioctl(fd, req, &op); > + break; In addition to fd 0 being valid, there's some white space issues here. Passing an integer option is not very extensible, maybe a void* that gets cast to an int* for VFIO_EEH_PE_OP would be better. It's a qemu internal API though, so I'm not going to sweat saving that problem for the next user. Thanks, Alex > + } > + default: > + ret = -EINVAL; > + } > + > + return ret; > +} > diff --git a/include/hw/misc/vfio.h b/include/hw/misc/vfio.h > index 53ec665..dc92fae 100644 > --- a/include/hw/misc/vfio.h > +++ b/include/hw/misc/vfio.h > @@ -30,4 +30,6 @@ static inline long vfio_kvm_notify(Notifier *n, unsigned request, void *data) > return p.ret; > } > > +extern int vfio_pci_container_ioctl(int iommu_group_id, int req, int opt); > + > #endif