mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-04 04:06:26 +00:00
net/mlx5e: Expose the VF/SF RX drop counter on the representor
Q counters are device-level counters that track specific events, among which are out_of_buffer events. These events occur when packets are dropped due to a lack of receive buffer in the RX queue. Expose the total number of out_of_buffer events on the VFs/SFs to their respective representor, using the "ip stats group link" under the name of "rx_missed". The "rx_missed" equals the sum of all Q counters out_of_buffer values allocated on the VFs/SFs. Signed-off-by: Carolina Jubran <cjubran@nvidia.com> Reviewed-by: Gal Pressman <gal@nvidia.com> Reviewed-by: Aya Levin <ayal@nvidia.com> Reviewed-by: Rahul Rameshbabu <rrameshbabu@nvidia.com> Signed-off-by: Tariq Toukan <tariqt@nvidia.com> Reviewed-by: Jacob Keller <jacob.e.keller@intel.com> Link: https://lore.kernel.org/r/20240410214154.250583-1-tariqt@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
ef4ba01181
commit
919b38a916
@ -273,6 +273,40 @@ static MLX5E_DECLARE_STATS_GRP_OP_UPDATE_STATS(vport_rep)
|
||||
kvfree(out);
|
||||
}
|
||||
|
||||
static int mlx5e_rep_query_aggr_q_counter(struct mlx5_core_dev *dev, int vport, void *out)
|
||||
{
|
||||
u32 in[MLX5_ST_SZ_DW(query_q_counter_in)] = {};
|
||||
|
||||
MLX5_SET(query_q_counter_in, in, opcode, MLX5_CMD_OP_QUERY_Q_COUNTER);
|
||||
MLX5_SET(query_q_counter_in, in, other_vport, 1);
|
||||
MLX5_SET(query_q_counter_in, in, vport_number, vport);
|
||||
MLX5_SET(query_q_counter_in, in, aggregate, 1);
|
||||
|
||||
return mlx5_cmd_exec_inout(dev, query_q_counter, in, out);
|
||||
}
|
||||
|
||||
static void mlx5e_rep_update_vport_q_counter(struct mlx5e_priv *priv)
|
||||
{
|
||||
struct mlx5e_rep_stats *rep_stats = &priv->stats.rep_stats;
|
||||
u32 out[MLX5_ST_SZ_DW(query_q_counter_out)] = {};
|
||||
struct mlx5e_rep_priv *rpriv = priv->ppriv;
|
||||
struct mlx5_eswitch_rep *rep = rpriv->rep;
|
||||
int err;
|
||||
|
||||
if (!MLX5_CAP_GEN(priv->mdev, q_counter_other_vport) ||
|
||||
!MLX5_CAP_GEN(priv->mdev, q_counter_aggregation))
|
||||
return;
|
||||
|
||||
err = mlx5e_rep_query_aggr_q_counter(priv->mdev, rep->vport, out);
|
||||
if (err) {
|
||||
netdev_warn(priv->netdev, "failed reading stats on vport %d, error %d\n",
|
||||
rep->vport, err);
|
||||
return;
|
||||
}
|
||||
|
||||
rep_stats->rx_vport_out_of_buffer = MLX5_GET(query_q_counter_out, out, out_of_buffer);
|
||||
}
|
||||
|
||||
static void mlx5e_rep_get_strings(struct net_device *dev,
|
||||
u32 stringset, u8 *data)
|
||||
{
|
||||
@ -1229,6 +1263,12 @@ static int mlx5e_update_rep_rx(struct mlx5e_priv *priv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void mlx5e_rep_stats_update_ndo_stats(struct mlx5e_priv *priv)
|
||||
{
|
||||
mlx5e_stats_update_ndo_stats(priv);
|
||||
mlx5e_rep_update_vport_q_counter(priv);
|
||||
}
|
||||
|
||||
static int mlx5e_rep_event_mpesw(struct mlx5e_priv *priv)
|
||||
{
|
||||
struct mlx5e_rep_priv *rpriv = priv->ppriv;
|
||||
@ -1421,7 +1461,7 @@ static const struct mlx5e_profile mlx5e_rep_profile = {
|
||||
.enable = mlx5e_rep_enable,
|
||||
.disable = mlx5e_rep_disable,
|
||||
.update_rx = mlx5e_update_rep_rx,
|
||||
.update_stats = mlx5e_stats_update_ndo_stats,
|
||||
.update_stats = mlx5e_rep_stats_update_ndo_stats,
|
||||
.rx_handlers = &mlx5e_rx_handlers_rep,
|
||||
.max_tc = 1,
|
||||
.stats_grps = mlx5e_rep_stats_grps,
|
||||
|
@ -484,6 +484,7 @@ struct mlx5e_rep_stats {
|
||||
u64 tx_vport_rdma_multicast_bytes;
|
||||
u64 vport_loopback_packets;
|
||||
u64 vport_loopback_bytes;
|
||||
u64 rx_vport_out_of_buffer;
|
||||
};
|
||||
|
||||
struct mlx5e_stats {
|
||||
@ -504,6 +505,7 @@ static inline void mlx5e_stats_copy_rep_stats(struct rtnl_link_stats64 *vf_vport
|
||||
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;
|
||||
vf_vport->rx_missed_errors = rep_stats->rx_vport_out_of_buffer;
|
||||
}
|
||||
|
||||
extern mlx5e_stats_grp_t mlx5e_nic_stats_grps[];
|
||||
|
Loading…
Reference in New Issue
Block a user