net: bcmgenet: count hw discarded packets in missed stat
authorZak Kemble <zakkemble@gmail.com>
Mon, 19 May 2025 11:32:56 +0000 (12:32 +0100)
committerJakub Kicinski <kuba@kernel.org>
Wed, 21 May 2025 01:36:35 +0000 (18:36 -0700)
Hardware discarded packets are now counted in their own missed stat
instead of being lumped in with general errors.

Signed-off-by: Zak Kemble <zakkemble@gmail.com>
Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Link: https://patch.msgid.link/20250519113257.1031-3-zakkemble@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/broadcom/genet/bcmgenet.c
drivers/net/ethernet/broadcom/genet/bcmgenet.h

index 101ba6b2f70f08c709d7f306f5d05b748d5326e3..578db62304e45ddd6d8a673e6cbbb89ae3b045da 100644 (file)
@@ -2297,7 +2297,7 @@ static unsigned int bcmgenet_desc_rx(struct bcmgenet_rx_ring *ring,
                   DMA_P_INDEX_DISCARD_CNT_MASK;
        if (discards > ring->old_discards) {
                discards = discards - ring->old_discards;
-               BCMGENET_STATS64_ADD(stats, errors, discards);
+               BCMGENET_STATS64_ADD(stats, missed, discards);
                ring->old_discards += discards;
 
                /* Clear HW register when we reach 75% of maximum 0xFFFF */
@@ -3577,6 +3577,7 @@ static void bcmgenet_get_stats64(struct net_device *dev,
        unsigned int start;
        unsigned int q;
        u64 multicast;
+       u64 rx_missed;
 
        for (q = 0; q <= priv->hw_params->tx_queues; q++) {
                tx_stats = &priv->tx_rings[q].stats64;
@@ -3602,6 +3603,7 @@ static void bcmgenet_get_stats64(struct net_device *dev,
                        rx_packets = u64_stats_read(&rx_stats->packets);
                        rx_errors = u64_stats_read(&rx_stats->errors);
                        rx_dropped = u64_stats_read(&rx_stats->dropped);
+                       rx_missed = u64_stats_read(&rx_stats->missed);
                        rx_length_errors = u64_stats_read(&rx_stats->length_errors);
                        rx_over_errors = u64_stats_read(&rx_stats->over_errors);
                        rx_crc_errors = u64_stats_read(&rx_stats->crc_errors);
@@ -3617,7 +3619,7 @@ static void bcmgenet_get_stats64(struct net_device *dev,
                stats->rx_packets += rx_packets;
                stats->rx_errors += rx_errors;
                stats->rx_dropped += rx_dropped;
-               stats->rx_missed_errors += rx_errors;
+               stats->rx_missed_errors += rx_missed;
                stats->rx_length_errors += rx_length_errors;
                stats->rx_over_errors += rx_over_errors;
                stats->rx_crc_errors += rx_crc_errors;
index 27d4fcecca8b44ae0c3bca7b03179a5d323501c4..10bbb3eb8efd5fed0034e58ae7ecce7605c4dd1f 100644 (file)
@@ -170,6 +170,7 @@ struct bcmgenet_rx_stats64 {
        u64_stats_t     errors;
        u64_stats_t     dropped;
        u64_stats_t     multicast;
+       u64_stats_t     missed;
        u64_stats_t     length_errors;
        u64_stats_t     over_errors;
        u64_stats_t     crc_errors;