From: Leon Romanovsky <leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
To: Stephen Hemminger
<stephen-OTpzqLSitTUnbdJkjeBofR2eb7JE58TQ@public.gmane.org>
Cc: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
Ariel Almog <ariela-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
Dennis Dalessandro
<dennis.dalessandro-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
Jason Gunthorpe
<jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>,
Linux RDMA <linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Linux Netdev <netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: [PATCH iproute2 V1 3/6] rdma: Add device capability parsing
Date: Tue, 27 Jun 2017 17:39:17 +0300 [thread overview]
Message-ID: <20170627143920.28020-4-leon@kernel.org> (raw)
In-Reply-To: <20170627143920.28020-1-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
From: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Add parsing interface for the device capability flags
$ rdma dev show
1: mlx5_0:
caps: <BAD_PKEY_CNTR, BAD_QKEY_CNTR, CHANGE_PHY_PORT, PORT_ACTIVE_EVENT, SYS_IMAGE_GUID, RC_RNR_NAK_GEN, MEM_WINDOW, UD_IP_CSUM, UD_TSO, XRC, MEM_MGT_EXTENSIONS, BLOCK_MULTICAST_LOOPBACK, MEM_WINDOW_TYPE_2B, RAW_IP_CSUM, SIGNATURE_HANDOVER, VIRTUAL_FUNCTION>
2: mlx5_1:
caps: <BAD_PKEY_CNTR, BAD_QKEY_CNTR, CHANGE_PHY_PORT, PORT_ACTIVE_EVENT, SYS_IMAGE_GUID, RC_RNR_NAK_GEN, MEM_WINDOW, UD_IP_CSUM, UD_TSO, XRC, MEM_MGT_EXTENSIONS, BLOCK_MULTICAST_LOOPBACK, MEM_WINDOW_TYPE_2B, RAW_IP_CSUM, SIGNATURE_HANDOVER, VIRTUAL_FUNCTION>
3: mlx5_2:
caps: <BAD_PKEY_CNTR, BAD_QKEY_CNTR, CHANGE_PHY_PORT, PORT_ACTIVE_EVENT, SYS_IMAGE_GUID, RC_RNR_NAK_GEN, MEM_WINDOW, UD_IP_CSUM, UD_TSO, XRC, MEM_MGT_EXTENSIONS, BLOCK_MULTICAST_LOOPBACK, MEM_WINDOW_TYPE_2B, RAW_IP_CSUM, SIGNATURE_HANDOVER, VIRTUAL_FUNCTION>
4: mlx5_3:
caps: <BAD_PKEY_CNTR, BAD_QKEY_CNTR, CHANGE_PHY_PORT, PORT_ACTIVE_EVENT, SYS_IMAGE_GUID, RC_RNR_NAK_GEN, MEM_WINDOW, UD_IP_CSUM, UD_TSO, XRC, MEM_MGT_EXTENSIONS, BLOCK_MULTICAST_LOOPBACK, MEM_WINDOW_TYPE_2B, RAW_IP_CSUM, SIGNATURE_HANDOVER, VIRTUAL_FUNCTION>
5: mlx5_4:
caps: <BAD_PKEY_CNTR, BAD_QKEY_CNTR, CHANGE_PHY_PORT, PORT_ACTIVE_EVENT, SYS_IMAGE_GUID, RC_RNR_NAK_GEN, MEM_WINDOW, UD_IP_CSUM, UD_TSO, XRC, MEM_MGT_EXTENSIONS, BLOCK_MULTICAST_LOOPBACK, MEM_WINDOW_TYPE_2B, RAW_IP_CSUM, SIGNATURE_HANDOVER, VIRTUAL_FUNCTION>
root@mtr-leonro:~#
$ rdma dev show mlx5_4
5: mlx5_4:
caps: <BAD_PKEY_CNTR, BAD_QKEY_CNTR, CHANGE_PHY_PORT, PORT_ACTIVE_EVENT, SYS_IMAGE_GUID, RC_RNR_NAK_GEN, MEM_WINDOW, UD_IP_CSUM, UD_TSO, XRC, MEM_MGT_EXTENSIONS, BLOCK_MULTICAST_LOOPBACK, MEM_WINDOW_TYPE_2B, RAW_IP_CSUM, SIGNATURE_HANDOVER, VIRTUAL_FUNCTION>
Signed-off-by: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
---
rdma/dev.c | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
rdma/rdma.h | 3 ++
rdma/utils.c | 2 +-
3 files changed, 95 insertions(+), 9 deletions(-)
diff --git a/rdma/dev.c b/rdma/dev.c
index d4809d63..76f4af88 100644
--- a/rdma/dev.c
+++ b/rdma/dev.c
@@ -17,28 +17,111 @@ static int dev_help(struct rdma *rd)
return 0;
}
-static void dev_one_show(const struct dev_map *dev_map)
+static const char *dev_caps[64] = {
+ "RESIZE_MAX_WR",
+ "BAD_PKEY_CNTR",
+ "BAD_QKEY_CNTR",
+ "RAW_MULTI",
+ "AUTO_PATH_MIG",
+ "CHANGE_PHY_PORT",
+ "UD_AV_PORT_ENFORCE",
+ "CURR_QP_STATE_MOD",
+ "SHUTDOWN_PORT",
+ "INIT_TYPE",
+ "PORT_ACTIVE_EVENT",
+ "SYS_IMAGE_GUID",
+ "RC_RNR_NAK_GEN",
+ "SRQ_RESIZE",
+ "N_NOTIFY_CQ",
+ "LOCAL_DMA_LKEY",
+ "RESERVED",
+ "MEM_WINDOW",
+ "UD_IP_CSUM",
+ "UD_TSO",
+ "XRC",
+ "MEM_MGT_EXTENSIONS",
+ "BLOCK_MULTICAST_LOOPBACK",
+ "MEM_WINDOW_TYPE_2A",
+ "MEM_WINDOW_TYPE_2B",
+ "RC_IP_CSUM",
+ "RAW_IP_CSUM",
+ "CROSS_CHANNEL",
+ "MANAGED_FLOW_STEERING",
+ "SIGNATURE_HANDOVER",
+ "ON_DEMAND_PAGING",
+ "SG_GAPS_REG",
+ "VIRTUAL_FUNCTION",
+ "RAW_SCATTER_FCS",
+ "RDMA_NETDEV_OPA_VNIC",
+};
+
+static int dev_print_caps(struct rdma *rd)
{
- pr_out("%u: %s:\n", dev_map->idx, dev_map->dev_name);
+ struct dev_map *dev_map = rd->dev_map_curr;
+ uint64_t caps = dev_map->caps;
+ bool found = false;
+ uint32_t idx;
+
+ pr_out(" caps: <");
+ for (idx = 0; idx < 64; idx++) {
+ if (caps & 0x1) {
+ pr_out("%s", dev_caps[idx]?dev_caps[idx]:"UNKNONW");
+ if (caps >> 0x1)
+ pr_out(", ");
+ found = true;
+ }
+ caps >>= 0x1;
+ }
+ if(!found)
+ pr_out("NONE");
+
+ pr_out(">\n");
+ return 0;
+}
+
+static int dev_no_args(struct rdma *rd)
+{
+ struct dev_map *dev_map = rd->dev_map_curr;
+
+ pr_out("%u: %s: \n", dev_map->idx, dev_map->dev_name);
+ return dev_print_caps(rd);
+}
+
+static int dev_one_show(struct rdma *rd)
+{
+ const struct rdma_cmd cmds[] = {
+ { NULL, dev_no_args},
+ { 0 }
+ };
+
+ return rdma_exec_cmd(rd, cmds, "parameter");
+
}
static int dev_show(struct rdma *rd)
{
struct dev_map *dev_map;
+ int ret = 0;
if (rd_no_arg(rd)) {
- list_for_each_entry(dev_map, &rd->dev_map_list, list)
- dev_one_show(dev_map);
+ list_for_each_entry(dev_map, &rd->dev_map_list, list) {
+ rd->dev_map_curr = dev_map;
+ ret = dev_one_show(rd);
+ if (ret)
+ return ret;
+ }
+
}
else {
- dev_map = dev_map_lookup(rd, false);
- if (!dev_map) {
+ rd->dev_map_curr = dev_map_lookup(rd, false);
+ if (!rd->dev_map_curr) {
pr_err("Wrong device name\n");
return -ENOENT;
}
- dev_one_show(dev_map);
+ rd_arg_inc(rd);
+ ret = dev_one_show(rd);
}
- return 0;
+ return ret;
}
int cmd_dev(struct rdma *rd)
diff --git a/rdma/rdma.h b/rdma/rdma.h
index f5e104ec..8cca0f28 100644
--- a/rdma/rdma.h
+++ b/rdma/rdma.h
@@ -34,6 +34,7 @@ struct dev_map {
uint32_t num_ports;
struct list_head port_map_list;
uint32_t idx;
+ uint64_t caps;
};
struct rdma {
@@ -41,6 +42,7 @@ struct rdma {
char **argv;
char *filename;
struct list_head dev_map_list;
+ struct dev_map *dev_map_curr;
struct mnl_socket *nl;
struct nlmsghdr *nlh;
char *buff;
@@ -57,6 +59,7 @@ struct rdma_cmd {
bool rd_no_arg(struct rdma *rd);
bool rd_argv_match(struct rdma *rd, const char *pattern);
void rd_arg_inc(struct rdma *rd);
+char *rd_argv(struct rdma *rd);
/*
* Commands interface
diff --git a/rdma/utils.c b/rdma/utils.c
index 4d29eced..94737c5c 100644
--- a/rdma/utils.c
+++ b/rdma/utils.c
@@ -28,7 +28,7 @@ static int rd_argc(struct rdma *rd)
return rd->argc;
}
-static char *rd_argv(struct rdma *rd)
+char *rd_argv(struct rdma *rd)
{
if (!rd_argc(rd))
return NULL;
--
2.13.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2017-06-27 14:39 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-27 14:39 [PATCH iproute2 V1 0/5] RDMAtool Leon Romanovsky
2017-06-27 14:39 ` [PATCH iproute2 V1 1/6] rdma: Add basic infrastructure for RDMA tool Leon Romanovsky
2017-06-27 14:39 ` [PATCH iproute2 V1 2/6] rdma: Add dev object Leon Romanovsky
2017-06-27 14:39 ` [PATCH iproute2 V1 4/6] rdma: Add link option and parsing Leon Romanovsky
[not found] ` <20170627143920.28020-1-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-06-27 14:39 ` Leon Romanovsky [this message]
[not found] ` <20170627143920.28020-4-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-06-27 23:04 ` [PATCH iproute2 V1 3/6] rdma: Add device capability parsing Stephen Hemminger
2017-06-28 4:16 ` Leon Romanovsky
2017-06-27 14:39 ` [PATCH iproute2 V1 5/6] rdma: Add FW version to the device output Leon Romanovsky
2017-06-27 14:39 ` [PATCH iproute2 V1 6/6] rdma: Add initial manual for the tool Leon Romanovsky
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=20170627143920.28020-4-leon@kernel.org \
--to=leon-dgejt+ai2ygdnm+yrofe0a@public.gmane.org \
--cc=ariela-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
--cc=dennis.dalessandro-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org \
--cc=leonro-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
--cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=stephen-OTpzqLSitTUnbdJkjeBofR2eb7JE58TQ@public.gmane.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;
as well as URLs for NNTP newsgroup(s).