/** =========================================================================== */ void ssa_db_lft_handle(void) { struct ssa_db_lft_change_rec *p_lft_change_rec; cl_list_item_t *p_item; pthread_mutex_lock(&ssa_db->lft_rec_list_lock); while ((p_item = cl_qlist_remove_head(&ssa_db->lft_rec_list)) != cl_qlist_end(&ssa_db->lft_rec_list)) { p_lft_change_rec = cl_item_obj(p_item, p_lft_change_rec, list_item); switch (p_lft_change_rec->lft_change.flags) { case LFT_CHANGED_BLOCK: lft_block_handle(p_lft_change_rec); break; case LFT_CHANGED_LFT_TOP: lft_top_handle(p_lft_change_rec); break; default: ssa_log(SSA_LOG_ALL, "Unknown LFT change event (%d)\n", p_lft_change_rec->lft_change.flags); break; } free(p_lft_change_rec); } pthread_mutex_unlock(&ssa_db->lft_rec_list_lock); }
static void query_sm_info(cl_map_item_t * item, void *cxt) { osm_madw_context_t context; osm_remote_sm_t *r_sm = cl_item_obj(item, r_sm, map_item); osm_sm_t *sm = cxt; ib_api_status_t ret; osm_port_t *p_port; p_port= osm_get_port_by_guid(sm->p_subn, r_sm->smi.guid); if (p_port == NULL) { OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 3340: " "No port object on given sm object\n"); return; } context.smi_context.port_guid = r_sm->smi.guid; context.smi_context.set_method = FALSE; context.smi_context.light_sweep = TRUE; ret = osm_req_get(sm, osm_physp_get_dr_path_ptr(p_port->p_physp), IB_MAD_ATTR_SM_INFO, 0, CL_DISP_MSGID_NONE, &context); if (ret != IB_SUCCESS) OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 3314: " "Failure requesting SMInfo (%s)\n", ib_get_err_str(ret)); }
static void __osm_ucast_mgr_process_tbl(IN cl_map_item_t * const p_map_item, IN void *context) { osm_ucast_mgr_t *p_mgr = context; osm_switch_t *const p_sw = (osm_switch_t *) p_map_item; unsigned i, lids_per_port; OSM_LOG_ENTER(p_mgr->p_log); CL_ASSERT(p_sw && p_sw->p_node); OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG, "Processing switch 0x%" PRIx64 "\n", cl_ntoh64(osm_node_get_node_guid(p_sw->p_node))); /* Initialize LIDs in buffer to invalid port number. */ memset(p_sw->new_lft, OSM_NO_PATH, IB_LID_UCAST_END_HO + 1); if (p_mgr->p_subn->opt.lmc) alloc_ports_priv(p_mgr); /* Iterate through every port setting LID routes for each port based on base LID and LMC value. */ lids_per_port = 1 << p_mgr->p_subn->opt.lmc; for (i = 0; i < lids_per_port; i++) { cl_qlist_t *list = &p_mgr->port_order_list; cl_list_item_t *item; for (item = cl_qlist_head(list); item != cl_qlist_end(list); item = cl_qlist_next(item)) { osm_port_t *port = cl_item_obj(item, port, list_item); __osm_ucast_mgr_process_port(p_mgr, p_sw, port, i); } } osm_ucast_mgr_set_fwd_table(p_mgr, p_sw); if (p_mgr->p_subn->opt.lmc) free_ports_priv(p_mgr); OSM_LOG_EXIT(p_mgr->p_log); }