[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250305225215.1567043-7-kuba@kernel.org>
Date: Wed, 5 Mar 2025 14:52:11 -0800
From: Jakub Kicinski <kuba@...nel.org>
To: davem@...emloft.net
Cc: netdev@...r.kernel.org,
edumazet@...gle.com,
pabeni@...hat.com,
andrew+netdev@...n.ch,
horms@...nel.org,
michael.chan@...adcom.com,
pavan.chebbi@...adcom.com,
przemyslaw.kitszel@...el.com,
Jakub Kicinski <kuba@...nel.org>
Subject: [PATCH net-next v3 06/10] eth: bnxt: consolidate the GRO-but-not-really paths in bnxt_gro_skb()
bnxt_tpa_end() skips calling bnxt_gro_skb() if it determines that GRO
should not be performed. For ease of packet counting pass the gro bool
into bnxt_gro_skb(), this way we have a single point thru which all
packets coming out of bnxt_tpa_end() should pass.
Signed-off-by: Jakub Kicinski <kuba@...nel.org>
---
v3:
- flatten it harder, so we can reuse on normal Rx
v2: https://lore.kernel.org/20250228012534.3460918-7-kuba@kernel.org
---
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index d8a24a8bcfe8..dba4779f0925 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -1735,6 +1735,7 @@ static struct sk_buff *bnxt_gro_func_5730x(struct bnxt_tpa_info *tpa_info,
}
static inline struct sk_buff *bnxt_gro_skb(struct bnxt *bp,
+ bool gro,
struct bnxt_tpa_info *tpa_info,
struct rx_tpa_end_cmp *tpa_end,
struct rx_tpa_end_cmp_ext *tpa_end1,
@@ -1743,9 +1744,9 @@ static inline struct sk_buff *bnxt_gro_skb(struct bnxt *bp,
int payload_off;
u16 segs;
- segs = TPA_END_TPA_SEGS(tpa_end);
+ segs = gro ? TPA_END_TPA_SEGS(tpa_end) : 1;
if (segs == 1 || !IS_ENABLED(CONFIG_INET))
- return skb;
+ goto non_gro;
NAPI_GRO_CB(skb)->count = segs;
skb_shinfo(skb)->gso_size =
@@ -1756,8 +1757,12 @@ static inline struct sk_buff *bnxt_gro_skb(struct bnxt *bp,
else
payload_off = TPA_END_PAYLOAD_OFF(tpa_end);
skb = bp->gro_func(tpa_info, payload_off, TPA_END_GRO_TS(tpa_end), skb);
- if (likely(skb))
- tcp_gro_complete(skb);
+ if (!skb)
+ goto non_gro;
+
+ tcp_gro_complete(skb);
+
+non_gro: /* note: skb may be null! */
return skb;
}
@@ -1917,10 +1922,7 @@ static inline struct sk_buff *bnxt_tpa_end(struct bnxt *bp,
(tpa_info->flags2 & RX_CMP_FLAGS2_T_L4_CS_CALC) >> 3;
}
- if (gro)
- skb = bnxt_gro_skb(bp, tpa_info, tpa_end, tpa_end1, skb);
-
- return skb;
+ return bnxt_gro_skb(bp, gro, tpa_info, tpa_end, tpa_end1, skb);
}
static void bnxt_tpa_agg(struct bnxt *bp, struct bnxt_rx_ring_info *rxr,
--
2.48.1
Powered by blists - more mailing lists