git: 016f40466afc - main - mlx5en: fix rq->wqe_sz usage
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
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;