RDMA/bnxt_re: Fix max_qp_wrs reported
authorSelvin Xavier <selvin.xavier@broadcom.com>
Mon, 30 Nov 2020 13:13:06 +0000 (05:13 -0800)
committerJason Gunthorpe <jgg@nvidia.com>
Mon, 7 Dec 2020 19:43:42 +0000 (15:43 -0400)
While creating qps, the driver adds one extra entry to the sq size passed
by the ULPs in order to avoid queue full condition.  When ULPs creates QPs
with max_qp_wr reported, driver creates QP with 1 more than the max_wqes
supported by HW. Create QP fails in this case. To avoid this error, reduce
1 entry in max_qp_wqes and report it to the stack.

Link: https://lore.kernel.org/r/1606741986-16477-1-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>
drivers/infiniband/hw/bnxt_re/qplib_sp.c

index 64d44f5..6316179 100644 (file)
@@ -118,7 +118,7 @@ int bnxt_qplib_get_dev_attr(struct bnxt_qplib_rcfw *rcfw,
         * 128 WQEs needs to be reserved for the HW (8916). Prevent
         * reporting the max number
         */
-       attr->max_qp_wqes -= BNXT_QPLIB_RESERVED_QP_WRS;
+       attr->max_qp_wqes -= BNXT_QPLIB_RESERVED_QP_WRS + 1;
        attr->max_qp_sges = bnxt_qplib_is_chip_gen_p5(rcfw->res->cctx) ?
                            6 : sb->max_sge;
        attr->max_cq = le32_to_cpu(sb->max_cq);