net/mlx4_en: Use HW counters for rx/tx bytes/packets in PF device
authorEran Ben Elisha <eranbe@mellanox.com>
Tue, 23 Jun 2015 14:14:13 +0000 (17:14 +0300)
committerDavid S. Miller <davem@davemloft.net>
Wed, 24 Jun 2015 07:42:33 +0000 (00:42 -0700)
Under SRIOV, the port rx/tx bytes/packets statistics should by read
from the HW instead of using the PF netdevice SW accounting. This is
needed in order to get the full port statistics and not just the PF
own ones

Signed-off-by: Eran Ben Elisha <eranbe@mellanox.com>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlx4/en_port.c

index 73f6277..ee99e67 100644 (file)
@@ -203,6 +203,20 @@ int mlx4_en_DUMP_ETH_STATS(struct mlx4_en_dev *mdev, u8 port, u8 reset)
                priv->port_stats.tso_packets       += ring->tso_packets;
                priv->port_stats.xmit_more         += ring->xmit_more;
        }
+       if (mlx4_is_master(mdev->dev)) {
+               stats->rx_packets = en_stats_adder(&mlx4_en_stats->RTOT_prio_0,
+                                                  &mlx4_en_stats->RTOT_prio_1,
+                                                  NUM_PRIORITIES);
+               stats->tx_packets = en_stats_adder(&mlx4_en_stats->TTOT_prio_0,
+                                                  &mlx4_en_stats->TTOT_prio_1,
+                                                  NUM_PRIORITIES);
+               stats->rx_bytes = en_stats_adder(&mlx4_en_stats->ROCT_prio_0,
+                                                &mlx4_en_stats->ROCT_prio_1,
+                                                NUM_PRIORITIES);
+               stats->tx_bytes = en_stats_adder(&mlx4_en_stats->TOCT_prio_0,
+                                                &mlx4_en_stats->TOCT_prio_1,
+                                                NUM_PRIORITIES);
+       }
 
        /* net device stats */
        stats->rx_errors = be64_to_cpu(mlx4_en_stats->PCS) +