Lines Matching defs:sm

67 void osm_report_sm_state(osm_sm_t * sm)
70 const char *state_str = osm_get_sm_mgr_state_str(sm->p_subn->sm_state);
72 osm_log_v2(sm->p_log, OSM_LOG_SYS, FILE_ID, "Entering %s state\n", state_str);
74 OSM_LOG_MSG_BOX(sm->p_log, OSM_LOG_VERBOSE, buf);
77 static boolean_t sm_state_mgr_send_master_sm_info_req(osm_sm_t * sm, uint8_t sm_state)
86 OSM_LOG_ENTER(sm->p_log);
96 guid = sm->master_sm_guid;
101 * under sm.
104 guid = sm->polling_sm_guid;
108 if (guid == sm->p_subn->sm_port_guid) {
109 OSM_LOG(sm->p_log, OSM_LOG_VERBOSE,
114 p_port = osm_get_port_by_guid(sm->p_subn, guid);
117 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 3203: "
127 status = osm_req_get(sm, &dr_path,
133 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 3204: "
140 OSM_LOG_EXIT(sm->p_log);
145 static void sm_state_mgr_start_polling(osm_sm_t * sm)
150 OSM_LOG_ENTER(sm->p_log);
155 sm->retry_number = 0;
160 CL_PLOCK_ACQUIRE(sm->p_lock);
161 timeout = sm->p_subn->opt.sminfo_polling_timeout;
162 sm_state_mgr_send_master_sm_info_req(sm, sm->p_subn->sm_state);
163 CL_PLOCK_RELEASE(sm->p_lock);
170 cl_status = cl_timer_start(&sm->polling_timer, timeout);
172 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 3210: "
175 OSM_LOG_EXIT(sm->p_log);
180 osm_sm_t *sm = context;
185 OSM_LOG_ENTER(sm->p_log);
187 cl_spinlock_acquire(&sm->state_lock);
188 sm_state = sm->p_subn->sm_state;
189 cl_spinlock_release(&sm->state_lock);
191 CL_PLOCK_ACQUIRE(sm->p_lock);
192 timeout = sm->p_subn->opt.sminfo_polling_timeout;
196 * 1. We are a STANDBY sm polling on the master SM.
197 * 2. We are a MASTER sm, waiting for a handover from a remote master sm.
201 sm->polling_sm_guid != 0) ||
203 CL_PLOCK_RELEASE(sm->p_lock);
208 * If we are a STANDBY sm and the osm_exit_flag is set, then let's
215 CL_PLOCK_RELEASE(sm->p_lock);
216 OSM_LOG(sm->p_log, OSM_LOG_VERBOSE,
218 cl_event_signal(&sm->subnet_up_event);
226 OSM_LOG(sm->p_log, OSM_LOG_VERBOSE, "SM State %d (%s), Retry number:%d\n",
227 sm->p_subn->sm_state, osm_get_sm_mgr_state_str(sm->p_subn->sm_state),
228 sm->retry_number);
230 if (sm->retry_number > sm->p_subn->opt.polling_retry_number) {
231 CL_PLOCK_RELEASE(sm->p_lock);
232 OSM_LOG(sm->p_log, OSM_LOG_DEBUG,
235 osm_sm_state_mgr_process(sm, OSM_SM_SIGNAL_POLLING_TIMEOUT);
239 /* Send a SubnGet(SMInfo) request to the remote sm (depends on our state) */
240 if (sm_state_mgr_send_master_sm_info_req(sm, sm_state)) {
242 sm->retry_number++;
245 CL_PLOCK_RELEASE(sm->p_lock);
248 cl_status = cl_timer_start(&sm->polling_timer, timeout);
250 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 3211: "
254 OSM_LOG_EXIT(sm->p_log);
257 static void sm_state_mgr_signal_error(osm_sm_t * sm, IN osm_sm_signal_t signal)
259 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 3207: "
262 osm_get_sm_mgr_state_str(sm->p_subn->sm_state));
265 void osm_sm_state_mgr_signal_master_is_alive(osm_sm_t * sm)
267 OSM_LOG_ENTER(sm->p_log);
268 sm->retry_number = 0;
269 OSM_LOG_EXIT(sm->p_log);
272 ib_api_status_t osm_sm_state_mgr_process(osm_sm_t * sm,
277 CL_ASSERT(sm);
279 OSM_LOG_ENTER(sm->p_log);
285 cl_spinlock_acquire(&sm->state_lock);
287 OSM_LOG(sm->p_log, OSM_LOG_DEBUG,
290 osm_get_sm_mgr_state_str(sm->p_subn->sm_state));
292 switch (sm->p_subn->sm_state) {
300 sm->p_subn->sm_state = IB_SMINFO_STATE_MASTER;
301 osm_report_sm_state(sm);
306 CL_PLOCK_EXCL_ACQUIRE(sm->p_lock);
307 sm->p_subn->first_time_master_sweep = TRUE;
308 sm->p_subn->master_sm_base_lid =
309 sm->p_subn->sm_base_lid;
310 CL_PLOCK_RELEASE(sm->p_lock);
317 sm->p_subn->sm_state = IB_SMINFO_STATE_STANDBY;
318 osm_report_sm_state(sm);
323 CL_PLOCK_EXCL_ACQUIRE(sm->p_lock);
324 sm->p_subn->ignore_existing_lfts = FALSE;
325 CL_PLOCK_RELEASE(sm->p_lock);
326 sm_state_mgr_start_polling(sm);
336 osm_sm_signal(sm, OSM_SIGNAL_SWEEP);
339 sm_state_mgr_signal_error(sm, signal);
355 sm->p_subn->sm_state = IB_SMINFO_STATE_DISCOVERING;
356 osm_report_sm_state(sm);
357 CL_PLOCK_EXCL_ACQUIRE(sm->p_lock);
358 sm->p_subn->coming_out_of_standby = TRUE;
359 CL_PLOCK_RELEASE(sm->p_lock);
360 osm_sm_signal(sm, OSM_SIGNAL_SWEEP);
366 sm->p_subn->sm_state = IB_SMINFO_STATE_NOTACTIVE;
367 osm_report_sm_state(sm);
377 CL_PLOCK_EXCL_ACQUIRE(sm->p_lock);
382 sm->p_subn->master_sm_base_lid =
383 sm->p_subn->sm_base_lid;
385 sm->p_subn->force_first_time_master_sweep = TRUE;
386 CL_PLOCK_RELEASE(sm->p_lock);
388 sm->p_subn->sm_state = IB_SMINFO_STATE_MASTER;
389 osm_report_sm_state(sm);
390 osm_sm_signal(sm, OSM_SIGNAL_SWEEP);
398 sm_state_mgr_signal_error(sm, signal);
411 sm->p_subn->sm_state = IB_SMINFO_STATE_STANDBY;
412 osm_report_sm_state(sm);
413 sm_state_mgr_start_polling(sm);
416 sm_state_mgr_signal_error(sm, signal);
427 * waited for a remote master sm to send us a handover,
429 * that remote sm.
431 * occurred because the remote sm died, and we'll find
434 * we are done polling on that remote sm - we are
446 * we are done polling on that remote sm - we got a
449 OSM_LOG(sm->p_log, OSM_LOG_VERBOSE,
452 CL_PLOCK_EXCL_ACQUIRE(sm->p_lock);
453 sm->polling_sm_guid = 0;
454 sm->p_subn->force_first_time_master_sweep = TRUE;
455 CL_PLOCK_RELEASE(sm->p_lock);
456 osm_sm_signal(sm, OSM_SIGNAL_SWEEP);
463 sm->p_subn->sm_state = IB_SMINFO_STATE_STANDBY;
464 osm_report_sm_state(sm);
465 sm_state_mgr_start_polling(sm);
475 sm_state_mgr_start_polling(sm);
478 sm->p_subn->sm_state = IB_SMINFO_STATE_DISCOVERING;
479 osm_report_sm_state(sm);
482 sm_state_mgr_signal_error(sm, signal);
489 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 3208: "
491 osm_get_sm_mgr_state_str(sm->p_subn->sm_state));
495 cl_spinlock_release(&sm->state_lock);
497 OSM_LOG_EXIT(sm->p_log);
501 ib_api_status_t osm_sm_state_mgr_check_legality(osm_sm_t * sm,
506 CL_ASSERT(sm);
508 OSM_LOG_ENTER(sm->p_log);
514 cl_spinlock_acquire(&sm->state_lock);
516 OSM_LOG(sm->p_log, OSM_LOG_DEBUG, "Received signal %s in state %s\n",
518 osm_get_sm_mgr_state_str(sm->p_subn->sm_state));
520 switch (sm->p_subn->sm_state) {
529 sm_state_mgr_signal_error(sm, signal);
545 sm_state_mgr_signal_error(sm, signal);
557 sm_state_mgr_signal_error(sm, signal);
570 sm_state_mgr_signal_error(sm, signal);
577 OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 3209: "
579 osm_get_sm_mgr_state_str(sm->p_subn->sm_state));
584 cl_spinlock_release(&sm->state_lock);
586 OSM_LOG_EXIT(sm->p_log);