[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