Hi Yevgeny,

On 10:07 Mon 08 Oct     , Yevgeny Kliteynik wrote:
> 
>  I noticed the following problem a while ago - when the whole
>  duplicated guids and re-reading files mails were running,
>  but never had a chance to dig deeper.
> 
>  Anyway, sometimes OpenSM 'sees' the same HCA ports twice.

It is just how osm_state_mgr_report() is done - it iterates nodes by
port_guid_tbl map and not by node_guid_tbl. I have no idea why it was
done this way, likely just a bug. Anyway the patch below fixes this.

Sasha


commit b272c11fa910And07a0b02d5544ea75507f69515c
Author: Sasha Khapyorsky <[EMAIL PROTECTED]>
Date:   Mon Oct 8 15:02:54 2007 +0200

    opensm: report message fix
    
    Generate OpenSM report message node by node (not by ports), and so
    eliminate duplicated nodes reporting.
    
    Signed-off-by: Sasha Khapyorsky <[EMAIL PROTECTED]>

diff --git a/opensm/opensm/osm_state_mgr.c b/opensm/opensm/osm_state_mgr.c
index e5ef89d..4646c8a 100644
--- a/opensm/opensm/osm_state_mgr.c
+++ b/opensm/opensm/osm_state_mgr.c
@@ -1169,7 +1169,6 @@ static void __osm_topology_file_create(IN osm_state_mgr_t 
* const p_mgr)
 static void __osm_state_mgr_report(IN osm_state_mgr_t * const p_mgr)
 {
        const cl_qmap_t *p_tbl;
-       const osm_port_t *p_port;
        const osm_node_t *p_node;
        const osm_physp_t *p_physp;
        const osm_physp_t *p_remote_physp;
@@ -1191,23 +1190,22 @@ static void __osm_state_mgr_report(IN osm_state_mgr_t * 
const p_mgr)
                       ": #  : Sta : LID  : LMC : MTU  : LWA : LSA : Port GUID  
  "
                       "    : Neighbor Port (Port #)\n");
 
-       p_tbl = &p_mgr->p_subn->port_guid_tbl;
+       p_tbl = &p_mgr->p_subn->node_guid_tbl;
 
        /*
         * Hold lock non-exclusively while we perform these read-only 
operations.
         */
 
        CL_PLOCK_ACQUIRE(p_mgr->p_lock);
-       p_port = (osm_port_t *) cl_qmap_head(p_tbl);
-       while (p_port != (osm_port_t *) cl_qmap_end(p_tbl)) {
+       p_node = (osm_node_t *) cl_qmap_head(p_tbl);
+       while (p_node != (osm_node_t *) cl_qmap_end(p_tbl)) {
                if (osm_log_is_active(p_mgr->p_log, OSM_LOG_DEBUG)) {
                        osm_log(p_mgr->p_log, OSM_LOG_DEBUG,
                                "__osm_state_mgr_report: "
-                               "Processing port 0x%016" PRIx64 "\n",
-                               cl_ntoh64(osm_port_get_guid(p_port)));
+                               "Processing node 0x%016" PRIx64 "\n",
+                               cl_ntoh64(osm_node_get_node_guid(p_node)));
                }
 
-               p_node = p_port->p_node;
                node_type = osm_node_get_type(p_node);
                if (node_type == IB_NODE_TYPE_SWITCH)
                        start_port = 0;
@@ -1311,7 +1309,7 @@ static void __osm_state_mgr_report(IN osm_state_mgr_t * 
const p_mgr)
                osm_log_printf(p_mgr->p_log, OSM_LOG_VERBOSE,
                               
"------------------------------------------------------"
                               
"------------------------------------------------\n");
-               p_port = (osm_port_t *) cl_qmap_next(&p_port->map_item);
+               p_node = (osm_node_t *) cl_qmap_next(&p_node->map_item);
        }
 
        CL_PLOCK_RELEASE(p_mgr->p_lock);
_______________________________________________
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