Commit 99c55284 authored by Amir Tzin's avatar Amir Tzin Committed by Jakub Kicinski
Browse files

net/mlx5e: Add direct TIRs to devlink rx reporter diagnose



Add "RX resources" tag to the output of rx reporter diagnose callback.
Underneath add tag for direct TIRs, for each TIR expose its tirn and
the corresponding rqtn.

$ sudo devlink health diagnose auxiliary/mlx5_core.eth.0/65535 reporter rx
 ....
 rx resources:
   Direct TIRs:
       ix: 0 tirn: 20 rqtn: 1
       ix: 1 tirn: 21 rqtn: 2
       ix: 2 tirn: 22 rqtn: 3
       ix: 3 tirn: 23 rqtn: 4
       ix: 4 tirn: 24 rqtn: 5
       ix: 5 tirn: 25 rqtn: 6
       ix: 6 tirn: 26 rqtn: 7
       ix: 7 tirn: 27 rqtn: 8
       ix: 8 tirn: 28 rqtn: 9
       ix: 9 tirn: 29 rqtn: 10
       ix: 10 tirn: 30 rqtn: 11
       ix: 11 tirn: 31 rqtn: 12
       ix: 12 tirn: 32 rqtn: 13
       ix: 13 tirn: 33 rqtn: 14
       ix: 14 tirn: 34 rqtn: 15
       ix: 15 tirn: 35 rqtn: 16
       ix: 16 tirn: 36 rqtn: 17
       ix: 17 tirn: 37 rqtn: 18
       ix: 18 tirn: 38 rqtn: 19
       ix: 19 tirn: 39 rqtn: 20
       ix: 20 tirn: 40 rqtn: 21
       ix: 21 tirn: 41 rqtn: 22
       ix: 22 tirn: 42 rqtn: 23
       ix: 23 tirn: 43 rqtn: 24

Signed-off-by: default avatarAmir Tzin <amirtz@nvidia.com>
Reviewed-by: default avatarAya Levin <ayal@nvidia.com>
Signed-off-by: default avatarTariq Toukan <tariqt@nvidia.com>
Link: https://patch.msgid.link/20250209101716.112774-13-tariqt@nvidia.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 913175b3
Loading
Loading
Loading
Loading
+32 −0
Original line number Diff line number Diff line
@@ -338,6 +338,37 @@ static void mlx5e_rx_reporter_build_diagnose_output_ptp_rq(struct mlx5e_rq *rq,
	devlink_fmsg_obj_nest_end(fmsg);
}

static void mlx5e_rx_reporter_diagnose_rx_res_dir_tirns(struct mlx5e_rx_res *rx_res,
							struct devlink_fmsg *fmsg)
{
	unsigned int max_nch = mlx5e_rx_res_get_max_nch(rx_res);
	int i;

	devlink_fmsg_arr_pair_nest_start(fmsg, "Direct TIRs");

	for (i = 0; i < max_nch; i++) {
		devlink_fmsg_obj_nest_start(fmsg);

		devlink_fmsg_u32_pair_put(fmsg, "ix", i);
		devlink_fmsg_u32_pair_put(fmsg, "tirn", mlx5e_rx_res_get_tirn_direct(rx_res, i));
		devlink_fmsg_u32_pair_put(fmsg, "rqtn", mlx5e_rx_res_get_rqtn_direct(rx_res, i));

		devlink_fmsg_obj_nest_end(fmsg);
	}

	devlink_fmsg_arr_pair_nest_end(fmsg);
}

static void mlx5e_rx_reporter_diagnose_rx_res(struct mlx5e_priv *priv,
					      struct devlink_fmsg *fmsg)
{
	struct mlx5e_rx_res *rx_res = priv->rx_res;

	mlx5e_health_fmsg_named_obj_nest_start(fmsg, "RX resources");
	mlx5e_rx_reporter_diagnose_rx_res_dir_tirns(rx_res, fmsg);
	mlx5e_health_fmsg_named_obj_nest_end(fmsg);
}

static void mlx5e_rx_reporter_diagnose_rqs(struct mlx5e_priv *priv, struct devlink_fmsg *fmsg)
{
	struct mlx5e_ptp *ptp_ch = priv->channels.ptp;
@@ -373,6 +404,7 @@ static int mlx5e_rx_reporter_diagnose(struct devlink_health_reporter *reporter,

	mlx5e_rx_reporter_diagnose_common_config(priv, fmsg);
	mlx5e_rx_reporter_diagnose_rqs(priv, fmsg);
	mlx5e_rx_reporter_diagnose_rx_res(priv, fmsg);
unlock:
	mutex_unlock(&priv->state_lock);
	return 0;
+6 −1
Original line number Diff line number Diff line
@@ -497,6 +497,11 @@ void mlx5e_rx_res_destroy(struct mlx5e_rx_res *res)
	mlx5e_rx_res_free(res);
}

unsigned int mlx5e_rx_res_get_max_nch(struct mlx5e_rx_res *res)
{
	return res->max_nch;
}

u32 mlx5e_rx_res_get_tirn_direct(struct mlx5e_rx_res *res, unsigned int ix)
{
	return mlx5e_tir_get_tirn(&res->channels[ix].direct_tir);
@@ -522,7 +527,7 @@ u32 mlx5e_rx_res_get_tirn_ptp(struct mlx5e_rx_res *res)
	return mlx5e_tir_get_tirn(&res->ptp.tir);
}

static u32 mlx5e_rx_res_get_rqtn_direct(struct mlx5e_rx_res *res, unsigned int ix)
u32 mlx5e_rx_res_get_rqtn_direct(struct mlx5e_rx_res *res, unsigned int ix)
{
	return mlx5e_rqt_get_rqtn(&res->channels[ix].direct_rqt);
}
+2 −0
Original line number Diff line number Diff line
@@ -34,6 +34,8 @@ u32 mlx5e_rx_res_get_tirn_direct(struct mlx5e_rx_res *res, unsigned int ix);
u32 mlx5e_rx_res_get_tirn_rss(struct mlx5e_rx_res *res, enum mlx5_traffic_types tt);
u32 mlx5e_rx_res_get_tirn_rss_inner(struct mlx5e_rx_res *res, enum mlx5_traffic_types tt);
u32 mlx5e_rx_res_get_tirn_ptp(struct mlx5e_rx_res *res);
u32 mlx5e_rx_res_get_rqtn_direct(struct mlx5e_rx_res *res, unsigned int ix);
unsigned int mlx5e_rx_res_get_max_nch(struct mlx5e_rx_res *res);

/* Activate/deactivate API */
void mlx5e_rx_res_channels_activate(struct mlx5e_rx_res *res, struct mlx5e_channels *chs);