]>
Commit | Line | Data |
---|---|---|
373f9370 GKH |
1 | From foo@baz Wed Mar 11 11:44:33 CET 2015 |
2 | From: Florian Fainelli <f.fainelli@gmail.com> | |
3 | Date: Sat, 28 Feb 2015 18:09:16 -0800 | |
4 | Subject: net: bcmgenet: fix software maintained statistics | |
5 | ||
6 | From: Florian Fainelli <f.fainelli@gmail.com> | |
7 | ||
8 | [ Upstream commit f62ba9c14b85a682b64a4c421f91de0bd2aa8538 ] | |
9 | ||
10 | Commit 44c8bc3ce39f ("net: bcmgenet: log RX buffer allocation and RX/TX dma | |
11 | failures") added a few software maintained statistics using | |
12 | BCMGENET_STAT_MIB_RX and BCMGENET_STAT_MIB_TX. These statistics are read from | |
13 | the hardware MIB counters, such that bcmgenet_update_mib_counters() was trying | |
14 | to read from a non-existing MIB offset for these counters. | |
15 | ||
16 | Fix this by introducing a special type: BCMGENET_STAT_SOFT, similar to | |
17 | BCMGENET_STAT_NETDEV, such that bcmgenet_get_ethtool_stats will read from the | |
18 | software mib. | |
19 | ||
20 | Fixes: 44c8bc3ce39f ("net: bcmgenet: log RX buffer allocation and RX/TX dma failures") | |
21 | Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> | |
22 | Signed-off-by: David S. Miller <davem@davemloft.net> | |
23 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | |
24 | --- | |
25 | drivers/net/ethernet/broadcom/genet/bcmgenet.c | 9 ++++++--- | |
26 | 1 file changed, 6 insertions(+), 3 deletions(-) | |
27 | ||
28 | --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c | |
29 | +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c | |
30 | @@ -487,6 +487,7 @@ enum bcmgenet_stat_type { | |
31 | BCMGENET_STAT_MIB_TX, | |
32 | BCMGENET_STAT_RUNT, | |
33 | BCMGENET_STAT_MISC, | |
34 | + BCMGENET_STAT_SOFT, | |
35 | }; | |
36 | ||
37 | struct bcmgenet_stats { | |
38 | @@ -515,6 +516,7 @@ struct bcmgenet_stats { | |
39 | #define STAT_GENET_MIB_RX(str, m) STAT_GENET_MIB(str, m, BCMGENET_STAT_MIB_RX) | |
40 | #define STAT_GENET_MIB_TX(str, m) STAT_GENET_MIB(str, m, BCMGENET_STAT_MIB_TX) | |
41 | #define STAT_GENET_RUNT(str, m) STAT_GENET_MIB(str, m, BCMGENET_STAT_RUNT) | |
42 | +#define STAT_GENET_SOFT_MIB(str, m) STAT_GENET_MIB(str, m, BCMGENET_STAT_SOFT) | |
43 | ||
44 | #define STAT_GENET_MISC(str, m, offset) { \ | |
45 | .stat_string = str, \ | |
46 | @@ -614,9 +616,9 @@ static const struct bcmgenet_stats bcmge | |
47 | UMAC_RBUF_OVFL_CNT), | |
48 | STAT_GENET_MISC("rbuf_err_cnt", mib.rbuf_err_cnt, UMAC_RBUF_ERR_CNT), | |
49 | STAT_GENET_MISC("mdf_err_cnt", mib.mdf_err_cnt, UMAC_MDF_ERR_CNT), | |
50 | - STAT_GENET_MIB_RX("alloc_rx_buff_failed", mib.alloc_rx_buff_failed), | |
51 | - STAT_GENET_MIB_RX("rx_dma_failed", mib.rx_dma_failed), | |
52 | - STAT_GENET_MIB_TX("tx_dma_failed", mib.tx_dma_failed), | |
53 | + STAT_GENET_SOFT_MIB("alloc_rx_buff_failed", mib.alloc_rx_buff_failed), | |
54 | + STAT_GENET_SOFT_MIB("rx_dma_failed", mib.rx_dma_failed), | |
55 | + STAT_GENET_SOFT_MIB("tx_dma_failed", mib.tx_dma_failed), | |
56 | }; | |
57 | ||
58 | #define BCMGENET_STATS_LEN ARRAY_SIZE(bcmgenet_gstrings_stats) | |
59 | @@ -668,6 +670,7 @@ static void bcmgenet_update_mib_counters | |
60 | s = &bcmgenet_gstrings_stats[i]; | |
61 | switch (s->type) { | |
62 | case BCMGENET_STAT_NETDEV: | |
63 | + case BCMGENET_STAT_SOFT: | |
64 | continue; | |
65 | case BCMGENET_STAT_MIB_RX: | |
66 | case BCMGENET_STAT_MIB_TX: |