From: Leon Romanovsky <leon@kernel.org>
To: Yonatan Nachum <ynachum@amazon.com>
Cc: jgg@nvidia.com, linux-rdma@vger.kernel.org, mrgolin@amazon.com,
sleybo@amazon.com, matua@amazon.com, gal.pressman@linux.dev,
Daniel Kranzdorf <dkkranzd@amazon.com>
Subject: Re: [PATCH for-next] RDMA/efa: Validate SQ depth based on WQE size
Date: Wed, 13 May 2026 20:38:12 +0300 [thread overview]
Message-ID: <20260513173812.GH15586@unreal> (raw)
In-Reply-To: <20260507112110.869212-1-ynachum@amazon.com>
On Thu, May 07, 2026 at 11:21:10AM +0000, Yonatan Nachum wrote:
> From: Michael Margolin <mrgolin@amazon.com>
>
> Change the SQ depth validation to take into account the SQ WQE size.
> This is needed since when using 128-byte WQE the max SQ depth is cut in
> half. On create QP command, userspace provides SQ ring size which is SQ
> depth X WQE size so we can calculate the requested WQE size in the
> kernel.
>
> Reviewed-by: Daniel Kranzdorf <dkkranzd@amazon.com>
> Reviewed-by: Michael Margolin <mrgolin@amazon.com>
> Signed-off-by: Yonatan Nachum <ynachum@amazon.com>
> ---
> drivers/infiniband/hw/efa/efa_verbs.c | 39 ++++++++++++++++++---------
> 1 file changed, 27 insertions(+), 12 deletions(-)
Please add Fixes line.
Thanks
>
> diff --git a/drivers/infiniband/hw/efa/efa_verbs.c b/drivers/infiniband/hw/efa/efa_verbs.c
> index 7bd0838ebc99..eb95ed4e25f7 100644
> --- a/drivers/infiniband/hw/efa/efa_verbs.c
> +++ b/drivers/infiniband/hw/efa/efa_verbs.c
> @@ -612,14 +612,27 @@ static int qp_mmap_entries_setup(struct efa_qp *qp,
> return -ENOMEM;
> }
>
> +static int efa_calc_sq_wqe_size(u32 sq_ring_size, u32 max_send_wr)
> +{
> + return max_send_wr == 0 ? 0 : sq_ring_size / max_send_wr;
> +}
> +
> +static u32 efa_calc_sq_max_depth(struct efa_dev *dev, u32 sq_wqe_size)
> +{
> + return sq_wqe_size == 0 ? 0 :
> + rounddown_pow_of_two(dev->dev_attr.max_llq_size / sq_wqe_size);
> +}
> +
> static int efa_qp_validate_cap(struct efa_dev *dev,
> - struct ib_qp_init_attr *init_attr)
> + struct ib_qp_init_attr *init_attr,
> + u32 sq_wqe_size)
> {
> - if (init_attr->cap.max_send_wr > dev->dev_attr.max_sq_depth) {
> + u32 sq_max_depth = efa_calc_sq_max_depth(dev, sq_wqe_size);
> +
> + if (init_attr->cap.max_send_wr > sq_max_depth) {
> ibdev_dbg(&dev->ibdev,
> "qp: requested send wr[%u] exceeds the max[%u]\n",
> - init_attr->cap.max_send_wr,
> - dev->dev_attr.max_sq_depth);
> + init_attr->cap.max_send_wr, sq_max_depth);
> return -EINVAL;
> }
> if (init_attr->cap.max_recv_wr > dev->dev_attr.max_rq_depth) {
> @@ -686,19 +699,12 @@ int efa_create_qp(struct ib_qp *ibqp, struct ib_qp_init_attr *init_attr,
> struct efa_qp *qp = to_eqp(ibqp);
> struct efa_ucontext *ucontext;
> u16 supported_efa_flags = 0;
> + u32 sq_wqe_size;
> int err;
>
> ucontext = rdma_udata_to_drv_context(udata, struct efa_ucontext,
> ibucontext);
>
> - err = efa_qp_validate_cap(dev, init_attr);
> - if (err)
> - goto err_out;
> -
> - err = efa_qp_validate_attr(dev, init_attr);
> - if (err)
> - goto err_out;
> -
> err = ib_copy_validate_udata_in_cm(udata, cmd, driver_qp_type, 0);
> if (err)
> goto err_out;
> @@ -720,6 +726,15 @@ int efa_create_qp(struct ib_qp *ibqp, struct ib_qp_init_attr *init_attr,
> goto err_out;
> }
>
> + sq_wqe_size = efa_calc_sq_wqe_size(cmd.sq_ring_size, init_attr->cap.max_send_wr);
> + err = efa_qp_validate_cap(dev, init_attr, sq_wqe_size);
> + if (err)
> + goto err_out;
> +
> + err = efa_qp_validate_attr(dev, init_attr);
> + if (err)
> + goto err_out;
> +
> create_qp_params.uarn = ucontext->uarn;
> create_qp_params.pd = to_epd(ibqp->pd)->pdn;
>
> --
> 2.50.1
>
>
next prev parent reply other threads:[~2026-05-13 17:38 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-07 11:21 [PATCH for-next] RDMA/efa: Validate SQ depth based on WQE size Yonatan Nachum
2026-05-13 17:38 ` Leon Romanovsky [this message]
2026-05-13 19:24 ` Yonatan Nachum
2026-05-14 16:28 ` Leon Romanovsky
2026-05-14 20:45 ` Yonatan Nachum
2026-05-17 15:52 ` Leon Romanovsky
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=20260513173812.GH15586@unreal \
--to=leon@kernel.org \
--cc=dkkranzd@amazon.com \
--cc=gal.pressman@linux.dev \
--cc=jgg@nvidia.com \
--cc=linux-rdma@vger.kernel.org \
--cc=matua@amazon.com \
--cc=mrgolin@amazon.com \
--cc=sleybo@amazon.com \
--cc=ynachum@amazon.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.