Message ID | 20230923170540.1447301-5-lulu@redhat.com (mailing list archive) |
---|---|
State | RFC |
Headers | show |
Series | vdpa: Add support for iommufd | expand |
Context | Check | Description |
---|---|---|
netdev/tree_selection | success | Not a local patch |
On Sun, Sep 24, 2023 at 01:05:37AM +0800, Cindy Lu wrote: > Add the check for iommufd_ictx,If vdpa don't have the iommufd_ictx > then will use the Legacy iommu domain pathway > > Signed-off-by: Cindy Lu <lulu@redhat.com> > --- > drivers/vhost/vdpa.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c > index 91da012084e9..8d1ad89d4671 100644 > --- a/drivers/vhost/vdpa.c > +++ b/drivers/vhost/vdpa.c > @@ -981,6 +981,10 @@ static int vhost_vdpa_map(struct vhost_vdpa *v, struct vhost_iotlb *iotlb, > } else if (ops->set_map) { > if (!v->in_batch) > r = ops->set_map(vdpa, asid, iotlb); > + } else if (!vdpa->iommufd_ictx) { > + /* Legacy iommu domain pathway without IOMMUFD */ > + r = iommu_map(v->domain, iova, pa, size, > + perm_to_iommu_flags(perm)); > } else { > r = iommu_map(v->domain, iova, pa, size, > perm_to_iommu_flags(perm)); Um, why is the 2nd else the same as the new one? Jason
On Mon, Sep 25, 2023 at 9:45 PM Jason Gunthorpe <jgg@nvidia.com> wrote: > > On Sun, Sep 24, 2023 at 01:05:37AM +0800, Cindy Lu wrote: > > Add the check for iommufd_ictx,If vdpa don't have the iommufd_ictx > > then will use the Legacy iommu domain pathway > > > > Signed-off-by: Cindy Lu <lulu@redhat.com> > > --- > > drivers/vhost/vdpa.c | 10 ++++++++++ > > 1 file changed, 10 insertions(+) > > > > diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c > > index 91da012084e9..8d1ad89d4671 100644 > > --- a/drivers/vhost/vdpa.c > > +++ b/drivers/vhost/vdpa.c > > @@ -981,6 +981,10 @@ static int vhost_vdpa_map(struct vhost_vdpa *v, struct vhost_iotlb *iotlb, > > } else if (ops->set_map) { > > if (!v->in_batch) > > r = ops->set_map(vdpa, asid, iotlb); > > + } else if (!vdpa->iommufd_ictx) { > > + /* Legacy iommu domain pathway without IOMMUFD */ > > + r = iommu_map(v->domain, iova, pa, size, > > + perm_to_iommu_flags(perm)); > > } else { > > r = iommu_map(v->domain, iova, pa, size, > > perm_to_iommu_flags(perm)); > > Um, why is the 2nd else the same as the new one? > the code here seems not in a good logic, I will try to optimize it in the next version Thanks Cindy > Jason >
diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c index 91da012084e9..8d1ad89d4671 100644 --- a/drivers/vhost/vdpa.c +++ b/drivers/vhost/vdpa.c @@ -981,6 +981,10 @@ static int vhost_vdpa_map(struct vhost_vdpa *v, struct vhost_iotlb *iotlb, } else if (ops->set_map) { if (!v->in_batch) r = ops->set_map(vdpa, asid, iotlb); + } else if (!vdpa->iommufd_ictx) { + /* Legacy iommu domain pathway without IOMMUFD */ + r = iommu_map(v->domain, iova, pa, size, + perm_to_iommu_flags(perm)); } else { r = iommu_map(v->domain, iova, pa, size, perm_to_iommu_flags(perm)); @@ -1009,6 +1013,9 @@ static void vhost_vdpa_unmap(struct vhost_vdpa *v, if (ops->set_map) { if (!v->in_batch) ops->set_map(vdpa, asid, iotlb); + } else if (!vdpa->iommufd_ictx) { + /* Legacy iommu domain pathway without IOMMUFD */ + iommu_unmap(v->domain, iova, size); } /* If we are in the middle of batch processing, delay the free * of AS until BATCH_END. @@ -1337,6 +1344,8 @@ static void vhost_vdpa_free_domain(struct vhost_vdpa *v) iommu_detach_device(v->domain, dma_dev); iommu_domain_free(v->domain); } + if (vdpa->iommufd_ictx) + vdpa_iommufd_unbind(vdpa); v->domain = NULL; } @@ -1560,6 +1569,7 @@ static int vhost_vdpa_probe(struct vdpa_device *vdpa) } atomic_set(&v->opened, 0); + atomic_set(&vdpa->iommufd_users, 0); v->minor = minor; v->vdpa = vdpa; v->nvqs = vdpa->nvqs;
Add the check for iommufd_ictx,If vdpa don't have the iommufd_ictx then will use the Legacy iommu domain pathway Signed-off-by: Cindy Lu <lulu@redhat.com> --- drivers/vhost/vdpa.c | 10 ++++++++++ 1 file changed, 10 insertions(+)