| From e37aa599c68a72fd1fd52dbad45a49e31f554333 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sun, 6 Jun 2021 08:31:50 +0300 |
| Subject: vdp/mlx5: Fix setting the correct dma_device |
| |
| From: Eli Cohen <elic@nvidia.com> |
| |
| [ Upstream commit 7d23dcdf213c2e5f097eb7eec3148c26eb01d59f ] |
| |
| Before SF support was introduced, the DMA device was equal to |
| mdev->device which was in essence equal to pdev->dev. |
| |
| With SF introduction this is no longer true. It has already been |
| handled for vhost_vdpa since the reference to the dma device can from |
| within mlx5_vdpa. With virtio_vdpa this broke. To fix this we set the |
| real dma device when initializing the device. |
| |
| In addition, for the sake of consistency, previous references in the |
| code to the dma device are changed to vdev->dma_dev. |
| |
| Fixes: d13a15d544ce5 ("vdpa/mlx5: Use the correct dma device when registering memory") |
| Signed-off-by: Eli Cohen <elic@nvidia.com> |
| Link: https://lore.kernel.org/r/20210606053150.170489-1-elic@nvidia.com |
| Signed-off-by: Michael S. Tsirkin <mst@redhat.com> |
| Acked-by: Jason Wang <jasowang@redhat.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/vdpa/mlx5/core/mr.c | 9 ++------- |
| drivers/vdpa/mlx5/net/mlx5_vnet.c | 2 +- |
| 2 files changed, 3 insertions(+), 8 deletions(-) |
| |
| diff --git a/drivers/vdpa/mlx5/core/mr.c b/drivers/vdpa/mlx5/core/mr.c |
| index 800cfd1967ad..cfa56a58b271 100644 |
| --- a/drivers/vdpa/mlx5/core/mr.c |
| +++ b/drivers/vdpa/mlx5/core/mr.c |
| @@ -219,11 +219,6 @@ static void destroy_indirect_key(struct mlx5_vdpa_dev *mvdev, struct mlx5_vdpa_m |
| mlx5_vdpa_destroy_mkey(mvdev, &mkey->mkey); |
| } |
| |
| -static struct device *get_dma_device(struct mlx5_vdpa_dev *mvdev) |
| -{ |
| - return &mvdev->mdev->pdev->dev; |
| -} |
| - |
| static int map_direct_mr(struct mlx5_vdpa_dev *mvdev, struct mlx5_vdpa_direct_mr *mr, |
| struct vhost_iotlb *iotlb) |
| { |
| @@ -239,7 +234,7 @@ static int map_direct_mr(struct mlx5_vdpa_dev *mvdev, struct mlx5_vdpa_direct_mr |
| u64 pa; |
| u64 paend; |
| struct scatterlist *sg; |
| - struct device *dma = get_dma_device(mvdev); |
| + struct device *dma = mvdev->vdev.dma_dev; |
| |
| for (map = vhost_iotlb_itree_first(iotlb, mr->start, mr->end - 1); |
| map; map = vhost_iotlb_itree_next(map, start, mr->end - 1)) { |
| @@ -298,7 +293,7 @@ err_map: |
| |
| static void unmap_direct_mr(struct mlx5_vdpa_dev *mvdev, struct mlx5_vdpa_direct_mr *mr) |
| { |
| - struct device *dma = get_dma_device(mvdev); |
| + struct device *dma = mvdev->vdev.dma_dev; |
| |
| destroy_direct_mr(mvdev, mr); |
| dma_unmap_sg_attrs(dma, mr->sg_head.sgl, mr->nsg, DMA_BIDIRECTIONAL, 0); |
| diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c b/drivers/vdpa/mlx5/net/mlx5_vnet.c |
| index d5ea956a3a3a..85bcbbce1ef9 100644 |
| --- a/drivers/vdpa/mlx5/net/mlx5_vnet.c |
| +++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c |
| @@ -2017,7 +2017,7 @@ static int mlx5v_probe(struct auxiliary_device *adev, |
| goto err_mtu; |
| } |
| |
| - mvdev->vdev.dma_dev = mdev->device; |
| + mvdev->vdev.dma_dev = &mdev->pdev->dev; |
| err = mlx5_vdpa_alloc_resources(&ndev->mvdev); |
| if (err) |
| goto err_mpfs; |
| -- |
| 2.30.2 |
| |