[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implement
From: |
Liu, Yi L |
Subject: |
Re: [Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation |
Date: |
Wed, 10 Jul 2019 12:16:14 +0000 |
> From: Peter Xu [mailto:address@hidden]
> Sent: Tuesday, July 9, 2019 10:24 AM
> To: Liu, Yi L <address@hidden>
> Subject: Re: [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation
>
> On Fri, Jul 05, 2019 at 07:01:38PM +0800, Liu Yi L wrote:
> > This patch adds vfio implementation PCIPASIDOps.alloc_pasid/free_pasid().
> > These two functions are used to propagate guest pasid allocation and
> > free requests to host via vfio container ioctl.
> >
> > Cc: Kevin Tian <address@hidden>
> > Cc: Jacob Pan <address@hidden>
> > Cc: Peter Xu <address@hidden>
> > Cc: Eric Auger <address@hidden>
> > Cc: Yi Sun <address@hidden>
> > Cc: David Gibson <address@hidden>
> > Signed-off-by: Liu Yi L <address@hidden>
> > Signed-off-by: Yi Sun <address@hidden>
> > ---
> > hw/vfio/pci.c | 61
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 61 insertions(+)
> >
> > diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
> > index ce3fe96..ab184ad 100644
> > --- a/hw/vfio/pci.c
> > +++ b/hw/vfio/pci.c
> > @@ -2690,6 +2690,65 @@ static void
> > vfio_unregister_req_notifier(VFIOPCIDevice
> *vdev)
> > vdev->req_enabled = false;
> > }
> >
> > +static int vfio_pci_device_request_pasid_alloc(PCIBus *bus,
> > + int32_t devfn,
> > + uint32_t min_pasid,
> > + uint32_t max_pasid)
> > +{
> > + PCIDevice *pdev = bus->devices[devfn];
> > + VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev);
> > + VFIOContainer *container = vdev->vbasedev.group->container;
> > + struct vfio_iommu_type1_pasid_request req;
> > + unsigned long argsz;
> > + int pasid;
> > +
> > + argsz = sizeof(req);
> > + req.argsz = argsz;
> > + req.flag = VFIO_IOMMU_PASID_ALLOC;
> > + req.min_pasid = min_pasid;
> > + req.max_pasid = max_pasid;
> > +
> > + rcu_read_lock();
>
> Could I ask what's this RCU lock protecting?
good catch, let me remove it.
>
> > + pasid = ioctl(container->fd, VFIO_IOMMU_PASID_REQUEST, &req);
> > + if (pasid < 0) {
> > + error_report("vfio_pci_device_request_pasid_alloc:"
> > + " request failed, contanier: %p", container);
>
> Can use __func__, also since we're going to dump the error after all,
> we can also include the errno (pasid) here which seems to be more
> helpful than the container pointer at least to me. :)
accepted, thanks.
> > + }
> > + rcu_read_unlock();
> > + return pasid;
> > +}
> > +
> > +static int vfio_pci_device_request_pasid_free(PCIBus *bus,
> > + int32_t devfn,
> > + uint32_t pasid)
> > +{
> > + PCIDevice *pdev = bus->devices[devfn];
> > + VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev);
> > + VFIOContainer *container = vdev->vbasedev.group->container;
> > + struct vfio_iommu_type1_pasid_request req;
> > + unsigned long argsz;
> > + int ret = 0;
> > +
> > + argsz = sizeof(req);
> > + req.argsz = argsz;
> > + req.flag = VFIO_IOMMU_PASID_FREE;
> > + req.pasid = pasid;
> > +
> > + rcu_read_lock();
> > + ret = ioctl(container->fd, VFIO_IOMMU_PASID_REQUEST, &req);
> > + if (ret != 0) {
> > + error_report("vfio_pci_device_request_pasid_free:"
> > + " request failed, contanier: %p", container);
> > + }
> > + rcu_read_unlock();
> > + return ret;
> > +}
> > +
> > +static PCIPASIDOps vfio_pci_pasid_ops = {
> > + .alloc_pasid = vfio_pci_device_request_pasid_alloc,
> > + .free_pasid = vfio_pci_device_request_pasid_free,
> > +};
> > +
> > static void vfio_realize(PCIDevice *pdev, Error **errp)
> > {
> > VFIOPCIDevice *vdev = PCI_VFIO(pdev);
> > @@ -2991,6 +3050,8 @@ static void vfio_realize(PCIDevice *pdev, Error
> > **errp)
> > vfio_register_req_notifier(vdev);
> > vfio_setup_resetfn_quirk(vdev);
> >
> > + pci_setup_pasid_ops(pdev, &vfio_pci_pasid_ops);
> > +
> > return;
> >
> > out_teardown:
> > --
> > 2.7.4
> >
>
> Regards,
>
> --
> Peter Xu
Thanks,
Yi Liu
- Re: [Qemu-devel] [RFC v1 04/18] intel_iommu: add "sm_model" option, (continued)
- [Qemu-devel] [RFC v1 03/18] hw/pci: introduce PCIPASIDOps to PCIDevice, Liu Yi L, 2019/07/06
- Re: [Qemu-devel] [RFC v1 03/18] hw/pci: introduce PCIPASIDOps to PCIDevice, Peter Xu, 2019/07/08
- Re: [Qemu-devel] [RFC v1 03/18] hw/pci: introduce PCIPASIDOps to PCIDevice, Auger Eric, 2019/07/09
- Re: [Qemu-devel] [RFC v1 03/18] hw/pci: introduce PCIPASIDOps to PCIDevice, Liu, Yi L, 2019/07/10
- Re: [Qemu-devel] [RFC v1 03/18] hw/pci: introduce PCIPASIDOps to PCIDevice, address@hidden, 2019/07/11
- Re: [Qemu-devel] [RFC v1 03/18] hw/pci: introduce PCIPASIDOps to PCIDevice, Liu, Yi L, 2019/07/11
[Qemu-devel] [RFC v1 01/18] linux-headers: import iommu.h from kernel, Liu Yi L, 2019/07/06
[Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation, Liu Yi L, 2019/07/06
- Re: [Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation, Peter Xu, 2019/07/08
- Re: [Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation,
Liu, Yi L <=
- Re: [Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation, David Gibson, 2019/07/15
- Re: [Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation, Liu, Yi L, 2019/07/16
- Re: [Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation, David Gibson, 2019/07/16
- Re: [Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation, Liu, Yi L, 2019/07/22
- Re: [Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation, David Gibson, 2019/07/23
- Re: [Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation, Liu, Yi L, 2019/07/24
- Re: [Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation, Auger Eric, 2019/07/24
- Re: [Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation, Liu, Yi L, 2019/07/26
- Re: [Qemu-devel] [RFC v1 05/18] vfio/pci: add pasid alloc/free implementation, David Gibson, 2019/07/26
[Qemu-devel] [RFC v1 06/18] intel_iommu: support virtual command emulation and pasid request, Liu Yi L, 2019/07/06