From 85d403a5790cc1f0942800cee352bc0990d25d95 Mon Sep 17 00:00:00 2001 From: Sieng Piaw Liew Date: Wed, 29 Jun 2022 16:16:13 +0800 Subject: [PATCH] bmips: batch process eth_type_trans() in rx path Improve cache efficiency by running eth_type_trans() in its own loop. Signed-off-by: Sieng Piaw Liew --- .../files/drivers/net/ethernet/broadcom/bcm6368-enetsw.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/target/linux/bmips/files/drivers/net/ethernet/broadcom/bcm6368-enetsw.c b/target/linux/bmips/files/drivers/net/ethernet/broadcom/bcm6368-enetsw.c index b7485ca51ae..9b7c21c019c 100644 --- a/target/linux/bmips/files/drivers/net/ethernet/broadcom/bcm6368-enetsw.c +++ b/target/linux/bmips/files/drivers/net/ethernet/broadcom/bcm6368-enetsw.c @@ -335,6 +335,7 @@ static int bcm6368_enetsw_receive_queue(struct net_device *dev, int budget) struct bcm6368_enetsw *priv = netdev_priv(dev); struct device *kdev = &priv->pdev->dev; struct list_head rx_list; + struct sk_buff *skb; int processed = 0; INIT_LIST_HEAD(&rx_list); @@ -347,7 +348,6 @@ static int bcm6368_enetsw_receive_queue(struct net_device *dev, int budget) do { struct bcm6368_enetsw_desc *desc; unsigned int frag_size; - struct sk_buff *skb; unsigned char *buf; int desc_idx; u32 len_stat; @@ -418,12 +418,13 @@ static int bcm6368_enetsw_receive_queue(struct net_device *dev, int budget) skb_reserve(skb, NET_SKB_PAD); skb_put(skb, len); - skb->protocol = eth_type_trans(skb, dev); dev->stats.rx_packets++; dev->stats.rx_bytes += len; list_add_tail(&skb->list, &rx_list); } while (processed < budget); + list_for_each_entry(skb, &rx_list, list) + skb->protocol = eth_type_trans(skb, dev); netif_receive_skb_list(&rx_list); priv->rx_desc_count -= processed;