Lines Matching refs:cpipe
230 static void pipeclose(struct pipe *cpipe);
231 static void pipe_free_kmem(struct pipe *cpipe);
234 static __inline int pipelock(struct pipe *cpipe, int catch);
235 static __inline void pipeunlock(struct pipe *cpipe);
243 static int pipespace(struct pipe *cpipe, int size);
244 static int pipespace_new(struct pipe *cpipe, int size);
567 pipespace_new(struct pipe *cpipe, int size) in pipespace_new() argument
574 KASSERT(!mtx_owned(PIPE_MTX(cpipe)), ("pipespace: pipe mutex locked")); in pipespace_new()
575 KASSERT(!(cpipe->pipe_state & PIPE_DIRECTW), in pipespace_new()
578 cnt = cpipe->pipe_buffer.cnt; in pipespace_new()
585 if (!chgpipecnt(cpipe->pipe_pair->pp_owner->cr_ruidinfo, in pipespace_new()
587 if (cpipe->pipe_buffer.buffer == NULL && in pipespace_new()
599 chgpipecnt(cpipe->pipe_pair->pp_owner->cr_ruidinfo, -size, 0); in pipespace_new()
600 if (cpipe->pipe_buffer.buffer == NULL && in pipespace_new()
612 chgpipecnt(cpipe->pipe_pair->pp_owner->cr_ruidinfo, -size, 0); in pipespace_new()
613 if (cpipe->pipe_buffer.buffer == NULL && in pipespace_new()
619 if (cpipe->pipe_buffer.buffer == NULL) { in pipespace_new()
631 if (cpipe->pipe_buffer.in <= cpipe->pipe_buffer.out) { in pipespace_new()
632 firstseg = cpipe->pipe_buffer.size - cpipe->pipe_buffer.out; in pipespace_new()
633 bcopy(&cpipe->pipe_buffer.buffer[cpipe->pipe_buffer.out], in pipespace_new()
636 bcopy(cpipe->pipe_buffer.buffer, &buffer[firstseg], in pipespace_new()
637 cpipe->pipe_buffer.in); in pipespace_new()
639 bcopy(&cpipe->pipe_buffer.buffer[cpipe->pipe_buffer.out], in pipespace_new()
643 pipe_free_kmem(cpipe); in pipespace_new()
644 cpipe->pipe_buffer.buffer = buffer; in pipespace_new()
645 cpipe->pipe_buffer.size = size; in pipespace_new()
646 cpipe->pipe_buffer.in = cnt; in pipespace_new()
647 cpipe->pipe_buffer.out = 0; in pipespace_new()
648 cpipe->pipe_buffer.cnt = cnt; in pipespace_new()
649 atomic_add_long(&amountpipekva, cpipe->pipe_buffer.size); in pipespace_new()
657 pipespace(struct pipe *cpipe, int size) in pipespace() argument
660 KASSERT(cpipe->pipe_state & PIPE_LOCKFL, in pipespace()
662 return (pipespace_new(cpipe, size)); in pipespace()
669 pipelock(struct pipe *cpipe, int catch) in pipelock() argument
673 PIPE_LOCK_ASSERT(cpipe, MA_OWNED); in pipelock()
678 while (cpipe->pipe_state & PIPE_LOCKFL) { in pipelock()
679 KASSERT(cpipe->pipe_waiters >= 0, in pipelock()
681 cpipe->pipe_waiters)); in pipelock()
682 cpipe->pipe_waiters++; in pipelock()
683 error = msleep(&cpipe->pipe_waiters, PIPE_MTX(cpipe), prio, in pipelock()
685 cpipe->pipe_waiters--; in pipelock()
689 cpipe->pipe_state |= PIPE_LOCKFL; in pipelock()
697 pipeunlock(struct pipe *cpipe) in pipeunlock() argument
700 PIPE_LOCK_ASSERT(cpipe, MA_OWNED); in pipeunlock()
701 KASSERT(cpipe->pipe_state & PIPE_LOCKFL, in pipeunlock()
703 KASSERT(cpipe->pipe_waiters >= 0, in pipeunlock()
705 cpipe->pipe_waiters)); in pipeunlock()
706 cpipe->pipe_state &= ~PIPE_LOCKFL; in pipeunlock()
707 if (cpipe->pipe_waiters > 0) in pipeunlock()
708 wakeup_one(&cpipe->pipe_waiters); in pipeunlock()
712 pipeselwakeup(struct pipe *cpipe) in pipeselwakeup() argument
715 PIPE_LOCK_ASSERT(cpipe, MA_OWNED); in pipeselwakeup()
716 if (cpipe->pipe_state & PIPE_SEL) { in pipeselwakeup()
717 selwakeuppri(&cpipe->pipe_sel, PSOCK); in pipeselwakeup()
718 if (!SEL_WAITING(&cpipe->pipe_sel)) in pipeselwakeup()
719 cpipe->pipe_state &= ~PIPE_SEL; in pipeselwakeup()
721 if ((cpipe->pipe_state & PIPE_ASYNC) && cpipe->pipe_sigio) in pipeselwakeup()
722 pgsigio(&cpipe->pipe_sigio, SIGIO, 0); in pipeselwakeup()
723 KNOTE_LOCKED(&cpipe->pipe_sel.si_note, 0); in pipeselwakeup()
1403 struct pipe *cpipe; in pipe_truncate() local
1406 cpipe = fp->f_data; in pipe_truncate()
1407 if (cpipe->pipe_type & PIPE_TYPE_NAMED) in pipe_truncate()
1628 struct pipe *cpipe; in pipe_chmod() local
1631 cpipe = fp->f_data; in pipe_chmod()
1632 if (cpipe->pipe_type & PIPE_TYPE_NAMED) in pipe_chmod()
1643 struct pipe *cpipe; in pipe_chown() local
1646 cpipe = fp->f_data; in pipe_chown()
1647 if (cpipe->pipe_type & PIPE_TYPE_NAMED) in pipe_chown()
1673 pipe_free_kmem(struct pipe *cpipe) in pipe_free_kmem() argument
1676 KASSERT(!mtx_owned(PIPE_MTX(cpipe)), in pipe_free_kmem()
1679 if (cpipe->pipe_buffer.buffer != NULL) { in pipe_free_kmem()
1680 atomic_subtract_long(&amountpipekva, cpipe->pipe_buffer.size); in pipe_free_kmem()
1681 chgpipecnt(cpipe->pipe_pair->pp_owner->cr_ruidinfo, in pipe_free_kmem()
1682 -cpipe->pipe_buffer.size, 0); in pipe_free_kmem()
1684 (vm_offset_t)cpipe->pipe_buffer.buffer, in pipe_free_kmem()
1685 (vm_offset_t)cpipe->pipe_buffer.buffer + cpipe->pipe_buffer.size); in pipe_free_kmem()
1686 cpipe->pipe_buffer.buffer = NULL; in pipe_free_kmem()
1690 cpipe->pipe_pages.cnt = 0; in pipe_free_kmem()
1691 cpipe->pipe_pages.pos = 0; in pipe_free_kmem()
1692 cpipe->pipe_pages.npages = 0; in pipe_free_kmem()
1701 pipeclose(struct pipe *cpipe) in pipeclose() argument
1708 KASSERT(cpipe != NULL, ("pipeclose: cpipe == NULL")); in pipeclose()
1710 PIPE_LOCK(cpipe); in pipeclose()
1711 pipelock(cpipe, 0); in pipeclose()
1713 pp = cpipe->pipe_pair; in pipeclose()
1720 cpipe->pipe_state |= PIPE_EOF; in pipeclose()
1721 while (cpipe->pipe_busy) { in pipeclose()
1722 wakeup(cpipe); in pipeclose()
1723 cpipe->pipe_state |= PIPE_WANT; in pipeclose()
1724 pipeunlock(cpipe); in pipeclose()
1725 msleep(cpipe, PIPE_MTX(cpipe), PRIBIO, "pipecl", 0); in pipeclose()
1726 pipelock(cpipe, 0); in pipeclose()
1729 pipeselwakeup(cpipe); in pipeclose()
1734 ppipe = cpipe->pipe_peer; in pipeclose()
1747 PIPE_UNLOCK(cpipe); in pipeclose()
1748 pipe_free_kmem(cpipe); in pipeclose()
1749 PIPE_LOCK(cpipe); in pipeclose()
1750 cpipe->pipe_present = PIPE_CLOSING; in pipeclose()
1751 pipeunlock(cpipe); in pipeclose()
1758 knlist_clear(&cpipe->pipe_sel.si_note, 1); in pipeclose()
1759 cpipe->pipe_present = PIPE_FINALIZED; in pipeclose()
1760 seldrain(&cpipe->pipe_sel); in pipeclose()
1761 knlist_destroy(&cpipe->pipe_sel.si_note); in pipeclose()
1768 PIPE_UNLOCK(cpipe); in pipeclose()
1769 crfree(cpipe->pipe_pair->pp_owner); in pipeclose()
1773 uma_zfree(pipe_zone, cpipe->pipe_pair); in pipeclose()
1775 PIPE_UNLOCK(cpipe); in pipeclose()
1782 struct pipe *cpipe; in pipe_kqfilter() local
1797 cpipe = fp->f_data; in pipe_kqfilter()
1798 PIPE_LOCK(cpipe); in pipe_kqfilter()
1805 if (cpipe->pipe_peer->pipe_present != PIPE_ACTIVE) { in pipe_kqfilter()
1807 PIPE_UNLOCK(cpipe); in pipe_kqfilter()
1810 cpipe = PIPE_PEER(cpipe); in pipe_kqfilter()
1813 if ((cpipe->pipe_type & PIPE_TYPE_NAMED) != 0) { in pipe_kqfilter()
1814 PIPE_UNLOCK(cpipe); in pipe_kqfilter()
1817 PIPE_UNLOCK(cpipe); in pipe_kqfilter()
1821 kn->kn_hook = cpipe; in pipe_kqfilter()
1822 knlist_add(&cpipe->pipe_sel.si_note, kn, 1); in pipe_kqfilter()
1823 PIPE_UNLOCK(cpipe); in pipe_kqfilter()
1830 struct pipe *cpipe = kn->kn_hook; in filt_pipedetach() local
1832 PIPE_LOCK(cpipe); in filt_pipedetach()
1833 knlist_remove(&cpipe->pipe_sel.si_note, kn, 1); in filt_pipedetach()
1834 PIPE_UNLOCK(cpipe); in filt_pipedetach()