]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
net/mlx5e: Fix VF representors reporting zero counters to "ip -s" command
authorAmir Tzin <amirtz@nvidia.com>
Mon, 4 Sep 2023 15:26:47 +0000 (18:26 +0300)
committerSaeed Mahameed <saeedm@nvidia.com>
Thu, 12 Oct 2023 18:10:35 +0000 (11:10 -0700)
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: 64b68e369649 ("net/mlx5: Refactor and expand rep vport stat group")
Reviewed-by: Patrisious Haddad <phaddad@nvidia.com>
Signed-off-by: Amir Tzin <amirtz@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
drivers/net/ethernet/mellanox/mlx5/core/en_stats.h
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c

index 5ca9bc337dc6ae8f24501786b4653ef1839c06d1..fd1cce542b680f0210a32757874a7c221d0dd5eb 100644 (file)
@@ -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)
index 176fa5976259fbf2d419ce18e7179b369e5b69e6..477c547dcc04a5734f4ec8724dd1a4ee28b67666 100644 (file)
@@ -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);
 
index c24828b688ac0aa049f3518aefdf21251da4e8d9..c8590483ddc64be79d0e91a5b065781ff09d7cf2 100644 (file)
@@ -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;