void osmv_txn_abort_rmpp_txns(osm_bind_handle_t h_bind) { osmv_bind_obj_t *p_bo = (osmv_bind_obj_t *) h_bind; cl_map_item_t *p_item; cl_map_obj_t *p_obj; osmv_txn_ctx_t *p_txn; osmv_rmpp_send_ctx_t *p_send_ctx; cl_qmap_t *p_map = p_bo->txn_mgr.p_txn_map; OSM_LOG_ENTER(p_bo->p_vendor->p_log); while (FALSE == cl_is_qmap_empty(p_map)) { p_item = cl_qmap_head(p_map); p_obj = PARENT_STRUCT(p_item, cl_map_obj_t, item); p_txn = (osmv_txn_ctx_t *) cl_qmap_obj(p_obj); p_send_ctx = osmv_txn_get_rmpp_send_ctx(p_txn); if (NULL != p_send_ctx) { p_send_ctx->status = IB_INTERRUPTED; /* Wake up the sender thread to let it break out */ cl_event_signal(&p_send_ctx->event); } cl_qmap_remove_item(p_map, p_item); } OSM_LOG_EXIT(p_bo->p_vendor->p_log); }
static int updn_build_lid_matrices(IN updn_t * p_updn) { int status; OSM_LOG_ENTER(&p_updn->p_osm->log); OSM_LOG(&p_updn->p_osm->log, OSM_LOG_VERBOSE, "Ranking all port guids in the list\n"); if (!p_updn->num_roots) { OSM_LOG(&p_updn->p_osm->log, OSM_LOG_ERROR, "ERR AA0A: " "No guids were provided or number of guids is 0\n"); status = -1; goto _exit; } /* Check if it's not a switched subnet */ if (cl_is_qmap_empty(&p_updn->p_osm->subn.sw_guid_tbl)) { OSM_LOG(&p_updn->p_osm->log, OSM_LOG_ERROR, "ERR AA0B: " "This is not a switched subnet, cannot perform UPDN algorithm\n"); status = -1; goto _exit; } /* Rank the subnet switches */ updn_subn_rank(p_updn); /* After multiple ranking need to set Min Hop Table by UpDn algorithm */ OSM_LOG(&p_updn->p_osm->log, OSM_LOG_VERBOSE, "Setting all switches' Min Hop Table\n"); status = updn_set_min_hop_table(p_updn); _exit: OSM_LOG_EXIT(&p_updn->p_osm->log); return status; }
/** =========================================================================== */ struct ssa_db_extract *ssa_db_extract(osm_opensm_t *p_osm) { struct ssa_db_extract *p_ssa; osm_subn_t *p_subn = &p_osm->subn; osm_node_t *p_node, *p_next_node; osm_port_t *p_port, *p_next_port; uint64_t guid_to_lid_offset = 0; uint64_t node_offset = 0, link_offset = 0, port_offset = 0; uint64_t pkey_base_offset = 0, pkey_cur_offset = 0; uint64_t lft_top_offset = 0, lft_block_offset = 0; int lft_extract = 0; uint8_t ret = 0; ssa_log(SSA_LOG_VERBOSE, "[\n"); p_ssa = ssa_db->p_dump_db; extract_subnet_opts(p_subn, p_ssa); ret = extract_alloc_tbls(p_subn, p_ssa); if (ret) return NULL; if (cl_is_qmap_empty(&ssa_db->p_lft_db->ep_db_lft_block_tbl) && cl_is_qmap_empty(&ssa_db->p_lft_db->ep_db_lft_top_tbl)) lft_extract = 1; else if (cl_is_qmap_empty(&ssa_db->p_lft_db->ep_db_lft_block_tbl)) ssa_log_warn(SSA_LOG_DEFAULT, "inconsistent LFT block records\n"); else if (cl_is_qmap_empty(&ssa_db->p_lft_db->ep_db_lft_top_tbl)) ssa_log_warn(SSA_LOG_DEFAULT, "inconsistent LFT top records\n"); p_next_node = (osm_node_t *)cl_qmap_head(&p_subn->node_guid_tbl); while (p_next_node != (osm_node_t *)cl_qmap_end(&p_subn->node_guid_tbl)) { p_node = p_next_node; p_next_node = (osm_node_t *)cl_qmap_next(&p_node->map_item); extract_node(p_node, &node_offset, p_ssa); /* TODO: add more cases when full dump is needed */ if (!lft_extract) continue; /* Adding LFT tables * When the first SMDB dump is performed, all LFTs * are added automatically, further dumps or changes * will be done only on OSM_EVENT_ID_LFT_CHANGE */ if (osm_node_get_type(p_node) == IB_NODE_TYPE_SWITCH) extract_lft(p_node->sw, &lft_top_offset, &lft_block_offset); } p_next_port = (osm_port_t *)cl_qmap_head(&p_subn->port_guid_tbl); while (p_next_port != (osm_port_t *)cl_qmap_end(&p_subn->port_guid_tbl)) { p_port = p_next_port; p_next_port = (osm_port_t *)cl_qmap_next(&p_port->map_item); extract_guid2lid(p_port, &guid_to_lid_offset, p_ssa); dump_port_qos(p_port); /* TODO:: add log info ??? */ if (osm_node_get_type(p_port->p_physp->p_node) == IB_NODE_TYPE_SWITCH) extract_switch_port(p_port, &pkey_base_offset, &pkey_cur_offset, &port_offset, &link_offset, p_ssa); else extract_host_port(p_port, &pkey_base_offset, &pkey_cur_offset, &port_offset, &link_offset, p_ssa); pkey_base_offset += pkey_cur_offset; pkey_cur_offset = 0; } p_ssa->initialized = 1; ssa_log(SSA_LOG_VERBOSE, "]\n"); return p_ssa; }