diff --git a/backport-rdma-Add-support-to-dump-SRQ-resource-in-raw-format.patch b/backport-rdma-Add-support-to-dump-SRQ-resource-in-raw-format.patch new file mode 100644 index 0000000..6367810 --- /dev/null +++ b/backport-rdma-Add-support-to-dump-SRQ-resource-in-raw-format.patch @@ -0,0 +1,86 @@ +From 07bfa4482d49cc87a7b7c810c99397b9e8f794f6 Mon Sep 17 00:00:00 2001 +From: wenglianfa +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 +Reviewed-by: Leon Romanovsky +Signed-off-by: David Ahern +--- + 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 + diff --git a/backport-rdma-Fix-the-error-of-accessing-string-variable-outs.patch b/backport-rdma-Fix-the-error-of-accessing-string-variable-outs.patch new file mode 100644 index 0000000..8039390 --- /dev/null +++ b/backport-rdma-Fix-the-error-of-accessing-string-variable-outs.patch @@ -0,0 +1,204 @@ +From 3a882b6b4e0ee8c7cfd11176d36a98d30fc449d3 Mon Sep 17 00:00:00 2001 +From: wenglianfa +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 +Signed-off-by: Junxian Huang +Reviewed-by: Petr Machata +Acked-by: Andrea Claudi +Signed-off-by: Stephen Hemminger +--- + 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 + diff --git a/backport-rdma-Update-uapi-headers.patch b/backport-rdma-Update-uapi-headers.patch new file mode 100644 index 0000000..831d9f4 --- /dev/null +++ b/backport-rdma-Update-uapi-headers.patch @@ -0,0 +1,32 @@ +From cd4315de422ebeb2d9844ddc71ca5a431abc2c2f Mon Sep 17 00:00:00 2001 +From: Junxian Huang +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 +Signed-off-by: Junxian Huang +Reviewed-by: Leon Romanovsky +Signed-off-by: David Ahern +--- + 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 + diff --git a/iproute.spec b/iproute.spec index 402a164..6ae2f22 100644 --- a/iproute.spec +++ b/iproute.spec @@ -2,7 +2,7 @@ Name: iproute Version: 6.6.0 Epoch: 1 -Release: 1 +Release: 2 Summary: Linux network configuration utilities License: GPLv2+ and Public Domain 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 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 Patch9001: bugfix-iproute2-cancel-some-test-cases.patch @@ -87,6 +91,12 @@ install -m 0644 lib/libnetlink.a %{buildroot}%{_libdir}/libnetlink.a %{_mandir}/* %changelog +* Mon Feb 26 2024 Ran Zhou - 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 - 1:6.6.0-1 - Type:bugfix - ID:NA