[openib-general] {PATCH] OpenSM: Add option for force SDR link speed

Hal Rosenstock halr at voltaire.com
Wed Nov 1 05:29:45 PST 2006


OpenSM: Add option for force SDR link speed

Add option to opensm.opts to force link speed. Currently, only forcing
to SDR link speed is supported.

Signed-off-by: Hal Rosenstock <halr at voltaire.com>

Index: include/opensm/osm_subnet.h
===================================================================
--- include/opensm/osm_subnet.h	(revision 10010)
+++ include/opensm/osm_subnet.h	(working copy)
@@ -34,7 +34,6 @@
  * $Id$
  */
 
-
 /*
  * Abstract:
  *	Declaration of osm_subn_t.
@@ -238,9 +237,10 @@ typedef struct _osm_subn_opt
   uint8_t		   sm_priority;
   uint8_t		   lmc;
   boolean_t		   lmc_esp0;
-  uint8_t                  max_op_vls;
+  uint8_t		   max_op_vls;
+  uint8_t		   force_link_speed;	
   boolean_t		   reassign_lids;
-  boolean_t                reassign_lfts;
+  boolean_t		   reassign_lfts;
   boolean_t		   ignore_other_sm;
   boolean_t		   single_thread;
   boolean_t		   no_multicast_option;
Index: opensm/osm_subnet.c
===================================================================
--- opensm/osm_subnet.c	(revision 10018)
+++ opensm/osm_subnet.c	(working copy)
@@ -452,6 +452,7 @@ osm_subn_set_default_opt(
   p_opt->lmc = OSM_DEFAULT_LMC;
   p_opt->lmc_esp0 = FALSE;
   p_opt->max_op_vls = OSM_DEFAULT_MAX_OP_VLS;
+  p_opt->force_link_speed = 0;
   p_opt->reassign_lids = FALSE;
   p_opt->reassign_lfts = TRUE;
   p_opt->ignore_other_sm = FALSE;
@@ -840,6 +841,10 @@ osm_subn_parse_conf_file(
         "max_op_vls",
         p_key, p_val, &p_opts->max_op_vls);
 
+      __osm_subn_opts_unpack_uint8(
+        "force_link_speed",
+        p_key, p_val, &p_opts->force_link_speed);
+
       __osm_subn_opts_unpack_boolean(
         "reassign_lids",
         p_key, p_val, &p_opts->reassign_lids);
@@ -1061,6 +1066,9 @@ osm_subn_write_conf_file(
     "leaf_head_of_queue_lifetime 0x%02x\n\n"
     "# Limit the maximal operational VLs\n"
     "max_op_vls %u\n\n"
+    "# Force switch links which are more than SDR capable to \n"
+    "# operate at SDR speed\n\n"
+    "force_link_speed %u\n\n"
     "# The subnet_timeout code that will be set for all the ports\n"
     "# The actual timeout is 4.096usec * 2^<subnet_timeout>\n"
     "subnet_timeout %u\n\n"
@@ -1081,6 +1089,7 @@ osm_subn_write_conf_file(
     p_opts->head_of_queue_lifetime,
     p_opts->leaf_head_of_queue_lifetime,
     p_opts->max_op_vls,
+    p_opts->force_link_speed,
     p_opts->subnet_timeout,
     p_opts->local_phy_errors_threshold,
     p_opts->overrun_errors_threshold
Index: opensm/osm_lid_mgr.c
===================================================================
--- opensm/osm_lid_mgr.c	(revision 10010)
+++ opensm/osm_lid_mgr.c	(working copy)
@@ -1152,6 +1152,14 @@ __osm_lid_mgr_set_physp_pi(
                 sizeof(p_pi->link_width_enabled) ))
       send_set = TRUE;
 
+    if ( p_mgr->p_subn->opt.force_link_speed )
+      ib_port_info_set_link_speed_enabled( p_pi, IB_LINK_SPEED_ACTIVE_2_5 );
+    else
+      ib_port_info_set_link_speed_enabled( p_pi, ib_port_info_get_link_speed_enabled(p_old_pi) );
+    if (memcmp( &p_pi->link_speed, &p_old_pi->link_speed,
+                sizeof(p_pi->link_speed) ))
+      send_set = TRUE;
+
     /* M_KeyProtectBits are always zero */
     p_pi->mkey_lmc = p_mgr->p_subn->opt.lmc;
     /* Check to see if the value we are setting is different than
Index: opensm/osm_link_mgr.c
===================================================================
--- opensm/osm_link_mgr.c	(revision 10010)
+++ opensm/osm_link_mgr.c	(working copy)
@@ -310,6 +310,14 @@ __osm_link_mgr_set_physp_pi(
                 sizeof(p_pi->link_width_enabled) ))
       send_set = TRUE;
 
+    if ( p_mgr->p_subn->opt.force_link_speed )
+      ib_port_info_set_link_speed_enabled( p_pi, IB_LINK_SPEED_ACTIVE_2_5 );
+    else
+      ib_port_info_set_link_speed_enabled( p_pi, ib_port_info_get_link_speed_enabled(p_old_pi) );
+    if (memcmp( &p_pi->link_speed, &p_old_pi->link_speed,
+                sizeof(p_pi->link_speed) ))
+      send_set = TRUE;
+
     /* calc new op_vls and mtu */
     op_vls =
       osm_physp_calc_link_op_vls( p_mgr->p_log, p_mgr->p_subn, p_physp );








More information about the general mailing list