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

Reply via email to