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