Hi Hal,

A small optimization to creation of fat-tree internal data structures.
Using the pointers from osm_node to osm_switch that Sasha has added
a while ago, it is enough to scan the OSM node_guid table only once
to create all the fat-tree internal nodes.

Please apply to master only.

-- Yevgeny

Signed-off-by:  Yevgeny Kliteynik <[EMAIL PROTECTED]>
---
osm/opensm/osm_ucast_ftree.c |   51 +++++------------------------------------
1 files changed, 7 insertions(+), 44 deletions(-)

diff --git a/osm/opensm/osm_ucast_ftree.c b/osm/opensm/osm_ucast_ftree.c
index ca51484..3bad2fc 100644
--- a/osm/opensm/osm_ucast_ftree.c
+++ b/osm/opensm/osm_ucast_ftree.c
@@ -2365,36 +2365,13 @@ __osm_ftree_fabric_route_to_switches(
 ***************************************************/

static int -__osm_ftree_fabric_populate_switches(
-   IN  ftree_fabric_t * p_ftree)
-{
-   osm_switch_t * p_osm_sw;
-   osm_switch_t * p_next_osm_sw;
-
-   OSM_LOG_ENTER(&p_ftree->p_osm->log, __osm_ftree_fabric_populate_switches);
-
-   p_next_osm_sw = (osm_switch_t 
*)cl_qmap_head(&p_ftree->p_osm->subn.sw_guid_tbl);
-   while( p_next_osm_sw != (osm_switch_t 
*)cl_qmap_end(&p_ftree->p_osm->subn.sw_guid_tbl) )
-   {
-      p_osm_sw = p_next_osm_sw;
-      p_next_osm_sw = (osm_switch_t *)cl_qmap_next(&p_osm_sw->map_item );
-      __osm_ftree_fabric_add_sw(p_ftree,p_osm_sw);
-   }
-   OSM_LOG_EXIT(&p_ftree->p_osm->log);
-   return 0;
-} /* __osm_ftree_fabric_populate_switches() */
-
-/***************************************************
- ***************************************************/
-
-static int -__osm_ftree_fabric_populate_hcas(
+__osm_ftree_fabric_populate_nodes(
   IN  ftree_fabric_t * p_ftree)
{
   osm_node_t   * p_osm_node;
   osm_node_t   * p_next_osm_node;

-   OSM_LOG_ENTER(&p_ftree->p_osm->log, __osm_ftree_fabric_populate_hcas);
+   OSM_LOG_ENTER(&p_ftree->p_osm->log, __osm_ftree_fabric_populate_nodes);

   p_next_osm_node = (osm_node_t 
*)cl_qmap_head(&p_ftree->p_osm->subn.node_guid_tbl);
   while( p_next_osm_node != (osm_node_t 
*)cl_qmap_end(&p_ftree->p_osm->subn.node_guid_tbl) )
@@ -2409,11 +2386,11 @@ __osm_ftree_fabric_populate_hcas(
         case IB_NODE_TYPE_ROUTER:
            break;
         case IB_NODE_TYPE_SWITCH:
-            /* all the switches added separately */
+            __osm_ftree_fabric_add_sw(p_ftree,p_osm_node->sw);
            break;
         default:
            osm_log(&p_ftree->p_osm->log, OSM_LOG_ERROR,
-                    "__osm_ftree_fabric_populate_hcas: ERR AB0E: "
+                    "__osm_ftree_fabric_populate_nodes: ERR AB0E: "
                    "Node GUID 0x%016" PRIx64 " - Unknown node type: %s\n",
                    cl_ntoh64(osm_node_get_node_guid(p_osm_node)),
                    ib_get_node_type_str(osm_node_get_type(p_osm_node)));
@@ -2424,7 +2401,7 @@ __osm_ftree_fabric_populate_hcas(

   OSM_LOG_EXIT(&p_ftree->p_osm->log);
   return 0;
-} /* __osm_ftree_fabric_populate_hcas() */
+} /* __osm_ftree_fabric_populate_nodes() */

/***************************************************
 ***************************************************/
@@ -2962,22 +2939,8 @@ __osm_ftree_construct_fabric(

   osm_log(&p_ftree->p_osm->log, OSM_LOG_VERBOSE,
           "__osm_ftree_construct_fabric: "
-           "Populating FatTree switch table\n");
- /* ToDo: now that the pointer from node to switch exists, - no need to fill the switch table in a separate loop */
-   if (__osm_ftree_fabric_populate_switches(p_ftree) != 0)
-   {
-      osm_log(&p_ftree->p_osm->log, OSM_LOG_SYS,
-              "Fabric topology is not fat-tree - "
-              "falling back to default routing\n");
-      status = -1;
-      goto Exit;
-   }
-
-   osm_log(&p_ftree->p_osm->log, OSM_LOG_VERBOSE,
-           "__osm_ftree_construct_fabric: "
-           "Populating FatTree HCA table\n");
-   if (__osm_ftree_fabric_populate_hcas(p_ftree) != 0)
+           "Populating FatTree Switch and HCA tables\n");
+   if (__osm_ftree_fabric_populate_nodes(p_ftree) != 0)
   {
      osm_log(&p_ftree->p_osm->log, OSM_LOG_SYS,
              "Fabric topology is not fat-tree - "
--
1.4.4.1.GIT


_______________________________________________
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

Reply via email to