Commit 80f12414 authored by Amir Tzin's avatar Amir Tzin Committed by Saeed Mahameed
Browse files

net/mlx5e: Fix VF representors reporting zero counters to "ip -s" command



Although vf_vport entry of struct mlx5e_stats is never updated, its
values are mistakenly copied to the caller structure in the VF
representor .ndo_get_stat_64 callback mlx5e_rep_get_stats(). Remove
redundant entry and use the updated one, rep_stats, instead.

Fixes: 64b68e36 ("net/mlx5: Refactor and expand rep vport stat group")
Reviewed-by: default avatarPatrisious Haddad <phaddad@nvidia.com>
Signed-off-by: default avatarAmir Tzin <amirtz@nvidia.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
parent 06b4eac9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -701,7 +701,7 @@ mlx5e_rep_get_stats(struct net_device *dev, struct rtnl_link_stats64 *stats)

	/* update HW stats in background for next time */
	mlx5e_queue_update_stats(priv);
	memcpy(stats, &priv->stats.vf_vport, sizeof(*stats));
	mlx5e_stats_copy_rep_stats(stats, &priv->stats.rep_stats);
}

static int mlx5e_rep_change_mtu(struct net_device *netdev, int new_mtu)
+10 −1
Original line number Diff line number Diff line
@@ -484,11 +484,20 @@ struct mlx5e_stats {
	struct mlx5e_vnic_env_stats vnic;
	struct mlx5e_vport_stats vport;
	struct mlx5e_pport_stats pport;
	struct rtnl_link_stats64 vf_vport;
	struct mlx5e_pcie_stats pcie;
	struct mlx5e_rep_stats rep_stats;
};

static inline void mlx5e_stats_copy_rep_stats(struct rtnl_link_stats64 *vf_vport,
					      struct mlx5e_rep_stats *rep_stats)
{
	memset(vf_vport, 0, sizeof(*vf_vport));
	vf_vport->rx_packets = rep_stats->vport_rx_packets;
	vf_vport->tx_packets = rep_stats->vport_tx_packets;
	vf_vport->rx_bytes = rep_stats->vport_rx_bytes;
	vf_vport->tx_bytes = rep_stats->vport_tx_bytes;
}

extern mlx5e_stats_grp_t mlx5e_nic_stats_grps[];
unsigned int mlx5e_nic_stats_grps_num(struct mlx5e_priv *priv);

+3 −2
Original line number Diff line number Diff line
@@ -4972,7 +4972,8 @@ static int scan_tc_matchall_fdb_actions(struct mlx5e_priv *priv,
			if (err)
				return err;

			rpriv->prev_vf_vport_stats = priv->stats.vf_vport;
			mlx5e_stats_copy_rep_stats(&rpriv->prev_vf_vport_stats,
						   &priv->stats.rep_stats);
			break;
		default:
			NL_SET_ERR_MSG_MOD(extack, "mlx5 supports only police action for matchall");
@@ -5012,7 +5013,7 @@ void mlx5e_tc_stats_matchall(struct mlx5e_priv *priv,
	u64 dbytes;
	u64 dpkts;

	cur_stats = priv->stats.vf_vport;
	mlx5e_stats_copy_rep_stats(&cur_stats, &priv->stats.rep_stats);
	dpkts = cur_stats.rx_packets - rpriv->prev_vf_vport_stats.rx_packets;
	dbytes = cur_stats.rx_bytes - rpriv->prev_vf_vport_stats.rx_bytes;
	rpriv->prev_vf_vport_stats = cur_stats;