[PATCH rdma-next 36/50] RDMA/mlx5: Remove support for resizing kernel CQs
From: Leon Romanovsky
Date: Fri Feb 13 2026 - 06:11:03 EST
From: Leon Romanovsky <leonro@xxxxxxxxxx>
No ULP users rely on CQ resize support, so drop the unused code.
Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxx>
---
drivers/infiniband/hw/mlx5/cq.c | 161 +++++-----------------------------------
1 file changed, 18 insertions(+), 143 deletions(-)
diff --git a/drivers/infiniband/hw/mlx5/cq.c b/drivers/infiniband/hw/mlx5/cq.c
index 52a435efd0de..ce20af01cde0 100644
--- a/drivers/infiniband/hw/mlx5/cq.c
+++ b/drivers/infiniband/hw/mlx5/cq.c
@@ -74,11 +74,6 @@ static void *get_cqe(struct mlx5_ib_cq *cq, int n)
return mlx5_frag_buf_get_wqe(&cq->buf.fbc, n);
}
-static u8 sw_ownership_bit(int n, int nent)
-{
- return (n & nent) ? 1 : 0;
-}
-
static void *get_sw_cqe(struct mlx5_ib_cq *cq, int n)
{
void *cqe = get_cqe(cq, n & cq->ibcq.cqe);
@@ -1258,87 +1253,11 @@ static int resize_user(struct mlx5_ib_dev *dev, struct mlx5_ib_cq *cq,
return 0;
}
-static int resize_kernel(struct mlx5_ib_dev *dev, struct mlx5_ib_cq *cq,
- int entries, int cqe_size)
-{
- int err;
-
- cq->resize_buf = kzalloc(sizeof(*cq->resize_buf), GFP_KERNEL);
- if (!cq->resize_buf)
- return -ENOMEM;
-
- err = alloc_cq_frag_buf(dev, cq->resize_buf, entries, cqe_size);
- if (err)
- goto ex;
-
- init_cq_frag_buf(cq->resize_buf);
-
- return 0;
-
-ex:
- kfree(cq->resize_buf);
- return err;
-}
-
-static int copy_resize_cqes(struct mlx5_ib_cq *cq)
-{
- struct mlx5_ib_dev *dev = to_mdev(cq->ibcq.device);
- struct mlx5_cqe64 *scqe64;
- struct mlx5_cqe64 *dcqe64;
- void *start_cqe;
- void *scqe;
- void *dcqe;
- int ssize;
- int dsize;
- int i;
- u8 sw_own;
-
- ssize = cq->buf.cqe_size;
- dsize = cq->resize_buf->cqe_size;
- if (ssize != dsize) {
- mlx5_ib_warn(dev, "resize from different cqe size is not supported\n");
- return -EINVAL;
- }
-
- i = cq->mcq.cons_index;
- scqe = get_sw_cqe(cq, i);
- scqe64 = ssize == 64 ? scqe : scqe + 64;
- start_cqe = scqe;
- if (!scqe) {
- mlx5_ib_warn(dev, "expected cqe in sw ownership\n");
- return -EINVAL;
- }
-
- while (get_cqe_opcode(scqe64) != MLX5_CQE_RESIZE_CQ) {
- dcqe = mlx5_frag_buf_get_wqe(&cq->resize_buf->fbc,
- (i + 1) & cq->resize_buf->nent);
- dcqe64 = dsize == 64 ? dcqe : dcqe + 64;
- sw_own = sw_ownership_bit(i + 1, cq->resize_buf->nent);
- memcpy(dcqe, scqe, dsize);
- dcqe64->op_own = (dcqe64->op_own & ~MLX5_CQE_OWNER_MASK) | sw_own;
-
- ++i;
- scqe = get_sw_cqe(cq, i);
- scqe64 = ssize == 64 ? scqe : scqe + 64;
- if (!scqe) {
- mlx5_ib_warn(dev, "expected cqe in sw ownership\n");
- return -EINVAL;
- }
-
- if (scqe == start_cqe) {
- pr_warn("resize CQ failed to get resize CQE, CQN 0x%x\n",
- cq->mcq.cqn);
- return -ENOMEM;
- }
- }
- ++cq->mcq.cons_index;
- return 0;
-}
-
int mlx5_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata)
{
struct mlx5_ib_dev *dev = to_mdev(ibcq->device);
struct mlx5_ib_cq *cq = to_mcq(ibcq);
+ unsigned long page_size;
void *cqc;
u32 *in;
int err;
@@ -1348,7 +1267,6 @@ int mlx5_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata)
unsigned int page_shift;
int inlen;
int cqe_size;
- unsigned long flags;
if (!MLX5_CAP_GEN(dev->mdev, cq_resize)) {
pr_info("Firmware does not support resize CQ\n");
@@ -1371,34 +1289,19 @@ int mlx5_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata)
return 0;
mutex_lock(&cq->resize_mutex);
- if (udata) {
- unsigned long page_size;
-
- err = resize_user(dev, cq, entries, udata, &cqe_size);
- if (err)
- goto ex;
-
- page_size = mlx5_umem_find_best_cq_quantized_pgoff(
- cq->resize_umem, cqc, log_page_size,
- MLX5_ADAPTER_PAGE_SHIFT, page_offset, 64,
- &page_offset_quantized);
- if (!page_size) {
- err = -EINVAL;
- goto ex_resize;
- }
- npas = ib_umem_num_dma_blocks(cq->resize_umem, page_size);
- page_shift = order_base_2(page_size);
- } else {
- struct mlx5_frag_buf *frag_buf;
+ err = resize_user(dev, cq, entries, udata, &cqe_size);
+ if (err)
+ goto ex;
- cqe_size = 64;
- err = resize_kernel(dev, cq, entries, cqe_size);
- if (err)
- goto ex;
- frag_buf = &cq->resize_buf->frag_buf;
- npas = frag_buf->npages;
- page_shift = frag_buf->page_shift;
+ page_size = mlx5_umem_find_best_cq_quantized_pgoff(
+ cq->resize_umem, cqc, log_page_size, MLX5_ADAPTER_PAGE_SHIFT,
+ page_offset, 64, &page_offset_quantized);
+ if (!page_size) {
+ err = -EINVAL;
+ goto ex_resize;
}
+ npas = ib_umem_num_dma_blocks(cq->resize_umem, page_size);
+ page_shift = order_base_2(page_size);
inlen = MLX5_ST_SZ_BYTES(modify_cq_in) +
MLX5_FLD_SZ_BYTES(modify_cq_in, pas[0]) * npas;
@@ -1410,11 +1313,7 @@ int mlx5_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata)
}
pas = (__be64 *)MLX5_ADDR_OF(modify_cq_in, in, pas);
- if (udata)
- mlx5_ib_populate_pas(cq->resize_umem, 1UL << page_shift, pas,
- 0);
- else
- mlx5_fill_page_frag_array(&cq->resize_buf->frag_buf, pas);
+ mlx5_ib_populate_pas(cq->resize_umem, 1UL << page_shift, pas, 0);
MLX5_SET(modify_cq_in, in,
modify_field_select_resize_field_select.resize_field_select.resize_field_select,
@@ -1440,31 +1339,10 @@ int mlx5_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata)
if (err)
goto ex_alloc;
- if (udata) {
- cq->ibcq.cqe = entries - 1;
- ib_umem_release(cq->ibcq.umem);
- cq->ibcq.umem = cq->resize_umem;
- cq->resize_umem = NULL;
- } else {
- struct mlx5_ib_cq_buf tbuf;
- int resized = 0;
-
- spin_lock_irqsave(&cq->lock, flags);
- if (cq->resize_buf) {
- err = copy_resize_cqes(cq);
- if (!err) {
- tbuf = cq->buf;
- cq->buf = *cq->resize_buf;
- kfree(cq->resize_buf);
- cq->resize_buf = NULL;
- resized = 1;
- }
- }
- cq->ibcq.cqe = entries - 1;
- spin_unlock_irqrestore(&cq->lock, flags);
- if (resized)
- free_cq_buf(dev, &tbuf);
- }
+ cq->ibcq.cqe = entries - 1;
+ ib_umem_release(cq->ibcq.umem);
+ cq->ibcq.umem = cq->resize_umem;
+ cq->resize_umem = NULL;
mutex_unlock(&cq->resize_mutex);
kvfree(in);
@@ -1475,10 +1353,7 @@ int mlx5_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata)
ex_resize:
ib_umem_release(cq->resize_umem);
- if (!udata) {
- free_cq_buf(dev, cq->resize_buf);
- cq->resize_buf = NULL;
- }
+ cq->resize_umem = NULL;
ex:
mutex_unlock(&cq->resize_mutex);
return err;
--
2.52.0