Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit faf4478b authored by Gal Pressman's avatar Gal Pressman Committed by David S. Miller
Browse files

net/mlx5e: Provide correct packet/bytes statistics



Using the HW VPort counters for traffic (rx/tx packets/bytes)
statistics is wrong. This is because frames dropped due to steering or
out of buffer will be counted as received. To fix that, we move to use
the packet/bytes accounting done by the driver for what the netdev
reports out.

Fixes: f62b8bb8 ('net/mlx5: Extend mlx5_core to support [...]')
Signed-off-by: default avatarGal Pressman <galp@mellanox.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent b081da5e
Loading
Loading
Loading
Loading
+8 −17
Original line number Diff line number Diff line
@@ -141,6 +141,10 @@ void mlx5e_update_stats(struct mlx5e_priv *priv)
		return;

	/* Collect firts the SW counters and then HW for consistency */
	s->rx_packets		= 0;
	s->rx_bytes		= 0;
	s->tx_packets		= 0;
	s->tx_bytes		= 0;
	s->tso_packets		= 0;
	s->tso_bytes		= 0;
	s->tx_queue_stopped	= 0;
@@ -155,6 +159,8 @@ void mlx5e_update_stats(struct mlx5e_priv *priv)
	for (i = 0; i < priv->params.num_channels; i++) {
		rq_stats = &priv->channel[i]->rq.stats;

		s->rx_packets	+= rq_stats->packets;
		s->rx_bytes	+= rq_stats->bytes;
		s->lro_packets	+= rq_stats->lro_packets;
		s->lro_bytes	+= rq_stats->lro_bytes;
		s->rx_csum_none	+= rq_stats->csum_none;
@@ -164,6 +170,8 @@ void mlx5e_update_stats(struct mlx5e_priv *priv)
		for (j = 0; j < priv->params.num_tc; j++) {
			sq_stats = &priv->channel[i]->sq[j].stats;

			s->tx_packets		+= sq_stats->packets;
			s->tx_bytes		+= sq_stats->bytes;
			s->tso_packets		+= sq_stats->tso_packets;
			s->tso_bytes		+= sq_stats->tso_bytes;
			s->tx_queue_stopped	+= sq_stats->stopped;
@@ -225,23 +233,6 @@ void mlx5e_update_stats(struct mlx5e_priv *priv)
	s->tx_broadcast_bytes   =
		MLX5_GET_CTR(out, transmitted_eth_broadcast.octets);

	s->rx_packets =
		s->rx_unicast_packets +
		s->rx_multicast_packets +
		s->rx_broadcast_packets;
	s->rx_bytes =
		s->rx_unicast_bytes +
		s->rx_multicast_bytes +
		s->rx_broadcast_bytes;
	s->tx_packets =
		s->tx_unicast_packets +
		s->tx_multicast_packets +
		s->tx_broadcast_packets;
	s->tx_bytes =
		s->tx_unicast_bytes +
		s->tx_multicast_bytes +
		s->tx_broadcast_bytes;

	/* Update calculated offload counters */
	s->tx_csum_offload = s->tx_packets - tx_offload_none;
	s->rx_csum_good    = s->rx_packets - s->rx_csum_none -