IB/uverbs: Set IOVA on IB MR in uverbs layer
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>
This commit is contained in:
parent
263427526f
commit
04c0a5fcfc
@ -764,6 +764,7 @@ static int ib_uverbs_reg_mr(struct uverbs_attr_bundle *attrs)
|
|||||||
mr->uobject = uobj;
|
mr->uobject = uobj;
|
||||||
atomic_inc(&pd->usecnt);
|
atomic_inc(&pd->usecnt);
|
||||||
mr->res.type = RDMA_RESTRACK_MR;
|
mr->res.type = RDMA_RESTRACK_MR;
|
||||||
|
mr->iova = cmd.hca_va;
|
||||||
rdma_restrack_uadd(&mr->res);
|
rdma_restrack_uadd(&mr->res);
|
||||||
|
|
||||||
uobj->object = mr;
|
uobj->object = mr;
|
||||||
@ -855,6 +856,9 @@ static int ib_uverbs_rereg_mr(struct uverbs_attr_bundle *attrs)
|
|||||||
atomic_dec(&old_pd->usecnt);
|
atomic_dec(&old_pd->usecnt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cmd.flags & IB_MR_REREG_TRANS)
|
||||||
|
mr->iova = cmd.hca_va;
|
||||||
|
|
||||||
memset(&resp, 0, sizeof(resp));
|
memset(&resp, 0, sizeof(resp));
|
||||||
resp.lkey = mr->lkey;
|
resp.lkey = mr->lkey;
|
||||||
resp.rkey = mr->rkey;
|
resp.rkey = mr->rkey;
|
||||||
|
@ -399,7 +399,6 @@ static int finish_mem_reg(struct c4iw_mr *mhp, u32 stag)
|
|||||||
mmid = stag >> 8;
|
mmid = stag >> 8;
|
||||||
mhp->ibmr.rkey = mhp->ibmr.lkey = stag;
|
mhp->ibmr.rkey = mhp->ibmr.lkey = stag;
|
||||||
mhp->ibmr.length = mhp->attr.len;
|
mhp->ibmr.length = mhp->attr.len;
|
||||||
mhp->ibmr.iova = mhp->attr.va_fbo;
|
|
||||||
mhp->ibmr.page_size = 1U << (mhp->attr.page_size + 12);
|
mhp->ibmr.page_size = 1U << (mhp->attr.page_size + 12);
|
||||||
pr_debug("mmid 0x%x mhp %p\n", mmid, mhp);
|
pr_debug("mmid 0x%x mhp %p\n", mmid, mhp);
|
||||||
return xa_insert_irq(&mhp->rhp->mrs, mmid, mhp, GFP_KERNEL);
|
return xa_insert_irq(&mhp->rhp->mrs, mmid, mhp, GFP_KERNEL);
|
||||||
|
@ -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.rkey = mr->ibmr.lkey = mr->mmr.key;
|
||||||
mr->ibmr.length = length;
|
mr->ibmr.length = length;
|
||||||
mr->ibmr.iova = virt_addr;
|
|
||||||
mr->ibmr.page_size = 1U << shift;
|
mr->ibmr.page_size = 1U << shift;
|
||||||
|
|
||||||
return &mr->ibmr;
|
return &mr->ibmr;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user