target/realtek: use netif_receive_skb_list
authorRosen Penev <rosenp@gmail.com>
Sun, 30 Oct 2022 19:25:19 +0000 (12:25 -0700)
committerSander Vanheule <sander@svanheule.net>
Tue, 1 Nov 2022 08:09:24 +0000 (09:09 +0100)
Small performance improvement on rx.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
target/linux/realtek/files-5.10/drivers/net/ethernet/rtl838x_eth.c

index be84549b9ec9e673c67e6520376ec8ece07c25a2..166e49e139dc57a8c5d4b0a705811dbb8eb2d88b 100644 (file)
@@ -1252,6 +1252,7 @@ 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;
        struct sk_buff *skb;
+       LIST_HEAD(rx_list);
        unsigned long flags;
        int i, len, work_done = 0;
        u8 *data, *skb_data;
@@ -1329,7 +1330,7 @@ static int rtl838x_hw_receive(struct net_device *dev, int r, int budget)
                        dev->stats.rx_packets++;
                        dev->stats.rx_bytes += len;
 
-                       netif_receive_skb(skb);
+                       list_add_tail(&skb->list, &rx_list);
                } else {
                        if (net_ratelimit())
                                dev_warn(&dev->dev, "low on memory - packet dropped\n");
@@ -1347,6 +1348,8 @@ 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, 0);