Lines Matching defs:semakptr

90     struct semid_kernel *semakptr);
544 semvalid(int semid, struct prison *rpr, struct semid_kernel *semakptr)
547 return ((semakptr->u.sem_perm.mode & SEM_ALLOC) == 0 ||
548 semakptr->u.sem_perm.seq != IPCID_TO_SEQ(semid) ||
549 sem_prison_cansee(rpr, semakptr) ? EINVAL : 0);
555 struct semid_kernel *semakptr;
561 semakptr = &sema[semidx];
562 KASSERT(semakptr->u.__sem_base - sem + semakptr->u.sem_nsems <= semtot,
564 semidx, semakptr->u.__sem_base, sem, semakptr->u.sem_nsems,
567 semakptr->u.sem_perm.cuid = cred ? cred->cr_uid : 0;
568 semakptr->u.sem_perm.uid = cred ? cred->cr_uid : 0;
569 semakptr->u.sem_perm.mode = 0;
570 racct_sub_cred(semakptr->cred, RACCT_NSEM, semakptr->u.sem_nsems);
571 crfree(semakptr->cred);
572 semakptr->cred = NULL;
577 mac_sysvsem_cleanup(semakptr);
579 wakeup(semakptr);
582 sema[i].u.__sem_base > semakptr->u.__sem_base)
585 for (i = semakptr->u.__sem_base - sem + semakptr->u.sem_nsems;
587 sem[i - semakptr->u.sem_nsems] = sem[i];
590 sema[i].u.__sem_base > semakptr->u.__sem_base) {
591 sema[i].u.__sem_base -= semakptr->u.sem_nsems;
595 semtot -= semakptr->u.sem_nsems;
611 sem_prison_cansee(struct prison *rpr, struct semid_kernel *semakptr)
614 if (semakptr->cred == NULL ||
615 !(rpr == semakptr->cred->cr_prison ||
616 prison_ischild(rpr, semakptr->cred->cr_prison)))
699 struct semid_kernel *semakptr;
724 semakptr = &sema[semid];
727 if ((semakptr->u.sem_perm.mode & SEM_ALLOC) == 0) {
731 if ((error = sem_prison_cansee(rpr, semakptr)))
733 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R)))
736 error = mac_sysvsem_check_semctl(cred, semakptr, cmd);
740 bcopy(&semakptr->u, arg->buf, sizeof(struct semid_ds));
741 if (cred->cr_prison != semakptr->cred->cr_prison)
743 *rval = IXSEQ_TO_IPCID(semid, semakptr->u.sem_perm);
752 semakptr = &sema[semidx];
759 error = mac_sysvsem_check_semctl(cred, semakptr, cmd);
769 if ((error = semvalid(semid, rpr, semakptr)) != 0)
771 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_M)))
778 if ((error = semvalid(semid, rpr, semakptr)) != 0)
780 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_M)))
783 semakptr->u.sem_perm.uid = sbuf->sem_perm.uid;
784 semakptr->u.sem_perm.gid = sbuf->sem_perm.gid;
785 semakptr->u.sem_perm.mode = (semakptr->u.sem_perm.mode &
787 semakptr->u.sem_ctime = time_second;
791 if ((error = semvalid(semid, rpr, semakptr)) != 0)
793 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R)))
795 bcopy(&semakptr->u, arg->buf, sizeof(struct semid_ds));
796 if (cred->cr_prison != semakptr->cred->cr_prison)
808 if ((error = semvalid(semid, rpr, semakptr)) != 0)
810 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R)))
812 if (semnum < 0 || semnum >= semakptr->u.sem_nsems) {
816 *rval = semakptr->u.__sem_base[semnum].semncnt;
820 if ((error = semvalid(semid, rpr, semakptr)) != 0)
822 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R)))
824 if (semnum < 0 || semnum >= semakptr->u.sem_nsems) {
828 *rval = semakptr->u.__sem_base[semnum].sempid;
832 if ((error = semvalid(semid, rpr, semakptr)) != 0)
834 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R)))
836 if (semnum < 0 || semnum >= semakptr->u.sem_nsems) {
840 *rval = semakptr->u.__sem_base[semnum].semval;
864 count = semakptr->u.sem_nsems;
868 if ((error = semvalid(semid, rpr, semakptr)) != 0)
870 KASSERT(count == semakptr->u.sem_nsems, ("nsems changed"));
871 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R)))
873 for (i = 0; i < semakptr->u.sem_nsems; i++)
874 array[i] = semakptr->u.__sem_base[i].semval;
881 if ((error = semvalid(semid, rpr, semakptr)) != 0)
883 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R)))
885 if (semnum < 0 || semnum >= semakptr->u.sem_nsems) {
889 *rval = semakptr->u.__sem_base[semnum].semzcnt;
893 if ((error = semvalid(semid, rpr, semakptr)) != 0)
895 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_W)))
897 if (semnum < 0 || semnum >= semakptr->u.sem_nsems) {
905 semakptr->u.__sem_base[semnum].semval = arg->val;
909 wakeup(semakptr);
917 count = semakptr->u.sem_nsems;
924 if ((error = semvalid(semid, rpr, semakptr)) != 0)
926 KASSERT(count == semakptr->u.sem_nsems, ("nsems changed"));
927 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_W)))
929 for (i = 0; i < semakptr->u.sem_nsems; i++) {
935 semakptr->u.__sem_base[i].semval = usval;
940 wakeup(semakptr);
1112 struct semid_kernel *semakptr;
1186 semakptr = &sema[semid];
1189 if ((semakptr->u.sem_perm.mode & SEM_ALLOC) == 0) {
1193 seq = semakptr->u.sem_perm.seq;
1198 if ((error = sem_prison_cansee(rpr, semakptr)) != 0)
1209 if (sopptr->sem_num >= semakptr->u.sem_nsems) {
1218 if ((error = ipcperm(td, &semakptr->u.sem_perm, j))) {
1223 error = mac_sysvsem_check_semop(td->td_ucred, semakptr, j);
1243 semptr = &semakptr->u.__sem_base[sopptr->sem_num];
1246 "semop: semakptr=%p, __sem_base=%p, "
1248 semakptr, semakptr->u.__sem_base, semptr,
1290 semakptr->u.__sem_base[sops[j].sem_num].semval -=
1312 error = msleep_sbt(semakptr, sema_mtxp, (PZERO - 4) | PCATCH,
1320 seq = semakptr->u.sem_perm.seq;
1321 if ((semakptr->u.sem_perm.mode & SEM_ALLOC) == 0 ||
1332 semptr = &semakptr->u.__sem_base[sopptr->sem_num];
1402 semakptr->u.__sem_base[sops[j].sem_num].semval -=
1415 semptr = &semakptr->u.__sem_base[sopptr->sem_num];
1418 semakptr->u.sem_otime = time_second;
1426 wakeup(semakptr);
1446 struct semid_kernel *semakptr;
1481 semakptr = &sema[semid];
1485 if ((semakptr->u.sem_perm.mode & SEM_ALLOC) == 0 ||
1486 (semakptr->u.sem_perm.seq != seq)) {
1490 if (semnum >= semakptr->u.sem_nsems)
1498 semakptr->u.__sem_base[semnum].semval));
1500 if (adjval < 0 && semakptr->u.__sem_base[semnum].semval <
1502 semakptr->u.__sem_base[semnum].semval = 0;
1504 semakptr->u.__sem_base[semnum].semval += adjval;
1506 wakeup(semakptr);