[ofa-general] Re: [PATCH v3 1/2] opensm: setup routing engine when in use and delete when fail
Sasha Khapyorsky
sashak at voltaire.com
Sun Apr 26 03:43:57 PDT 2009
Hi Eli,
On 15:37 Thu 19 Mar , Eli Dorfman (Voltaire) wrote:
> setup routing engine when in use and delete when fail
>
> setup routing engine and allocate resources before use.
> delete resources when routing algorithm fails.
> this will save allocation for routing algorithms that are not used.
>
> Signed-off-by: Eli Dorfman <elid at voltaire.com>
> ---
> opensm/include/opensm/osm_opensm.h | 6 ++++++
> opensm/opensm/osm_opensm.c | 10 ++--------
> opensm/opensm/osm_ucast_mgr.c | 17 +++++++++++++++++
> 3 files changed, 25 insertions(+), 8 deletions(-)
>
> diff --git a/opensm/include/opensm/osm_opensm.h b/opensm/include/opensm/osm_opensm.h
> index c121be4..8d1b276 100644
> --- a/opensm/include/opensm/osm_opensm.h
> +++ b/opensm/include/opensm/osm_opensm.h
> @@ -109,6 +109,9 @@ typedef enum _osm_routing_engine_type {
> } osm_routing_engine_type_t;
> /***********/
>
> +struct osm_routing_engine;
> +struct osm_opensm;
> +
> /****s* OpenSM: OpenSM/osm_routing_engine
> * NAME
> * struct osm_routing_engine
> @@ -122,6 +125,7 @@ typedef enum _osm_routing_engine_type {
> struct osm_routing_engine {
> const char *name;
> void *context;
> + int (*setup) (struct osm_routing_engine *re, struct osm_opensm *p_osm);
> int (*build_lid_matrices) (void *context);
> int (*ucast_build_fwd_tables) (void *context);
> void (*ucast_dump_tables) (void *context);
> @@ -523,5 +527,7 @@ extern volatile unsigned int osm_exit_flag;
> * Set to one to cause all threads to leave
> *********/
>
> +void osm_update_routing_engines(osm_opensm_t *osm, const char *engine_names);
> +
This function is not implemented in this patch. Please move it to
related patch.
> END_C_DECLS
> #endif /* _OSM_OPENSM_H_ */
> diff --git a/opensm/opensm/osm_opensm.c b/opensm/opensm/osm_opensm.c
> index 50d1349..9739122 100644
> --- a/opensm/opensm/osm_opensm.c
> +++ b/opensm/opensm/osm_opensm.c
> @@ -169,14 +169,7 @@ static void setup_routing_engine(osm_opensm_t *osm, const char *name)
> memset(re, 0, sizeof(struct osm_routing_engine));
>
> re->name = m->name;
> - if (m->setup(re, osm)) {
> - OSM_LOG(&osm->log, OSM_LOG_VERBOSE,
> - "setup of routing"
> - " engine \'%s\' failed\n", name);
> - return;
> - }
> - OSM_LOG(&osm->log, OSM_LOG_DEBUG,
> - "\'%s\' routing engine set up\n", re->name);
> + re->setup = m->setup;
Ok, only 'setup' callback is initialized here. That is fine. But later
in destroy_routing_engines() for all routing engines delete() method is
called unconditionally, which obviously should crash OpenSM.
It is still be broken IMO.
Sasha
More information about the general
mailing list