[PATCH rdma-next 44/50] RDMA/bnxt_re: Reduce CQ memory footprint
From: Leon Romanovsky
Date: Fri Feb 13 2026 - 06:12:01 EST
From: Leon Romanovsky <leonro@xxxxxxxxxx>
There is no need to store resize_cqe and resize_umem in CQ object.
Let's remove them.
Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxx>
---
drivers/infiniband/hw/bnxt_re/ib_verbs.c | 37 +++++++++++---------------------
drivers/infiniband/hw/bnxt_re/ib_verbs.h | 2 --
2 files changed, 13 insertions(+), 26 deletions(-)
diff --git a/drivers/infiniband/hw/bnxt_re/ib_verbs.c b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
index d544a4fb1e96..9a8bdb52097f 100644
--- a/drivers/infiniband/hw/bnxt_re/ib_verbs.c
+++ b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
@@ -3320,6 +3320,8 @@ int bnxt_re_resize_cq(struct ib_cq *ibcq, unsigned int cqe,
struct bnxt_re_resize_cq_req req;
struct bnxt_re_dev *rdev;
struct bnxt_re_cq *cq;
+ struct ib_umem *umem;
+
int rc, entries;
cq = container_of(ibcq, struct bnxt_re_cq, ib_cq);
@@ -3336,26 +3338,18 @@ int bnxt_re_resize_cq(struct ib_cq *ibcq, unsigned int cqe,
entries = dev_attr->max_cq_wqes + 1;
/* uverbs consumer */
- if (ib_copy_from_udata(&req, udata, sizeof(req))) {
- rc = -EFAULT;
- goto fail;
- }
+ if (ib_copy_from_udata(&req, udata, sizeof(req)))
+ return -EFAULT;
- cq->resize_umem = ib_umem_get(&rdev->ibdev, req.cq_va,
- entries * sizeof(struct cq_base),
- IB_ACCESS_LOCAL_WRITE);
- if (IS_ERR(cq->resize_umem)) {
- rc = PTR_ERR(cq->resize_umem);
- ibdev_err(&rdev->ibdev, "%s: ib_umem_get failed! rc = %pe\n",
- __func__, cq->resize_umem);
- cq->resize_umem = NULL;
- return rc;
- }
- cq->resize_cqe = entries;
+ umem = ib_umem_get(&rdev->ibdev, req.cq_va,
+ entries * sizeof(struct cq_base),
+ IB_ACCESS_LOCAL_WRITE);
+ if (IS_ERR(umem))
+ return PTR_ERR(umem);
memcpy(&sg_info, &cq->qplib_cq.sg_info, sizeof(sg_info));
orig_dpi = cq->qplib_cq.dpi;
- cq->qplib_cq.sg_info.umem = cq->resize_umem;
+ cq->qplib_cq.sg_info.umem = umem;
cq->qplib_cq.sg_info.pgsize = PAGE_SIZE;
cq->qplib_cq.sg_info.pgshft = PAGE_SHIFT;
cq->qplib_cq.dpi = &uctx->dpi;
@@ -3369,21 +3363,16 @@ int bnxt_re_resize_cq(struct ib_cq *ibcq, unsigned int cqe,
bnxt_qplib_resize_cq_complete(&rdev->qplib_res, &cq->qplib_cq);
- cq->qplib_cq.max_wqe = cq->resize_cqe;
+ cq->qplib_cq.max_wqe = entries;
ib_umem_release(cq->ib_cq.umem);
- cq->ib_cq.umem = cq->resize_umem;
- cq->resize_umem = NULL;
- cq->resize_cqe = 0;
-
+ cq->ib_cq.umem = umem;
cq->ib_cq.cqe = entries;
atomic_inc(&rdev->stats.res.resize_count);
return 0;
fail:
- ib_umem_release(cq->resize_umem);
- cq->resize_umem = NULL;
- cq->resize_cqe = 0;
+ ib_umem_release(umem);
memcpy(&cq->qplib_cq.sg_info, &sg_info, sizeof(sg_info));
cq->qplib_cq.dpi = orig_dpi;
return rc;
diff --git a/drivers/infiniband/hw/bnxt_re/ib_verbs.h b/drivers/infiniband/hw/bnxt_re/ib_verbs.h
index 7890d6ebad90..ee7ccaa2ed4c 100644
--- a/drivers/infiniband/hw/bnxt_re/ib_verbs.h
+++ b/drivers/infiniband/hw/bnxt_re/ib_verbs.h
@@ -108,8 +108,6 @@ struct bnxt_re_cq {
struct bnxt_qplib_cqe *cql;
#define MAX_CQL_PER_POLL 1024
u32 max_cql;
- struct ib_umem *resize_umem;
- int resize_cqe;
void *uctx_cq_page;
struct hlist_node hash_entry;
};
--
2.52.0