net/mlx5e: Introducing new statistics rwlock
[sfrench/cifs-2.6.git] / drivers / net / ethernet / mellanox / mlx5 / core / en_stats.c
index 973939ed8bb5ae96443f523b43b144ea50394dc2..323f2af4200bd14ea959a7f412110ed5a300251d 100644 (file)
@@ -108,7 +108,7 @@ static int mlx5e_grp_sw_fill_stats(struct mlx5e_priv *priv, u64 *data, int idx)
        return idx;
 }
 
-static void mlx5e_grp_sw_update_stats(struct mlx5e_priv *priv)
+void mlx5e_grp_sw_update_stats(struct mlx5e_priv *priv)
 {
        struct mlx5e_sw_stats temp, *s = &temp;
        struct mlx5e_rq_stats *rq_stats;
@@ -117,6 +117,9 @@ static void mlx5e_grp_sw_update_stats(struct mlx5e_priv *priv)
        int i, j;
 
        memset(s, 0, sizeof(*s));
+       read_lock(&priv->stats_lock);
+       if (!priv->channels_active)
+               goto out;
        for (i = 0; i < priv->channels.num; i++) {
                struct mlx5e_channel *c = priv->channels.c[i];
 
@@ -175,6 +178,8 @@ static void mlx5e_grp_sw_update_stats(struct mlx5e_priv *priv)
        }
 
        memcpy(&priv->stats.sw, s, sizeof(*s));
+out:
+       read_unlock(&priv->stats_lock);
 }
 
 static const struct counter_desc q_stats_desc[] = {
@@ -1224,7 +1229,6 @@ const struct mlx5e_stats_grp mlx5e_stats_grps[] = {
                .get_num_stats = mlx5e_grp_sw_get_num_stats,
                .fill_strings = mlx5e_grp_sw_fill_strings,
                .fill_stats = mlx5e_grp_sw_fill_stats,
-               .update_stats_mask = MLX5E_NDO_UPDATE_STATS,
                .update_stats = mlx5e_grp_sw_update_stats,
        },
        {