* [PATCH rdma-rc 0/4] RDMA/bnxt_re: Bug fixes for bnxt_re driver
@ 2025-08-05 10:09 Kalesh AP
2025-08-05 10:09 ` [PATCH rdma-rc 1/4] RDMA/bnxt_re: Fix to do SRQ armena by default Kalesh AP
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: Kalesh AP @ 2025-08-05 10:09 UTC (permalink / raw)
To: leon, jgg; +Cc: linux-rdma, andrew.gospodarek, selvin.xavier, Kalesh AP
Hi,
This series of patches provides few fixes for the bnxt_re driver.
A couple of SRQ related fixes, one fix for a possible memory leak.
Thanks,
Kalesh AP
Anantha Prabhu (1):
RDMA/bnxt_re: Fix to initialize the PBL array
Kalesh AP (1):
RDMA/bnxt_re: Fix a possible memory leak in the driver
Kashyap Desai (2):
RDMA/bnxt_re: Fix to do SRQ armena by default
RDMA/bnxt_re: Fix to remove workload check in SRQ limit path
drivers/infiniband/hw/bnxt_re/ib_verbs.c | 8 ++----
drivers/infiniband/hw/bnxt_re/main.c | 23 +++++++++++++++++
drivers/infiniband/hw/bnxt_re/qplib_fp.c | 30 +----------------------
drivers/infiniband/hw/bnxt_re/qplib_fp.h | 2 --
drivers/infiniband/hw/bnxt_re/qplib_res.c | 2 ++
5 files changed, 28 insertions(+), 37 deletions(-)
--
2.43.5
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH rdma-rc 1/4] RDMA/bnxt_re: Fix to do SRQ armena by default
2025-08-05 10:09 [PATCH rdma-rc 0/4] RDMA/bnxt_re: Bug fixes for bnxt_re driver Kalesh AP
@ 2025-08-05 10:09 ` Kalesh AP
2025-08-05 10:09 ` [PATCH rdma-rc 2/4] RDMA/bnxt_re: Fix to remove workload check in SRQ limit path Kalesh AP
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Kalesh AP @ 2025-08-05 10:09 UTC (permalink / raw)
To: leon, jgg
Cc: linux-rdma, andrew.gospodarek, selvin.xavier, Kashyap Desai,
Saravanan Vajravel, Kalesh AP
From: Kashyap Desai <kashyap.desai@broadcom.com>
Whenever SRQ is created, make sure SRQ arm enable is always
set. Driver is always ready to receive SRQ ASYNC event.
Additional note -
There is no need to do srq arm enable conditionally.
See bnxt_qplib_armen_db in bnxt_qplib_create_cq().
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>
Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
---
drivers/infiniband/hw/bnxt_re/qplib_fp.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_fp.c b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
index be34c605d516..eb82440cdded 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_fp.c
+++ b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
@@ -705,8 +705,7 @@ int bnxt_qplib_create_srq(struct bnxt_qplib_res *res,
srq->dbinfo.db = srq->dpi->dbr;
srq->dbinfo.max_slot = 1;
srq->dbinfo.priv_db = res->dpi_tbl.priv_db;
- if (srq->threshold)
- bnxt_qplib_armen_db(&srq->dbinfo, DBC_DBC_TYPE_SRQ_ARMENA);
+ bnxt_qplib_armen_db(&srq->dbinfo, DBC_DBC_TYPE_SRQ_ARMENA);
srq->arm_req = false;
return 0;
--
2.43.5
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH rdma-rc 2/4] RDMA/bnxt_re: Fix to remove workload check in SRQ limit path
2025-08-05 10:09 [PATCH rdma-rc 0/4] RDMA/bnxt_re: Bug fixes for bnxt_re driver Kalesh AP
2025-08-05 10:09 ` [PATCH rdma-rc 1/4] RDMA/bnxt_re: Fix to do SRQ armena by default Kalesh AP
@ 2025-08-05 10:09 ` Kalesh AP
2025-08-05 10:09 ` [PATCH rdma-rc 3/4] RDMA/bnxt_re: Fix a possible memory leak in the driver Kalesh AP
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Kalesh AP @ 2025-08-05 10:09 UTC (permalink / raw)
To: leon, jgg
Cc: linux-rdma, andrew.gospodarek, selvin.xavier, Kashyap Desai,
Saravanan Vajravel, Kalesh AP
From: Kashyap Desai <kashyap.desai@broadcom.com>
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>
---
drivers/infiniband/hw/bnxt_re/ib_verbs.c | 8 ++-----
drivers/infiniband/hw/bnxt_re/qplib_fp.c | 27 ------------------------
drivers/infiniband/hw/bnxt_re/qplib_fp.h | 2 --
3 files changed, 2 insertions(+), 35 deletions(-)
diff --git a/drivers/infiniband/hw/bnxt_re/ib_verbs.c b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
index 063801384b2b..2e3866e74736 100644
--- a/drivers/infiniband/hw/bnxt_re/ib_verbs.c
+++ b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
@@ -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 */
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_fp.c b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
index eb82440cdded..c2784561156f 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_fp.c
+++ b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
@@ -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 @@ int bnxt_qplib_create_srq(struct bnxt_qplib_res *res,
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;
}
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_fp.h b/drivers/infiniband/hw/bnxt_re/qplib_fp.h
index 0d9487c889ff..846501f12227 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_fp.h
+++ b/drivers/infiniband/hw/bnxt_re/qplib_fp.h
@@ -543,8 +543,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,
--
2.43.5
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH rdma-rc 3/4] RDMA/bnxt_re: Fix a possible memory leak in the driver
2025-08-05 10:09 [PATCH rdma-rc 0/4] RDMA/bnxt_re: Bug fixes for bnxt_re driver Kalesh AP
2025-08-05 10:09 ` [PATCH rdma-rc 1/4] RDMA/bnxt_re: Fix to do SRQ armena by default Kalesh AP
2025-08-05 10:09 ` [PATCH rdma-rc 2/4] RDMA/bnxt_re: Fix to remove workload check in SRQ limit path Kalesh AP
@ 2025-08-05 10:09 ` Kalesh AP
2025-08-05 10:10 ` [PATCH rdma-rc 4/4] RDMA/bnxt_re: Fix to initialize the PBL array Kalesh AP
2025-08-13 10:35 ` [PATCH rdma-rc 0/4] RDMA/bnxt_re: Bug fixes for bnxt_re driver Leon Romanovsky
4 siblings, 0 replies; 6+ messages in thread
From: Kalesh AP @ 2025-08-05 10:09 UTC (permalink / raw)
To: leon, jgg
Cc: linux-rdma, andrew.gospodarek, selvin.xavier, Kalesh AP,
Sriharsha Basavapatna
The GID context reuse logic requires the context memory to be
not freed if and when DEL_GID firmware command fails. But, if
there's no subsequent ADD_GID to reuse it, the context memory
must be freed when the driver is unloaded. Otherwise it leads
to a memory leak.
Below is the kmemleak trace reported:
unreferenced object 0xffff88817a4f34d0 (size 8):
comm "insmod", pid 1072504, jiffies 4402561550
hex dump (first 8 bytes):
01 00 00 00 00 00 00 00 ........
backtrace (crc ccaa009e):
__kmalloc_cache_noprof+0x33e/0x400
0xffffffffc2db9d48
add_modify_gid+0x5e0/0xb60 [ib_core]
__ib_cache_gid_add+0x213/0x350 [ib_core]
update_gid+0xf2/0x180 [ib_core]
enum_netdev_ipv4_ips+0x3f3/0x690 [ib_core]
enum_all_gids_of_dev_cb+0x125/0x1b0 [ib_core]
ib_enum_roce_netdev+0x14b/0x250 [ib_core]
ib_cache_setup_one+0x2e5/0x540 [ib_core]
ib_register_device+0x82c/0xf10 [ib_core]
0xffffffffc2df5ad9
0xffffffffc2da8b07
0xffffffffc2db174d
auxiliary_bus_probe+0xa5/0x120
really_probe+0x1e4/0x850
__driver_probe_device+0x18f/0x3d0
Fixes: 4a62c5e9e2e1 ("RDMA/bnxt_re: Do not free the ctx_tbl entry if delete GID fails")
Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Sriharsha Basavapatna <sriharsha.basavapatna@broadcom.com>
---
drivers/infiniband/hw/bnxt_re/main.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/drivers/infiniband/hw/bnxt_re/main.c b/drivers/infiniband/hw/bnxt_re/main.c
index 293b0a96c8e3..df7cf8d68e27 100644
--- a/drivers/infiniband/hw/bnxt_re/main.c
+++ b/drivers/infiniband/hw/bnxt_re/main.c
@@ -2017,6 +2017,28 @@ static void bnxt_re_free_nqr_mem(struct bnxt_re_dev *rdev)
rdev->nqr = NULL;
}
+/* When DEL_GID fails, driver is not freeing GID ctx memory.
+ * To avoid the memory leak, free the memory during unload
+ */
+static void bnxt_re_free_gid_ctx(struct bnxt_re_dev *rdev)
+{
+ struct bnxt_qplib_sgid_tbl *sgid_tbl = &rdev->qplib_res.sgid_tbl;
+ struct bnxt_re_gid_ctx *ctx, **ctx_tbl;
+ int i;
+
+ if (!sgid_tbl->active)
+ return;
+
+ ctx_tbl = sgid_tbl->ctx;
+ for (i = 0; i < sgid_tbl->max; i++) {
+ if (sgid_tbl->hw_id[i] == 0xFFFF)
+ continue;
+
+ ctx = ctx_tbl[i];
+ kfree(ctx);
+ }
+}
+
static void bnxt_re_dev_uninit(struct bnxt_re_dev *rdev, u8 op_type)
{
u8 type;
@@ -2030,6 +2052,7 @@ static void bnxt_re_dev_uninit(struct bnxt_re_dev *rdev, u8 op_type)
if (test_and_clear_bit(BNXT_RE_FLAG_QOS_WORK_REG, &rdev->flags))
cancel_delayed_work_sync(&rdev->worker);
+ bnxt_re_free_gid_ctx(rdev);
if (test_and_clear_bit(BNXT_RE_FLAG_RESOURCES_INITIALIZED,
&rdev->flags))
bnxt_re_cleanup_res(rdev);
--
2.43.5
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH rdma-rc 4/4] RDMA/bnxt_re: Fix to initialize the PBL array
2025-08-05 10:09 [PATCH rdma-rc 0/4] RDMA/bnxt_re: Bug fixes for bnxt_re driver Kalesh AP
` (2 preceding siblings ...)
2025-08-05 10:09 ` [PATCH rdma-rc 3/4] RDMA/bnxt_re: Fix a possible memory leak in the driver Kalesh AP
@ 2025-08-05 10:10 ` Kalesh AP
2025-08-13 10:35 ` [PATCH rdma-rc 0/4] RDMA/bnxt_re: Bug fixes for bnxt_re driver Leon Romanovsky
4 siblings, 0 replies; 6+ messages in thread
From: Kalesh AP @ 2025-08-05 10:10 UTC (permalink / raw)
To: leon, jgg
Cc: linux-rdma, andrew.gospodarek, selvin.xavier, Anantha Prabhu,
Saravanan Vajravel, Kalesh AP
From: Anantha Prabhu <anantha.prabhu@broadcom.com>
memset the PBL page pointer and page map arrays before
populating the SGL addresses of the HWQ.
Fixes: 0c4dcd602817 ("RDMA/bnxt_re: Refactor hardware queue memory allocation")
Signed-off-by: Anantha Prabhu <anantha.prabhu@broadcom.com>
Reviewed-by: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
Reviewed-by: Selvin Xavier <selvin.xavier@broadcom.com>
Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
---
drivers/infiniband/hw/bnxt_re/qplib_res.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_res.c b/drivers/infiniband/hw/bnxt_re/qplib_res.c
index 6cd05207ffed..cc5c82d96839 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_res.c
+++ b/drivers/infiniband/hw/bnxt_re/qplib_res.c
@@ -121,6 +121,7 @@ static int __alloc_pbl(struct bnxt_qplib_res *res,
pbl->pg_arr = vmalloc_array(pages, sizeof(void *));
if (!pbl->pg_arr)
return -ENOMEM;
+ memset(pbl->pg_arr, 0, pages * sizeof(void *));
pbl->pg_map_arr = vmalloc_array(pages, sizeof(dma_addr_t));
if (!pbl->pg_map_arr) {
@@ -128,6 +129,7 @@ static int __alloc_pbl(struct bnxt_qplib_res *res,
pbl->pg_arr = NULL;
return -ENOMEM;
}
+ memset(pbl->pg_map_arr, 0, pages * sizeof(dma_addr_t));
pbl->pg_count = 0;
pbl->pg_size = sginfo->pgsize;
--
2.43.5
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH rdma-rc 0/4] RDMA/bnxt_re: Bug fixes for bnxt_re driver
2025-08-05 10:09 [PATCH rdma-rc 0/4] RDMA/bnxt_re: Bug fixes for bnxt_re driver Kalesh AP
` (3 preceding siblings ...)
2025-08-05 10:10 ` [PATCH rdma-rc 4/4] RDMA/bnxt_re: Fix to initialize the PBL array Kalesh AP
@ 2025-08-13 10:35 ` Leon Romanovsky
4 siblings, 0 replies; 6+ messages in thread
From: Leon Romanovsky @ 2025-08-13 10:35 UTC (permalink / raw)
To: jgg, Kalesh AP; +Cc: linux-rdma, andrew.gospodarek, selvin.xavier
On Tue, 05 Aug 2025 15:39:56 +0530, Kalesh AP wrote:
> This series of patches provides few fixes for the bnxt_re driver.
> A couple of SRQ related fixes, one fix for a possible memory leak.
>
> Thanks,
> Kalesh AP
>
> Anantha Prabhu (1):
> RDMA/bnxt_re: Fix to initialize the PBL array
>
> [...]
Applied, thanks!
[1/4] RDMA/bnxt_re: Fix to do SRQ armena by default
https://git.kernel.org/rdma/rdma/c/6296f9a5293ada
[2/4] RDMA/bnxt_re: Fix to remove workload check in SRQ limit path
https://git.kernel.org/rdma/rdma/c/666bce0bd7e771
[3/4] RDMA/bnxt_re: Fix a possible memory leak in the driver
https://git.kernel.org/rdma/rdma/c/ba60a1e8cbbd39
[4/4] RDMA/bnxt_re: Fix to initialize the PBL array
https://git.kernel.org/rdma/rdma/c/806b9f494f6279
Best regards,
--
Leon Romanovsky <leon@kernel.org>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-08-13 10:35 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-05 10:09 [PATCH rdma-rc 0/4] RDMA/bnxt_re: Bug fixes for bnxt_re driver Kalesh AP
2025-08-05 10:09 ` [PATCH rdma-rc 1/4] RDMA/bnxt_re: Fix to do SRQ armena by default Kalesh AP
2025-08-05 10:09 ` [PATCH rdma-rc 2/4] RDMA/bnxt_re: Fix to remove workload check in SRQ limit path Kalesh AP
2025-08-05 10:09 ` [PATCH rdma-rc 3/4] RDMA/bnxt_re: Fix a possible memory leak in the driver Kalesh AP
2025-08-05 10:10 ` [PATCH rdma-rc 4/4] RDMA/bnxt_re: Fix to initialize the PBL array Kalesh AP
2025-08-13 10:35 ` [PATCH rdma-rc 0/4] RDMA/bnxt_re: Bug fixes for bnxt_re driver Leon Romanovsky
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).