On Mon, Apr 13, 2015 at 11:34:37AM -0400, Hal Rosenstock wrote:
> From: Vladimir Koushnir <[email protected]>
> Date: Wed, 8 Apr 2015 12:29:44 +0300
> 
> Today, two umad SMP file descriptors are used in libibnetdisc.
> One of them is needed only for retrieving LID of the local port
> for combined routing.
> 
> The patch removes the need for 2 files descriptors by retrieving
> LID of the local port in advance.
> 
> Signed-off-by: Vladimir Koushnir <[email protected]>
> Signed-off-by: Hal Rosenstock <[email protected]>

Thanks applied,
Ira

> ---
>  libibnetdisc/src/ibnetdisc.c |   34 +++++++++++++++++-----------------
>  libibnetdisc/src/internal.h  |    1 -
>  2 files changed, 17 insertions(+), 18 deletions(-)
> 
> diff --git a/libibnetdisc/src/ibnetdisc.c b/libibnetdisc/src/ibnetdisc.c
> index e346905..e0f2d78 100644
> --- a/libibnetdisc/src/ibnetdisc.c
> +++ b/libibnetdisc/src/ibnetdisc.c
> @@ -127,12 +127,6 @@ static int extend_dpath(smp_engine_t * engine, 
> ib_portid_t * portid,
>  
>       if (portid->lid) {
>               /* If we were LID routed we need to set up the drslid */
> -             if (!scan->selfportid.lid)
> -                     if (ib_resolve_self_via(&scan->selfportid, NULL, NULL,
> -                                             scan->ibmad_port) < 0) {
> -                             IBND_ERROR("Failed to resolve self\n");
> -                             return -1;
> -                     }
>               portid->drpath.drslid = (uint16_t) scan->selfportid.lid;
>               portid->drpath.drdlid = 0xFFFF;
>       }
> @@ -712,6 +706,7 @@ ibnd_fabric_t *ibnd_discover_fabric(char * ca_name, int 
> ca_port,
>       ib_portid_t my_portid = { 0 };
>       smp_engine_t engine;
>       ibnd_scan_t scan;
> +     struct ibmad_port *ibmad_port;
>       int nc = 2;
>       int mc[2] = { IB_SMI_CLASS, IB_SMI_DIRECT_CLASS };
>  
> @@ -735,20 +730,27 @@ ibnd_fabric_t *ibnd_discover_fabric(char * ca_name, int 
> ca_port,
>       scan.cfg = &config;
>       scan.initial_hops = from->drpath.cnt;
>  
> -     if (smp_engine_init(&engine, ca_name, ca_port, &scan, &config)) {
> -             free(f_int);
> +     ibmad_port = mad_rpc_open_port(ca_name, ca_port, mc, nc);
> +     if (!ibmad_port) {
> +             IBND_ERROR("can't open MAD port (%s:%d)\n", ca_name, ca_port);
>               return (NULL);
>       }
> +     mad_rpc_set_timeout(ibmad_port, cfg->timeout_ms);
> +     mad_rpc_set_retries(ibmad_port, cfg->retries);
> +     smp_mkey_set(ibmad_port, cfg->mkey);
>  
> -     scan.ibmad_port = mad_rpc_open_port(ca_name, ca_port, mc, nc);
> -     if (!scan.ibmad_port) {
> -             IBND_ERROR("can't open MAD port (%s:%d)\n", ca_name, ca_port);
> -             smp_engine_destroy(&engine);
> +     if (ib_resolve_self_via(&scan.selfportid,
> +                             NULL, NULL, ibmad_port) < 0) {
> +             IBND_ERROR("Failed to resolve self\n");
> +             mad_rpc_close_port(ibmad_port);
> +             return NULL;
> +     }
> +     mad_rpc_close_port(ibmad_port);
> +
> +     if (smp_engine_init(&engine, ca_name, ca_port, &scan, &config)) {
> +             free(f_int);
>               return (NULL);
>       }
> -     mad_rpc_set_timeout(scan.ibmad_port, cfg->timeout_ms);
> -     mad_rpc_set_retries(scan.ibmad_port, cfg->retries);
> -     smp_mkey_set(scan.ibmad_port, cfg->mkey);
>  
>       IBND_DEBUG("from %s\n", portid2str(from));
>  
> @@ -763,11 +765,9 @@ ibnd_fabric_t *ibnd_discover_fabric(char * ca_name, int 
> ca_port,
>               goto error;
>  
>       smp_engine_destroy(&engine);
> -     mad_rpc_close_port(scan.ibmad_port);
>       return (ibnd_fabric_t *)f_int;
>  error:
>       smp_engine_destroy(&engine);
> -     mad_rpc_close_port(scan.ibmad_port);
>       ibnd_destroy_fabric(&f_int->fabric);
>       return NULL;
>  }
> diff --git a/libibnetdisc/src/internal.h b/libibnetdisc/src/internal.h
> index 1ccd29c..a50d2d7 100644
> --- a/libibnetdisc/src/internal.h
> +++ b/libibnetdisc/src/internal.h
> @@ -71,7 +71,6 @@ typedef struct ibnd_scan {
>       ib_portid_t selfportid;
>       f_internal_t *f_int;
>       struct ibnd_config *cfg;
> -     struct ibmad_port *ibmad_port;
>       unsigned initial_hops;
>  } ibnd_scan_t;
>  
> -- 
> 1.7.8.2
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to