Add support to dump rdma SRQ resource

Signed-off-by: Ran Zhou <zhouran10@h-partners.com>
This commit is contained in:
Ran Zhou 2024-02-26 13:51:45 +08:00
parent 44a2f93582
commit 1673447902
4 changed files with 333 additions and 1 deletions

View File

@ -0,0 +1,86 @@
From 07bfa4482d49cc87a7b7c810c99397b9e8f794f6 Mon Sep 17 00:00:00 2001
From: wenglianfa <wenglianfa@huawei.com>
Date: Tue, 10 Oct 2023 15:55:26 +0800
Subject: [PATCH] rdma: Add support to dump SRQ resource in raw format
Add support to dump SRQ resource in raw format.
This patch relies on the corresponding kernel commit aebf8145e11a
("RDMA/core: Add support to dump SRQ resource in RAW format")
Example:
$ rdma res show srq -r
dev hns3 149000...
$ rdma res show srq -j -r
[{"ifindex":0,"ifname":"hns3","data":[149,0,0,...]}]
Signed-off-by: wenglianfa <wenglianfa@huawei.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: David Ahern <dsahern@kernel.org>
---
rdma/res-srq.c | 20 ++++++++++++++++++--
rdma/res.h | 2 ++
2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/rdma/res-srq.c b/rdma/res-srq.c
index 186ae281..cf9209d7 100644
--- a/rdma/res-srq.c
+++ b/rdma/res-srq.c
@@ -162,6 +162,20 @@ out:
return -EINVAL;
}
+static int res_srq_line_raw(struct rd *rd, const char *name, int idx,
+ struct nlattr **nla_line)
+{
+ if (!nla_line[RDMA_NLDEV_ATTR_RES_RAW])
+ return MNL_CB_ERROR;
+
+ open_json_object(NULL);
+ print_dev(rd, idx, name);
+ print_raw_data(rd, nla_line);
+ newline(rd);
+
+ return MNL_CB_OK;
+}
+
static int res_srq_line(struct rd *rd, const char *name, int idx,
struct nlattr **nla_line)
{
@@ -248,7 +262,8 @@ int res_srq_idx_parse_cb(const struct nlmsghdr *nlh, void *data)
name = mnl_attr_get_str(tb[RDMA_NLDEV_ATTR_DEV_NAME]);
idx = mnl_attr_get_u32(tb[RDMA_NLDEV_ATTR_DEV_INDEX]);
- return res_srq_line(rd, name, idx, tb);
+ return (rd->show_raw) ? res_srq_line_raw(rd, name, idx, tb) :
+ res_srq_line(rd, name, idx, tb);
}
int res_srq_parse_cb(const struct nlmsghdr *nlh, void *data)
@@ -276,7 +291,8 @@ int res_srq_parse_cb(const struct nlmsghdr *nlh, void *data)
if (ret != MNL_CB_OK)
break;
- ret = res_srq_line(rd, name, idx, nla_line);
+ ret = (rd->show_raw) ? res_srq_line_raw(rd, name, idx, nla_line) :
+ res_srq_line(rd, name, idx, nla_line);
if (ret != MNL_CB_OK)
break;
}
diff --git a/rdma/res.h b/rdma/res.h
index 70e51acd..e880c28b 100644
--- a/rdma/res.h
+++ b/rdma/res.h
@@ -39,6 +39,8 @@ static inline uint32_t res_get_command(uint32_t command, struct rd *rd)
return RDMA_NLDEV_CMD_RES_CQ_GET_RAW;
case RDMA_NLDEV_CMD_RES_MR_GET:
return RDMA_NLDEV_CMD_RES_MR_GET_RAW;
+ case RDMA_NLDEV_CMD_RES_SRQ_GET:
+ return RDMA_NLDEV_CMD_RES_SRQ_GET_RAW;
default:
return command;
}
--
2.25.1

View File

@ -0,0 +1,204 @@
From 3a882b6b4e0ee8c7cfd11176d36a98d30fc449d3 Mon Sep 17 00:00:00 2001
From: wenglianfa <wenglianfa@huawei.com>
Date: Fri, 29 Dec 2023 14:52:41 +0800
Subject: [PATCH] rdma: Fix the error of accessing string variable outside the
lifecycle
All these SPRINT_BUF(b) definitions are inside the 'if' block, but
accessed outside the 'if' block through the pointers 'comm'. This
leads to empty 'comm' attribute when querying resource information.
So move the definitions to the beginning of the functions to extend
their life cycle.
Before:
$ rdma res show srq
dev hns_0 srqn 0 type BASIC lqpn 18 pdn 5 pid 7775 comm
After:
$ rdma res show srq
dev hns_0 srqn 0 type BASIC lqpn 18 pdn 5 pid 7775 comm ib_send_bw
Fixes: 1808f002dfdd ("lib/fs: fix memory leak in get_task_name()")
Signed-off-by: wenglianfa <wenglianfa@huawei.com>
Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
Reviewed-by: Petr Machata <petrm@nvidia.com>
Acked-by: Andrea Claudi <aclaudi@redhat.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
rdma/res-cmid.c | 3 +--
rdma/res-cq.c | 3 +--
rdma/res-ctx.c | 3 +--
rdma/res-mr.c | 3 +--
rdma/res-pd.c | 3 +--
rdma/res-qp.c | 3 +--
rdma/res-srq.c | 3 +--
rdma/stat.c | 3 +--
8 files changed, 8 insertions(+), 16 deletions(-)
diff --git a/rdma/res-cmid.c b/rdma/res-cmid.c
index 8b6b3497..17a89cc4 100644
--- a/rdma/res-cmid.c
+++ b/rdma/res-cmid.c
@@ -99,6 +99,7 @@ static int res_cm_id_line(struct rd *rd, const char *name, int idx,
uint32_t lqpn = 0, ps;
uint32_t cm_idn = 0;
char *comm = NULL;
+ SPRINT_BUF(b);
if (!nla_line[RDMA_NLDEV_ATTR_RES_STATE] ||
!nla_line[RDMA_NLDEV_ATTR_RES_PS])
@@ -156,8 +157,6 @@ static int res_cm_id_line(struct rd *rd, const char *name, int idx,
goto out;
if (nla_line[RDMA_NLDEV_ATTR_RES_PID]) {
- SPRINT_BUF(b);
-
pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]);
if (!get_task_name(pid, b, sizeof(b)))
comm = b;
diff --git a/rdma/res-cq.c b/rdma/res-cq.c
index 420e935a..0cab3fe0 100644
--- a/rdma/res-cq.c
+++ b/rdma/res-cq.c
@@ -63,6 +63,7 @@ static int res_cq_line(struct rd *rd, const char *name, int idx,
uint32_t cqn = 0;
uint64_t users;
uint32_t cqe;
+ SPRINT_BUF(b);
if (!nla_line[RDMA_NLDEV_ATTR_RES_CQE] ||
!nla_line[RDMA_NLDEV_ATTR_RES_USECNT])
@@ -84,8 +85,6 @@ static int res_cq_line(struct rd *rd, const char *name, int idx,
goto out;
if (nla_line[RDMA_NLDEV_ATTR_RES_PID]) {
- SPRINT_BUF(b);
-
pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]);
if (!get_task_name(pid, b, sizeof(b)))
comm = b;
diff --git a/rdma/res-ctx.c b/rdma/res-ctx.c
index 0a84d016..235c837a 100644
--- a/rdma/res-ctx.c
+++ b/rdma/res-ctx.c
@@ -13,13 +13,12 @@ static int res_ctx_line(struct rd *rd, const char *name, int idx,
char *comm = NULL;
uint32_t ctxn = 0;
uint32_t pid = 0;
+ SPRINT_BUF(b);
if (!nla_line[RDMA_NLDEV_ATTR_RES_CTXN])
return MNL_CB_ERROR;
if (nla_line[RDMA_NLDEV_ATTR_RES_PID]) {
- SPRINT_BUF(b);
-
pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]);
if (!get_task_name(pid, b, sizeof(b)))
comm = b;
diff --git a/rdma/res-mr.c b/rdma/res-mr.c
index 693d98c1..f6c2534a 100644
--- a/rdma/res-mr.c
+++ b/rdma/res-mr.c
@@ -31,6 +31,7 @@ static int res_mr_line(struct rd *rd, const char *name, int idx,
uint32_t pdn = 0;
uint32_t mrn = 0;
uint32_t pid = 0;
+ SPRINT_BUF(b);
if (!nla_line[RDMA_NLDEV_ATTR_RES_MRLEN])
return MNL_CB_ERROR;
@@ -48,8 +49,6 @@ static int res_mr_line(struct rd *rd, const char *name, int idx,
goto out;
if (nla_line[RDMA_NLDEV_ATTR_RES_PID]) {
- SPRINT_BUF(b);
-
pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]);
if (!get_task_name(pid, b, sizeof(b)))
comm = b;
diff --git a/rdma/res-pd.c b/rdma/res-pd.c
index 40a3f9bd..8b9f7aa6 100644
--- a/rdma/res-pd.c
+++ b/rdma/res-pd.c
@@ -16,6 +16,7 @@ static int res_pd_line(struct rd *rd, const char *name, int idx,
uint32_t pid = 0;
uint32_t pdn = 0;
uint64_t users;
+ SPRINT_BUF(b);
if (!nla_line[RDMA_NLDEV_ATTR_RES_USECNT])
return MNL_CB_ERROR;
@@ -34,8 +35,6 @@ static int res_pd_line(struct rd *rd, const char *name, int idx,
nla_line[RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY]);
if (nla_line[RDMA_NLDEV_ATTR_RES_PID]) {
- SPRINT_BUF(b);
-
pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]);
if (!get_task_name(pid, b, sizeof(b)))
comm = b;
diff --git a/rdma/res-qp.c b/rdma/res-qp.c
index 145292aa..65ff54ab 100644
--- a/rdma/res-qp.c
+++ b/rdma/res-qp.c
@@ -84,6 +84,7 @@ static int res_qp_line(struct rd *rd, const char *name, int idx,
uint32_t port = 0, pid = 0;
uint32_t pdn = 0;
char *comm = NULL;
+ SPRINT_BUF(b);
if (!nla_line[RDMA_NLDEV_ATTR_RES_LQPN] ||
!nla_line[RDMA_NLDEV_ATTR_RES_SQ_PSN] ||
@@ -144,8 +145,6 @@ static int res_qp_line(struct rd *rd, const char *name, int idx,
goto out;
if (nla_line[RDMA_NLDEV_ATTR_RES_PID]) {
- SPRINT_BUF(b);
-
pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]);
if (!get_task_name(pid, b, sizeof(b)))
comm = b;
diff --git a/rdma/res-srq.c b/rdma/res-srq.c
index 1d35900a..8ab2538a 100644
--- a/rdma/res-srq.c
+++ b/rdma/res-srq.c
@@ -183,13 +183,12 @@ static int res_srq_line(struct rd *rd, const char *name, int idx,
char qp_str[MAX_QP_STR_LEN] = {};
char *comm = NULL;
uint8_t type = 0;
+ SPRINT_BUF(b);
if (!nla_line[RDMA_NLDEV_ATTR_RES_SRQN])
return MNL_CB_ERROR;
if (nla_line[RDMA_NLDEV_ATTR_RES_PID]) {
- SPRINT_BUF(b);
-
pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]);
if (!get_task_name(pid, b, sizeof(b)))
comm = b;
diff --git a/rdma/stat.c b/rdma/stat.c
index 46ed1765..bf78f7cc 100644
--- a/rdma/stat.c
+++ b/rdma/stat.c
@@ -222,6 +222,7 @@ static int res_counter_line(struct rd *rd, const char *name, int index,
struct nlattr *hwc_table, *qp_table;
struct nlattr *nla_entry;
const char *comm = NULL;
+ SPRINT_BUF(b);
bool isfirst;
int err;
@@ -247,8 +248,6 @@ static int res_counter_line(struct rd *rd, const char *name, int index,
return MNL_CB_OK;
if (nla_line[RDMA_NLDEV_ATTR_RES_PID]) {
- SPRINT_BUF(b);
-
pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]);
if (!get_task_name(pid, b, sizeof(b)))
comm = b;
--
2.25.1

View File

@ -0,0 +1,32 @@
From cd4315de422ebeb2d9844ddc71ca5a431abc2c2f Mon Sep 17 00:00:00 2001
From: Junxian Huang <huangjunxian6@hisilicon.com>
Date: Tue, 10 Oct 2023 15:55:25 +0800
Subject: [PATCH] rdma: Update uapi headers
Update rdma_netlink.h file upto kernel commit aebf8145e11a
("RDMA/core: Add support to dump SRQ resource in RAW format")
Signed-off-by: wenglianfa <wenglianfa@huawei.com>
Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: David Ahern <dsahern@kernel.org>
---
rdma/include/uapi/rdma/rdma_netlink.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/rdma/include/uapi/rdma/rdma_netlink.h b/rdma/include/uapi/rdma/rdma_netlink.h
index 92c528a0..84f775be 100644
--- a/rdma/include/uapi/rdma/rdma_netlink.h
+++ b/rdma/include/uapi/rdma/rdma_netlink.h
@@ -299,6 +299,8 @@ enum rdma_nldev_command {
RDMA_NLDEV_CMD_STAT_GET_STATUS,
+ RDMA_NLDEV_CMD_RES_SRQ_GET_RAW,
+
RDMA_NLDEV_NUM_OPS
};
--
2.25.1

View File

@ -2,7 +2,7 @@
Name: iproute Name: iproute
Version: 6.6.0 Version: 6.6.0
Epoch: 1 Epoch: 1
Release: 1 Release: 2
Summary: Linux network configuration utilities Summary: Linux network configuration utilities
License: GPLv2+ and Public Domain License: GPLv2+ and Public Domain
URL: https://kernel.org/pub/linux/utils/net/iproute2/ URL: https://kernel.org/pub/linux/utils/net/iproute2/
@ -11,6 +11,10 @@ Source0: https://mirrors.edge.kernel.org/pub/linux/utils/net/iproute2/iproute2-%
Patch1: bugfix-iproute2-3.10.0-fix-maddr-show.patch Patch1: bugfix-iproute2-3.10.0-fix-maddr-show.patch
Patch2: bugfix-iproute2-change-proc-to-ipnetnsproc-which-is-private.patch Patch2: bugfix-iproute2-change-proc-to-ipnetnsproc-which-is-private.patch
patch6000: backport-rdma-Update-uapi-headers.patch
patch6001: backport-rdma-Add-support-to-dump-SRQ-resource-in-raw-format.patch
patch6002: backport-rdma-Fix-the-error-of-accessing-string-variable-outs.patch
Patch9000: feature-iproute-add-support-for-ipvlan-l2e-mode.patch Patch9000: feature-iproute-add-support-for-ipvlan-l2e-mode.patch
Patch9001: bugfix-iproute2-cancel-some-test-cases.patch Patch9001: bugfix-iproute2-cancel-some-test-cases.patch
@ -87,6 +91,12 @@ install -m 0644 lib/libnetlink.a %{buildroot}%{_libdir}/libnetlink.a
%{_mandir}/* %{_mandir}/*
%changelog %changelog
* Mon Feb 26 2024 Ran Zhou <zhouran10@h-partners.com> - 1:6.6.0-2
- Type:feature
- ID:NA
- SUG:NA
- DESC:Add support to dump rdma SRQ resource in raw format
* Mon Feb 5 2024 liubo <liubo335@huawei.com> - 1:6.6.0-1 * Mon Feb 5 2024 liubo <liubo335@huawei.com> - 1:6.6.0-1
- Type:bugfix - Type:bugfix
- ID:NA - ID:NA