[ofa-general] [PATCH] opensm: sweep component processors return status value
Hal Rosenstock
hal.rosenstock at gmail.com
Mon Jun 22 10:47:31 PDT 2009
On Thu, Jun 18, 2009 at 3:12 PM, Sasha Khapyorsky<sashak at voltaire.com> wrote:
>
> All sweep component processors (aka managers) will return its status
> value instead of OSM_SIGNAL_DONE|OSM_SIGNAL_DONE_PENDING status -
> waiting for outstanding MAD responses are automated now in
> wait_for_pending_transaction() function.
Some possible simplifications and some other comments below.
-- Hal
>
> Signed-off-by: Sasha Khapyorsky <sashak at voltaire.com>
> ---
> opensm/include/opensm/osm_base.h | 4 --
> opensm/include/opensm/osm_lid_mgr.h | 18 ++------
> opensm/opensm/osm_lid_mgr.c | 77 +++++++++++++----------------------
> opensm/opensm/osm_link_mgr.c | 56 ++++++++++++-------------
> opensm/opensm/osm_mcast_mgr.c | 36 ++++++----------
> opensm/opensm/osm_pkey_mgr.c | 74 ++++++++++++++++------------------
> opensm/opensm/osm_qos.c | 33 ++++++++-------
> opensm/opensm/osm_state_mgr.c | 10 ++--
> 8 files changed, 130 insertions(+), 178 deletions(-)
>
> diff --git a/opensm/include/opensm/osm_base.h b/opensm/include/opensm/osm_base.h
> index bca1133..03eed79 100644
> --- a/opensm/include/opensm/osm_base.h
> +++ b/opensm/include/opensm/osm_base.h
> @@ -793,10 +793,6 @@ typedef enum _osm_thread_state {
> #define OSM_SIGNAL_PERFMGR_SWEEP 3
> #define OSM_SIGNAL_MAX 3
>
> -/* status values for sweep managers - can be removed later */
> -#define OSM_SIGNAL_DONE 16
> -#define OSM_SIGNAL_DONE_PENDING 17
> -
> typedef unsigned int osm_signal_t;
> /***********/
>
> diff --git a/opensm/include/opensm/osm_lid_mgr.h b/opensm/include/opensm/osm_lid_mgr.h
> index d6d1ab8..7e41c0c 100644
> --- a/opensm/include/opensm/osm_lid_mgr.h
> +++ b/opensm/include/opensm/osm_lid_mgr.h
> @@ -96,7 +96,6 @@ typedef struct osm_lid_mgr {
> osm_db_t *p_db;
> osm_log_t *p_log;
> cl_plock_t *p_lock;
> - boolean_t send_set_reqs;
> osm_db_domain_t *p_g2l;
> cl_qlist_t free_ranges;
> uint8_t used_lids[IB_LID_UCAST_END_HO + 1];
> @@ -118,9 +117,6 @@ typedef struct osm_lid_mgr {
> * p_lock
> * Pointer to the serializing lock.
> *
> -* send_set_reqs
> -* Boolean to indicate whether any set requests sent.
> -*
> * p_g2l
> * Pointer to the database domain storing guid to lid mapping.
> *
> @@ -239,17 +235,14 @@ osm_lid_mgr_init(IN osm_lid_mgr_t * const p_mgr, IN struct osm_sm * sm);
> *
> * SYNOPSIS
> */
> -osm_signal_t osm_lid_mgr_process_sm(IN osm_lid_mgr_t * const p_mgr);
> +int osm_lid_mgr_process_sm(IN osm_lid_mgr_t * const p_mgr);
> /*
> * PARAMETERS
> * p_mgr
> * [in] Pointer to an osm_lid_mgr_t object.
> *
> * RETURN VALUES
> -* Returns the appropriate signal to the caller:
> -* OSM_SIGNAL_DONE - operation is complete
> -* OSM_SIGNAL_DONE_PENDING - local operations are complete, but
> -* transactions are still pending on the wire.
> +* Returns 0 on success and non-zero value otherwise.
> *
> * NOTES
> *
> @@ -267,17 +260,14 @@ osm_signal_t osm_lid_mgr_process_sm(IN osm_lid_mgr_t * const p_mgr);
> *
> * SYNOPSIS
> */
> -osm_signal_t osm_lid_mgr_process_subnet(IN osm_lid_mgr_t * const p_mgr);
> +int osm_lid_mgr_process_subnet(IN osm_lid_mgr_t * const p_mgr);
> /*
> * PARAMETERS
> * p_mgr
> * [in] Pointer to an osm_lid_mgr_t object.
> *
> * RETURN VALUES
> -* Returns the appropriate signal to the caller:
> -* OSM_SIGNAL_DONE - operation is complete
> -* OSM_SIGNAL_DONE_PENDING - local operations are complete, but
> -* transactions are still pending on the wire.
> +* Returns 0 on success and non-zero value otherwise.
> *
> * NOTES
> *
> diff --git a/opensm/opensm/osm_lid_mgr.c b/opensm/opensm/osm_lid_mgr.c
> index e1d5106..34625ba 100644
> --- a/opensm/opensm/osm_lid_mgr.c
> +++ b/opensm/opensm/osm_lid_mgr.c
> @@ -821,10 +821,10 @@ static void lid_mgr_set_remote_pi_state_to_init(IN osm_lid_mgr_t * p_mgr,
>
> /**********************************************************************
> **********************************************************************/
> -static boolean_t lid_mgr_set_physp_pi(IN osm_lid_mgr_t * p_mgr,
> - IN osm_port_t * p_port,
> - IN osm_physp_t * p_physp,
> - IN ib_net16_t const lid)
> +static int lid_mgr_set_physp_pi(IN osm_lid_mgr_t * p_mgr,
> + IN osm_port_t * p_port,
> + IN osm_physp_t * p_physp,
> + IN ib_net16_t const lid)
> {
> uint8_t payload[IB_SMP_DATA_SIZE];
> ib_port_info_t *p_pi = (ib_port_info_t *) payload;
> @@ -836,6 +836,7 @@ static boolean_t lid_mgr_set_physp_pi(IN osm_lid_mgr_t * p_mgr,
> uint8_t op_vls;
> uint8_t port_num;
> boolean_t send_set = FALSE;
> + int ret = 0;
>
> OSM_LOG_ENTER(p_mgr->p_log);
>
> @@ -1068,31 +1069,31 @@ static boolean_t lid_mgr_set_physp_pi(IN osm_lid_mgr_t * p_mgr,
> if (p_mgr->p_subn->first_time_master_sweep == TRUE)
> send_set = TRUE;
>
> - if (send_set) {
> - p_mgr->send_set_reqs = TRUE;
> - status = osm_req_set(p_mgr->sm,
> - osm_physp_get_dr_path_ptr(p_physp),
> - payload, sizeof(payload),
> - IB_MAD_ATTR_PORT_INFO,
> - cl_hton32(osm_physp_get_port_num(p_physp)),
> - CL_DISP_MSGID_NONE, &context);
> - }
> + if (!send_set)
> + goto Exit;
> +
> + status = osm_req_set(p_mgr->sm, osm_physp_get_dr_path_ptr(p_physp),
> + payload, sizeof(payload), IB_MAD_ATTR_PORT_INFO,
> + cl_hton32(osm_physp_get_port_num(p_physp)),
> + CL_DISP_MSGID_NONE, &context);
> + if (status != IB_SUCCESS)
> + ret = -1;
>
> Exit:
> OSM_LOG_EXIT(p_mgr->p_log);
> - return send_set;
> + return ret;
> }
>
> /**********************************************************************
> Processes our own node
> Lock must already be held.
> **********************************************************************/
> -static boolean_t lid_mgr_process_our_sm_node(IN osm_lid_mgr_t * p_mgr)
> +static int lid_mgr_process_our_sm_node(IN osm_lid_mgr_t * p_mgr)
> {
> osm_port_t *p_port;
> uint16_t min_lid_ho;
> uint16_t max_lid_ho;
> - boolean_t res = TRUE;
> + int ret;
>
> OSM_LOG_ENTER(p_mgr->p_log);
>
> @@ -1105,7 +1106,7 @@ static boolean_t lid_mgr_process_our_sm_node(IN osm_lid_mgr_t * p_mgr)
> OSM_LOG(p_mgr->p_log, OSM_LOG_ERROR, "ERR 0308: "
> "Can't acquire SM's port object, GUID 0x%016" PRIx64
> "\n", cl_ntoh64(p_mgr->p_subn->sm_port_guid));
> - res = FALSE;
> + ret = -1;
> goto Exit;
> }
>
> @@ -1134,19 +1135,19 @@ static boolean_t lid_mgr_process_our_sm_node(IN osm_lid_mgr_t * p_mgr)
> /*
> Set the PortInfo the Physical Port associated with this Port.
> */
> - lid_mgr_set_physp_pi(p_mgr, p_port, p_port->p_physp,
> - cl_hton16(min_lid_ho));
> + ret = lid_mgr_set_physp_pi(p_mgr, p_port, p_port->p_physp,
> + cl_hton16(min_lid_ho));
>
> Exit:
> OSM_LOG_EXIT(p_mgr->p_log);
> - return res;
> + return ret;
> }
>
> /**********************************************************************
> **********************************************************************/
> -osm_signal_t osm_lid_mgr_process_sm(IN osm_lid_mgr_t * p_mgr)
> +int osm_lid_mgr_process_sm(IN osm_lid_mgr_t * p_mgr)
> {
> - osm_signal_t signal = OSM_SIGNAL_DONE_PENDING;
> + int ret;
>
> OSM_LOG_ENTER(p_mgr->p_log);
>
> @@ -1158,21 +1159,12 @@ osm_signal_t osm_lid_mgr_process_sm(IN osm_lid_mgr_t * p_mgr)
> persistent db */
> lid_mgr_init_sweep(p_mgr);
>
> - /* Set the send_set_reqs of the p_mgr to FALSE, and
> - we'll see if any set requests were sent. If not -
> - can signal OSM_SIGNAL_DONE */
> - p_mgr->send_set_reqs = FALSE;
> - if (lid_mgr_process_our_sm_node(p_mgr) == FALSE)
> - /* The initialization failed */
> - signal = OSM_SIGNAL_DONE;
> -
> - if (p_mgr->send_set_reqs == FALSE)
> - signal = OSM_SIGNAL_DONE;
> + ret = lid_mgr_process_our_sm_node(p_mgr);
>
> CL_PLOCK_RELEASE(p_mgr->p_lock);
>
> OSM_LOG_EXIT(p_mgr->p_log);
> - return (signal);
> + return ret;
> }
>
> /**********************************************************************
> @@ -1181,14 +1173,13 @@ osm_signal_t osm_lid_mgr_process_sm(IN osm_lid_mgr_t * p_mgr)
> 1.2 if a change is required send the port info
> 2 if any change send the signal PENDING...
> **********************************************************************/
> -osm_signal_t osm_lid_mgr_process_subnet(IN osm_lid_mgr_t * p_mgr)
> +int osm_lid_mgr_process_subnet(IN osm_lid_mgr_t * p_mgr)
> {
> - osm_signal_t signal;
> cl_qmap_t *p_port_guid_tbl;
> osm_port_t *p_port;
> ib_net64_t port_guid;
> + int lid_changed, ret = 0;
> uint16_t min_lid_ho, max_lid_ho;
> - int lid_changed;
>
> CL_ASSERT(p_mgr);
>
> @@ -1198,11 +1189,6 @@ osm_signal_t osm_lid_mgr_process_subnet(IN osm_lid_mgr_t * p_mgr)
>
> CL_ASSERT(p_mgr->p_subn->sm_port_guid);
>
> - /* Set the send_set_reqs of the p_mgr to FALSE, and
> - we'll see if any set requests were sent. If not -
> - can signal OSM_SIGNAL_DONE */
> - p_mgr->send_set_reqs = FALSE;
> -
> p_port_guid_tbl = &p_mgr->p_subn->port_guid_tbl;
>
> for (p_port = (osm_port_t *) cl_qmap_head(p_port_guid_tbl);
> @@ -1244,19 +1230,14 @@ osm_signal_t osm_lid_mgr_process_subnet(IN osm_lid_mgr_t * p_mgr)
> /* the proc returns the fact it sent a set port info */
> if (lid_mgr_set_physp_pi(p_mgr, p_port, p_port->p_physp,
> cl_hton16(min_lid_ho)))
> - p_mgr->send_set_reqs = TRUE;
> + ret = -1;
> } /* all ports */
>
> /* store the guid to lid table in persistent db */
> osm_db_store(p_mgr->p_g2l);
>
> - if (p_mgr->send_set_reqs == FALSE)
> - signal = OSM_SIGNAL_DONE;
> - else
> - signal = OSM_SIGNAL_DONE_PENDING;
> -
> CL_PLOCK_RELEASE(p_mgr->p_lock);
>
> OSM_LOG_EXIT(p_mgr->p_log);
> - return (signal);
> + return ret;
> }
> diff --git a/opensm/opensm/osm_link_mgr.c b/opensm/opensm/osm_link_mgr.c
> index d189471..285096c 100644
> --- a/opensm/opensm/osm_link_mgr.c
> +++ b/opensm/opensm/osm_link_mgr.c
> @@ -93,8 +93,8 @@ static uint8_t link_mgr_get_smsl(IN osm_sm_t * sm, IN osm_physp_t * p_physp)
>
> /**********************************************************************
> **********************************************************************/
> -static boolean_t link_mgr_set_physp_pi(osm_sm_t * sm, IN osm_physp_t * p_physp,
> - IN uint8_t port_state)
> +static int link_mgr_set_physp_pi(osm_sm_t * sm, IN osm_physp_t * p_physp,
> + IN uint8_t port_state)
> {
> uint8_t payload[IB_SMP_DATA_SIZE];
> ib_port_info_t *p_pi = (ib_port_info_t *) payload;
> @@ -102,13 +102,10 @@ static boolean_t link_mgr_set_physp_pi(osm_sm_t * sm, IN osm_physp_t * p_physp,
> osm_madw_context_t context;
> osm_node_t *p_node;
> ib_api_status_t status;
> - uint8_t port_num;
> - uint8_t mtu;
> - uint8_t smsl = OSM_DEFAULT_SL;
> - uint8_t op_vls;
> - boolean_t esp0 = FALSE;
> - boolean_t send_set = FALSE;
> + uint8_t port_num, mtu, op_vls, smsl = OSM_DEFAULT_SL;
> + boolean_t esp0 = FALSE, send_set = FALSE;
> osm_physp_t *p_remote_physp;
> + int ret = 0;
>
> OSM_LOG_ENTER(sm->p_log);
>
> @@ -391,28 +388,29 @@ Send:
> && sm->p_subn->first_time_master_sweep == TRUE)
> send_set = TRUE;
>
> - if (send_set)
> - status = osm_req_set(sm, osm_physp_get_dr_path_ptr(p_physp),
> - payload, sizeof(payload),
> - IB_MAD_ATTR_PORT_INFO,
> - cl_hton32(port_num),
> - CL_DISP_MSGID_NONE, &context);
> + if (!send_set)
> + goto Exit;
> +
> + status = osm_req_set(sm, osm_physp_get_dr_path_ptr(p_physp),
> + payload, sizeof(payload), IB_MAD_ATTR_PORT_INFO,
> + cl_hton32(port_num), CL_DISP_MSGID_NONE, &context);
> + if (status)
> + ret = -1;
>
> Exit:
> OSM_LOG_EXIT(sm->p_log);
> - return send_set;
> + return ret;
> }
>
> /**********************************************************************
> **********************************************************************/
> -static osm_signal_t link_mgr_process_node(osm_sm_t * sm, IN osm_node_t * p_node,
> - IN const uint8_t link_state)
> +static int link_mgr_process_node(osm_sm_t * sm, IN osm_node_t * p_node,
> + IN const uint8_t link_state)
> {
> - uint32_t i;
> - uint32_t num_physp;
> osm_physp_t *p_physp;
> + uint32_t i, num_physp;
> + int ret = 0;
> uint8_t current_state;
> - osm_signal_t signal = OSM_SIGNAL_DONE;
>
> OSM_LOG_ENTER(sm->p_log);
>
> @@ -453,20 +451,20 @@ static osm_signal_t link_mgr_process_node(osm_sm_t * sm, IN osm_node_t * p_node,
> p_physp->port_num,
> ib_get_port_state_str(current_state));
> else if (link_mgr_set_physp_pi(sm, p_physp, link_state))
> - signal = OSM_SIGNAL_DONE_PENDING;
> + ret = -1;
Simpler as:
else ret = link_mgr_set_physp_pi() ?
> }
>
> OSM_LOG_EXIT(sm->p_log);
> - return (signal);
> + return ret;
> }
>
> /**********************************************************************
> **********************************************************************/
> -osm_signal_t osm_link_mgr_process(osm_sm_t * sm, IN const uint8_t link_state)
> +int osm_link_mgr_process(osm_sm_t * sm, IN const uint8_t link_state)
> {
> cl_qmap_t *p_node_guid_tbl;
> osm_node_t *p_node;
> - osm_signal_t signal = OSM_SIGNAL_DONE;
> + int ret = 0;
>
> OSM_LOG_ENTER(sm->p_log);
>
> @@ -476,14 +474,12 @@ osm_signal_t osm_link_mgr_process(osm_sm_t * sm, IN const uint8_t link_state)
>
> for (p_node = (osm_node_t *) cl_qmap_head(p_node_guid_tbl);
> p_node != (osm_node_t *) cl_qmap_end(p_node_guid_tbl);
> - p_node = (osm_node_t *) cl_qmap_next(&p_node->map_item)) {
> - if (link_mgr_process_node(sm, p_node, link_state) ==
> - OSM_SIGNAL_DONE_PENDING)
> - signal = OSM_SIGNAL_DONE_PENDING;
> - }
> + p_node = (osm_node_t *) cl_qmap_next(&p_node->map_item))
> + if (link_mgr_process_node(sm, p_node, link_state))
> + ret = -1;
Simpler as:
ret = link_mgr_process_node() ?
>
> CL_PLOCK_RELEASE(sm->p_lock);
>
> OSM_LOG_EXIT(sm->p_log);
> - return (signal);
> + return ret;
> }
> diff --git a/opensm/opensm/osm_mcast_mgr.c b/opensm/opensm/osm_mcast_mgr.c
> index de0a8a5..ea49588 100644
> --- a/opensm/opensm/osm_mcast_mgr.c
> +++ b/opensm/opensm/osm_mcast_mgr.c
> @@ -321,7 +321,7 @@ static osm_switch_t *mcast_mgr_find_root_switch(osm_sm_t * sm,
>
> /**********************************************************************
> **********************************************************************/
> -static osm_signal_t mcast_mgr_set_tbl(osm_sm_t * sm, IN osm_switch_t * p_sw)
> +static int mcast_mgr_set_tbl(osm_sm_t * sm, IN osm_switch_t * p_sw)
> {
> osm_node_t *p_node;
> osm_dr_path_t *p_path;
> @@ -333,7 +333,7 @@ static osm_signal_t mcast_mgr_set_tbl(osm_sm_t * sm, IN osm_switch_t * p_sw)
> uint32_t max_position;
> osm_mcast_tbl_t *p_tbl;
> ib_net16_t block[IB_MCAST_BLOCK_SIZE];
> - osm_signal_t signal = OSM_SIGNAL_DONE;
> + int ret = 0;
>
> CL_ASSERT(sm);
>
> @@ -375,10 +375,9 @@ static osm_signal_t mcast_mgr_set_tbl(osm_sm_t * sm, IN osm_switch_t * p_sw)
> OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 0A02: "
> "Sending multicast fwd. tbl. block failed (%s)\n",
> ib_get_err_str(status));
> + ret = -1;
> }
>
> - signal = OSM_SIGNAL_DONE_PENDING;
> -
> if (++position > max_position) {
> position = 0;
> block_num++;
> @@ -386,7 +385,7 @@ static osm_signal_t mcast_mgr_set_tbl(osm_sm_t * sm, IN osm_switch_t * p_sw)
> }
>
> OSM_LOG_EXIT(sm->p_log);
> - return signal;
> + return ret;
> }
>
> /**********************************************************************
> @@ -1104,15 +1103,13 @@ Exit:
>
> /**********************************************************************
> **********************************************************************/
> -osm_signal_t osm_mcast_mgr_process(osm_sm_t * sm)
> +int osm_mcast_mgr_process(osm_sm_t * sm)
> {
> - osm_signal_t signal;
> osm_switch_t *p_sw;
> cl_qmap_t *p_sw_tbl;
> cl_qlist_t *p_list = &sm->mgrp_list;
> osm_mgrp_t *p_mgrp;
> - boolean_t pending_transactions = FALSE;
> - int i;
> + int i, ret = 0;
>
> OSM_LOG_ENTER(sm->p_log);
>
> @@ -1142,9 +1139,8 @@ osm_signal_t osm_mcast_mgr_process(osm_sm_t * sm)
> */
> p_sw = (osm_switch_t *) cl_qmap_head(p_sw_tbl);
> while (p_sw != (osm_switch_t *) cl_qmap_end(p_sw_tbl)) {
> - signal = mcast_mgr_set_tbl(sm, p_sw);
> - if (signal == OSM_SIGNAL_DONE_PENDING)
> - pending_transactions = TRUE;
> + if (mcast_mgr_set_tbl(sm, p_sw))
> + ret = -1;
Simpler as:
ret = mcast_mgr_set_tbl() ?
> p_sw = (osm_switch_t *) cl_qmap_next(&p_sw->map_item);
> }
>
> @@ -1157,25 +1153,22 @@ osm_signal_t osm_mcast_mgr_process(osm_sm_t * sm)
>
> OSM_LOG_EXIT(sm->p_log);
>
> - if (pending_transactions == TRUE)
> - return (OSM_SIGNAL_DONE_PENDING);
> - else
> - return (OSM_SIGNAL_DONE);
> + return ret;
> }
>
> /**********************************************************************
> This is the function that is invoked during idle time to handle the
> process request for mcast groups where join/leave/delete was required.
> **********************************************************************/
> -osm_signal_t osm_mcast_mgr_process_mgroups(osm_sm_t * sm)
> +int osm_mcast_mgr_process_mgroups(osm_sm_t * sm)
> {
> cl_qlist_t *p_list = &sm->mgrp_list;
> osm_switch_t *p_sw;
> cl_qmap_t *p_sw_tbl;
> osm_mgrp_t *p_mgrp;
> ib_net16_t mlid;
> - osm_signal_t ret, signal = OSM_SIGNAL_DONE;
> osm_mcast_mgr_ctxt_t *ctx;
> + int ret = 0;
>
> OSM_LOG_ENTER(sm->p_log);
>
> @@ -1219,9 +1212,8 @@ osm_signal_t osm_mcast_mgr_process_mgroups(osm_sm_t * sm)
> p_sw_tbl = &sm->p_subn->sw_guid_tbl;
> p_sw = (osm_switch_t *) cl_qmap_head(p_sw_tbl);
> while (p_sw != (osm_switch_t *) cl_qmap_end(p_sw_tbl)) {
> - ret = mcast_mgr_set_tbl(sm, p_sw);
> - if (ret == OSM_SIGNAL_DONE_PENDING)
> - signal = ret;
> + if (mcast_mgr_set_tbl(sm, p_sw))
> + ret = -1;
> p_sw = (osm_switch_t *) cl_qmap_next(&p_sw->map_item);
> }
>
> @@ -1229,5 +1221,5 @@ osm_signal_t osm_mcast_mgr_process_mgroups(osm_sm_t * sm)
>
> CL_PLOCK_RELEASE(sm->p_lock);
> OSM_LOG_EXIT(sm->p_log);
> - return signal;
> + return ret;
> }
> diff --git a/opensm/opensm/osm_pkey_mgr.c b/opensm/opensm/osm_pkey_mgr.c
> index 9b76ed7..6b23b27 100644
> --- a/opensm/opensm/osm_pkey_mgr.c
> +++ b/opensm/opensm/osm_pkey_mgr.c
> @@ -189,7 +189,7 @@ pkey_mgr_update_pkey_entry(IN osm_sm_t * sm,
>
> /**********************************************************************
> **********************************************************************/
> -static boolean_t
> +static ib_api_status_t
> pkey_mgr_enforce_partition(IN osm_log_t * p_log, osm_sm_t * sm,
> IN osm_physp_t * p_physp, IN const boolean_t enforce)
> {
> @@ -207,7 +207,7 @@ pkey_mgr_enforce_partition(IN osm_log_t * p_log, osm_sm_t * sm,
> cl_ntoh64(osm_node_get_node_guid
> (osm_physp_get_node_ptr(p_physp))),
> osm_physp_get_port_num(p_physp));
> - return FALSE;
> + return IB_SUCCESS;
> }
>
> memset(payload, 0, IB_SMP_DATA_SIZE);
> @@ -233,28 +233,26 @@ pkey_mgr_enforce_partition(IN osm_log_t * p_log, osm_sm_t * sm,
> IB_MAD_ATTR_PORT_INFO,
> cl_hton32(osm_physp_get_port_num(p_physp)),
> CL_DISP_MSGID_NONE, &context);
> - if (status != IB_SUCCESS) {
> + if (status != IB_SUCCESS)
> OSM_LOG(p_log, OSM_LOG_ERROR, "ERR 0511: "
> "Failed to set PortInfo for "
> "node 0x%016" PRIx64 " port %u\n",
> cl_ntoh64(osm_node_get_node_guid
> (osm_physp_get_node_ptr(p_physp))),
> osm_physp_get_port_num(p_physp));
> - return FALSE;
> - } else {
> + else
> OSM_LOG(p_log, OSM_LOG_DEBUG,
> "Set PortInfo for node 0x%016" PRIx64 " port %u\n",
> cl_ntoh64(osm_node_get_node_guid
> (osm_physp_get_node_ptr(p_physp))),
> osm_physp_get_port_num(p_physp));
> - return TRUE;
> - }
> + return status;
> }
>
> /**********************************************************************
> **********************************************************************/
> -static boolean_t pkey_mgr_update_port(osm_log_t * p_log, osm_sm_t * sm,
> - const osm_port_t * const p_port)
> +static int pkey_mgr_update_port(osm_log_t * p_log, osm_sm_t * sm,
> + const osm_port_t * const p_port)
> {
> osm_physp_t *p_physp;
> osm_node_t *p_node;
> @@ -267,10 +265,10 @@ static boolean_t pkey_mgr_update_port(osm_log_t * p_log, osm_sm_t * sm,
> uint16_t num_of_blocks;
> uint16_t max_num_of_blocks;
> ib_api_status_t status;
> - boolean_t ret_val = FALSE;
> osm_pending_pkey_t *p_pending;
> boolean_t found;
> ib_pkey_table_t empty_block;
> + int ret = 0;
>
> memset(&empty_block, 0, sizeof(ib_pkey_table_t));
>
> @@ -360,32 +358,32 @@ static boolean_t pkey_mgr_update_port(osm_log_t * p_log, osm_sm_t * sm,
> status =
> pkey_mgr_update_pkey_entry(sm, p_physp, new_block,
> block_index);
> - if (status == IB_SUCCESS) {
> + if (status == IB_SUCCESS)
> OSM_LOG(p_log, OSM_LOG_DEBUG,
> "Updated pkey table block %d for node 0x%016"
> PRIx64 " port %u\n", block_index,
> cl_ntoh64(osm_node_get_node_guid(p_node)),
> osm_physp_get_port_num(p_physp));
> - ret_val = TRUE;
> - } else {
> + else {
> OSM_LOG(p_log, OSM_LOG_ERROR, "ERR 0506: "
> "pkey_mgr_update_pkey_entry() failed to update "
> "pkey table block %d for node 0x%016" PRIx64
> " port %u\n", block_index,
> cl_ntoh64(osm_node_get_node_guid(p_node)),
> osm_physp_get_port_num(p_physp));
> + ret = -1;
> }
> }
>
> - return ret_val;
> + return ret;
> }
>
> /**********************************************************************
> **********************************************************************/
> -static boolean_t
> -pkey_mgr_update_peer_port(osm_log_t * p_log, osm_sm_t * sm,
> - const osm_subn_t * p_subn,
> - const osm_port_t * const p_port, boolean_t enforce)
> +static int pkey_mgr_update_peer_port(osm_log_t * p_log, osm_sm_t * sm,
> + const osm_subn_t * p_subn,
> + const osm_port_t * const p_port,
> + boolean_t enforce)
> {
> osm_physp_t *p_physp, *peer;
> osm_node_t *p_node;
> @@ -396,21 +394,20 @@ pkey_mgr_update_peer_port(osm_log_t * p_log, osm_sm_t * sm,
> uint16_t num_of_blocks;
> uint16_t peer_max_blocks;
> ib_api_status_t status = IB_SUCCESS;
> - boolean_t ret_val = FALSE;
> - boolean_t port_info_set = FALSE;
> ib_pkey_table_t empty_block;
> + int ret = 0;
>
> memset(&empty_block, 0, sizeof(ib_pkey_table_t));
>
> p_physp = p_port->p_physp;
> if (!p_physp)
> - return FALSE;
> + return -1;
> peer = osm_physp_get_remote(p_physp);
> if (!peer)
> - return FALSE;
> + return -1;
> p_node = osm_physp_get_node_ptr(peer);
> if (!p_node->sw || !p_node->sw->switch_info.enforce_cap)
> - return FALSE;
> + return 0;
Why are the FALSEs above changed inconsistently ?
> p_pkey_tbl = osm_physp_get_pkey_tbl(p_physp);
> p_peer_pkey_tbl = &peer->pkeys;
> @@ -424,13 +421,14 @@ pkey_mgr_update_peer_port(osm_log_t * p_log, osm_sm_t * sm,
> cl_ntoh64(osm_node_get_node_guid(p_node)),
> osm_physp_get_port_num(peer));
> enforce = FALSE;
> + ret = -1;
> }
>
> if (pkey_mgr_enforce_partition(p_log, sm, peer, enforce))
> - port_info_set = TRUE;
> + ret = -1;
Simpler as:
ret = pkey_mgr_enforce_partition() ?
> if (enforce == FALSE)
> - return port_info_set;
> + return ret;
>
> p_peer_pkey_tbl->used_blocks = p_pkey_tbl->used_blocks;
> for (block_index = 0; block_index < p_pkey_tbl->used_blocks;
> @@ -443,12 +441,9 @@ pkey_mgr_update_peer_port(osm_log_t * p_log, osm_sm_t * sm,
> osm_pkey_tbl_block_get(p_peer_pkey_tbl, block_index);
> if (!peer_block
> || memcmp(peer_block, block, sizeof(*peer_block))) {
> - status =
> - pkey_mgr_update_pkey_entry(sm, peer, block,
> - block_index);
> - if (status == IB_SUCCESS)
> - ret_val = TRUE;
> - else
> + status = pkey_mgr_update_pkey_entry(sm, peer, block,
> + block_index);
> + if (status != IB_SUCCESS) {
> OSM_LOG(p_log, OSM_LOG_ERROR, "ERR 0509: "
> "pkey_mgr_update_pkey_entry() failed to update "
> "pkey table block %d for node 0x%016"
> @@ -456,19 +451,19 @@ pkey_mgr_update_peer_port(osm_log_t * p_log, osm_sm_t * sm,
> cl_ntoh64(osm_node_get_node_guid
> (p_node)),
> osm_physp_get_port_num(peer));
> + ret = -1;
> + }
> }
> }
>
> - if (ret_val)
> + if (!ret)
> OSM_LOG(p_log, OSM_LOG_DEBUG,
> "Pkey table was updated for node 0x%016" PRIx64
> " port %u\n",
> cl_ntoh64(osm_node_get_node_guid(p_node)),
> osm_physp_get_port_num(peer));
>
> - if (port_info_set)
> - return TRUE;
> - return ret_val;
> + return ret;
> }
>
> /**********************************************************************
> @@ -479,7 +474,7 @@ osm_signal_t osm_pkey_mgr_process(IN osm_opensm_t * p_osm)
> cl_map_item_t *p_next;
> osm_prtn_t *p_prtn;
> osm_port_t *p_port;
> - osm_signal_t signal = OSM_SIGNAL_DONE;
> + int ret = 0;
>
> CL_ASSERT(p_osm);
>
> @@ -490,6 +485,7 @@ osm_signal_t osm_pkey_mgr_process(IN osm_opensm_t * p_osm)
> if (osm_prtn_make_partitions(&p_osm->log, &p_osm->subn) != IB_SUCCESS) {
> OSM_LOG(&p_osm->log, OSM_LOG_ERROR, "ERR 0510: "
> "osm_prtn_make_partitions() failed\n");
> + ret = -1;
> goto _err;
> }
>
> @@ -512,17 +508,17 @@ osm_signal_t osm_pkey_mgr_process(IN osm_opensm_t * p_osm)
> p_port = (osm_port_t *) p_next;
> p_next = cl_qmap_next(p_next);
> if (pkey_mgr_update_port(&p_osm->log, &p_osm->sm, p_port))
> - signal = OSM_SIGNAL_DONE_PENDING;
> + ret = -1;
Simpler as:
ret = pkey_mgr_update_port() ?
> if ((osm_node_get_type(p_port->p_node) != IB_NODE_TYPE_SWITCH)
> && pkey_mgr_update_peer_port(&p_osm->log, &p_osm->sm,
> &p_osm->subn, p_port,
> !p_osm->subn.opt.
> no_partition_enforcement))
> - signal = OSM_SIGNAL_DONE_PENDING;
> + ret = -1;
Simpler as:
if (osm_node_get_type())
ret = pkey_mgr_update_peer_port() ?
> }
>
> _err:
> CL_PLOCK_RELEASE(&p_osm->lock);
> OSM_LOG_EXIT(&p_osm->log);
> - return (signal);
> + return ret;
> }
> diff --git a/opensm/opensm/osm_qos.c b/opensm/opensm/osm_qos.c
> index d0aa866..e3dfb58 100644
> --- a/opensm/opensm/osm_qos.c
> +++ b/opensm/opensm/osm_qos.c
> @@ -222,10 +222,10 @@ static ib_api_status_t sl2vl_update(osm_sm_t * sm, osm_port_t * p_port,
> return IB_SUCCESS;
> }
>
> -static ib_api_status_t qos_physp_setup(osm_log_t * p_log, osm_sm_t * sm,
> - osm_port_t * p_port, osm_physp_t * p,
> - uint8_t port_num, unsigned force_update,
> - const struct qos_config *qcfg)
> +static int qos_physp_setup(osm_log_t * p_log, osm_sm_t * sm,
> + osm_port_t * p_port, osm_physp_t * p,
> + uint8_t port_num, unsigned force_update,
> + const struct qos_config *qcfg)
> {
> ib_api_status_t status;
>
> @@ -241,7 +241,7 @@ static ib_api_status_t qos_physp_setup(osm_log_t * p_log, osm_sm_t * sm,
> "failed to update VLArbitration tables "
> "for port %" PRIx64 " #%d\n",
> cl_ntoh64(p->port_guid), port_num);
> - return status;
> + return -1;
> }
>
> /* setup SL2VL tables */
> @@ -251,13 +251,13 @@ static ib_api_status_t qos_physp_setup(osm_log_t * p_log, osm_sm_t * sm,
> "failed to update SL2VLMapping tables "
> "for port %" PRIx64 " #%d\n",
> cl_ntoh64(p->port_guid), port_num);
> - return status;
> + return -1;
> }
>
> - return IB_SUCCESS;
> + return 0;
> }
>
> -osm_signal_t osm_qos_setup(osm_opensm_t * p_osm)
> +int osm_qos_setup(osm_opensm_t * p_osm)
> {
> struct qos_config ca_config, sw0_config, swe_config, rtr_config;
> struct qos_config *cfg;
> @@ -267,12 +267,12 @@ osm_signal_t osm_qos_setup(osm_opensm_t * p_osm)
> uint32_t num_physp;
> osm_physp_t *p_physp;
> osm_node_t *p_node;
> - ib_api_status_t status;
> unsigned force_update;
> + int ret = 0;
> uint8_t i;
>
> if (!p_osm->subn.opt.qos)
> - return OSM_SIGNAL_DONE;
> + return 0;
>
> OSM_LOG_ENTER(&p_osm->log);
>
> @@ -305,10 +305,10 @@ osm_signal_t osm_qos_setup(osm_opensm_t * p_osm)
> continue;
> force_update = p_physp->need_update ||
> p_osm->subn.need_update;
> - status =
> - qos_physp_setup(&p_osm->log, &p_osm->sm,
> + if (qos_physp_setup(&p_osm->log, &p_osm->sm,
> p_port, p_physp, i,
> - force_update, &swe_config);
> + force_update, &swe_config))
> + ret = -1;
Simpler as:
ret = qos_physp_setup() ?
> }
> /* skip base port 0 */
> if (!ib_switch_info_is_enhanced_port0
> @@ -326,14 +326,15 @@ osm_signal_t osm_qos_setup(osm_opensm_t * p_osm)
> continue;
>
> force_update = p_physp->need_update || p_osm->subn.need_update;
> - status = qos_physp_setup(&p_osm->log, &p_osm->sm, p_port,
> - p_physp, 0, force_update, cfg);
> + if (qos_physp_setup(&p_osm->log, &p_osm->sm, p_port, p_physp,
> + 0, force_update, cfg))
> + ret = -1;
Simpler as:
ret = qos_physp_setup() ?
> }
>
> cl_plock_release(&p_osm->lock);
> OSM_LOG_EXIT(&p_osm->log);
>
> - return OSM_SIGNAL_DONE;
> + return ret;
> }
>
> /*
> diff --git a/opensm/opensm/osm_state_mgr.c b/opensm/opensm/osm_state_mgr.c
> index a3e3609..adc39a0 100644
> --- a/opensm/opensm/osm_state_mgr.c
> +++ b/opensm/opensm/osm_state_mgr.c
> @@ -64,11 +64,11 @@
> #include <opensm/osm_opensm.h>
>
> extern void osm_drop_mgr_process(IN osm_sm_t * sm);
> -extern osm_signal_t osm_qos_setup(IN osm_opensm_t * p_osm);
> -extern osm_signal_t osm_pkey_mgr_process(IN osm_opensm_t * p_osm);
> -extern osm_signal_t osm_mcast_mgr_process(IN osm_sm_t * sm);
> -extern osm_signal_t osm_mcast_mgr_process_mgroups(IN osm_sm_t * sm);
> -extern osm_signal_t osm_link_mgr_process(IN osm_sm_t * sm, IN uint8_t state);
> +extern int osm_qos_setup(IN osm_opensm_t * p_osm);
> +extern int osm_pkey_mgr_process(IN osm_opensm_t * p_osm);
> +extern int osm_mcast_mgr_process(IN osm_sm_t * sm);
> +extern int osm_mcast_mgr_process_mgroups(IN osm_sm_t * sm);
> +extern int osm_link_mgr_process(IN osm_sm_t * sm, IN uint8_t state);
>
> /**********************************************************************
> **********************************************************************/
> --
> 1.6.3.1
>
> _______________________________________________
> general mailing list
> general at lists.openfabrics.org
> http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general
>
> To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
>
More information about the general
mailing list