[ofa-general] [PATCH v2] opensm: set IS_SM bit during opensm init

Eli Dorfman (Voltaire) dorfman.eli at gmail.com
Thu Mar 12 07:15:10 PDT 2009


Set IS_SM bit during opensm init

Set IS_SM bit during opensm initalization.
This fixes a problem of SM that enters to standby and has
mismatch between local capability (IS_SM off) and the SMA.

Signed-off-by: Eli Dorfman <elid at voltaire.com>
---
 opensm/opensm/osm_opensm.c        |    5 +++++
 opensm/opensm/osm_port_info_rcv.c |   35 +----------------------------------
 2 files changed, 6 insertions(+), 34 deletions(-)

diff --git a/opensm/opensm/osm_opensm.c b/opensm/opensm/osm_opensm.c
index 7de2e5b..cfe6474 100644
--- a/opensm/opensm/osm_opensm.c
+++ b/opensm/opensm/osm_opensm.c
@@ -475,6 +475,11 @@ osm_opensm_bind(IN osm_opensm_t * const p_osm, IN const ib_net64_t guid)
 		goto Exit;
 #endif				/* ENABLE_OSM_PERF_MGR */
 
+	/* setting IS_SM in capability mask */
+	OSM_LOG(&p_osm->log, OSM_LOG_INFO, "Setting IS_SM on port 0x%016" PRIx64 "\n",
+			cl_ntoh64(guid));
+	osm_vendor_set_sm(p_osm->sm.mad_ctrl.h_bind, TRUE);
+
 Exit:
 	OSM_LOG_EXIT(&p_osm->log);
 	return (status);
diff --git a/opensm/opensm/osm_port_info_rcv.c b/opensm/opensm/osm_port_info_rcv.c
index 3e39dff..7a3e487 100644
--- a/opensm/opensm/osm_port_info_rcv.c
+++ b/opensm/opensm/osm_port_info_rcv.c
@@ -62,30 +62,6 @@
 #include <opensm/osm_opensm.h>
 #include <opensm/osm_ucast_mgr.h>
 
-/**********************************************************************
- **********************************************************************/
-static void
-__osm_pi_rcv_set_sm(IN osm_sm_t * sm,
-		    IN osm_physp_t * const p_physp)
-{
-	osm_bind_handle_t h_bind;
-	osm_dr_path_t *p_dr_path;
-
-	OSM_LOG_ENTER(sm->p_log);
-
-	OSM_LOG(sm->p_log, OSM_LOG_DEBUG,
-		"Setting IS_SM bit in port attributes\n");
-
-	p_dr_path = osm_physp_get_dr_path_ptr(p_physp);
-	h_bind = osm_dr_path_get_bind_handle(p_dr_path);
-
-	/*
-	   The 'IS_SM' bit isn't already set, so set it.
-	 */
-	osm_vendor_set_sm(h_bind, TRUE);
-
-	OSM_LOG_EXIT(sm->p_log);
-}
 
 /**********************************************************************
  **********************************************************************/
@@ -139,16 +115,7 @@ __osm_pi_rcv_process_endport(IN osm_sm_t * sm,
 		}
 	}
 
-	if (port_guid == sm->p_subn->sm_port_guid) {
-		/*
-		   We received the PortInfo for our own port.
-		 */
-		if (!(p_pi->capability_mask & IB_PORT_CAP_IS_SM))
-			/*
-			   Set the IS_SM bit to indicate our port hosts an SM.
-			 */
-			__osm_pi_rcv_set_sm(sm, p_physp);
-	} else {
+	if (port_guid != sm->p_subn->sm_port_guid) {
 		p_sm_tbl = &sm->p_subn->sm_guid_tbl;
 		if (p_pi->capability_mask & IB_PORT_CAP_IS_SM) {
 			/*
-- 
1.5.5




More information about the general mailing list