net/mlx5e: Add cq info to tx reporter diagnose
Add cq information to general diagnose output: CQ size and stride size. Per SQ add information about the related CQ: cqn and CQ's HW status. $ devlink health diagnose pci/0000:00:0b.0 reporter tx Common Config: SQ: stride size: 64 size: 1024 CQ: stride size: 64 size: 1024 SQs: channel ix: 0 tc: 0 txq ix: 0 sqn: 4307 HW state: 1 stopped: false cc: 0 pc: 0 CQ: cqn: 1030 HW status: 0 channel ix: 1 tc: 0 txq ix: 1 sqn: 4312 HW state: 1 stopped: false cc: 0 pc: 0 CQ: cqn: 1034 HW status: 0 channel ix: 2 tc: 0 txq ix: 2 sqn: 4317 HW state: 1 stopped: false cc: 0 pc: 0 CQ: cqn: 1038 HW status: 0 channel ix: 3 tc: 0 txq ix: 3 sqn: 4322 HW state: 1 stopped: false cc: 0 pc: 0 CQ: cqn: 1042 HW status: 0 $ devlink health diagnose pci/0000:00:0b.0 reporter tx -jp { "Common Config": { "SQ": { "stride size": 64, "size": 1024 }, "CQ": { "stride size": 64, "size": 1024 } }, "SQs": [ { "channel ix": 0, "tc": 0, "txq ix": 0, "sqn": 4307, "HW state": 1, "stopped": false, "cc": 0, "pc": 0, "CQ": { "cqn": 1030, "HW status": 0 } },{ "channel ix": 1, "tc": 0, "txq ix": 1, "sqn": 4312, "HW state": 1, "stopped": false, "cc": 0, "pc": 0, "CQ": { "cqn": 1034, "HW status": 0 } },{ "channel ix": 2, "tc": 0, "txq ix": 2, "sqn": 4317, "HW state": 1, "stopped": false, "cc": 0, "pc": 0, "CQ": { "cqn": 1038, "HW status": 0 } },{ "channel ix": 3, "tc": 0, "txq ix": 3, "sqn": 4322, "HW state": 1, "stopped": false, "cc": 0, "pc": 0, "CQ": { "cqn": 1042, "HW status": 0 } ] } Signed-off-by: Aya Levin <ayal@mellanox.com> Reviewed-by: Tariq Toukan <tariqt@mellanox.com> Acked-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:
parent
2d708887a4
commit
2bf09e60ae
|
@ -34,6 +34,68 @@ int mlx5e_reporter_named_obj_nest_end(struct devlink_fmsg *fmsg)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int mlx5e_reporter_cq_diagnose(struct mlx5e_cq *cq, struct devlink_fmsg *fmsg)
|
||||
{
|
||||
struct mlx5e_priv *priv = cq->channel->priv;
|
||||
u32 out[MLX5_ST_SZ_DW(query_cq_out)] = {};
|
||||
u8 hw_status;
|
||||
void *cqc;
|
||||
int err;
|
||||
|
||||
err = mlx5_core_query_cq(priv->mdev, &cq->mcq, out, sizeof(out));
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
cqc = MLX5_ADDR_OF(query_cq_out, out, cq_context);
|
||||
hw_status = MLX5_GET(cqc, cqc, status);
|
||||
|
||||
err = mlx5e_reporter_named_obj_nest_start(fmsg, "CQ");
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = devlink_fmsg_u32_pair_put(fmsg, "cqn", cq->mcq.cqn);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = devlink_fmsg_u8_pair_put(fmsg, "HW status", hw_status);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = mlx5e_reporter_named_obj_nest_end(fmsg);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mlx5e_reporter_cq_common_diagnose(struct mlx5e_cq *cq, struct devlink_fmsg *fmsg)
|
||||
{
|
||||
u8 cq_log_stride;
|
||||
u32 cq_sz;
|
||||
int err;
|
||||
|
||||
cq_sz = mlx5_cqwq_get_size(&cq->wq);
|
||||
cq_log_stride = mlx5_cqwq_get_log_stride_size(&cq->wq);
|
||||
|
||||
err = mlx5e_reporter_named_obj_nest_start(fmsg, "CQ");
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = devlink_fmsg_u64_pair_put(fmsg, "stride size", BIT(cq_log_stride));
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = devlink_fmsg_u32_pair_put(fmsg, "size", cq_sz);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = mlx5e_reporter_named_obj_nest_end(fmsg);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mlx5e_health_sq_to_ready(struct mlx5e_channel *channel, u32 sqn)
|
||||
{
|
||||
struct mlx5_core_dev *mdev = channel->mdev;
|
||||
|
|
|
@ -11,6 +11,8 @@ void mlx5e_reporter_tx_destroy(struct mlx5e_priv *priv);
|
|||
void mlx5e_reporter_tx_err_cqe(struct mlx5e_txqsq *sq);
|
||||
int mlx5e_reporter_tx_timeout(struct mlx5e_txqsq *sq);
|
||||
|
||||
int mlx5e_reporter_cq_diagnose(struct mlx5e_cq *cq, struct devlink_fmsg *fmsg);
|
||||
int mlx5e_reporter_cq_common_diagnose(struct mlx5e_cq *cq, struct devlink_fmsg *fmsg);
|
||||
int mlx5e_reporter_named_obj_nest_start(struct devlink_fmsg *fmsg, char *name);
|
||||
int mlx5e_reporter_named_obj_nest_end(struct devlink_fmsg *fmsg);
|
||||
|
||||
|
|
|
@ -193,6 +193,10 @@ mlx5e_tx_reporter_build_diagnose_output(struct devlink_fmsg *fmsg,
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
err = mlx5e_reporter_cq_diagnose(&sq->cq, fmsg);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = devlink_fmsg_obj_nest_end(fmsg);
|
||||
if (err)
|
||||
return err;
|
||||
|
@ -233,6 +237,10 @@ static int mlx5e_tx_reporter_diagnose(struct devlink_health_reporter *reporter,
|
|||
if (err)
|
||||
goto unlock;
|
||||
|
||||
err = mlx5e_reporter_cq_common_diagnose(&generic_sq->cq, fmsg);
|
||||
if (err)
|
||||
goto unlock;
|
||||
|
||||
err = mlx5e_reporter_named_obj_nest_end(fmsg);
|
||||
if (err)
|
||||
goto unlock;
|
||||
|
|
|
@ -44,6 +44,11 @@ u32 mlx5_cqwq_get_size(struct mlx5_cqwq *wq)
|
|||
return wq->fbc.sz_m1 + 1;
|
||||
}
|
||||
|
||||
u8 mlx5_cqwq_get_log_stride_size(struct mlx5_cqwq *wq)
|
||||
{
|
||||
return wq->fbc.log_stride;
|
||||
}
|
||||
|
||||
u32 mlx5_wq_ll_get_size(struct mlx5_wq_ll *wq)
|
||||
{
|
||||
return (u32)wq->fbc.sz_m1 + 1;
|
||||
|
|
|
@ -89,6 +89,7 @@ int mlx5_cqwq_create(struct mlx5_core_dev *mdev, struct mlx5_wq_param *param,
|
|||
void *cqc, struct mlx5_cqwq *wq,
|
||||
struct mlx5_wq_ctrl *wq_ctrl);
|
||||
u32 mlx5_cqwq_get_size(struct mlx5_cqwq *wq);
|
||||
u8 mlx5_cqwq_get_log_stride_size(struct mlx5_cqwq *wq);
|
||||
|
||||
int mlx5_wq_ll_create(struct mlx5_core_dev *mdev, struct mlx5_wq_param *param,
|
||||
void *wqc, struct mlx5_wq_ll *wq,
|
||||
|
|
Loading…
Reference in New Issue