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.
Signed-off-by: Sasha Khapyorsky <[email protected]> --- 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; } 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; 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; 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; 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; 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; 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; } _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; } /* 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; } 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 [email protected] http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
