Lines Matching refs:ctp
124 #define EVSENDP(ctp, flag) \ argument
125 ((ctp->conp_contract.ct_ev_info | ctp->conp_contract.ct_ev_crit) & flag)
127 #define EVINFOP(ctp, flag) \ argument
128 ((ctp->conp_contract.ct_ev_crit & flag) == 0)
130 #define EVFATALP(ctp, flag) \ argument
131 (ctp->conp_ev_fatal & flag)
182 ctmpl_process_t *ctp = template->ctmpl_data; in ctmpl_process_free() local
184 if (ctp->ctp_subsume) in ctmpl_process_free()
185 contract_rele(ctp->ctp_subsume); in ctmpl_process_free()
186 if (ctp->ctp_svc_fmri != NULL) { in ctmpl_process_free()
187 refstr_rele(ctp->ctp_svc_fmri); in ctmpl_process_free()
189 if (ctp->ctp_svc_aux != NULL) { in ctmpl_process_free()
190 refstr_rele(ctp->ctp_svc_aux); in ctmpl_process_free()
202 #define EXCESS(ctp, value) \ argument
203 (((value) & ~((ctp)->ctp_ev_fatal | SAFE_EV)) || \
204 (((value) & ~SAFE_EV) && (ctp->ctp_params & CT_PR_PGRPONLY)))
227 ctmpl_process_t *ctp = tmpl->ctmpl_data; in ctmpl_process_set() local
273 if (ctp->ctp_subsume) in ctmpl_process_set()
274 contract_rele(ctp->ctp_subsume); in ctmpl_process_set()
275 ctp->ctp_subsume = ct; in ctmpl_process_set()
280 ctp->ctp_params = param_value; in ctmpl_process_set()
287 if ((ctp->ctp_params & CT_PR_PGRPONLY) && in ctmpl_process_set()
288 EXCESS(ctp, tmpl->ctmpl_ev_crit) && in ctmpl_process_set()
298 if (ctp->ctp_svc_fmri != NULL) in ctmpl_process_set()
299 refstr_rele(ctp->ctp_svc_fmri); in ctmpl_process_set()
301 ctp->ctp_svc_fmri = NULL; in ctmpl_process_set()
303 ctp->ctp_svc_fmri = in ctmpl_process_set()
307 if (ctp->ctp_svc_aux != NULL) in ctmpl_process_set()
308 refstr_rele(ctp->ctp_svc_aux); in ctmpl_process_set()
310 ctp->ctp_svc_aux = NULL; in ctmpl_process_set()
312 ctp->ctp_svc_aux = in ctmpl_process_set()
321 if (EXCESS(ctp, param_value) && in ctmpl_process_set()
329 ctp->ctp_ev_fatal = param_value; in ctmpl_process_set()
335 if (EXCESS(ctp, tmpl->ctmpl_ev_crit) && in ctmpl_process_set()
338 SAFE_EV | (ctp->ctp_params & CT_PR_PGRPONLY) ? in ctmpl_process_set()
339 0 : ctp->ctp_ev_fatal; in ctmpl_process_set()
360 ctmpl_process_t *ctp = template->ctmpl_data; in ctmpl_process_get() local
374 *param_value = ctp->ctp_subsume ? in ctmpl_process_get()
375 ctp->ctp_subsume->ct_id : 0; in ctmpl_process_get()
378 *param_value = ctp->ctp_params; in ctmpl_process_get()
381 if (ctp->ctp_svc_fmri == NULL) { in ctmpl_process_get()
388 refstr_value(ctp->ctp_svc_fmri), param->ctpm_size); in ctmpl_process_get()
393 if (ctp->ctp_svc_aux == NULL) { in ctmpl_process_get()
401 refstr_value(ctp->ctp_svc_aux), param->ctpm_size); in ctmpl_process_get()
406 *param_value = ctp->ctp_ev_fatal; in ctmpl_process_get()
464 cont_process_t *ctp = ct->ct_data; in contract_process_free() local
465 crfree(ctp->conp_cred); in contract_process_free()
466 list_destroy(&ctp->conp_members); in contract_process_free()
467 list_destroy(&ctp->conp_inherited); in contract_process_free()
468 if (ctp->conp_svc_fmri != NULL) { in contract_process_free()
469 refstr_rele(ctp->conp_svc_fmri); in contract_process_free()
471 if (ctp->conp_svc_aux != NULL) { in contract_process_free()
472 refstr_rele(ctp->conp_svc_aux); in contract_process_free()
474 if (ctp->conp_svc_creator != NULL) { in contract_process_free()
475 refstr_rele(ctp->conp_svc_creator); in contract_process_free()
477 kmem_free(ctp, sizeof (cont_process_t)); in contract_process_free()
487 contract_process_cankill(proc_t *tp, proc_t *sp, cont_process_t *ctp) in contract_process_cankill() argument
492 cankill = hasprocperm(tp->p_cred, ctp->conp_cred); in contract_process_cankill()
512 cont_process_t *ctp = ct->ct_data; in contract_process_kill() local
518 if (ex && (ctp->conp_params & CT_PR_PGRPONLY)) { in contract_process_kill()
523 for (p = list_head(&ctp->conp_members); p != NULL; in contract_process_kill()
524 p = list_next(&ctp->conp_members, p)) { in contract_process_kill()
527 (checkpriv && !contract_process_cankill(p, ex, ctp))) in contract_process_kill()
549 cont_process_t *ctp = parent->ct_data; in contract_process_accept() local
553 return (ctp->conp_params & CT_PR_REGENT); in contract_process_accept()
564 cont_process_t *ctp = parent->ct_data; in contract_process_take() local
569 ASSERT(ctp->conp_params & CT_PR_REGENT); in contract_process_take()
571 list_insert_head(&ctp->conp_inherited, child); in contract_process_take()
572 ctp->conp_ninherited++; in contract_process_take()
607 cont_process_t *ctp = ct->ct_data; in contract_process_abandon() local
614 if (list_head(&ctp->conp_members) == NULL) { in contract_process_abandon()
622 if (ctp->conp_params & CT_PR_NOORPHAN) in contract_process_abandon()
638 cont_process_t *ctp = ct->ct_data; in contract_process_destroy() local
646 while (cct = list_head(&ctp->conp_inherited)) { in contract_process_destroy()
651 list_remove(&ctp->conp_inherited, cct); in contract_process_destroy()
652 ctp->conp_ninherited--; in contract_process_destroy()
667 cont_process_t *ctp = ct->ct_data; in contract_process_status() local
676 local_svc_zone_enter = ctp->conp_svc_zone_enter; in contract_process_status()
686 spids = ctp->conp_nmembers + 5; in contract_process_status()
687 sctids = ctp->conp_ninherited + 5; in contract_process_status()
695 npids = ctp->conp_nmembers; in contract_process_status()
696 nctids = ctp->conp_ninherited; in contract_process_status()
704 for (loc = 0, cnext = list_head(&ctp->conp_inherited); cnext; in contract_process_status()
705 cnext = list_next(&ctp->conp_inherited, cnext)) in contract_process_status()
708 for (loc = 0, pnext = list_head(&ctp->conp_members); pnext; in contract_process_status()
709 pnext = list_next(&ctp->conp_members, pnext)) in contract_process_status()
712 local_svc_zone_enter = ctp->conp_svc_zone_enter; in contract_process_status()
720 VERIFY(nvlist_add_uint32(nvl, CTPS_PARAMS, ctp->conp_params) == 0); in contract_process_status()
721 VERIFY(nvlist_add_uint32(nvl, CTPS_EV_FATAL, ctp->conp_ev_fatal) == 0); in contract_process_status()
728 refstr_value(ctp->conp_svc_aux)) == 0); in contract_process_status()
730 refstr_value(ctp->conp_svc_creator)) == 0); in contract_process_status()
743 ctp->conp_svc_ctid) == 0); in contract_process_status()
747 refstr_value(ctp->conp_svc_fmri)) == 0); in contract_process_status()
819 cont_process_t *ctp; in contract_process_create() local
825 ctp = kmem_zalloc(sizeof (cont_process_t), KM_SLEEP); in contract_process_create()
827 list_create(&ctp->conp_members, sizeof (proc_t), in contract_process_create()
829 list_create(&ctp->conp_inherited, sizeof (contract_t), in contract_process_create()
832 ctp->conp_params = tmpl->ctp_params; in contract_process_create()
833 ctp->conp_ev_fatal = tmpl->ctp_ev_fatal; in contract_process_create()
834 crhold(ctp->conp_cred = CRED()); in contract_process_create()
836 if (contract_ctor(&ctp->conp_contract, process_type, &tmpl->ctp_ctmpl, in contract_process_create()
837 ctp, (ctp->conp_params & CT_PR_INHERIT) ? CTF_INHERIT : 0, in contract_process_create()
840 contract_process_free(&ctp->conp_contract); in contract_process_create()
850 ctp->conp_svc_fmri = parent->p_ct_process->conp_svc_fmri; in contract_process_create()
851 ctp->conp_svc_ctid = parent->p_ct_process->conp_svc_ctid; in contract_process_create()
852 ctp->conp_svc_zone_enter = in contract_process_create()
855 ctp->conp_svc_fmri = tmpl->ctp_svc_fmri; in contract_process_create()
856 ctp->conp_svc_ctid = ctp->conp_contract.ct_id; in contract_process_create()
858 ctp->conp_svc_zone_enter = 0; in contract_process_create()
860 refstr_hold(ctp->conp_svc_fmri); in contract_process_create()
863 ctp->conp_svc_aux = conp_svc_aux_default; in contract_process_create()
865 ctp->conp_svc_aux = tmpl->ctp_svc_aux; in contract_process_create()
867 refstr_hold(ctp->conp_svc_aux); in contract_process_create()
875 ctp->conp_svc_creator = refstr_alloc("sched"); in contract_process_create()
877 ctp->conp_svc_creator = refstr_alloc(parent->p_user.u_comm); in contract_process_create()
889 mutex_enter(&ctp->conp_contract.ct_lock); in contract_process_create()
893 list_insert_tail(&ctp->conp_inherited, ct); in contract_process_create()
894 ct->ct_regent = &ctp->conp_contract; in contract_process_create()
897 ctp->conp_ninherited += sct->conp_ninherited; in contract_process_create()
899 mutex_exit(&ctp->conp_contract.ct_lock); in contract_process_create()
910 return (ctp); in contract_process_create()
922 contract_process_exit(cont_process_t *ctp, proc_t *p, int exitstatus) in contract_process_exit() argument
924 contract_t *ct = &ctp->conp_contract; in contract_process_exit()
932 list_remove(&ctp->conp_members, p); in contract_process_exit()
933 ctp->conp_nmembers--; in contract_process_exit()
943 empty = (list_head(&ctp->conp_members) == NULL); in contract_process_exit()
944 if (EVSENDP(ctp, CT_PR_EV_EXIT)) { in contract_process_exit()
953 event->cte_flags = EVINFOP(ctp, CT_PR_EV_EXIT) ? CTE_INFO : 0; in contract_process_exit()
962 if (EVSENDP(ctp, CT_PR_EV_EMPTY)) { in contract_process_exit()
971 event->cte_flags = EVINFOP(ctp, CT_PR_EV_EMPTY) ? in contract_process_exit()
1014 cont_process_t *ctp; in contract_process_fork() local
1023 ctp = curproc->p_ct_process; in contract_process_fork()
1024 else if ((ctp = contract_process_create(rtmpl, pp, canfail)) == NULL) in contract_process_fork()
1027 ct = &ctp->conp_contract; in contract_process_fork()
1036 if (ctp == curproc->p_ct_process && (pp->p_flag & SKILLED) != 0 && in contract_process_fork()
1042 cp->p_ct_process = ctp; in contract_process_fork()
1045 list_insert_head(&ctp->conp_members, cp); in contract_process_fork()
1046 ctp->conp_nmembers++; in contract_process_fork()
1048 if (EVSENDP(ctp, CT_PR_EV_FORK)) { in contract_process_fork()
1056 event->cte_flags = EVINFOP(ctp, CT_PR_EV_FORK) ? CTE_INFO : 0; in contract_process_fork()
1060 return (ctp); in contract_process_fork()
1072 contract_process_core(cont_process_t *ctp, proc_t *p, int sig, in contract_process_core() argument
1075 contract_t *ct = &ctp->conp_contract; in contract_process_core()
1077 if (EVSENDP(ctp, CT_PR_EV_CORE)) { in contract_process_core()
1103 event->cte_flags = EVINFOP(ctp, CT_PR_EV_CORE) ? CTE_INFO : 0; in contract_process_core()
1108 if (EVFATALP(ctp, CT_PR_EV_CORE)) { in contract_process_core()
1123 contract_process_hwerr(cont_process_t *ctp, proc_t *p) in contract_process_hwerr() argument
1125 contract_t *ct = &ctp->conp_contract; in contract_process_hwerr()
1127 if (EVSENDP(ctp, CT_PR_EV_HWERR)) { in contract_process_hwerr()
1135 event->cte_flags = EVINFOP(ctp, CT_PR_EV_HWERR) ? CTE_INFO : 0; in contract_process_hwerr()
1140 if (EVFATALP(ctp, CT_PR_EV_HWERR)) { in contract_process_hwerr()
1158 contract_process_sig(cont_process_t *ctp, proc_t *p, int sig, pid_t pid, in contract_process_sig() argument
1161 contract_t *ct = &ctp->conp_contract; in contract_process_sig()
1163 if (EVSENDP(ctp, CT_PR_EV_SIGNAL)) { in contract_process_sig()
1185 event->cte_flags = EVINFOP(ctp, CT_PR_EV_SIGNAL) ? CTE_INFO : 0; in contract_process_sig()
1190 if (EVFATALP(ctp, CT_PR_EV_SIGNAL)) { in contract_process_sig()