Lines Matching refs:p_mgr

50  *    lid_mgr_get_port_lid( p_mgr, port, &min_lid, &max_lid ):
109 void osm_lid_mgr_construct(IN osm_lid_mgr_t * p_mgr)
111 memset(p_mgr, 0, sizeof(*p_mgr));
114 void osm_lid_mgr_destroy(IN osm_lid_mgr_t * p_mgr)
118 OSM_LOG_ENTER(p_mgr->p_log);
120 while ((p_item = cl_qlist_remove_head(&p_mgr->free_ranges)) !=
121 cl_qlist_end(&p_mgr->free_ranges))
123 OSM_LOG_EXIT(p_mgr->p_log);
131 static void lid_mgr_validate_db(IN osm_lid_mgr_t * p_mgr)
140 uint8_t lmc_num_lids = (uint8_t) (1 << p_mgr->p_subn->opt.lmc);
142 OSM_LOG_ENTER(p_mgr->p_log);
148 if (osm_db_guid2lid_guids(p_mgr->p_g2l, &guids)) {
149 OSM_LOG(p_mgr->p_log, OSM_LOG_ERROR, "ERR 0310: "
156 if (osm_db_guid2lid_get(p_mgr->p_g2l, p_item->guid,
158 OSM_LOG(p_mgr->p_log, OSM_LOG_ERROR, "ERR 0311: "
166 || max_lid > p_mgr->p_subn->max_ucast_lid_ho) {
167 OSM_LOG(p_mgr->p_log, OSM_LOG_ERROR,
177 OSM_LOG(p_mgr->p_log, OSM_LOG_ERROR,
188 if (p_mgr->used_lids[lid]) {
189 OSM_LOG(p_mgr->p_log,
205 p_mgr->used_lids[lid] = 1;
207 else if (osm_db_guid2lid_delete(p_mgr->p_g2l,
209 OSM_LOG(p_mgr->p_log, OSM_LOG_ERROR,
217 OSM_LOG_EXIT(p_mgr->p_log);
220 ib_api_status_t osm_lid_mgr_init(IN osm_lid_mgr_t * p_mgr, IN osm_sm_t * sm)
226 osm_lid_mgr_construct(p_mgr);
228 p_mgr->sm = sm;
229 p_mgr->p_log = sm->p_log;
230 p_mgr->p_subn = sm->p_subn;
231 p_mgr->p_db = sm->p_db;
232 p_mgr->p_lock = sm->p_lock;
235 p_mgr->p_g2l = osm_db_domain_init(p_mgr->p_db, "guid2lid");
236 if (!p_mgr->p_g2l) {
237 OSM_LOG(p_mgr->p_log, OSM_LOG_ERROR, "ERR 0316: "
243 cl_qlist_init(&p_mgr->free_ranges);
246 if (!p_mgr->p_subn->opt.reassign_lids) {
247 if (osm_db_restore(p_mgr->p_g2l)) {
254 if (p_mgr->p_subn->opt.exit_on_fatal) {
255 osm_log_v2(p_mgr->p_log, OSM_LOG_SYS, FILE_ID,
262 OSM_LOG(p_mgr->p_log, OSM_LOG_ERROR,
269 lid_mgr_validate_db(p_mgr);
273 OSM_LOG_EXIT(p_mgr->p_log);
290 static int lid_mgr_init_sweep(IN osm_lid_mgr_t * p_mgr)
292 cl_ptr_vector_t *p_discovered_vec = &p_mgr->p_subn->port_lid_tbl;
301 uint8_t lmc_num_lids = (uint8_t) (1 << p_mgr->p_subn->opt.lmc);
304 OSM_LOG_ENTER(p_mgr->p_log);
306 lmc_mask = ~((1 << p_mgr->p_subn->opt.lmc) - 1);
314 if (p_mgr->p_subn->first_time_master_sweep == TRUE &&
315 p_mgr->p_subn->opt.reassign_lids == TRUE) {
316 osm_db_clear(p_mgr->p_g2l);
317 memset(p_mgr->used_lids, 0, sizeof(p_mgr->used_lids));
318 } else if (p_mgr->p_subn->coming_out_of_standby == TRUE) {
319 osm_db_clear(p_mgr->p_g2l);
320 memset(p_mgr->used_lids, 0, sizeof(p_mgr->used_lids));
321 if (p_mgr->p_subn->opt.honor_guid2lid_file == FALSE)
322 OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG,
325 OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG,
328 if (osm_db_restore(p_mgr->p_g2l))
329 OSM_LOG(p_mgr->p_log, OSM_LOG_ERROR,
333 lid_mgr_validate_db(p_mgr);
338 while ((p_item = cl_qlist_remove_head(&p_mgr->free_ranges)) !=
339 cl_qlist_end(&p_mgr->free_ranges))
349 if (p_mgr->p_subn->first_time_master_sweep == TRUE &&
350 p_mgr->p_subn->opt.reassign_lids == TRUE) {
351 OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG,
360 p_port_guid_tbl = &p_mgr->p_subn->port_guid_tbl;
375 if (osm_db_guid2lid_get(p_mgr->p_g2l,
382 p_mgr->p_subn))
391 OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG,
396 osm_db_guid2lid_delete(p_mgr->p_g2l,
400 p_mgr->used_lids[lid] = 0;
424 max_persistent_lid = sizeof(p_mgr->used_lids) - 1;
438 if (lid <= max_persistent_lid && p_mgr->used_lids[lid]) {
439 OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG,
458 if (!osm_db_guid2lid_get(p_mgr->p_g2l,
462 OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG,
477 (p_port->p_node->sw, p_mgr->p_subn)) {
489 OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG,
501 p_mgr->used_lids[req_lid]) {
502 OSM_LOG(p_mgr->p_log,
536 cl_qlist_insert_tail(&p_mgr->free_ranges,
538 OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG,
562 p_range->max_lid = p_mgr->p_subn->max_ucast_lid_ho;
563 cl_qlist_insert_tail(&p_mgr->free_ranges, &p_range->item);
564 OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG,
569 OSM_LOG_EXIT(p_mgr->p_log);
576 static boolean_t lid_mgr_is_range_not_persistent(IN osm_lid_mgr_t * p_mgr,
583 if (p_mgr->used_lids[i])
592 static void lid_mgr_find_free_lid_range(IN osm_lid_mgr_t * p_mgr,
604 OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG, "LMC = %u, number LIDs = %u\n",
605 p_mgr->p_subn->opt.lmc, num_lids);
607 lmc_num_lids = (1 << p_mgr->p_subn->opt.lmc);
608 lmc_mask = ~((1 << p_mgr->p_subn->opt.lmc) - 1);
613 p_item = cl_qlist_head(&p_mgr->free_ranges);
614 while (p_item != cl_qlist_end(&p_mgr->free_ranges)) {
631 cl_qlist_remove_item(&p_mgr->free_ranges,
650 OSM_LOG(p_mgr->p_log, OSM_LOG_ERROR, "ERR 0307: "
655 static void lid_mgr_cleanup_discovered_port_lid_range(IN osm_lid_mgr_t * p_mgr,
658 cl_ptr_vector_t *p_discovered_vec = &p_mgr->p_subn->port_lid_tbl;
680 static int lid_mgr_get_port_lid(IN osm_lid_mgr_t * p_mgr,
687 uint8_t num_lids = (1 << p_mgr->p_subn->opt.lmc);
691 OSM_LOG_ENTER(p_mgr->p_log);
698 !osm_switch_sp0_is_lmc_capable(p_port->p_node->sw, p_mgr->p_subn))
701 if (p_mgr->p_subn->first_time_master_sweep == TRUE &&
702 p_mgr->p_subn->opt.reassign_lids == TRUE)
708 if (!osm_db_guid2lid_get(p_mgr->p_g2l, guid, &min_lid, &max_lid)) {
712 OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG, "0x%016" PRIx64
715 OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG,
720 lid_mgr_cleanup_discovered_port_lid_range(p_mgr,
727 OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG,
742 (p_mgr, min_lid, num_lids)) {
745 OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG,
751 OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG,
756 OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG,
764 lid_mgr_cleanup_discovered_port_lid_range(p_mgr, p_port);
767 lid_mgr_find_free_lid_range(p_mgr, num_lids, p_min_lid, p_max_lid);
768 OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG,
775 osm_db_guid2lid_set(p_mgr->p_g2l, guid, *p_min_lid, *p_max_lid);
777 p_mgr->used_lids[lid] = 1;
781 cl_ptr_vector_set(&p_mgr->p_subn->port_lid_tbl, lid, p_port);
783 OSM_LOG_EXIT(p_mgr->p_log);
790 static void lid_mgr_set_remote_pi_state_to_init(IN osm_lid_mgr_t * p_mgr,
802 static int lid_mgr_set_physp_pi(IN osm_lid_mgr_t * p_mgr,
820 OSM_LOG_ENTER(p_mgr->p_log);
838 OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG,
879 p_pi->m_key = p_mgr->p_subn->opt.m_key;
885 p_pi->subnet_prefix = p_mgr->p_subn->opt.subnet_prefix;
900 p_mgr->dirty = TRUE;
908 p_pi->master_sm_base_lid = p_mgr->p_subn->sm_base_lid;
915 p_pi->m_key_lease_period = p_mgr->p_subn->opt.m_key_lease_period;
921 ib_port_info_set_mpb(p_pi, p_mgr->p_subn->opt.m_key_protect_bits);
929 ib_port_info_set_timeout(p_pi, p_mgr->p_subn->opt.subnet_timeout);
945 ib_port_info_set_lmc(p_pi, p_mgr->p_subn->opt.lmc);
951 op_vls = osm_physp_calc_link_op_vls(p_mgr->p_log, p_mgr->p_subn,
954 mtu = osm_physp_calc_link_mtu(p_mgr->p_log, p_physp,
972 p_mgr->p_subn->opt.
974 p_mgr->p_subn->opt.
986 OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG,
1000 lid_mgr_set_remote_pi_state_to_init(p_mgr, p_physp);
1020 OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG,
1027 if (p_mgr->p_subn->opt.lmc_esp0) {
1029 ib_port_info_set_lmc(p_pi, p_mgr->p_subn->opt.lmc);
1052 p_mgr->p_subn->first_time_master_sweep == TRUE || p_port->is_new)
1053 && !p_mgr->p_subn->opt.no_clients_rereg
1055 OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG,
1073 if (p_mgr->p_subn->first_time_master_sweep == TRUE)
1079 status = osm_req_set(p_mgr->sm, osm_physp_get_dr_path_ptr(p_physp),
1090 osm_db_guid2mkey_set(p_mgr->p_subn->p_g2m,
1095 OSM_LOG_EXIT(p_mgr->p_log);
1103 static int lid_mgr_process_our_sm_node(IN osm_lid_mgr_t * p_mgr)
1110 OSM_LOG_ENTER(p_mgr->p_log);
1115 p_port = osm_get_port_by_guid(p_mgr->p_subn,
1116 p_mgr->p_subn->sm_port_guid);
1118 OSM_LOG(p_mgr->p_log, OSM_LOG_ERROR, "ERR 0308: "
1120 "\n", cl_ntoh64(p_mgr->p_subn->sm_port_guid));
1133 lid_mgr_get_port_lid(p_mgr, p_port, &min_lid_ho, &max_lid_ho);
1134 OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG,
1139 p_mgr->p_subn->master_sm_base_lid = cl_hton16(min_lid_ho);
1140 p_mgr->p_subn->sm_base_lid = cl_hton16(min_lid_ho);
1142 OSM_LOG(p_mgr->p_log, OSM_LOG_VERBOSE,
1150 ret = lid_mgr_set_physp_pi(p_mgr, p_port, p_port->p_physp,
1154 OSM_LOG_EXIT(p_mgr->p_log);
1158 int osm_lid_mgr_process_sm(IN osm_lid_mgr_t * p_mgr)
1162 OSM_LOG_ENTER(p_mgr->p_log);
1164 CL_ASSERT(p_mgr->p_subn->sm_port_guid);
1166 CL_PLOCK_EXCL_ACQUIRE(p_mgr->p_lock);
1170 lid_mgr_init_sweep(p_mgr);
1172 ret = lid_mgr_process_our_sm_node(p_mgr);
1174 CL_PLOCK_RELEASE(p_mgr->p_lock);
1176 OSM_LOG_EXIT(p_mgr->p_log);
1186 int osm_lid_mgr_process_subnet(IN osm_lid_mgr_t * p_mgr)
1194 CL_ASSERT(p_mgr);
1196 OSM_LOG_ENTER(p_mgr->p_log);
1198 CL_PLOCK_EXCL_ACQUIRE(p_mgr->p_lock);
1200 CL_ASSERT(p_mgr->p_subn->sm_port_guid);
1202 p_port_guid_tbl = &p_mgr->p_subn->port_guid_tbl;
1217 if (port_guid == p_mgr->p_subn->sm_port_guid) {
1218 OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG,
1229 lid_changed = lid_mgr_get_port_lid(p_mgr, p_port,
1235 OSM_LOG(p_mgr->p_log, OSM_LOG_VERBOSE,
1241 if (lid_mgr_set_physp_pi(p_mgr, p_port, p_port->p_physp,
1247 osm_db_store(p_mgr->p_g2l, p_mgr->p_subn->opt.fsync_high_avail_files);
1249 CL_PLOCK_RELEASE(p_mgr->p_lock);
1251 OSM_LOG_EXIT(p_mgr->p_log);