This simplifies osm_port_t setup procedure - it will always have valid
p_physp pointer (for switches it will be initialized at a node creation
time), we will not need to run over node's physp list anymore.

Signed-off-by: Sasha Khapyorsky <[EMAIL PROTECTED]>
---
 opensm/include/opensm/osm_port.h  |   29 -----------------------
 opensm/opensm/osm_node.c          |   19 +++++++++++++++
 opensm/opensm/osm_port.c          |   45 +++++-------------------------------
 opensm/opensm/osm_port_info_rcv.c |    2 -
 4 files changed, 26 insertions(+), 69 deletions(-)

diff --git a/opensm/include/opensm/osm_port.h b/opensm/include/opensm/osm_port.h
index bba4e44..1bf737c 100644
--- a/opensm/include/opensm/osm_port.h
+++ b/opensm/include/opensm/osm_port.h
@@ -1429,35 +1429,6 @@ osm_get_port_by_base_lid(IN const osm_subn_t * const 
p_subn,
 *       Port
 *********/
 
-/****f* OpenSM: Port/osm_port_add_new_physp
-* NAME
-*      osm_port_add_new_physp
-*
-* DESCRIPTION
-*      Adds a new physical port to the logical collection owned by the Port.
-*      Physical Ports added here must share the same GUID as the Port.
-*
-* SYNOPSIS
-*/
-void
-osm_port_add_new_physp(IN osm_port_t * const p_port, IN const uint8_t 
port_num);
-/*
-* PARAMETERS
-*      p_port
-*              [in] Pointer to a Port object.
-*
-*      port_num
-*              [in] Port number to add.
-*
-* RETURN VALUE
-*      None.
-*
-* NOTES
-*
-* SEE ALSO
-*      Port
-*********/
-
 /****f* OpenSM: Port/osm_port_add_mgrp
 * NAME
 *      osm_port_add_mgrp
diff --git a/opensm/opensm/osm_node.c b/opensm/opensm/osm_node.c
index 39f4181..176f916 100644
--- a/opensm/opensm/osm_node.c
+++ b/opensm/opensm/osm_node.c
@@ -86,6 +86,23 @@ osm_node_init_physp(IN osm_node_t * const p_node,
 
 /**********************************************************************
  **********************************************************************/
+static void node_init_physp0(IN osm_node_t * const p_node,
+                            IN const osm_madw_t * const p_madw)
+{
+       ib_smp_t *p_smp;
+       ib_node_info_t *p_ni;
+
+       p_smp = osm_madw_get_smp_ptr(p_madw);
+       p_ni = (ib_node_info_t *) ib_smp_get_payload_ptr(p_smp);
+
+       osm_physp_init(&p_node->physp_table[0],
+                      p_ni->port_guid, 0, p_node,
+                      osm_madw_get_bind_handle(p_madw),
+                      p_smp->hop_count, p_smp->initial_path);
+}
+
+/**********************************************************************
+ **********************************************************************/
 osm_node_t *osm_node_new(IN const osm_madw_t * const p_madw)
 {
        osm_node_t *p_node;
@@ -132,6 +149,8 @@ osm_node_t *osm_node_new(IN const osm_madw_t * const p_madw)
                osm_physp_construct(&p_node->physp_table[i]);
 
        osm_node_init_physp(p_node, p_madw);
+       if (p_ni->node_type == IB_NODE_TYPE_SWITCH)
+               node_init_physp0(p_node, p_madw);
        p_node->print_desc = strdup("<unknown>");
 
        return (p_node);
diff --git a/opensm/opensm/osm_port.c b/opensm/opensm/osm_port.c
index 79f42ac..ffc4fb0 100644
--- a/opensm/opensm/osm_port.c
+++ b/opensm/opensm/osm_port.c
@@ -153,9 +153,9 @@ osm_port_init(IN osm_port_t * const p_port,
              IN const ib_node_info_t * p_ni,
              IN const osm_node_t * const p_parent_node)
 {
-       uint32_t port_index;
        ib_net64_t port_guid;
        osm_physp_t *p_physp;
+       uint8_t port_num;
 
        CL_ASSERT(p_port);
        CL_ASSERT(p_ni);
@@ -166,27 +166,18 @@ osm_port_init(IN osm_port_t * const p_port,
        p_port->p_node = (struct _osm_node *)p_parent_node;
        port_guid = p_ni->port_guid;
        p_port->guid = port_guid;
+       port_num = p_ni->node_type == IB_NODE_TYPE_SWITCH ?
+               0 : ib_node_info_get_local_port_num(p_ni);
 
        /*
           Get the pointers to the physical node objects "owned" by this
           logical port GUID.
-          For switches, all the ports are owned; for HCA's and routers,
+          For switches, port '0' is owned; for HCA's and routers,
           only the singular part that has this GUID is owned.
         */
-       for (port_index = 0; port_index < p_parent_node->physp_tbl_size;
-            port_index++) {
-               p_physp = osm_node_get_physp_ptr(p_parent_node, port_index);
-               /*
-                  Because much of the PortInfo data is only valid
-                  for port 0 on switches, try to keep the lowest
-                  possible value of default_port_num.
-                */
-               if (osm_physp_is_valid(p_physp) &&
-                   port_guid == osm_physp_get_port_guid(p_physp)) {
-                       p_port->p_physp = p_physp;
-                       break;
-               }
-       }
+       p_physp = osm_node_get_physp_ptr(p_parent_node, port_num);
+       CL_ASSERT(port_guid == osm_physp_get_port_guid(p_physp));
+       p_port->p_physp = p_physp;
 }
 
 /**********************************************************************
@@ -258,28 +249,6 @@ osm_get_port_by_base_lid(IN const osm_subn_t * const 
p_subn,
 
 /**********************************************************************
  **********************************************************************/
-void
-osm_port_add_new_physp(IN osm_port_t * const p_port, IN const uint8_t port_num)
-{
-       osm_physp_t *p_physp;
-
-       p_physp = osm_node_get_physp_ptr(p_port->p_node, port_num);
-       CL_ASSERT(osm_physp_is_valid(p_physp));
-       CL_ASSERT(osm_physp_get_port_guid(p_physp) == p_port->guid);
-
-       /*
-          For switches, we generally want to use Port 0, which is
-          the management port as the default Physical Port.
-          The LID value in the PortInfo for example, is only valid
-          for port 0 on switches.
-        */
-       if (!osm_physp_is_valid(p_port->p_physp) ||
-           port_num < p_port->p_physp->port_num)
-               p_port->p_physp = p_physp;
-}
-
-/**********************************************************************
- **********************************************************************/
 ib_api_status_t
 osm_port_add_mgrp(IN osm_port_t * const p_port, IN const ib_net16_t mlid)
 {
diff --git a/opensm/opensm/osm_port_info_rcv.c 
b/opensm/opensm/osm_port_info_rcv.c
index 8cc33c5..b91d1a5 100644
--- a/opensm/opensm/osm_port_info_rcv.c
+++ b/opensm/opensm/osm_port_info_rcv.c
@@ -652,8 +652,6 @@ void osm_pi_rcv_process(IN void *context, IN void *data)
                                       p_node,
                                       osm_madw_get_bind_handle(p_madw),
                                       p_smp->hop_count, p_smp->initial_path);
-
-                       osm_port_add_new_physp(p_port, port_num);
                } else {
                        /*
                           Update the directed route path to this port
-- 
1.5.4.rc5

_______________________________________________
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