From patchwork Sun Aug 1 09:36:20 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Eli Dorfman (Voltaire)" X-Patchwork-Id: 116296 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.4/8.14.3) with ESMTP id o719H55R008092 for ; Sun, 1 Aug 2010 09:17:05 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753323Ab0HAJRE (ORCPT ); Sun, 1 Aug 2010 05:17:04 -0400 Received: from fwil.voltaire.com ([193.47.165.2]:55282 "EHLO exil.voltaire.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753898Ab0HAJRD (ORCPT ); Sun, 1 Aug 2010 05:17:03 -0400 Received: from [172.25.1.69] ([172.25.1.69]) by exil.voltaire.com with Microsoft SMTPSVC(6.0.3790.4675); Sun, 1 Aug 2010 12:16:59 +0300 Message-ID: <4C554014.7080603@gmail.com> Date: Sun, 01 Aug 2010 12:36:20 +0300 From: "Eli Dorfman (Voltaire)" User-Agent: Thunderbird 2.0.0.17 (X11/20080914) MIME-Version: 1.0 To: Jim Schutt CC: Sasha Khapyorsky , linux-rdma Subject: Re: [PATCH v2] opensm: Fix sl2vl configuration References: <4C505A39.4020201@gmail.com> <1280428154.4816.51.camel@sale659.sandia.gov> In-Reply-To: <1280428154.4816.51.camel@sale659.sandia.gov> X-OriginalArrivalTime: 01 Aug 2010 09:16:59.0575 (UTC) FILETIME=[4B9F7470:01CB315A] Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter.kernel.org [140.211.167.41]); Sun, 01 Aug 2010 09:17:05 +0000 (UTC) diff --git a/opensm/opensm/osm_qos.c b/opensm/opensm/osm_qos.c index a571370..0ebcfdf 100644 --- a/opensm/opensm/osm_qos.c +++ b/opensm/opensm/osm_qos.c @@ -208,10 +208,11 @@ static int qos_extports_setup(osm_sm_t * sm, osm_node_t *node, unsigned force_update; unsigned num_ports = osm_node_get_num_physp(node); int ret = 0; - unsigned i, j; + unsigned in, out; + uint8_t op_vl1; - for (i = 1; i < num_ports; i++) { - p = osm_node_get_physp_ptr(node, i); + for (out = 1; out < num_ports; out++) { + p = osm_node_get_physp_ptr(node, out); force_update = p->need_update || sm->p_subn->need_update; p->vl_high_limit = qcfg->vl_high_limit; if (vlarb_update(sm, p, p->port_num, force_update, qcfg)) @@ -225,17 +226,31 @@ static int qos_extports_setup(osm_sm_t * sm, osm_node_t *node, if (ib_switch_info_get_opt_sl2vlmapping(&node->sw->switch_info) && sm->p_subn->opt.use_optimized_slvl) { p = osm_node_get_physp_ptr(node, 1); + op_vl1 = ib_port_info_get_op_vls(&p->port_info); force_update = p->need_update || sm->p_subn->need_update; - return sl2vl_update_table(sm, p, 1, 0x30000, force_update, - &qcfg->sl2vl); + if (sl2vl_update_table(sm, p, 0, 0x30000, force_update, + &qcfg->sl2vl)) + ret = -1; + /* overwrite default ALL configuration if port's + op_vl is different */ + for (out = 2; out < num_ports; out++) { + p = osm_node_get_physp_ptr(node, out); + if (ib_port_info_get_op_vls(&p->port_info) != op_vl1 && + sl2vl_update_table(sm, p, 0, 0x20000 | out, force_update, + &qcfg->sl2vl)) + ret = -1; + } + return ret; } - for (i = 0; i < num_ports; i++) { - p = osm_node_get_physp_ptr(node, i); + /* non optimized sl2vl configuration */ + out = ib_switch_info_is_enhanced_port0(&node->sw->switch_info) ? 0 : 1; + for (; out < num_ports; out++) { + p = osm_node_get_physp_ptr(node, out); force_update = p->need_update || sm->p_subn->need_update; - j = ib_switch_info_is_enhanced_port0(&node->sw->switch_info) ? 0 : 1; - for (; j < num_ports; j++) - if (sl2vl_update_table(sm, p, i, i << 8 | j, + /* go over all in ports */ + for (in = 0; in < num_ports; in++) + if (sl2vl_update_table(sm, p, in, in << 8 | out, force_update, &qcfg->sl2vl)) ret = -1; }