From: Cheng Xu <chengyou@linux.alibaba.com>
To: jgg@ziepe.ca, leon@kernel.org
Cc: linux-rdma@vger.kernel.org, KaiShen@linux.alibaba.com
Subject: [PATCH for-next v3 5/5] RDMA/erdma: Move kernel QP helpers after memory helpers
Date: Tue, 8 Sep 2026 11:37:09 +0800 [thread overview]
Message-ID: <20260908033709.89898-6-chengyou@linux.alibaba.com> (raw)
In-Reply-To: <20260908033709.89898-1-chengyou@linux.alibaba.com>
Move the kernel QP helpers after the shared memory helpers to remove
forward declarations.
Signed-off-by: Cheng Xu <chengyou@linux.alibaba.com>
---
drivers/infiniband/hw/erdma/erdma_verbs.c | 168 +++++++++++-----------
1 file changed, 82 insertions(+), 86 deletions(-)
diff --git a/drivers/infiniband/hw/erdma/erdma_verbs.c b/drivers/infiniband/hw/erdma/erdma_verbs.c
index 968137c8d478..dddbab81f411 100644
--- a/drivers/infiniband/hw/erdma/erdma_verbs.c
+++ b/drivers/infiniband/hw/erdma/erdma_verbs.c
@@ -19,10 +19,6 @@
#include "erdma_cm.h"
#include "erdma_verbs.h"
-static int erdma_mem_init(struct erdma_dev *dev, struct erdma_mem *mem,
- struct erdma_mem_init_attr *attr);
-static void erdma_mem_uninit(struct erdma_dev *dev, struct erdma_mem *mem);
-
static void assemble_qbuf_mtt_for_cmd(struct erdma_mem *mem, u32 *cfg,
u64 *addr0, u64 *addr1)
{
@@ -473,88 +469,6 @@ static int erdma_qp_validate_attr(struct erdma_dev *dev,
return 0;
}
-static void free_kernel_qp(struct erdma_qp *qp)
-{
- struct erdma_dev *dev = qp->dev;
-
- vfree(qp->kern_qp.swr_tbl);
- vfree(qp->kern_qp.rwr_tbl);
-
- erdma_mem_uninit(dev, &qp->kern_qp.sq_mem);
- dma_pool_free(dev->db_pool, qp->kern_qp.sq_dbrec,
- qp->kern_qp.sq_dbrec_dma);
- erdma_mem_uninit(dev, &qp->kern_qp.rq_mem);
- dma_pool_free(dev->db_pool, qp->kern_qp.rq_dbrec,
- qp->kern_qp.rq_dbrec_dma);
-}
-
-static int init_kernel_qp(struct erdma_dev *dev, struct erdma_qp *qp,
- struct ib_qp_init_attr *attrs)
-{
- struct erdma_mem_init_attr attr = {
- .type = ERDMA_KMEM,
- };
- struct erdma_kqp *kqp = &qp->kern_qp;
- int size;
- int ret = -ENOMEM;
-
- if (attrs->sq_sig_type == IB_SIGNAL_ALL_WR)
- kqp->sig_all = 1;
-
- kqp->sq_pi = 0;
- kqp->sq_ci = 0;
- kqp->rq_pi = 0;
- kqp->rq_ci = 0;
- kqp->hw_sq_db =
- dev->func_bar + (ERDMA_SDB_SHARED_PAGE_INDEX << PAGE_SHIFT);
- kqp->hw_rq_db = dev->func_bar + ERDMA_BAR_RQDB_SPACE_OFFSET;
-
- kqp->swr_tbl = vmalloc_array(qp->attrs.sq_size, sizeof(u64));
- if (!kqp->swr_tbl)
- return -ENOMEM;
-
- kqp->rwr_tbl = vmalloc_array(qp->attrs.rq_size, sizeof(u64));
- if (!kqp->rwr_tbl)
- goto err_free_swr_tbl;
-
- size = qp->attrs.sq_size << SQEBB_SHIFT;
- attr.len = size;
- ret = erdma_mem_init(dev, &kqp->sq_mem, &attr);
- if (ret)
- goto err_free_rwr_tbl;
-
- kqp->sq_dbrec =
- dma_pool_zalloc(dev->db_pool, GFP_KERNEL, &kqp->sq_dbrec_dma);
- if (!kqp->sq_dbrec)
- goto err_free_sq_mem;
-
- size = qp->attrs.rq_size << RQE_SHIFT;
- attr.len = size;
- ret = erdma_mem_init(dev, &kqp->rq_mem, &attr);
- if (ret)
- goto err_free_sq_dbrec;
-
- kqp->rq_dbrec =
- dma_pool_zalloc(dev->db_pool, GFP_KERNEL, &kqp->rq_dbrec_dma);
- if (!kqp->rq_dbrec)
- goto err_free_rq_mem;
-
- return 0;
-
-err_free_rq_mem:
- erdma_mem_uninit(dev, &kqp->rq_mem);
-err_free_sq_dbrec:
- dma_pool_free(dev->db_pool, kqp->sq_dbrec, kqp->sq_dbrec_dma);
-err_free_sq_mem:
- erdma_mem_uninit(dev, &kqp->sq_mem);
-err_free_rwr_tbl:
- vfree(kqp->rwr_tbl);
-err_free_swr_tbl:
- vfree(kqp->swr_tbl);
-
- return ret;
-}
-
static void erdma_init_mtt_leaf(struct erdma_mem *mem, struct erdma_mtt *mtt)
{
struct ib_block_iter biter;
@@ -933,6 +847,88 @@ static void erdma_mem_uninit(struct erdma_dev *dev, struct erdma_mem *mem)
erdma_mem_free(dev, mem);
}
+static void free_kernel_qp(struct erdma_qp *qp)
+{
+ struct erdma_dev *dev = qp->dev;
+
+ vfree(qp->kern_qp.swr_tbl);
+ vfree(qp->kern_qp.rwr_tbl);
+
+ erdma_mem_uninit(dev, &qp->kern_qp.sq_mem);
+ dma_pool_free(dev->db_pool, qp->kern_qp.sq_dbrec,
+ qp->kern_qp.sq_dbrec_dma);
+ erdma_mem_uninit(dev, &qp->kern_qp.rq_mem);
+ dma_pool_free(dev->db_pool, qp->kern_qp.rq_dbrec,
+ qp->kern_qp.rq_dbrec_dma);
+}
+
+static int init_kernel_qp(struct erdma_dev *dev, struct erdma_qp *qp,
+ struct ib_qp_init_attr *attrs)
+{
+ struct erdma_mem_init_attr attr = {
+ .type = ERDMA_KMEM,
+ };
+ struct erdma_kqp *kqp = &qp->kern_qp;
+ int size;
+ int ret = -ENOMEM;
+
+ if (attrs->sq_sig_type == IB_SIGNAL_ALL_WR)
+ kqp->sig_all = 1;
+
+ kqp->sq_pi = 0;
+ kqp->sq_ci = 0;
+ kqp->rq_pi = 0;
+ kqp->rq_ci = 0;
+ kqp->hw_sq_db =
+ dev->func_bar + (ERDMA_SDB_SHARED_PAGE_INDEX << PAGE_SHIFT);
+ kqp->hw_rq_db = dev->func_bar + ERDMA_BAR_RQDB_SPACE_OFFSET;
+
+ kqp->swr_tbl = vmalloc_array(qp->attrs.sq_size, sizeof(u64));
+ if (!kqp->swr_tbl)
+ return -ENOMEM;
+
+ kqp->rwr_tbl = vmalloc_array(qp->attrs.rq_size, sizeof(u64));
+ if (!kqp->rwr_tbl)
+ goto err_free_swr_tbl;
+
+ size = qp->attrs.sq_size << SQEBB_SHIFT;
+ attr.len = size;
+ ret = erdma_mem_init(dev, &kqp->sq_mem, &attr);
+ if (ret)
+ goto err_free_rwr_tbl;
+
+ kqp->sq_dbrec =
+ dma_pool_zalloc(dev->db_pool, GFP_KERNEL, &kqp->sq_dbrec_dma);
+ if (!kqp->sq_dbrec)
+ goto err_free_sq_mem;
+
+ size = qp->attrs.rq_size << RQE_SHIFT;
+ attr.len = size;
+ ret = erdma_mem_init(dev, &kqp->rq_mem, &attr);
+ if (ret)
+ goto err_free_sq_dbrec;
+
+ kqp->rq_dbrec =
+ dma_pool_zalloc(dev->db_pool, GFP_KERNEL, &kqp->rq_dbrec_dma);
+ if (!kqp->rq_dbrec)
+ goto err_free_rq_mem;
+
+ return 0;
+
+err_free_rq_mem:
+ erdma_mem_uninit(dev, &kqp->rq_mem);
+err_free_sq_dbrec:
+ dma_pool_free(dev->db_pool, kqp->sq_dbrec, kqp->sq_dbrec_dma);
+err_free_sq_mem:
+ erdma_mem_uninit(dev, &kqp->sq_mem);
+err_free_rwr_tbl:
+ vfree(kqp->rwr_tbl);
+err_free_swr_tbl:
+ vfree(kqp->swr_tbl);
+
+ return ret;
+}
+
static int erdma_map_user_dbrecords(struct erdma_ucontext *ctx,
u64 dbrecords_va,
struct erdma_user_dbrecords_page **dbr_page,
--
2.31.1
prev parent reply other threads:[~2026-09-08 3:37 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-08 3:37 [PATCH for-next v3 0/5] RDMA/erdma: Support non-contiguous kernel queue buffers Cheng Xu
2026-09-08 3:37 ` [PATCH for-next v3 1/5] RDMA/erdma: Unwind kernel QP initialization failures Cheng Xu
2026-09-08 3:37 ` [PATCH for-next v3 2/5] RDMA/erdma: Support non-contiguous kernel QP buffers Cheng Xu
2026-09-08 3:37 ` [PATCH for-next v3 3/5] RDMA/erdma: Support non-contiguous kernel CQ buffers Cheng Xu
2026-09-08 3:37 ` [PATCH for-next v3 4/5] RDMA/erdma: Unify userspace and kernel queue buffer management Cheng Xu
2026-09-08 3:37 ` Cheng Xu [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260908033709.89898-6-chengyou@linux.alibaba.com \
--to=chengyou@linux.alibaba.com \
--cc=KaiShen@linux.alibaba.com \
--cc=jgg@ziepe.ca \
--cc=leon@kernel.org \
--cc=linux-rdma@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox