opensm/osm_mcast_mgr.c: fix bug in MC root switch calculation
PATCH 1/1 opensm/osm_mcast_mgr.c: fix bug in MC root switch calculation
In newly introduced MC group root switch calculation method as it is now, sw->num_of_mcm field (number of MC group members connected to this switch) is updated only once when switch is first visited (for some reason it is under such 'if' block), as result it will always '1' or '0', which is obviously not correct and breaks the following hops calculations algorithm. Fix this - update sw->num_of_mcm field unconditionally.
--- opensm/opensm/osm_mcast_mgr.c | 17 ++++++++--------- 1 files changed, 8 insertions(+), 9 deletions(-)
opensm/opensm/osm_mcast_mgr.c +8 -9
@@ -190,18 +190,17 @@ static void mcast_mgr_build_switch_map(osm_sm_t * sm, remote_sw = remote_node->sw; port_guid =osm_node_get_node_guid (remote_node);if (cl_qmap_get (p_mcast_member_sw_tbl, port_guid) == -cl_qmap_end (p_mcast_member_sw_tbl)) { +cl_qmap_end (p_mcast_member_sw_tbl))/* insert switch to table */ cl_qmap_insert (p_mcast_member_sw_tbl, port_guid, &remote_sw->mgrp_item); -/* New element in the table */ -if (p_port->p_node->sw) -/* the switch is MC member */ - remote_sw->is_mc_member =1 ; -else -/* for others - update MC count */ - remote_sw->num_of_mcm++; - } + +if (p_port->p_node->sw) +/* the switch is MC member */ + remote_sw->is_mc_member =1 ; +else +/* for others - update MC count */ + remote_sw->num_of_mcm++; }OSM_LOG_EXIT (sm->p_log); }
Signature · 6 lines
1.6.6.1 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 1/1 opensm/osm_mcast_mgr.c: preserve root switch calculation functionality
I'm not sure that this is a bug, but anyway. Now for MC group spanning tree root switch calculation it uses max hops criteria differently - accumulated hops for all MC members connected to the switch against previous maximal one.
This patch makes it functionally exactly as it was.
--- opensm/opensm/osm_mcast_mgr.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)
opensm/opensm/osm_mcast_mgr.c +2 -1
@@ -253,7 +253,8 @@ static float mcast_mgr_compute_max_hops(osm_sm_t * sm, cl_qmap_t * m, sw =cl_item_obj (i, sw, mgrp_item); lid =cl_ntoh16 (osm_node_get_base_lid (sw->p_node,0 )); hops =osm_switch_get_least_hops (this_sw, lid); - hops = (hops +1 ) * sw->num_of_mcm + hops * sw->is_mc_member; +if (!sw->is_mc_member) + hops +=1 ;if (hops > max_hops) max_hops = hops; }
Signature · 6 lines
1.6.6.1 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] opensm/osm_mcast_mgr.c: preserve root switch calculation functionality
Quoted 7 lines · Sasha Khapyorsky
I'm not sure that this is a bug, but anyway. Now for MC group spanning tree root switch calculation it uses max hops criteria differently - accumulated hops for all MC members connected to the switch against previous maximal one.
This patch makes it functionally exactly as it was.
right. otherwise it is sort of average hops.
Quoted 11 lines
---
opensm/opensm/osm_mcast_mgr.c | 3 ++-1 files changed, 2 insertions(+), 1 deletions(-)opensm/opensm/osm_mcast_mgr.c +0
-0
opensm/opensm/osm_mcast_mgr.c static float mcast_mgr_compute_max_hops(osm_sm_t * sm, cl_qmap_t * m, · line 257
Quoted 6 lines
opensm/opensm/osm_mcast_mgr.c +2
-1@@ -253,7 +253,8 @@ static float mcast_mgr_compute_max_hops(osm_sm_t * sm, cl_qmap_t * m, sw = cl_item_obj(i, sw, mgrp_item); lid = cl_ntoh16(osm_node_get_base_lid(sw->p_node, 0)); hops = osm_switch_get_least_hops(this_sw, lid); - hops = (hops + 1) * sw->num_of_mcm + hops * sw->is_mc_member; + if (!sw->is_mc_member) + hops += 1;
I think that this condition is may be avoided since if the switch is a member in the MC group then the packet
still needs to get to the CPU that is running on it (enhanced port) and this is similar to additional hop
in case of host (assuming that host cpu is much faster then switch cpu).
Eli
Quoted 11 lines
opensm/opensm/osm_mcast_mgr.c +0
-1if (hops > max_hops) max_hops = hops; } --1.6.6.1
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html