Lines Matching refs:cpipe

234 static void pipeclose(struct pipe *cpipe);
235 static void pipe_free_kmem(struct pipe *cpipe);
238 static __inline int pipelock(struct pipe *cpipe, bool catch);
239 static __inline void pipeunlock(struct pipe *cpipe);
247 static int pipespace(struct pipe *cpipe, int size);
248 static int pipespace_new(struct pipe *cpipe, int size);
571 pipespace_new(struct pipe *cpipe, int size) in pipespace_new() argument
578 KASSERT(!mtx_owned(PIPE_MTX(cpipe)), ("pipespace: pipe mutex locked")); in pipespace_new()
579 KASSERT(!(cpipe->pipe_state & PIPE_DIRECTW), in pipespace_new()
582 cnt = cpipe->pipe_buffer.cnt; in pipespace_new()
589 if (!chgpipecnt(cpipe->pipe_pair->pp_owner->cr_ruidinfo, in pipespace_new()
591 if (cpipe->pipe_buffer.buffer == NULL && in pipespace_new()
603 chgpipecnt(cpipe->pipe_pair->pp_owner->cr_ruidinfo, -size, 0); in pipespace_new()
604 if (cpipe->pipe_buffer.buffer == NULL && in pipespace_new()
616 chgpipecnt(cpipe->pipe_pair->pp_owner->cr_ruidinfo, -size, 0); in pipespace_new()
617 if (cpipe->pipe_buffer.buffer == NULL && in pipespace_new()
623 if (cpipe->pipe_buffer.buffer == NULL) { in pipespace_new()
635 if (cpipe->pipe_buffer.in <= cpipe->pipe_buffer.out) { in pipespace_new()
636 firstseg = cpipe->pipe_buffer.size - cpipe->pipe_buffer.out; in pipespace_new()
637 bcopy(&cpipe->pipe_buffer.buffer[cpipe->pipe_buffer.out], in pipespace_new()
640 bcopy(cpipe->pipe_buffer.buffer, &buffer[firstseg], in pipespace_new()
641 cpipe->pipe_buffer.in); in pipespace_new()
643 bcopy(&cpipe->pipe_buffer.buffer[cpipe->pipe_buffer.out], in pipespace_new()
647 pipe_free_kmem(cpipe); in pipespace_new()
648 cpipe->pipe_buffer.buffer = buffer; in pipespace_new()
649 cpipe->pipe_buffer.size = size; in pipespace_new()
650 cpipe->pipe_buffer.in = cnt; in pipespace_new()
651 cpipe->pipe_buffer.out = 0; in pipespace_new()
652 cpipe->pipe_buffer.cnt = cnt; in pipespace_new()
653 atomic_add_long(&amountpipekva, cpipe->pipe_buffer.size); in pipespace_new()
661 pipespace(struct pipe *cpipe, int size) in pipespace() argument
664 KASSERT(cpipe->pipe_state & PIPE_LOCKFL, in pipespace()
666 return (pipespace_new(cpipe, size)); in pipespace()
673 pipelock(struct pipe *cpipe, bool catch) in pipelock() argument
677 PIPE_LOCK_ASSERT(cpipe, MA_OWNED); in pipelock()
682 while (cpipe->pipe_state & PIPE_LOCKFL) { in pipelock()
683 KASSERT(cpipe->pipe_waiters >= 0, in pipelock()
685 cpipe->pipe_waiters)); in pipelock()
686 cpipe->pipe_waiters++; in pipelock()
687 error = msleep(&cpipe->pipe_waiters, PIPE_MTX(cpipe), prio, in pipelock()
689 cpipe->pipe_waiters--; in pipelock()
693 cpipe->pipe_state |= PIPE_LOCKFL; in pipelock()
701 pipeunlock(struct pipe *cpipe) in pipeunlock() argument
704 PIPE_LOCK_ASSERT(cpipe, MA_OWNED); in pipeunlock()
705 KASSERT(cpipe->pipe_state & PIPE_LOCKFL, in pipeunlock()
707 KASSERT(cpipe->pipe_waiters >= 0, in pipeunlock()
709 cpipe->pipe_waiters)); in pipeunlock()
710 cpipe->pipe_state &= ~PIPE_LOCKFL; in pipeunlock()
711 if (cpipe->pipe_waiters > 0) in pipeunlock()
712 wakeup_one(&cpipe->pipe_waiters); in pipeunlock()
716 pipeselwakeup(struct pipe *cpipe) in pipeselwakeup() argument
719 PIPE_LOCK_ASSERT(cpipe, MA_OWNED); in pipeselwakeup()
720 if (cpipe->pipe_state & PIPE_SEL) { in pipeselwakeup()
721 selwakeuppri(&cpipe->pipe_sel, PSOCK); in pipeselwakeup()
722 if (!SEL_WAITING(&cpipe->pipe_sel)) in pipeselwakeup()
723 cpipe->pipe_state &= ~PIPE_SEL; in pipeselwakeup()
725 if ((cpipe->pipe_state & PIPE_ASYNC) && cpipe->pipe_sigio) in pipeselwakeup()
726 pgsigio(&cpipe->pipe_sigio, SIGIO, 0); in pipeselwakeup()
727 KNOTE_LOCKED(&cpipe->pipe_sel.si_note, 0); in pipeselwakeup()
1407 struct pipe *cpipe; in pipe_truncate() local
1410 cpipe = fp->f_data; in pipe_truncate()
1411 if (cpipe->pipe_type & PIPE_TYPE_NAMED) in pipe_truncate()
1632 struct pipe *cpipe; in pipe_chmod() local
1635 cpipe = fp->f_data; in pipe_chmod()
1636 if (cpipe->pipe_type & PIPE_TYPE_NAMED) in pipe_chmod()
1647 struct pipe *cpipe; in pipe_chown() local
1650 cpipe = fp->f_data; in pipe_chown()
1651 if (cpipe->pipe_type & PIPE_TYPE_NAMED) in pipe_chown()
1677 pipe_free_kmem(struct pipe *cpipe) in pipe_free_kmem() argument
1680 KASSERT(!mtx_owned(PIPE_MTX(cpipe)), in pipe_free_kmem()
1683 if (cpipe->pipe_buffer.buffer != NULL) { in pipe_free_kmem()
1684 atomic_subtract_long(&amountpipekva, cpipe->pipe_buffer.size); in pipe_free_kmem()
1685 chgpipecnt(cpipe->pipe_pair->pp_owner->cr_ruidinfo, in pipe_free_kmem()
1686 -cpipe->pipe_buffer.size, 0); in pipe_free_kmem()
1688 (vm_offset_t)cpipe->pipe_buffer.buffer, in pipe_free_kmem()
1689 (vm_offset_t)cpipe->pipe_buffer.buffer + cpipe->pipe_buffer.size); in pipe_free_kmem()
1690 cpipe->pipe_buffer.buffer = NULL; in pipe_free_kmem()
1694 cpipe->pipe_pages.cnt = 0; in pipe_free_kmem()
1695 cpipe->pipe_pages.pos = 0; in pipe_free_kmem()
1696 cpipe->pipe_pages.npages = 0; in pipe_free_kmem()
1705 pipeclose(struct pipe *cpipe) in pipeclose() argument
1712 KASSERT(cpipe != NULL, ("pipeclose: cpipe == NULL")); in pipeclose()
1714 PIPE_LOCK(cpipe); in pipeclose()
1715 pipelock(cpipe, false); in pipeclose()
1717 pp = cpipe->pipe_pair; in pipeclose()
1724 cpipe->pipe_state |= PIPE_EOF; in pipeclose()
1725 while (cpipe->pipe_busy) { in pipeclose()
1726 wakeup(cpipe); in pipeclose()
1727 cpipe->pipe_state |= PIPE_WANT; in pipeclose()
1728 pipeunlock(cpipe); in pipeclose()
1729 msleep(cpipe, PIPE_MTX(cpipe), PRIBIO, "pipecl", 0); in pipeclose()
1730 pipelock(cpipe, false); in pipeclose()
1733 pipeselwakeup(cpipe); in pipeclose()
1738 ppipe = cpipe->pipe_peer; in pipeclose()
1751 PIPE_UNLOCK(cpipe); in pipeclose()
1752 pipe_free_kmem(cpipe); in pipeclose()
1753 PIPE_LOCK(cpipe); in pipeclose()
1754 cpipe->pipe_present = PIPE_CLOSING; in pipeclose()
1755 pipeunlock(cpipe); in pipeclose()
1762 knlist_clear(&cpipe->pipe_sel.si_note, 1); in pipeclose()
1763 cpipe->pipe_present = PIPE_FINALIZED; in pipeclose()
1764 seldrain(&cpipe->pipe_sel); in pipeclose()
1765 knlist_destroy(&cpipe->pipe_sel.si_note); in pipeclose()
1772 PIPE_UNLOCK(cpipe); in pipeclose()
1773 crfree(cpipe->pipe_pair->pp_owner); in pipeclose()
1777 uma_zfree(pipe_zone, cpipe->pipe_pair); in pipeclose()
1779 PIPE_UNLOCK(cpipe); in pipeclose()
1786 struct pipe *cpipe; in pipe_kqfilter() local
1801 cpipe = fp->f_data; in pipe_kqfilter()
1802 PIPE_LOCK(cpipe); in pipe_kqfilter()
1809 if (cpipe->pipe_peer->pipe_present != PIPE_ACTIVE) { in pipe_kqfilter()
1811 PIPE_UNLOCK(cpipe); in pipe_kqfilter()
1814 cpipe = PIPE_PEER(cpipe); in pipe_kqfilter()
1817 if ((cpipe->pipe_type & PIPE_TYPE_NAMED) != 0) { in pipe_kqfilter()
1818 PIPE_UNLOCK(cpipe); in pipe_kqfilter()
1821 PIPE_UNLOCK(cpipe); in pipe_kqfilter()
1825 kn->kn_hook = cpipe; in pipe_kqfilter()
1826 knlist_add(&cpipe->pipe_sel.si_note, kn, 1); in pipe_kqfilter()
1827 PIPE_UNLOCK(cpipe); in pipe_kqfilter()
1834 struct pipe *cpipe = kn->kn_hook; in filt_pipedetach() local
1836 PIPE_LOCK(cpipe); in filt_pipedetach()
1837 knlist_remove(&cpipe->pipe_sel.si_note, kn, 1); in filt_pipedetach()
1838 PIPE_UNLOCK(cpipe); in filt_pipedetach()