mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-30 21:44:27 -04:00 
			
		
		
		
	Runtime-tested on Comtrend AR-5387un. Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From c4a207865e7ea310dc146ff4aa1b0aa0c78d3fe1 Mon Sep 17 00:00:00 2001
 | |
| From: Sieng Piaw Liew <liew.s.piaw@gmail.com>
 | |
| Date: Wed, 6 Jan 2021 22:42:05 +0800
 | |
| Subject: [PATCH 4/7] bcm63xx_enet: alloc rx skb with NET_IP_ALIGN
 | |
| 
 | |
| Use netdev_alloc_skb_ip_align on newer SoCs with integrated switch
 | |
| (enetsw) when refilling RX. Increases packet processing performance
 | |
| by 30% (with netif_receive_skb_list).
 | |
| 
 | |
| Non-enetsw SoCs cannot function with the extra pad so continue to use
 | |
| the regular netdev_alloc_skb.
 | |
| 
 | |
| Tested on BCM6328 320 MHz and iperf3 -M 512 to measure packet/sec
 | |
| performance.
 | |
| 
 | |
| Before:
 | |
| [ ID] Interval Transfer Bandwidth Retr
 | |
| [ 4] 0.00-30.00 sec 120 MBytes 33.7 Mbits/sec 277 sender
 | |
| [ 4] 0.00-30.00 sec 120 MBytes 33.5 Mbits/sec receiver
 | |
| 
 | |
| After (+netif_receive_skb_list):
 | |
| [ 4] 0.00-30.00 sec 155 MBytes 43.3 Mbits/sec 354 sender
 | |
| [ 4] 0.00-30.00 sec 154 MBytes 43.1 Mbits/sec receiver
 | |
| 
 | |
| Signed-off-by: Sieng Piaw Liew <liew.s.piaw@gmail.com>
 | |
| Acked-by: Florian Fainelli <f.fainelli@gmail.com>
 | |
| Signed-off-by: Jakub Kicinski <kuba@kernel.org>
 | |
| ---
 | |
|  drivers/net/ethernet/broadcom/bcm63xx_enet.c | 5 ++++-
 | |
|  1 file changed, 4 insertions(+), 1 deletion(-)
 | |
| 
 | |
| --- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c
 | |
| +++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
 | |
| @@ -237,7 +237,10 @@ static int bcm_enet_refill_rx(struct net
 | |
|  		desc = &priv->rx_desc_cpu[desc_idx];
 | |
|  
 | |
|  		if (!priv->rx_skb[desc_idx]) {
 | |
| -			skb = netdev_alloc_skb(dev, priv->rx_skb_size);
 | |
| +			if (priv->enet_is_sw)
 | |
| +				skb = netdev_alloc_skb_ip_align(dev, priv->rx_skb_size);
 | |
| +			else
 | |
| +				skb = netdev_alloc_skb(dev, priv->rx_skb_size);
 | |
|  			if (!skb)
 | |
|  				break;
 | |
|  			priv->rx_skb[desc_idx] = skb;
 |