Commit 16ab85e7 authored by Gal Pressman's avatar Gal Pressman Committed by Jakub Kicinski

net/mlx5e: Expose rx_oversize_pkts_buffer counter

Add the rx_oversize_pkts_buffer counter to ethtool statistics.
This counter exposes the number of dropped received packets due to
length which arrived to RQ and exceed software buffer size allocated by
the device for incoming traffic. It might imply that the device MTU is
larger than the software buffers size.
Signed-off-by: default avatarGal Pressman <gal@nvidia.com>
Reviewed-by: default avatarTariq Toukan <tariqt@nvidia.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent c2c9e31d
...@@ -3699,7 +3699,8 @@ mlx5e_get_stats(struct net_device *dev, struct rtnl_link_stats64 *stats) ...@@ -3699,7 +3699,8 @@ mlx5e_get_stats(struct net_device *dev, struct rtnl_link_stats64 *stats)
stats->rx_length_errors = stats->rx_length_errors =
PPORT_802_3_GET(pstats, a_in_range_length_errors) + PPORT_802_3_GET(pstats, a_in_range_length_errors) +
PPORT_802_3_GET(pstats, a_out_of_range_length_field) + PPORT_802_3_GET(pstats, a_out_of_range_length_field) +
PPORT_802_3_GET(pstats, a_frame_too_long_errors); PPORT_802_3_GET(pstats, a_frame_too_long_errors) +
VNIC_ENV_GET(&priv->stats.vnic, eth_wqe_too_small);
stats->rx_crc_errors = stats->rx_crc_errors =
PPORT_802_3_GET(pstats, a_frame_check_sequence_errors); PPORT_802_3_GET(pstats, a_frame_check_sequence_errors);
stats->rx_frame_errors = PPORT_802_3_GET(pstats, a_alignment_errors); stats->rx_frame_errors = PPORT_802_3_GET(pstats, a_alignment_errors);
......
...@@ -641,17 +641,26 @@ static const struct counter_desc vnic_env_stats_dev_oob_desc[] = { ...@@ -641,17 +641,26 @@ static const struct counter_desc vnic_env_stats_dev_oob_desc[] = {
VNIC_ENV_OFF(vport_env.internal_rq_out_of_buffer) }, VNIC_ENV_OFF(vport_env.internal_rq_out_of_buffer) },
}; };
static const struct counter_desc vnic_env_stats_drop_desc[] = {
{ "rx_oversize_pkts_buffer",
VNIC_ENV_OFF(vport_env.eth_wqe_too_small) },
};
#define NUM_VNIC_ENV_STEER_COUNTERS(dev) \ #define NUM_VNIC_ENV_STEER_COUNTERS(dev) \
(MLX5_CAP_GEN(dev, nic_receive_steering_discard) ? \ (MLX5_CAP_GEN(dev, nic_receive_steering_discard) ? \
ARRAY_SIZE(vnic_env_stats_steer_desc) : 0) ARRAY_SIZE(vnic_env_stats_steer_desc) : 0)
#define NUM_VNIC_ENV_DEV_OOB_COUNTERS(dev) \ #define NUM_VNIC_ENV_DEV_OOB_COUNTERS(dev) \
(MLX5_CAP_GEN(dev, vnic_env_int_rq_oob) ? \ (MLX5_CAP_GEN(dev, vnic_env_int_rq_oob) ? \
ARRAY_SIZE(vnic_env_stats_dev_oob_desc) : 0) ARRAY_SIZE(vnic_env_stats_dev_oob_desc) : 0)
#define NUM_VNIC_ENV_DROP_COUNTERS(dev) \
(MLX5_CAP_GEN(dev, eth_wqe_too_small) ? \
ARRAY_SIZE(vnic_env_stats_drop_desc) : 0)
static MLX5E_DECLARE_STATS_GRP_OP_NUM_STATS(vnic_env) static MLX5E_DECLARE_STATS_GRP_OP_NUM_STATS(vnic_env)
{ {
return NUM_VNIC_ENV_STEER_COUNTERS(priv->mdev) + return NUM_VNIC_ENV_STEER_COUNTERS(priv->mdev) +
NUM_VNIC_ENV_DEV_OOB_COUNTERS(priv->mdev); NUM_VNIC_ENV_DEV_OOB_COUNTERS(priv->mdev) +
NUM_VNIC_ENV_DROP_COUNTERS(priv->mdev);
} }
static MLX5E_DECLARE_STATS_GRP_OP_FILL_STRS(vnic_env) static MLX5E_DECLARE_STATS_GRP_OP_FILL_STRS(vnic_env)
...@@ -665,6 +674,11 @@ static MLX5E_DECLARE_STATS_GRP_OP_FILL_STRS(vnic_env) ...@@ -665,6 +674,11 @@ static MLX5E_DECLARE_STATS_GRP_OP_FILL_STRS(vnic_env)
for (i = 0; i < NUM_VNIC_ENV_DEV_OOB_COUNTERS(priv->mdev); i++) for (i = 0; i < NUM_VNIC_ENV_DEV_OOB_COUNTERS(priv->mdev); i++)
strcpy(data + (idx++) * ETH_GSTRING_LEN, strcpy(data + (idx++) * ETH_GSTRING_LEN,
vnic_env_stats_dev_oob_desc[i].format); vnic_env_stats_dev_oob_desc[i].format);
for (i = 0; i < NUM_VNIC_ENV_DROP_COUNTERS(priv->mdev); i++)
strcpy(data + (idx++) * ETH_GSTRING_LEN,
vnic_env_stats_drop_desc[i].format);
return idx; return idx;
} }
...@@ -679,6 +693,11 @@ static MLX5E_DECLARE_STATS_GRP_OP_FILL_STATS(vnic_env) ...@@ -679,6 +693,11 @@ static MLX5E_DECLARE_STATS_GRP_OP_FILL_STATS(vnic_env)
for (i = 0; i < NUM_VNIC_ENV_DEV_OOB_COUNTERS(priv->mdev); i++) for (i = 0; i < NUM_VNIC_ENV_DEV_OOB_COUNTERS(priv->mdev); i++)
data[idx++] = MLX5E_READ_CTR32_BE(priv->stats.vnic.query_vnic_env_out, data[idx++] = MLX5E_READ_CTR32_BE(priv->stats.vnic.query_vnic_env_out,
vnic_env_stats_dev_oob_desc, i); vnic_env_stats_dev_oob_desc, i);
for (i = 0; i < NUM_VNIC_ENV_DROP_COUNTERS(priv->mdev); i++)
data[idx++] = MLX5E_READ_CTR32_BE(priv->stats.vnic.query_vnic_env_out,
vnic_env_stats_drop_desc, i);
return idx; return idx;
} }
......
...@@ -273,6 +273,10 @@ struct mlx5e_qcounter_stats { ...@@ -273,6 +273,10 @@ struct mlx5e_qcounter_stats {
u32 rx_if_down_packets; u32 rx_if_down_packets;
}; };
#define VNIC_ENV_GET(vnic_env_stats, c) \
MLX5_GET(query_vnic_env_out, (vnic_env_stats)->query_vnic_env_out, \
vport_env.c)
struct mlx5e_vnic_env_stats { struct mlx5e_vnic_env_stats {
__be64 query_vnic_env_out[MLX5_ST_SZ_QW(query_vnic_env_out)]; __be64 query_vnic_env_out[MLX5_ST_SZ_QW(query_vnic_env_out)];
}; };
......
...@@ -1491,7 +1491,9 @@ struct mlx5_ifc_cmd_hca_cap_bits { ...@@ -1491,7 +1491,9 @@ struct mlx5_ifc_cmd_hca_cap_bits {
u8 reserved_at_120[0xa]; u8 reserved_at_120[0xa];
u8 log_max_ra_req_dc[0x6]; u8 log_max_ra_req_dc[0x6];
u8 reserved_at_130[0x9]; u8 reserved_at_130[0x2];
u8 eth_wqe_too_small[0x1];
u8 reserved_at_133[0x6];
u8 vnic_env_cq_overrun[0x1]; u8 vnic_env_cq_overrun[0x1];
u8 log_max_ra_res_dc[0x6]; u8 log_max_ra_res_dc[0x6];
...@@ -3537,7 +3539,9 @@ struct mlx5_ifc_vnic_diagnostic_statistics_bits { ...@@ -3537,7 +3539,9 @@ struct mlx5_ifc_vnic_diagnostic_statistics_bits {
u8 cq_overrun[0x20]; u8 cq_overrun[0x20];
u8 reserved_at_220[0xde0]; u8 eth_wqe_too_small[0x20];
u8 reserved_at_220[0xdc0];
}; };
struct mlx5_ifc_traffic_counter_bits { struct mlx5_ifc_traffic_counter_bits {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment