RDMA/bnxt_re: Code refactor while populating user MRs
[linux-2.6-microblaze.git] / drivers / infiniband / hw / bnxt_re / ib_verbs.c
index 401bdc9..00d2a5a 100644 (file)
@@ -469,7 +469,6 @@ static int bnxt_re_create_fence_mr(struct bnxt_re_pd *pd)
        struct bnxt_re_mr *mr = NULL;
        dma_addr_t dma_addr = 0;
        struct ib_mw *mw;
-       u64 pbl_tbl;
        int rc;
 
        dma_addr = dma_map_single(dev, fence->va, BNXT_RE_FENCE_BYTES,
@@ -504,9 +503,8 @@ static int bnxt_re_create_fence_mr(struct bnxt_re_pd *pd)
        mr->ib_mr.lkey = mr->qplib_mr.lkey;
        mr->qplib_mr.va = (u64)(unsigned long)fence->va;
        mr->qplib_mr.total_size = BNXT_RE_FENCE_BYTES;
-       pbl_tbl = dma_addr;
-       rc = bnxt_qplib_reg_mr(&rdev->qplib_res, &mr->qplib_mr, &pbl_tbl,
-                              BNXT_RE_FENCE_PBL_SIZE, false, PAGE_SIZE);
+       rc = bnxt_qplib_reg_mr(&rdev->qplib_res, &mr->qplib_mr, NULL,
+                              BNXT_RE_FENCE_PBL_SIZE, PAGE_SIZE);
        if (rc) {
                ibdev_err(&rdev->ibdev, "Failed to register fence-MR\n");
                goto fail;
@@ -3589,7 +3587,6 @@ struct ib_mr *bnxt_re_get_dma_mr(struct ib_pd *ib_pd, int mr_access_flags)
        struct bnxt_re_pd *pd = container_of(ib_pd, struct bnxt_re_pd, ib_pd);
        struct bnxt_re_dev *rdev = pd->rdev;
        struct bnxt_re_mr *mr;
-       u64 pbl = 0;
        int rc;
 
        mr = kzalloc(sizeof(*mr), GFP_KERNEL);
@@ -3608,7 +3605,7 @@ struct ib_mr *bnxt_re_get_dma_mr(struct ib_pd *ib_pd, int mr_access_flags)
 
        mr->qplib_mr.hwq.level = PBL_LVL_MAX;
        mr->qplib_mr.total_size = -1; /* Infinte length */
-       rc = bnxt_qplib_reg_mr(&rdev->qplib_res, &mr->qplib_mr, &pbl, 0, false,
+       rc = bnxt_qplib_reg_mr(&rdev->qplib_res, &mr->qplib_mr, NULL, 0,
                               PAGE_SIZE);
        if (rc)
                goto fail_mr;
@@ -3779,19 +3776,6 @@ int bnxt_re_dealloc_mw(struct ib_mw *ib_mw)
        return rc;
 }
 
-static int fill_umem_pbl_tbl(struct ib_umem *umem, u64 *pbl_tbl_orig,
-                            int page_shift)
-{
-       u64 *pbl_tbl = pbl_tbl_orig;
-       u64 page_size =  BIT_ULL(page_shift);
-       struct ib_block_iter biter;
-
-       rdma_umem_for_each_dma_block(umem, &biter, page_size)
-               *pbl_tbl++ = rdma_block_iter_dma_address(&biter);
-
-       return pbl_tbl - pbl_tbl_orig;
-}
-
 /* uverbs */
 struct ib_mr *bnxt_re_reg_user_mr(struct ib_pd *ib_pd, u64 start, u64 length,
                                  u64 virt_addr, int mr_access_flags,
@@ -3801,7 +3785,6 @@ struct ib_mr *bnxt_re_reg_user_mr(struct ib_pd *ib_pd, u64 start, u64 length,
        struct bnxt_re_dev *rdev = pd->rdev;
        struct bnxt_re_mr *mr;
        struct ib_umem *umem;
-       u64 *pbl_tbl = NULL;
        unsigned long page_size;
        int umem_pgs, rc;
 
@@ -3855,30 +3838,18 @@ struct ib_mr *bnxt_re_reg_user_mr(struct ib_pd *ib_pd, u64 start, u64 length,
        }
 
        umem_pgs = ib_umem_num_dma_blocks(umem, page_size);
-       pbl_tbl = kcalloc(umem_pgs, sizeof(*pbl_tbl), GFP_KERNEL);
-       if (!pbl_tbl) {
-               rc = -ENOMEM;
-               goto free_umem;
-       }
-
-       /* Map umem buf ptrs to the PBL */
-       umem_pgs = fill_umem_pbl_tbl(umem, pbl_tbl, order_base_2(page_size));
-       rc = bnxt_qplib_reg_mr(&rdev->qplib_res, &mr->qplib_mr, pbl_tbl,
-                              umem_pgs, false, page_size);
+       rc = bnxt_qplib_reg_mr(&rdev->qplib_res, &mr->qplib_mr, umem,
+                              umem_pgs, page_size);
        if (rc) {
                ibdev_err(&rdev->ibdev, "Failed to register user MR");
-               goto fail;
+               goto free_umem;
        }
 
-       kfree(pbl_tbl);
-
        mr->ib_mr.lkey = mr->qplib_mr.lkey;
        mr->ib_mr.rkey = mr->qplib_mr.lkey;
        atomic_inc(&rdev->mr_count);
 
        return &mr->ib_mr;
-fail:
-       kfree(pbl_tbl);
 free_umem:
        ib_umem_release(umem);
 free_mrw: