On Fri, 20 Feb 2009 13:24:35 -0500 Hal Rosenstock <[email protected]> wrote:
> On Fri, Feb 20, 2009 at 8:41 AM, Hal Rosenstock > <[email protected]> wrote: > > On Thu, Feb 19, 2009 at 10:05 PM, Ira Weiny <[email protected]> wrote: > >> >From 2774b4ab4608e25bdc365bca3a94c7d51ee19372 Mon Sep 17 00:00:00 2001 > >> From: Ira Weiny <[email protected]> > >> Date: Wed, 18 Feb 2009 16:37:36 -0800 > >> Subject: [PATCH] libibmad: Clean up "new" interface > >> > >> type all "void *ibmad_port" and "void *srcport" with struct ibmad_port * > >> Create new mad_rpc_portid(struct ibmad_port *srcport) function > >> which mirrors madrpc_portid(void) > >> Mark all "old" functions with __attribute__ ((deprecated)) > >> > >> Signed-off-by: Ira Weiny <[email protected]> > >> --- > >> libibmad/include/infiniband/mad.h | 139 > >> ++++++++++++++++++++++--------------- > >> libibmad/src/gs.c | 19 +++--- > >> libibmad/src/libibmad.map | 1 + > >> libibmad/src/resolve.c | 10 ++- > >> libibmad/src/rpc.c | 29 ++++---- > >> libibmad/src/sa.c | 4 +- > >> libibmad/src/smp.c | 4 +- > >> 7 files changed, 118 insertions(+), 88 deletions(-) > >> > >> diff --git a/libibmad/include/infiniband/mad.h > >> b/libibmad/include/infiniband/mad.h > >> index 1aaaa1b..80e38be 100644 > >> --- a/libibmad/include/infiniband/mad.h > >> +++ b/libibmad/include/infiniband/mad.h > >> @@ -724,100 +724,125 @@ static inline int mad_is_vendor_range2(int mgmt) > >> } > >> > >> /* rpc.c */ > >> -MAD_EXPORT int madrpc_portid(void); > >> -MAD_EXPORT int madrpc_set_retries(int retries); > >> -MAD_EXPORT int madrpc_set_timeout(int timeout); > > retries and timeouts could also be made per ibmad_port struct basis > rather than one for all clients. Those two APIs would be deprecated in > favor of new ones (mad_rpc_set_retries/timeout). > Patch below. (To be applied after the others.) >From d12b291041bdfe0d3bddecb7a71ee769a601fd83 Mon Sep 17 00:00:00 2001 From: Ira Weiny <[email protected]> Date: Fri, 20 Feb 2009 14:30:52 -0800 Subject: [PATCH] libibmad:infiniband-diags: deprecate madrpc_set_[retries|timeout] replace with mad_rpc_set_[retries|timeout] which are per ibmad_port object Update all diags with new functions Signed-off-by: Ira Weiny <[email protected]> --- infiniband-diags/src/ibaddr.c | 1 + infiniband-diags/src/ibdiag_common.c | 1 - infiniband-diags/src/ibping.c | 1 + infiniband-diags/src/ibportstate.c | 1 + infiniband-diags/src/ibroute.c | 1 + infiniband-diags/src/ibsendtrap.c | 1 + infiniband-diags/src/ibsysstat.c | 1 + infiniband-diags/src/ibtracert.c | 1 + infiniband-diags/src/perfquery.c | 1 + infiniband-diags/src/saquery.c | 1 + infiniband-diags/src/sminfo.c | 1 + infiniband-diags/src/smpquery.c | 1 + infiniband-diags/src/vendstat.c | 1 + libibmad/include/infiniband/mad.h | 6 ++++-- libibmad/src/libibmad.map | 2 ++ libibmad/src/mad_internal.h | 2 ++ libibmad/src/rpc.c | 29 ++++++++++++++++++++--------- 17 files changed, 40 insertions(+), 12 deletions(-) diff --git a/infiniband-diags/src/ibaddr.c b/infiniband-diags/src/ibaddr.c index bb22be9..e782b36 100644 --- a/infiniband-diags/src/ibaddr.c +++ b/infiniband-diags/src/ibaddr.c @@ -142,6 +142,7 @@ int main(int argc, char **argv) srcport = mad_rpc_open_port(ibd_ca, ibd_ca_port, mgmt_classes, 3); if (!srcport) IBERROR("Failed to open '%s' port '%d'", ibd_ca, ibd_ca_port); + mad_rpc_set_timeout(ibd_timeout, srcport); if (argc) { if (ib_resolve_portid_str_via(&portid, argv[0], ibd_dest_type, diff --git a/infiniband-diags/src/ibdiag_common.c b/infiniband-diags/src/ibdiag_common.c index 609df69..38d6cd3 100644 --- a/infiniband-diags/src/ibdiag_common.c +++ b/infiniband-diags/src/ibdiag_common.c @@ -175,7 +175,6 @@ static int process_opt(int ch, char *optarg) break; case 't': val = strtoul(optarg, 0, 0); - madrpc_set_timeout(val); ibd_timeout = val; break; case 's': diff --git a/infiniband-diags/src/ibping.c b/infiniband-diags/src/ibping.c index 901079f..28e3a64 100644 --- a/infiniband-diags/src/ibping.c +++ b/infiniband-diags/src/ibping.c @@ -213,6 +213,7 @@ int main(int argc, char **argv) srcport = mad_rpc_open_port(ibd_ca, ibd_ca_port, mgmt_classes, 3); if (!srcport) IBERROR("Failed to open '%s' port '%d'", ibd_ca, ibd_ca_port); + mad_rpc_set_timeout(ibd_timeout, srcport); if (server) { if (mad_register_server_via(ping_class, 0, 0, oui, srcport) < 0) diff --git a/infiniband-diags/src/ibportstate.c b/infiniband-diags/src/ibportstate.c index 65c9ca1..deaad51 100644 --- a/infiniband-diags/src/ibportstate.c +++ b/infiniband-diags/src/ibportstate.c @@ -228,6 +228,7 @@ int main(int argc, char **argv) srcport = mad_rpc_open_port(ibd_ca, ibd_ca_port, mgmt_classes, 3); if (!srcport) IBERROR("Failed to open '%s' port '%d'", ibd_ca, ibd_ca_port); + mad_rpc_set_timeout(ibd_timeout, srcport); if (ib_resolve_portid_str_via(&portid, argv[0], ibd_dest_type, ibd_sm_id, srcport) < 0) diff --git a/infiniband-diags/src/ibroute.c b/infiniband-diags/src/ibroute.c index 60bfdd8..07eddc4 100644 --- a/infiniband-diags/src/ibroute.c +++ b/infiniband-diags/src/ibroute.c @@ -410,6 +410,7 @@ int main(int argc, char **argv) srcport = mad_rpc_open_port(ibd_ca, ibd_ca_port, mgmt_classes, 3); if (!srcport) IBERROR("Failed to open '%s' port '%d'", ibd_ca, ibd_ca_port); + mad_rpc_set_timeout(ibd_timeout, srcport); if (!argc) { if (ib_resolve_self_via(&portid, 0, 0, srcport) < 0) diff --git a/infiniband-diags/src/ibsendtrap.c b/infiniband-diags/src/ibsendtrap.c index 75120f0..916b537 100644 --- a/infiniband-diags/src/ibsendtrap.c +++ b/infiniband-diags/src/ibsendtrap.c @@ -143,6 +143,7 @@ int main(int argc, char **argv) srcport = mad_rpc_open_port(ibd_ca, ibd_ca_port, mgmt_classes, 2); if (!srcport) IBERROR("Failed to open '%s' port '%d'", ibd_ca, ibd_ca_port); + mad_rpc_set_timeout(ibd_timeout, srcport); rc = send_trap(trap_name); mad_rpc_close_port(srcport); diff --git a/infiniband-diags/src/ibsysstat.c b/infiniband-diags/src/ibsysstat.c index d7daa37..7e668e8 100644 --- a/infiniband-diags/src/ibsysstat.c +++ b/infiniband-diags/src/ibsysstat.c @@ -339,6 +339,7 @@ int main(int argc, char **argv) srcport = mad_rpc_open_port(ibd_ca, ibd_ca_port, mgmt_classes, 3); if (!srcport) IBERROR("Failed to open '%s' port '%d'", ibd_ca, ibd_ca_port); + mad_rpc_set_timeout(ibd_timeout, srcport); if (server) { if (mad_register_server_via(sysstat_class, 1, 0, oui, srcport) < 0) diff --git a/infiniband-diags/src/ibtracert.c b/infiniband-diags/src/ibtracert.c index 1965aa0..87b5b17 100644 --- a/infiniband-diags/src/ibtracert.c +++ b/infiniband-diags/src/ibtracert.c @@ -753,6 +753,7 @@ int main(int argc, char **argv) srcport = mad_rpc_open_port(ibd_ca, ibd_ca_port, mgmt_classes, 3); if (!srcport) IBERROR("Failed to open '%s' port '%d'", ibd_ca, ibd_ca_port); + mad_rpc_set_timeout(ibd_timeout, srcport); node_name_map = open_node_name_map(node_name_map_file); diff --git a/infiniband-diags/src/perfquery.c b/infiniband-diags/src/perfquery.c index 2f104b8..3d89cc7 100644 --- a/infiniband-diags/src/perfquery.c +++ b/infiniband-diags/src/perfquery.c @@ -389,6 +389,7 @@ int main(int argc, char **argv) srcport = mad_rpc_open_port(ibd_ca, ibd_ca_port, mgmt_classes, 4); if (!srcport) IBERROR("Failed to open '%s' port '%d'", ibd_ca, ibd_ca_port); + mad_rpc_set_timeout(ibd_timeout, srcport); if (argc) { if (ib_resolve_portid_str_via(&portid, argv[0], ibd_dest_type, diff --git a/infiniband-diags/src/saquery.c b/infiniband-diags/src/saquery.c index e6cbe50..43eff85 100644 --- a/infiniband-diags/src/saquery.c +++ b/infiniband-diags/src/saquery.c @@ -1323,6 +1323,7 @@ static bind_handle_t get_bind_handle(void) srcport = mad_rpc_open_port(ibd_ca, ibd_ca_port, mgmt_classes, 2); if (!srcport) IBERROR("Failed to open '%s' port '%d'", ibd_ca, ibd_ca_port); + mad_rpc_set_timeout(ibd_timeout, srcport); ib_resolve_smlid_via(&handle.dport, ibd_timeout, srcport); if (!handle.dport.lid) diff --git a/infiniband-diags/src/sminfo.c b/infiniband-diags/src/sminfo.c index ebf6a47..0caa3f3 100644 --- a/infiniband-diags/src/sminfo.c +++ b/infiniband-diags/src/sminfo.c @@ -118,6 +118,7 @@ int main(int argc, char **argv) srcport = mad_rpc_open_port(ibd_ca, ibd_ca_port, mgmt_classes, 3); if (!srcport) IBERROR("Failed to open '%s' port '%d'", ibd_ca, ibd_ca_port); + mad_rpc_set_timeout(ibd_timeout, srcport); if (argc) { if (ib_resolve_portid_str_via(&portid, argv[0], ibd_dest_type, diff --git a/infiniband-diags/src/smpquery.c b/infiniband-diags/src/smpquery.c index 2ed1e65..dc6b685 100644 --- a/infiniband-diags/src/smpquery.c +++ b/infiniband-diags/src/smpquery.c @@ -455,6 +455,7 @@ int main(int argc, char **argv) srcport = mad_rpc_open_port(ibd_ca, ibd_ca_port, mgmt_classes, 3); if (!srcport) IBERROR("Failed to open '%s' port '%d'", ibd_ca, ibd_ca_port); + mad_rpc_set_timeout(ibd_timeout, srcport); node_name_map = open_node_name_map(node_name_map_file); diff --git a/infiniband-diags/src/vendstat.c b/infiniband-diags/src/vendstat.c index d001a01..1c1c08f 100644 --- a/infiniband-diags/src/vendstat.c +++ b/infiniband-diags/src/vendstat.c @@ -157,6 +157,7 @@ int main(int argc, char **argv) srcport = mad_rpc_open_port(ibd_ca, ibd_ca_port, mgmt_classes, 4); if (!srcport) IBERROR("Failed to open '%s' port '%d'", ibd_ca, ibd_ca_port); + mad_rpc_set_timeout(ibd_timeout, srcport); if (argc) { if (ib_resolve_portid_str_via(&portid, argv[0], ibd_dest_type, diff --git a/libibmad/include/infiniband/mad.h b/libibmad/include/infiniband/mad.h index 5cf135e..cbd3049 100644 --- a/libibmad/include/infiniband/mad.h +++ b/libibmad/include/infiniband/mad.h @@ -693,8 +693,6 @@ MAD_EXPORT int mad_build_pkt(void *umad, ib_rpc_t * rpc, ib_portid_t * dport, /* New interface */ MAD_EXPORT void madrpc_show_errors(int set); -MAD_EXPORT int madrpc_set_retries(int retries); -MAD_EXPORT int madrpc_set_timeout(int timeout); MAD_EXPORT struct ibmad_port *mad_rpc_open_port(char *dev_name, int dev_port, int *mgmt_classes, int num_classes); MAD_EXPORT void mad_rpc_close_port(struct ibmad_port *srcport); @@ -703,6 +701,8 @@ MAD_EXPORT void *mad_rpc(const struct ibmad_port *srcport, ib_rpc_t * rpc, ib_po MAD_EXPORT void *mad_rpc_rmpp(const struct ibmad_port *srcport, ib_rpc_t * rpc, ib_portid_t * dport, ib_rmpp_hdr_t * rmpp, void *data); MAD_EXPORT int mad_rpc_portid(struct ibmad_port *srcport); +MAD_EXPORT int mad_rpc_set_retries(int retries, struct ibmad_port *srcport); +MAD_EXPORT int mad_rpc_set_timeout(int timeout_ms, struct ibmad_port *srcport); /* register.c */ MAD_EXPORT int mad_register_port_client(int port_id, int mgmt, @@ -761,6 +761,8 @@ static inline int mad_is_vendor_range2(int mgmt) } /* rpc.c */ +MAD_EXPORT int madrpc_set_retries(int retries) __attribute__ ((deprecated)); +MAD_EXPORT int madrpc_set_timeout(int timeout) __attribute__ ((deprecated)); MAD_EXPORT int madrpc_portid(void) __attribute__ ((deprecated)); void *madrpc(ib_rpc_t * rpc, ib_portid_t * dport, void *payload, void *rcvdata) __attribute__ ((deprecated)); diff --git a/libibmad/src/libibmad.map b/libibmad/src/libibmad.map index 0412027..f231485 100644 --- a/libibmad/src/libibmad.map +++ b/libibmad/src/libibmad.map @@ -80,6 +80,8 @@ IBMAD_1.3 { madrpc_save_mad; madrpc_set_retries; madrpc_set_timeout; + mad_rpc_set_retries; + mad_rpc_set_timeout; madrpc_show_errors; ib_path_query; sa_call; diff --git a/libibmad/src/mad_internal.h b/libibmad/src/mad_internal.h index 9afe7a9..3991cc3 100644 --- a/libibmad/src/mad_internal.h +++ b/libibmad/src/mad_internal.h @@ -39,6 +39,8 @@ struct ibmad_port { int port_id; /* file descriptor returned by umad_open() */ int class_agents[MAX_CLASS]; /* class2agent mapper */ + int retries; + int timeout_ms; }; #endif /* _MAD_INTERNAL_H_ */ diff --git a/libibmad/src/rpc.c b/libibmad/src/rpc.c index 210f0c2..229020d 100644 --- a/libibmad/src/rpc.c +++ b/libibmad/src/rpc.c @@ -49,7 +49,7 @@ int ibdebug; static int mad_portid = -1; static int iberrs; - + int timeout; static int madrpc_retries = MAD_DEF_RETRIES; static int def_madrpc_timeout = MAD_DEF_TIMEOUT_MS; static void *save_mad; @@ -85,9 +85,17 @@ int madrpc_set_timeout(int timeout) return 0; } -int madrpc_def_timeout(void) +int mad_rpc_set_retries(int retries, struct ibmad_port *srcport) +{ + if (retries > 0) + srcport->retries = retries; + return srcport->retries; +} + +int mad_rpc_set_timeout(int timeout_ms, struct ibmad_port *srcport) { - return def_madrpc_timeout; + srcport->timeout_ms = timeout_ms; + return 0; } int madrpc_portid(void) @@ -102,14 +110,14 @@ int mad_rpc_portid(struct ibmad_port *srcport) static int _do_madrpc(int port_id, void *sndbuf, void *rcvbuf, int agentid, int len, - int timeout) + int timeout, const struct ibmad_port *srcport) { uint32_t trid; /* only low 32 bits */ - int retries; + int retries, max_retries; int length, status; if (!timeout) - timeout = def_madrpc_timeout; + timeout = srcport ? srcport->timeout_ms : def_madrpc_timeout; if (ibdebug > 1) { IBWARN(">>> sending: len %d pktsz %zu", len, umad_size() + len); @@ -125,7 +133,8 @@ _do_madrpc(int port_id, void *sndbuf, void *rcvbuf, int agentid, int len, trid = (uint32_t) mad_get_field64(umad_get_mad(sndbuf), 0, IB_MAD_TRID_F); - for (retries = 0; retries < madrpc_retries; retries++) { + max_retries = srcport ? srcport->retries : madrpc_retries; + for (retries = 0; retries < max_retries; retries++) { if (retries) { ERRS("retry %d (timeout %d ms)", retries, timeout); } @@ -178,7 +187,7 @@ void *mad_rpc(const struct ibmad_port *port, ib_rpc_t * rpc, ib_portid_t * dport if ((len = _do_madrpc(port->port_id, sndbuf, rcvbuf, port->class_agents[rpc->mgtclass], - len, rpc->timeout)) < 0) { + len, rpc->timeout, port)) < 0) { IBWARN("_do_madrpc failed; dport (%s)", portid2str(dport)); return 0; } @@ -217,7 +226,7 @@ void *mad_rpc_rmpp(const struct ibmad_port *port, ib_rpc_t * rpc, ib_portid_t * if ((len = _do_madrpc(port->port_id, sndbuf, rcvbuf, port->class_agents[rpc->mgtclass], - len, rpc->timeout)) < 0) { + len, rpc->timeout, port)) < 0) { IBWARN("_do_madrpc failed; dport (%s)", portid2str(dport)); return 0; } @@ -356,6 +365,8 @@ struct ibmad_port *mad_rpc_open_port(char *dev_name, int dev_port, } p->port_id = port_id; + p->retries = MAD_DEF_RETRIES; + p->timeout_ms = MAD_DEF_TIMEOUT_MS; return p; } -- 1.5.4.5 _______________________________________________ general mailing list [email protected] http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
