]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
IB/uverbs: Set IOVA on IB MR in uverbs layer
authorYishai Hadas <yishaih@mellanox.com>
Tue, 30 Jun 2020 09:39:11 +0000 (12:39 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 21 Aug 2020 11:07:33 +0000 (13:07 +0200)
[ Upstream commit 04c0a5fcfcf65aade2fb238b6336445f1a99b646 ]

Set IOVA on IB MR in uverbs layer to let all drivers have it, this
includes both reg/rereg MR flows.
As part of this change cleaned-up this setting from the drivers that
already did it by themselves in their user flows.

Fixes: e6f0330106f4 ("mlx4_ib: set user mr attributes in struct ib_mr")
Link: https://lore.kernel.org/r/20200630093916.332097-3-leon@kernel.org
Signed-off-by: Yishai Hadas <yishaih@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/infiniband/core/uverbs_cmd.c
drivers/infiniband/hw/cxgb4/mem.c
drivers/infiniband/hw/mlx4/mr.c

index d6e9cc94dd900e95594f43cbdd6ddf0b7665fa0f..b2eb87d18e60276825f1550b7a232725fb4d25bc 100644 (file)
@@ -772,6 +772,7 @@ static int ib_uverbs_reg_mr(struct uverbs_attr_bundle *attrs)
        mr->uobject = uobj;
        atomic_inc(&pd->usecnt);
        mr->res.type = RDMA_RESTRACK_MR;
+       mr->iova = cmd.hca_va;
        rdma_restrack_uadd(&mr->res);
 
        uobj->object = mr;
@@ -863,6 +864,9 @@ static int ib_uverbs_rereg_mr(struct uverbs_attr_bundle *attrs)
                atomic_dec(&old_pd->usecnt);
        }
 
+       if (cmd.flags & IB_MR_REREG_TRANS)
+               mr->iova = cmd.hca_va;
+
        memset(&resp, 0, sizeof(resp));
        resp.lkey      = mr->lkey;
        resp.rkey      = mr->rkey;
index 962dc97a8ff2bc837cecf151c758677443fa009a..1e4f4e5255980fcb94a9a25d3dff95aaf065ed28 100644 (file)
@@ -399,7 +399,6 @@ static int finish_mem_reg(struct c4iw_mr *mhp, u32 stag)
        mmid = stag >> 8;
        mhp->ibmr.rkey = mhp->ibmr.lkey = stag;
        mhp->ibmr.length = mhp->attr.len;
-       mhp->ibmr.iova = mhp->attr.va_fbo;
        mhp->ibmr.page_size = 1U << (mhp->attr.page_size + 12);
        pr_debug("mmid 0x%x mhp %p\n", mmid, mhp);
        return xa_insert_irq(&mhp->rhp->mrs, mmid, mhp, GFP_KERNEL);
index b0121c90c561fa3b784f3299765ae781d8a8a7f9..184a281f89ec824cabc93032a7e8820a0a9d9ab2 100644 (file)
@@ -439,7 +439,6 @@ struct ib_mr *mlx4_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
 
        mr->ibmr.rkey = mr->ibmr.lkey = mr->mmr.key;
        mr->ibmr.length = length;
-       mr->ibmr.iova = virt_addr;
        mr->ibmr.page_size = 1U << shift;
 
        return &mr->ibmr;