[ofa-general] [PATCH v2] opensm/osm_ucast_ftree.c: some refactoring

Yevgeny Kliteynik kliteyn at dev.mellanox.co.il
Thu Mar 12 16:04:41 PDT 2009


Hi Sasha,

Some code refactoring: setting entry in the lid
matrices should be done per port group.

V2 - patch reworked.

Signed-off-by: Yevgeny Kliteynik <kliteyn at dev.mellanox.co.il>
---
 opensm/opensm/osm_ucast_ftree.c |   67 ++++++++++++++++++---------------------
 1 files changed, 31 insertions(+), 36 deletions(-)

diff --git a/opensm/opensm/osm_ucast_ftree.c b/opensm/opensm/osm_ucast_ftree.c
index e841368..941fc79 100644
--- a/opensm/opensm/osm_ucast_ftree.c
+++ b/opensm/opensm/osm_ucast_ftree.c
@@ -698,6 +698,28 @@ static inline cl_status_t sw_set_hops(IN ftree_sw_t * p_sw, IN uint16_t lid_ho,
 	return osm_switch_set_hops(p_sw->p_osm_sw, lid_ho, port_num, hops);
 }

+/***************************************************/
+
+static int
+set_hops_on_remote_sw(IN ftree_port_group_t * p_group,
+		      IN ib_net16_t target_lid,
+		      IN uint8_t hops)
+{
+	ftree_port_t * p_port;
+	uint8_t i, ports_num;
+	ftree_sw_t * p_remote_sw = p_group->remote_hca_or_sw.p_sw;
+
+	CL_ASSERT(p_group->remote_node_type == IB_NODE_TYPE_SWITCH);
+	ports_num = (uint8_t) cl_ptr_vector_get_size(&p_group->ports);
+	for (i = 0; i < ports_num; i++) {
+		cl_ptr_vector_at(&p_group->ports, i, (void *)&p_port);
+		if (sw_set_hops(p_remote_sw, cl_ntoh16(target_lid),
+				p_port->remote_port_num, hops));
+			return -1;
+	}
+	return 0;
+}
+
 /***************************************************
  **
  ** ftree_hca_t functions
@@ -1988,20 +2010,10 @@ fabric_route_upgoing_by_going_down(IN ftree_fabric_t * p_ftree,
 			/* On the remote switch that is pointed by the p_group,
 			   set hops for ALL the ports in the remote group. */

-			for (j = 0; j < ports_num; j++) {
-				cl_ptr_vector_at(&p_group->ports, j,
-						 (void *)&p_port);
-
-				sw_set_hops(p_remote_sw,
-					    cl_ntoh16(target_lid),
-					    p_port->remote_port_num,
-					    ((target_rank -
-					      highest_rank_in_route) +
-					     (p_remote_sw->rank -
-					      highest_rank_in_route)
-					     + reverse_hops * 2));
-			}
-
+			set_hops_on_remote_sw(p_group, target_lid,
+				((target_rank - highest_rank_in_route) +
+				(p_remote_sw->rank - highest_rank_in_route) +
+				reverse_hops * 2));
 		}

 		/* The number of upgoing routes is tracked in the
@@ -2213,18 +2225,9 @@ static void fabric_route_downgoing_by_going_up(IN ftree_fabric_t * p_ftree,
 			/* On the remote switch that is pointed by the min_group,
 			   set hops for ALL the ports in the remote group. */

-			ports_num =
-			    (uint16_t) cl_ptr_vector_get_size(&p_min_group->
-							      ports);
-			for (j = 0; j < ports_num; j++) {
-				cl_ptr_vector_at(&p_min_group->ports, j,
-						 (void *)&p_port);
-				sw_set_hops(p_remote_sw,
-					    cl_ntoh16(target_lid),
-					    p_port->remote_port_num,
-					    target_rank - p_remote_sw->rank +
-					    2 * reverse_hops);
-			}
+			set_hops_on_remote_sw(p_min_group, target_lid,
+				target_rank - p_remote_sw->rank +
+				2 * reverse_hops);
 		}

 		/* Recursion step:
@@ -2305,16 +2308,8 @@ static void fabric_route_downgoing_by_going_up(IN ftree_fabric_t * p_ftree,
 		/* On the remote switch that is pointed by the p_group,
 		   set hops for ALL the ports in the remote group. */

-		ports_num = (uint16_t) cl_ptr_vector_get_size(&p_group->ports);
-		for (j = 0; j < ports_num; j++) {
-			cl_ptr_vector_at(&p_group->ports, j, (void *)&p_port);
-
-			sw_set_hops(p_remote_sw,
-				    cl_ntoh16(target_lid),
-				    p_port->remote_port_num,
-				    target_rank - p_remote_sw->rank +
-				    2 * reverse_hops);
-		}
+		set_hops_on_remote_sw(p_group, target_lid,
+			target_rank - p_remote_sw->rank + 2 * reverse_hops);

 		/* Recursion step:
 		   Assign downgoing ports by stepping up, starting on REMOTE switch. */
-- 
1.5.1.4





More information about the general mailing list