Lines Matching refs:perm

512     kipc_perm_t *kperm, struct ipc_perm *perm, model_t model)  in ipcperm_set()  argument
522 STRUCT_SET_HANDLE(lperm, model, perm); in ipcperm_set()
545 ipcperm_stat(struct ipc_perm *perm, kipc_perm_t *kperm, model_t model) in ipcperm_stat() argument
549 STRUCT_SET_HANDLE(lperm, model, perm); in ipcperm_stat()
784 ipc_lookup(ipc_service_t *service, int id, kipc_perm_t **perm) in ipc_lookup() argument
805 *perm = result; in ipc_lookup()
817 ipc_hold(ipc_service_t *s, kipc_perm_t *perm) in ipc_hold() argument
819 ASSERT(IPC_INDEX(perm->ipc_id) < s->ipcs_tabsz); in ipc_hold()
820 ASSERT(IPC_LOCKED(s, perm)); in ipc_hold()
821 perm->ipc_ref++; in ipc_hold()
829 ipc_rele(ipc_service_t *s, kipc_perm_t *perm) in ipc_rele() argument
833 ASSERT(IPC_INDEX(perm->ipc_id) < s->ipcs_tabsz); in ipc_rele()
834 ASSERT(IPC_LOCKED(s, perm)); in ipc_rele()
835 ASSERT(perm->ipc_ref > 0); in ipc_rele()
837 nref = --perm->ipc_ref; in ipc_rele()
838 mutex_exit(&s->ipcs_table[IPC_INDEX(perm->ipc_id)].ipct_lock); in ipc_rele()
841 ASSERT(IPC_FREE(perm)); /* ipc_rmid clears IPC_ALLOC */ in ipc_rele()
842 s->ipcs_dtor(perm); in ipc_rele()
843 project_rele(perm->ipc_proj); in ipc_rele()
844 zone_rele_ref(&perm->ipc_zone_ref, ZONE_REF_IPC); in ipc_rele()
845 kmem_free(perm, s->ipcs_ssize); in ipc_rele()
855 ipc_rele_locked(ipc_service_t *s, kipc_perm_t *perm) in ipc_rele_locked() argument
857 ASSERT(perm->ipc_ref > 1); in ipc_rele_locked()
858 ASSERT(IPC_INDEX(perm->ipc_id) < s->ipcs_tabsz); in ipc_rele_locked()
859 ASSERT(IPC_LOCKED(s, perm)); in ipc_rele_locked()
861 perm->ipc_ref--; in ipc_rele_locked()
915 kipc_perm_t *perm = NULL; in ipc_keylookup() local
923 if (perm = avl_find(&service->ipcs_keys, &template, &where)) { in ipc_keylookup()
924 ASSERT(!IPC_FREE(perm)); in ipc_keylookup()
927 if ((flag & 0777) & ~perm->ipc_mode) { in ipc_keylookup()
929 audit_ipcget(0, (void *)perm); in ipc_keylookup()
932 *permp = perm; in ipc_keylookup()
993 kipc_perm_t *perm = NULL; in ipc_get() local
1001 error = ipc_keylookup(service, key, flag, &perm); in ipc_get()
1002 if (perm != NULL) in ipc_get()
1003 index = ipc_lock_internal(service, perm->ipc_id); in ipc_get()
1007 ASSERT(perm == NULL); in ipc_get()
1011 if (perm) { in ipc_get()
1012 ASSERT(!IPC_FREE(perm)); in ipc_get()
1013 *permp = perm; in ipc_get()
1021 perm = kmem_zalloc(service->ipcs_ssize, KM_SLEEP); in ipc_get()
1026 kmem_free(perm, service->ipcs_ssize); in ipc_get()
1030 perm->ipc_cuid = perm->ipc_uid = crgetuid(cr); in ipc_get()
1031 perm->ipc_cgid = perm->ipc_gid = crgetgid(cr); in ipc_get()
1032 perm->ipc_zoneid = getzoneid(); in ipc_get()
1033 perm->ipc_mode = flag & 0777; in ipc_get()
1034 perm->ipc_key = key; in ipc_get()
1035 perm->ipc_ref = 1; in ipc_get()
1036 perm->ipc_id = IPC_ID_INVAL; in ipc_get()
1037 *permp = perm; in ipc_get()
1058 kipc_perm_t *perm; in ipc_commit_begin() local
1079 (((error = ipc_keylookup(service, key, flag, &perm)) != 0) || in ipc_commit_begin()
1080 (perm != NULL))) { in ipc_commit_begin()
1111 ipc_commit_end(ipc_service_t *service, kipc_perm_t *perm) in ipc_commit_end() argument
1121 (void) project_hold(perm->ipc_proj); in ipc_commit_end()
1137 perm->ipc_mode |= IPC_ALLOC; in ipc_commit_end()
1138 perm->ipc_id = (slot->ipct_seq << IPC_SEQ_SHIFT) | index; in ipc_commit_end()
1143 slot->ipct_data = perm; in ipc_commit_end()
1144 if (perm->ipc_key != IPC_PRIVATE) { 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()
1168 ipc_cleanup(ipc_service_t *service, kipc_perm_t *perm) in ipc_cleanup() argument
1170 ASSERT(IPC_FREE(perm)); in ipc_cleanup()
1171 if (perm->ipc_proj) { in ipc_cleanup()
1174 service->ipcs_dtor(perm); in ipc_cleanup()
1176 if (perm->ipc_zone_ref.zref_zone != NULL) in ipc_cleanup()
1177 zone_rele_ref(&perm->ipc_zone_ref, ZONE_REF_IPC); 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
1192 int id = perm->ipc_id; in ipc_remove()
1196 ASSERT(IPC_LOCKED(service, perm)); in ipc_remove()
1202 if (perm->ipc_key != IPC_PRIVATE) in ipc_remove()
1203 avl_remove(&service->ipcs_keys, perm); in ipc_remove()
1204 list_remove(&service->ipcs_usedids, perm); in ipc_remove()
1205 perm->ipc_mode &= ~IPC_ALLOC; 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()
1228 kipc_perm_t *perm; in ipc_rmid() local
1233 lock = ipc_lookup(service, id, &perm); in ipc_rmid()
1241 if (secpolicy_ipc_owner(cr, perm) != 0) { in ipc_rmid()
1250 ipc_remove(service, perm); in ipc_rmid()
1254 service->ipcs_rmid(perm); in ipc_rmid()
1256 ipc_rele(service, perm); in ipc_rmid()
1270 kipc_perm_t *perm; in ipc_ids() local
1314 for (perm = list_head(&service->ipcs_usedids); perm != NULL; in ipc_ids()
1315 perm = list_next(&service->ipcs_usedids, perm)) { in ipc_ids()
1316 ASSERT(!IPC_FREE(perm)); in ipc_ids()
1317 if (global || perm->ipc_zoneid == zoneid) in ipc_ids()
1318 ids[numids++] = perm->ipc_id; in ipc_ids()
1349 kipc_perm_t *perm, *next; in ipc_remove_zone() local
1357 for (perm = list_head(&service->ipcs_usedids); perm != NULL; in ipc_remove_zone()
1358 perm = next) { in ipc_remove_zone()
1359 next = list_next(&service->ipcs_usedids, perm); in ipc_remove_zone()
1360 if (perm->ipc_zoneid != zoneid) in ipc_remove_zone()
1370 ASSERT(!IPC_FREE(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()
1374 list_insert_tail(&rmlist, perm); in ipc_remove_zone()
1382 for (perm = list_head(&rmlist); perm != NULL; perm = next) { in ipc_remove_zone()
1383 next = list_next(&rmlist, perm); in ipc_remove_zone()
1384 list_remove(&rmlist, perm); 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()