Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: Devesh Sharma <devesh.sharma@broadcom.com>
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>

authored by

Selvin Xavier and committed by
Jason Gunthorpe
c930af5a f6919d56

+2 -20
-8
drivers/infiniband/hw/bnxt_re/ib_verbs.c
··· 3829 3829 } 3830 3830 mr->qplib_mr.total_size = length; 3831 3831 3832 - if (page_size == BNXT_RE_PAGE_SIZE_4K && 3833 - length > BNXT_RE_MAX_MR_SIZE_LOW) { 3834 - ibdev_err(&rdev->ibdev, "Requested MR Sz:%llu Max sup:%llu", 3835 - length, (u64)BNXT_RE_MAX_MR_SIZE_LOW); 3836 - rc = -EINVAL; 3837 - goto free_umem; 3838 - } 3839 - 3840 3832 umem_pgs = ib_umem_num_dma_blocks(umem, page_size); 3841 3833 rc = bnxt_qplib_reg_mr(&rdev->qplib_res, &mr->qplib_mr, umem, 3842 3834 umem_pgs, page_size);
+2 -12
drivers/infiniband/hw/bnxt_re/qplib_sp.c
··· 658 658 struct creq_register_mr_resp resp; 659 659 struct cmdq_register_mr req; 660 660 u16 cmd_flags = 0, level; 661 - int pages, rc, pg_ptrs; 661 + int pages, rc; 662 662 u32 pg_size; 663 663 664 664 if (num_pbls) { 665 + pages = roundup_pow_of_two(num_pbls); 665 666 /* Allocate memory for the non-leaf pages to store buf ptrs. 666 667 * Non-leaf pages always uses system PAGE_SIZE 667 668 */ 668 - pg_ptrs = roundup_pow_of_two(num_pbls); 669 - pages = pg_ptrs >> MAX_PBL_LVL_1_PGS_SHIFT; 670 - if (!pages) 671 - pages++; 672 - 673 - if (pages > MAX_PBL_LVL_1_PGS) { 674 - dev_err(&res->pdev->dev, 675 - "SP: Reg MR: pages requested (0x%x) exceeded max (0x%x)\n", 676 - pages, MAX_PBL_LVL_1_PGS); 677 - return -ENOMEM; 678 - } 679 669 /* Free the hwq if it already exist, must be a rereg */ 680 670 if (mr->hwq.max_elements) 681 671 bnxt_qplib_free_hwq(res, &mr->hwq);