net: bcmgenet: Add software counters to track reallocations
authorDoug Berger <opendmb@gmail.com>
Wed, 18 Dec 2019 00:51:15 +0000 (16:51 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 20 Dec 2019 02:11:10 +0000 (18:11 -0800)
When inserting the TSB, keep track of how many times we had to do
it and if there was a failure in doing so, this helps profile the
driver for possibly incorrect headroom settings.

Signed-off-by: Doug Berger <opendmb@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/genet/bcmgenet.c
drivers/net/ethernet/broadcom/genet/bcmgenet.h

index e2bca19..3ee7917 100644 (file)
@@ -861,6 +861,9 @@ static const struct bcmgenet_stats bcmgenet_gstrings_stats[] = {
        STAT_GENET_SOFT_MIB("alloc_rx_buff_failed", mib.alloc_rx_buff_failed),
        STAT_GENET_SOFT_MIB("rx_dma_failed", mib.rx_dma_failed),
        STAT_GENET_SOFT_MIB("tx_dma_failed", mib.tx_dma_failed),
+       STAT_GENET_SOFT_MIB("tx_realloc_tsb", mib.tx_realloc_tsb),
+       STAT_GENET_SOFT_MIB("tx_realloc_tsb_failed",
+                           mib.tx_realloc_tsb_failed),
        /* Per TX queues */
        STAT_GENET_Q(0),
        STAT_GENET_Q(1),
@@ -1487,6 +1490,7 @@ static void bcmgenet_tx_reclaim_all(struct net_device *dev)
 static struct sk_buff *bcmgenet_put_tx_csum(struct net_device *dev,
                                            struct sk_buff *skb)
 {
+       struct bcmgenet_priv *priv = netdev_priv(dev);
        struct status_64 *status = NULL;
        struct sk_buff *new_skb;
        u16 offset;
@@ -1501,11 +1505,13 @@ static struct sk_buff *bcmgenet_put_tx_csum(struct net_device *dev,
                new_skb = skb_realloc_headroom(skb, sizeof(*status));
                if (!new_skb) {
                        dev_kfree_skb_any(skb);
+                       priv->mib.tx_realloc_tsb_failed++;
                        dev->stats.tx_dropped++;
                        return NULL;
                }
                dev_consume_skb_any(skb);
                skb = new_skb;
+               priv->mib.tx_realloc_tsb++;
        }
 
        skb_push(skb, sizeof(*status));
index d33c0d0..61a6fe9 100644 (file)
@@ -144,6 +144,8 @@ struct bcmgenet_mib_counters {
        u32     alloc_rx_buff_failed;
        u32     rx_dma_failed;
        u32     tx_dma_failed;
+       u32     tx_realloc_tsb;
+       u32     tx_realloc_tsb_failed;
 };
 
 #define UMAC_HD_BKP_CTRL               0x004