When router port is connected directly to CA don't try handle it as
switch external ports (update pkey table and enforce partitions).
Router ports are handled by partition manager as end ports.

Signed-off-by: Sasha Khapyorsky <[EMAIL PROTECTED]>
---

 osm/opensm/osm_pkey_mgr.c |   43 ++++++++++++++++++++-----------------------
 1 files changed, 20 insertions(+), 23 deletions(-)

diff --git a/osm/opensm/osm_pkey_mgr.c b/osm/opensm/osm_pkey_mgr.c
index 938632e..bdb3ae4 100644
--- a/osm/opensm/osm_pkey_mgr.c
+++ b/osm/opensm/osm_pkey_mgr.c
@@ -307,7 +307,8 @@ __osm_pkey_mgr_process_physical_port(
 static void
 osm_pkey_mgr_update_peer_port(
    const osm_pkey_mgr_t * const p_mgr,
-   const osm_port_t * const p_port )
+   const osm_port_t * const p_port,
+   boolean_t enforce)
 {
    osm_physp_t *p, *peer;
    osm_node_t *p_node;
@@ -326,18 +327,25 @@ osm_pkey_mgr_update_peer_port(
    if ( !peer || !osm_physp_is_valid( peer ) )
       return;
    p_node = osm_physp_get_node_ptr( peer );
-   if ( osm_node_get_type( p_node ) == IB_NODE_TYPE_CA )
+   if ( osm_node_get_type( p_node ) != IB_NODE_TYPE_SWITCH )
       return;
-   else if ( osm_node_get_type( p_node ) == IB_NODE_TYPE_SWITCH ) {
-     if (!(p_sw = osm_get_switch_by_guid( p_mgr->p_subn,
-                                          osm_node_get_node_guid( p_node ))) ||
-        !(p_si = osm_switch_get_si_ptr( p_sw )) ||
-        !p_si->enforce_cap)
-       return;
+
+   p_sw = osm_get_switch_by_guid( p_mgr->p_subn, osm_node_get_node_guid( 
p_node ));
+   if (!p_sw || !(p_si = osm_switch_get_si_ptr( p_sw )) ||
+         !p_si->enforce_cap)
+      return;
+
+   if (osm_pkey_mgr_enforce_partition( p_mgr, peer, enforce ) != IB_SUCCESS) {
+      osm_log( p_mgr->p_log, OSM_LOG_ERROR,
+               "osm_pkey_mgr_update_peer_port: "
+               "osm_pkey_mgr_enforce_partition() failed to update "
+               "node 0x%016" PRIx64 " port %u\n",
+               cl_ntoh64( osm_node_get_node_guid( p_node ) ),
+               osm_physp_get_port_num( peer ) );
    }
 
-   if (p_mgr->p_subn->opt.no_partition_enforcement == TRUE)
-      goto _enforce_port;
+   if (enforce == FALSE)
+      return;
 
    p_pkey_tbl = osm_physp_get_pkey_tbl( p );
    p_peer_pkey_tbl = osm_physp_get_pkey_tbl( peer );
@@ -377,18 +385,6 @@ osm_pkey_mgr_update_peer_port(
                cl_ntoh64( osm_node_get_node_guid( p_node ) ),
                osm_physp_get_port_num( peer ) );
    }
-
- _enforce_port:
-   if (osm_pkey_mgr_enforce_partition( p_mgr, peer,
-                 p_mgr->p_subn->opt.no_partition_enforcement == FALSE ) !=
-                    IB_SUCCESS) {
-      osm_log( p_mgr->p_log, OSM_LOG_ERROR,
-               "osm_pkey_mgr_update_peer_port: "
-               "osm_pkey_mgr_enforce_partition() failed to update "
-               "node 0x%016" PRIx64 " port %u\n",
-               cl_ntoh64( osm_node_get_node_guid( p_node ) ),
-               osm_physp_get_port_num( peer ) );
-   }
 }
 
 /**********************************************************************
@@ -484,7 +480,8 @@ osm_pkey_mgr_process(
       if ( osm_node_get_type( osm_port_get_parent_node( p_port ) ) !=
            IB_NODE_TYPE_SWITCH )
       {
-         osm_pkey_mgr_update_peer_port( p_mgr, p_port );
+         osm_pkey_mgr_update_peer_port( p_mgr, p_port,
+              !p_mgr->p_subn->opt.no_partition_enforcement);
       }
    }
 
_______________________________________________
openib-general mailing list
[email protected]
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to