[ofa-general] [PATCH][9] opensm: lash preparation
Robert Pearson
rpearson at systemfabricworks.com
Tue Nov 11 12:33:52 PST 2008
Sasha,
Here is the ninth patch implementing the mesh analysis algorithm.
This patch makes some minor cleanups in osm_ucast_lash.c in preparation for
next steps.
The main change is to minimize the occurrences of phys_connections.
Also there are a few nits:
- delete banner for local variables that moved to ...lash.h
- fix bad return value of osm_mesh_node_create fails
- clear sw->p_sw->priv on switch cleanup
- fix spelling error in comment
- discover_network_properties returns an error which was not checked
Regards,
Bob Pearson
Signed-off-by: Bob Pearson <rpearson at systemfabricworks.com>
----
diff --git a/opensm/opensm/osm_ucast_lash.c b/opensm/opensm/osm_ucast_lash.c
index b9394af..95dbcc2 100644
--- a/opensm/opensm/osm_ucast_lash.c
+++ b/opensm/opensm/osm_ucast_lash.c
@@ -55,10 +55,6 @@
#include <opensm/osm_mesh.h>
#include <opensm/osm_ucast_lash.h>
-/* //////////////////////////// */
-/* Local types */
-/* //////////////////////////// */
-
static cdg_vertex_t *create_cdg_vertex(unsigned num_switches)
{
cdg_vertex_t *cdg_vertex = (cdg_vertex_t *)
malloc(sizeof(cdg_vertex_t));
@@ -150,6 +146,11 @@ static int cycle_exists(cdg_vertex_t * start,
cdg_vertex_t * current,
return cycle_found;
}
+static inline int get_next_switch(lash_t *p_lash, int sw, int link)
+{
+ return p_lash->switches[sw]->phys_connections[link];
+}
+
static void remove_semipermanent_depend_for_sp(lash_t * p_lash, int sw,
int dest_switch, int lane)
{
@@ -161,7 +162,7 @@ static void remove_semipermanent_depend_for_sp(lash_t *
p_lash, int sw,
int found;
output_link = switches[sw]->routing_table[dest_switch].out_link;
- i_next_switch = switches[sw]->phys_connections[output_link];
+ i_next_switch = get_next_switch(p_lash, sw, output_link);
while (sw != dest_switch) {
v = cdg_vertex_matrix[lane][sw][i_next_switch];
@@ -177,8 +178,7 @@ static void remove_semipermanent_depend_for_sp(lash_t *
p_lash, int sw,
if (i_next_switch != dest_switch) {
next_link =
switches[i_next_switch]->routing_table[dest_switch].out_link;
- i_next_next_switch =
-
switches[i_next_switch]->phys_connections[next_link];
+ i_next_next_switch = get_next_switch(p_lash,
i_next_switch, next_link);
found = 0;
for (i = 0; i < v->num_dependencies; i++)
@@ -211,8 +211,7 @@ static void remove_semipermanent_depend_for_sp(lash_t *
p_lash, int sw,
output_link =
switches[sw]->routing_table[dest_switch].out_link;
if (sw != dest_switch)
- i_next_switch =
- switches[sw]->phys_connections[output_link];
+ i_next_switch = get_next_switch(p_lash, sw,
output_link);
}
}
@@ -312,7 +311,7 @@ static void generate_cdg_for_sp(lash_t * p_lash, int sw,
int dest_switch,
cdg_vertex_t *v, *prev = NULL;
output_link = switches[sw]->routing_table[dest_switch].out_link;
- next_switch = switches[sw]->phys_connections[output_link];
+ next_switch = get_next_switch(p_lash, sw, output_link);
while (sw != dest_switch) {
@@ -368,7 +367,7 @@ static void generate_cdg_for_sp(lash_t * p_lash, int sw,
int dest_switch,
if (sw != dest_switch) {
CL_ASSERT(output_link != NONE);
- next_switch =
switches[sw]->phys_connections[output_link];
+ next_switch = get_next_switch(p_lash, sw,
output_link);
}
prev = v;
@@ -384,7 +383,7 @@ static void set_temp_depend_to_permanent_for_sp(lash_t *
p_lash, int sw,
cdg_vertex_t *v;
output_link = switches[sw]->routing_table[dest_switch].out_link;
- next_switch = switches[sw]->phys_connections[output_link];
+ next_switch = get_next_switch(p_lash, sw, output_link);
while (sw != dest_switch) {
v = cdg_vertex_matrix[lane][sw][next_switch];
@@ -399,8 +398,7 @@ static void set_temp_depend_to_permanent_for_sp(lash_t *
p_lash, int sw,
output_link =
switches[sw]->routing_table[dest_switch].out_link;
if (sw != dest_switch)
- next_switch =
- switches[sw]->phys_connections[output_link];
+ next_switch = get_next_switch(p_lash, sw,
output_link);
}
}
@@ -414,7 +412,7 @@ static void remove_temp_depend_for_sp(lash_t * p_lash,
int sw, int dest_switch,
cdg_vertex_t *v;
output_link = switches[sw]->routing_table[dest_switch].out_link;
- next_switch = switches[sw]->phys_connections[output_link];
+ next_switch = get_next_switch(p_lash, sw, output_link);
while (sw != dest_switch) {
v = cdg_vertex_matrix[lane][sw][next_switch];
@@ -439,8 +437,7 @@ static void remove_temp_depend_for_sp(lash_t * p_lash,
int sw, int dest_switch,
output_link =
switches[sw]->routing_table[dest_switch].out_link;
if (sw != dest_switch)
- next_switch =
- switches[sw]->phys_connections[output_link];
+ next_switch = get_next_switch(p_lash, sw,
output_link);
}
}
@@ -502,10 +499,10 @@ static void balance_virtual_lanes(lash_t * p_lash,
unsigned lanes_needed)
generate_cdg_for_sp(p_lash, dest, src, min_filled_lane);
output_link =
p_lash->switches[src]->routing_table[dest].out_link;
- next_switch =
p_lash->switches[src]->phys_connections[output_link];
+ next_switch = get_next_switch(p_lash, src, output_link);
output_link2 =
p_lash->switches[dest]->routing_table[src].out_link;
- next_switch2 =
p_lash->switches[dest]->phys_connections[output_link2];
+ next_switch2 = get_next_switch(p_lash, dest, output_link2);
CL_ASSERT(cdg_vertex_matrix[min_filled_lane][src][next_switch] != NULL);
CL_ASSERT(cdg_vertex_matrix[min_filled_lane][dest][next_switch2] != NULL);
@@ -652,7 +649,7 @@ static switch_t *switch_create(lash_t * p_lash, unsigned
id, osm_switch_t * p_sw
}
if (osm_mesh_node_create(p_lash, sw))
- return -1;
+ return NULL;
sw->p_sw = p_sw;
if (p_sw)
@@ -673,6 +670,8 @@ static void switch_delete(switch_t * sw)
free(sw->phys_connections);
if (sw->routing_table)
free(sw->routing_table);
+ if (sw->p_sw)
+ sw->p_sw->priv = NULL;
free(sw);
}
@@ -875,9 +874,8 @@ static int lash_core(lash_t * p_lash)
output_link2 =
switches[dest_switch]->routing_table[i].out_link;
- i_next_switch =
switches[i]->phys_connections[output_link];
- i_next_switch2 =
-
switches[dest_switch]->phys_connections[output_link2];
+ i_next_switch =
get_next_switch(p_lash, i, output_link);
+ i_next_switch2 =
get_next_switch(p_lash, dest_switch, output_link2);
CL_ASSERT(p_lash->
cdg_vertex_matrix[v_lane][i][i_next_switch] !=
@@ -1205,7 +1203,7 @@ static void process_switches(lash_t * p_lash)
osm_switch_t *p_sw, *p_next_sw;
osm_subn_t *p_subn = &p_lash->p_osm->subn;
- /* Go through each swithc and process it. i.e build the connection
+ /* Go through each switch and process it. i.e build the connection
structure required by LASH */
p_next_sw = (osm_switch_t *) cl_qmap_head(&p_subn->sw_guid_tbl);
while (p_next_sw != (osm_switch_t *)
cl_qmap_end(&p_subn->sw_guid_tbl)) {
@@ -1229,7 +1227,9 @@ static int lash_process(void *context)
// everything starts here
lash_cleanup(p_lash);
- discover_network_properties(p_lash);
+ return_status = discover_network_properties(p_lash);
+ if (return_status != IB_SUCCESS)
+ goto Exit;
return_status = init_lash_structures(p_lash);
if (return_status != IB_SUCCESS)
More information about the general
mailing list