Hi Bob, On 12:00 Wed 10 Dec , Robert Pearson wrote: > > This patch: > > - creates a data structure, mesh_t, that holds per mesh information > > - adds a pointer to this structure in lash_t > > - creates methods to create, cleanup and destroy the object. > > - adds calls in osm_ucast_lash.c to call these.
osm_mesh_create() is called when lash->num_switches still be zero - as result a memory for mesh buffers is not allocated actually. I reworked this patch as below and rebased the rest. Sasha >From 304739705a93201ed6f0c95f279b57962b71c4f8 Mon Sep 17 00:00:00 2001 From: Robert Pearson <[email protected]> Date: Wed, 10 Dec 2008 12:00:21 -0600 Subject: [PATCH] mesh analysis - mesh_t data structure Sasha, Here is a revised mesh patch #2 that incorporates changes based on your comments. The purpose of this patch is to create a per fabric data structure and methods. This patch: - creates a data structure, mesh_t, that holds per mesh information - adds a pointer to this structure in lash_t - creates methods to create, cleanup and destroy the object. - adds calls in osm_ucast_lash.c to call these. Regards, Bob Pearson Signed-off-by: Bob Pearson <[email protected]> Signed-off-by: Sasha Khapyorsky <[email protected]> --- opensm/opensm/osm_mesh.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 60 insertions(+), 0 deletions(-) diff --git a/opensm/opensm/osm_mesh.c b/opensm/opensm/osm_mesh.c index 486e6b4..0786701 100644 --- a/opensm/opensm/osm_mesh.c +++ b/opensm/opensm/osm_mesh.c @@ -41,6 +41,7 @@ #endif /* HAVE_CONFIG_H */ #include <stdio.h> +#include <stdlib.h> #include <opensm/osm_switch.h> #include <opensm/osm_opensm.h> #include <opensm/osm_log.h> @@ -48,14 +49,73 @@ #include <opensm/osm_ucast_lash.h> /* + * per fabric mesh info + */ +typedef struct _mesh { + int num_class; /* number of switch classes */ + int *class_type; /* index of first switch found for each class */ + int *class_count; /* population of each class */ + int dimension; /* mesh dimension */ + int *size; /* an array to hold size of mesh */ +} mesh_t; + +/* + * osm_mesh_delete - free per mesh resources + */ +static void mesh_delete(mesh_t *mesh) +{ + if (mesh) { + if (mesh->class_type) + free(mesh->class_type); + + if (mesh->class_count) + free(mesh->class_count); + + free(mesh); + } +} + +/* + * osm_mesh_create - allocate per mesh resources + */ +static mesh_t *mesh_create(lash_t *p_lash) +{ + osm_log_t *p_log = &p_lash->p_osm->log; + mesh_t *mesh; + + if(!(mesh = calloc(1, sizeof(mesh_t)))) + goto err; + + if (!(mesh->class_type = calloc(p_lash->num_switches, sizeof(int)))) + goto err; + + if (!(mesh->class_count = calloc(p_lash->num_switches, sizeof(int)))) + goto err; + + return mesh; + +err: + mesh_delete(mesh); + OSM_LOG(p_log, OSM_LOG_ERROR, "Failed allocating mesh - out of memory\n"); + return NULL; +} + +/* * osm_do_mesh_analysis */ int osm_do_mesh_analysis(lash_t *p_lash) { osm_log_t *p_log = &p_lash->p_osm->log; + mesh_t *mesh; OSM_LOG_ENTER(p_log); + mesh = mesh_create(p_lash); + if (!mesh) + return -1; + + mesh_delete(mesh); + OSM_LOG_EXIT(p_log); return 0; } -- 1.6.0.4.766.g6fc4a _______________________________________________ general mailing list [email protected] http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
