From: Alex Netes <[email protected]>

PortInfo may be sent without the correct M_Key

Signed-off-by: Alex Netes <[email protected]>
Signed-off-by: Hal Rosenstock <[email protected]>
---
 opensm/osm_link_mgr.c |   16 +++++++++++-----
 1 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/opensm/osm_link_mgr.c b/opensm/osm_link_mgr.c
index 2420e4f..5fdb7ca 100644
--- a/opensm/osm_link_mgr.c
+++ b/opensm/osm_link_mgr.c
@@ -149,6 +149,8 @@ static int link_mgr_set_physp_pi(osm_sm_t * sm, IN 
osm_physp_t * p_physp,
                        goto Exit;
                }
 
+               physp0 = osm_node_get_physp_ptr(p_physp->p_node, 0);
+
                if (ib_switch_info_is_enhanced_port0(&p_node->sw->switch_info)
                    == FALSE) {
 
@@ -190,6 +192,13 @@ static int link_mgr_set_physp_pi(osm_sm_t * sm, IN 
osm_physp_t * p_physp,
        p_pi->state_info2 = 0x02;
        ib_port_info_set_port_state(p_pi, port_state);
 
+       /* Determine ports' M_Key */
+       if (osm_node_get_type(p_physp->p_node) == IB_NODE_TYPE_SWITCH &&
+           osm_physp_get_port_num(p_physp) != 0)
+               m_key = ib_port_info_get_m_key(&physp0->port_info);
+       else
+               m_key = ib_port_info_get_m_key(p_pi);
+
        /* Check whether this is base port0 smsl handling only */
        if (port_num == 0 && esp0 == FALSE) {
                ib_port_info_set_master_smsl(p_pi, smsl);
@@ -369,13 +378,10 @@ static int link_mgr_set_physp_pi(osm_sm_t * sm, IN 
osm_physp_t * p_physp,
 
                if (osm_node_get_type(p_physp->p_node) == IB_NODE_TYPE_SWITCH &&
                    osm_physp_get_port_num(p_physp) != 0) {
-                       physp0 = osm_node_get_physp_ptr(p_physp->p_node, 0);
                        cap_mask = physp0->port_info.capability_mask;
-                       m_key = ib_port_info_get_m_key(&physp0->port_info);
-               } else {
+               } else
                        cap_mask = p_pi->capability_mask;
-                       m_key = ib_port_info_get_m_key(p_pi);
-               }
+
                if (cap_mask & IB_PORT_CAP_HAS_EXT_SPEEDS)
                        issue_ext = 1;
 
-- 
1.7.8.2

--
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