mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 10:33:41 +02:00
net/mlx5e: Expose port reset cycle recovery counter via ethtool
Display recovery event of PPCNT recovery counters group. Counts (per link) the number of total successful recovery events of any recovery types during port reset cycle. Signed-off-by: Yael Chemla <ychemla@nvidia.com> Reviewed-by: Cosmin Ratiu <cratiu@nvidia.com> Signed-off-by: Tariq Toukan <tariqt@nvidia.com> Reviewed-by: Jacob Keller <jacob.e.keller@intel.com> Link: https://patch.msgid.link/1742112876-2890-5-git-send-email-tariqt@nvidia.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
4c737ceb69
commit
c3b999cad7
|
|
@ -1082,6 +1082,11 @@ like flow control, FEC and more.
|
|||
need to replace the cable/transceiver.
|
||||
- Error
|
||||
|
||||
* - `total_success_recovery_phy`
|
||||
- The number of total successful recovery events of any type during
|
||||
ports reset cycle.
|
||||
- Error
|
||||
|
||||
* - `rx_out_of_buffer`
|
||||
- Number of times receive queue had no software buffers allocated for the
|
||||
adapter's incoming traffic.
|
||||
|
|
|
|||
|
|
@ -1250,12 +1250,22 @@ pport_phy_statistical_err_lanes_stats_desc[] = {
|
|||
{ "rx_err_lane_3_phy", PPORT_PHY_STATISTICAL_OFF(phy_corrected_bits_lane3) },
|
||||
};
|
||||
|
||||
#define PPORT_PHY_RECOVERY_OFF(c) \
|
||||
MLX5_BYTE_OFF(ppcnt_reg, counter_set.phys_layer_recovery_cntrs.c)
|
||||
static const struct counter_desc
|
||||
pport_phy_recovery_cntrs_stats_desc[] = {
|
||||
{ "total_success_recovery_phy",
|
||||
PPORT_PHY_RECOVERY_OFF(total_successful_recovery_events) }
|
||||
};
|
||||
|
||||
#define NUM_PPORT_PHY_LAYER_COUNTERS \
|
||||
ARRAY_SIZE(pport_phy_layer_cntrs_stats_desc)
|
||||
#define NUM_PPORT_PHY_STATISTICAL_COUNTERS \
|
||||
ARRAY_SIZE(pport_phy_statistical_stats_desc)
|
||||
#define NUM_PPORT_PHY_STATISTICAL_PER_LANE_COUNTERS \
|
||||
ARRAY_SIZE(pport_phy_statistical_err_lanes_stats_desc)
|
||||
#define NUM_PPORT_PHY_RECOVERY_COUNTERS \
|
||||
ARRAY_SIZE(pport_phy_recovery_cntrs_stats_desc)
|
||||
|
||||
#define NUM_PPORT_PHY_STATISTICAL_LOOPBACK_COUNTERS(dev) \
|
||||
(MLX5_CAP_PCAM_FEATURE(dev, ppcnt_statistical_group) ? \
|
||||
|
|
@ -1263,6 +1273,9 @@ pport_phy_statistical_err_lanes_stats_desc[] = {
|
|||
#define NUM_PPORT_PHY_STATISTICAL_PER_LANE_LOOPBACK_COUNTERS(dev) \
|
||||
(MLX5_CAP_PCAM_FEATURE(dev, per_lane_error_counters) ? \
|
||||
NUM_PPORT_PHY_STATISTICAL_PER_LANE_COUNTERS : 0)
|
||||
#define NUM_PPORT_PHY_RECOVERY_LOOPBACK_COUNTERS(dev) \
|
||||
(MLX5_CAP_PCAM_FEATURE(dev, ppcnt_recovery_counters) ? \
|
||||
NUM_PPORT_PHY_RECOVERY_COUNTERS : 0)
|
||||
|
||||
static MLX5E_DECLARE_STATS_GRP_OP_NUM_STATS(phy)
|
||||
{
|
||||
|
|
@ -1275,6 +1288,7 @@ static MLX5E_DECLARE_STATS_GRP_OP_NUM_STATS(phy)
|
|||
|
||||
num_stats += NUM_PPORT_PHY_STATISTICAL_PER_LANE_LOOPBACK_COUNTERS(mdev);
|
||||
|
||||
num_stats += NUM_PPORT_PHY_RECOVERY_LOOPBACK_COUNTERS(mdev);
|
||||
return num_stats;
|
||||
}
|
||||
|
||||
|
|
@ -1295,6 +1309,10 @@ static MLX5E_DECLARE_STATS_GRP_OP_FILL_STRS(phy)
|
|||
ethtool_puts(data,
|
||||
pport_phy_statistical_err_lanes_stats_desc[i]
|
||||
.format);
|
||||
|
||||
for (i = 0; i < NUM_PPORT_PHY_RECOVERY_LOOPBACK_COUNTERS(mdev); i++)
|
||||
ethtool_puts(data,
|
||||
pport_phy_recovery_cntrs_stats_desc[i].format);
|
||||
}
|
||||
|
||||
static MLX5E_DECLARE_STATS_GRP_OP_FILL_STATS(phy)
|
||||
|
|
@ -1324,6 +1342,13 @@ static MLX5E_DECLARE_STATS_GRP_OP_FILL_STATS(phy)
|
|||
MLX5E_READ_CTR64_BE(
|
||||
&priv->stats.pport.phy_statistical_counters,
|
||||
pport_phy_statistical_err_lanes_stats_desc, i));
|
||||
|
||||
for (i = 0; i < NUM_PPORT_PHY_RECOVERY_LOOPBACK_COUNTERS(mdev); i++)
|
||||
mlx5e_ethtool_put_stat(
|
||||
data,
|
||||
MLX5E_READ_CTR32_BE(
|
||||
&priv->stats.pport.phy_recovery_counters,
|
||||
pport_phy_recovery_cntrs_stats_desc, i));
|
||||
}
|
||||
|
||||
static MLX5E_DECLARE_STATS_GRP_OP_UPDATE_STATS(phy)
|
||||
|
|
@ -1339,12 +1364,21 @@ static MLX5E_DECLARE_STATS_GRP_OP_UPDATE_STATS(phy)
|
|||
MLX5_SET(ppcnt_reg, in, grp, MLX5_PHYSICAL_LAYER_COUNTERS_GROUP);
|
||||
mlx5_core_access_reg(mdev, in, sz, out, sz, MLX5_REG_PPCNT, 0, 0);
|
||||
|
||||
if (!MLX5_CAP_PCAM_FEATURE(mdev, ppcnt_statistical_group))
|
||||
return;
|
||||
if (MLX5_CAP_PCAM_FEATURE(mdev, ppcnt_statistical_group)) {
|
||||
out = pstats->phy_statistical_counters;
|
||||
MLX5_SET(ppcnt_reg, in, grp,
|
||||
MLX5_PHYSICAL_LAYER_STATISTICAL_GROUP);
|
||||
mlx5_core_access_reg(mdev, in, sz, out, sz, MLX5_REG_PPCNT, 0,
|
||||
0);
|
||||
}
|
||||
|
||||
out = pstats->phy_statistical_counters;
|
||||
MLX5_SET(ppcnt_reg, in, grp, MLX5_PHYSICAL_LAYER_STATISTICAL_GROUP);
|
||||
mlx5_core_access_reg(mdev, in, sz, out, sz, MLX5_REG_PPCNT, 0, 0);
|
||||
if (MLX5_CAP_PCAM_FEATURE(mdev, ppcnt_recovery_counters)) {
|
||||
out = pstats->phy_recovery_counters;
|
||||
MLX5_SET(ppcnt_reg, in, grp,
|
||||
MLX5_PHYSICAL_LAYER_RECOVERY_GROUP);
|
||||
mlx5_core_access_reg(mdev, in, sz, out, sz, MLX5_REG_PPCNT, 0,
|
||||
0);
|
||||
}
|
||||
}
|
||||
|
||||
void mlx5e_get_link_ext_stats(struct net_device *dev,
|
||||
|
|
|
|||
|
|
@ -309,6 +309,9 @@ struct mlx5e_vport_stats {
|
|||
#define PPORT_PHY_STATISTICAL_GET(pstats, c) \
|
||||
MLX5_GET64(ppcnt_reg, (pstats)->phy_statistical_counters, \
|
||||
counter_set.phys_layer_statistical_cntrs.c##_high)
|
||||
#define PPORT_PHY_RECOVERY_GET(pstats, c) \
|
||||
MLX5_GET64(ppcnt_reg, (pstats)->phy_recovery_counters, \
|
||||
counter_set.phys_layer_recovery_cntrs.c)
|
||||
#define PPORT_PER_PRIO_GET(pstats, prio, c) \
|
||||
MLX5_GET64(ppcnt_reg, pstats->per_prio_counters[prio], \
|
||||
counter_set.eth_per_prio_grp_data_layout.c##_high)
|
||||
|
|
@ -324,6 +327,7 @@ struct mlx5e_pport_stats {
|
|||
__be64 per_prio_counters[NUM_PPORT_PRIO][MLX5_ST_SZ_QW(ppcnt_reg)];
|
||||
__be64 phy_counters[MLX5_ST_SZ_QW(ppcnt_reg)];
|
||||
__be64 phy_statistical_counters[MLX5_ST_SZ_QW(ppcnt_reg)];
|
||||
__be64 phy_recovery_counters[MLX5_ST_SZ_QW(ppcnt_reg)];
|
||||
__be64 eth_ext_counters[MLX5_ST_SZ_QW(ppcnt_reg)];
|
||||
__be64 per_tc_prio_counters[NUM_PPORT_PRIO][MLX5_ST_SZ_QW(ppcnt_reg)];
|
||||
__be64 per_tc_congest_prio_counters[NUM_PPORT_PRIO][MLX5_ST_SZ_QW(ppcnt_reg)];
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user