From patchwork Wed May 20 10:25:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Leon Romanovsky X-Patchwork-Id: 11563689 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A156514B7 for ; Thu, 21 May 2020 17:59:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8A20020759 for ; Thu, 21 May 2020 17:59:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1590083969; bh=ZtsyQMfxQsQj+r7AGr7M1rrJfqwy3ngNvTeWJrAKq/8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=FkUPfkz6A25myFSJ81SibU2eeIkFcxJ4BBSebRaNpRqgO5EDtiEvvMMVYkRErTUWK mr7mc3V0tcXvCt2rfeiztas6aQX7Xzv+RShOKpzPSiEX/HBqSewQNF+Y/x3cqznZh6 KK4yUQ7gOAiGYtpGSu9TL0QkN/lMer01mhkUMZC8= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728885AbgEUR72 (ORCPT ); Thu, 21 May 2020 13:59:28 -0400 Received: from mail.kernel.org ([198.145.29.99]:59342 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727883AbgEUR72 (ORCPT ); Thu, 21 May 2020 13:59:28 -0400 Received: from localhost (unknown [213.57.247.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id C299E20759; Thu, 21 May 2020 17:59:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1590083967; bh=ZtsyQMfxQsQj+r7AGr7M1rrJfqwy3ngNvTeWJrAKq/8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RPQu72OIVIkUgEzqHlZ7ScLE6gnPbVEbZEnyd+HEGWWmBkmq6EG2v82OgxdgOt2ke JVeLXp4QdLWmZGJzCgHmJVkt+ObzErmA16oOpHIJkpEEoBFct+IIDViwQaL0hoiLQ4 99lI61Ju0cKwBKPSnbNMILmtHbVDZF3C+FnLvwjo= From: Leon Romanovsky To: David Ahern Cc: Maor Gottlieb , netdev , RDMA mailing list , Stephen Hemminger Subject: [PATCH iproute2-next 1/4] rdma: Refactor res_qp_line Date: Wed, 20 May 2020 13:25:36 +0300 Message-Id: <20200520102539.458983-2-leon@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200520102539.458983-1-leon@kernel.org> References: <20200520102539.458983-1-leon@kernel.org> MIME-Version: 1.0 Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org From: Maor Gottlieb Downstream patch adds the support to get the QP data in raw format. Move the unshared code to function. Signed-off-by: Maor Gottlieb Signed-off-by: Leon Romanovsky --- rdma/res-qp.c | 114 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 69 insertions(+), 45 deletions(-) -- 2.26.2 diff --git a/rdma/res-qp.c b/rdma/res-qp.c index 801cfca9..b36b7289 100644 --- a/rdma/res-qp.c +++ b/rdma/res-qp.c @@ -64,54 +64,53 @@ static void print_pathmig(struct rd *rd, uint32_t val, struct nlattr **nla_line) "path-mig-state %s ", path_mig_to_str(val)); } -static int res_qp_line(struct rd *rd, const char *name, int idx, - struct nlattr **nla_line) +struct res_qp_info { + uint32_t lqpn; + uint32_t port; + uint32_t pid; + char *comm; +}; + +static bool resp_is_valid(struct nlattr **nla_line) { - uint32_t lqpn, rqpn = 0, rq_psn = 0, sq_psn; - uint8_t type, state, path_mig_state = 0; - uint32_t port = 0, pid = 0; - uint32_t pdn = 0; - char *comm = NULL; - if (!nla_line[RDMA_NLDEV_ATTR_RES_LQPN] || !nla_line[RDMA_NLDEV_ATTR_RES_SQ_PSN] || !nla_line[RDMA_NLDEV_ATTR_RES_TYPE] || !nla_line[RDMA_NLDEV_ATTR_RES_STATE]) - return MNL_CB_ERROR; - - if (nla_line[RDMA_NLDEV_ATTR_PORT_INDEX]) - port = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_PORT_INDEX]); - - if (port != rd->port_idx) - goto out; + return false; + return true; +} - lqpn = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_LQPN]); - if (rd_is_filtered_attr(rd, "lqpn", lqpn, - nla_line[RDMA_NLDEV_ATTR_RES_LQPN])) - goto out; +static void res_qp_line_query(struct rd *rd, const char *name, int idx, + struct nlattr **nla_line, + struct res_qp_info *info) +{ + uint8_t type, state, path_mig_state = 0; + uint32_t rqpn = 0, rq_psn = 0, sq_psn; + uint32_t pdn = 0; if (nla_line[RDMA_NLDEV_ATTR_RES_PDN]) pdn = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PDN]); if (rd_is_filtered_attr(rd, "pdn", pdn, nla_line[RDMA_NLDEV_ATTR_RES_PDN])) - goto out; + return; if (nla_line[RDMA_NLDEV_ATTR_RES_RQPN]) rqpn = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_RQPN]); if (rd_is_filtered_attr(rd, "rqpn", rqpn, nla_line[RDMA_NLDEV_ATTR_RES_RQPN])) - goto out; + return; if (nla_line[RDMA_NLDEV_ATTR_RES_RQ_PSN]) rq_psn = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_RQ_PSN]); if (rd_is_filtered_attr(rd, "rq-psn", rq_psn, nla_line[RDMA_NLDEV_ATTR_RES_RQ_PSN])) - goto out; + return; sq_psn = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_SQ_PSN]); if (rd_is_filtered_attr(rd, "sq-psn", sq_psn, nla_line[RDMA_NLDEV_ATTR_RES_SQ_PSN])) - goto out; + return; if (nla_line[RDMA_NLDEV_ATTR_RES_PATH_MIG_STATE]) path_mig_state = mnl_attr_get_u8( @@ -119,35 +118,22 @@ static int res_qp_line(struct rd *rd, const char *name, int idx, if (rd_is_string_filtered_attr( rd, "path-mig-state", path_mig_to_str(path_mig_state), nla_line[RDMA_NLDEV_ATTR_RES_PATH_MIG_STATE])) - goto out; + return; 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])) - goto out; + return; state = mnl_attr_get_u8(nla_line[RDMA_NLDEV_ATTR_RES_STATE]); if (rd_is_string_filtered_attr(rd, "state", qp_states_to_str(state), nla_line[RDMA_NLDEV_ATTR_RES_STATE])) - goto out; - - if (nla_line[RDMA_NLDEV_ATTR_RES_PID]) { - pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]); - comm = get_task_name(pid); - } - - if (rd_is_filtered_attr(rd, "pid", pid, - nla_line[RDMA_NLDEV_ATTR_RES_PID])) - goto out; - - if (nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]) - /* discard const from mnl_attr_get_str */ - comm = (char *)mnl_attr_get_str( - nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]); + return; open_json_object(NULL); - print_link(rd, idx, name, port, nla_line); - res_print_uint(rd, "lqpn", lqpn, nla_line[RDMA_NLDEV_ATTR_RES_LQPN]); + print_link(rd, idx, name, info->port, nla_line); + res_print_uint(rd, "lqpn", info->lqpn, + nla_line[RDMA_NLDEV_ATTR_RES_LQPN]); print_rqpn(rd, rqpn, nla_line); print_type(rd, type); @@ -159,14 +145,52 @@ static int res_qp_line(struct rd *rd, const char *name, int idx, print_pathmig(rd, path_mig_state, nla_line); res_print_uint(rd, "pdn", pdn, nla_line[RDMA_NLDEV_ATTR_RES_PDN]); - res_print_uint(rd, "pid", pid, nla_line[RDMA_NLDEV_ATTR_RES_PID]); - print_comm(rd, comm, nla_line); + res_print_uint(rd, "pid", info->pid, nla_line[RDMA_NLDEV_ATTR_RES_PID]); + print_comm(rd, info->comm, nla_line); print_driver_table(rd, nla_line[RDMA_NLDEV_ATTR_DRIVER]); newline(rd); +} + +static int res_qp_line(struct rd *rd, const char *name, int idx, + struct nlattr **nla_line) +{ + struct res_qp_info info = {}; + + if (!resp_is_valid(nla_line)) + return MNL_CB_ERROR; + + if (nla_line[RDMA_NLDEV_ATTR_PORT_INDEX]) + info.port = + mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_PORT_INDEX]); + + if (info.port != rd->port_idx) + goto out; + + info.lqpn = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_LQPN]); + if (rd_is_filtered_attr(rd, "lqpn", info.lqpn, + nla_line[RDMA_NLDEV_ATTR_RES_LQPN])) + goto out; + + if (nla_line[RDMA_NLDEV_ATTR_RES_PID]) { + info.pid = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_PID]); + info.comm = get_task_name(info.pid); + } + + if (rd_is_filtered_attr(rd, "pid", info.pid, + nla_line[RDMA_NLDEV_ATTR_RES_PID])) + goto out; + + if (nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]) { + struct nlattr *line = nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]; + /* discard const from mnl_attr_get_str */ + info.comm = (char *)mnl_attr_get_str(line); + } + + res_qp_line_query(rd, name, idx, nla_line, &info); out: if (nla_line[RDMA_NLDEV_ATTR_RES_PID]) - free(comm); + free(info.comm); return MNL_CB_OK; } From patchwork Wed May 20 10:25:37 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Leon Romanovsky X-Patchwork-Id: 11563695 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id DEB8A14B7 for ; Thu, 21 May 2020 17:59:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C2B6A207FB for ; Thu, 21 May 2020 17:59:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1590083980; bh=Xzcvdz3FlpLT9Nzn5Hqst0gx8lZ3MqeNZ8pXGB0b1VY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=kHQd0MJca3ypBHLZFvpNBODEpmGxFyDDiLpVo68pnWk/DKeqkynM2aT5dl3sNKhir KsmWSpgaUyd3xENKDKo6IpqvV7c9+srYGv9KkkxtM/fLN8jx5ovFY88dZqyz4rrJKA O+xCaktbZbWp05IKYGbapw0/83fLasRgKm7/W0Fc= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729067AbgEUR7k (ORCPT ); Thu, 21 May 2020 13:59:40 -0400 Received: from mail.kernel.org ([198.145.29.99]:59530 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727883AbgEUR7j (ORCPT ); Thu, 21 May 2020 13:59:39 -0400 Received: from localhost (unknown [213.57.247.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 4825C20759; Thu, 21 May 2020 17:59:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1590083979; bh=Xzcvdz3FlpLT9Nzn5Hqst0gx8lZ3MqeNZ8pXGB0b1VY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PQIxPAeXq6Nw7MWyWR8exN7IOzaLtEXLehsVACfkmWtpG3qXuqEYEabwtt5Yh4kVR yJ3Y10mnNrt15UbpFMcXhzbz0+00bfOadhlNNteZdA7gyHKuKwiuoBDyqCYzq6Aef8 PpeSc4JdezvXcN0e04gY3z/ABPLst6gOJsLo3+hw= From: Leon Romanovsky To: David Ahern Cc: Maor Gottlieb , netdev , RDMA mailing list , Stephen Hemminger Subject: [PATCH iproute2-next 2/4] rdma: Add support to get QP in raw format Date: Wed, 20 May 2020 13:25:37 +0300 Message-Id: <20200520102539.458983-3-leon@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200520102539.458983-1-leon@kernel.org> References: <20200520102539.458983-1-leon@kernel.org> MIME-Version: 1.0 Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org From: Maor Gottlieb Add 'raw' argument to get the resource in raw format. When RDMA_NLDEV_ATTR_RES_RAW is set in the netlink message, then the resource fields are in raw format, print it as byte array. Example: $rdma res show qp link rocep0s12f0/1 lqpn 1137 -j -r [{"ifindex":7,"ifname":"mlx5_1","port":1,"lqpn":265,"pid":24336 "comm":"ibv_rc_pingpong","data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...]}] Signed-off-by: Maor Gottlieb Signed-off-by: Leon Romanovsky --- man/man8/rdma-resource.8 | 5 +++++ man/man8/rdma.8 | 4 ++++ rdma/rdma.c | 8 +++++++- rdma/rdma.h | 7 +++++-- rdma/res-qp.c | 37 ++++++++++++++++++++++++++++++++----- rdma/res.c | 1 + rdma/utils.c | 20 ++++++++++++++++++++ 7 files changed, 74 insertions(+), 8 deletions(-) -- 2.26.2 diff --git a/man/man8/rdma-resource.8 b/man/man8/rdma-resource.8 index 05030d0a..8d0d14c6 100644 --- a/man/man8/rdma-resource.8 +++ b/man/man8/rdma-resource.8 @@ -83,6 +83,11 @@ rdma res show qp link mlx5_4/1 lqpn 0-6 Limit to specific Local QPNs. .RE .PP +rdma res show qp link mlx5_4/1 lqpn 6 -r +.RS 4 +Driver specific details in raw format. +.RE +.PP rdma resource show cm_id dst-port 7174 .RS 4 Show CM_IDs with destination ip port of 7174. diff --git a/man/man8/rdma.8 b/man/man8/rdma.8 index 221bf334..c9e5d50d 100644 --- a/man/man8/rdma.8 +++ b/man/man8/rdma.8 @@ -51,6 +51,10 @@ If there were any errors during execution of the commands, the application retur .BR "\-d" , " --details" Output detailed information. Adding a second \-d includes driver-specific details. +.TP +.BR "\-r" , " --raw" +Output includes driver-specific details in raw format. + .TP .BR "\-p" , " --pretty" When combined with -j generate a pretty JSON output. diff --git a/rdma/rdma.c b/rdma/rdma.c index 22050555..19fadeb5 100644 --- a/rdma/rdma.c +++ b/rdma/rdma.c @@ -112,6 +112,7 @@ int main(int argc, char **argv) { "json", no_argument, NULL, 'j' }, { "pretty", no_argument, NULL, 'p' }, { "details", no_argument, NULL, 'd' }, + { "raw", no_argument, NULL, 'r' }, { "force", no_argument, NULL, 'f' }, { "batch", required_argument, NULL, 'b' }, { NULL, 0, NULL, 0 } @@ -120,6 +121,7 @@ int main(int argc, char **argv) const char *batch_file = NULL; bool show_details = false; bool json_output = false; + bool show_raw = false; bool force = false; struct rd rd = {}; char *filename; @@ -127,7 +129,7 @@ int main(int argc, char **argv) int err; filename = basename(argv[0]); - while ((opt = getopt_long(argc, argv, ":Vhdpjfb:", + while ((opt = getopt_long(argc, argv, ":Vhdrpjfb:", long_options, NULL)) >= 0) { switch (opt) { case 'V': @@ -143,6 +145,9 @@ int main(int argc, char **argv) else show_details = true; break; + case 'r': + show_raw = true; + break; case 'j': json_output = 1; break; @@ -172,6 +177,7 @@ int main(int argc, char **argv) rd.show_driver_details = show_driver_details; rd.json_output = json_output; rd.pretty_output = pretty; + rd.show_raw = show_raw; err = rd_init(&rd, filename); if (err) diff --git a/rdma/rdma.h b/rdma/rdma.h index 735b1bf7..a6c6bdea 100644 --- a/rdma/rdma.h +++ b/rdma/rdma.h @@ -57,8 +57,9 @@ struct rd { int argc; char **argv; char *filename; - bool show_details; - bool show_driver_details; + uint8_t show_details:1; + uint8_t show_driver_details:1; + uint8_t show_raw:1; struct list_head dev_map_list; uint32_t dev_idx; uint32_t port_idx; @@ -134,9 +135,11 @@ int rd_attr_check(const struct nlattr *attr, int *typep); * Print helpers */ void print_driver_table(struct rd *rd, struct nlattr *tb); +void print_raw_data(struct rd *rd, struct nlattr **nla_line); void newline(struct rd *rd); void newline_indent(struct rd *rd); void print_on_off(struct rd *rd, const char *key_str, bool on); +void print_raw_data(struct rd *rd, struct nlattr **nla_line); #define MAX_LINE_LENGTH 80 #endif /* _RDMA_TOOL_H_ */ diff --git a/rdma/res-qp.c b/rdma/res-qp.c index b36b7289..f5e36439 100644 --- a/rdma/res-qp.c +++ b/rdma/res-qp.c @@ -71,16 +71,38 @@ struct res_qp_info { char *comm; }; -static bool resp_is_valid(struct nlattr **nla_line) +static bool resp_is_valid(struct nlattr **nla_line, bool raw) { - if (!nla_line[RDMA_NLDEV_ATTR_RES_LQPN] || - !nla_line[RDMA_NLDEV_ATTR_RES_SQ_PSN] || + if (!nla_line[RDMA_NLDEV_ATTR_RES_LQPN]) + return false; + + if (raw) + return nla_line[RDMA_NLDEV_ATTR_RES_RAW] ? true : false; + + if (!nla_line[RDMA_NLDEV_ATTR_RES_SQ_PSN] || !nla_line[RDMA_NLDEV_ATTR_RES_TYPE] || !nla_line[RDMA_NLDEV_ATTR_RES_STATE]) return false; + return true; } +static void res_qp_line_raw(struct rd *rd, const char *name, int idx, + struct nlattr **nla_line, + struct res_qp_info *info) +{ + open_json_object(NULL); + print_link(rd, idx, name, info->port, nla_line); + res_print_uint(rd, "lqpn", info->lqpn, + nla_line[RDMA_NLDEV_ATTR_RES_LQPN]); + + res_print_uint(rd, "pid", info->pid, nla_line[RDMA_NLDEV_ATTR_RES_PID]); + print_comm(rd, info->comm, nla_line); + + print_raw_data(rd, nla_line); + newline(rd); +} + static void res_qp_line_query(struct rd *rd, const char *name, int idx, struct nlattr **nla_line, struct res_qp_info *info) @@ -156,8 +178,9 @@ static int res_qp_line(struct rd *rd, const char *name, int idx, struct nlattr **nla_line) { struct res_qp_info info = {}; + bool raw = rd->show_raw; - if (!resp_is_valid(nla_line)) + if (!resp_is_valid(nla_line, raw)) return MNL_CB_ERROR; if (nla_line[RDMA_NLDEV_ATTR_PORT_INDEX]) @@ -187,7 +210,11 @@ static int res_qp_line(struct rd *rd, const char *name, int idx, info.comm = (char *)mnl_attr_get_str(line); } - res_qp_line_query(rd, name, idx, nla_line, &info); + if (raw) + res_qp_line_raw(rd, name, idx, nla_line, &info); + else + res_qp_line_query(rd, name, idx, nla_line, &info); + out: if (nla_line[RDMA_NLDEV_ATTR_RES_PID]) free(info.comm); diff --git a/rdma/res.c b/rdma/res.c index 251f5041..759a1151 100644 --- a/rdma/res.c +++ b/rdma/res.c @@ -97,6 +97,7 @@ int _res_send_idx_msg(struct rd *rd, uint32_t command, mnl_cb_t callback, mnl_attr_put_u32(rd->nlh, id, idx); + mnl_attr_put_u8(rd->nlh, RDMA_NLDEV_ATTR_RES_RAW, rd->show_raw); if (command == RDMA_NLDEV_CMD_STAT_GET) mnl_attr_put_u32(rd->nlh, RDMA_NLDEV_ATTR_STAT_RES, RDMA_NLDEV_ATTR_RES_MR); diff --git a/rdma/utils.c b/rdma/utils.c index e25c3adf..4d3de4fa 100644 --- a/rdma/utils.c +++ b/rdma/utils.c @@ -450,6 +450,7 @@ static const enum mnl_attr_data_type nldev_policy[RDMA_NLDEV_ATTR_MAX] = { [RDMA_NLDEV_ATTR_STAT_RES] = MNL_TYPE_U32, [RDMA_NLDEV_ATTR_STAT_AUTO_MODE_MASK] = MNL_TYPE_U32, [RDMA_NLDEV_ATTR_DEV_DIM] = MNL_TYPE_U8, + [RDMA_NLDEV_ATTR_RES_RAW] = MNL_TYPE_BINARY, }; int rd_attr_check(const struct nlattr *attr, int *typep) @@ -890,6 +891,25 @@ static int print_driver_entry(struct rd *rd, struct nlattr *key_attr, return ret; } +void print_raw_data(struct rd *rd, struct nlattr **nla_line) +{ + uint8_t *data; + uint32_t len; + int i = 0; + + if (!rd->show_raw) + return; + + len = mnl_attr_get_payload_len(nla_line[RDMA_NLDEV_ATTR_RES_RAW]); + data = mnl_attr_get_payload(nla_line[RDMA_NLDEV_ATTR_RES_RAW]); + open_json_array(PRINT_JSON, "data"); + while (i < len) { + print_color_uint(PRINT_ANY, COLOR_NONE, NULL, "%d", data[i]); + i++; + } + close_json_array(PRINT_ANY, ">"); +} + void print_driver_table(struct rd *rd, struct nlattr *tb) { int print_type = RDMA_NLDEV_PRINT_TYPE_UNSPEC; From patchwork Wed May 20 10:25:38 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Leon Romanovsky X-Patchwork-Id: 11563691 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AC638912 for ; Thu, 21 May 2020 17:59:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 88F3F207D3 for ; Thu, 21 May 2020 17:59:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1590083972; bh=ppWRC1MoP9Ysl2ET1eT42HKlmv/NF5x/YfKiCPwpBsM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=MrBMMkjS0UDbjcIWt23+yovAqtUQB5bwa/aa51N00ww1dJEyV97ooJqkH4m+EDi9u CMDw5oYniuHCZc4dRXpjFDpgiqBqRmPSsacAPM+DPryVHLJ75Sh63pXhtyW4zTJEC+ cvQrjmsFg9vaGIsGbYumrokPNPGHaKN8SRHK7fB4= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729045AbgEUR7b (ORCPT ); Thu, 21 May 2020 13:59:31 -0400 Received: from mail.kernel.org ([198.145.29.99]:59410 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727883AbgEUR7b (ORCPT ); Thu, 21 May 2020 13:59:31 -0400 Received: from localhost (unknown [213.57.247.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 94A3120759; Thu, 21 May 2020 17:59:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1590083971; bh=ppWRC1MoP9Ysl2ET1eT42HKlmv/NF5x/YfKiCPwpBsM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tU0fa9I1naMMgPclZH8owCKrQ+uNo4WrJoPPzddMylD+R3/sRcPa9TtuaDSLBFjCM j8rN9W0699Ku15jLomzHuBG497g926v5pfcS7D/1jkSpT5FROaoZg6WzOJzJJBGG86 uK0S6aKJ3PBfGYHNJQvAPghNNWHArEjYBVlSOLDM= From: Leon Romanovsky To: David Ahern Cc: Maor Gottlieb , netdev , RDMA mailing list , Stephen Hemminger Subject: [PATCH iproute2-next 3/4] rdma: Add support to get CQ in raw format Date: Wed, 20 May 2020 13:25:38 +0300 Message-Id: <20200520102539.458983-4-leon@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200520102539.458983-1-leon@kernel.org> References: <20200520102539.458983-1-leon@kernel.org> MIME-Version: 1.0 Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org From: Maor Gottlieb Add the required support to print CQ data in raw format. Example: $rdma res show cq dev mlx5_2 cqn 1 -r -j [{"ifindex":8,"ifname":"mlx5_2","cqn":1,"cqe":1023,"users":4, "poll-ctx":"UNBOUND_WORKQUEUE","adaptive-moderation":"on", "comm":"ib_core", "data":[0,4,255,254,0,0,0,0,0,0,0,0,16,28,...]}] Signed-off-by: Maor Gottlieb Signed-off-by: Leon Romanovsky --- rdma/res-cq.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) -- 2.26.2 diff --git a/rdma/res-cq.c b/rdma/res-cq.c index e1efe3ba..d34b5245 100644 --- a/rdma/res-cq.c +++ b/rdma/res-cq.c @@ -39,9 +39,21 @@ static void print_cq_dim_setting(struct rd *rd, struct nlattr *attr) print_on_off(rd, "adaptive-moderation", dim_setting); } +static bool resp_is_valid(struct nlattr **nla_line, bool raw) +{ + if (raw) + return nla_line[RDMA_NLDEV_ATTR_RES_RAW] ? true : false; + + if (!nla_line[RDMA_NLDEV_ATTR_RES_CQE] || + !nla_line[RDMA_NLDEV_ATTR_RES_USECNT]) + return false; + return true; +} + static int res_cq_line(struct rd *rd, const char *name, int idx, struct nlattr **nla_line) { + bool raw = rd->show_raw; char *comm = NULL; uint32_t pid = 0; uint8_t poll_ctx = 0; @@ -50,8 +62,7 @@ static int res_cq_line(struct rd *rd, const char *name, int idx, uint64_t users; uint32_t cqe; - if (!nla_line[RDMA_NLDEV_ATTR_RES_CQE] || - !nla_line[RDMA_NLDEV_ATTR_RES_USECNT]) + if (!resp_is_valid(nla_line, raw)) return MNL_CB_ERROR; cqe = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_CQE]); @@ -107,6 +118,7 @@ static int res_cq_line(struct rd *rd, const char *name, int idx, print_comm(rd, comm, nla_line); print_driver_table(rd, nla_line[RDMA_NLDEV_ATTR_DRIVER]); + print_raw_data(rd, nla_line); newline(rd); out: if (nla_line[RDMA_NLDEV_ATTR_RES_PID]) From patchwork Wed May 20 10:25:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Leon Romanovsky X-Patchwork-Id: 11563693 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 42CA6912 for ; Thu, 21 May 2020 17:59:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2B764207D3 for ; Thu, 21 May 2020 17:59:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1590083978; bh=Ch0yiFmzDb9EKSkeM6eI9ZKlxMrabp38Wq/XMA+m5us=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=mC5m6CQ8Ofn5YpIY9ET15lEV64gHoCJlLu2ZUpCwX9HyUPHaWZ/wLEpGAdXb8Wto6 egvpm8yXmESIOWtqeDfkQrVkYlgJ/07yr2Ub7W32B+Ft499pd/MGeLxT+w54cNAHBt eDu20LHp5XeH4muEIkxQy3iyL7A2cIUV1o0G8NT4= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729380AbgEUR7f (ORCPT ); Thu, 21 May 2020 13:59:35 -0400 Received: from mail.kernel.org ([198.145.29.99]:59468 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727883AbgEUR7f (ORCPT ); Thu, 21 May 2020 13:59:35 -0400 Received: from localhost (unknown [213.57.247.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 7964C20759; Thu, 21 May 2020 17:59:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1590083975; bh=Ch0yiFmzDb9EKSkeM6eI9ZKlxMrabp38Wq/XMA+m5us=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WtHjzCTCi6mOX8dhw1HOqDzPIJmHXvQ5uc6mZRQF+gigisrbcJuPbrGqTtFuaG2lW TVFmwrg9tE6d+xkilWMFo0jVDTs2qUbxwq0erDOVFdzrzu4uaSgZzgTLzndCGuMV+2 yIsf7yO2sIDFYwhsvrqbns9fr7P4EApZBA9MPCzg= From: Leon Romanovsky To: David Ahern Cc: Maor Gottlieb , netdev , RDMA mailing list , Stephen Hemminger Subject: [PATCH iproute2-next 4/4] rdma: Add support to get MR in raw format Date: Wed, 20 May 2020 13:25:39 +0300 Message-Id: <20200520102539.458983-5-leon@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200520102539.458983-1-leon@kernel.org> References: <20200520102539.458983-1-leon@kernel.org> MIME-Version: 1.0 Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org From: Maor Gottlieb Add the required support to print MR data in raw format. Example: $rdma res show mr dev mlx5_1 mrn 2 -r -j [{"ifindex":7,"ifname":"mlx5_1","mrn":2,"mrlen":4096,"pdn":5, pid":24336, "comm":"ibv_rc_pingpong","data":[0,4,255,254,0,0,0,0,0,0,0,0,16,28,0,216,...]}] Signed-off-by: Maor Gottlieb Signed-off-by: Leon Romanovsky --- rdma/res-mr.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) -- 2.26.2 diff --git a/rdma/res-mr.c b/rdma/res-mr.c index c1366035..b6e0a6a9 100644 --- a/rdma/res-mr.c +++ b/rdma/res-mr.c @@ -7,17 +7,27 @@ #include "res.h" #include +static bool resp_is_valid(struct nlattr **nla_line, bool raw) +{ + if (raw) + return nla_line[RDMA_NLDEV_ATTR_RES_RAW] ? true : false; + if (!nla_line[RDMA_NLDEV_ATTR_RES_MRLEN]) + return MNL_CB_ERROR; + return true; +} + static int res_mr_line(struct rd *rd, const char *name, int idx, struct nlattr **nla_line) { uint32_t rkey = 0, lkey = 0; uint64_t iova = 0, mrlen; + bool raw = rd->show_raw; char *comm = NULL; uint32_t pdn = 0; uint32_t mrn = 0; uint32_t pid = 0; - if (!nla_line[RDMA_NLDEV_ATTR_RES_MRLEN]) + if (!resp_is_valid(nla_line, raw)) return MNL_CB_ERROR; if (nla_line[RDMA_NLDEV_ATTR_RES_RKEY]) @@ -69,6 +79,7 @@ static int res_mr_line(struct rd *rd, const char *name, int idx, print_comm(rd, comm, nla_line); print_driver_table(rd, nla_line[RDMA_NLDEV_ATTR_DRIVER]); + print_raw_data(rd, nla_line); newline(rd); out: