]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/3.19.2/net-bcmgenet-fix-software-maintained-statistics.patch
4.14-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 3.19.2 / net-bcmgenet-fix-software-maintained-statistics.patch
CommitLineData
373f9370
GKH
1From foo@baz Wed Mar 11 11:44:33 CET 2015
2From: Florian Fainelli <f.fainelli@gmail.com>
3Date: Sat, 28 Feb 2015 18:09:16 -0800
4Subject: net: bcmgenet: fix software maintained statistics
5
6From: Florian Fainelli <f.fainelli@gmail.com>
7
8[ Upstream commit f62ba9c14b85a682b64a4c421f91de0bd2aa8538 ]
9
10Commit 44c8bc3ce39f ("net: bcmgenet: log RX buffer allocation and RX/TX dma
11failures") added a few software maintained statistics using
12BCMGENET_STAT_MIB_RX and BCMGENET_STAT_MIB_TX. These statistics are read from
13the hardware MIB counters, such that bcmgenet_update_mib_counters() was trying
14to read from a non-existing MIB offset for these counters.
15
16Fix this by introducing a special type: BCMGENET_STAT_SOFT, similar to
17BCMGENET_STAT_NETDEV, such that bcmgenet_get_ethtool_stats will read from the
18software mib.
19
20Fixes: 44c8bc3ce39f ("net: bcmgenet: log RX buffer allocation and RX/TX dma failures")
21Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
22Signed-off-by: David S. Miller <davem@davemloft.net>
23Signed-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: