On Wed, 2017-08-23 at 17:03 -0700, Florian Fainelli wrote:

> Attached is the perf report --stdio of:
> 
> # perf record -a -g -e skb:kfree_skb iperf -c 192.168.1.23 -b 800M -t 60
> WARNING: option -b implies udp testing
> ------------------------------------------------------------
> Client connecting to 192.168.1.23, UDP port 5001
> Sending 1470 byte datagrams
> UDP buffer size:  160 KByte (default)
> ------------------------------------------------------------
> [  4] local 192.168.1.66 port 36169 connected with 192.168.1.23 port 5001
> [ ID] Interval       Transfer     Bandwidth
> [  4]  0.0-60.0 sec   685 MBytes  95.8 Mbits/sec
> [  4] Sent 488633 datagrams
> [  4] Server Report:
> [  4]  0.0-74.4 sec   685 MBytes  77.2 Mbits/sec   0.187 ms  300/488632
> (0.061%)
> [  4]  0.0-74.4 sec  58 datagrams received out-of-order
> 
> It measured 488644 events which is greater than the number of packets
> transmitted by iperf but I only count 8 non-IP packets being sent
> (protocl=2054 -> ETH_P_ARP) so I am not sure what the other 4 were and
> why there are not accounted for.
> 
> Almost all events came from net_tx_action() except 2 that came from
> net/core/neighbour.c::neigh_probe() and 65 that came from
> arch/arm/include/asm/irqflags.h::arch_local_irq_save() ?!?

Oh you have too much noise and need this fix :

diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c 
b/drivers/net/ethernet/broadcom/bcmsysport.c
index dc3052751bc1..fcfa8d991850 100644
--- a/drivers/net/ethernet/broadcom/bcmsysport.c
+++ b/drivers/net/ethernet/broadcom/bcmsysport.c
@@ -597,7 +597,7 @@ static int bcm_sysport_set_coalesce(struct net_device *dev,
 
 static void bcm_sysport_free_cb(struct bcm_sysport_cb *cb)
 {
-       dev_kfree_skb_any(cb->skb);
+       dev_consume_skb_any(cb->skb);
        cb->skb = NULL;
        dma_unmap_addr_set(cb, dma_addr, 0);
 }


Reply via email to