diff options
author | Sieng Piaw Liew <liew.s.piaw@gmail.com> | 2022-06-29 16:16:13 +0800 |
---|---|---|
committer | Álvaro Fernández Rojas <noltari@gmail.com> | 2023-03-04 19:28:16 +0100 |
commit | 85d403a5790cc1f0942800cee352bc0990d25d95 (patch) | |
tree | 9867743bdc5d8d92c4728e8e5dbf772fa6f7ca6e /target/linux/bmips | |
parent | 686050b2b2b7f4e7b54632627d4ef8981c543959 (diff) | |
download | upstream-85d403a5790cc1f0942800cee352bc0990d25d95.tar.gz upstream-85d403a5790cc1f0942800cee352bc0990d25d95.tar.bz2 upstream-85d403a5790cc1f0942800cee352bc0990d25d95.zip |
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 <liew.s.piaw@gmail.com>
Diffstat (limited to 'target/linux/bmips')
-rw-r--r-- | target/linux/bmips/files/drivers/net/ethernet/broadcom/bcm6368-enetsw.c | 5 |
1 files 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 b7485ca51a..9b7c21c019 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; |