From: Ira Weiny <wei...@llnl.gov> Date: Tue, 25 May 2010 13:32:18 -0700 Subject: [PATCH] libibnetdisc: move ibmad_port out of smp_engine
Signed-off-by: Ira Weiny <wei...@llnl.gov> --- infiniband-diags/libibnetdisc/src/ibnetdisc.c | 15 ++++++++++++++- infiniband-diags/libibnetdisc/src/internal.h | 2 +- infiniband-diags/libibnetdisc/src/query_smp.c | 15 --------------- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/infiniband-diags/libibnetdisc/src/ibnetdisc.c b/infiniband-diags/libibnetdisc/src/ibnetdisc.c index 3c374c7..945e02c 100644 --- a/infiniband-diags/libibnetdisc/src/ibnetdisc.c +++ b/infiniband-diags/libibnetdisc/src/ibnetdisc.c @@ -100,7 +100,7 @@ static int extend_dpath(smp_engine_t * engine, ib_portid_t * portid, /* 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, - engine->ibmad_port) < 0) { + scan->ibmad_port) < 0) { IBND_ERROR("Failed to resolve self\n"); return -1; } @@ -474,6 +474,8 @@ 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; + int nc = 2; + int mc[2] = { IB_SMI_CLASS, IB_SMI_DIRECT_CLASS }; if (set_config(&config, cfg)) { IBND_ERROR("Invalid ibnd_config\n"); @@ -501,6 +503,15 @@ ibnd_fabric_t *ibnd_discover_fabric(char * ca_name, int ca_port, return (NULL); } + 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); + return (NULL); + } + mad_rpc_set_timeout(scan.ibmad_port, cfg->timeout_ms); + mad_rpc_set_retries(scan.ibmad_port, cfg->retries); + IBND_DEBUG("from %s\n", portid2str(from)); if (!query_node_info(&engine, from, NULL)) @@ -513,9 +524,11 @@ 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 fabric; error: smp_engine_destroy(&engine); + mad_rpc_close_port(scan.ibmad_port); ibnd_destroy_fabric(fabric); return NULL; } diff --git a/infiniband-diags/libibnetdisc/src/internal.h b/infiniband-diags/libibnetdisc/src/internal.h index d037a60..3c599ec 100644 --- a/infiniband-diags/libibnetdisc/src/internal.h +++ b/infiniband-diags/libibnetdisc/src/internal.h @@ -61,6 +61,7 @@ typedef struct ibnd_scan { ib_portid_t selfportid; ibnd_fabric_t *fabric; struct ibnd_config *cfg; + struct ibmad_port *ibmad_port; } ibnd_scan_t; typedef struct ibnd_smp ibnd_smp_t; @@ -77,7 +78,6 @@ struct ibnd_smp { }; struct smp_engine { - struct ibmad_port *ibmad_port; int umad_fd; int smi_agent; int smi_dir_agent; diff --git a/infiniband-diags/libibnetdisc/src/query_smp.c b/infiniband-diags/libibnetdisc/src/query_smp.c index 4dbfa0d..b68e08a 100644 --- a/infiniband-diags/libibnetdisc/src/query_smp.c +++ b/infiniband-diags/libibnetdisc/src/query_smp.c @@ -201,29 +201,16 @@ error: int smp_engine_init(smp_engine_t * engine, char * ca_name, int ca_port, void *user_data, ibnd_config_t *cfg) { - int nc = 2; - int mc[2] = { IB_SMI_CLASS, IB_SMI_DIRECT_CLASS }; - memset(engine, 0, sizeof(*engine)); - engine->ibmad_port = mad_rpc_open_port(ca_name, ca_port, mc, nc); - if (!engine->ibmad_port) { - IBND_ERROR("can't open MAD port (%s:%d)\n", ca_name, ca_port); - return -EIO; - } - mad_rpc_set_timeout(engine->ibmad_port, cfg->timeout_ms); - mad_rpc_set_retries(engine->ibmad_port, cfg->retries); - if (umad_init() < 0) { IBND_ERROR("umad_init failed\n"); - mad_rpc_close_port(engine->ibmad_port); return -EIO; } engine->umad_fd = umad_open_port(ca_name, ca_port); if (engine->umad_fd < 0) { IBND_ERROR("can't open UMAD port (%s:%d)\n", ca_name, ca_port); - mad_rpc_close_port(engine->ibmad_port); return -EIO; } @@ -247,7 +234,6 @@ int smp_engine_init(smp_engine_t * engine, char * ca_name, int ca_port, return (0); eio_close: - mad_rpc_close_port(engine->ibmad_port); umad_close_port(engine->umad_fd); return (-EIO); } @@ -275,7 +261,6 @@ void smp_engine_destroy(smp_engine_t * engine) } umad_close_port(engine->umad_fd); - mad_rpc_close_port(engine->ibmad_port); } int process_mads(smp_engine_t * engine) -- 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