Lines Matching defs:sm

131 void osm_purge_mtree(osm_sm_t * sm, IN osm_mgrp_box_t * mbox)
133 OSM_LOG_ENTER(sm->p_log);
139 OSM_LOG_EXIT(sm->p_log);
187 static float mcast_mgr_compute_avg_hops(osm_sm_t * sm, cl_qmap_t * m,
198 OSM_LOG_ENTER(sm->p_log);
217 OSM_LOG_EXIT(sm->p_log);
221 static float mcast_mgr_compute_max_hops(osm_sm_t * sm, cl_qmap_t * m,
229 OSM_LOG_ENTER(sm->p_log);
249 OSM_LOG_EXIT(sm->p_log);
260 static osm_switch_t *mcast_mgr_find_optimal_switch(osm_sm_t * sm,
269 OSM_LOG_ENTER(sm->p_log);
271 p_sw_tbl = &sm->p_subn->sw_guid_tbl;
281 hops = mcast_mgr_compute_avg_hops(sm, &mgrp_sw_map, p_sw);
283 hops = mcast_mgr_compute_max_hops(sm, &mgrp_sw_map, p_sw);
286 OSM_LOG(sm->p_log, OSM_LOG_DEBUG,
297 OSM_LOG(sm->p_log, OSM_LOG_VERBOSE,
302 OSM_LOG(sm->p_log, OSM_LOG_VERBOSE,
306 OSM_LOG_EXIT(sm->p_log);
313 osm_switch_t *osm_mcast_mgr_find_root_switch(osm_sm_t * sm, cl_qlist_t *list)
317 OSM_LOG_ENTER(sm->p_log);
325 p_sw = mcast_mgr_find_optimal_switch(sm, list);
327 OSM_LOG_EXIT(sm->p_log);
331 static int mcast_mgr_set_mft_block(osm_sm_t * sm, IN osm_switch_t * p_sw,
344 CL_ASSERT(sm);
346 OSM_LOG_ENTER(sm->p_log);
372 OSM_LOG(sm->p_log, OSM_LOG_DEBUG,
377 status = osm_req_set(sm, p_path, (void *)block, sizeof(block),
383 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 0A02: "
391 OSM_LOG_EXIT(sm->p_log);
400 static void mcast_mgr_subdivide(osm_sm_t * sm, uint16_t mlid_ho,
408 OSM_LOG_ENTER(sm->p_log);
433 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 0A03: "
447 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 0A04: "
463 OSM_LOG_EXIT(sm->p_log);
466 static void mcast_mgr_purge_list(osm_sm_t * sm, uint16_t mlid, cl_qlist_t * list)
468 if (OSM_LOG_IS_ACTIVE_V2(sm->p_log, OSM_LOG_ERROR)) {
474 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 0A06: "
489 static osm_mtree_node_t *mcast_mgr_branch(osm_sm_t * sm, uint16_t mlid_ho,
505 OSM_LOG_ENTER(sm->p_log);
513 OSM_LOG(sm->p_log, OSM_LOG_VERBOSE,
524 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 0A21: "
527 mcast_mgr_purge_list(sm, mlid_ho, p_list);
540 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 0A14: "
547 mcast_mgr_purge_list(sm, mlid_ho, p_list);
557 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 0A15: "
563 mcast_mgr_purge_list(sm, mlid_ho, p_list);
578 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 0A16: "
580 mcast_mgr_purge_list(sm, mlid_ho, p_list);
591 mcast_mgr_subdivide(sm, mlid_ho, p_sw, p_list, list_array, max_children);
600 OSM_LOG(sm->p_log, OSM_LOG_DEBUG,
634 OSM_LOG(sm->p_log, OSM_LOG_DEBUG,
668 OSM_LOG(sm->p_log, OSM_LOG_ERROR,
674 mcast_mgr_purge_list(sm, mlid_ho, p_port_list);
677 if (sm->ucast_mgr.p_subn->opt.use_ucast_cache &&
678 sm->ucast_mgr.cache_valid) {
679 OSM_LOG(sm->p_log, OSM_LOG_INFO,
682 osm_ucast_cache_invalidate(&sm->ucast_mgr);
683 sm->p_subn->force_heavy_sweep = TRUE;
709 mcast_mgr_branch(sm, mlid_ho, p_remote_node->sw,
726 OSM_LOG(sm->p_log, OSM_LOG_DEBUG,
737 OSM_LOG_EXIT(sm->p_log);
741 static ib_api_status_t mcast_mgr_build_spanning_tree(osm_sm_t * sm,
751 OSM_LOG_ENTER(sm->p_log);
759 osm_purge_mtree(sm, mbox);
763 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 0A10: "
771 OSM_LOG(sm->p_log, OSM_LOG_VERBOSE,
794 p_sw = osm_mcast_mgr_find_root_switch(sm, &port_list);
796 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 0A08: "
804 mbox->root = mcast_mgr_branch(sm, mbox->mlid, p_sw, &port_list, 0, 0,
807 OSM_LOG(sm->p_log, OSM_LOG_VERBOSE,
811 OSM_LOG_EXIT(sm->p_log);
817 void osm_mcast_mgr_set_table(osm_sm_t * sm, IN const osm_mgrp_t * p_mgrp,
827 OSM_LOG_ENTER(sm->p_log);
834 OSM_LOG(sm->p_log, OSM_LOG_VERBOSE,
857 OSM_LOG_EXIT(sm->p_log);
861 static void mcast_mgr_clear(osm_sm_t * sm, uint16_t mlid)
867 OSM_LOG_ENTER(sm->p_log);
870 p_sw_tbl = &sm->p_subn->sw_guid_tbl;
878 OSM_LOG_EXIT(sm->p_log);
886 ib_api_status_t osm_mcast_mgr_process_single(osm_sm_t * sm,
901 OSM_LOG_ENTER(sm->p_log);
908 OSM_LOG(sm->p_log, OSM_LOG_DEBUG,
916 p_port = osm_get_port_by_guid(sm->p_subn, port_guid);
918 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 0A01: "
927 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 0A05: "
936 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 0A11: "
950 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 0A22: "
958 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 0A12: "
984 OSM_LOG(sm->p_log, OSM_LOG_DEBUG,
988 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 0A13: "
996 OSM_LOG(sm->p_log, OSM_LOG_DEBUG, "Unable to add port\n");
999 OSM_LOG_EXIT(sm->p_log);
1008 static ib_api_status_t mcast_mgr_process_mlid(osm_sm_t * sm, uint16_t mlid)
1011 struct osm_routing_engine *re = sm->p_subn->p_osm->routing_engine_used;
1014 OSM_LOG_ENTER(sm->p_log);
1016 OSM_LOG(sm->p_log, OSM_LOG_DEBUG,
1022 mcast_mgr_clear(sm, mlid);
1024 mbox = osm_get_mbox_by_mlid(sm->p_subn, cl_hton16(mlid));
1029 status = mcast_mgr_build_spanning_tree(sm, mbox);
1032 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 0A17: "
1037 OSM_LOG_EXIT(sm->p_log);
1041 static void mcast_mgr_set_mfttop(IN osm_sm_t * sm, IN osm_switch_t * p_sw)
1052 OSM_LOG_ENTER(sm->p_log);
1064 if (sm->p_subn->opt.use_mfttop &&
1070 if (sm->p_subn->first_time_master_sweep == TRUE)
1071 mcast_top = cl_hton16(sm->mlids_init_max);
1084 OSM_LOG(sm->p_log, OSM_LOG_DEBUG,
1093 status = osm_req_set(sm, p_path, (uint8_t *) & si,
1100 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 0A1B: "
1106 static int mcast_mgr_set_mftables(osm_sm_t * sm)
1108 cl_qmap_t *p_sw_tbl = &sm->p_subn->sw_guid_tbl;
1121 mcast_mgr_set_mfttop(sm, p_sw);
1134 if (mcast_mgr_set_mft_block(sm, p_sw,
1152 static int alloc_mfts(osm_sm_t * sm)
1158 for (i = sm->p_subn->max_mcast_lid_ho - IB_LID_MCAST_START_HO; i >= 0;
1160 if (sm->p_subn->mboxes[i])
1166 for (item = cl_qmap_head(&sm->p_subn->sw_guid_tbl);
1167 item != cl_qmap_end(&sm->p_subn->sw_guid_tbl);
1181 int osm_mcast_mgr_process(osm_sm_t * sm, boolean_t config_all)
1187 OSM_LOG_ENTER(sm->p_log);
1189 CL_PLOCK_EXCL_ACQUIRE(sm->p_lock);
1192 if (cl_qmap_count(&sm->p_subn->sw_guid_tbl) == 0) {
1193 OSM_LOG(sm->p_log, OSM_LOG_DEBUG,
1198 if (alloc_mfts(sm)) {
1199 OSM_LOG(sm->p_log, OSM_LOG_ERROR,
1205 max_mlid = config_all ? sm->p_subn->max_mcast_lid_ho
1206 - IB_LID_MCAST_START_HO : sm->mlids_req_max;
1208 if (sm->mlids_req[i] ||
1209 (config_all && sm->p_subn->mboxes[i])) {
1210 sm->mlids_req[i] = 0;
1211 mcast_mgr_process_mlid(sm, i + IB_LID_MCAST_START_HO);
1215 sm->mlids_req_max = 0;
1217 ret = mcast_mgr_set_mftables(sm);
1219 osm_dump_mcast_routes(sm->p_subn->p_osm);
1222 CL_PLOCK_RELEASE(sm->p_lock);
1223 OSM_LOG_EXIT(sm->p_log);