[ofa-general] [PATCH] opensm/osm_ucast_lash: fix extra memory allocations
Sasha Khapyorsky
sashak at voltaire.com
Tue Oct 21 18:46:43 PDT 2008
Save memory allocations - dij_channels array cannot exceed number of
switch's ports. Also save some cycles (and flow) in repeated and obsolete
initializations.
Signed-off-by: Sasha Khapyorsky <sashak at voltaire.com>
---
opensm/opensm/osm_ucast_lash.c | 28 ++++++++++------------------
1 files changed, 10 insertions(+), 18 deletions(-)
diff --git a/opensm/opensm/osm_ucast_lash.c b/opensm/opensm/osm_ucast_lash.c
index 2d4acf0..76ec9d1 100644
--- a/opensm/opensm/osm_ucast_lash.c
+++ b/opensm/opensm/osm_ucast_lash.c
@@ -666,7 +666,7 @@ static switch_t *switch_create(lash_t * p_lash, unsigned id, osm_switch_t * p_sw
memset(sw, 0, sizeof(*sw));
sw->id = id;
- sw->dij_channels = malloc((num_switches) * sizeof(int));
+ sw->dij_channels = malloc(num_ports * sizeof(int));
if (!sw->dij_channels) {
free(sw);
return NULL;
@@ -876,18 +876,10 @@ static int lash_core(lash_t * p_lash)
int output_link2, i_next_switch2;
int cycle_found2 = 0;
int status = 0;
- int *switch_bitmap = NULL; /* Bitmap to check if we have processed this pair */
+ int *switch_bitmap; /* Bitmap to check if we have processed this pair */
OSM_LOG_ENTER(p_log);
- switch_bitmap =
- (int *)malloc(num_switches * num_switches * sizeof(int));
- if (!switch_bitmap) {
- OSM_LOG(p_log, OSM_LOG_ERROR, "ERR 4D04: "
- "Failed allocating switch_bitmap - out of memory\n");
- goto Exit;
- }
-
for (i = 0; i < num_switches; i++) {
shortest_path(p_lash, i);
@@ -901,14 +893,19 @@ static int lash_core(lash_t * p_lash)
}
for (j = 0; j < num_switches; j++) {
- for (k = 0; k < num_switches; k++) {
- switch_bitmap[j * num_switches + k] = 0;
- }
switches[j]->used_channels = 0;
switches[j]->q_state = UNQUEUED;
}
}
+ switch_bitmap = malloc(num_switches * num_switches * sizeof(int));
+ if (!switch_bitmap) {
+ OSM_LOG(p_log, OSM_LOG_ERROR, "ERR 4D04: "
+ "Failed allocating switch_bitmap - out of memory\n");
+ goto Exit;
+ }
+ memset(switch_bitmap, 0, num_switches * num_switches * sizeof(int));
+
for (i = 0; i < num_switches; i++) {
for (dest_switch = 0; dest_switch < num_switches; dest_switch++)
if (dest_switch != i && switch_bitmap[i * num_switches + dest_switch] == 0) {
@@ -999,11 +996,6 @@ static int lash_core(lash_t * p_lash)
switch_bitmap[i * num_switches + dest_switch] = 1;
switch_bitmap[dest_switch * num_switches + i] = 1;
}
-
- for (j = 0; j < num_switches; j++) {
- switches[j]->used_channels = 0;
- switches[j]->q_state = UNQUEUED;
- }
}
OSM_LOG(p_log, OSM_LOG_INFO,
--
1.6.0.1.196.g01914
More information about the general
mailing list