From: Leon Romanovsky <leon@kernel.org>
To: David Ahern <dsahern@gmail.com>
Cc: Chiara Meiohas <cmeiohas@nvidia.com>,
Jason Gunthorpe <jgg@nvidia.com>,
linux-netdev <netdev@vger.kernel.org>,
RDMA mailing list <linux-rdma@vger.kernel.org>
Subject: [PATCH iproute2-next 2/2] rdma: Add an option to display driver-specific QPs in the rdma tool
Date: Tue, 30 Apr 2024 13:18:20 +0300 [thread overview]
Message-ID: <71cf1e53d0255fd0979e05e9004993f0f9684812.1714472040.git.leonro@nvidia.com> (raw)
In-Reply-To: <cover.1714472040.git.leonro@nvidia.com>
From: Chiara Meiohas <cmeiohas@nvidia.com>
Utilize the -dd flag (driver-specific details) in the rdmatool
to view driver-specific QPs which are not exposed yet.
The following examples show mlx5 UMR QP which is visible now:
$ rdma resource show qp link ibp8s0f1
link ibp8s0f1/1 lqpn 360 type UD state RTS sq-psn 0 comm [mlx5_ib]
link ibp8s0f1/1 lqpn 0 type SMI state RTS sq-psn 0 comm [ib_core]
link ibp8s0f1/1 lqpn 1 type GSI state RTS sq-psn 0 comm [ib_core]
$ rdma resource show qp link ibp8s0f1 -dd
link ibp8s0f1/1 lqpn 360 type UD state RTS sq-psn 0 comm [mlx5_ib]
link ibp8s0f1/1 lqpn 465 type DRIVER subtype REG_UMR state RTS sq-psn 0 comm [mlx5_ib]
link ibp8s0f1/1 lqpn 0 type SMI state RTS sq-psn 0 comm [ib_core]
link ibp8s0f1/1 lqpn 1 type GSI state RTS sq-psn 0 comm [ib_core]
$ rdma resource show
0: ibp8s0f0: pd 3 cq 4 qp 3 cm_id 0 mr 0 ctx 0 srq 2
1: ibp8s0f1: pd 3 cq 4 qp 3 cm_id 0 mr 0 ctx 0 srq 2
$ rdma resource show -dd
0: ibp8s0f0: pd 3 cq 4 qp 4 cm_id 0 mr 0 ctx 0 srq 2
1: ibp8s0f1: pd 3 cq 4 qp 4 cm_id 0 mr 0 ctx 0 srq 2
Signed-off-by: Chiara Meiohas <cmeiohas@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
---
rdma/res-qp.c | 15 +++++++++++++++
rdma/res.c | 5 +++++
rdma/utils.c | 1 +
3 files changed, 21 insertions(+)
diff --git a/rdma/res-qp.c b/rdma/res-qp.c
index 65ff54ab..a47225df 100644
--- a/rdma/res-qp.c
+++ b/rdma/res-qp.c
@@ -40,6 +40,15 @@ static void print_type(uint32_t val)
print_string(PRINT_ANY, "type", "type %s ", qp_types_to_str(val));
}
+/*
+ * print the subtype only if the QPT is IB_QPT_DRIVER
+ */
+static void print_subtype(uint8_t type, const char *sub_type)
+{
+ if (type == 0xFF && sub_type)
+ print_string(PRINT_ANY, "subtype", "subtype %s ", sub_type);
+}
+
static void print_state(uint32_t val)
{
print_string(PRINT_ANY, "state", "state %s ", qp_states_to_str(val));
@@ -81,6 +90,7 @@ static int res_qp_line(struct rd *rd, const char *name, int idx,
{
uint32_t lqpn, rqpn = 0, rq_psn = 0, sq_psn;
uint8_t type, state, path_mig_state = 0;
+ const char* sub_type = NULL;
uint32_t port = 0, pid = 0;
uint32_t pdn = 0;
char *comm = NULL;
@@ -134,6 +144,10 @@ static int res_qp_line(struct rd *rd, const char *name, int idx,
nla_line[RDMA_NLDEV_ATTR_RES_PATH_MIG_STATE]))
goto out;
+ if (nla_line[RDMA_NLDEV_ATTR_RES_SUBTYPE])
+ sub_type =
+ mnl_attr_get_str(nla_line[RDMA_NLDEV_ATTR_RES_SUBTYPE]);
+
type = mnl_attr_get_u8(nla_line[RDMA_NLDEV_ATTR_RES_TYPE]);
if (rd_is_string_filtered_attr(rd, "type", qp_types_to_str(type),
nla_line[RDMA_NLDEV_ATTR_RES_TYPE]))
@@ -164,6 +178,7 @@ static int res_qp_line(struct rd *rd, const char *name, int idx,
print_rqpn(rqpn, nla_line);
print_type(type);
+ print_subtype(type, sub_type);
print_state(state);
print_rqpsn(rq_psn, nla_line);
diff --git a/rdma/res.c b/rdma/res.c
index 3e024134..c311513a 100644
--- a/rdma/res.c
+++ b/rdma/res.c
@@ -99,6 +99,8 @@ int _res_send_idx_msg(struct rd *rd, uint32_t command, mnl_cb_t callback,
RDMA_NLDEV_ATTR_PORT_INDEX, rd->port_idx);
mnl_attr_put_u32(rd->nlh, id, idx);
+ mnl_attr_put_u8(rd->nlh, RDMA_NLDEV_ATTR_DRIVER_DETAILS,
+ rd->show_driver_details);
if (command == RDMA_NLDEV_CMD_STAT_GET)
mnl_attr_put_u32(rd->nlh, RDMA_NLDEV_ATTR_STAT_RES,
@@ -121,6 +123,9 @@ int _res_send_msg(struct rd *rd, uint32_t command, mnl_cb_t callback)
flags |= NLM_F_DUMP;
rd_prepare_msg(rd, command, &seq, flags);
+
+ mnl_attr_put_u8(rd->nlh, RDMA_NLDEV_ATTR_DRIVER_DETAILS,
+ rd->show_driver_details);
mnl_attr_put_u32(rd->nlh, RDMA_NLDEV_ATTR_DEV_INDEX, rd->dev_idx);
if (rd->port_idx)
mnl_attr_put_u32(rd->nlh,
diff --git a/rdma/utils.c b/rdma/utils.c
index 27595a38..0f41013a 100644
--- a/rdma/utils.c
+++ b/rdma/utils.c
@@ -423,6 +423,7 @@ static const enum mnl_attr_data_type nldev_policy[RDMA_NLDEV_ATTR_MAX] = {
[RDMA_NLDEV_ATTR_RES_SQ_PSN] = MNL_TYPE_U32,
[RDMA_NLDEV_ATTR_RES_PATH_MIG_STATE] = MNL_TYPE_U8,
[RDMA_NLDEV_ATTR_RES_TYPE] = MNL_TYPE_U8,
+ [RDMA_NLDEV_ATTR_RES_SUBTYPE] = MNL_TYPE_NUL_STRING,
[RDMA_NLDEV_ATTR_RES_STATE] = MNL_TYPE_U8,
[RDMA_NLDEV_ATTR_RES_PID] = MNL_TYPE_U32,
[RDMA_NLDEV_ATTR_RES_KERN_NAME] = MNL_TYPE_NUL_STRING,
--
2.44.0
next prev parent reply other threads:[~2024-04-30 10:18 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-30 10:18 [PATCH iproute2-next 0/2] Extend rdmatool to print driver QPs too Leon Romanovsky
2024-04-30 10:18 ` [PATCH iproute2-next 1/2] rdma: update uapi header Leon Romanovsky
2024-04-30 14:43 ` [EXTERNAL] " Subbaraya Sundeep Bhatta
2024-04-30 10:18 ` Leon Romanovsky [this message]
2024-05-03 15:20 ` [PATCH iproute2-next 0/2] Extend rdmatool to print driver QPs too patchwork-bot+netdevbpf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=71cf1e53d0255fd0979e05e9004993f0f9684812.1714472040.git.leonro@nvidia.com \
--to=leon@kernel.org \
--cc=cmeiohas@nvidia.com \
--cc=dsahern@gmail.com \
--cc=jgg@nvidia.com \
--cc=linux-rdma@vger.kernel.org \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox