Skip to contentSkip to conversation

opensm/osm_qos.c: Eliminate unneeded endport SL to VL setup

PATCH In review Hal Rosenstock 3 participants 5 messages Jan 25, 2010 – Jun 17, 2010 3 messages not in the archive InfiniBand

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 opensm/osm_qos.c: Eliminate unneeded endport SL to VL setup

when using optimized programming and it's supported by the switch

---
Changes since v1:
Add in update of vlarb tables for port 0 when optimized but no SL to VL tables needed to be configured on that port

opensm/opensm/osm_qos.c +13 -2
index f814ea8..218e128 100644
@@ -243,13 +243,15 @@ static int qos_extports_setup(osm_sm_t * sm, osm_node_t *node,
 }
 
 static int qos_endport_setup(osm_sm_t * sm, osm_physp_t * p,
-			     const struct qos_config *qcfg)
+			     const struct qos_config *qcfg, int vlarb_only)
 {
 	unsigned force_update = p->need_update || sm->p_subn->need_update;
 
 	p->vl_high_limit = qcfg->vl_high_limit;
 	if (vlarb_update(sm, p, 0, force_update, qcfg))
 		return -1;
+	if (vlarb_only)
+		return 0;
 
 	if (!(p->port_info.capability_mask & IB_PORT_CAP_HAS_SL_MAP))
 		return 0;
@@ -269,6 +271,7 @@ int osm_qos_setup(osm_opensm_t * p_osm)
 	osm_port_t *p_port;
 	osm_node_t *p_node;
 	int ret = 0;
+	int vlarb_only;
 
 	if (!p_osm->subn.opt.qos)
 		return 0;
@@ -292,6 +295,7 @@ int osm_qos_setup(osm_opensm_t * p_osm)
 	p_tbl = &p_osm->subn.port_guid_tbl;
 	p_next = cl_qmap_head(p_tbl);
 	while (p_next != cl_qmap_end(p_tbl)) {
+		vlarb_only = 0;
 		p_port = (osm_port_t *) p_next;
 		p_next = cl_qmap_next(p_next);
 
@@ -305,13 +309,20 @@ int osm_qos_setup(osm_opensm_t * p_osm)
 			    (&p_node->sw->switch_info))
 				continue;
 
+			if (ib_switch_info_get_opt_sl2vlmapping(&p_node->sw->switch_info) &&
+			    p_osm->sm.p_subn->opt.use_optimized_slvl &&
+			    !memcmp(&swe_config.sl2vl, &sw0_config.sl2vl,
+				    sizeof(swe_config.sl2vl)))
+				vlarb_only = 1;
+
 			cfg = &sw0_config;
 		} else if (osm_node_get_type(p_node) == IB_NODE_TYPE_ROUTER)
 			cfg = &rtr_config;
 		else
 			cfg = &ca_config;
 
-		if (qos_endport_setup(&p_osm->sm, p_port->p_physp, cfg))
+		if (qos_endport_setup(&p_osm->sm, p_port->p_physp, cfg,
+				      vlarb_only))
 			ret = -1;
 	}
 

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

A message that is not in the archive (sent off-list or not yet received): [email protected]

#2 lore raw
Quoted 47 lines · Hal Rosenstock

when using optimized programming and it's supported by the switch

---
Changes since v1:
Add in update of vlarb tables for port 0 when optimized but no SL to VL tables needed to be configured on that port

opensm/opensm/osm_qos.c +5 -1
index f814ea8..218e128 100644
@@ -243,13 +243,15 @@ static int qos_extports_setup(osm_sm_t * sm, osm_node_t *node,
 }
 
 static int qos_endport_setup(osm_sm_t * sm, osm_physp_t * p,
-			     const struct qos_config *qcfg)
+			     const struct qos_config *qcfg, int vlarb_only)
 {
 	unsigned force_update = p->need_update || sm->p_subn->need_update;
 
 	p->vl_high_limit = qcfg->vl_high_limit;
 	if (vlarb_update(sm, p, 0, force_update, qcfg))
 		return -1;
+	if (vlarb_only)
+		return 0;
 
 	if (!(p->port_info.capability_mask & IB_PORT_CAP_HAS_SL_MAP))
 		return 0;
@@ -269,6 +271,7 @@ int osm_qos_setup(osm_opensm_t * p_osm)
 	osm_port_t *p_port;
 	osm_node_t *p_node;
 	int ret = 0;
+	int vlarb_only;
 
 	if (!p_osm->subn.opt.qos)
 		return 0;
@@ -292,6 +295,7 @@ int osm_qos_setup(osm_opensm_t * p_osm)
 	p_tbl = &p_osm->subn.port_guid_tbl;
 	p_next = cl_qmap_head(p_tbl);
 	while (p_next != cl_qmap_end(p_tbl)) {
+		vlarb_only = 0;
 		p_port = (osm_port_t *) p_next;
 		p_next = cl_qmap_next(p_next);
 

opensm/opensm/osm_qos.c int osm_qos_setup(osm_opensm_t * p_osm) · line 317

Quoted 9 lines
opensm/opensm/osm_qos.c +6 -0
@@ -305,13 +309,20 @@ int osm_qos_setup(osm_opensm_t * p_osm)
 			    (&p_node->sw->switch_info))
 				continue;
 
+			if (ib_switch_info_get_opt_sl2vlmapping(&p_node->sw->switch_info) &&
+			    p_osm->sm.p_subn->opt.use_optimized_slvl &&
+			    !memcmp(&swe_config.sl2vl, &sw0_config.sl2vl,
+				    sizeof(swe_config.sl2vl)))
+				vlarb_only = 1;
+

qos_extports_setup() is running port setup loop (for both VLArb *and* SL2VL) as:

        for (i = 1; i < num_ports; i++) {
		...
	}

, starting from port '1'.

So you case will just effectively skip any SL2VL setup for port 0 (it was commented for V1 too).

Sasha

opensm/opensm/osm_qos.c int osm_qos_setup(osm_opensm_t * p_osm) · line 328

Quoted 12 lines
opensm/opensm/osm_qos.c +2 -1
 			cfg = &sw0_config;
 		} else if (osm_node_get_type(p_node) == IB_NODE_TYPE_ROUTER)
 			cfg = &rtr_config;
 		else
 			cfg = &ca_config;
 
-		if (qos_endport_setup(&p_osm->sm, p_port->p_physp, cfg))
+		if (qos_endport_setup(&p_osm->sm, p_port->p_physp, cfg,
+				      vlarb_only))
 			ret = -1;
 	}
 

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

#3 lore raw
Quoted 61 lines · Sasha Khapyorsky
Quoted 47 lines · Hal Rosenstock

when using optimized programming and it's supported by the switch

---
Changes since v1:
Add in update of vlarb tables for port 0 when optimized but no SL to VL tables needed to be configured on that port

opensm/opensm/osm_qos.c +5 -1
index f814ea8..218e128 100644
@@ -243,13 +243,15 @@ static int qos_extports_setup(osm_sm_t * sm, osm_node_t *node,
  }
 
  static int qos_endport_setup(osm_sm_t * sm, osm_physp_t * p,
-                          const struct qos_config *qcfg)
+                          const struct qos_config *qcfg, int vlarb_only)
  {
       unsigned force_update = p->need_update || sm->p_subn->need_update;
 
       p->vl_high_limit = qcfg->vl_high_limit;
       if (vlarb_update(sm, p, 0, force_update, qcfg))
               return -1;
+     if (vlarb_only)
+             return 0;
 
       if (!(p->port_info.capability_mask & IB_PORT_CAP_HAS_SL_MAP))
               return 0;
@@ -269,6 +271,7 @@ int osm_qos_setup(osm_opensm_t * p_osm)
       osm_port_t *p_port;
       osm_node_t *p_node;
       int ret = 0;
+     int vlarb_only;
 
       if (!p_osm->subn.opt.qos)
               return 0;
@@ -292,6 +295,7 @@ int osm_qos_setup(osm_opensm_t * p_osm)
       p_tbl = &p_osm->subn.port_guid_tbl;
       p_next = cl_qmap_head(p_tbl);
       while (p_next != cl_qmap_end(p_tbl)) {
+             vlarb_only = 0;
               p_port = (osm_port_t *) p_next;
               p_next = cl_qmap_next(p_next);
 

opensm/opensm/osm_qos.c int osm_qos_setup(osm_opensm_t * p_osm) · line 317

Quoted 9 lines
opensm/opensm/osm_qos.c +6 -0
@@ -305,13 +309,20 @@ int osm_qos_setup(osm_opensm_t * p_osm)
                           (&p_node->sw->switch_info))
                               continue;
 
+                     if (ib_switch_info_get_opt_sl2vlmapping(&p_node->sw->switch_info) &&
+                         p_osm->sm.p_subn->opt.use_optimized_slvl &&
+                         !memcmp(&swe_config.sl2vl, &sw0_config.sl2vl,
+                                 sizeof(swe_config.sl2vl)))
+                             vlarb_only = 1;
+

qos_extports_setup() is running port setup loop (for both VLArb *and* SL2VL) as:

Quoted 8 lines

       for (i = 1; i < num_ports; i++) {
               ...
       }

, starting from port '1'.

So you case will just effectively skip any SL2VL setup for port 0 (it was commented for V1 too).

This is intended. It's not needed since it's only doing this in the wildcarded case and the wildcarding includes port 0.

-- Hal

Quoted 15 lines

Sasha

Quoted 6 lines
opensm/opensm/osm_qos.c +0 -0
                       cfg = &sw0_config;
               } else if (osm_node_get_type(p_node) == IB_NODE_TYPE_ROUTER)
                       cfg = &rtr_config;

              else
                      cfg = &ca_config;

Quoted 6 lines

-             if (qos_endport_setup(&p_osm->sm, p_port->p_physp, cfg))
+             if (qos_endport_setup(&p_osm->sm, p_port->p_physp, cfg,
+                                   vlarb_only))
                      ret = -1;
      }

Quoted 5 lines

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

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

A message that is not in the archive (sent off-list or not yet received): f0e08f231001260530o6260986dice657109f4eea637-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org

#5 lore raw

Sasha,

Quoted 66 lines · Hal Rosenstock
Quoted 65 lines · Sasha Khapyorsky
Quoted 47 lines · Hal Rosenstock

when using optimized programming and it's supported by the switch

---
Changes since v1:
Add in update of vlarb tables for port 0 when optimized but no SL to VL tables needed to be configured on that port

opensm/opensm/osm_qos.c +5 -1
index f814ea8..218e128 100644
@@ -243,13 +243,15 @@ static int qos_extports_setup(osm_sm_t * sm, osm_node_t *node,
  }
 
  static int qos_endport_setup(osm_sm_t * sm, osm_physp_t * p,
-                          const struct qos_config *qcfg)
+                          const struct qos_config *qcfg, int vlarb_only)
  {
       unsigned force_update = p->need_update || sm->p_subn->need_update;
 
       p->vl_high_limit = qcfg->vl_high_limit;
       if (vlarb_update(sm, p, 0, force_update, qcfg))
               return -1;
+     if (vlarb_only)
+             return 0;
 
       if (!(p->port_info.capability_mask & IB_PORT_CAP_HAS_SL_MAP))
               return 0;
@@ -269,6 +271,7 @@ int osm_qos_setup(osm_opensm_t * p_osm)
       osm_port_t *p_port;
       osm_node_t *p_node;
       int ret = 0;
+     int vlarb_only;
 
       if (!p_osm->subn.opt.qos)
               return 0;
@@ -292,6 +295,7 @@ int osm_qos_setup(osm_opensm_t * p_osm)
       p_tbl = &p_osm->subn.port_guid_tbl;
       p_next = cl_qmap_head(p_tbl);
       while (p_next != cl_qmap_end(p_tbl)) {
+             vlarb_only = 0;
               p_port = (osm_port_t *) p_next;
               p_next = cl_qmap_next(p_next);
 

opensm/opensm/osm_qos.c int osm_qos_setup(osm_opensm_t * p_osm) · line 317

Quoted 9 lines
opensm/opensm/osm_qos.c +6 -0
@@ -305,13 +309,20 @@ int osm_qos_setup(osm_opensm_t * p_osm)
                           (&p_node->sw->switch_info))
                               continue;
 
+                     if (ib_switch_info_get_opt_sl2vlmapping(&p_node->sw->switch_info) &&
+                         p_osm->sm.p_subn->opt.use_optimized_slvl &&
+                         !memcmp(&swe_config.sl2vl, &sw0_config.sl2vl,
+                                 sizeof(swe_config.sl2vl)))
+                             vlarb_only = 1;
+

qos_extports_setup() is running port setup loop (for both VLArb *and* SL2VL) as:

       for (i = 1; i < num_ports; i++) {
               ...
       }

Quoted 7 lines
Quoted 4 lines

, starting from port '1'.

So you case will just effectively skip any SL2VL setup for port 0 (it was commented for V1 too).

This is intended. It's not needed since it's only doing this in the wildcarded case and the wildcarding includes port 0.

Any reason not to move ahead on this ? Thanks.

-- Hal

Quoted 23 lines

-- Hal

Quoted 20 lines

Sasha

Quoted 6 lines
opensm/opensm/osm_qos.c +0 -0
                       cfg = &sw0_config;
               } else if (osm_node_get_type(p_node) == IB_NODE_TYPE_ROUTER)
                       cfg = &rtr_config;

              else
                      cfg = &ca_config;

Quoted 6 lines

-             if (qos_endport_setup(&p_osm->sm, p_port->p_physp, cfg))
+             if (qos_endport_setup(&p_osm->sm, p_port->p_physp, cfg,
+                                   vlarb_only))
                      ret = -1;
      }

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

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

A message that is not in the archive (sent off-list or not yet received): AANLkTilHxkXWzb-eEyWMLOtZXAnURNRvtw8-nZVL0OvW-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org

#7 lore raw
Quoted 5 lines · Hal Rosenstock
Quoted 3 lines

This is intended. It's not needed since it's only doing this in the wildcarded case and the wildcarding includes port 0.

Any reason not to move ahead on this ? Thanks.

No reason. Applied. Thanks.

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