From: Tomer Cohen <[email protected]>
Date: Sun, 13 Apr 2014 15:26:47 +0300
Bug description:
opensm is not using future value of op_vls when calculating subnet's
minimal op_vl. opensm calculates
minimal op_vls (sm->p_subn->min_data_vl) when receiving pi mads, and
the linkmgr might update that
port's op_vls according to it's vl_cap. as a result, routing engines
that depends on the minimal
op_vls (such as torus) might fail on the first heavy sweep. for
example, if in the fabric there is a port
with op_vls = 1. vl_cap = 5, peer port vl_cap = 5. tours routing engine
would fail on first sweep.
Fix: now the calculation is done respective to vl_cap and max_op_vls
Signed-off-by: Tomer Cohen <[email protected]>
Signed-off-by: Hal Rosenstock <[email protected]>
---
opensm/osm_port_info_rcv.c | 8 ++++++--
1 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/opensm/osm_port_info_rcv.c b/opensm/osm_port_info_rcv.c
index eb68dbf..9707496 100644
--- a/opensm/osm_port_info_rcv.c
+++ b/opensm/osm_port_info_rcv.c
@@ -115,7 +115,9 @@ static void pi_rcv_process_endport(IN osm_sm_t * sm, IN
osm_physp_t * p_physp,
sm->p_subn->min_ca_rate = rate;
}
- data_vls = 1U << (ib_port_info_get_op_vls(p_pi) - 1);
+ data_vls = 1U << (ib_port_info_get_vl_cap(p_pi) - 1);
+ if (data_vls > sm->p_subn->opt.max_op_vls)
+ data_vls = sm->p_subn->opt.max_op_vls;
if (data_vls >= IB_MAX_NUM_VLS)
data_vls = IB_MAX_NUM_VLS - 1;
if ((uint8_t)data_vls < sm->p_subn->min_data_vls) {
@@ -416,7 +418,9 @@ static void pi_rcv_process_switch_ext_port(IN osm_sm_t * sm,
if (p_remote_physp) {
p_remote_node = osm_physp_get_node_ptr(p_remote_physp);
if (p_remote_node->sw) {
- data_vls = 1U << (ib_port_info_get_op_vls(p_pi) - 1);
+ data_vls = 1U << (ib_port_info_get_vl_cap(p_pi) - 1);
+ if (data_vls > sm->p_subn->opt.max_op_vls)
+ data_vls = sm->p_subn->opt.max_op_vls;
if (data_vls >= IB_MAX_NUM_VLS)
data_vls = IB_MAX_NUM_VLS - 1;
if ((uint8_t)data_vls < sm->p_subn->min_sw_data_vls) {
--
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