]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
RDMA/mlx5: Remove iova from struct mlx5_core_mkey
authorAharon Landau <aharonl@nvidia.com>
Tue, 12 Oct 2021 10:26:30 +0000 (13:26 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Mar 2025 11:50:07 +0000 (12:50 +0100)
[ Upstream commit cf6a8b1b24d675afc35a01cccd081160014a0125 ]

iova is already stored in ibmr->iova, no need to store it here.

Signed-off-by: Aharon Landau <aharonl@nvidia.com>
Reviewed-by: Shay Drory <shayd@nvidia.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Stable-dep-of: 235f23840219 ("RDMA/mlx5: Fix indirect mkey ODP page count")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/infiniband/hw/mlx5/devx.c
drivers/infiniband/hw/mlx5/mr.c
drivers/infiniband/hw/mlx5/odp.c
drivers/net/ethernet/mellanox/mlx5/core/mr.c
drivers/vdpa/mlx5/core/resources.c
include/linux/mlx5/driver.h

index ef3585af402631a64cc579a0caea3d27db6946ab..55e28733512409cc93635c0891d3a278bb2f5016 100644 (file)
@@ -1317,7 +1317,6 @@ static int devx_handle_mkey_indirect(struct devx_obj *obj,
        mkey->key = mlx5_idx_to_mkey(
                        MLX5_GET(create_mkey_out, out, mkey_index)) | key;
        mkey->type = MLX5_MKEY_INDIRECT_DEVX;
-       mkey->iova = MLX5_GET64(mkc, mkc, start_addr);
        mkey->size = MLX5_GET64(mkc, mkc, len);
        mkey->pd = MLX5_GET(mkc, mkc, pd);
        devx_mr->ndescs = MLX5_GET(mkc, mkc, translations_octword_size);
index 191078b6e91293fc97d5b749d52b333795b8daed..768aba0987cce5c8a82b7cf269b3a211c5758763 100644 (file)
@@ -916,12 +916,13 @@ static struct mlx5_cache_ent *mr_cache_ent_from_order(struct mlx5_ib_dev *dev,
 }
 
 static void set_mr_fields(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr,
-                         u64 length, int access_flags)
+                         u64 length, int access_flags, u64 iova)
 {
        mr->ibmr.lkey = mr->mmkey.key;
        mr->ibmr.rkey = mr->mmkey.key;
        mr->ibmr.length = length;
        mr->ibmr.device = &dev->ib_dev;
+       mr->ibmr.iova = iova;
        mr->access_flags = access_flags;
 }
 
@@ -979,11 +980,10 @@ static struct mlx5_ib_mr *alloc_cacheable_mr(struct ib_pd *pd,
 
        mr->ibmr.pd = pd;
        mr->umem = umem;
-       mr->mmkey.iova = iova;
        mr->mmkey.size = umem->length;
        mr->mmkey.pd = to_mpd(pd)->pdn;
        mr->page_shift = order_base_2(page_size);
-       set_mr_fields(dev, mr, umem->length, access_flags);
+       set_mr_fields(dev, mr, umem->length, access_flags, iova);
 
        return mr;
 }
@@ -1093,7 +1093,7 @@ static void *mlx5_ib_create_xlt_wr(struct mlx5_ib_mr *mr,
        wr->pd = mr->ibmr.pd;
        wr->mkey = mr->mmkey.key;
        wr->length = mr->mmkey.size;
-       wr->virt_addr = mr->mmkey.iova;
+       wr->virt_addr = mr->ibmr.iova;
        wr->access_flags = mr->access_flags;
        wr->page_shift = mr->page_shift;
        wr->xlt_size = sg->length;
@@ -1345,7 +1345,7 @@ static struct mlx5_ib_mr *reg_create(struct ib_pd *pd, struct ib_umem *umem,
        }
        mr->mmkey.type = MLX5_MKEY_MR;
        mr->umem = umem;
-       set_mr_fields(dev, mr, umem->length, access_flags);
+       set_mr_fields(dev, mr, umem->length, access_flags, iova);
        kvfree(in);
 
        mlx5_ib_dbg(dev, "mkey = 0x%x\n", mr->mmkey.key);
@@ -1392,7 +1392,7 @@ static struct ib_mr *mlx5_ib_get_dm_mr(struct ib_pd *pd, u64 start_addr,
 
        kfree(in);
 
-       set_mr_fields(dev, mr, length, acc);
+       set_mr_fields(dev, mr, length, acc, start_addr);
 
        return &mr->ibmr;
 
@@ -1769,7 +1769,7 @@ static int umr_rereg_pas(struct mlx5_ib_mr *mr, struct ib_pd *pd,
        }
 
        mr->ibmr.length = new_umem->length;
-       mr->mmkey.iova = iova;
+       mr->ibmr.iova = iova;
        mr->mmkey.size = new_umem->length;
        mr->page_shift = order_base_2(page_size);
        mr->umem = new_umem;
@@ -1840,7 +1840,7 @@ struct ib_mr *mlx5_ib_rereg_user_mr(struct ib_mr *ib_mr, int flags, u64 start,
                mr->umem = NULL;
                atomic_sub(ib_umem_num_pages(umem), &dev->mdev->priv.reg_pages);
 
-               return create_real_mr(new_pd, umem, mr->mmkey.iova,
+               return create_real_mr(new_pd, umem, mr->ibmr.iova,
                                      new_access_flags);
        }
 
index 66e53e895d341c8f98fda1b1373ad32754696951..6ff65aaafcaa43710eb5eb03a0d40dabf8d9da05 100644 (file)
@@ -430,7 +430,7 @@ static struct mlx5_ib_mr *implicit_get_child_mr(struct mlx5_ib_mr *imr,
        mr->umem = &odp->umem;
        mr->ibmr.lkey = mr->mmkey.key;
        mr->ibmr.rkey = mr->mmkey.key;
-       mr->mmkey.iova = idx * MLX5_IMR_MTT_SIZE;
+       mr->ibmr.iova = idx * MLX5_IMR_MTT_SIZE;
        mr->parent = imr;
        odp->private = mr;
 
@@ -500,7 +500,7 @@ struct mlx5_ib_mr *mlx5_ib_alloc_implicit_mr(struct mlx5_ib_pd *pd,
        }
 
        imr->ibmr.pd = &pd->ibpd;
-       imr->mmkey.iova = 0;
+       imr->ibmr.iova = 0;
        imr->umem = &umem_odp->umem;
        imr->ibmr.lkey = imr->mmkey.key;
        imr->ibmr.rkey = imr->mmkey.key;
@@ -736,7 +736,7 @@ static int pagefault_mr(struct mlx5_ib_mr *mr, u64 io_virt, size_t bcnt,
 {
        struct ib_umem_odp *odp = to_ib_umem_odp(mr->umem);
 
-       if (unlikely(io_virt < mr->mmkey.iova))
+       if (unlikely(io_virt < mr->ibmr.iova))
                return -EFAULT;
 
        if (mr->umem->is_dmabuf)
@@ -745,7 +745,7 @@ static int pagefault_mr(struct mlx5_ib_mr *mr, u64 io_virt, size_t bcnt,
        if (!odp->is_implicit_odp) {
                u64 user_va;
 
-               if (check_add_overflow(io_virt - mr->mmkey.iova,
+               if (check_add_overflow(io_virt - mr->ibmr.iova,
                                       (u64)odp->umem.address, &user_va))
                        return -EFAULT;
                if (unlikely(user_va >= ib_umem_end(odp) ||
index 174f71ed52800c2c4cd5c6486cd7910c50a0e139..d239d559994fad644ef09ef073d5e45c3950ee1d 100644 (file)
@@ -52,7 +52,6 @@ int mlx5_core_create_mkey(struct mlx5_core_dev *dev,
 
        mkc = MLX5_ADDR_OF(create_mkey_in, in, memory_key_mkey_entry);
        mkey_index = MLX5_GET(create_mkey_out, lout, mkey_index);
-       mkey->iova = MLX5_GET64(mkc, mkc, start_addr);
        mkey->size = MLX5_GET64(mkc, mkc, len);
        mkey->key = (u32)mlx5_mkey_variant(mkey->key) | mlx5_idx_to_mkey(mkey_index);
        mkey->pd = MLX5_GET(mkc, mkc, pd);
index 15e266d0e27a561862d004ad326c1ef25609ceb6..14d4314cdc295c28e9ed7c55c599f9534d241a2c 100644 (file)
@@ -215,7 +215,6 @@ int mlx5_vdpa_create_mkey(struct mlx5_vdpa_dev *mvdev, struct mlx5_core_mkey *mk
 
        mkc = MLX5_ADDR_OF(create_mkey_in, in, memory_key_mkey_entry);
        mkey_index = MLX5_GET(create_mkey_out, lout, mkey_index);
-       mkey->iova = MLX5_GET64(mkc, mkc, start_addr);
        mkey->size = MLX5_GET64(mkc, mkc, len);
        mkey->key |= mlx5_idx_to_mkey(mkey_index);
        mkey->pd = MLX5_GET(mkc, mkc, pd);
index 62d60a515b038542d78a8c3f3b74309f0dbf3fd7..8f0c321674a88a5c3a909a5f2cac3d3db56ce606 100644 (file)
@@ -364,7 +364,6 @@ enum {
 };
 
 struct mlx5_core_mkey {
-       u64                     iova;
        u64                     size;
        u32                     key;
        u32                     pd;