Message ID | 20230912130132.561193-7-dtatulea@nvidia.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | vdpa: Add support for vq descriptor mappings | expand |
On Tue, Sep 12, 2023 at 9:02 PM Dragos Tatulea <dtatulea@nvidia.com> wrote: > > The reslock is taken while refresh is called but iommu_lock is more > specific to this resource. So take the iommu_lock during cvq iotlb > refresh. > > Based on Eugenio's patch [0]. > > [0] https://lore.kernel.org/lkml/20230112142218.725622-4-eperezma@redhat.com/ > > Suggested-by: Eugenio Pérez <eperezma@redhat.com> > Signed-off-by: Dragos Tatulea <dtatulea@nvidia.com> Acked-by: Jason Wang <jasowang@redhat.com> Thanks > --- > drivers/vdpa/mlx5/core/mr.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/drivers/vdpa/mlx5/core/mr.c b/drivers/vdpa/mlx5/core/mr.c > index fcb6ae32e9ed..587300e7c18e 100644 > --- a/drivers/vdpa/mlx5/core/mr.c > +++ b/drivers/vdpa/mlx5/core/mr.c > @@ -590,11 +590,19 @@ int mlx5_vdpa_update_cvq_iotlb(struct mlx5_vdpa_dev *mvdev, > struct vhost_iotlb *iotlb, > unsigned int asid) > { > + int err; > + > if (mvdev->group2asid[MLX5_VDPA_CVQ_GROUP] != asid) > return 0; > > + spin_lock(&mvdev->cvq.iommu_lock); > + > prune_iotlb(mvdev); > - return dup_iotlb(mvdev, iotlb); > + err = dup_iotlb(mvdev, iotlb); > + > + spin_unlock(&mvdev->cvq.iommu_lock); > + > + return err; > } > > int mlx5_vdpa_create_dma_mr(struct mlx5_vdpa_dev *mvdev) > -- > 2.41.0 >
diff --git a/drivers/vdpa/mlx5/core/mr.c b/drivers/vdpa/mlx5/core/mr.c index fcb6ae32e9ed..587300e7c18e 100644 --- a/drivers/vdpa/mlx5/core/mr.c +++ b/drivers/vdpa/mlx5/core/mr.c @@ -590,11 +590,19 @@ int mlx5_vdpa_update_cvq_iotlb(struct mlx5_vdpa_dev *mvdev, struct vhost_iotlb *iotlb, unsigned int asid) { + int err; + if (mvdev->group2asid[MLX5_VDPA_CVQ_GROUP] != asid) return 0; + spin_lock(&mvdev->cvq.iommu_lock); + prune_iotlb(mvdev); - return dup_iotlb(mvdev, iotlb); + err = dup_iotlb(mvdev, iotlb); + + spin_unlock(&mvdev->cvq.iommu_lock); + + return err; } int mlx5_vdpa_create_dma_mr(struct mlx5_vdpa_dev *mvdev)
The reslock is taken while refresh is called but iommu_lock is more specific to this resource. So take the iommu_lock during cvq iotlb refresh. Based on Eugenio's patch [0]. [0] https://lore.kernel.org/lkml/20230112142218.725622-4-eperezma@redhat.com/ Suggested-by: Eugenio Pérez <eperezma@redhat.com> Signed-off-by: Dragos Tatulea <dtatulea@nvidia.com> --- drivers/vdpa/mlx5/core/mr.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)