Signed-off-by: Hal Rosenstock <[email protected]>
---
diff --git a/opensm/opensm/osm_ucast_updn.c b/opensm/opensm/osm_ucast_updn.c
index ced076a..c46b033 100644
--- a/opensm/opensm/osm_ucast_updn.c
+++ b/opensm/opensm/osm_ucast_updn.c
@@ -424,7 +424,7 @@ static void updn_find_root_nodes_by_min_hop(OUT updn_t * 
p_updn)
        double thd1, thd2;
        unsigned i, cas_num = 0;
        unsigned *cas_per_sw;
-       uint16_t lid_ho;
+       uint16_t lid_ho = 0;
 
        OSM_LOG_ENTER(&p_osm->log);
 
@@ -432,13 +432,21 @@ static void updn_find_root_nodes_by_min_hop(OUT updn_t * 
p_updn)
                "Current number of ports in the subnet is %d\n",
                cl_qmap_count(&p_osm->subn.port_guid_tbl));
 
-       cas_per_sw = malloc(p_osm->subn.max_ucast_lid_ho * sizeof(*cas_per_sw));
+       for (item = cl_qmap_head(&p_updn->p_osm->subn.sw_guid_tbl);
+            item != cl_qmap_end(&p_updn->p_osm->subn.sw_guid_tbl);
+            item = cl_qmap_next(item)) {
+               p_sw = (osm_switch_t *)item;
+               if (p_sw->lft_size > lid_ho)
+                       lid_ho = p_sw->lft_size;
+       }
+
+       cas_per_sw = malloc(lid_ho * sizeof(*cas_per_sw));
        if (!cas_per_sw) {
                OSM_LOG(&p_osm->log, OSM_LOG_ERROR, "ERR AA14: "
                        "cannot alloc mem for CAs per switch counter array\n");
                goto _exit;
        }
-       memset(cas_per_sw, 0, p_osm->subn.max_ucast_lid_ho * 
sizeof(*cas_per_sw));
+       memset(cas_per_sw, 0, lid_ho * sizeof(*cas_per_sw));
 
        /* Find the Maximum number of CAs (and routers) for histogram 
normalization */
        OSM_LOG(&p_osm->log, OSM_LOG_VERBOSE,
--
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

Reply via email to