Commit c4a20786 authored by Sieng Piaw Liew's avatar Sieng Piaw Liew Committed by Jakub Kicinski

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: default avatarSieng Piaw Liew <liew.s.piaw@gmail.com>
Acked-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 375281d3
...@@ -237,7 +237,10 @@ static int bcm_enet_refill_rx(struct net_device *dev) ...@@ -237,7 +237,10 @@ static int bcm_enet_refill_rx(struct net_device *dev)
desc = &priv->rx_desc_cpu[desc_idx]; desc = &priv->rx_desc_cpu[desc_idx];
if (!priv->rx_skb[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) if (!skb)
break; break;
priv->rx_skb[desc_idx] = skb; priv->rx_skb[desc_idx] = skb;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment