You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
274 lines
8.7 KiB
274 lines
8.7 KiB
From 53141c2d2ece30134507bf0342288ed1340a8d83 Mon Sep 17 00:00:00 2001
|
|
From: Alaa Hleihel <ahleihel@redhat.com>
|
|
Date: Sun, 10 May 2020 14:51:50 -0400
|
|
Subject: [PATCH 026/312] [netdrv] net/mlx5e: Add cq info to tx reporter
|
|
diagnose
|
|
|
|
Message-id: <20200510145245.10054-28-ahleihel@redhat.com>
|
|
Patchwork-id: 306568
|
|
Patchwork-instance: patchwork
|
|
O-Subject: [RHEL8.3 BZ 1789378 v2 27/82] net/mlx5e: Add cq info to tx reporter diagnose
|
|
Bugzilla: 1790198 1789378
|
|
RH-Acked-by: Kamal Heib <kheib@redhat.com>
|
|
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
|
RH-Acked-by: Tony Camuso <tcamuso@redhat.com>
|
|
RH-Acked-by: Jonathan Toppins <jtoppins@redhat.com>
|
|
|
|
Bugzilla: http://bugzilla.redhat.com/1789378
|
|
Bugzilla: http://bugzilla.redhat.com/1790198
|
|
Upstream: v5.4-rc1
|
|
|
|
commit 2bf09e60ae5ef68c2282f97baf37b7dbd9cc1d48
|
|
Author: Aya Levin <ayal@mellanox.com>
|
|
Date: Sun Jun 30 15:08:00 2019 +0300
|
|
|
|
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>
|
|
|
|
Signed-off-by: Alaa Hleihel <ahleihel@redhat.com>
|
|
Signed-off-by: Frantisek Hrbata <fhrbata@redhat.com>
|
|
---
|
|
.../net/ethernet/mellanox/mlx5/core/en/health.c | 62 ++++++++++++++++++++++
|
|
.../net/ethernet/mellanox/mlx5/core/en/health.h | 2 +
|
|
.../ethernet/mellanox/mlx5/core/en/reporter_tx.c | 8 +++
|
|
drivers/net/ethernet/mellanox/mlx5/core/wq.c | 5 ++
|
|
drivers/net/ethernet/mellanox/mlx5/core/wq.h | 1 +
|
|
5 files changed, 78 insertions(+)
|
|
|
|
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/health.c b/drivers/net/ethernet/mellanox/mlx5/core/en/health.c
|
|
index dab563f07157..ffd9a7a165a2 100644
|
|
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/health.c
|
|
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/health.c
|
|
@@ -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;
|
|
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/health.h b/drivers/net/ethernet/mellanox/mlx5/core/en/health.h
|
|
index 112771ad516c..6725d417aaf5 100644
|
|
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/health.h
|
|
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/health.h
|
|
@@ -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);
|
|
|
|
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/reporter_tx.c b/drivers/net/ethernet/mellanox/mlx5/core/en/reporter_tx.c
|
|
index a5d0fcbb85af..bfed558637c2 100644
|
|
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/reporter_tx.c
|
|
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/reporter_tx.c
|
|
@@ -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;
|
|
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/wq.c b/drivers/net/ethernet/mellanox/mlx5/core/wq.c
|
|
index 953cc8efba69..dd2315ce4441 100644
|
|
--- a/drivers/net/ethernet/mellanox/mlx5/core/wq.c
|
|
+++ b/drivers/net/ethernet/mellanox/mlx5/core/wq.c
|
|
@@ -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;
|
|
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/wq.h b/drivers/net/ethernet/mellanox/mlx5/core/wq.h
|
|
index f1ec58c9e9e3..55791f71a778 100644
|
|
--- a/drivers/net/ethernet/mellanox/mlx5/core/wq.h
|
|
+++ b/drivers/net/ethernet/mellanox/mlx5/core/wq.h
|
|
@@ -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,
|
|
--
|
|
2.13.6
|
|
|