Skip to content

Commit a49dec3

Browse files
rogerqmehmetb0
authored andcommitted
net: ethernet: ti: am65_cpsw: fix tx_cleanup for XDP case
BugLink: https://bugs.launchpad.net/bugs/2104873 [ Upstream commit 4542536 ] For XDP transmit case, swdata doesn't contain SKB but the XDP Frame. Infer the correct swdata based on buffer type and return the XDP Frame for XDP transmit case. Signed-off-by: Roger Quadros <rogerq@kernel.org> Fixes: 8acacc4 ("net: ethernet: ti: am65-cpsw: Add minimal XDP support") Link: https://patch.msgid.link/20250210-am65-cpsw-xdp-fixes-v1-3-ec6b1f7f1aca@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org> Signed-off-by: Noah Wager <noah.wager@canonical.com>
1 parent 32df05a commit a49dec3

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

drivers/net/ethernet/ti/am65-cpsw-nuss.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -567,16 +567,24 @@ static void am65_cpsw_nuss_xmit_free(struct am65_cpsw_tx_chn *tx_chn,
567567
static void am65_cpsw_nuss_tx_cleanup(void *data, dma_addr_t desc_dma)
568568
{
569569
struct am65_cpsw_tx_chn *tx_chn = data;
570+
enum am65_cpsw_tx_buf_type buf_type;
570571
struct cppi5_host_desc_t *desc_tx;
572+
struct xdp_frame *xdpf;
571573
struct sk_buff *skb;
572574
void **swdata;
573575

574576
desc_tx = k3_cppi_desc_pool_dma2virt(tx_chn->desc_pool, desc_dma);
575577
swdata = cppi5_hdesc_get_swdata(desc_tx);
576-
skb = *(swdata);
577-
am65_cpsw_nuss_xmit_free(tx_chn, desc_tx);
578+
buf_type = am65_cpsw_nuss_buf_type(tx_chn, desc_dma);
579+
if (buf_type == AM65_CPSW_TX_BUF_TYPE_SKB) {
580+
skb = *(swdata);
581+
dev_kfree_skb_any(skb);
582+
} else {
583+
xdpf = *(swdata);
584+
xdp_return_frame(xdpf);
585+
}
578586

579-
dev_kfree_skb_any(skb);
587+
am65_cpsw_nuss_xmit_free(tx_chn, desc_tx);
580588
}
581589

582590
static struct sk_buff *am65_cpsw_build_skb(void *page_addr,

0 commit comments

Comments
 (0)