Lines Matching refs:p

79 lwp_kernel_create(proc_t *p, void (*proc)(), void *arg, int state, pri_t pri)  in lwp_kernel_create()  argument
83 VERIFY((p->p_flag & SSYS) != 0); in lwp_kernel_create()
85 lwp = lwp_create(proc, arg, 0, p, state, pri, &t0.t_hold, syscid, 0); in lwp_kernel_create()
96 lwp_create(void (*proc)(), caddr_t arg, size_t len, proc_t *p, in lwp_create() argument
123 ASSERT(p != &p0); /* No new LWPs in p0. */ in lwp_create()
125 mutex_enter(&p->p_lock); in lwp_create()
126 mutex_enter(&p->p_zone->zone_nlwps_lock); in lwp_create()
131 if (p->p_task->tk_nlwps >= p->p_task->tk_nlwps_ctl) in lwp_create()
132 if (rctl_test(rc_task_lwps, p->p_task->tk_rctls, p, in lwp_create()
135 if (p->p_task->tk_proj->kpj_nlwps >= in lwp_create()
136 p->p_task->tk_proj->kpj_nlwps_ctl) in lwp_create()
138 p->p_task->tk_proj->kpj_rctls, p, 1, 0) in lwp_create()
141 if (p->p_zone->zone_nlwps >= p->p_zone->zone_nlwps_ctl) in lwp_create()
142 if (rctl_test(rc_zone_nlwps, p->p_zone->zone_rctls, p, in lwp_create()
147 mutex_exit(&p->p_zone->zone_nlwps_lock); in lwp_create()
148 mutex_exit(&p->p_lock); in lwp_create()
149 atomic_inc_32(&p->p_zone->zone_ffcap); in lwp_create()
152 p->p_task->tk_nlwps++; in lwp_create()
153 p->p_task->tk_proj->kpj_nlwps++; in lwp_create()
154 p->p_zone->zone_nlwps++; in lwp_create()
155 mutex_exit(&p->p_zone->zone_nlwps_lock); in lwp_create()
156 mutex_exit(&p->p_lock); in lwp_create()
201 mutex_enter(&p->p_lock); in lwp_create()
202 mutex_enter(&p->p_zone->zone_nlwps_lock); in lwp_create()
203 p->p_task->tk_nlwps--; in lwp_create()
204 p->p_task->tk_proj->kpj_nlwps--; in lwp_create()
205 p->p_zone->zone_nlwps--; in lwp_create()
206 mutex_exit(&p->p_zone->zone_nlwps_lock); in lwp_create()
207 mutex_exit(&p->p_lock); in lwp_create()
208 atomic_inc_32(&p->p_zone->zone_ffnomem); in lwp_create()
215 mutex_enter(&p->p_lock); in lwp_create()
216 mutex_enter(&p->p_zone->zone_nlwps_lock); in lwp_create()
217 p->p_task->tk_nlwps--; in lwp_create()
218 p->p_task->tk_proj->kpj_nlwps--; in lwp_create()
219 p->p_zone->zone_nlwps--; in lwp_create()
220 mutex_exit(&p->p_zone->zone_nlwps_lock); in lwp_create()
221 mutex_exit(&p->p_lock); in lwp_create()
222 atomic_inc_32(&p->p_zone->zone_ffnomem); in lwp_create()
230 t = thread_create(lwpdata, stksize, NULL, NULL, 0, p, TS_STOPPED, pri); in lwp_create()
264 lwp->lwp_procp = p; in lwp_create()
275 if (p->p_rprof_cyclic != CYCLIC_NONE) in lwp_create()
286 mutex_enter(&p->p_lock); in lwp_create()
328 while (p->p_lwpfree == NULL) { in lwp_create()
329 uint_t dirsz = p->p_lwpdir_sz; in lwp_create()
336 mutex_exit(&p->p_lock); in lwp_create()
358 mutex_enter(&p->p_lock); in lwp_create()
359 if (p == curproc) in lwp_create()
360 prbarrier(p); in lwp_create()
362 if (dirsz != p->p_lwpdir_sz || p->p_lwpfree != NULL) { in lwp_create()
379 old_hash = p->p_tidhash; in lwp_create()
380 old_hashsz = p->p_tidhash_sz; in lwp_create()
393 old_dir = p->p_lwpdir; in lwp_create()
394 old_dirsz = p->p_lwpdir_sz; in lwp_create()
395 p->p_lwpdir = new_dir; in lwp_create()
396 p->p_lwpfree = new_dir; in lwp_create()
397 p->p_lwpdir_sz = new_dirsz; in lwp_create()
399 lwp_hash_in(p, ldp->ld_entry, in lwp_create()
409 ret_tidhash->rth_next = p->p_ret_tidhash; in lwp_create()
410 p->p_ret_tidhash = ret_tidhash; in lwp_create()
418 p->p_tidhash = new_hash; in lwp_create()
428 p->p_tidhash_sz = new_hashsz; in lwp_create()
453 if (p == curproc) { in lwp_create()
454 prbarrier(p); in lwp_create()
470 prbarrier(p); in lwp_create()
477 prbarrier(p); in lwp_create()
486 if (p->p_flag & (SEXITLWPS|SKILLED)) { in lwp_create()
495 if (p->p_lwpfree == NULL) in lwp_create()
510 if (CLASS_KERNEL(cid) && p != curproc) { in lwp_create()
559 newkpj = p->p_task->tk_proj; in lwp_create()
575 if (p != curproc || curthread->t_cid != cid) { in lwp_create()
589 atomic_inc_32(&p->p_zone->zone_ffmisc); in lwp_create()
608 id_t prev_id = p->p_lwpid; /* last allocated tid */ in lwp_create()
611 if (p->p_lwpid == INT_MAX) { in lwp_create()
612 p->p_flag |= SLWPWRAP; in lwp_create()
613 p->p_lwpid = 1; in lwp_create()
615 if ((t->t_tid = ++p->p_lwpid) == prev_id) { in lwp_create()
620 atomic_inc_32(&p->p_zone->zone_ffnoproc); in lwp_create()
628 if ((p->p_flag & SLWPWRAP) == 0) in lwp_create()
630 } while (lwp_hash_lookup(p, t->t_tid) != NULL); in lwp_create()
637 if (PROC_IS_BRANDED(p)) { in lwp_create()
638 if (BROP(p)->b_initlwp(lwp)) { in lwp_create()
640 atomic_inc_32(&p->p_zone->zone_ffmisc); in lwp_create()
649 p->p_t1_lgrpid = t->t_lpl->lpl_lgrpid; in lwp_create()
651 if (p->p_tr_lgrpid != LGRP_NONE && in lwp_create()
652 p->p_tr_lgrpid != p->p_t1_lgrpid) { in lwp_create()
657 p->p_lwpcnt++; in lwp_create()
663 if (p->p_flag & SMSACCT) in lwp_create()
669 if (pr_watch_active(p)) in lwp_create()
701 if ((tx = p->p_tlist) == NULL) { in lwp_create()
704 p->p_tlist = t; in lwp_create()
719 lwp_hash_in(p, lep, p->p_tidhash, p->p_tidhash_sz, 1); in lwp_create()
747 ASSERT(MUTEX_HELD(&p->p_lock)); in lwp_create()
748 mutex_enter(&p->p_zone->zone_nlwps_lock); in lwp_create()
749 p->p_task->tk_nlwps--; in lwp_create()
750 p->p_task->tk_proj->kpj_nlwps--; in lwp_create()
751 p->p_zone->zone_nlwps--; in lwp_create()
752 mutex_exit(&p->p_zone->zone_nlwps_lock); in lwp_create()
757 BROP(p)->b_freelwp(lwp); in lwp_create()
759 mutex_exit(&p->p_lock); in lwp_create()
777 mutex_exit(&p->p_lock); in lwp_create()
798 proc_t *p = ttoproc(t); in lwp_create_done() local
800 ASSERT(MUTEX_HELD(&p->p_lock)); in lwp_create_done()
815 p->p_lwprcnt++; in lwp_create_done()
866 proc_t *p = ttoproc(t); in lwp_exit() local
868 ASSERT(MUTEX_HELD(&p->p_lock)); in lwp_exit()
870 mutex_exit(&p->p_lock); in lwp_exit()
898 if (PROC_IS_BRANDED(p)) in lwp_exit()
899 BROP(p)->b_lwpexit(lwp); in lwp_exit()
903 mutex_enter(&p->p_lock); in lwp_exit()
911 if (p->p_flag & SCOREDUMP) in lwp_exit()
918 prbarrier(p); in lwp_exit()
924 p->p_lwpcnt == p->p_lwpdaemon + 1) { in lwp_exit()
925 mutex_exit(&p->p_lock); in lwp_exit()
936 mutex_enter(&p->p_lock); in lwp_exit()
938 prbarrier(p); in lwp_exit()
950 if (!(t->t_proc_flag & TP_TWAIT) || (p->p_flag & SEXITLWPS)) in lwp_exit()
951 lwp_hash_out(p, t->t_tid); in lwp_exit()
954 p->p_lwpdir[t->t_dslot].ld_entry->le_thread = NULL; in lwp_exit()
955 p->p_zombcnt++; in lwp_exit()
956 cv_broadcast(&p->p_lwpexit); in lwp_exit()
959 p->p_lwpdaemon--; in lwp_exit()
967 mutex_enter(&p->p_zone->zone_nlwps_lock); in lwp_exit()
968 p->p_task->tk_nlwps--; in lwp_exit()
969 p->p_task->tk_proj->kpj_nlwps--; in lwp_exit()
970 p->p_zone->zone_nlwps--; in lwp_exit()
971 mutex_exit(&p->p_zone->zone_nlwps_lock); in lwp_exit()
974 ASSERT(p->p_lwpcnt != 0); in lwp_exit()
975 p->p_lwpcnt--; in lwp_exit()
982 if (p->p_lwpcnt == p->p_lwpdaemon + (p->p_lwpwait - p->p_lwpdwait)) in lwp_exit()
983 cv_broadcast(&p->p_lwpexit); in lwp_exit()
996 if (t == p->p_tlist) in lwp_exit()
997 p->p_tlist = t->t_forw; in lwp_exit()
1003 sigdelq(p, t, 0); in lwp_exit()
1028 if (p->p_pctx != NULL) in lwp_exit()
1029 exitpctx(p); in lwp_exit()
1045 if (--p->p_lwprcnt == 0 || (t->t_proc_flag & TP_HOLDLWP) || in lwp_exit()
1046 (p->p_flag & SEXITLWPS)) in lwp_exit()
1047 cv_broadcast(&p->p_holdlwps); in lwp_exit()
1052 mutex_exit(&p->p_lock); in lwp_exit()
1076 proc_t *p = ttoproc(t); in lwp_cleanup() local
1078 ASSERT(MUTEX_HELD(&p->p_lock)); in lwp_cleanup()
1081 if (p->p_itimer != NULL) in lwp_cleanup()
1088 if (t == p->p_agenttp) { in lwp_cleanup()
1089 ASSERT(t->t_tid == p->p_lwpid); in lwp_cleanup()
1090 p->p_lwpid--; in lwp_cleanup()
1091 p->p_agenttp = NULL; in lwp_cleanup()
1100 p->p_t1_lgrpid = LGRP_NONE; in lwp_cleanup()
1111 proc_t *p = ttoproc(t); in lwp_suspend() local
1113 ASSERT(MUTEX_HELD(&p->p_lock)); in lwp_suspend()
1154 if (p->p_flag & SEXITLWPS) in lwp_suspend()
1165 if (!cv_wait_sig(&p->p_holdlwps, &p->p_lock)) in lwp_suspend()
1172 if (idtot(p, tid) == NULL) in lwp_suspend()
1197 proc_t *p = ttoproc(t); in lwp_continue() local
1200 ASSERT(MUTEX_HELD(&p->p_lock)); in lwp_continue()
1205 !(p->p_flag & (SHOLDFORK | SHOLDFORK1 | SHOLDWATCH))) { in lwp_continue()
1206 p->p_lwprcnt++; in lwp_continue()
1215 cv_broadcast(&p->p_holdlwps); in lwp_continue()
1243 proc_t *p = curproc; in holdlwp() local
1246 mutex_enter(&p->p_lock); in holdlwp()
1251 if (!(p->p_flag & SCOREDUMP)) { in holdlwp()
1252 if ((p->p_flag & SEXITLWPS) || (t->t_proc_flag & TP_EXITLWP)) in holdlwp()
1255 if (!(ISHOLD(p)) && !(p->p_flag & (SHOLDFORK1 | SHOLDWATCH))) { in holdlwp()
1256 mutex_exit(&p->p_lock); in holdlwp()
1264 if (p->p_flag & SEXITLWPS) in holdlwp()
1266 mutex_exit(&p->p_lock); in holdlwp()
1276 proc_t *p = curproc; in holdlwps() local
1279 mutex_enter(&p->p_lock); in holdlwps()
1282 while (p->p_flag & (SEXITLWPS | SHOLDFORK | SHOLDFORK1 | SHOLDWATCH)) { in holdlwps()
1286 if (p->p_flag & (SEXITLWPS | SHOLDFORK)) { in holdlwps()
1287 mutex_exit(&p->p_lock); in holdlwps()
1296 p->p_flag |= holdflag; in holdlwps()
1297 pokelwps(p); in holdlwps()
1298 --p->p_lwprcnt; in holdlwps()
1302 while (p->p_lwprcnt > 0) { in holdlwps()
1307 if (p->p_flag & (SEXITLWPS | SHOLDWATCH)) { in holdlwps()
1308 p->p_lwprcnt++; in holdlwps()
1309 p->p_flag &= ~holdflag; in holdlwps()
1310 cv_broadcast(&p->p_holdlwps); in holdlwps()
1327 if (p->p_stopsig | (curthread->t_proc_flag & TP_PRSTOP)) { in holdlwps()
1328 int whystop = p->p_stopsig? PR_JOBCONTROL : in holdlwps()
1330 p->p_lwprcnt++; in holdlwps()
1331 p->p_flag &= ~holdflag; in holdlwps()
1332 stop(whystop, p->p_stopsig); in holdlwps()
1335 cv_wait(&p->p_holdlwps, &p->p_lock); in holdlwps()
1337 p->p_lwprcnt++; in holdlwps()
1338 p->p_flag &= ~holdflag; in holdlwps()
1339 mutex_exit(&p->p_lock); in holdlwps()
1349 proc_t *p = curproc; in holdcheck() local
1354 if (p->p_flag & SEXITLWPS) { in holdcheck()
1355 p->p_lwprcnt++; in holdcheck()
1356 p->p_flag &= ~clearflags; in holdcheck()
1364 if (p->p_flag & SHOLDFORK1) { in holdcheck()
1365 p->p_lwprcnt++; in holdcheck()
1367 if (p->p_flag & SEXITLWPS) { in holdcheck()
1368 p->p_flag &= ~clearflags; in holdcheck()
1380 if (p->p_flag & SHOLDFORK) { in holdcheck()
1381 p->p_lwprcnt++; in holdcheck()
1382 while (p->p_flag & SHOLDFORK) { in holdcheck()
1383 p->p_flag |= SHOLDWATCH; in holdcheck()
1384 cv_broadcast(&p->p_holdlwps); in holdcheck()
1385 cv_wait(&p->p_holdlwps, &p->p_lock); in holdcheck()
1386 p->p_flag &= ~SHOLDWATCH; in holdcheck()
1442 proc_t *p = curproc; in holdwatch() local
1446 mutex_enter(&p->p_lock); in holdwatch()
1448 p->p_lwprcnt--; in holdwatch()
1454 mutex_exit(&p->p_lock); in holdwatch()
1458 if (!(p->p_flag & SHOLDWATCH)) { in holdwatch()
1463 p->p_flag |= SHOLDWATCH; in holdwatch()
1464 pokelwps(p); in holdwatch()
1469 while (pr_allstopped(p, 1) > 0) { in holdwatch()
1471 p->p_flag &= ~SHOLDWATCH; in holdwatch()
1472 mutex_exit(&p->p_lock); in holdwatch()
1476 cv_wait(&p->p_holdlwps, &p->p_lock); in holdwatch()
1483 p->p_flag |= SWATCHOK; in holdwatch()
1485 cv_broadcast(&p->p_holdlwps); in holdwatch()
1487 while (pr_allstopped(p, 0) > 0) { in holdwatch()
1496 p->p_flag &= ~(SHOLDWATCH | SWATCHOK); in holdwatch()
1497 mutex_exit(&p->p_lock); in holdwatch()
1501 cv_wait(&p->p_holdlwps, &p->p_lock); in holdwatch()
1507 p->p_flag &= ~SWATCHOK; in holdwatch()
1508 p->p_flag &= ~SHOLDWATCH; in holdwatch()
1509 p->p_lwprcnt++; in holdwatch()
1511 } else if (!(p->p_flag & SWATCHOK)) { in holdwatch()
1519 cv_broadcast(&p->p_holdlwps); in holdwatch()
1521 while (!(p->p_flag & SWATCHOK)) { in holdwatch()
1524 mutex_exit(&p->p_lock); in holdwatch()
1528 cv_wait(&p->p_holdlwps, &p->p_lock); in holdwatch()
1536 p->p_lwprcnt++; in holdwatch()
1555 p->p_lwprcnt++; in holdwatch()
1558 mutex_exit(&p->p_lock); in holdwatch()
1567 pokelwps(proc_t *p) in pokelwps() argument
1571 ASSERT(MUTEX_HELD(&p->p_lock)); in pokelwps()
1573 t = p->p_tlist; in pokelwps()
1586 if (p->p_flag & SEXITLWPS) { in pokelwps()
1587 p->p_stopsig = 0; in pokelwps()
1598 if ((p->p_flag & SHOLDFORK) && SUSPENDED(t)) { in pokelwps()
1600 p->p_lwprcnt++; in pokelwps()
1610 } while ((t = t->t_forw) != p->p_tlist); in pokelwps()
1617 continuelwps(proc_t *p) in continuelwps() argument
1625 if (p->p_flag & SWATCHOK) { in continuelwps()
1630 ASSERT(MUTEX_HELD(&p->p_lock)); in continuelwps()
1631 ASSERT((p->p_flag & (SHOLDFORK | SHOLDFORK1 | SHOLDWATCH)) == 0); in continuelwps()
1633 t = p->p_tlist; in continuelwps()
1637 p->p_lwprcnt++; in continuelwps()
1642 } while ((t = t->t_forw) != p->p_tlist); in continuelwps()
1664 proc_t *p = curproc; in exitlwps() local
1669 if (p->p_door_list) in exitlwps()
1689 mutex_enter(&p->p_lock); in exitlwps()
1690 prbarrier(p); in exitlwps()
1692 if (p->p_flag & SEXITLWPS) { in exitlwps()
1693 mutex_exit(&p->p_lock); in exitlwps()
1698 p->p_flag |= SEXITLWPS; in exitlwps()
1700 p->p_flag |= SCOREDUMP; in exitlwps()
1707 while (p->p_flag & (SHOLDFORK | SHOLDFORK1 | SHOLDWATCH)) { in exitlwps()
1708 cv_broadcast(&p->p_holdlwps); in exitlwps()
1709 cv_wait(&p->p_holdlwps, &p->p_lock); in exitlwps()
1710 prbarrier(p); in exitlwps()
1712 p->p_flag |= SHOLDFORK; in exitlwps()
1713 pokelwps(p); in exitlwps()
1718 --p->p_lwprcnt; in exitlwps()
1719 while (p->p_lwprcnt > 0) { in exitlwps()
1720 cv_wait(&p->p_holdlwps, &p->p_lock); in exitlwps()
1721 prbarrier(p); in exitlwps()
1723 p->p_lwprcnt++; in exitlwps()
1724 ASSERT(p->p_lwprcnt == 1); in exitlwps()
1734 p->p_flag &= ~(SCOREDUMP | SHOLDFORK | SEXITLWPS); in exitlwps()
1743 p->p_flag &= ~SHOLDFORK; in exitlwps()
1744 if ((heldcnt = p->p_lwpcnt) > 1) { in exitlwps()
1755 --p->p_lwprcnt; in exitlwps()
1756 while (p->p_lwpcnt > 1) { in exitlwps()
1757 cv_wait(&p->p_holdlwps, &p->p_lock); in exitlwps()
1758 prbarrier(p); in exitlwps()
1760 ++p->p_lwprcnt; in exitlwps()
1761 ASSERT(p->p_lwpcnt == 1 && p->p_lwprcnt == 1); in exitlwps()
1763 p->p_flag &= ~SEXITLWPS; in exitlwps()
1767 if (!coredump && p->p_zombcnt) { /* cleanup the zombie lwps */ in exitlwps()
1772 for (ldp = p->p_lwpdir, i = 0; i < p->p_lwpdir_sz; i++, ldp++) { in exitlwps()
1776 p->p_zombcnt--; in exitlwps()
1777 lwp_hash_out(p, lep->le_lwpid); in exitlwps()
1780 ASSERT(p->p_zombcnt == 0); in exitlwps()
1789 p->p_flag &= ~(SHOLDFORK | SHOLDFORK1 | SHOLDWATCH | SLWPWRAP); in exitlwps()
1790 mutex_exit(&p->p_lock); in exitlwps()
1804 proc_t *p = lwptoproc(lwp); in forklwp() local
1810 ASSERT(p == curproc); in forklwp()
1895 if (PROC_IS_BRANDED(p)) in forklwp()
1896 BROP(p)->b_forklwp(lwp, clwp); in forklwp()
1904 mutex_enter(&p->p_lock); in forklwp()
1911 mutex_exit(&p->p_lock); in forklwp()
1920 mutex_exit(&p->p_lock); in forklwp()
1929 lwp_hash_in(proc_t *p, lwpent_t *lep, tidhash_t *tidhash, uint_t tidhash_sz, in lwp_hash_in() argument
1941 ldp = p->p_lwpfree; in lwp_hash_in()
1942 p->p_lwpfree = ldp->ld_next; in lwp_hash_in()
1961 t->t_dslot = (int)(ldp - p->p_lwpdir); in lwp_hash_in()
1975 lwp_hash_out(proc_t *p, id_t lwpid) in lwp_hash_out() argument
1977 tidhash_t *thp = &p->p_tidhash[TIDHASH(lwpid, p->p_tidhash_sz)]; in lwp_hash_out()
1987 prlwpfree(p, lep); /* /proc deals with le_trace */ in lwp_hash_out()
1990 ldp->ld_next = p->p_lwpfree; in lwp_hash_out()
1991 p->p_lwpfree = ldp; in lwp_hash_out()
2003 lwp_hash_lookup(proc_t *p, id_t lwpid) in lwp_hash_lookup() argument
2013 if (p->p_tidhash == NULL) in lwp_hash_lookup()
2016 thp = &p->p_tidhash[TIDHASH(lwpid, p->p_tidhash_sz)]; in lwp_hash_lookup()
2030 lwp_hash_lookup_and_lock(proc_t *p, id_t lwpid, kmutex_t **mpp) in lwp_hash_lookup_and_lock() argument
2038 tidhash_sz = p->p_tidhash_sz; in lwp_hash_lookup_and_lock()
2040 if ((tidhash = p->p_tidhash) == NULL) in lwp_hash_lookup_and_lock()
2051 if (tidhash != p->p_tidhash || tidhash_sz != p->p_tidhash_sz) { in lwp_hash_lookup_and_lock()