From: Ira Weiny <wei...@llnl.gov> Date: Tue, 2 Feb 2010 14:06:03 -0800 Subject: [PATCH] libibnetdisc: add ibnd_set_max_smps_on_wire call
In addition update ibnetdiscover, iblinkinfo, and ibqueryerrors to use this function. Signed-off-by: Ira Weiny <wei...@llnl.gov> --- .../libibnetdisc/include/infiniband/ibnetdisc.h | 1 + .../libibnetdisc/man/ibnd_discover_fabric.3 | 8 ++++++++ infiniband-diags/libibnetdisc/src/ibnetdisc.c | 10 +++++++++- infiniband-diags/libibnetdisc/src/libibnetdisc.map | 1 + infiniband-diags/src/iblinkinfo.c | 10 ++++++++++ infiniband-diags/src/ibnetdiscover.c | 10 ++++++++++ infiniband-diags/src/ibqueryerrors.c | 10 ++++++++++ 7 files changed, 49 insertions(+), 1 deletions(-) diff --git a/infiniband-diags/libibnetdisc/include/infiniband/ibnetdisc.h b/infiniband-diags/libibnetdisc/include/infiniband/ibnetdisc.h index b6a2899..556014e 100644 --- a/infiniband-diags/libibnetdisc/include/infiniband/ibnetdisc.h +++ b/infiniband-diags/libibnetdisc/include/infiniband/ibnetdisc.h @@ -158,6 +158,7 @@ typedef struct ibnd_fabric { */ MAD_EXPORT void ibnd_debug(int i); MAD_EXPORT void ibnd_show_progress(int i); +MAD_EXPORT int ibnd_set_max_smps_on_wire(int i); MAD_EXPORT ibnd_fabric_t *ibnd_discover_fabric(struct ibmad_port *ibmad_port, ib_portid_t * from, int hops); diff --git a/infiniband-diags/libibnetdisc/man/ibnd_discover_fabric.3 b/infiniband-diags/libibnetdisc/man/ibnd_discover_fabric.3 index dfeaf47..10e2729 100644 --- a/infiniband-diags/libibnetdisc/man/ibnd_discover_fabric.3 +++ b/infiniband-diags/libibnetdisc/man/ibnd_discover_fabric.3 @@ -9,6 +9,7 @@ ibnd_discover_fabric, ibnd_destroy_fabric, ibnd_debug ibnd_show_progress \- init .BI "void ibnd_destroy_fabric(ibnd_fabric_t *fabric)" .BI "void ibnd_debug(int i)" .BI "void ibnd_show_progress(int i)" +.BI "int ibnd_set_max_smps_on_wire(int i)" .SH "DESCRIPTION" .B ibnd_discover_fabric() Discover the fabric connected to the port specified by ibmad_port, using a timeout specified. The "from" and "hops" parameters are optional and allow one to scan part of a fabric by specifying a node "from" and a number of hops away from that node to scan, "hops". This gives the user a "sub-fabric" which is "centered" anywhere they chose. @@ -26,12 +27,19 @@ Set the debug level to be printed as library operations take place. Indicate that the library should print debug output which shows it's progress through the fabric. +.B ibnd_set_max_smps_on_wire() +Set the number of SMP\'s which will be issued on the wire simultaneously. + .SH "RETURN VALUE" .B ibnd_discover_fabric() return NULL on failure, otherwise a valid ibnd_fabric_t object. .B ibnd_destory_fabric(), ibnd_debug() NONE + +.B ibnd_set_max_smps_on_wire() +The previous value is returned + .SH "EXAMPLES" .B Discover the entire fabric connected to device "mthca0", port 1. diff --git a/infiniband-diags/libibnetdisc/src/ibnetdisc.c b/infiniband-diags/libibnetdisc/src/ibnetdisc.c index 7a9adbc..b084373 100644 --- a/infiniband-diags/libibnetdisc/src/ibnetdisc.c +++ b/infiniband-diags/libibnetdisc/src/ibnetdisc.c @@ -55,6 +55,7 @@ #include "chassis.h" static int show_progress = 0; +static int max_smps_on_wire = DEFAULT_MAX_SMP_ON_WIRE; int ibdebug; /* forward declare */ @@ -456,6 +457,13 @@ void add_to_type_list(ibnd_node_t * node, ibnd_fabric_t * fabric) } } +int ibnd_set_max_smps_on_wire(int i) +{ + int rc = max_smps_on_wire; + max_smps_on_wire = i; + return rc; +} + ibnd_fabric_t *ibnd_discover_fabric(struct ibmad_port *ibmad_port, ib_portid_t * from, int hops) { @@ -488,7 +496,7 @@ ibnd_fabric_t *ibnd_discover_fabric(struct ibmad_port *ibmad_port, memset(&(scan.selfportid), 0, sizeof(scan.selfportid)); scan.fabric = fabric; - smp_engine_init(&engine, ibmad_port, &scan, DEFAULT_MAX_SMP_ON_WIRE); + smp_engine_init(&engine, ibmad_port, &scan, max_smps_on_wire); IBND_DEBUG("from %s\n", portid2str(from)); diff --git a/infiniband-diags/libibnetdisc/src/libibnetdisc.map b/infiniband-diags/libibnetdisc/src/libibnetdisc.map index 888bdd8..30f7ab9 100644 --- a/infiniband-diags/libibnetdisc/src/libibnetdisc.map +++ b/infiniband-diags/libibnetdisc/src/libibnetdisc.map @@ -16,5 +16,6 @@ IBNETDISC_1.0 { ibnd_get_chassis_slot_str; ibnd_iter_nodes; ibnd_iter_nodes_type; + ibnd_set_max_smps_on_wire; local: *; }; diff --git a/infiniband-diags/src/iblinkinfo.c b/infiniband-diags/src/iblinkinfo.c index d6a0a09..1615492 100644 --- a/infiniband-diags/src/iblinkinfo.c +++ b/infiniband-diags/src/iblinkinfo.c @@ -67,6 +67,7 @@ static int down_links_only = 0; static int line_mode = 0; static int add_sw_settings = 0; static int print_port_guids = 0; +static int outstanding_smps = 0; /* use default from lib */ static unsigned int get_max(unsigned int num) { @@ -261,6 +262,9 @@ static int process_opt(void *context, int ch, char *optarg) break; case 'R': /* nop */ break; + case 'o': + outstanding_smps = atoi(optarg); + break; default: return -1; } @@ -297,6 +301,9 @@ int main(int argc, char **argv) "print port guids instead of node guids"}, {"load-cache", 2, 1, "<file>", "filename of ibnetdiscover cache to load"}, + {"outstanding_smps", 'o', 1, NULL, + "specify the number of outstanding SMP's which should be " + "issued during the scan"}, {"GNDN", 'R', 0, NULL, "(This option is obsolete and does nothing)"}, {0} @@ -324,6 +331,9 @@ int main(int argc, char **argv) node_name_map = open_node_name_map(node_name_map_file); + if (outstanding_smps) + ibnd_set_max_smps_on_wire(outstanding_smps); + if (dr_path && load_cache_file) { fprintf(stderr, "Cannot specify cache and direct route path\n"); exit(1); diff --git a/infiniband-diags/src/ibnetdiscover.c b/infiniband-diags/src/ibnetdiscover.c index 651bafd..1ff8ef6 100644 --- a/infiniband-diags/src/ibnetdiscover.c +++ b/infiniband-diags/src/ibnetdiscover.c @@ -67,6 +67,7 @@ static char *cache_file = NULL; static char *load_cache_file = NULL; static int report_max_hops = 0; +static int outstanding_smps = 0; /* use default from lib */ /** * Define our own conversion functions to maintain compatibility with the old @@ -648,6 +649,9 @@ static int process_opt(void *context, int ch, char *optarg) case 'm': report_max_hops = 1; break; + case 'o': + outstanding_smps = atoi(optarg); + break; default: return -1; } @@ -677,6 +681,9 @@ int main(int argc, char **argv) {"ports", 'p', 0, NULL, "obtain a ports report"}, {"max_hops", 'm', 0, NULL, "report max hops discovered by the library"}, + {"outstanding_smps", 'o', 1, NULL, + "specify the number of outstanding SMP's which should be " + "issued during the scan"}, {0} }; char usage_args[] = "[topology-file]"; @@ -704,6 +711,9 @@ int main(int argc, char **argv) node_name_map = open_node_name_map(node_name_map_file); + if (outstanding_smps) + ibnd_set_max_smps_on_wire(outstanding_smps); + if (load_cache_file) { if ((fabric = ibnd_load_fabric(load_cache_file, 0)) == NULL) IBERROR("loading cached fabric failed\n"); diff --git a/infiniband-diags/src/ibqueryerrors.c b/infiniband-diags/src/ibqueryerrors.c index 0b320ec..7e7b012 100644 --- a/infiniband-diags/src/ibqueryerrors.c +++ b/infiniband-diags/src/ibqueryerrors.c @@ -70,6 +70,7 @@ enum MAD_FIELDS suppressed_fields[SUP_MAX]; char *dr_path = NULL; uint8_t node_type_to_print = 0; unsigned clear_errors = 0, clear_counts = 0, details = 0; +static int outstanding_smps = 0; /* use default from lib */ #define PRINT_SWITCH 0x1 #define PRINT_CA 0x2 @@ -521,6 +522,9 @@ static int process_opt(void *context, int ch, char *optarg) case 'K': clear_counts = 1; break; + case 'o': + outstanding_smps = atoi(optarg); + break; default: return -1; } @@ -565,6 +569,9 @@ int main(int argc, char **argv) "Clear data counters after read"}, {"load-cache", 7, 1, "<file>", "filename of ibnetdiscover cache to load"}, + {"outstanding_smps", 'o', 1, NULL, + "specify the number of outstanding SMP's which should be " + "issued during the scan"}, {0} }; char usage_args[] = ""; @@ -591,6 +598,9 @@ int main(int argc, char **argv) node_name_map = open_node_name_map(node_name_map_file); + if (outstanding_smps) + ibnd_set_max_smps_on_wire(outstanding_smps); + if (dr_path && load_cache_file) { fprintf(stderr, "Cannot specify cache and direct route path\n"); exit(1); -- 1.5.4.5 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html