Lines Matching refs:pgrp
108 static void orphanpg(struct pgrp *pg);
230 pgrpinsertinit(struct pgrp *pg) in pgrpinsertinit()
637 pgref(struct pgrp *pgrp) in pgref() argument
639 refcount_acquire(&pgrp->pg_refs); in pgref()
643 pgrel(struct pgrp *pgrp) in pgrel() argument
649 n = PGRP_HASH(pgrp->pg_id); in pgrel()
653 count = pgrp->pg_refs; in pgrel()
658 if (atomic_cmpset_int(&pgrp->pg_refs, 1, 0)) in pgrel()
663 if (atomic_cmpset_int(&pgrp->pg_refs, count, count - 1)) in pgrel()
672 LIST_REMOVE(pgrp, pg_list); in pgrel()
673 if (pid_doms[pgrp->pg_id % PIDSEL_DOMAINS] != (uint8_t)time_second) in pgrel()
674 pid_doms[pgrp->pg_id % PIDSEL_DOMAINS] = (uint8_t)time_second; in pgrel()
680 funsetownlst(&pgrp->pg_sigiolst); in pgrel()
682 if (pgrp->pg_session->s_ttyp != NULL && in pgrel()
683 pgrp->pg_session->s_ttyp->t_pgrp == pgrp) { in pgrel()
684 pgrp->pg_session->s_ttyp->t_pgrp = NULL; in pgrel()
688 sess_rele(pgrp->pg_session); in pgrel()
689 kfree(pgrp, M_PGRP); in pgrel()
699 struct pgrp *
702 struct pgrp *pgrp; in pgfind() local
710 LIST_FOREACH(pgrp, &prg->allpgrp, pg_list) { in pgfind()
711 if (pgrp->pg_id == pgid) { in pgfind()
712 refcount_acquire(&pgrp->pg_refs); in pgfind()
714 return (pgrp); in pgfind()
729 struct pgrp *pgrp; in enterpgrp() local
730 struct pgrp *opgrp; in enterpgrp()
733 pgrp = pgfind(pgid); in enterpgrp()
735 KASSERT(pgrp == NULL || !mksess, in enterpgrp()
740 if (pgrp == NULL) { in enterpgrp()
751 pgrp = kmalloc(sizeof(struct pgrp), M_PGRP, M_WAITOK | M_ZERO); in enterpgrp()
752 pgrp->pg_id = pgid; in enterpgrp()
753 LIST_INIT(&pgrp->pg_members); in enterpgrp()
754 pgrp->pg_jobc = 0; in enterpgrp()
755 SLIST_INIT(&pgrp->pg_sigiolst); in enterpgrp()
756 lwkt_token_init(&pgrp->pg_token, "pgrp_token"); in enterpgrp()
757 refcount_init(&pgrp->pg_refs, 1); in enterpgrp()
758 lockinit(&pgrp->pg_lock, "pgwt", 0, 0); in enterpgrp()
766 kfree(pgrp, M_PGRP); in enterpgrp()
788 pgrp->pg_session = sess; in enterpgrp()
796 pgrp->pg_session = p->p_session; in enterpgrp()
797 sess_hold(pgrp->pg_session); in enterpgrp()
800 LIST_INSERT_HEAD(&prg->allpgrp, pgrp, pg_list); in enterpgrp()
803 } else if (pgrp == p->p_pgrp) { in enterpgrp()
804 pgrel(pgrp); in enterpgrp()
808 lwkt_gettoken(&pgrp->pg_token); in enterpgrp()
825 p->p_pgrp = pgrp; in enterpgrp()
826 LIST_INSERT_HEAD(&pgrp->pg_members, p, p_pglist); in enterpgrp()
833 fixjobc(p, pgrp, 1); in enterpgrp()
841 lwkt_reltoken(&pgrp->pg_token); in enterpgrp()
856 struct pgrp *pg = p->p_pgrp; in leavepgrp()
963 fixjobc(struct proc *p, struct pgrp *pgrp, int entering) in fixjobc() argument
965 struct pgrp *hispgrp; in fixjobc()
974 lwkt_gettoken(&pgrp->pg_token); in fixjobc()
976 mysession = pgrp->pg_session; in fixjobc()
977 if ((hispgrp = p->p_pptr->p_pgrp) != pgrp && in fixjobc()
980 pgrp->pg_jobc++; in fixjobc()
981 else if (--pgrp->pg_jobc == 0) in fixjobc()
982 orphanpg(pgrp); in fixjobc()
993 if ((hispgrp = np->p_pgrp) != pgrp && in fixjobc()
1008 KKASSERT(pgrp->pg_refs > 0); in fixjobc()
1009 lwkt_reltoken(&pgrp->pg_token); in fixjobc()
1021 orphanpg(struct pgrp *pg) in orphanpg()
1070 struct pgrp *pg; in proc_makepid()
1561 struct pgrp *pgrp; in DB_SHOW_COMMAND() local
1572 LIST_FOREACH(pgrp, &prg->allpgrp, pg_list) { in DB_SHOW_COMMAND()
1575 (void *)pgrp, (long)pgrp->pg_id, in DB_SHOW_COMMAND()
1576 (void *)pgrp->pg_session, in DB_SHOW_COMMAND()
1577 pgrp->pg_session->s_count, in DB_SHOW_COMMAND()
1578 (void *)LIST_FIRST(&pgrp->pg_members)); in DB_SHOW_COMMAND()
1579 LIST_FOREACH(p, &pgrp->pg_members, p_pglist) { in DB_SHOW_COMMAND()
2199 SYSCTL_KERN_PROC_ALLFLAGS(KERN_PROC_PGRP, pgrp);