git: 392d7f026962 - stable/13 - cxgbe: fix enabling lro & rxtimestamps
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 04 Apr 2022 19:04:33 UTC
The branch stable/13 has been updated by np:
URL: https://cgit.FreeBSD.org/src/commit/?id=392d7f026962b273cdcd3b230403efaa05f29efe
commit 392d7f026962b273cdcd3b230403efaa05f29efe
Author: Andrew Gallatin <gallatin@FreeBSD.org>
AuthorDate: 2021-05-26 13:54:26 +0000
Commit: Navdeep Parhar <np@FreeBSD.org>
CommitDate: 2022-04-04 18:57:15 +0000
cxgbe: fix enabling lro & rxtimestamps
A recent change caused iq flags, like LRO, to be set before
init_iq(). However, init_iq() clears those flags, so they
became effectively impossible to set. This change moves
the initializion of these flags to after the call to init_iq().
This fixes LRO.
Differential Revision: https://reviews.freebsd.org/D30460
Reviewed by: np, rrs
Sponsored by: Netflix
Fixes: 43bbae19483fbde0a91e61acad8a6e71e334c8b8
(cherry picked from commit df8437a93dd5268e5bfd06411c01a5cbdb38c6ac)
---
sys/dev/cxgbe/t4_sge.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/sys/dev/cxgbe/t4_sge.c b/sys/dev/cxgbe/t4_sge.c
index 1c2102f4f06e..da0ac13c90e4 100644
--- a/sys/dev/cxgbe/t4_sge.c
+++ b/sys/dev/cxgbe/t4_sge.c
@@ -3953,12 +3953,7 @@ alloc_rxq(struct vi_info *vi, struct sge_rxq *rxq, int idx, int intr_idx,
if (rc != 0)
return (rc);
MPASS(rxq->lro.ifp == ifp); /* also indicates LRO init'ed */
-
- if (ifp->if_capenable & IFCAP_LRO)
- rxq->iq.flags |= IQ_LRO_ENABLED;
#endif
- if (ifp->if_capenable & IFCAP_HWRXTSTMP)
- rxq->iq.flags |= IQ_RX_TIMESTAMP;
rxq->ifp = ifp;
snprintf(name, sizeof(name), "%d", idx);
@@ -3968,6 +3963,12 @@ alloc_rxq(struct vi_info *vi, struct sge_rxq *rxq, int idx, int intr_idx,
init_iq(&rxq->iq, sc, vi->tmr_idx, vi->pktc_idx, vi->qsize_rxq,
intr_idx, tnl_cong(vi->pi, cong_drop));
+#if defined(INET) || defined(INET6)
+ if (ifp->if_capenable & IFCAP_LRO)
+ rxq->iq.flags |= IQ_LRO_ENABLED;
+#endif
+ if (ifp->if_capenable & IFCAP_HWRXTSTMP)
+ rxq->iq.flags |= IQ_RX_TIMESTAMP;
snprintf(name, sizeof(name), "%s rxq%d-fl",
device_get_nameunit(vi->dev), idx);
init_fl(sc, &rxq->fl, vi->qsize_rxq / 8, maxp, name);