Lines Matching refs:service

511 ipcperm_set(ipc_service_t *service, struct cred *cr,  in ipcperm_set()  argument
520 ASSERT(IPC_LOCKED(service, kperm)); in ipcperm_set()
539 audit_ipcget(service->ipcs_atype, kperm); in ipcperm_set()
560 ipcperm_set64(ipc_service_t *service, struct cred *cr, in ipcperm_set64() argument
565 ASSERT(IPC_LOCKED(service, kperm)); in ipcperm_set64()
581 audit_ipcget(service->ipcs_atype, kperm); in ipcperm_set64()
673 ipcs_destroy(ipc_service_t *service) in ipcs_destroy() argument
677 mutex_enter(&service->ipcs_lock); in ipcs_destroy()
679 ASSERT(service->ipcs_count == 0); in ipcs_destroy()
680 avl_destroy(&service->ipcs_keys); in ipcs_destroy()
681 list_destroy(&service->ipcs_usedids); in ipcs_destroy()
682 id_space_destroy(service->ipcs_ids); in ipcs_destroy()
684 for (slot = service->ipcs_table; slot; slot = next) { in ipcs_destroy()
686 kmem_free(slot, service->ipcs_tabsz * sizeof (ipc_slot_t)); in ipcs_destroy()
687 service->ipcs_tabsz >>= 1; in ipcs_destroy()
690 mutex_destroy(&service->ipcs_lock); in ipcs_destroy()
691 kmem_free(service, sizeof (ipc_service_t)); in ipcs_destroy()
698 ipcs_lock(ipc_service_t *service) in ipcs_lock() argument
700 mutex_enter(&service->ipcs_lock); in ipcs_lock()
707 ipcs_unlock(ipc_service_t *service) in ipcs_unlock() argument
709 mutex_exit(&service->ipcs_lock); in ipcs_unlock()
717 ipc_lock_internal(ipc_service_t *service, uint_t id) in ipc_lock_internal() argument
724 tabsz = service->ipcs_tabsz; in ipc_lock_internal()
727 mutex = &service->ipcs_table[index].ipct_lock; in ipc_lock_internal()
729 if (tabsz == service->ipcs_tabsz) in ipc_lock_internal()
741 ipc_lock(ipc_service_t *service, int id) in ipc_lock() argument
750 ASSERT(IPC_INDEX(id) < service->ipcs_tabsz); in ipc_lock()
751 index = ipc_lock_internal(service, id); in ipc_lock()
753 return (&service->ipcs_table[index].ipct_lock); in ipc_lock()
764 ipc_relock(ipc_service_t *service, int id, kmutex_t *lock) in ipc_relock() argument
767 ASSERT(IPC_INDEX(id) < service->ipcs_tabsz); in ipc_relock()
770 if (&service->ipcs_table[IPC_INDEX(id)].ipct_lock == lock) in ipc_relock()
774 return (ipc_lock(service, id)); in ipc_relock()
784 ipc_lookup(ipc_service_t *service, int id, kipc_perm_t **perm) in ipc_lookup() argument
795 index = ipc_lock_internal(service, id); in ipc_lookup()
796 result = service->ipcs_table[index].ipct_data; in ipc_lookup()
799 mutex_exit(&service->ipcs_table[index].ipct_lock); in ipc_lookup()
803 ASSERT(IPC_SEQ(id) == service->ipcs_table[index].ipct_seq); in ipc_lookup()
807 audit_ipc(service->ipcs_atype, id, result); in ipc_lookup()
809 return (&service->ipcs_table[index].ipct_lock); in ipc_lookup()
869 ipc_grow(ipc_service_t *service) in ipc_grow() argument
874 ASSERT(MUTEX_HELD(&service->ipcs_lock)); in ipc_grow()
877 if (service->ipcs_tabsz == IPC_IDS_MAX) in ipc_grow()
880 oldsize = service->ipcs_tabsz; in ipc_grow()
886 old = service->ipcs_table; in ipc_grow()
897 service->ipcs_table = new; in ipc_grow()
899 service->ipcs_tabsz = newsize; in ipc_grow()
906 id_space_extend(service->ipcs_ids, oldsize, service->ipcs_tabsz); in ipc_grow()
913 ipc_keylookup(ipc_service_t *service, key_t key, int flag, kipc_perm_t **permp) in ipc_keylookup() argument
919 ASSERT(MUTEX_HELD(&service->ipcs_lock)); in ipc_keylookup()
923 if (perm = avl_find(&service->ipcs_keys, &template, &where)) { in ipc_keylookup()
942 ipc_alloc_test(ipc_service_t *service, proc_t *pp) in ipc_alloc_test() argument
944 ASSERT(MUTEX_HELD(&service->ipcs_lock)); in ipc_alloc_test()
954 if ((rctl_test(service->ipcs_proj_rctl, pp->p_task->tk_proj->kpj_rctls, in ipc_alloc_test()
956 (rctl_test(service->ipcs_zone_rctl, pp->p_zone->zone_rctls, in ipc_alloc_test()
962 if (service->ipcs_count == service->ipcs_tabsz) { in ipc_alloc_test()
966 if (error = ipc_grow(service)) in ipc_alloc_test()
990 ipc_get(ipc_service_t *service, key_t key, int flag, kipc_perm_t **permp, in ipc_get() argument
1000 mutex_enter(&service->ipcs_lock); in ipc_get()
1001 error = ipc_keylookup(service, key, flag, &perm); in ipc_get()
1003 index = ipc_lock_internal(service, perm->ipc_id); in ipc_get()
1004 mutex_exit(&service->ipcs_lock); in ipc_get()
1014 *lockp = &service->ipcs_table[index].ipct_lock; in ipc_get()
1021 perm = kmem_zalloc(service->ipcs_ssize, KM_SLEEP); in ipc_get()
1023 mutex_enter(&service->ipcs_lock); in ipc_get()
1024 if (error = ipc_alloc_test(service, pp)) { in ipc_get()
1025 mutex_exit(&service->ipcs_lock); in ipc_get()
1026 kmem_free(perm, service->ipcs_ssize); in ipc_get()
1038 *lockp = &service->ipcs_lock; in ipc_get()
1055 ipc_commit_begin(ipc_service_t *service, key_t key, int flag, in ipc_commit_begin() argument
1074 mutex_enter(&service->ipcs_lock); in ipc_commit_begin()
1079 (((error = ipc_keylookup(service, key, flag, &perm)) != 0) || in ipc_commit_begin()
1090 if (error = ipc_alloc_test(service, pp)) in ipc_commit_begin()
1093 ASSERT(MUTEX_HELD(&service->ipcs_lock)); in ipc_commit_begin()
1098 mutex_exit(&service->ipcs_lock); in ipc_commit_begin()
1099 service->ipcs_dtor(newperm); in ipc_commit_begin()
1101 kmem_free(newperm, service->ipcs_ssize); in ipc_commit_begin()
1111 ipc_commit_end(ipc_service_t *service, kipc_perm_t *perm) in ipc_commit_end() argument
1118 ASSERT(MUTEX_HELD(&service->ipcs_lock)); in ipc_commit_end()
1127 service->ipcs_count++; in ipc_commit_end()
1128 index = id_alloc(service->ipcs_ids); in ipc_commit_end()
1129 ASSERT(index < service->ipcs_tabsz); in ipc_commit_end()
1130 slot = &service->ipcs_table[index]; in ipc_commit_end()
1145 loc = avl_find(&service->ipcs_keys, perm, &where); in ipc_commit_end()
1147 avl_insert(&service->ipcs_keys, perm, where); in ipc_commit_end()
1149 list_insert_head(&service->ipcs_usedids, perm); in ipc_commit_end()
1154 IPC_PROJ_USAGE(perm, service) += 1; in ipc_commit_end()
1155 IPC_ZONE_USAGE(perm, service) += 1; in ipc_commit_end()
1157 mutex_exit(&service->ipcs_lock); in ipc_commit_end()
1168 ipc_cleanup(ipc_service_t *service, kipc_perm_t *perm) in ipc_cleanup() argument
1173 mutex_exit(&service->ipcs_lock); in ipc_cleanup()
1174 service->ipcs_dtor(perm); in ipc_cleanup()
1178 kmem_free(perm, service->ipcs_ssize); in ipc_cleanup()
1190 ipc_remove(ipc_service_t *service, kipc_perm_t *perm) in ipc_remove() argument
1195 ASSERT(MUTEX_HELD(&service->ipcs_lock)); in ipc_remove()
1196 ASSERT(IPC_LOCKED(service, perm)); in ipc_remove()
1200 service->ipcs_table[index].ipct_data = NULL; in ipc_remove()
1203 avl_remove(&service->ipcs_keys, perm); in ipc_remove()
1204 list_remove(&service->ipcs_usedids, perm); in ipc_remove()
1207 id_free(service->ipcs_ids, index); in ipc_remove()
1209 if (service->ipcs_table[index].ipct_seq++ == IPC_SEQ_MASK) in ipc_remove()
1210 service->ipcs_table[index].ipct_seq = 0; in ipc_remove()
1211 service->ipcs_count--; in ipc_remove()
1212 ASSERT(IPC_PROJ_USAGE(perm, service) > 0); in ipc_remove()
1213 ASSERT(IPC_ZONE_USAGE(perm, service) > 0); in ipc_remove()
1214 IPC_PROJ_USAGE(perm, service) -= 1; in ipc_remove()
1215 IPC_ZONE_USAGE(perm, service) -= 1; in ipc_remove()
1216 ASSERT(service->ipcs_count || ((IPC_PROJ_USAGE(perm, service) == 0) && in ipc_remove()
1217 (IPC_ZONE_USAGE(perm, service) == 0))); in ipc_remove()
1226 ipc_rmid(ipc_service_t *service, int id, cred_t *cr) in ipc_rmid() argument
1231 mutex_enter(&service->ipcs_lock); in ipc_rmid()
1233 lock = ipc_lookup(service, id, &perm); in ipc_rmid()
1235 mutex_exit(&service->ipcs_lock); in ipc_rmid()
1239 ASSERT(service->ipcs_count > 0); in ipc_rmid()
1243 mutex_exit(&service->ipcs_lock); in ipc_rmid()
1250 ipc_remove(service, perm); in ipc_rmid()
1251 mutex_exit(&service->ipcs_lock); in ipc_rmid()
1254 service->ipcs_rmid(perm); in ipc_rmid()
1256 ipc_rele(service, perm); in ipc_rmid()
1268 ipc_ids(ipc_service_t *service, int *buf, uint_t nids, uint_t *pnids) in ipc_ids() argument
1291 idcount = service->ipcs_count; in ipc_ids()
1302 mutex_enter(&service->ipcs_lock); in ipc_ids()
1303 if (idcount >= service->ipcs_count) in ipc_ids()
1305 idcount = service->ipcs_count; in ipc_ids()
1306 mutex_exit(&service->ipcs_lock); in ipc_ids()
1314 for (perm = list_head(&service->ipcs_usedids); perm != NULL; in ipc_ids()
1315 perm = list_next(&service->ipcs_usedids, perm)) { in ipc_ids()
1320 mutex_exit(&service->ipcs_lock); in ipc_ids()
1347 ipc_remove_zone(ipc_service_t *service, zoneid_t zoneid) in ipc_remove_zone() argument
1356 mutex_enter(&service->ipcs_lock); in ipc_remove_zone()
1357 for (perm = list_head(&service->ipcs_usedids); perm != NULL; in ipc_remove_zone()
1359 next = list_next(&service->ipcs_usedids, perm); in ipc_remove_zone()
1371 lock = ipc_lock(service, perm->ipc_id); in ipc_remove_zone()
1372 ipc_remove(service, perm); in ipc_remove_zone()
1376 mutex_exit(&service->ipcs_lock); in ipc_remove_zone()
1386 (void) ipc_lock(service, perm->ipc_id); in ipc_remove_zone()
1389 service->ipcs_rmid(perm); in ipc_remove_zone()
1392 ipc_rele(service, perm); in ipc_remove_zone()