bgmac: Maintain some netdev statistics
authorFlorian Fainelli <f.fainelli@gmail.com>
Tue, 7 Jun 2016 22:06:15 +0000 (15:06 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 10 Jun 2016 06:37:24 +0000 (23:37 -0700)
Add a few netdev statistics to report transmitted and received bytes and
packets and a few obvious errors.

Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bgmac.c

index 133bf64..0ee34cc 100644 (file)
@@ -246,6 +246,8 @@ err_dma_head:
 
 err_drop:
        dev_kfree_skb(skb);
+       net_dev->stats.tx_dropped++;
+       net_dev->stats.tx_errors++;
        return NETDEV_TX_OK;
 }
 
@@ -284,6 +286,8 @@ static void bgmac_dma_tx_free(struct bgmac *bgmac, struct bgmac_dma_ring *ring)
                                       DMA_TO_DEVICE);
 
                if (slot->skb) {
+                       bgmac->net_dev->stats.tx_bytes += slot->skb->len;
+                       bgmac->net_dev->stats.tx_packets++;
                        bytes_compl += slot->skb->len;
                        pkts_compl++;
 
@@ -464,6 +468,7 @@ static int bgmac_dma_rx_read(struct bgmac *bgmac, struct bgmac_dma_ring *ring,
                                bgmac_err(bgmac, "Found poisoned packet at slot %d, DMA issue!\n",
                                          ring->start);
                                put_page(virt_to_head_page(buf));
+                               bgmac->net_dev->stats.rx_errors++;
                                break;
                        }
 
@@ -471,6 +476,8 @@ static int bgmac_dma_rx_read(struct bgmac *bgmac, struct bgmac_dma_ring *ring,
                                bgmac_err(bgmac, "Found oversized packet at slot %d, DMA issue!\n",
                                          ring->start);
                                put_page(virt_to_head_page(buf));
+                               bgmac->net_dev->stats.rx_length_errors++;
+                               bgmac->net_dev->stats.rx_errors++;
                                break;
                        }
 
@@ -481,6 +488,7 @@ static int bgmac_dma_rx_read(struct bgmac *bgmac, struct bgmac_dma_ring *ring,
                        if (unlikely(!skb)) {
                                bgmac_err(bgmac, "build_skb failed\n");
                                put_page(virt_to_head_page(buf));
+                               bgmac->net_dev->stats.rx_errors++;
                                break;
                        }
                        skb_put(skb, BGMAC_RX_FRAME_OFFSET +
@@ -490,6 +498,8 @@ static int bgmac_dma_rx_read(struct bgmac *bgmac, struct bgmac_dma_ring *ring,
 
                        skb_checksum_none_assert(skb);
                        skb->protocol = eth_type_trans(skb, bgmac->net_dev);
+                       bgmac->net_dev->stats.rx_bytes += len;
+                       bgmac->net_dev->stats.rx_packets++;
                        napi_gro_receive(&bgmac->napi, skb);
                        handled++;
                } while (0);