Lines Matching refs:idm
39 #include <sys/idm/idm.h>
40 #include <sys/idm/idm_so.h>
164 cmn_err(CE_NOTE, "idm: unknown transport type (0x%x) in "
219 mutex_enter(&idm.idm_global_mutex);
220 list_insert_tail(&idm.idm_ini_conn_list, ic);
221 mutex_exit(&idm.idm_global_mutex);
254 mutex_enter(&idm.idm_global_mutex);
255 list_remove(&idm.idm_ini_conn_list, ic);
256 mutex_exit(&idm.idm_global_mutex);
258 if (taskq_dispatch(idm.idm_global_taskq,
307 * idm_notify_client has already been generated by the idm conn
428 mutex_enter(&idm.idm_global_mutex);
429 list_insert_tail(&idm.idm_tgt_svc_list, is);
430 mutex_exit(&idm.idm_global_mutex);
448 mutex_enter(&idm.idm_global_mutex);
450 list_remove(&idm.idm_tgt_svc_list, is);
452 cv_broadcast(&idm.idm_tgt_svc_cv);
453 mutex_exit(&idm.idm_global_mutex);
601 mutex_enter(&idm.idm_global_mutex);
602 for (result = list_head(&idm.idm_tgt_svc_list);
604 result = list_next(&idm.idm_tgt_svc_list, result)) {
611 cv_wait(&idm.idm_tgt_svc_cv,
612 &idm.idm_global_mutex);
613 mutex_exit(&idm.idm_global_mutex);
617 mutex_exit(&idm.idm_global_mutex);
621 mutex_exit(&idm.idm_global_mutex);
974 ASSERT(idm.idm_buf_cache != NULL);
988 buf = kmem_cache_alloc(idm.idm_buf_cache, KM_NOSLEEP);
1021 kmem_cache_free(idm.idm_buf_cache, buf);
1041 kmem_cache_free(idm.idm_buf_cache, buf);
1074 kmem_cache_free(idm.idm_buf_cache, buf);
1264 idt = kmem_cache_alloc(idm.idm_task_cache, KM_NOSLEEP);
1275 kmem_cache_free(idm.idm_task_cache, idt);
1370 kmem_cache_free(idm.idm_task_cache, idt);
1399 rw_enter(&idm.idm_taskid_table_lock, RW_READER);
1400 if (tt >= idm.idm_taskid_max) {
1401 rw_exit(&idm.idm_taskid_table_lock);
1405 idt = idm.idm_taskid_table[tt];
1426 rw_exit(&idm.idm_taskid_table_lock);
1438 rw_exit(&idm.idm_taskid_table_lock);
1477 rw_enter(&idm.idm_taskid_table_lock, RW_READER);
1479 for (idx = 0; idx < idm.idm_taskid_max; idx++) {
1480 idt = idm.idm_taskid_table[idx];
1505 rw_exit(&idm.idm_taskid_table_lock);
1507 if ((idt == NULL) || (idx == idm.idm_taskid_max))
1541 rw_enter(&idm.idm_taskid_table_lock, RW_READER);
1542 for (idx = 0; idx < idm.idm_taskid_max; idx++) {
1543 task = idm.idm_taskid_table[idx];
1550 rw_exit(&idm.idm_taskid_table_lock);
1552 rw_enter(&idm.idm_taskid_table_lock, RW_READER);
1556 rw_exit(&idm.idm_taskid_table_lock);
1588 * Abort the idm task.
2182 if (taskq_dispatch(idm.idm_global_taskq,
2210 if (taskq_dispatch(idm.idm_global_taskq,
2243 if (taskq_dispatch(idm.idm_global_taskq,
2303 rw_init(&idm.idm_taskid_table_lock, NULL, RW_DRIVER, NULL);
2306 mutex_init(&idm.idm_global_mutex, NULL, MUTEX_DEFAULT, NULL);
2308 cv_init(&idm.idm_tgt_svc_cv, NULL, CV_DEFAULT, NULL);
2309 cv_init(&idm.idm_wd_cv, NULL, CV_DEFAULT, NULL);
2315 idm.idm_global_taskq = taskq_create("idm_global_taskq", 1, minclsyspri,
2317 if (idm.idm_global_taskq == NULL) {
2318 cv_destroy(&idm.idm_wd_cv);
2319 cv_destroy(&idm.idm_tgt_svc_cv);
2320 mutex_destroy(&idm.idm_global_mutex);
2321 rw_destroy(&idm.idm_taskid_table_lock);
2326 idm.idm_wd_thread = thread_create(NULL, 0,
2328 if (idm.idm_wd_thread == NULL) {
2330 taskq_destroy(idm.idm_global_taskq);
2331 cv_destroy(&idm.idm_wd_cv);
2332 cv_destroy(&idm.idm_tgt_svc_cv);
2333 mutex_destroy(&idm.idm_global_mutex);
2334 rw_destroy(&idm.idm_taskid_table_lock);
2339 mutex_enter(&idm.idm_global_mutex);
2340 while (!idm.idm_wd_thread_running)
2341 cv_wait(&idm.idm_wd_cv, &idm.idm_global_mutex);
2342 mutex_exit(&idm.idm_global_mutex);
2348 idm.idm_taskid_max = idm_max_taskids;
2349 idm.idm_taskid_table = (idm_task_t **)
2350 kmem_zalloc(idm.idm_taskid_max * sizeof (idm_task_t *), KM_SLEEP);
2351 idm.idm_taskid_next = 0;
2354 idm.idm_buf_cache = kmem_cache_create("idm_buf_cache",
2361 idm.idm_task_cache = kmem_cache_create("idm_task_cache",
2367 list_create(&idm.idm_tgt_svc_list, sizeof (idm_svc_t),
2369 list_create(&idm.idm_tgt_conn_list, sizeof (idm_conn_t),
2371 list_create(&idm.idm_ini_conn_list, sizeof (idm_conn_t),
2378 (void) idm_idpool_create(&idm.idm_conn_id_pool);
2386 if (!list_is_empty(&idm.idm_ini_conn_list) ||
2387 !list_is_empty(&idm.idm_tgt_conn_list) ||
2388 !list_is_empty(&idm.idm_tgt_svc_list)) {
2392 mutex_enter(&idm.idm_global_mutex);
2393 idm.idm_wd_thread_running = B_FALSE;
2394 cv_signal(&idm.idm_wd_cv);
2395 mutex_exit(&idm.idm_global_mutex);
2397 thread_join(idm.idm_wd_thread_did);
2399 idm_idpool_destroy(&idm.idm_conn_id_pool);
2402 mutex_enter(&idm.idm_global_mutex);
2404 mutex_exit(&idm.idm_global_mutex);
2409 list_destroy(&idm.idm_ini_conn_list);
2410 list_destroy(&idm.idm_tgt_conn_list);
2411 list_destroy(&idm.idm_tgt_svc_list);
2412 kmem_cache_destroy(idm.idm_task_cache);
2413 kmem_cache_destroy(idm.idm_buf_cache);
2414 kmem_free(idm.idm_taskid_table,
2415 idm.idm_taskid_max * sizeof (idm_task_t *));
2416 mutex_destroy(&idm.idm_global_mutex);
2417 cv_destroy(&idm.idm_wd_cv);
2418 cv_destroy(&idm.idm_tgt_svc_cv);
2419 rw_destroy(&idm.idm_taskid_table_lock);