diff options
author | Dragos Tatulea <[email protected]> | 2023-10-18 20:14:46 +0300 |
---|---|---|
committer | Michael S. Tsirkin <[email protected]> | 2023-11-01 09:19:56 -0400 |
commit | 4c6b97416a0427146c221039ed62718c9e897ec0 (patch) | |
tree | da6839e7949656f0d25500bf3e6e8391e06db6e1 | |
parent | 512c0cdd80c19ec11f6dbe769d5899dcfefcd5c9 (diff) |
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/[email protected]/
Acked-by: Jason Wang <[email protected]>
Suggested-by: Eugenio Pérez <[email protected]>
Reviewed-by: Eugenio Pérez <[email protected]>
Signed-off-by: Dragos Tatulea <[email protected]>
Message-Id: <[email protected]>
Signed-off-by: Michael S. Tsirkin <[email protected]>
Reviewed-by: Si-Wei Liu <[email protected]>
Tested-by: Si-Wei Liu <[email protected]>
Tested-by: Lei Yang <[email protected]>
-rw-r--r-- | drivers/vdpa/mlx5/core/mr.c | 10 |
1 files changed, 9 insertions, 1 deletions
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) |