On Tue, Nov 24, 2020 at 09:09:59AM +1100, matthew green wrote:
> > @@ -395,9 +401,8 @@ pipeunlock(struct pipe *pipe)
> >KASSERT(pipe->pipe_state & PIPE_LOCKFL);
> >
> >pipe->pipe_state &= ~PIPE_LOCKFL;
> > - if (pipe->pipe_state & PIPE_LWANT) {
> > - pipe->pipe_state &=
> @@ -395,9 +401,8 @@ pipeunlock(struct pipe *pipe)
> KASSERT(pipe->pipe_state & PIPE_LOCKFL);
>
> pipe->pipe_state &= ~PIPE_LOCKFL;
> - if (pipe->pipe_state & PIPE_LWANT) {
> - pipe->pipe_state &= ~PIPE_LWANT;
> - cv_broadcast(>pipe_lkcv);
> + if
mjg at freebsd says that their pipes have a thundering herd problem
that manifests in make's token pipe stuff at high -j values. We have
the same logic, and it's easily fixed.
Completely untested patch follows; does anyone object to this assuming
that it works (possibly after minor changes)?