The branch main has been updated by kib:

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

commit 016f40466afc029df28d699650237b182aa88211
Author:     Konstantin Belousov <k...@freebsd.org>
AuthorDate: 2025-03-02 08:58:03 +0000
Commit:     Konstantin Belousov <k...@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 <aehrenb...@nvidia.com>, Slava Shwartsman 
<slav...@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;

Reply via email to