]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 28 Aug 2025 14:31:12 +0000 (16:31 +0200)
[ Upstream commit 666bce0bd7e771127cb0cda125cc9d32d9f9f15d ]

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>
Signed-off-by: Sasha Levin <sashal@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 4a3ce61a3bba6a8077716fc0e3d8ab4801b2824f..b222bf4f38e1c704f30e50e1a4db453194f6c9a1 100644 (file)
@@ -1874,7 +1874,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:
@@ -1886,11 +1885,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 3170a3e2df2491e03341c92398461a8eff63a695..0f50c1ffbe016329371957112b42160f65a44eb6 100644 (file)
@@ -705,7 +705,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:
@@ -715,24 +714,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)
 {
@@ -774,7 +755,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);
@@ -806,15 +786,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 6f02954eb1429fc41ad559ab0867655aaeae7752..fd4f9fada46a611f68fc1658d2d1a0321ca44473 100644 (file)
@@ -521,8 +521,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,