| From 04c0a5fcfcf65aade2fb238b6336445f1a99b646 Mon Sep 17 00:00:00 2001 |
| From: Yishai Hadas <yishaih@mellanox.com> |
| Date: Tue, 30 Jun 2020 12:39:11 +0300 |
| Subject: [PATCH] IB/uverbs: Set IOVA on IB MR in uverbs layer |
| |
| commit 04c0a5fcfcf65aade2fb238b6336445f1a99b646 upstream. |
| |
| 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> |
| |
| diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c |
| index 89ff5d06c5d7..68c9a0210220 100644 |
| --- a/drivers/infiniband/core/uverbs_cmd.c |
| +++ b/drivers/infiniband/core/uverbs_cmd.c |
| @@ -764,6 +764,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; |
| @@ -855,6 +856,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; |
| diff --git a/drivers/infiniband/hw/cxgb4/mem.c b/drivers/infiniband/hw/cxgb4/mem.c |
| index ea6fb2c5b1a7..73936c3341b7 100644 |
| --- a/drivers/infiniband/hw/cxgb4/mem.c |
| +++ b/drivers/infiniband/hw/cxgb4/mem.c |
| @@ -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); |
| diff --git a/drivers/infiniband/hw/mlx4/mr.c b/drivers/infiniband/hw/mlx4/mr.c |
| index 6eecedeff2d3..1d5ef0de12c9 100644 |
| --- a/drivers/infiniband/hw/mlx4/mr.c |
| +++ b/drivers/infiniband/hw/mlx4/mr.c |
| @@ -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; |
| -- |
| 2.27.0 |
| |