Hi Jim, On 13:53 Tue 15 Jun , Jim Schutt wrote: > diff --git a/opensm/opensm/osm_opensm.c b/opensm/opensm/osm_opensm.c > index d3dc02e..5614240 100644 > --- a/opensm/opensm/osm_opensm.c > +++ b/opensm/opensm/osm_opensm.c > @@ -147,7 +147,8 @@ static void append_routing_engine(osm_opensm_t *osm, > r->next = routing_engine; > } > > -static void setup_routing_engine(osm_opensm_t *osm, const char *name) > +static struct osm_routing_engine *setup_routing_engine(osm_opensm_t *osm, > + const char *name) > { > struct osm_routing_engine *re; > const struct routing_engine_module *m; > @@ -158,47 +159,53 @@ static void setup_routing_engine(osm_opensm_t *osm, > const char *name) > if (!re) { > OSM_LOG(&osm->log, OSM_LOG_VERBOSE, > "memory allocation failed\n"); > - return; > + return NULL; > } > memset(re, 0, sizeof(struct osm_routing_engine)); > > re->name = m->name; > + re->type = osm_routing_engine_type(m->name); > if (m->setup(re, osm)) { > OSM_LOG(&osm->log, OSM_LOG_VERBOSE, > "setup of routing" > " engine \'%s\' failed\n", name); > - return; > + free(re); > + return NULL; > } > OSM_LOG(&osm->log, OSM_LOG_DEBUG, > "\'%s\' routing engine set up\n", re->name); > - append_routing_engine(osm, re); > - return; > + if (re->type == OSM_ROUTING_ENGINE_TYPE_MINHOP) > + osm->default_routing_engine = re; > + return re; > } > } > > OSM_LOG(&osm->log, OSM_LOG_ERROR, > "cannot find or setup routing engine \'%s\'\n", name); > + return NULL; > } > > static void setup_routing_engines(osm_opensm_t *osm, const char > *engine_names) > { > char *name, *str, *p; > + struct osm_routing_engine *re; > > - if (!engine_names || !*engine_names) { > - setup_routing_engine(osm, "minhop"); > - return; > + if (engine_names && *engine_names) { > + str = strdup(engine_names); > + name = strtok_r(str, ", \t\n", &p); > + while (name && *name) { > + re = setup_routing_engine(osm, name); > + if (re) > + append_routing_engine(osm, re); > + name = strtok_r(NULL, ", \t\n", &p); > + } > + free(str); > } > - > - str = strdup(engine_names); > - name = strtok_r(str, ", \t\n", &p); > - while (name && *name) { > - setup_routing_engine(osm, name); > - name = strtok_r(NULL, ", \t\n", &p); > + if (!osm->default_routing_engine) { > + re = setup_routing_engine(osm, "minhop"); > + if (!osm->routing_engine_list && re) > + append_routing_engine(osm, re);
Shouldn't here be: osm->default_routing_engine = re; too? > } > - free(str); > - > - if (!osm->routing_engine_list) > - setup_routing_engine(osm, "minhop"); > } > > void osm_opensm_construct(IN osm_opensm_t * p_osm) So that this chunk in osm_ucast_mgr_process() (below) will not break over NULL pointer? > - if (p_osm->routing_engine_used == OSM_ROUTING_ENGINE_TYPE_NONE) { > + if (!p_osm->routing_engine_used) { > /* If configured routing algorithm failed, use default MinHop */ > - osm_ucast_mgr_build_lid_matrices(p_mgr); > - ucast_mgr_build_lfts(p_mgr); > + struct osm_routing_engine *r = p_osm->default_routing_engine; > + > + r->build_lid_matrices(r->context); > + r->ucast_build_fwd_tables(r->context); > + p_osm->routing_engine_used = r; > osm_ucast_mgr_set_fwd_tables(p_mgr); > - p_osm->routing_engine_used = OSM_ROUTING_ENGINE_TYPE_MINHOP; > } Sasha -- 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