* [PATCH net-next 0/4] mlx5e: Support recovery counter in reset
@ 2025-03-13 19:24 Tariq Toukan
2025-03-13 19:24 ` [PATCH net-next 1/4] net/mlx5e: Ensure each counter group uses its PCAM bit Tariq Toukan
` (4 more replies)
0 siblings, 5 replies; 9+ messages in thread
From: Tariq Toukan @ 2025-03-13 19:24 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Andrew Lunn
Cc: Gal Pressman, Mark Bloch, Moshe Shemesh, Saeed Mahameed,
Leon Romanovsky, Tariq Toukan, Jonathan Corbet, netdev,
linux-rdma, linux-doc, linux-kernel, Yael Chemla
Hi,
This series by Yael adds a recovery counter in ethtool, for any recovery
type during port reset cycle.
Series starts with some cleanup and refactoring patches.
New counter is added and exposed to ethtool stats in patch #4.
Regards,
Tariq
Yael Chemla (4):
net/mlx5e: Ensure each counter group uses its PCAM bit
net/mlx5e: Access PHY layer counter group as other counter groups
net/mlx5e: Get counter group size by FW capability
net/mlx5e: Expose port reset cycle recovery counter via ethtool
.../ethernet/mellanox/mlx5/counters.rst | 5 +
.../ethernet/mellanox/mlx5/core/en_stats.c | 119 ++++++++++++------
.../ethernet/mellanox/mlx5/core/en_stats.h | 4 +
3 files changed, 91 insertions(+), 37 deletions(-)
base-commit: 89d75c4c67aca1573aff905e72131a10847c5fda
--
2.31.1
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH net-next 1/4] net/mlx5e: Ensure each counter group uses its PCAM bit
2025-03-13 19:24 [PATCH net-next 0/4] mlx5e: Support recovery counter in reset Tariq Toukan
@ 2025-03-13 19:24 ` Tariq Toukan
2025-03-14 2:40 ` Kalesh Anakkur Purayil
2025-03-13 19:24 ` [PATCH net-next 2/4] net/mlx5e: Access PHY layer counter group as other counter groups Tariq Toukan
` (3 subsequent siblings)
4 siblings, 1 reply; 9+ messages in thread
From: Tariq Toukan @ 2025-03-13 19:24 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Andrew Lunn
Cc: Gal Pressman, Mark Bloch, Moshe Shemesh, Saeed Mahameed,
Leon Romanovsky, Tariq Toukan, Jonathan Corbet, netdev,
linux-rdma, linux-doc, linux-kernel, Yael Chemla
From: Yael Chemla <ychemla@nvidia.com>
The code was incorrectly relying on PCAM bit of ppcnt_statistical_group
for accessing per_lane_error_counters.
If ppcnt_statistical_group PCAM bit was not set, we would not read
per_lane_error_counters, even when its PCAM bit is set.
Given the existing device capabilities, it seems to cause no harm, so
this change primarily serves as cleanup.
Signed-off-by: Yael Chemla <ychemla@nvidia.com>
Reviewed-by: Cosmin Ratiu <cratiu@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
---
.../ethernet/mellanox/mlx5/core/en_stats.c | 24 ++++++++-----------
1 file changed, 10 insertions(+), 14 deletions(-)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c
index 611ec4b6f370..77d34037b92b 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c
@@ -1272,11 +1272,9 @@ static MLX5E_DECLARE_STATS_GRP_OP_FILL_STRS(phy)
ethtool_puts(data, "link_down_events_phy");
- if (!MLX5_CAP_PCAM_FEATURE(mdev, ppcnt_statistical_group))
- return;
-
- for (i = 0; i < NUM_PPORT_PHY_STATISTICAL_COUNTERS; i++)
- ethtool_puts(data, pport_phy_statistical_stats_desc[i].format);
+ if (MLX5_CAP_PCAM_FEATURE(mdev, ppcnt_statistical_group))
+ for (i = 0; i < NUM_PPORT_PHY_STATISTICAL_COUNTERS; i++)
+ ethtool_puts(data, pport_phy_statistical_stats_desc[i].format);
if (MLX5_CAP_PCAM_FEATURE(mdev, per_lane_error_counters))
for (i = 0; i < NUM_PPORT_PHY_STATISTICAL_PER_LANE_COUNTERS; i++)
@@ -1294,15 +1292,13 @@ static MLX5E_DECLARE_STATS_GRP_OP_FILL_STATS(phy)
data, MLX5_GET(ppcnt_reg, priv->stats.pport.phy_counters,
counter_set.phys_layer_cntrs.link_down_events));
- if (!MLX5_CAP_PCAM_FEATURE(mdev, ppcnt_statistical_group))
- return;
-
- for (i = 0; i < NUM_PPORT_PHY_STATISTICAL_COUNTERS; i++)
- mlx5e_ethtool_put_stat(
- data,
- MLX5E_READ_CTR64_BE(
- &priv->stats.pport.phy_statistical_counters,
- pport_phy_statistical_stats_desc, i));
+ if (MLX5_CAP_PCAM_FEATURE(mdev, ppcnt_statistical_group))
+ for (i = 0; i < NUM_PPORT_PHY_STATISTICAL_COUNTERS; i++)
+ mlx5e_ethtool_put_stat(
+ data,
+ MLX5E_READ_CTR64_BE(
+ &priv->stats.pport.phy_statistical_counters,
+ pport_phy_statistical_stats_desc, i));
if (MLX5_CAP_PCAM_FEATURE(mdev, per_lane_error_counters))
for (i = 0; i < NUM_PPORT_PHY_STATISTICAL_PER_LANE_COUNTERS; i++)
--
2.31.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH net-next 2/4] net/mlx5e: Access PHY layer counter group as other counter groups
2025-03-13 19:24 [PATCH net-next 0/4] mlx5e: Support recovery counter in reset Tariq Toukan
2025-03-13 19:24 ` [PATCH net-next 1/4] net/mlx5e: Ensure each counter group uses its PCAM bit Tariq Toukan
@ 2025-03-13 19:24 ` Tariq Toukan
2025-03-13 19:24 ` [PATCH net-next 3/4] net/mlx5e: Get counter group size by FW capability Tariq Toukan
` (2 subsequent siblings)
4 siblings, 0 replies; 9+ messages in thread
From: Tariq Toukan @ 2025-03-13 19:24 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Andrew Lunn
Cc: Gal Pressman, Mark Bloch, Moshe Shemesh, Saeed Mahameed,
Leon Romanovsky, Tariq Toukan, Jonathan Corbet, netdev,
linux-rdma, linux-doc, linux-kernel, Yael Chemla
From: Yael Chemla <ychemla@nvidia.com>
Adjust the way physical layer counters group is accessed to match the
generic method used for accessing other PPCNT counter groups.
Signed-off-by: Yael Chemla <ychemla@nvidia.com>
Reviewed-by: Cosmin Ratiu <cratiu@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
---
.../ethernet/mellanox/mlx5/core/en_stats.c | 25 +++++++++++++------
1 file changed, 18 insertions(+), 7 deletions(-)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c
index 77d34037b92b..0cf0c920532f 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c
@@ -1227,6 +1227,13 @@ void mlx5e_stats_ts_get(struct mlx5e_priv *priv,
mutex_unlock(&priv->state_lock);
}
+#define PPORT_PHY_LAYER_OFF(c) \
+ MLX5_BYTE_OFF(ppcnt_reg, \
+ counter_set.phys_layer_cntrs.c)
+static const struct counter_desc pport_phy_layer_cntrs_stats_desc[] = {
+ { "link_down_events_phy", PPORT_PHY_LAYER_OFF(link_down_events) }
+};
+
#define PPORT_PHY_STATISTICAL_OFF(c) \
MLX5_BYTE_OFF(ppcnt_reg, \
counter_set.phys_layer_statistical_cntrs.c##_high)
@@ -1243,6 +1250,8 @@ pport_phy_statistical_err_lanes_stats_desc[] = {
{ "rx_err_lane_3_phy", PPORT_PHY_STATISTICAL_OFF(phy_corrected_bits_lane3) },
};
+#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 \
@@ -1253,8 +1262,7 @@ static MLX5E_DECLARE_STATS_GRP_OP_NUM_STATS(phy)
struct mlx5_core_dev *mdev = priv->mdev;
int num_stats;
- /* "1" for link_down_events special counter */
- num_stats = 1;
+ num_stats = NUM_PPORT_PHY_LAYER_COUNTERS;
num_stats += MLX5_CAP_PCAM_FEATURE(mdev, ppcnt_statistical_group) ?
NUM_PPORT_PHY_STATISTICAL_COUNTERS : 0;
@@ -1270,7 +1278,8 @@ static MLX5E_DECLARE_STATS_GRP_OP_FILL_STRS(phy)
struct mlx5_core_dev *mdev = priv->mdev;
int i;
- ethtool_puts(data, "link_down_events_phy");
+ for (i = 0; i < NUM_PPORT_PHY_LAYER_COUNTERS; i++)
+ ethtool_puts(data, pport_phy_layer_cntrs_stats_desc[i].format);
if (MLX5_CAP_PCAM_FEATURE(mdev, ppcnt_statistical_group))
for (i = 0; i < NUM_PPORT_PHY_STATISTICAL_COUNTERS; i++)
@@ -1287,10 +1296,12 @@ static MLX5E_DECLARE_STATS_GRP_OP_FILL_STATS(phy)
struct mlx5_core_dev *mdev = priv->mdev;
int i;
- /* link_down_events_phy has special handling since it is not stored in __be64 format */
- mlx5e_ethtool_put_stat(
- data, MLX5_GET(ppcnt_reg, priv->stats.pport.phy_counters,
- counter_set.phys_layer_cntrs.link_down_events));
+ for (i = 0; i < NUM_PPORT_PHY_LAYER_COUNTERS; i++)
+ mlx5e_ethtool_put_stat(
+ data,
+ MLX5E_READ_CTR32_BE(&priv->stats.pport
+ .phy_counters,
+ pport_phy_layer_cntrs_stats_desc, i));
if (MLX5_CAP_PCAM_FEATURE(mdev, ppcnt_statistical_group))
for (i = 0; i < NUM_PPORT_PHY_STATISTICAL_COUNTERS; i++)
--
2.31.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH net-next 3/4] net/mlx5e: Get counter group size by FW capability
2025-03-13 19:24 [PATCH net-next 0/4] mlx5e: Support recovery counter in reset Tariq Toukan
2025-03-13 19:24 ` [PATCH net-next 1/4] net/mlx5e: Ensure each counter group uses its PCAM bit Tariq Toukan
2025-03-13 19:24 ` [PATCH net-next 2/4] net/mlx5e: Access PHY layer counter group as other counter groups Tariq Toukan
@ 2025-03-13 19:24 ` Tariq Toukan
2025-03-14 2:37 ` Kalesh Anakkur Purayil
2025-03-13 19:24 ` [PATCH net-next 4/4] net/mlx5e: Expose port reset cycle recovery counter via ethtool Tariq Toukan
2025-03-13 22:38 ` [PATCH net-next 0/4] mlx5e: Support recovery counter in reset Jacob Keller
4 siblings, 1 reply; 9+ messages in thread
From: Tariq Toukan @ 2025-03-13 19:24 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Andrew Lunn
Cc: Gal Pressman, Mark Bloch, Moshe Shemesh, Saeed Mahameed,
Leon Romanovsky, Tariq Toukan, Jonathan Corbet, netdev,
linux-rdma, linux-doc, linux-kernel, Yael Chemla
From: Yael Chemla <ychemla@nvidia.com>
Retrieve the number of fields supported by each PPCNT counter group
based on the FW capability for this group.
Signed-off-by: Yael Chemla <ychemla@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
---
.../ethernet/mellanox/mlx5/core/en_stats.c | 58 ++++++++++---------
1 file changed, 31 insertions(+), 27 deletions(-)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c
index 0cf0c920532f..a417962acfa9 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c
@@ -1257,6 +1257,13 @@ pport_phy_statistical_err_lanes_stats_desc[] = {
#define NUM_PPORT_PHY_STATISTICAL_PER_LANE_COUNTERS \
ARRAY_SIZE(pport_phy_statistical_err_lanes_stats_desc)
+#define NUM_PPORT_PHY_STATISTICAL_LOOPBACK_COUNTERS(dev) \
+ (MLX5_CAP_PCAM_FEATURE(dev, ppcnt_statistical_group) ? \
+ NUM_PPORT_PHY_STATISTICAL_COUNTERS : 0)
+#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)
+
static MLX5E_DECLARE_STATS_GRP_OP_NUM_STATS(phy)
{
struct mlx5_core_dev *mdev = priv->mdev;
@@ -1264,11 +1271,9 @@ static MLX5E_DECLARE_STATS_GRP_OP_NUM_STATS(phy)
num_stats = NUM_PPORT_PHY_LAYER_COUNTERS;
- num_stats += MLX5_CAP_PCAM_FEATURE(mdev, ppcnt_statistical_group) ?
- NUM_PPORT_PHY_STATISTICAL_COUNTERS : 0;
+ num_stats += NUM_PPORT_PHY_STATISTICAL_LOOPBACK_COUNTERS(mdev);
- num_stats += MLX5_CAP_PCAM_FEATURE(mdev, per_lane_error_counters) ?
- NUM_PPORT_PHY_STATISTICAL_PER_LANE_COUNTERS : 0;
+ num_stats += NUM_PPORT_PHY_STATISTICAL_PER_LANE_LOOPBACK_COUNTERS(mdev);
return num_stats;
}
@@ -1281,14 +1286,15 @@ static MLX5E_DECLARE_STATS_GRP_OP_FILL_STRS(phy)
for (i = 0; i < NUM_PPORT_PHY_LAYER_COUNTERS; i++)
ethtool_puts(data, pport_phy_layer_cntrs_stats_desc[i].format);
- if (MLX5_CAP_PCAM_FEATURE(mdev, ppcnt_statistical_group))
- for (i = 0; i < NUM_PPORT_PHY_STATISTICAL_COUNTERS; i++)
- ethtool_puts(data, pport_phy_statistical_stats_desc[i].format);
+ for (i = 0; i < NUM_PPORT_PHY_STATISTICAL_LOOPBACK_COUNTERS(mdev); i++)
+ ethtool_puts(data, pport_phy_statistical_stats_desc[i].format);
- if (MLX5_CAP_PCAM_FEATURE(mdev, per_lane_error_counters))
- for (i = 0; i < NUM_PPORT_PHY_STATISTICAL_PER_LANE_COUNTERS; i++)
- ethtool_puts(data,
- pport_phy_statistical_err_lanes_stats_desc[i].format);
+ for (i = 0;
+ i < NUM_PPORT_PHY_STATISTICAL_PER_LANE_LOOPBACK_COUNTERS(mdev);
+ i++)
+ ethtool_puts(data,
+ pport_phy_statistical_err_lanes_stats_desc[i]
+ .format);
}
static MLX5E_DECLARE_STATS_GRP_OP_FILL_STATS(phy)
@@ -1303,23 +1309,21 @@ static MLX5E_DECLARE_STATS_GRP_OP_FILL_STATS(phy)
.phy_counters,
pport_phy_layer_cntrs_stats_desc, i));
- if (MLX5_CAP_PCAM_FEATURE(mdev, ppcnt_statistical_group))
- for (i = 0; i < NUM_PPORT_PHY_STATISTICAL_COUNTERS; i++)
- mlx5e_ethtool_put_stat(
- data,
- MLX5E_READ_CTR64_BE(
- &priv->stats.pport.phy_statistical_counters,
- pport_phy_statistical_stats_desc, i));
+ for (i = 0; i < NUM_PPORT_PHY_STATISTICAL_LOOPBACK_COUNTERS(mdev); i++)
+ mlx5e_ethtool_put_stat(
+ data,
+ MLX5E_READ_CTR64_BE(
+ &priv->stats.pport.phy_statistical_counters,
+ pport_phy_statistical_stats_desc, i));
- if (MLX5_CAP_PCAM_FEATURE(mdev, per_lane_error_counters))
- for (i = 0; i < NUM_PPORT_PHY_STATISTICAL_PER_LANE_COUNTERS; i++)
- mlx5e_ethtool_put_stat(
- data,
- 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_STATISTICAL_PER_LANE_LOOPBACK_COUNTERS(mdev);
+ i++)
+ mlx5e_ethtool_put_stat(
+ data,
+ MLX5E_READ_CTR64_BE(
+ &priv->stats.pport.phy_statistical_counters,
+ pport_phy_statistical_err_lanes_stats_desc, i));
}
static MLX5E_DECLARE_STATS_GRP_OP_UPDATE_STATS(phy)
--
2.31.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH net-next 4/4] net/mlx5e: Expose port reset cycle recovery counter via ethtool
2025-03-13 19:24 [PATCH net-next 0/4] mlx5e: Support recovery counter in reset Tariq Toukan
` (2 preceding siblings ...)
2025-03-13 19:24 ` [PATCH net-next 3/4] net/mlx5e: Get counter group size by FW capability Tariq Toukan
@ 2025-03-13 19:24 ` Tariq Toukan
2025-03-14 14:31 ` Stanislav Fomichev
2025-03-13 22:38 ` [PATCH net-next 0/4] mlx5e: Support recovery counter in reset Jacob Keller
4 siblings, 1 reply; 9+ messages in thread
From: Tariq Toukan @ 2025-03-13 19:24 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Andrew Lunn
Cc: Gal Pressman, Mark Bloch, Moshe Shemesh, Saeed Mahameed,
Leon Romanovsky, Tariq Toukan, Jonathan Corbet, netdev,
linux-rdma, linux-doc, linux-kernel, Yael Chemla
From: Yael Chemla <ychemla@nvidia.com>
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>
---
.../ethernet/mellanox/mlx5/counters.rst | 5 +++
.../ethernet/mellanox/mlx5/core/en_stats.c | 44 ++++++++++++++++---
.../ethernet/mellanox/mlx5/core/en_stats.h | 4 ++
3 files changed, 48 insertions(+), 5 deletions(-)
diff --git a/Documentation/networking/device_drivers/ethernet/mellanox/mlx5/counters.rst b/Documentation/networking/device_drivers/ethernet/mellanox/mlx5/counters.rst
index 99d95be4d159..f9a1cf370b5a 100644
--- a/Documentation/networking/device_drivers/ethernet/mellanox/mlx5/counters.rst
+++ b/Documentation/networking/device_drivers/ethernet/mellanox/mlx5/counters.rst
@@ -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.
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c
index a417962acfa9..acb00fd7efa4 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.c
@@ -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,
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h
index 5961c569cfe0..0d87947e348d 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h
@@ -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)];
--
2.31.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH net-next 0/4] mlx5e: Support recovery counter in reset
2025-03-13 19:24 [PATCH net-next 0/4] mlx5e: Support recovery counter in reset Tariq Toukan
` (3 preceding siblings ...)
2025-03-13 19:24 ` [PATCH net-next 4/4] net/mlx5e: Expose port reset cycle recovery counter via ethtool Tariq Toukan
@ 2025-03-13 22:38 ` Jacob Keller
4 siblings, 0 replies; 9+ messages in thread
From: Jacob Keller @ 2025-03-13 22:38 UTC (permalink / raw)
To: Tariq Toukan, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Andrew Lunn
Cc: Gal Pressman, Mark Bloch, Moshe Shemesh, Saeed Mahameed,
Leon Romanovsky, Jonathan Corbet, netdev, linux-rdma, linux-doc,
linux-kernel, Yael Chemla
On 3/13/2025 12:24 PM, Tariq Toukan wrote:
> Hi,
>
> This series by Yael adds a recovery counter in ethtool, for any recovery
> type during port reset cycle.
> Series starts with some cleanup and refactoring patches.
> New counter is added and exposed to ethtool stats in patch #4.
>
> Regards,
> Tariq
>
> Yael Chemla (4):
> net/mlx5e: Ensure each counter group uses its PCAM bit
> net/mlx5e: Access PHY layer counter group as other counter groups
> net/mlx5e: Get counter group size by FW capability
> net/mlx5e: Expose port reset cycle recovery counter via ethtool
>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
> .../ethernet/mellanox/mlx5/counters.rst | 5 +
> .../ethernet/mellanox/mlx5/core/en_stats.c | 119 ++++++++++++------
> .../ethernet/mellanox/mlx5/core/en_stats.h | 4 +
> 3 files changed, 91 insertions(+), 37 deletions(-)
>
>
> base-commit: 89d75c4c67aca1573aff905e72131a10847c5fda
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net-next 3/4] net/mlx5e: Get counter group size by FW capability
2025-03-13 19:24 ` [PATCH net-next 3/4] net/mlx5e: Get counter group size by FW capability Tariq Toukan
@ 2025-03-14 2:37 ` Kalesh Anakkur Purayil
0 siblings, 0 replies; 9+ messages in thread
From: Kalesh Anakkur Purayil @ 2025-03-14 2:37 UTC (permalink / raw)
To: Tariq Toukan
Cc: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Andrew Lunn, Gal Pressman, Mark Bloch, Moshe Shemesh,
Saeed Mahameed, Leon Romanovsky, Jonathan Corbet, netdev,
linux-rdma, linux-doc, linux-kernel, Yael Chemla
[-- Attachment #1: Type: text/plain, Size: 445 bytes --]
On Fri, Mar 14, 2025 at 12:56 AM Tariq Toukan <tariqt@nvidia.com> wrote:
>
> From: Yael Chemla <ychemla@nvidia.com>
>
> Retrieve the number of fields supported by each PPCNT counter group
> based on the FW capability for this group.
>
> Signed-off-by: Yael Chemla <ychemla@nvidia.com>
> Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
LGTM,
Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
--
Regards,
Kalesh AP
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4226 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net-next 1/4] net/mlx5e: Ensure each counter group uses its PCAM bit
2025-03-13 19:24 ` [PATCH net-next 1/4] net/mlx5e: Ensure each counter group uses its PCAM bit Tariq Toukan
@ 2025-03-14 2:40 ` Kalesh Anakkur Purayil
0 siblings, 0 replies; 9+ messages in thread
From: Kalesh Anakkur Purayil @ 2025-03-14 2:40 UTC (permalink / raw)
To: Tariq Toukan
Cc: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Andrew Lunn, Gal Pressman, Mark Bloch, Moshe Shemesh,
Saeed Mahameed, Leon Romanovsky, Jonathan Corbet, netdev,
linux-rdma, linux-doc, linux-kernel, Yael Chemla
[-- Attachment #1: Type: text/plain, Size: 742 bytes --]
On Fri, Mar 14, 2025 at 12:56 AM Tariq Toukan <tariqt@nvidia.com> wrote:
>
> From: Yael Chemla <ychemla@nvidia.com>
>
> The code was incorrectly relying on PCAM bit of ppcnt_statistical_group
> for accessing per_lane_error_counters.
> If ppcnt_statistical_group PCAM bit was not set, we would not read
> per_lane_error_counters, even when its PCAM bit is set.
> Given the existing device capabilities, it seems to cause no harm, so
> this change primarily serves as cleanup.
>
> Signed-off-by: Yael Chemla <ychemla@nvidia.com>
> Reviewed-by: Cosmin Ratiu <cratiu@nvidia.com>
> Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
LGTM,
Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
--
Regards,
Kalesh AP
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4226 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net-next 4/4] net/mlx5e: Expose port reset cycle recovery counter via ethtool
2025-03-13 19:24 ` [PATCH net-next 4/4] net/mlx5e: Expose port reset cycle recovery counter via ethtool Tariq Toukan
@ 2025-03-14 14:31 ` Stanislav Fomichev
0 siblings, 0 replies; 9+ messages in thread
From: Stanislav Fomichev @ 2025-03-14 14:31 UTC (permalink / raw)
To: Tariq Toukan
Cc: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Andrew Lunn, Gal Pressman, Mark Bloch, Moshe Shemesh,
Saeed Mahameed, Leon Romanovsky, Jonathan Corbet, netdev,
linux-rdma, linux-doc, linux-kernel, Yael Chemla
On 03/13, Tariq Toukan wrote:
> From: Yael Chemla <ychemla@nvidia.com>
>
> 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>
> ---
> .../ethernet/mellanox/mlx5/counters.rst | 5 +++
> .../ethernet/mellanox/mlx5/core/en_stats.c | 44 ++++++++++++++++---
> .../ethernet/mellanox/mlx5/core/en_stats.h | 4 ++
> 3 files changed, 48 insertions(+), 5 deletions(-)
>
> diff --git a/Documentation/networking/device_drivers/ethernet/mellanox/mlx5/counters.rst b/Documentation/networking/device_drivers/ethernet/mellanox/mlx5/counters.rst
> index 99d95be4d159..f9a1cf370b5a 100644
> --- a/Documentation/networking/device_drivers/ethernet/mellanox/mlx5/counters.rst
> +++ b/Documentation/networking/device_drivers/ethernet/mellanox/mlx5/counters.rst
> @@ -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
> +
html build complains with the following:
Sphinx parallel build error:
docutils.utils.SystemMessagePropagation: <system_message level="3" line="896" source="/home/doc-build/testing/Documentation/networking/device_drivers/ethernet/mellanox/mlx5/counters.rst" type="ERROR"><paragraph>Error parsing content block for the "flat-table" directive: exactly one bullet list expected.</paragraph><literal_block xml:space="preserve">.. flat-table:: Physical Port Counter Table
https://netdev-3.bots.linux.dev/doc-build/results/32382/stderr
The indent is wrong?
* - xx
- xx
- xx
Vs yours:
* - xx
- xx
- xx
---
pw-bot: cr
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2025-03-14 14:31 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-13 19:24 [PATCH net-next 0/4] mlx5e: Support recovery counter in reset Tariq Toukan
2025-03-13 19:24 ` [PATCH net-next 1/4] net/mlx5e: Ensure each counter group uses its PCAM bit Tariq Toukan
2025-03-14 2:40 ` Kalesh Anakkur Purayil
2025-03-13 19:24 ` [PATCH net-next 2/4] net/mlx5e: Access PHY layer counter group as other counter groups Tariq Toukan
2025-03-13 19:24 ` [PATCH net-next 3/4] net/mlx5e: Get counter group size by FW capability Tariq Toukan
2025-03-14 2:37 ` Kalesh Anakkur Purayil
2025-03-13 19:24 ` [PATCH net-next 4/4] net/mlx5e: Expose port reset cycle recovery counter via ethtool Tariq Toukan
2025-03-14 14:31 ` Stanislav Fomichev
2025-03-13 22:38 ` [PATCH net-next 0/4] mlx5e: Support recovery counter in reset Jacob Keller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).