Lines Matching refs:shmseg

173 SYSCTL_ULONG(_kern_ipc, OID_AUTO, shmseg, CTLFLAG_RDTUN, &shminfo.shmseg, 0,
210 struct shmid_kernel *shmseg;
216 shmseg = &shmsegs[segnum];
217 if ((shmseg->u.shm_perm.mode & SHMSEG_ALLOCATED) == 0 ||
219 (shmseg->u.shm_perm.mode & SHMSEG_REMOVED) != 0) ||
220 (is_shmid && shmseg->u.shm_perm.seq != IPCID_TO_SEQ(arg)))
222 return (shmseg);
226 shm_deallocate_segment(struct shmid_kernel *shmseg)
232 vm_object_deallocate(shmseg->object);
233 shmseg->object = NULL;
234 size = round_page(shmseg->u.shm_segsz);
237 shmseg->u.shm_perm.mode = SHMSEG_FREE;
239 mac_sysvshm_cleanup(shmseg);
241 racct_sub_cred(shmseg->cred, RACCT_NSHM, 1);
242 racct_sub_cred(shmseg->cred, RACCT_SHMSIZE, size);
243 crfree(shmseg->cred);
244 shmseg->cred = NULL;
250 struct shmid_kernel *shmseg;
259 shmseg = &shmsegs[segnum];
260 size = round_page(shmseg->u.shm_segsz);
265 shmseg->u.shm_dtime = time_second;
266 if ((--shmseg->u.shm_nattch <= 0) &&
267 (shmseg->u.shm_perm.mode & SHMSEG_REMOVED)) {
268 shm_deallocate_segment(shmseg);
290 for (i = 0; i < shminfo.shmseg; i++, shmmap_s++) {
296 if (i == shminfo.shmseg)
329 struct shmid_kernel *shmseg;
341 shmmap_s = malloc(shminfo.shmseg * sizeof(struct shmmap_state),
343 for (i = 0; i < shminfo.shmseg; i++)
348 shmseg = shm_find_segment(shmid, true);
349 if (shmseg == NULL)
351 error = ipcperm(td, &shmseg->u.shm_perm,
356 error = mac_sysvshm_check_shmat(td->td_ucred, shmseg, shmflg);
360 for (i = 0; i < shminfo.shmseg; i++) {
365 if (i >= shminfo.shmseg)
367 size = round_page(shmseg->u.shm_segsz);
389 vm_object_reference(shmseg->object);
390 rv = vm_map_find(&p->p_vmspace->vm_map, shmseg->object,
394 vm_object_deallocate(shmseg->object);
400 shmseg->u.shm_lpid = p->p_pid;
401 shmseg->u.shm_atime = time_second;
402 shmseg->u.shm_nattch++;
436 struct shmid_kernel *shmseg;
477 shmseg = shm_find_segment(shmid, cmd != SHM_STAT);
478 if (shmseg == NULL)
481 error = mac_sysvshm_check_shmctl(td->td_ucred, shmseg, cmd);
488 error = ipcperm(td, &shmseg->u.shm_perm, IPC_R);
491 memcpy(buf, &shmseg->u, sizeof(struct shmid_ds));
496 shmseg->u.shm_perm);
501 error = ipcperm(td, &shmseg->u.shm_perm, IPC_M);
504 shmseg->u.shm_perm.uid = shmidp->shm_perm.uid;
505 shmseg->u.shm_perm.gid = shmidp->shm_perm.gid;
506 shmseg->u.shm_perm.mode =
507 (shmseg->u.shm_perm.mode & ~ACCESSPERMS) |
509 shmseg->u.shm_ctime = time_second;
512 error = ipcperm(td, &shmseg->u.shm_perm, IPC_M);
515 shmseg->u.shm_perm.key = IPC_PRIVATE;
516 shmseg->u.shm_perm.mode |= SHMSEG_REMOVED;
517 if (shmseg->u.shm_nattch <= 0) {
518 shm_deallocate_segment(shmseg);
598 struct shmid_kernel *shmseg;
606 shmseg = &shmsegs[segnum];
610 error = mac_sysvshm_check_shmget(td->td_ucred, shmseg, uap->shmflg);
614 if (uap->size != 0 && uap->size > shmseg->u.shm_segsz)
616 td->td_retval[0] = IXSEQ_TO_IPCID(segnum, shmseg->u.shm_perm);
624 struct shmid_kernel *shmseg;
652 shmseg = &shmsegs[segnum];
692 shmseg->object = shm_object;
693 shmseg->u.shm_perm.cuid = shmseg->u.shm_perm.uid = cred->cr_uid;
694 shmseg->u.shm_perm.cgid = shmseg->u.shm_perm.gid = cred->cr_gid;
695 shmseg->u.shm_perm.mode = (mode & ACCESSPERMS) | SHMSEG_ALLOCATED;
696 shmseg->u.shm_perm.key = uap->key;
697 shmseg->u.shm_perm.seq = (shmseg->u.shm_perm.seq + 1) & 0x7fff;
698 shmseg->cred = crhold(cred);
699 shmseg->u.shm_segsz = uap->size;
700 shmseg->u.shm_cpid = td->td_proc->p_pid;
701 shmseg->u.shm_lpid = shmseg->u.shm_nattch = 0;
702 shmseg->u.shm_atime = shmseg->u.shm_dtime = 0;
704 mac_sysvshm_create(cred, shmseg);
706 shmseg->u.shm_ctime = time_second;
709 td->td_retval[0] = IXSEQ_TO_IPCID(segnum, shmseg->u.shm_perm);
754 size = shminfo.shmseg * sizeof(struct shmmap_state);
758 for (i = 0; i < shminfo.shmseg; i++, shmmap_s++) {
780 for (i = 0, shm = base; i < shminfo.shmseg; i++, shm++) {
872 TUNABLE_ULONG_FETCH("kern.ipc.shmseg", &shminfo.shmseg);
969 struct shmid_kernel *shmseg;
979 shmseg = shm_find_segment(uap->shmid, true);
980 if (shmseg == NULL) {
984 error = ipcperm(td, &shmseg->u.shm_perm, IPC_R);
990 error = mac_sysvshm_check_shmctl(td->td_ucred, shmseg, uap->cmd);
996 ipcperm_new2old(&shmseg->u.shm_perm, &outbuf.shm_perm);
997 outbuf.shm_segsz = shmseg->u.shm_segsz;
998 outbuf.shm_cpid = shmseg->u.shm_cpid;
999 outbuf.shm_lpid = shmseg->u.shm_lpid;
1000 outbuf.shm_nattch = shmseg->u.shm_nattch;
1001 outbuf.shm_atime = shmseg->u.shm_atime;
1002 outbuf.shm_dtime = shmseg->u.shm_dtime;
1003 outbuf.shm_ctime = shmseg->u.shm_ctime;
1004 outbuf.shm_handle = shmseg->object;
1136 CP(u.shminfo, u32.shminfo32, shmseg);
1221 CP(u.shminfo, u32.shminfo32, shmseg);