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/
Acked-by: Jason Wang <jasowang@redhat.com>
Suggested-by: Eugenio Pérez <eperezma@redhat.com>
Reviewed-by: Eugenio Pérez <eperezma@redhat.com>
Signed-off-by: Dragos Tatulea <dtatulea@nvidia.com>
Message-Id: <
20231018171456.
1624030-9-dtatulea@nvidia.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Si-Wei Liu <si-wei.liu@oracle.com>
Tested-by: Si-Wei Liu <si-wei.liu@oracle.com>
Tested-by: Lei Yang <leiyang@redhat.com>
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)