[ofa-general] [PATCH] opensm: merge all __get_mgrp_by_mlid() instances
Sasha Khapyorsky
sashak at voltaire.com
Tue Jun 24 18:39:11 PDT 2008
Merge all __get_mgrp_by_mlid() instances into single
osm_get_mgrp_by_mlid() function.
Signed-off-by: Sasha Khapyorsky <sashak at voltaire.com>
---
opensm/include/opensm/osm_subnet.h | 29 +++++++++++++++++++++++++++++
opensm/opensm/osm_drop_mgr.c | 2 +-
opensm/opensm/osm_mcast_mgr.c | 10 +---------
opensm/opensm/osm_qos_policy.c | 2 +-
opensm/opensm/osm_sa.c | 2 +-
opensm/opensm/osm_sa_mcmember_record.c | 17 ++++-------------
opensm/opensm/osm_sa_path_record.c | 10 +---------
opensm/opensm/osm_sm.c | 4 ++--
8 files changed, 40 insertions(+), 36 deletions(-)
diff --git a/opensm/include/opensm/osm_subnet.h b/opensm/include/opensm/osm_subnet.h
index 6924b40..b4f130e 100644
--- a/opensm/include/opensm/osm_subnet.h
+++ b/opensm/include/opensm/osm_subnet.h
@@ -721,6 +721,7 @@ struct osm_log;
struct osm_switch;
struct osm_physp;
struct osm_port;
+struct osm_mgrp;
/****f* OpenSM: Helper/osm_get_gid_by_mad_addr
* NAME
@@ -917,6 +918,34 @@ struct osm_port *osm_get_port_by_guid(IN osm_subn_t const *p_subn,
* osm_port_t
*********/
+/****f* OpenSM: Subnet/osm_get_mgrp_by_mlid
+* NAME
+* osm_get_mgrp_by_mlid
+*
+* DESCRIPTION
+* The looks for the given multicast group in the subnet table by mlid.
+* NOTE: this code is not thread safe. Need to grab the lock before
+* calling it.
+*
+* SYNOPSIS
+*/
+static inline
+struct osm_mgrp *osm_get_mgrp_by_mlid(osm_subn_t const *p_subn, ib_net16_t mlid)
+{
+ return p_subn->mgroups[cl_ntoh16(mlid) - IB_LID_MCAST_START_HO];
+}
+/*
+* PARAMETERS
+* p_subn
+* [in] Pointer to an osm_subn_t object
+*
+* mlid
+* [in] The multicast group mlid in network order
+*
+* RETURN VALUES
+* The multicast group structure pointer if found. NULL otherwise.
+*********/
+
/****f* OpenSM: Helper/osm_get_physp_by_mad_addr
* NAME
* osm_get_physp_by_mad_addr
diff --git a/opensm/opensm/osm_drop_mgr.c b/opensm/opensm/osm_drop_mgr.c
index 5ebb2d5..2d8d6e9 100644
--- a/opensm/opensm/osm_drop_mgr.c
+++ b/opensm/opensm/osm_drop_mgr.c
@@ -207,7 +207,7 @@ static void __osm_drop_mgr_remove_port(osm_sm_t * sm, IN osm_port_t * p_port)
p_mcm = (osm_mcm_info_t *) cl_qlist_remove_head(&p_port->mcm_list);
while (p_mcm != (osm_mcm_info_t *) cl_qlist_end(&p_port->mcm_list)) {
- p_mgrp = sm->p_subn->mgroups[cl_ntoh16(p_mcm->mlid) - IB_LID_MCAST_START_HO];
+ p_mgrp = osm_get_mgrp_by_mlid(sm->p_subn, p_mcm->mlid);
if (p_mgrp) {
osm_mgrp_remove_port(sm->p_subn, sm->p_log,
p_mgrp, p_port->guid);
diff --git a/opensm/opensm/osm_mcast_mgr.c b/opensm/opensm/osm_mcast_mgr.c
index 111e411..ac45cf3 100644
--- a/opensm/opensm/osm_mcast_mgr.c
+++ b/opensm/opensm/osm_mcast_mgr.c
@@ -1229,14 +1229,6 @@ osm_signal_t osm_mcast_mgr_process(osm_sm_t * sm)
}
/**********************************************************************
- **********************************************************************/
-static
-osm_mgrp_t *__get_mgrp_by_mlid(osm_sm_t * sm, IN ib_net16_t const mlid)
-{
- return(sm->p_subn->mgroups[cl_ntoh16(mlid) - IB_LID_MCAST_START_HO]);
-}
-
-/**********************************************************************
This is the function that is invoked during idle time to handle the
process request for mcast groups where join/leave/delete was required.
**********************************************************************/
@@ -1270,7 +1262,7 @@ osm_signal_t osm_mcast_mgr_process_mgroups(osm_sm_t * sm)
/* since we delayed the execution we prefer to pass the
mlid as the mgrp identifier and then find it or abort */
- p_mgrp = __get_mgrp_by_mlid(sm, mlid);
+ p_mgrp = osm_get_mgrp_by_mlid(sm->p_subn, mlid);
if (!p_mgrp)
continue;
diff --git a/opensm/opensm/osm_qos_policy.c b/opensm/opensm/osm_qos_policy.c
index 223aba6..ecc38b3 100644
--- a/opensm/opensm/osm_qos_policy.c
+++ b/opensm/opensm/osm_qos_policy.c
@@ -793,7 +793,7 @@ static void __qos_policy_validate_pkey(
if (!p_prtn->mlid)
return;
- p_mgrp = p_qos_policy->p_subn->mgroups[cl_ntoh16(p_prtn->mlid) - IB_LID_MCAST_START_HO];
+ p_mgrp = osm_get_mgrp_by_mlid(p_qos_policy->p_subn, p_prtn->mlid);
if (!p_mgrp) {
OSM_LOG(&p_qos_policy->p_subn->p_osm->log, OSM_LOG_ERROR,
"ERR AC16: MCast group for partition with "
diff --git a/opensm/opensm/osm_sa.c b/opensm/opensm/osm_sa.c
index 45e0d22..355e1c2 100644
--- a/opensm/opensm/osm_sa.c
+++ b/opensm/opensm/osm_sa.c
@@ -740,7 +740,7 @@ static osm_mgrp_t *load_mcgroup(osm_opensm_t * p_osm, ib_net16_t mlid,
cl_plock_excl_acquire(&p_osm->lock);
- p_mgrp = p_osm->subn.mgroups[cl_ntoh16(mlid) - IB_LID_MCAST_START_HO];
+ p_mgrp = osm_get_mgrp_by_mlid(&p_osm->subn, mlid);
if (p_mgrp) {
if (!memcmp(&p_mgrp->mcmember_rec.mgid, &p_mcm_rec->mgid,
sizeof(ib_gid_t))) {
diff --git a/opensm/opensm/osm_sa_mcmember_record.c b/opensm/opensm/osm_sa_mcmember_record.c
index 231f482..3b41d03 100644
--- a/opensm/opensm/osm_sa_mcmember_record.c
+++ b/opensm/opensm/osm_sa_mcmember_record.c
@@ -91,15 +91,6 @@ typedef struct osm_sa_mcmr_search_ctxt {
boolean_t trusted_req;
} osm_sa_mcmr_search_ctxt_t;
-/**********************************************************************
- Look for a MGRP in the mgroups by mlid
-**********************************************************************/
-static osm_mgrp_t *__get_mgrp_by_mlid(IN osm_sa_t * sa,
- IN ib_net16_t const mlid)
-{
- return(sa->p_subn->mgroups[cl_ntoh16(mlid) - IB_LID_MCAST_START_HO]);
-}
-
/*********************************************************************
Copy certain fields between two mcmember records
used during the process of join request to copy data from the mgrp
@@ -140,7 +131,7 @@ static ib_net16_t __get_new_mlid(osm_sa_t *sa, ib_net16_t requested_mlid)
if (requested_mlid && cl_ntoh16(requested_mlid) >= IB_LID_MCAST_START_HO
&& cl_ntoh16(requested_mlid) <= p_subn->max_multicast_lid_ho
- && !p_subn->mgroups[cl_ntoh16(requested_mlid) - IB_LID_MCAST_START_HO])
+ && !osm_get_mgrp_by_mlid(p_subn, requested_mlid))
return requested_mlid;
max = p_subn->max_multicast_lid_ho - IB_LID_MCAST_START_HO + 1;
@@ -162,7 +153,7 @@ static ib_net16_t __get_new_mlid(osm_sa_t *sa, ib_net16_t requested_mlid)
**********************************************************************/
static void __cleanup_mgrp(IN osm_sa_t * sa, IN ib_net16_t const mlid)
{
- osm_mgrp_t *p_mgrp = __get_mgrp_by_mlid(sa, mlid);
+ osm_mgrp_t *p_mgrp = osm_get_mgrp_by_mlid(sa->p_subn, mlid);
/* Remove MGRP only if osm_mcm_port_t count is 0 and
not a well known group */
@@ -953,7 +944,7 @@ osm_mcmr_rcv_create_new_mgrp(IN osm_sa_t * sa,
/* since we might have an old group by that mlid
one whose deletion was delayed for an idle time
we need to deallocate it first */
- p_prev_mgrp = sa->p_subn->mgroups[cl_ntoh16(mlid) - IB_LID_MCAST_START_HO];
+ p_prev_mgrp = osm_get_mgrp_by_mlid(sa->p_subn, mlid);
if (p_prev_mgrp) {
OSM_LOG(sa->p_log, OSM_LOG_DEBUG,
"Found previous group for mlid:0x%04x - "
@@ -1480,7 +1471,7 @@ __osm_mcmr_rcv_join_mgrp(IN osm_sa_t * sa,
CL_PLOCK_EXCL_ACQUIRE(sa->p_lock);
/* the request for routing failed so we need to remove the port */
- p_mgrp = __get_mgrp_by_mlid(sa, mlid);
+ p_mgrp = osm_get_mgrp_by_mlid(sa->p_subn, mlid);
if (p_mgrp != NULL) {
osm_mgrp_remove_port(sa->p_subn,
sa->p_log,
diff --git a/opensm/opensm/osm_sa_path_record.c b/opensm/opensm/osm_sa_path_record.c
index a38fb60..9af8a4f 100644
--- a/opensm/opensm/osm_sa_path_record.c
+++ b/opensm/opensm/osm_sa_path_record.c
@@ -1470,14 +1470,6 @@ __osm_pr_rcv_process_pair(IN osm_sa_t * sa,
/**********************************************************************
**********************************************************************/
-static osm_mgrp_t *__get_mgrp_by_mlid(IN osm_sa_t * sa,
- IN ib_net16_t const mlid)
-{
- return(sa->p_subn->mgroups[cl_ntoh16(mlid) - IB_LID_MCAST_START_HO]);
-}
-
-/**********************************************************************
- **********************************************************************/
static void
__osm_pr_get_mgrp(IN osm_sa_t * sa,
IN const osm_madw_t * const p_madw, OUT osm_mgrp_t ** pp_mgrp)
@@ -1520,7 +1512,7 @@ __osm_pr_get_mgrp(IN osm_sa_t * sa,
goto Exit;
}
} else {
- *pp_mgrp = __get_mgrp_by_mlid(sa, p_pr->dlid);
+ *pp_mgrp = osm_get_mgrp_by_mlid(sa->p_subn, p_pr->dlid);
if (*pp_mgrp == NULL)
OSM_LOG(sa->p_log, OSM_LOG_ERROR, "ERR 1F11: "
"No MC group found for PathRecord "
diff --git a/opensm/opensm/osm_sm.c b/opensm/opensm/osm_sm.c
index e677fa0..3548935 100644
--- a/opensm/opensm/osm_sm.c
+++ b/opensm/opensm/osm_sm.c
@@ -525,7 +525,7 @@ osm_sm_mcgrp_join(IN osm_sm_t * const p_sm,
/*
* If this multicast group does not already exist, create it.
*/
- p_mgrp = p_sm->p_subn->mgroups[cl_ntoh16(mlid) - IB_LID_MCAST_START_HO];
+ p_mgrp = osm_get_mgrp_by_mlid(p_sm->p_subn, mlid);
if (!p_mgrp) {
OSM_LOG(p_sm->p_log, OSM_LOG_VERBOSE,
"Creating group, MLID 0x%X\n", cl_ntoh16(mlid));
@@ -628,7 +628,7 @@ osm_sm_mcgrp_leave(IN osm_sm_t * const p_sm,
/*
* Get the multicast group object for this group.
*/
- p_mgrp = p_sm->p_subn->mgroups[cl_ntoh16(mlid) - IB_LID_MCAST_START_HO];
+ p_mgrp = osm_get_mgrp_by_mlid(p_sm->p_subn, mlid);
if (!p_mgrp) {
CL_PLOCK_RELEASE(p_sm->p_lock);
OSM_LOG(p_sm->p_log, OSM_LOG_ERROR, "ERR 2E08: "
--
1.5.5.1.178.g1f811
More information about the general
mailing list