diff options
| author | Konstantin Belousov <kib@FreeBSD.org> | 2025-03-02 08:58:03 +0000 |
|---|---|---|
| committer | Konstantin Belousov <kib@FreeBSD.org> | 2025-03-20 03:13:38 +0000 |
| commit | 466623f29d5f46013160734768424c7cb76486e1 (patch) | |
| tree | fb4f720745e52c8d8bee93e45abba4b0c13c3280 | |
| parent | f38e9a31baf1c3f6d59976891c038d96e27327c4 (diff) | |
mlx5en: fix rq->wqe_sz usage
(cherry picked from commit 016f40466afc029df28d699650237b182aa88211)
| -rw-r--r-- | sys/dev/mlx5/mlx5_en/mlx5_en_main.c | 14 | ||||
| -rw-r--r-- | 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; |
