Lines Matching +full:protect +full:- +full:exec
104 curthread->t_post_sys = 1; /* so vfwait() will be called */ in vfork()
109 * forksys system call - forkx, forkallx, vforkx. This is the
121 curthread->t_post_sys = 1; /* so vfwait() will be called */ in forksys()
138 orphpp = &pp->p_orphan; in disown_proc()
140 orphpp = &(*orphpp)->p_nextorph; in disown_proc()
141 *orphpp = cp->p_nextorph; in disown_proc()
143 if (pp->p_child == cp) in disown_proc()
144 pp->p_child = cp->p_sibling; in disown_proc()
145 if (cp->p_sibling) in disown_proc()
146 cp->p_sibling->p_psibling = cp->p_psibling; in disown_proc()
147 if (cp->p_psibling) in disown_proc()
148 cp->p_psibling->p_sibling = cp->p_sibling; in disown_proc()
177 atomic_inc_32(&curproc->p_zone->zone_ffmisc); in cfork()
184 if (curthread == p->p_agenttp) { in cfork()
186 atomic_inc_32(&curproc->p_zone->zone_ffmisc); in cfork()
191 atomic_inc_32(&p->p_zone->zone_ffmisc); in cfork()
207 atomic_inc_32(&p->p_zone->zone_ffmisc); in cfork()
219 mutex_enter(&p->p_lock); in cfork()
227 curthread->t_proc_flag &= ~TP_HOLDLWP; in cfork()
232 mutex_exit(&p->p_lock); in cfork()
238 mutex_enter(&p->p_lock); in cfork()
241 mutex_exit(&p->p_lock); in cfork()
256 as = p->p_as; in cfork()
257 if (avl_numnodes(&as->a_wpage) != 0) { in cfork()
260 p->p_wpage = as->a_wpage; in cfork()
261 avl_create(&as->a_wpage, wp_compare, in cfork()
266 cp->p_as = as; in cfork()
267 cp->p_flag |= SVFORK; in cfork()
273 cp->p_segacct = p->p_segacct; in cfork()
282 mutex_enter(&p->p_lock); in cfork()
284 p->p_flag |= SFORKING; in cfork()
285 mutex_exit(&p->p_lock); in cfork()
287 error = as_dup(p->p_as, cp); in cfork()
289 mutex_enter(&p->p_lock); in cfork()
294 mutex_enter(&cp->p_lock); in cfork()
295 tk = cp->p_task; in cfork()
297 ASSERT(cp->p_pool->pool_ref > 0); in cfork()
298 atomic_dec_32(&cp->p_pool->pool_ref); in cfork()
299 mutex_exit(&cp->p_lock); in cfork()
304 mutex_enter(&p->p_lock); in cfork()
305 p->p_flag &= ~SFORKING; in cfork()
308 mutex_exit(&p->p_lock); in cfork()
314 atomic_inc_32(&p->p_zone->zone_ffnomem); in cfork()
323 if (p->p_dtrace_count > 0) in cfork()
326 mutex_enter(&p->p_lock); in cfork()
330 if (p->p_segacct) in cfork()
338 if (p->p_dtrace_helpers != NULL) { in cfork()
343 mutex_enter(&p->p_lock); in cfork()
344 p->p_flag &= ~SFORKING; in cfork()
345 mutex_exit(&p->p_lock); in cfork()
353 dup_gp = rctl_set_dup_prealloc(p->p_rctls); in cfork()
354 mutex_enter(&p->p_rctls->rcs_lock); in cfork()
355 if (rctl_set_dup_ready(p->p_rctls, dup_gp)) in cfork()
357 mutex_exit(&p->p_rctls->rcs_lock); in cfork()
362 cp->p_rctls = rctl_set_dup(p->p_rctls, p, cp, &e, dup_set, dup_gp, in cfork()
364 mutex_exit(&p->p_rctls->rcs_lock); in cfork()
372 cp->p_lwpdir_sz = 2; in cfork()
374 cp->p_lwpdir_sz = p->p_lwpdir_sz; in cfork()
375 cp->p_lwpdir = cp->p_lwpfree = ldp = in cfork()
376 kmem_zalloc(cp->p_lwpdir_sz * sizeof (lwpdir_t), KM_SLEEP); in cfork()
377 for (i = 1; i < cp->p_lwpdir_sz; i++, ldp++) in cfork()
378 ldp->ld_next = ldp + 1; in cfork()
379 cp->p_tidhash_sz = (cp->p_lwpdir_sz + 2) / 2; in cfork()
380 cp->p_tidhash = in cfork()
381 kmem_zalloc(cp->p_tidhash_sz * sizeof (tidhash_t), KM_SLEEP); in cfork()
388 klgrpset_clear(cp->p_lgrpset); in cfork()
390 clone = forklwp(ttolwp(curthread), cp, curthread->t_tid); in cfork()
397 lwptot(clone)->t_proc_flag |= in cfork()
398 (curthread->t_proc_flag & TP_TWAIT); in cfork()
401 ASSERT(p->p_lwpwait == 0 && p->p_lwpdwait == 0); in cfork()
403 for (i = 0, ldp = p->p_lwpdir; i < p->p_lwpdir_sz; i++, ldp++) { in cfork()
407 if ((lep = ldp->ld_entry) == NULL) in cfork()
410 if ((t = lep->le_thread) != NULL) { in cfork()
411 clwp = forklwp(ttolwp(t), cp, t->t_tid); in cfork()
418 ct->t_proc_flag |= in cfork()
419 (t->t_proc_flag & (TP_TWAIT|TP_DAEMON)); in cfork()
429 ct->t_flag |= T_FORKALL; in cfork()
435 clep->le_lwpid = lep->le_lwpid; in cfork()
436 clep->le_start = lep->le_start; in cfork()
438 cp->p_tidhash, cp->p_tidhash_sz, 0); in cfork()
450 atomic_inc_32(&p->p_zone->zone_ffmisc); in cfork()
458 cp->p_lwpid = p->p_lwpid; in cfork()
460 cp->p_lwpdaemon = p->p_lwpdaemon; in cfork()
461 cp->p_zombcnt = p->p_zombcnt; in cfork()
466 cp->p_flag |= p->p_flag & SLWPWRAP; in cfork()
469 mutex_enter(&p->p_lock); in cfork()
470 corectl_path_hold(cp->p_corefile = p->p_corefile); in cfork()
471 corectl_content_hold(cp->p_content = p->p_content); in cfork()
472 mutex_exit(&p->p_lock); in cfork()
477 if (p->p_pctx) in cfork()
488 if (PTOU(cp)->u_systrap && in cfork()
489 prismember(&PTOU(cp)->u_exitmask, curthread->t_sysnum)) { in cfork()
490 mutex_enter(&cp->p_lock); in cfork()
491 t = cp->p_tlist; in cfork()
493 t->t_proc_flag |= TP_PRSTOP; in cfork()
495 } while ((t = t->t_forw) != cp->p_tlist); in cfork()
496 mutex_exit(&cp->p_lock); in cfork()
500 * from this fork, and its asynchronous-stop flag has not in cfork()
504 if (!(p->p_proc_flag & P_PR_ASYNC) && PTOU(p)->u_systrap && in cfork()
505 prismember(&PTOU(p)->u_exitmask, curthread->t_sysnum)) { in cfork()
506 mutex_enter(&p->p_lock); in cfork()
507 t = p->p_tlist; in cfork()
509 t->t_proc_flag |= TP_PRSTOP; in cfork()
511 } while ((t = t->t_forw) != p->p_tlist); in cfork()
512 mutex_exit(&p->p_lock); in cfork()
516 BROP(p)->b_lwp_setrval(clone, p->p_pid, 1); in cfork()
518 lwp_setrval(clone, p->p_pid, 1); in cfork()
521 r.r_val1 = (int)cp->p_pid; in cfork()
526 * - all identifying features cloned or set (p_pid, p_task, p_pool) in cfork()
527 * - all resource sets associated (p_tlist->*->t_cpupart, p_as->a_mset) in cfork()
528 * - any other fields set which are used in resource set binding. in cfork()
530 mutex_enter(&p->p_lock); in cfork()
532 mutex_exit(&p->p_lock); in cfork()
535 mutex_enter(&cp->p_lock); in cfork()
541 cp->p_pidflag |= CLDNOSIGCHLD; in cfork()
543 cp->p_pidflag |= CLDWAITPID; in cfork()
549 pgjoin(cp, p->p_pgidp); in cfork()
550 cp->p_stat = SRUN; in cfork()
554 t = cp->p_tlist; in cfork()
560 if (t->t_proc_flag & TP_HOLDLWP) in cfork()
565 ASSERT(t->t_state == TS_STOPPED && in cfork()
566 !(t->t_schedflag & (TS_CREATE|TS_CSTART))); in cfork()
567 t->t_schedflag |= TS_CREATE; in cfork()
570 } while ((t = t->t_forw) != cp->p_tlist); in cfork()
571 mutex_exit(&cp->p_lock); in cfork()
575 mutex_enter(&p->p_lock); in cfork()
576 p->p_flag |= SVFWAIT; in cfork()
577 curthread->t_flag |= T_VFPARENT; in cfork()
579 cv_broadcast(&pr_pid_cv[p->p_slot]); /* inform /proc */ in cfork()
580 mutex_exit(&p->p_lock); in cfork()
585 mutex_enter(&cp->p_lock); in cfork()
589 mutex_exit(&cp->p_lock); in cfork()
598 CL_FORKRET(curthread, cp->p_tlist); in cfork()
607 if (avl_numnodes(&p->p_wpage) != 0) { in cfork()
609 as = p->p_as; in cfork()
611 as->a_wpage = p->p_wpage; in cfork()
612 avl_create(&p->p_wpage, wp_compare, in cfork()
619 if (cp->p_segacct) in cfork()
621 as = cp->p_as; in cfork()
622 cp->p_as = &kas; in cfork()
626 if (cp->p_lwpdir) { in cfork()
627 for (i = 0, ldp = cp->p_lwpdir; i < cp->p_lwpdir_sz; i++, ldp++) in cfork()
628 if ((lep = ldp->ld_entry) != NULL) in cfork()
630 kmem_free(cp->p_lwpdir, in cfork()
631 cp->p_lwpdir_sz * sizeof (*cp->p_lwpdir)); in cfork()
633 cp->p_lwpdir = NULL; in cfork()
634 cp->p_lwpfree = NULL; in cfork()
635 cp->p_lwpdir_sz = 0; in cfork()
637 if (cp->p_tidhash) in cfork()
638 kmem_free(cp->p_tidhash, in cfork()
639 cp->p_tidhash_sz * sizeof (*cp->p_tidhash)); in cfork()
640 cp->p_tidhash = NULL; in cfork()
641 cp->p_tidhash_sz = 0; in cfork()
645 if (cp->p_dtrace_helpers != NULL) { in cfork()
649 rctl_set_free(cp->p_rctls); in cfork()
655 mutex_enter(&cp->p_lock); in cfork()
656 tk = cp->p_task; in cfork()
658 ASSERT(cp->p_pool->pool_ref > 0); in cfork()
659 atomic_dec_32(&cp->p_pool->pool_ref); in cfork()
660 mutex_exit(&cp->p_lock); in cfork()
668 mutex_enter(&p->p_lock); in cfork()
671 mutex_exit(&p->p_lock); in cfork()
685 fcnt_add(fip, -1); in fork_fail()
689 upcount_dec(crgetruid(cp->p_cred), crgetzoneid(cp->p_cred)); in fork_fail()
695 crfree(cp->p_cred); in fork_fail()
697 kmem_free(fip->fi_list, fip->fi_nfiles * sizeof (uf_entry_t)); in fork_fail()
699 VN_RELE(PTOU(curproc)->u_cdir); in fork_fail()
700 if (PTOU(curproc)->u_rdir) in fork_fail()
701 VN_RELE(PTOU(curproc)->u_rdir); in fork_fail()
702 if (cp->p_exec) in fork_fail()
703 VN_RELE(cp->p_exec); in fork_fail()
704 if (cp->p_execdir) in fork_fail()
705 VN_RELE(cp->p_execdir); in fork_fail()
706 if (PTOU(curproc)->u_cwd) in fork_fail()
707 refstr_rele(PTOU(curproc)->u_cwd); in fork_fail()
718 * so we don't need to hold p->p_lock to protect the list.
730 while ((t = p->p_tlist) != NULL) { in forklwp_fail()
734 if (t != t->t_forw) in forklwp_fail()
735 p->p_tlist = t->t_forw; in forklwp_fail()
737 p->p_tlist = NULL; in forklwp_fail()
738 p->p_lwpcnt--; in forklwp_fail()
739 t->t_forw->t_back = t->t_back; in forklwp_fail()
740 t->t_back->t_forw = t->t_forw; in forklwp_fail()
742 tk = p->p_task; in forklwp_fail()
743 mutex_enter(&p->p_zone->zone_nlwps_lock); in forklwp_fail()
744 tk->tk_nlwps--; in forklwp_fail()
745 tk->tk_proj->kpj_nlwps--; in forklwp_fail()
746 p->p_zone->zone_nlwps--; in forklwp_fail()
747 mutex_exit(&p->p_zone->zone_nlwps_lock); in forklwp_fail()
749 ASSERT(t->t_schedctl == NULL); in forklwp_fail()
752 BROP(p)->b_freelwp(ttolwp(t)); in forklwp_fail()
754 if (t->t_door != NULL) { in forklwp_fail()
755 kmem_free(t->t_door, sizeof (door_data_t)); in forklwp_fail()
756 t->t_door = NULL; in forklwp_fail()
765 t->t_next->t_prev = t->t_prev; in forklwp_fail()
766 t->t_prev->t_next = t->t_next; in forklwp_fail()
768 cv_broadcast(&t->t_joincv); /* tell anyone in thread_join */ in forklwp_fail()
773 * going to show up (i.e. un-do what was done on behalf of in forklwp_fail()
785 t->t_state = TS_FREE; in forklwp_fail()
821 if (p->p_execdir != NULL) in newproc()
822 VN_RELE(p->p_execdir); in newproc()
823 if (p->p_exec != NULL) in newproc()
824 VN_RELE(p->p_exec); in newproc()
825 p->p_flag |= SNOWAIT; in newproc()
826 p->p_exec = NULL; in newproc()
827 p->p_execdir = NULL; in newproc()
835 sigemptyset(&p->p_sigmask); in newproc()
836 premptyset(&p->p_fltmask); in newproc()
838 up->u_systrap = 0; in newproc()
839 premptyset(&(up->u_entrymask)); in newproc()
840 premptyset(&(up->u_exitmask)); in newproc()
841 mutex_enter(&p->p_lock); in newproc()
844 p->p_rctls = rctl_set_init(RCENTITY_PROCESS, p, &e, init_set, in newproc()
846 mutex_exit(&p->p_lock); in newproc()
863 tk = task_create(0, p->p_zone); in newproc()
864 mutex_enter(&tk->tk_zone->zone_nlwps_lock); in newproc()
865 tk->tk_proj->kpj_ntasks++; in newproc()
866 tk->tk_nprocs++; in newproc()
867 mutex_exit(&tk->tk_zone->zone_nlwps_lock); in newproc()
874 mutex_enter(&p->p_lock); in newproc()
875 tk_old = p->p_task; /* switch to new task */ in newproc()
881 mutex_enter(&tk_old->tk_zone->zone_nlwps_lock); in newproc()
882 tk_old->tk_nprocs--; in newproc()
883 mutex_exit(&tk_old->tk_zone->zone_nlwps_lock); in newproc()
887 p->p_rctls = rctl_set_init(RCENTITY_PROCESS, p, &e, init_set, in newproc()
890 mutex_exit(&p->p_lock); in newproc()
897 &curthread->t_hold, cid, 1)) == NULL) { in newproc()
902 disown_proc(p->p_parent, p); in newproc()
904 mutex_enter(&p->p_lock); in newproc()
905 tk = p->p_task; in newproc()
907 ASSERT(p->p_pool->pool_ref > 0); in newproc()
908 atomic_add_32(&p->p_pool->pool_ref, -1); in newproc()
909 mutex_exit(&p->p_lock); in newproc()
922 *ct = &ctp->conp_contract; in newproc()
925 ASSERT3U(t->t_tid, ==, 1); in newproc()
926 p->p_lwpid = 1; in newproc()
928 pgjoin(p, p->p_parent->p_pgidp); in newproc()
929 p->p_stat = SRUN; in newproc()
930 mutex_enter(&p->p_lock); in newproc()
931 t->t_proc_flag &= ~TP_HOLDLWP; in newproc()
933 mutex_exit(&p->p_lock); in newproc()
956 if (zone_status_get(curproc->p_zone) >= ZONE_IS_SHUTTING_DOWN) in getproc()
957 return (-1); /* no point in starting new processes */ in getproc()
960 task = pp->p_task; in getproc()
961 proj = task->tk_proj; in getproc()
962 zone = pp->p_zone; in getproc()
964 mutex_enter(&pp->p_lock); in getproc()
965 mutex_enter(&zone->zone_nlwps_lock); in getproc()
967 if (task->tk_nprocs >= task->tk_nprocs_ctl) in getproc()
968 if (rctl_test(rc_task_nprocs, task->tk_rctls, in getproc()
972 if (proj->kpj_nprocs >= proj->kpj_nprocs_ctl) in getproc()
973 if (rctl_test(rc_project_nprocs, proj->kpj_rctls, in getproc()
977 if (zone->zone_nprocs >= zone->zone_nprocs_ctl) in getproc()
978 if (rctl_test(rc_zone_nprocs, zone->zone_rctls, in getproc()
983 mutex_exit(&zone->zone_nlwps_lock); in getproc()
984 mutex_exit(&pp->p_lock); in getproc()
985 atomic_inc_32(&zone->zone_ffcap); in getproc()
989 task->tk_nprocs++; in getproc()
990 proj->kpj_nprocs++; in getproc()
991 zone->zone_nprocs++; in getproc()
992 mutex_exit(&zone->zone_nlwps_lock); in getproc()
993 mutex_exit(&pp->p_lock); in getproc()
1001 mutex_init(&cp->p_splock, NULL, MUTEX_DEFAULT, NULL); in getproc()
1002 mutex_init(&cp->p_crlock, NULL, MUTEX_DEFAULT, NULL); in getproc()
1003 mutex_init(&cp->p_pflock, NULL, MUTEX_DEFAULT, NULL); in getproc()
1005 mutex_init(&cp->p_ldtlock, NULL, MUTEX_DEFAULT, NULL); in getproc()
1007 mutex_init(&cp->p_maplock, NULL, MUTEX_DEFAULT, NULL); in getproc()
1008 cp->p_stat = SIDL; in getproc()
1009 cp->p_mstart = gethrtime(); in getproc()
1010 cp->p_as = &kas; in getproc()
1016 cp->p_zone = pp->p_zone; in getproc()
1017 cp->p_t1_lgrpid = LGRP_NONE; in getproc()
1018 cp->p_tr_lgrpid = LGRP_NONE; in getproc()
1020 if ((newpid = pid_allocate(cp, pid, PID_ALLOC_PROC)) == -1) { in getproc()
1028 mutex_enter(&pp->p_lock); in getproc()
1029 cp->p_exec = pp->p_exec; in getproc()
1030 cp->p_execdir = pp->p_execdir; in getproc()
1031 mutex_exit(&pp->p_lock); in getproc()
1033 if (cp->p_exec) { in getproc()
1034 VN_HOLD(cp->p_exec); in getproc()
1040 if (VOP_OPEN(&cp->p_exec, FREAD, CRED(), NULL) != 0) { in getproc()
1041 VN_RELE(cp->p_exec); in getproc()
1042 cp->p_exec = NULLVP; in getproc()
1043 cp->p_execdir = NULLVP; in getproc()
1047 if (cp->p_execdir) in getproc()
1048 VN_HOLD(cp->p_execdir); in getproc()
1060 if (nproc >= v.v_maxup && /* short-circuit; usually false */ in getproc()
1066 "out of per-user processes for uid %d", ruid); in getproc()
1078 cp->p_next = practive; in getproc()
1079 practive->p_prev = cp; in getproc()
1082 cp->p_ignore = pp->p_ignore; in getproc()
1083 cp->p_siginfo = pp->p_siginfo; in getproc()
1084 cp->p_flag = pp->p_flag & (SJCTL|SNOWAIT|SNOCD); in getproc()
1085 cp->p_sessp = pp->p_sessp; in getproc()
1087 cp->p_brand = pp->p_brand; in getproc()
1089 BROP(pp)->b_copy_procdata(cp, pp); in getproc()
1090 cp->p_bssbase = pp->p_bssbase; in getproc()
1091 cp->p_brkbase = pp->p_brkbase; in getproc()
1092 cp->p_brksize = pp->p_brksize; in getproc()
1093 cp->p_brkpageszc = pp->p_brkpageszc; in getproc()
1094 cp->p_stksize = pp->p_stksize; in getproc()
1095 cp->p_stkpageszc = pp->p_stkpageszc; in getproc()
1096 cp->p_stkprot = pp->p_stkprot; in getproc()
1097 cp->p_datprot = pp->p_datprot; in getproc()
1098 cp->p_usrstack = pp->p_usrstack; in getproc()
1099 cp->p_model = pp->p_model; in getproc()
1100 cp->p_ppid = pp->p_pid; in getproc()
1101 cp->p_ancpid = pp->p_pid; in getproc()
1102 cp->p_portcnt = pp->p_portcnt; in getproc()
1105 * effect on exec in getproc()
1107 cp->p_secflags = pp->p_secflags; in getproc()
1112 avl_create(&cp->p_warea, wa_compare, sizeof (struct watched_area), in getproc()
1118 cp->p_stk_ctl = pp->p_stk_ctl; in getproc()
1119 cp->p_fsz_ctl = pp->p_fsz_ctl; in getproc()
1120 cp->p_vmem_ctl = pp->p_vmem_ctl; in getproc()
1121 cp->p_fno_ctl = pp->p_fno_ctl; in getproc()
1124 * Link up to parent-child-sibling chain. No need to lock in getproc()
1128 cp->p_sibling = pp->p_child; in getproc()
1129 if (pp->p_child) in getproc()
1130 pp->p_child->p_psibling = cp; in getproc()
1132 cp->p_parent = pp; in getproc()
1133 pp->p_child = cp; in getproc()
1135 cp->p_child_ns = NULL; in getproc()
1136 cp->p_sibling_ns = NULL; in getproc()
1138 cp->p_nextorph = pp->p_orphan; in getproc()
1139 cp->p_nextofkin = pp; in getproc()
1140 pp->p_orphan = cp; in getproc()
1145 cp->p_prof = pp->p_prof; in getproc()
1146 cp->p_rprof_cyclic = CYCLIC_NONE; in getproc()
1152 mutex_enter(&pp->p_lock); in getproc()
1154 cp->p_pool = pool_default; in getproc()
1155 cp->p_flag |= SSYS; in getproc()
1157 cp->p_pool = pp->p_pool; in getproc()
1159 atomic_inc_32(&cp->p_pool->pool_ref); in getproc()
1160 mutex_exit(&pp->p_lock); in getproc()
1166 mutex_enter(&cp->p_lock); in getproc()
1170 task_attach(pp->p_task, cp); in getproc()
1171 mutex_exit(&cp->p_lock); in getproc()
1174 avl_create(&cp->p_ct_held, contract_compar, sizeof (contract_t), in getproc()
1183 crhold(cp->p_cred = cr); in getproc()
1191 if (PTOU(pp)->u_cdir) { in getproc()
1192 VN_HOLD(PTOU(pp)->u_cdir); in getproc()
1200 if (PTOU(pp)->u_rdir) in getproc()
1201 VN_HOLD(PTOU(pp)->u_rdir); in getproc()
1202 if (PTOU(pp)->u_cwd) in getproc()
1203 refstr_hold(PTOU(pp)->u_cwd); in getproc()
1212 gethrestime(&uarea->u_start); in getproc()
1213 uarea->u_ticks = ddi_get_lbolt(); in getproc()
1214 uarea->u_mem = rm_asrss(pp->p_as); in getproc()
1215 uarea->u_acflag = AFORK; in getproc()
1218 * If inherit-on-fork, copy /proc tracing flags to child. in getproc()
1220 if ((pp->p_proc_flag & P_PR_FORK) != 0) { in getproc()
1221 cp->p_proc_flag |= pp->p_proc_flag & (P_PR_TRACE|P_PR_FORK); in getproc()
1222 cp->p_sigmask = pp->p_sigmask; in getproc()
1223 cp->p_fltmask = pp->p_fltmask; in getproc()
1225 sigemptyset(&cp->p_sigmask); in getproc()
1226 premptyset(&cp->p_fltmask); in getproc()
1227 uarea->u_systrap = 0; in getproc()
1228 premptyset(&uarea->u_entrymask); in getproc()
1229 premptyset(&uarea->u_exitmask); in getproc()
1234 if ((pp->p_flag & SMSFORK) != 0) in getproc()
1235 cp->p_flag |= pp->p_flag & (SMSFORK|SMSACCT); in getproc()
1240 cp->p_fixalignment = pp->p_fixalignment; in getproc()
1248 mutex_destroy(&cp->p_crlock); in getproc()
1249 mutex_destroy(&cp->p_pflock); in getproc()
1251 mutex_destroy(&cp->p_ldtlock); in getproc()
1253 if (newpid != -1) { in getproc()
1254 proc_entry_free(cp->p_pidp); in getproc()
1255 (void) pid_rele(cp->p_pidp); in getproc()
1259 mutex_enter(&zone->zone_nlwps_lock); in getproc()
1260 task->tk_nprocs--; in getproc()
1261 proj->kpj_nprocs--; in getproc()
1262 zone->zone_nprocs--; in getproc()
1263 mutex_exit(&zone->zone_nlwps_lock); in getproc()
1264 atomic_inc_32(&zone->zone_ffnoproc); in getproc()
1281 return (-1); /* out of memory or proc slots */ in getproc()
1295 ASSERT((unsigned)p->p_lwpcnt <= 1); in relvm()
1299 if (p->p_flag & SVFORK) { in relvm()
1300 proc_t *pp = p->p_parent; in relvm()
1302 * The child process is either exec'ing or exit'ing. in relvm()
1316 mutex_enter(&p->p_lock); /* grab child's lock first */ in relvm()
1318 mutex_enter(&pp->p_lock); in relvm()
1323 if (pp->p_proc_flag & P_PR_LOCK) { in relvm()
1326 * We must drop our (the child's) p->p_lock, wait in relvm()
1329 mutex_exit(&p->p_lock); in relvm()
1331 mutex_exit(&pp->p_lock); in relvm()
1334 p->p_flag &= ~SVFORK; in relvm()
1336 p->p_as = &kas; in relvm()
1348 pp->p_brkbase = p->p_brkbase; in relvm()
1349 pp->p_brksize = p->p_brksize; in relvm()
1350 pp->p_stksize = p->p_stksize; in relvm()
1356 pp->p_segacct = p->p_segacct; in relvm()
1357 p->p_segacct = NULL; in relvm()
1364 pp->p_flag &= ~SVFWAIT; in relvm()
1365 if (avl_numnodes(&pp->p_wpage) != 0) { in relvm()
1366 pp->p_as->a_wpage = pp->p_wpage; in relvm()
1367 avl_create(&pp->p_wpage, wp_compare, in relvm()
1371 cv_signal(&pp->p_cv); in relvm()
1372 mutex_exit(&pp->p_lock); in relvm()
1373 mutex_exit(&p->p_lock); in relvm()
1375 if (p->p_as != &kas) { in relvm()
1378 if (p->p_segacct) in relvm()
1385 mutex_enter(&p->p_lock); in relvm()
1387 as = p->p_as; in relvm()
1388 p->p_as = &kas; in relvm()
1389 mutex_exit(&p->p_lock); in relvm()
1398 p->p_tr_lgrpid = LGRP_NONE; in relvm()
1404 * Wait for child to exec or exit.
1416 * Wait for child to exec or exit. in vfwait()
1421 if (cp == NULL || cp->p_parent != pp) { in vfwait()
1433 mutex_enter(&cp->p_lock); in vfwait()
1435 if (!(cp->p_flag & SVFORK)) { in vfwait()
1437 * Child has exec()ed or is exit()ing. in vfwait()
1439 mutex_exit(&cp->p_lock); in vfwait()
1442 mutex_enter(&pp->p_lock); in vfwait()
1443 mutex_exit(&cp->p_lock); in vfwait()
1452 * Because this is potentially a very long-term wait, in vfwait()
1454 * side-effects) unless there is a current signal, in in vfwait()
1462 cv_wait(&pp->p_cv, &pp->p_lock); in vfwait()
1464 signalled = !cv_wait_sig(&pp->p_cv, &pp->p_lock); in vfwait()
1465 mutex_exit(&pp->p_lock); in vfwait()
1470 struct as *as = pp->p_as; in vfwait()
1476 mutex_enter(&pp->p_lock); in vfwait()
1479 mutex_exit(&pp->p_lock); in vfwait()