RDMA/bnxt_re: Fix to remove workload check in SRQ limit path
authorKashyap Desai <kashyap.desai@broadcom.com>
Tue, 5 Aug 2025 10:09:58 +0000 (15:39 +0530)
committerLeon Romanovsky <leon@kernel.org>
Wed, 13 Aug 2025 10:35:40 +0000 (06:35 -0400)
There should not be any checks of current workload to set
srq_limit value to SRQ hw context.

Remove all such workload checks and make a direct call to
set srq_limit via doorbell SRQ_ARM.

Fixes: 37cb11acf1f7 ("RDMA/bnxt_re: Add SRQ support for Broadcom adapters")
Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com>
Signed-off-by: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Link: https://patch.msgid.link/20250805101000.233310-3-kalesh-anakkur.purayil@broadcom.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/hw/bnxt_re/ib_verbs.c
drivers/infiniband/hw/bnxt_re/qplib_fp.c
drivers/infiniband/hw/bnxt_re/qplib_fp.h

index 37c2bc3bdba5e1fc5f5d60688968175514d832b1..260dc67b8b87c9d9991b8164b51e24777ac8125b 100644 (file)
@@ -1921,7 +1921,6 @@ int bnxt_re_modify_srq(struct ib_srq *ib_srq, struct ib_srq_attr *srq_attr,
        struct bnxt_re_srq *srq = container_of(ib_srq, struct bnxt_re_srq,
                                               ib_srq);
        struct bnxt_re_dev *rdev = srq->rdev;
-       int rc;
 
        switch (srq_attr_mask) {
        case IB_SRQ_MAX_WR:
@@ -1933,11 +1932,8 @@ int bnxt_re_modify_srq(struct ib_srq *ib_srq, struct ib_srq_attr *srq_attr,
                        return -EINVAL;
 
                srq->qplib_srq.threshold = srq_attr->srq_limit;
-               rc = bnxt_qplib_modify_srq(&rdev->qplib_res, &srq->qplib_srq);
-               if (rc) {
-                       ibdev_err(&rdev->ibdev, "Modify HW SRQ failed!");
-                       return rc;
-               }
+               bnxt_qplib_srq_arm_db(&srq->qplib_srq.dbinfo, srq->qplib_srq.threshold);
+
                /* On success, update the shadow */
                srq->srq_limit = srq_attr->srq_limit;
                /* No need to Build and send response back to udata */
index b2c1240775f4e59f9acb407cde3d99f87d6b4241..ee36b3d82cc0a5d5e8d61225485e97082f90197e 100644 (file)
@@ -706,7 +706,6 @@ int bnxt_qplib_create_srq(struct bnxt_qplib_res *res,
        srq->dbinfo.max_slot = 1;
        srq->dbinfo.priv_db = res->dpi_tbl.priv_db;
        bnxt_qplib_armen_db(&srq->dbinfo, DBC_DBC_TYPE_SRQ_ARMENA);
-       srq->arm_req = false;
 
        return 0;
 fail:
@@ -716,24 +715,6 @@ fail:
        return rc;
 }
 
-int bnxt_qplib_modify_srq(struct bnxt_qplib_res *res,
-                         struct bnxt_qplib_srq *srq)
-{
-       struct bnxt_qplib_hwq *srq_hwq = &srq->hwq;
-       u32 count;
-
-       count = __bnxt_qplib_get_avail(srq_hwq);
-       if (count > srq->threshold) {
-               srq->arm_req = false;
-               bnxt_qplib_srq_arm_db(&srq->dbinfo, srq->threshold);
-       } else {
-               /* Deferred arming */
-               srq->arm_req = true;
-       }
-
-       return 0;
-}
-
 int bnxt_qplib_query_srq(struct bnxt_qplib_res *res,
                         struct bnxt_qplib_srq *srq)
 {
@@ -775,7 +756,6 @@ int bnxt_qplib_post_srq_recv(struct bnxt_qplib_srq *srq,
        struct bnxt_qplib_hwq *srq_hwq = &srq->hwq;
        struct rq_wqe *srqe;
        struct sq_sge *hw_sge;
-       u32 count = 0;
        int i, next;
 
        spin_lock(&srq_hwq->lock);
@@ -807,15 +787,8 @@ int bnxt_qplib_post_srq_recv(struct bnxt_qplib_srq *srq,
 
        bnxt_qplib_hwq_incr_prod(&srq->dbinfo, srq_hwq, srq->dbinfo.max_slot);
 
-       spin_lock(&srq_hwq->lock);
-       count = __bnxt_qplib_get_avail(srq_hwq);
-       spin_unlock(&srq_hwq->lock);
        /* Ring DB */
        bnxt_qplib_ring_prod_db(&srq->dbinfo, DBC_DBC_TYPE_SRQ);
-       if (srq->arm_req == true && count > srq->threshold) {
-               srq->arm_req = false;
-               bnxt_qplib_srq_arm_db(&srq->dbinfo, srq->threshold);
-       }
 
        return 0;
 }
index ab125f1d949eed8ee21f76198b7620bc515359cc..4921a214c34c12414bc0e16c95c90b8c1cf9ef32 100644 (file)
@@ -546,8 +546,6 @@ int bnxt_qplib_enable_nq(struct pci_dev *pdev, struct bnxt_qplib_nq *nq,
                         srqn_handler_t srq_handler);
 int bnxt_qplib_create_srq(struct bnxt_qplib_res *res,
                          struct bnxt_qplib_srq *srq);
-int bnxt_qplib_modify_srq(struct bnxt_qplib_res *res,
-                         struct bnxt_qplib_srq *srq);
 int bnxt_qplib_query_srq(struct bnxt_qplib_res *res,
                         struct bnxt_qplib_srq *srq);
 void bnxt_qplib_destroy_srq(struct bnxt_qplib_res *res,