vdpa/mlx5: Take cvq iotlb lock during refresh
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>
This commit is contained in:
parent
512c0cdd80
commit
4c6b97416a
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user