From patchwork Mon Feb 10 14:52:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roger Quadros X-Patchwork-Id: 13968005 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BD430230987; Mon, 10 Feb 2025 14:52:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739199147; cv=none; b=EussdtS0klIiznlxoNuKLW4kvznUfrvA3EIMAWGyLC62w0G/qo/Lj9UXGMhBe+Qwv3Sc+AIOknS/ppdg/+05ppo8Z5upNeEzCVh/wXwVytST4rACqKGS8gAvF61g4rXm35mskR+myTfDrFBgqr07POefOz2u9Bjb6GEf2mNFzhc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739199147; c=relaxed/simple; bh=P2BvZfapl8SmRLSM8MJDVRi7Xewr105bmnDY2wj9fKY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=U6J/Np4mUltquWfPuMgGIxqSPQyOj5vaHRIro/rssfQC9swdEutodh5I2z88/DrqIy+E3U1UJcI/lOlrVeDYE+rKF5DF33e6I+jIW7pkqWnHeHkNpaR/8Vfjo4+uba9MSb5tqwfoI7ATaGqxZ/iG/lDYYerbCuGz2jHZ0NCa9UA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ekKWUl7h; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ekKWUl7h" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 77B60C4CED1; Mon, 10 Feb 2025 14:52:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739199147; bh=P2BvZfapl8SmRLSM8MJDVRi7Xewr105bmnDY2wj9fKY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ekKWUl7hKagb5yzfZh7Z8xq78ero9ZoFnrnQu2Kh7ZGBlj0kuT4fQVCoTLuasvzEy 4+uszB2XjnXDGIMdOqVzhrzEHQwtzOJ5nxfu3FT86h1QsWR3mifsMgFSS4zqrhuMgU qZe16vwl/GXqNoAVM75FdsHRaMSYeVv7ibl+yBeY+yMNUpP/FVlpAkIsZEdkEwm782 fFn9FzBmm0446RgoMMo4Fv4YhTHVtSo4yAK+myw2nsSe3b7rUvdznCqEt+ccj+intz ZGy9Vus+w1KfFnFR5Btli9EoSJWnz0HiQK/QHlTXg4o3/dCr1eN4lJM+GvcAV4JWYO MS9ToUA0IEtGw== From: Roger Quadros Date: Mon, 10 Feb 2025 16:52:15 +0200 Subject: [PATCH net 1/3] net: ethernet: ti: am65-cpsw: fix memleak in certain XDP cases Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250210-am65-cpsw-xdp-fixes-v1-1-ec6b1f7f1aca@kernel.org> References: <20250210-am65-cpsw-xdp-fixes-v1-0-ec6b1f7f1aca@kernel.org> In-Reply-To: <20250210-am65-cpsw-xdp-fixes-v1-0-ec6b1f7f1aca@kernel.org> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Julien Panis , Jacob Keller Cc: danishanwar@ti.com, s-vadapalli@ti.com, srk@ti.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, Roger Quadros X-Mailer: b4 0.14.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=2991; i=rogerq@kernel.org; h=from:subject:message-id; bh=P2BvZfapl8SmRLSM8MJDVRi7Xewr105bmnDY2wj9fKY=; b=owEBbQKS/ZANAwAIAdJaa9O+djCTAcsmYgBnqhKizQ8izCA0GIpx7TxLLwJmjawOHkmFQ8EJA n+3TDc+tXaJAjMEAAEIAB0WIQRBIWXUTJ9SeA+rEFjSWmvTvnYwkwUCZ6oSogAKCRDSWmvTvnYw kybpD/9e7yy9viq0JZrLr/Rw/n7xLj+mV6YfSvh2rJvCIKubZ4dNl9Ng5/r3OQ9o0fNGrbWsF/o yfRa4Wx6jtxEjq/BO6zvepjUzd7eVPGi7uY/k24LzlqMtMJHJ48B17JaIwbXGOruPFTeubp1FoM Bocpyh3KqL4rgYLq0TAJ0Xo8uTbu55GREpgIfTrVvc16JXv1Itg09gIAjFQL6dMT5MBaxDKwQFG mVOcSOsUI4Ql585QVRCWdV8AHRJ3gGxplmL1a/J+d7qvtQgXbyzQNmNMBMXXomOtO8YIWINQ0h0 fxj6OBh01qi0AzDmXwJAtcec2BxpmFVG5q1jfEQZ8NiQON8cdNSW5Gq/+XRdHWdwGjM2m/H+OLD /Wv7rKHdZTh0kgW1hNotDjERrx+qyyr62ciO5W1tkfb9qLTnrx45H+kZV2IUaIP7ynHIxCvZaku gzcJ+MoJnFX4Ys8TwtKS7xZLhzqlUwz3Zl72070tc4NjOKIxFaccx8jWKhM2emW+RB15p43xxYQ G3eqekjTaH6zshyFiF4+Nh5ckIQNb+kYOoT/QsjAqAvgQiWRs7fJ/0I07Fc01XY/EOL0i8jHN+i 8KYLWd62PDVVUn4JJF0AUxtBKA9dTrRD4YMYXzjrw39Vm5ZJw/Qz6VDLRWhgydwdGNMwUeKQZGE V0wMW7Iy90CKW7w== X-Developer-Key: i=rogerq@kernel.org; a=openpgp; fpr=412165D44C9F52780FAB1058D25A6BD3BE763093 X-Patchwork-Delegate: kuba@kernel.org If the XDP program doesn't result in XDP_PASS then we leak the memory allocated by am65_cpsw_build_skb(). It is pointless to allocate SKB memory before running the XDP program as we would be wasting CPU cycles for cases other than XDP_PASS. Move the SKB allocation after evaluating the XDP program result. This fixes the memleak. A performance boost is seen for XDP_DROP test. XDP_DROP test: Before: 460256 rx/s 0 err/s After: 784130 rx/s 0 err/s Fixes: 8acacc40f733 ("net: ethernet: ti: am65-cpsw: Add minimal XDP support") Signed-off-by: Roger Quadros --- drivers/net/ethernet/ti/am65-cpsw-nuss.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/ethernet/ti/am65-cpsw-nuss.c index b663271e79f7..e26c6dc02648 100644 --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c +++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c @@ -842,7 +842,8 @@ static void am65_cpsw_nuss_tx_cleanup(void *data, dma_addr_t desc_dma) static struct sk_buff *am65_cpsw_build_skb(void *page_addr, struct net_device *ndev, - unsigned int len) + unsigned int len, + unsigned int headroom) { struct sk_buff *skb; @@ -852,7 +853,7 @@ static struct sk_buff *am65_cpsw_build_skb(void *page_addr, if (unlikely(!skb)) return NULL; - skb_reserve(skb, AM65_CPSW_HEADROOM); + skb_reserve(skb, headroom); skb->dev = ndev; return skb; @@ -1277,7 +1278,7 @@ static int am65_cpsw_nuss_rx_packets(struct am65_cpsw_rx_flow *flow, u32 flow_idx = flow->id; struct sk_buff *skb; struct xdp_buff xdp; - int headroom, ret; + int headroom = AM65_CPSW_HEADROOM, ret; void *page_addr; u32 *psdata; @@ -1315,16 +1316,8 @@ static int am65_cpsw_nuss_rx_packets(struct am65_cpsw_rx_flow *flow, dev_dbg(dev, "%s rx csum_info:%#x\n", __func__, csum_info); dma_unmap_single(rx_chn->dma_dev, buf_dma, buf_dma_len, DMA_FROM_DEVICE); - k3_cppi_desc_pool_free(rx_chn->desc_pool, desc_rx); - skb = am65_cpsw_build_skb(page_addr, ndev, - AM65_CPSW_MAX_PACKET_SIZE); - if (unlikely(!skb)) { - new_page = page; - goto requeue; - } - if (port->xdp_prog) { xdp_init_buff(&xdp, PAGE_SIZE, &port->xdp_rxq[flow->id]); xdp_prepare_buff(&xdp, page_addr, AM65_CPSW_HEADROOM, @@ -1334,9 +1327,14 @@ static int am65_cpsw_nuss_rx_packets(struct am65_cpsw_rx_flow *flow, if (*xdp_state != AM65_CPSW_XDP_PASS) goto allocate; - /* Compute additional headroom to be reserved */ - headroom = (xdp.data - xdp.data_hard_start) - skb_headroom(skb); - skb_reserve(skb, headroom); + headroom = xdp.data - xdp.data_hard_start; + } + + skb = am65_cpsw_build_skb(page_addr, ndev, + AM65_CPSW_MAX_PACKET_SIZE, headroom); + if (unlikely(!skb)) { + new_page = page; + goto requeue; } ndev_priv = netdev_priv(ndev); From patchwork Mon Feb 10 14:52:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roger Quadros X-Patchwork-Id: 13968006 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BBD6A204874; Mon, 10 Feb 2025 14:52:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739199152; cv=none; b=rreImj8JoBTmKCEDeldVTGrt4ZjJX/eqrUq/PTpuMOTeoJZHviLGhCzowPueK3GQ8HAXwjXmGHd7tPKvT1GEwSCASSiZa1/qfo/JjQAdbSBaqRlBKfG7IpL1JC5dWOa6MWFmvDalI9v1CLdttlfjdYZ9/gwEHnXpCe1Wkn0wPJA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739199152; c=relaxed/simple; bh=lncTpqRYnczSkh5p/M+nCdG+y49YXkzek6zKzkRyYvI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pZHBEYb7GJfD6fhXtJea3+FTWfRGIYEAtjnqDcGjOfJ6DHSqTgUieEKz5fSK3c2OmU12uJomNo6Ijihdjm22qb171Uq/LtUARYpfE7e0XfOZGQa7HjXlarCogLcM9a7rYatgkv2Gifdfqvgb5p50pH1KGZwiYL6q1F/+H2ZSt3s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=RM59dYvI; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="RM59dYvI" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B67FDC4CEDF; Mon, 10 Feb 2025 14:52:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739199151; bh=lncTpqRYnczSkh5p/M+nCdG+y49YXkzek6zKzkRyYvI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=RM59dYvIaqXJxUL+ip70YoOyaT1aZRc4WxkdrkI3Xv2Vsym4Qu/GzIkkV1gSxBBS+ MMp9m2Zbtr+uxZYu3uLKD2CINeQ/w98+vfgz3cgtGWrGMsC5RrKq89ot+VOWvMb0lC oPEnc6lhe0cNZQv1ye+GGXfhYZWXMMGSAax3qAwOS8oBU1pUTY966KxeNM9w1TyDS2 yeUXot3yn2qSi3RUxKR8d9gFbjp0fkkd9R0hChCS4/kwtco64b+xFebNDmmfkM0IMR YfonO2tOHlgzZdo8yc8sCsgYUsqyRueRa7VwZSRlpa29UJMy5CsRLvKoc5Sc29+w7L bHViJg9LLz21g== From: Roger Quadros Date: Mon, 10 Feb 2025 16:52:16 +0200 Subject: [PATCH net 2/3] net: ethernet: ti: am65-cpsw: fix RX & TX statistics for XDP_TX case Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250210-am65-cpsw-xdp-fixes-v1-2-ec6b1f7f1aca@kernel.org> References: <20250210-am65-cpsw-xdp-fixes-v1-0-ec6b1f7f1aca@kernel.org> In-Reply-To: <20250210-am65-cpsw-xdp-fixes-v1-0-ec6b1f7f1aca@kernel.org> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Julien Panis , Jacob Keller Cc: danishanwar@ti.com, s-vadapalli@ti.com, srk@ti.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, Roger Quadros X-Mailer: b4 0.14.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=1990; i=rogerq@kernel.org; h=from:subject:message-id; bh=lncTpqRYnczSkh5p/M+nCdG+y49YXkzek6zKzkRyYvI=; b=owEBbQKS/ZANAwAIAdJaa9O+djCTAcsmYgBnqhKi4MYM1qAWQ/XNJhpMHhpMX/8HUSd1n1jKn ZGAkOTZkleJAjMEAAEIAB0WIQRBIWXUTJ9SeA+rEFjSWmvTvnYwkwUCZ6oSogAKCRDSWmvTvnYw k6TnD/9IaCfbKplT9k8Nm/4UtuCKaGAFBtKLfdgPjexNjUZBA9vvfR6X8DsLsCs3FqE6+vFV5VW 1AbNNnRzAeI/JOf+d0FvJTzKuXF18sKTP8MuOwgWjuXYS+o1ct8BDD3Z2F7WUXRhpwPMTv4hj01 a/tzI0w3ZOPzK6Z5YmnjP1urqPbup032Sng7geG+PdK9NjREX2YwHiTLfpxsBrwCTkNMt9j+MUu w2EuzZuKHVw8f6nQ0xw5Sl24guCeEneu8vQlC+EuyZ9ENAWgHI2rL2cJzoS4PyFlEul7CW8aUdc +rK5udQUy3zYWNqqcyjIxrF1jDwY/WDMHQuhMhUE5d+rqTbSys959wBgX59thA1iF+czlUl3Utt fteRXPkJgMjDdo9JO/z36/43Y/2gisVrNxOvW9IDKA1LzfcvsSwJ2jSrrxHB5SEQMLR8yFBjW1/ eimiTkNBaloKBrpRsIm/nHm92t2LTXsiESchxTz/z3xrvIQX3x/jBLYvDpQLHJ2ENhN06wyyCQ5 wE4nziW71Ha8xPOHNk85+iyui2fA58rh5viyw7uQ8pE1tZq1kryMTW/birNviUoOPnwiXJCMag6 4nUX+/a/DGwuEl3WhW6U/ONil3lp7C/k/yXBco1MpxfNLBytIqRsfbnXeX8Kh8AoJTm4HnO9qSw KAHraiR/xuU2PFg== X-Developer-Key: i=rogerq@kernel.org; a=openpgp; fpr=412165D44C9F52780FAB1058D25A6BD3BE763093 X-Patchwork-Delegate: kuba@kernel.org For successful XDP_TX and XDP_REDIRECT cases, the packet was received successfully so update RX statistics. Use original received packet length for that. TX packets statistics are incremented on TX completion so don't update it while TX queueing. If xdp_convert_buff_to_frame() fails, increment tx_dropped. Signed-off-by: Roger Quadros Fixes: 8acacc40f733 ("net: ethernet: ti: am65-cpsw: Add minimal XDP support") --- drivers/net/ethernet/ti/am65-cpsw-nuss.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/ethernet/ti/am65-cpsw-nuss.c index e26c6dc02648..bee2d66b9ccf 100644 --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c +++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c @@ -1170,9 +1170,11 @@ static int am65_cpsw_run_xdp(struct am65_cpsw_rx_flow *flow, struct xdp_frame *xdpf; struct bpf_prog *prog; struct page *page; + int pkt_len; u32 act; int err; + pkt_len = *len; prog = READ_ONCE(port->xdp_prog); if (!prog) return AM65_CPSW_XDP_PASS; @@ -1190,8 +1192,10 @@ static int am65_cpsw_run_xdp(struct am65_cpsw_rx_flow *flow, netif_txq = netdev_get_tx_queue(ndev, tx_chn->id); xdpf = xdp_convert_buff_to_frame(xdp); - if (unlikely(!xdpf)) + if (unlikely(!xdpf)) { + ndev->stats.tx_dropped++; goto drop; + } __netif_tx_lock(netif_txq, cpu); err = am65_cpsw_xdp_tx_frame(ndev, tx_chn, xdpf, @@ -1200,14 +1204,14 @@ static int am65_cpsw_run_xdp(struct am65_cpsw_rx_flow *flow, if (err) goto drop; - dev_sw_netstats_tx_add(ndev, 1, *len); + dev_sw_netstats_rx_add(ndev, pkt_len); ret = AM65_CPSW_XDP_CONSUMED; goto out; case XDP_REDIRECT: if (unlikely(xdp_do_redirect(ndev, xdp, prog))) goto drop; - dev_sw_netstats_rx_add(ndev, *len); + dev_sw_netstats_rx_add(ndev, pkt_len); ret = AM65_CPSW_XDP_REDIRECT; goto out; default: From patchwork Mon Feb 10 14:52:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roger Quadros X-Patchwork-Id: 13968007 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5883D1F8BCC; Mon, 10 Feb 2025 14:52:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739199156; cv=none; b=HY5FueCRI/KgbKA9IA/WxZ2Jqtx7qF/HfoBz5+/KCqRGe6VmFjoYM72idsv7B7WxwlYcUZhRLsipQ9MaLJGhQwkIaHZg2Xnwq6vXOYyLCPgUYpHoelqU8ynUVsaZjB3La0NrFMDZrnAeZ43pNLSlpnzZnw1qjtrnTqA8bWMZ45E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739199156; c=relaxed/simple; bh=HNcbYnzHO18TyVd6ABCg4Wajlo8GzqSxCWV3Zsn7hkg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mRvFjbnjuT+bofvC1utpCHucvfY/A7s4lbKzUlZF3PeLZ00EyqQpcL3iMKgqKpjj+MkTyFNovwAD6DAJapCIVanhljQeG91MCQZdmZ81qnZFPUcYXPDzX1U8w/4Z31fdaHwSkOz4rDvcd9Ns3bDwE5Q+i3+GLLrj5NZNI/CqLuY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qYojaCmr; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="qYojaCmr" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 023C1C4CEE6; Mon, 10 Feb 2025 14:52:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739199155; bh=HNcbYnzHO18TyVd6ABCg4Wajlo8GzqSxCWV3Zsn7hkg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=qYojaCmrwCxldnXH3qTBYPOqlqPPcOVrgt9Rtw9THaL8Xu6GZ155qUg5omCvMilbC QYLZhiY871+nZi4k6avHqC8xgThwyZ/Dg/3mWUPzas72IONB1GuXYRVw7cBHWfMwLA akDl+SXI0eeuXvlk4T9m0MUK2B99yiahxg+UYSMIRZcJg5HnsIWleXPb0jmtcf3gH5 elApzBHvDuZJIuZEXNxQS6eNAwg+nR/NG9e2S6NG3hUkTkFwBy9iBHwm4imfeMkTZV VZAkuboF+wcFLBKM5NuY8DbWj9jbGpcVpdRRLoSe2RTu9ZP16A5+6dmpBF8Q2t9dq9 7X9tZWNMnF/UA== From: Roger Quadros Date: Mon, 10 Feb 2025 16:52:17 +0200 Subject: [PATCH net 3/3] net: ethernet: ti: am65_cpsw: fix tx_cleanup for XDP case Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250210-am65-cpsw-xdp-fixes-v1-3-ec6b1f7f1aca@kernel.org> References: <20250210-am65-cpsw-xdp-fixes-v1-0-ec6b1f7f1aca@kernel.org> In-Reply-To: <20250210-am65-cpsw-xdp-fixes-v1-0-ec6b1f7f1aca@kernel.org> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Julien Panis , Jacob Keller Cc: danishanwar@ti.com, s-vadapalli@ti.com, srk@ti.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, Roger Quadros X-Mailer: b4 0.14.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=1578; i=rogerq@kernel.org; h=from:subject:message-id; bh=HNcbYnzHO18TyVd6ABCg4Wajlo8GzqSxCWV3Zsn7hkg=; b=owEBbQKS/ZANAwAIAdJaa9O+djCTAcsmYgBnqhKiCPZFRwQQnzzDX1Za3HRlmO8EtOYKxR4Eq dxKAmLUEe2JAjMEAAEIAB0WIQRBIWXUTJ9SeA+rEFjSWmvTvnYwkwUCZ6oSogAKCRDSWmvTvnYw k17xEADEofTjt0PuuvMAa+WeaALn9lkbgeG6I6m4p/gMSoZUDWNdaavMSHHFzqcgiIMfyvp2d3U hgZvSLtm/Bzd2oufPS053gCX7CusrMbYO9yfig690PoqpNahgYmlW+ScgsIxQl1dclZSEoA3Hci duBsU62mtRtOr36NLTsL96n2f71m83+oMg+blKg45LE62mkW2qU0XWWWoBZ/GzZ/kLV4dzq0icA LvBp/pl+hv2vKz8+X2hIXl4wprNMdPnr+Hg+KyyZsir6ZEv5Al+bDddQ8ISaLMouuinivH0EHZn +Th9wYFW12S4xmIYxUCmJYbFmqsT0nC0hPZl17M/Y6GF2wPHL7I55I+fqnsHueOBrE0BdmtFCIB RvqpJAMglI32znRg6DN/LBFp3yYC3jAM/n0QFeQ8IxSn7gyiJFmBv/3o1indiGBU4xQdq7f3UdD 0JLeRG8kEzUuhAcY5Y7iisgK48R3GVs/RXBzIzFc3AW1iUCf6cz/zC207yqQKiP1hKyoIHnQfUE lcWMza1HOFrVf6XwjaXcNfuHxS/wcPsEoC7MK3NYIOoxOpintNupRPYkih1XHWusJ08/ab4nKyv 8Qc9DCrl9+46HUvbuB2Y0Fo3l3E1vjYTMU0KreyeEpIlLItxL+drFbA0QubFHQZD+tgNE4KTQth UpTZqleGUGXg1VA== X-Developer-Key: i=rogerq@kernel.org; a=openpgp; fpr=412165D44C9F52780FAB1058D25A6BD3BE763093 X-Patchwork-Delegate: kuba@kernel.org 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 Fixes: 8acacc40f733 ("net: ethernet: ti: am65-cpsw: Add minimal XDP support") --- drivers/net/ethernet/ti/am65-cpsw-nuss.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/ethernet/ti/am65-cpsw-nuss.c index bee2d66b9ccf..a2b6a30918f6 100644 --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c +++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c @@ -828,16 +828,24 @@ static void am65_cpsw_nuss_xmit_free(struct am65_cpsw_tx_chn *tx_chn, static void am65_cpsw_nuss_tx_cleanup(void *data, dma_addr_t desc_dma) { struct am65_cpsw_tx_chn *tx_chn = data; + enum am65_cpsw_tx_buf_type buf_type; struct cppi5_host_desc_t *desc_tx; + struct xdp_frame *xdpf; struct sk_buff *skb; void **swdata; desc_tx = k3_cppi_desc_pool_dma2virt(tx_chn->desc_pool, desc_dma); swdata = cppi5_hdesc_get_swdata(desc_tx); - skb = *(swdata); - am65_cpsw_nuss_xmit_free(tx_chn, desc_tx); + buf_type = am65_cpsw_nuss_buf_type(tx_chn, desc_dma); + if (buf_type == AM65_CPSW_TX_BUF_TYPE_SKB) { + skb = *(swdata); + dev_kfree_skb_any(skb); + } else { + xdpf = *(swdata); + xdp_return_frame(xdpf); + } - dev_kfree_skb_any(skb); + am65_cpsw_nuss_xmit_free(tx_chn, desc_tx); } static struct sk_buff *am65_cpsw_build_skb(void *page_addr,