[ofa-general] [infiniband-diags] [PATCH] [6/6] fix libibnetdisc API consistency and bugs
Al Chu
chu11 at llnl.gov
Mon Jul 27 10:13:01 PDT 2009
Remove timeout_ms parameter to ibnd_discover_fabric, timeout parameter
should be specified via the ibmad_port. Remove extraneous use of global
timeout_ms in library. Adjust ibnetdiscover, ibqueryerrors, iblinkinfo,
and test code appropriately for adjustment.
Al
--
Albert Chu
chu11 at llnl.gov
Computer Scientist
High Performance Systems Division
Lawrence Livermore National Laboratory
-------------- next part --------------
From: Albert Chu <chu11 at llnl.gov>
Date: Thu, 23 Jul 2009 14:16:14 -0700
Subject: [PATCH] Remove timeout_ms parameter to ibnd_discover_fabric, timeout parameter should be specified via the ibmad_port. Remove extraneous use of global timeout_ms in library. Adjust ibnetdiscover, ibqueryerrors, iblinkinfo, and test code appropriately for adjustment.
Signed-off-by: Albert Chu <chu11 at llnl.gov>
---
.../libibnetdisc/include/infiniband/ibnetdisc.h | 4 ---
infiniband-diags/libibnetdisc/src/ibnetdisc.c | 21 +++++++++----------
infiniband-diags/libibnetdisc/test/testleaks.c | 6 +++-
infiniband-diags/src/iblinkinfo.c | 7 ++++-
infiniband-diags/src/ibnetdiscover.c | 8 +++---
infiniband-diags/src/ibqueryerrors.c | 7 ++++-
6 files changed, 28 insertions(+), 25 deletions(-)
diff --git a/infiniband-diags/libibnetdisc/include/infiniband/ibnetdisc.h b/infiniband-diags/libibnetdisc/include/infiniband/ibnetdisc.h
index f65690c..8926e58 100644
--- a/infiniband-diags/libibnetdisc/include/infiniband/ibnetdisc.h
+++ b/infiniband-diags/libibnetdisc/include/infiniband/ibnetdisc.h
@@ -140,13 +140,9 @@ MAD_EXPORT void ibnd_debug(int i);
MAD_EXPORT void ibnd_show_progress(int i);
MAD_EXPORT ibnd_fabric_t *ibnd_discover_fabric(struct ibmad_port *ibmad_port,
- int timeout_ms,
ib_portid_t *from, int hops);
/**
* open: (required) ibmad_port object from libibmad
- * timeout_ms: (required) gives the timeout for a _SINGLE_ query on
- * the fabric. So if there are multiple nodes not
- * responding this may result in a lengthy delay.
* from: (optional) specify the node to start scanning from.
* If NULL start from the node we are running on.
* hops: (optional) Specify how much of the fabric to traverse.
diff --git a/infiniband-diags/libibnetdisc/src/ibnetdisc.c b/infiniband-diags/libibnetdisc/src/ibnetdisc.c
index 3f9a3dd..60dd128 100644
--- a/infiniband-diags/libibnetdisc/src/ibnetdisc.c
+++ b/infiniband-diags/libibnetdisc/src/ibnetdisc.c
@@ -57,7 +57,6 @@
#include "internal.h"
#include "chassis.h"
-static int timeout_ms = 2000;
static int show_progress = 0;
int ibdebug;
@@ -80,7 +79,7 @@ get_port_info(struct ibmad_port *ibmad_port, struct ibnd_fabric *fabric,
iwidth = mad_get_field(port->port.info, 0, IB_PORT_LINK_WIDTH_ACTIVE_F);
ispeed = mad_get_field(port->port.info, 0, IB_PORT_LINK_SPEED_ACTIVE_F);
- if (!smp_query_via(port->port.info, portid, IB_ATTR_PORT_INFO, portnum, timeout_ms,
+ if (!smp_query_via(port->port.info, portid, IB_ATTR_PORT_INFO, portnum, 0,
ibmad_port))
return -1;
@@ -102,7 +101,7 @@ static int
query_node_info(struct ibmad_port *ibmad_port, struct ibnd_fabric *fabric,
struct ibnd_node *node, ib_portid_t *portid)
{
- if (!smp_query_via(&(node->node.info), portid, IB_ATTR_NODE_INFO, 0, timeout_ms,
+ if (!smp_query_via(&(node->node.info), portid, IB_ATTR_NODE_INFO, 0, 0,
ibmad_port))
return -1;
@@ -132,11 +131,11 @@ query_node(struct ibmad_port *ibmad_port, struct ibnd_fabric *fabric,
port->portnum = mad_get_field(node->info, 0, IB_NODE_LOCAL_PORT_F);
port->guid = mad_get_field64(node->info, 0, IB_NODE_PORT_GUID_F);
- if (!smp_query_via(nd, portid, IB_ATTR_NODE_DESC, 0, timeout_ms,
+ if (!smp_query_via(nd, portid, IB_ATTR_NODE_DESC, 0, 0,
ibmad_port))
return -1;
- if (!smp_query_via(port->info, portid, IB_ATTR_PORT_INFO, 0, timeout_ms,
+ if (!smp_query_via(port->info, portid, IB_ATTR_PORT_INFO, 0, 0,
ibmad_port))
return -1;
decode_port_info(port);
@@ -148,7 +147,7 @@ query_node(struct ibmad_port *ibmad_port, struct ibnd_fabric *fabric,
node->smalmc = port->lmc;
/* after we have the sma information find out the real PortInfo for this port */
- if (!smp_query_via(port->info, portid, IB_ATTR_PORT_INFO, port->portnum, timeout_ms,
+ if (!smp_query_via(port->info, portid, IB_ATTR_PORT_INFO, port->portnum, 0,
ibmad_port))
return -1;
decode_port_info(port);
@@ -156,7 +155,7 @@ query_node(struct ibmad_port *ibmad_port, struct ibnd_fabric *fabric,
port->base_lid = (uint16_t) node->smalid; /* LID is still defined by port 0 */
port->lmc = (uint8_t) node->smalmc;
- if (!smp_query_via(node->switchinfo, portid, IB_ATTR_SWITCH_INFO, 0, timeout_ms,
+ if (!smp_query_via(node->switchinfo, portid, IB_ATTR_SWITCH_INFO, 0, 0,
ibmad_port))
node->smaenhsp0 = 0; /* assume base SP0 */
else
@@ -293,7 +292,7 @@ ibnd_update_node(struct ibmad_port *ibmad_port, ibnd_fabric_t *fabric, ibnd_node
if (query_node_info(ibmad_port, f, n, &(n->node.path_portid)))
return (NULL);
- if (!smp_query_via(nd, &(n->node.path_portid), IB_ATTR_NODE_DESC, 0, timeout_ms,
+ if (!smp_query_via(nd, &(n->node.path_portid), IB_ATTR_NODE_DESC, 0, 0,
ibmad_port))
return (NULL);
@@ -306,14 +305,14 @@ ibnd_update_node(struct ibmad_port *ibmad_port, ibnd_fabric_t *fabric, ibnd_node
if (n->node.type != IB_NODE_SWITCH)
goto done;
- if (!smp_query_via(portinfo_port0, &(n->node.path_portid), IB_ATTR_PORT_INFO, 0, timeout_ms,
+ if (!smp_query_via(portinfo_port0, &(n->node.path_portid), IB_ATTR_PORT_INFO, 0, 0,
ibmad_port))
return (NULL);
n->node.smalid = mad_get_field(portinfo_port0, 0, IB_PORT_LID_F);
n->node.smalmc = mad_get_field(portinfo_port0, 0, IB_PORT_LMC_F);
- if (!smp_query_via(node->switchinfo, &(n->node.path_portid), IB_ATTR_SWITCH_INFO, 0, timeout_ms,
+ if (!smp_query_via(node->switchinfo, &(n->node.path_portid), IB_ATTR_SWITCH_INFO, 0, 0,
ibmad_port))
node->smaenhsp0 = 0; /* assume base SP0 */
else
@@ -536,7 +535,7 @@ get_remote_node(struct ibmad_port *ibmad_port, struct ibnd_fabric *fabric,
}
ibnd_fabric_t *
-ibnd_discover_fabric(struct ibmad_port *ibmad_port, int timeout_ms,
+ibnd_discover_fabric(struct ibmad_port *ibmad_port,
ib_portid_t *from, int hops)
{
struct ibnd_fabric *fabric = NULL;
diff --git a/infiniband-diags/libibnetdisc/test/testleaks.c b/infiniband-diags/libibnetdisc/test/testleaks.c
index 0d009c3..a8f5300 100644
--- a/infiniband-diags/libibnetdisc/test/testleaks.c
+++ b/infiniband-diags/libibnetdisc/test/testleaks.c
@@ -161,11 +161,13 @@ main(int argc, char **argv)
ibmad_port = mad_rpc_open_port(ca, ca_port, mgmt_classes, 2);
+ mad_rpc_set_timeout(ibmad_port, timeout_ms);
+
while (iters == -1 || iters-- > 0) {
if (from) {
/* only scan part of the fabric */
str2drpath(&(port_id.drpath), from, 0, 0);
- if ((fabric = ibnd_discover_fabric(ibmad_port, timeout_ms,
+ if ((fabric = ibnd_discover_fabric(ibmad_port,
&port_id, hops)) == NULL) {
fprintf(stderr, "discover failed\n");
rc = 1;
@@ -173,7 +175,7 @@ main(int argc, char **argv)
}
guid = 0;
} else {
- if ((fabric = ibnd_discover_fabric(ibmad_port, timeout_ms, NULL, -1)) == NULL) {
+ if ((fabric = ibnd_discover_fabric(ibmad_port, NULL, -1)) == NULL) {
fprintf(stderr, "discover failed\n");
rc = 1;
goto close_port;
diff --git a/infiniband-diags/src/iblinkinfo.c b/infiniband-diags/src/iblinkinfo.c
index bba5c5c..5dfadee 100644
--- a/infiniband-diags/src/iblinkinfo.c
+++ b/infiniband-diags/src/iblinkinfo.c
@@ -308,6 +308,9 @@ main(int argc, char **argv)
exit(1);
}
+ if (ibd_timeout)
+ mad_rpc_set_timeout(ibmad_port, ibd_timeout);
+
node_name_map = open_node_name_map(node_name_map_file);
if (dr_path) {
@@ -324,12 +327,12 @@ main(int argc, char **argv)
}
if (resolved >= 0)
- if ((fabric = ibnd_discover_fabric(ibmad_port, ibd_timeout, &port_id,
+ if ((fabric = ibnd_discover_fabric(ibmad_port, &port_id,
hops)) == NULL)
IBWARN("Single node discover failed; attempting full scan\n");
if (!fabric)
- if ((fabric = ibnd_discover_fabric(ibmad_port, ibd_timeout, NULL, -1)) == NULL) {
+ if ((fabric = ibnd_discover_fabric(ibmad_port, NULL, -1)) == NULL) {
fprintf(stderr, "discover failed\n");
rc = 1;
goto close_port;
diff --git a/infiniband-diags/src/ibnetdiscover.c b/infiniband-diags/src/ibnetdiscover.c
index 1339485..37f769c 100644
--- a/infiniband-diags/src/ibnetdiscover.c
+++ b/infiniband-diags/src/ibnetdiscover.c
@@ -670,9 +670,6 @@ int main(int argc, char **argv)
argc -= optind;
argv += optind;
- if (ibd_timeout)
- timeout = ibd_timeout;
-
if (ibverbose)
ibnd_debug(1);
@@ -680,12 +677,15 @@ int main(int argc, char **argv)
if (!ibmad_port)
IBERROR("Failed to open %s port %d", ibd_ca, ibd_ca_port);
+ if (ibd_timeout)
+ mad_rpc_set_timeout(ibmad_port, ibd_timeout);
+
if (argc && !(f = fopen(argv[0], "w")))
IBERROR("can't open file %s for writing", argv[0]);
node_name_map = open_node_name_map(node_name_map_file);
- if ((fabric = ibnd_discover_fabric(ibmad_port, ibd_timeout, NULL, -1)) == NULL)
+ if ((fabric = ibnd_discover_fabric(ibmad_port, NULL, -1)) == NULL)
IBERROR("discover failed\n");
if (ports_report)
diff --git a/infiniband-diags/src/ibqueryerrors.c b/infiniband-diags/src/ibqueryerrors.c
index 09f57c5..2c85423 100644
--- a/infiniband-diags/src/ibqueryerrors.c
+++ b/infiniband-diags/src/ibqueryerrors.c
@@ -422,6 +422,9 @@ main(int argc, char **argv)
if (!ibmad_port)
IBERROR("Failed to open port; %s:%d\n", ibd_ca, ibd_ca_port);
+ if (ibd_timeout)
+ mad_rpc_set_timeout(ibmad_port, ibd_timeout);
+
node_name_map = open_node_name_map(node_name_map_file);
/* limit the scan the fabric around the target */
@@ -437,12 +440,12 @@ main(int argc, char **argv)
}
if (resolved >= 0)
- if ((fabric = ibnd_discover_fabric(ibmad_port, ibd_timeout, &portid,
+ if ((fabric = ibnd_discover_fabric(ibmad_port, &portid,
0)) == NULL)
IBWARN("Single node discover failed; attempting full scan\n");
if (!fabric) /* do a full scan */
- if ((fabric = ibnd_discover_fabric(ibmad_port, ibd_timeout, NULL, -1)) == NULL) {
+ if ((fabric = ibnd_discover_fabric(ibmad_port, NULL, -1)) == NULL) {
fprintf(stderr, "discover failed\n");
rc = 1;
goto close_port;
--
1.5.4.5
More information about the general
mailing list