git: 016f40466afc - main - mlx5en: fix rq->wqe_sz usage

From: Konstantin Belousov <kib_at_FreeBSD.org>
Date: Thu, 13 Mar 2025 16:03:26 UTC
The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=016f40466afc029df28d699650237b182aa88211

commit 016f40466afc029df28d699650237b182aa88211
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2025-03-02 08:58:03 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2025-03-13 16:01:59 +0000

    mlx5en: fix rq->wqe_sz usage
    
    Define it as the size of the single data segment in wqe.
    
    Reviewed by:    Ariel Ehrenberg <aehrenberg@nvidia.com>, Slava Shwartsman <slavash@nvidia.com>
    Sponsored by:   NVidia networking
    MFC after:      1 week
---
 sys/dev/mlx5/mlx5_en/mlx5_en_main.c | 12 ++++++------
 sys/dev/mlx5/mlx5_en/mlx5_en_rx.c   | 16 ++++++----------
 2 files changed, 12 insertions(+), 16 deletions(-)

diff --git a/sys/dev/mlx5/mlx5_en/mlx5_en_main.c b/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
index 8b2acddb869a..2c83492bdaa9 100644
--- a/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
+++ b/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
@@ -1226,9 +1226,9 @@ mlx5e_create_rq(struct mlx5e_channel *c,
 	    BUS_SPACE_MAXADDR,		/* lowaddr */
 	    BUS_SPACE_MAXADDR,		/* highaddr */
 	    NULL, NULL,			/* filter, filterarg */
-	    nsegs * MLX5E_MAX_RX_BYTES,	/* maxsize */
+	    nsegs * wqe_sz,		/* maxsize */
 	    nsegs,			/* nsegments */
-	    nsegs * MLX5E_MAX_RX_BYTES,	/* maxsegsize */
+	    nsegs * wqe_sz,		/* maxsegsize */
 	    0,				/* flags */
 	    NULL, NULL,			/* lockfunc, lockfuncarg */
 	    &rq->dma_tag)))
@@ -2317,18 +2317,18 @@ mlx5e_close_channel_wait(struct mlx5e_channel *c)
 static int
 mlx5e_get_wqe_sz(struct mlx5e_priv *priv, u32 *wqe_sz, u32 *nsegs)
 {
-	u32 r, n;
+	u32 r, n, maxs;
 
-	r = priv->params.hw_lro_en ? priv->params.lro_wqe_sz :
+	maxs = priv->params.hw_lro_en ? priv->params.lro_wqe_sz :
 	    MLX5E_SW2MB_MTU(if_getmtu(priv->ifp));
-	r = r > MCLBYTES ? MJUMPAGESIZE : MCLBYTES;
+	r = maxs > MCLBYTES ? MJUMPAGESIZE : MCLBYTES;
 
 	/*
 	 * n + 1 must be a power of two, because stride size must be.
 	 * Stride size is 16 * (n + 1), as the first segment is
 	 * control.
 	 */
-	n = roundup_pow_of_two(1 + howmany(r, MLX5E_MAX_RX_BYTES)) - 1;
+	n = roundup_pow_of_two(1 + howmany(maxs, r)) - 1;
 	if (n > MLX5E_MAX_BUSDMA_RX_SEGS)
 		return (-ENOMEM);
 
diff --git a/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c b/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c
index 11f60d33bb74..3aef10109720 100644
--- a/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c
+++ b/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c
@@ -45,25 +45,21 @@ mlx5e_alloc_rx_wqe(struct mlx5e_rq *rq,
 	if (rq->mbuf[ix].mbuf != NULL)
 		return (0);
 
-	mb_head = mb = m_getjcl(M_NOWAIT, MT_DATA, M_PKTHDR,
-	    MLX5E_MAX_RX_BYTES);
+	mb_head = mb = m_getjcl(M_NOWAIT, MT_DATA, M_PKTHDR, rq->wqe_sz);
 	if (unlikely(mb == NULL))
 		return (-ENOMEM);
 
-	mb->m_len = MLX5E_MAX_RX_BYTES;
-	mb->m_pkthdr.len = MLX5E_MAX_RX_BYTES;
+	mb->m_len = rq->wqe_sz;
+	mb->m_pkthdr.len = rq->wqe_sz;
 
 	for (i = 1; i < rq->nsegs; i++) {
-		if (mb_head->m_pkthdr.len >= rq->wqe_sz)
-			break;
-		mb = mb->m_next = m_getjcl(M_NOWAIT, MT_DATA, 0,
-		    MLX5E_MAX_RX_BYTES);
+		mb = mb->m_next = m_getjcl(M_NOWAIT, MT_DATA, 0, rq->wqe_sz);
 		if (unlikely(mb == NULL)) {
 			m_freem(mb_head);
 			return (-ENOMEM);
 		}
-		mb->m_len = MLX5E_MAX_RX_BYTES;
-		mb_head->m_pkthdr.len += MLX5E_MAX_RX_BYTES;
+		mb->m_len = rq->wqe_sz;
+		mb_head->m_pkthdr.len += rq->wqe_sz;
 	}
 	/* rewind to first mbuf in chain */
 	mb = mb_head;