Commit c930af5a authored by Selvin Xavier's avatar Selvin Xavier Committed by Jason Gunthorpe
Browse files

RDMA/bnxt_re: Allow bigger MR creation

Allow users to create bigger MRs. Remove the check that prevented creating
MRs with number of pages more than 512.

Link: https://lore.kernel.org/r/1610012608-14528-3-git-send-email-selvin.xavier@broadcom.com


Signed-off-by: default avatarDevesh Sharma <devesh.sharma@broadcom.com>
Signed-off-by: default avatarSelvin Xavier <selvin.xavier@broadcom.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
parent f6919d56
Loading
Loading
Loading
Loading
+0 −8
Original line number Diff line number Diff line
@@ -3829,14 +3829,6 @@ struct ib_mr *bnxt_re_reg_user_mr(struct ib_pd *ib_pd, u64 start, u64 length,
	}
	mr->qplib_mr.total_size = length;

	if (page_size == BNXT_RE_PAGE_SIZE_4K &&
	    length > BNXT_RE_MAX_MR_SIZE_LOW) {
		ibdev_err(&rdev->ibdev, "Requested MR Sz:%llu Max sup:%llu",
			  length, (u64)BNXT_RE_MAX_MR_SIZE_LOW);
		rc = -EINVAL;
		goto free_umem;
	}

	umem_pgs = ib_umem_num_dma_blocks(umem, page_size);
	rc = bnxt_qplib_reg_mr(&rdev->qplib_res, &mr->qplib_mr, umem,
			       umem_pgs, page_size);
+2 −12
Original line number Diff line number Diff line
@@ -658,24 +658,14 @@ int bnxt_qplib_reg_mr(struct bnxt_qplib_res *res, struct bnxt_qplib_mrw *mr,
	struct creq_register_mr_resp resp;
	struct cmdq_register_mr req;
	u16 cmd_flags = 0, level;
	int pages, rc, pg_ptrs;
	int pages, rc;
	u32 pg_size;

	if (num_pbls) {
		pages = roundup_pow_of_two(num_pbls);
		/* Allocate memory for the non-leaf pages to store buf ptrs.
		 * Non-leaf pages always uses system PAGE_SIZE
		 */
		pg_ptrs = roundup_pow_of_two(num_pbls);
		pages = pg_ptrs >> MAX_PBL_LVL_1_PGS_SHIFT;
		if (!pages)
			pages++;

		if (pages > MAX_PBL_LVL_1_PGS) {
			dev_err(&res->pdev->dev,
				"SP: Reg MR: pages requested (0x%x) exceeded max (0x%x)\n",
				pages, MAX_PBL_LVL_1_PGS);
			return -ENOMEM;
		}
		/* Free the hwq if it already exist, must be a rereg */
		if (mr->hwq.max_elements)
			bnxt_qplib_free_hwq(res, &mr->hwq);