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-epere...@redhat.com/

Suggested-by: Eugenio PĂ©rez <epere...@redhat.com>
Signed-off-by: Dragos Tatulea <dtatu...@nvidia.com>
---
 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

_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

Reply via email to