Hi Sasha, Some code refactoring: setting entry in the lid matrices should be done per port group.
Signed-off-by: Yevgeny Kliteynik <[email protected]> --- opensm/opensm/osm_ucast_ftree.c | 66 +++++++++++++++++--------------------- 1 files changed, 30 insertions(+), 36 deletions(-) diff --git a/opensm/opensm/osm_ucast_ftree.c b/opensm/opensm/osm_ucast_ftree.c index e841368..12be465 100644 --- a/opensm/opensm/osm_ucast_ftree.c +++ b/opensm/opensm/osm_ucast_ftree.c @@ -698,6 +698,27 @@ 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 +2009,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 +2224,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 +2307,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 _______________________________________________ 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
