[ofa-general] Re: [PATCH] opensm/osm_mesh.c: Add dump_mesh routine at OSM_LOG_DEBUG log level

Sasha Khapyorsky sashak at voltaire.com
Sun Sep 27 12:46:51 PDT 2009


On 14:38 Tue 22 Sep     , Hal Rosenstock wrote:
> 
> Signed-off-by: Hal Rosenstock <hal.rosenstock at gmail.com>
> ---
> diff --git a/opensm/opensm/osm_mesh.c b/opensm/opensm/osm_mesh.c
> index 260e2f8..beb6bd7 100644
> --- a/opensm/opensm/osm_mesh.c
> +++ b/opensm/opensm/osm_mesh.c
> @@ -1565,6 +1565,39 @@ err:
>  	return -1;
>  }
>  
> +static void dump_mesh(lash_t *p_lash)
> +{
> +	osm_log_t *p_log = &p_lash->p_osm->log;
> +	int sw;
> +	int num_switches = p_lash->num_switches;
> +	int dimension;
> +	int i, j, k;
> +	switch_t *s, *s2;
> +	char buf[256], *p;
> +
> +	OSM_LOG_ENTER(p_log);
> +
> +	for (sw = 0; sw < num_switches; sw++) {
> +		p = buf;
> +		s = p_lash->switches[sw];
> +		dimension = s->node->dimension;
> +		p += sprintf(p, "[");
> +		for (i = 0; i < dimension; i++)
> +			p += sprintf(p, "%2d%s", s->node->coord[i],
> +				     (i == dimension - 1) ? "]" : ",");

I think that you can move ']' printing out of the loop, just place it
on a last character (it may be easier using snprintf()).

> +		for (j = 0; j < s->node->num_links; j++) {
> +			s2 = p_lash->switches[s->node->links[j]->switch_id];
> +			p += sprintf(p, " [%d]->[", j);
> +			for (k = 0; k < dimension; k++)
> +				p += sprintf(p, "%2d%s", s2->node->coord[k],
> +					     (k == dimension - 1) ? "] " : ",");
> +		}

Using sprintf()s above should we care about potential 'buf' overflow
(and likely to use snprintf() instead)?

Sasha

> +		OSM_LOG(p_log, OSM_LOG_DEBUG, "%s\n", buf);
> +	}
> +
> +	OSM_LOG_EXIT(p_log);
> +}
> +
>  /*
>   * osm_do_mesh_analysis
>   */
> @@ -1653,6 +1686,9 @@ int osm_do_mesh_analysis(lash_t *p_lash)
>  		OSM_LOG(p_log, OSM_LOG_INFO, "%s", buf);
>  	}
>  
> +	if (osm_log_is_active(p_log, OSM_LOG_DEBUG))
> +		dump_mesh(p_lash);
> +
>  done:
>  	mesh_delete(mesh);
>  	OSM_LOG_EXIT(p_log);
> 



More information about the general mailing list