b.liu | e958203 | 2025-04-17 19:18:16 +0800 | [diff] [blame^] | 1 | From c4a207865e7ea310dc146ff4aa1b0aa0c78d3fe1 Mon Sep 17 00:00:00 2001 |
| 2 | From: Sieng Piaw Liew <liew.s.piaw@gmail.com> |
| 3 | Date: Wed, 6 Jan 2021 22:42:05 +0800 |
| 4 | Subject: [PATCH 4/7] bcm63xx_enet: alloc rx skb with NET_IP_ALIGN |
| 5 | |
| 6 | Use netdev_alloc_skb_ip_align on newer SoCs with integrated switch |
| 7 | (enetsw) when refilling RX. Increases packet processing performance |
| 8 | by 30% (with netif_receive_skb_list). |
| 9 | |
| 10 | Non-enetsw SoCs cannot function with the extra pad so continue to use |
| 11 | the regular netdev_alloc_skb. |
| 12 | |
| 13 | Tested on BCM6328 320 MHz and iperf3 -M 512 to measure packet/sec |
| 14 | performance. |
| 15 | |
| 16 | Before: |
| 17 | [ ID] Interval Transfer Bandwidth Retr |
| 18 | [ 4] 0.00-30.00 sec 120 MBytes 33.7 Mbits/sec 277 sender |
| 19 | [ 4] 0.00-30.00 sec 120 MBytes 33.5 Mbits/sec receiver |
| 20 | |
| 21 | After (+netif_receive_skb_list): |
| 22 | [ 4] 0.00-30.00 sec 155 MBytes 43.3 Mbits/sec 354 sender |
| 23 | [ 4] 0.00-30.00 sec 154 MBytes 43.1 Mbits/sec receiver |
| 24 | |
| 25 | Signed-off-by: Sieng Piaw Liew <liew.s.piaw@gmail.com> |
| 26 | Acked-by: Florian Fainelli <f.fainelli@gmail.com> |
| 27 | Signed-off-by: Jakub Kicinski <kuba@kernel.org> |
| 28 | --- |
| 29 | drivers/net/ethernet/broadcom/bcm63xx_enet.c | 5 ++++- |
| 30 | 1 file changed, 4 insertions(+), 1 deletion(-) |
| 31 | |
| 32 | --- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c |
| 33 | +++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c |
| 34 | @@ -238,7 +238,10 @@ static int bcm_enet_refill_rx(struct net |
| 35 | desc = &priv->rx_desc_cpu[desc_idx]; |
| 36 | |
| 37 | if (!priv->rx_skb[desc_idx]) { |
| 38 | - skb = netdev_alloc_skb(dev, priv->rx_skb_size); |
| 39 | + if (priv->enet_is_sw) |
| 40 | + skb = netdev_alloc_skb_ip_align(dev, priv->rx_skb_size); |
| 41 | + else |
| 42 | + skb = netdev_alloc_skb(dev, priv->rx_skb_size); |
| 43 | if (!skb) |
| 44 | break; |
| 45 | priv->rx_skb[desc_idx] = skb; |