Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
/** ===========================================================================
 */
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;
}