[openwrt/openwrt] realtek: ethernet: drop open coding

LEDE Commits lede-commits at lists.infradead.org
Wed Sep 17 10:22:40 PDT 2025


robimarko pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/60bdae3ab3f82c4968445a88275e53e3e6991bc2

commit 60bdae3ab3f82c4968445a88275e53e3e6991bc2
Author: Markus Stockhausen <markus.stockhausen at gmx.de>
AuthorDate: Fri Sep 12 07:14:25 2025 -0400

    realtek: ethernet: drop open coding
    
    There is some open coding in the ethernet driver. Drop
    that and use kernel helpers instead.
    
    - Use napi_gro_receive() instead of local skb list
    - Use skb_put_data() instead of skb_put() plus memcpy()
    - Use netdev_alloc_skb_ip_align() instead of manual alignment
    
    Signed-off-by: Markus Stockhausen <markus.stockhausen at gmx.de>
    Link: https://github.com/openwrt/openwrt/pull/20030
    Signed-off-by: Robert Marko <robimarko at gmail.com>
---
 .../realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c   | 13 +++----------
 1 file changed, 3 insertions(+), 10 deletions(-)

diff --git a/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c b/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c
index eb7bdcfc95..4b9ea3be68 100644
--- a/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c
+++ b/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c
@@ -1159,7 +1159,6 @@ static int rtl838x_hw_receive(struct net_device *dev, int r, int budget)
 {
 	struct rtl838x_eth_priv *priv = netdev_priv(dev);
 	struct ring_b *ring = priv->membase;
-	LIST_HEAD(rx_list);
 	unsigned long flags;
 	int work_done = 0;
 	u32	*last;
@@ -1173,7 +1172,6 @@ static int rtl838x_hw_receive(struct net_device *dev, int r, int budget)
 		struct sk_buff *skb;
 		struct dsa_tag tag;
 		struct p_hdr *h;
-		u8 *skb_data;
 		u8 *data;
 		int len;
 
@@ -1197,9 +1195,7 @@ static int rtl838x_hw_receive(struct net_device *dev, int r, int budget)
 		if (dsa)
 			len += 4;
 
-		skb = netdev_alloc_skb(dev, len + 4);
-		skb_reserve(skb, NET_IP_ALIGN);
-
+		skb = netdev_alloc_skb_ip_align(dev, len);
 		if (likely(skb)) {
 			/* BUG: Prevent bug on RTL838x SoCs */
 			if (priv->family_id == RTL8380_FAMILY_ID) {
@@ -1213,10 +1209,9 @@ static int rtl838x_hw_receive(struct net_device *dev, int r, int budget)
 				}
 			}
 
-			skb_data = skb_put(skb, len);
 			/* Make sure data is visible */
 			mb();
-			memcpy(skb->data, (u8 *)KSEG1ADDR(data), len);
+			skb_put_data(skb, (u8 *)KSEG1ADDR(data), len);
 			/* Overwrite CRC with cpu_tag */
 			if (dsa) {
 				priv->r->decode_tag(h, &tag);
@@ -1242,7 +1237,7 @@ static int rtl838x_hw_receive(struct net_device *dev, int r, int budget)
 			dev->stats.rx_packets++;
 			dev->stats.rx_bytes += len;
 
-			list_add_tail(&skb->list, &rx_list);
+			napi_gro_receive(&priv->rx_qs[r].napi, skb);
 		} else {
 			if (net_ratelimit())
 				dev_warn(&dev->dev, "low on memory - packet dropped\n");
@@ -1261,8 +1256,6 @@ static int rtl838x_hw_receive(struct net_device *dev, int r, int budget)
 		last = (u32 *)KSEG1ADDR(sw_r32(priv->r->dma_if_rx_cur + r * 4));
 	} while (&ring->rx_r[r][ring->c_rx[r]] != last && work_done < budget);
 
-	netif_receive_skb_list(&rx_list);
-
 	/* Update counters */
 	priv->r->update_cntr(r, work_done);
 




More information about the lede-commits mailing list