| .. | .. |
|---|
| 469 | 469 | struct bnxt_re_mr *mr = NULL; |
|---|
| 470 | 470 | dma_addr_t dma_addr = 0; |
|---|
| 471 | 471 | struct ib_mw *mw; |
|---|
| 472 | | - u64 pbl_tbl; |
|---|
| 473 | 472 | int rc; |
|---|
| 474 | 473 | |
|---|
| 475 | 474 | dma_addr = dma_map_single(dev, fence->va, BNXT_RE_FENCE_BYTES, |
|---|
| .. | .. |
|---|
| 504 | 503 | mr->ib_mr.lkey = mr->qplib_mr.lkey; |
|---|
| 505 | 504 | mr->qplib_mr.va = (u64)(unsigned long)fence->va; |
|---|
| 506 | 505 | mr->qplib_mr.total_size = BNXT_RE_FENCE_BYTES; |
|---|
| 507 | | - pbl_tbl = dma_addr; |
|---|
| 508 | | - rc = bnxt_qplib_reg_mr(&rdev->qplib_res, &mr->qplib_mr, &pbl_tbl, |
|---|
| 509 | | - BNXT_RE_FENCE_PBL_SIZE, false, PAGE_SIZE); |
|---|
| 506 | + rc = bnxt_qplib_reg_mr(&rdev->qplib_res, &mr->qplib_mr, NULL, |
|---|
| 507 | + BNXT_RE_FENCE_PBL_SIZE, PAGE_SIZE); |
|---|
| 510 | 508 | if (rc) { |
|---|
| 511 | 509 | ibdev_err(&rdev->ibdev, "Failed to register fence-MR\n"); |
|---|
| 512 | 510 | goto fail; |
|---|
| .. | .. |
|---|
| 3249 | 3247 | udwr.remote_qkey = gsi_sqp->qplib_qp.qkey; |
|---|
| 3250 | 3248 | |
|---|
| 3251 | 3249 | /* post data received in the send queue */ |
|---|
| 3252 | | - rc = bnxt_re_post_send_shadow_qp(rdev, gsi_sqp, swr); |
|---|
| 3253 | | - |
|---|
| 3254 | | - return 0; |
|---|
| 3250 | + return bnxt_re_post_send_shadow_qp(rdev, gsi_sqp, swr); |
|---|
| 3255 | 3251 | } |
|---|
| 3256 | 3252 | |
|---|
| 3257 | 3253 | static void bnxt_re_process_res_rawqp1_wc(struct ib_wc *wc, |
|---|
| .. | .. |
|---|
| 3588 | 3584 | struct bnxt_re_pd *pd = container_of(ib_pd, struct bnxt_re_pd, ib_pd); |
|---|
| 3589 | 3585 | struct bnxt_re_dev *rdev = pd->rdev; |
|---|
| 3590 | 3586 | struct bnxt_re_mr *mr; |
|---|
| 3591 | | - u64 pbl = 0; |
|---|
| 3592 | 3587 | int rc; |
|---|
| 3593 | 3588 | |
|---|
| 3594 | 3589 | mr = kzalloc(sizeof(*mr), GFP_KERNEL); |
|---|
| .. | .. |
|---|
| 3607 | 3602 | |
|---|
| 3608 | 3603 | mr->qplib_mr.hwq.level = PBL_LVL_MAX; |
|---|
| 3609 | 3604 | mr->qplib_mr.total_size = -1; /* Infinte length */ |
|---|
| 3610 | | - rc = bnxt_qplib_reg_mr(&rdev->qplib_res, &mr->qplib_mr, &pbl, 0, false, |
|---|
| 3605 | + rc = bnxt_qplib_reg_mr(&rdev->qplib_res, &mr->qplib_mr, NULL, 0, |
|---|
| 3611 | 3606 | PAGE_SIZE); |
|---|
| 3612 | 3607 | if (rc) |
|---|
| 3613 | 3608 | goto fail_mr; |
|---|
| .. | .. |
|---|
| 3778 | 3773 | return rc; |
|---|
| 3779 | 3774 | } |
|---|
| 3780 | 3775 | |
|---|
| 3781 | | -static int fill_umem_pbl_tbl(struct ib_umem *umem, u64 *pbl_tbl_orig, |
|---|
| 3782 | | - int page_shift) |
|---|
| 3783 | | -{ |
|---|
| 3784 | | - u64 *pbl_tbl = pbl_tbl_orig; |
|---|
| 3785 | | - u64 page_size = BIT_ULL(page_shift); |
|---|
| 3786 | | - struct ib_block_iter biter; |
|---|
| 3787 | | - |
|---|
| 3788 | | - rdma_umem_for_each_dma_block(umem, &biter, page_size) |
|---|
| 3789 | | - *pbl_tbl++ = rdma_block_iter_dma_address(&biter); |
|---|
| 3790 | | - |
|---|
| 3791 | | - return pbl_tbl - pbl_tbl_orig; |
|---|
| 3792 | | -} |
|---|
| 3793 | | - |
|---|
| 3794 | 3776 | /* uverbs */ |
|---|
| 3795 | 3777 | struct ib_mr *bnxt_re_reg_user_mr(struct ib_pd *ib_pd, u64 start, u64 length, |
|---|
| 3796 | 3778 | u64 virt_addr, int mr_access_flags, |
|---|
| .. | .. |
|---|
| 3800 | 3782 | struct bnxt_re_dev *rdev = pd->rdev; |
|---|
| 3801 | 3783 | struct bnxt_re_mr *mr; |
|---|
| 3802 | 3784 | struct ib_umem *umem; |
|---|
| 3803 | | - u64 *pbl_tbl = NULL; |
|---|
| 3804 | 3785 | unsigned long page_size; |
|---|
| 3805 | 3786 | int umem_pgs, rc; |
|---|
| 3806 | 3787 | |
|---|
| .. | .. |
|---|
| 3854 | 3835 | } |
|---|
| 3855 | 3836 | |
|---|
| 3856 | 3837 | umem_pgs = ib_umem_num_dma_blocks(umem, page_size); |
|---|
| 3857 | | - pbl_tbl = kcalloc(umem_pgs, sizeof(*pbl_tbl), GFP_KERNEL); |
|---|
| 3858 | | - if (!pbl_tbl) { |
|---|
| 3859 | | - rc = -ENOMEM; |
|---|
| 3860 | | - goto free_umem; |
|---|
| 3861 | | - } |
|---|
| 3862 | | - |
|---|
| 3863 | | - /* Map umem buf ptrs to the PBL */ |
|---|
| 3864 | | - umem_pgs = fill_umem_pbl_tbl(umem, pbl_tbl, order_base_2(page_size)); |
|---|
| 3865 | | - rc = bnxt_qplib_reg_mr(&rdev->qplib_res, &mr->qplib_mr, pbl_tbl, |
|---|
| 3866 | | - umem_pgs, false, page_size); |
|---|
| 3838 | + rc = bnxt_qplib_reg_mr(&rdev->qplib_res, &mr->qplib_mr, umem, |
|---|
| 3839 | + umem_pgs, page_size); |
|---|
| 3867 | 3840 | if (rc) { |
|---|
| 3868 | 3841 | ibdev_err(&rdev->ibdev, "Failed to register user MR"); |
|---|
| 3869 | | - goto fail; |
|---|
| 3842 | + goto free_umem; |
|---|
| 3870 | 3843 | } |
|---|
| 3871 | | - |
|---|
| 3872 | | - kfree(pbl_tbl); |
|---|
| 3873 | 3844 | |
|---|
| 3874 | 3845 | mr->ib_mr.lkey = mr->qplib_mr.lkey; |
|---|
| 3875 | 3846 | mr->ib_mr.rkey = mr->qplib_mr.lkey; |
|---|
| 3876 | 3847 | atomic_inc(&rdev->mr_count); |
|---|
| 3877 | 3848 | |
|---|
| 3878 | 3849 | return &mr->ib_mr; |
|---|
| 3879 | | -fail: |
|---|
| 3880 | | - kfree(pbl_tbl); |
|---|
| 3881 | 3850 | free_umem: |
|---|
| 3882 | 3851 | ib_umem_release(umem); |
|---|
| 3883 | 3852 | free_mrw: |
|---|