Lines Matching defs:ks

176 	ksem_t *ks;
182 ks = arg1;
183 mode = ks->ks_mode;
185 if ((kauth_cred_geteuid(cred) == ks->ks_uid && (mode & S_IWUSR) != 0) ||
186 (kauth_cred_getegid(cred) == ks->ks_gid && (mode & S_IWGRP) != 0) ||
290 ksem_t *ks;
294 LIST_FOREACH(ks, &ksem_head, ks_entry) {
295 if (strcmp(ks->ks_name, name) == 0) {
296 mutex_enter(&ks->ks_lock);
297 return ks;
304 ksem_perm(lwp_t *l, ksem_t *ks)
308 KASSERT(mutex_owned(&ks->ks_lock));
310 if (kauth_authorize_system(uc, KAUTH_SYSTEM_SEMAPHORE, 0, ks, NULL, NULL) != 0)
401 ksem_t *ks;
409 ks = ksem_lookup_pshared(id);
410 if (ks == NULL)
412 KASSERT(ks->ks_pshared_id == id);
413 KASSERT(ks->ks_pshared_proc != NULL);
425 ks = fp->f_ksem;
426 mutex_enter(&ks->ks_lock);
427 ks->ks_ref++;
432 *ksret = ks;
443 ksem_t *ks;
473 ks = kmem_zalloc(sizeof(ksem_t), KM_SLEEP);
474 mutex_init(&ks->ks_lock, MUTEX_DEFAULT, IPL_NONE);
475 cv_init(&ks->ks_cv, "psem");
476 ks->ks_name = kname;
477 ks->ks_namelen = len;
478 ks->ks_mode = mode;
479 ks->ks_value = val;
480 ks->ks_ref = 1;
483 ks->ks_uid = kauth_cred_geteuid(uc);
484 ks->ks_gid = kauth_cred_getegid(uc);
485 chgsemcnt(ks->ks_uid, 1);
488 *ksret = ks;
493 ksem_free(ksem_t *ks)
496 KASSERT(!cv_has_waiters(&ks->ks_cv));
498 chgsemcnt(ks->ks_uid, -1);
501 if (ks->ks_pshared_id) {
502 KASSERT(ks->ks_pshared_proc == NULL);
503 ksem_remove_pshared(ks);
505 if (ks->ks_name) {
506 KASSERT(ks->ks_namelen > 0);
507 kmem_free(ks->ks_name, ks->ks_namelen);
509 mutex_destroy(&ks->ks_lock);
510 cv_destroy(&ks->ks_cv);
511 kmem_free(ks, sizeof(ksem_t));
561 ksem_t *ks;
596 error = ksem_create(l, NULL, &ks, 0, val);
603 ks->ks_pshared_proc = curproc;
604 ks->ks_pshared_fd = fd;
605 ksem_alloc_pshared_id(ks);
606 id = ks->ks_pshared_id;
613 ksem_free(ks);
618 fp->f_ksem = ks;
645 ksem_t *ksnew = NULL, *ks;
694 ks = ksem_lookup(name);
696 if (ks) {
697 KASSERT(mutex_owned(&ks->ks_lock));
702 mutex_exit(&ks->ks_lock);
710 error = ksem_perm(l, ks);
712 ks->ks_ref++;
714 mutex_exit(&ks->ks_lock);
738 ks = ksnew;
739 LIST_INSERT_HEAD(&ksem_head, ks, ks_entry);
745 KASSERT(ks != NULL);
746 fp->f_ksem = ks;
768 ksem_t *ks;
770 error = ksem_get(id, &ks, &fd);
776 if (ks->ks_name == NULL) {
779 ksem_release(ks, -1);
794 ksem_t *ks = fp->f_ksem;
796 mutex_enter(&ks->ks_lock);
797 len = ks->ks_namelen;
798 name = ks->ks_name;
799 mutex_exit(&ks->ks_lock);
808 ksem_t *ks = fp->f_ksem;
810 mutex_enter(&ks->ks_lock);
814 ub->st_mode = ks->ks_mode | ((ks->ks_name && ks->ks_namelen)
816 ub->st_uid = ks->ks_uid;
817 ub->st_gid = ks->ks_gid;
818 ub->st_size = ks->ks_value;
820 ub->st_nlink = ks->ks_ref;
831 mutex_exit(&ks->ks_lock);
838 ksem_t *ks = fp->f_ksem;
840 mutex_enter(&ks->ks_lock);
842 if (ks->ks_pshared_id) {
843 if (ks->ks_pshared_proc != curproc) {
845 mutex_exit(&ks->ks_lock);
849 ks->ks_pshared_proc = NULL;
852 ksem_release(ks, -1);
864 ksem_t *ks;
873 ks = ksem_lookup(name);
875 if (ks == NULL) {
879 KASSERT(mutex_owned(&ks->ks_lock));
882 error = ksem_perm(l, ks);
884 mutex_exit(&ks->ks_lock);
890 LIST_REMOVE(ks, ks_entry);
894 refcnt = ks->ks_ref;
897 ks->ks_flags |= KS_UNLINKED;
899 mutex_exit(&ks->ks_lock);
902 ksem_free(ks);
915 ksem_t *ks;
917 error = ksem_get(SCARG(uap, id), &ks, &fd);
921 KASSERT(mutex_owned(&ks->ks_lock));
922 if (ks->ks_value == SEM_VALUE_MAX) {
926 ks->ks_value++;
927 if (ks->ks_waiters) {
928 cv_broadcast(&ks->ks_cv);
931 ksem_release(ks, fd);
939 ksem_t *ks;
941 error = ksem_get(id, &ks, &fd);
945 KASSERT(mutex_owned(&ks->ks_lock));
946 while (ks->ks_value == 0) {
947 ks->ks_waiters++;
956 error = try_p ? SET_ERROR(EAGAIN) : cv_timedwait_sig(&ks->ks_cv,
957 &ks->ks_lock, timeo);
958 ks->ks_waiters--;
962 ks->ks_value--;
964 ksem_release(ks, fd);
1023 ksem_t *ks;
1026 error = ksem_get(SCARG(uap, id), &ks, &fd);
1030 KASSERT(mutex_owned(&ks->ks_lock));
1031 val = ks->ks_value;
1032 ksem_release(ks, fd);
1045 ksem_t *ks;
1049 error = ksem_get(id, &ks, &fd);
1053 KASSERT(mutex_owned(&ks->ks_lock));
1056 if (ks->ks_name != NULL) {
1061 if (ks->ks_waiters) {
1068 KASSERT(ks->ks_pshared_proc != NULL);
1069 if (ks->ks_pshared_proc != curproc) {
1073 fd = ks->ks_pshared_fd;
1076 ks->ks_pshared_proc = NULL;
1081 KASSERT(fp->f_ksem == ks);
1084 ksem_release(ks, -1);