git: 466623f29d5f - stable/14 - mlx5en: fix rq->wqe_sz usage
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 20 Mar 2025 03:14:13 UTC
The branch stable/14 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=466623f29d5f46013160734768424c7cb76486e1 commit 466623f29d5f46013160734768424c7cb76486e1 Author: Konstantin Belousov <kib@FreeBSD.org> AuthorDate: 2025-03-02 08:58:03 +0000 Commit: Konstantin Belousov <kib@FreeBSD.org> CommitDate: 2025-03-20 03:13:38 +0000 mlx5en: fix rq->wqe_sz usage (cherry picked from commit 016f40466afc029df28d699650237b182aa88211) --- sys/dev/mlx5/mlx5_en/mlx5_en_main.c | 14 ++++++-------- sys/dev/mlx5/mlx5_en/mlx5_en_rx.c | 16 ++++++---------- 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/sys/dev/mlx5/mlx5_en/mlx5_en_main.c b/sys/dev/mlx5/mlx5_en/mlx5_en_main.c index 8f424f7ebecd..4e3e66abf6d9 100644 --- a/sys/dev/mlx5/mlx5_en/mlx5_en_main.c +++ b/sys/dev/mlx5/mlx5_en/mlx5_en_main.c @@ -1221,9 +1221,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))) @@ -2310,20 +2310,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. */ - for (n = howmany(r, MLX5E_MAX_RX_BYTES); !powerof2(n + 1); n++) - ; - + 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 8e0c943bf1fe..2ed2060d5a5d 100644 --- a/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c +++ b/sys/dev/mlx5/mlx5_en/mlx5_en_rx.c @@ -44,25 +44,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;