Andrew Morton writes:
> hm, a PPP fix. We seem to need some of those lately.
>
> Paul, does this look sane?
/me pages in 7 year old code...
> @@ -516,6 +516,8 @@ static void ppp_async_process(unsigned l
> /* try to push more stuff out */
> if (test_bit(XMIT_WAKEUP, &ap->xmit_flags) && ppp_async_push(ap))
> ppp_output_wakeup(&ap->chan);
> + else if (test_bit(XMIT_FULL, &ap->xmit_flags))
> + ppp_asynctty_wakeup(ap->tty);
ppp_asynctty_wakeup is supposed to be called by the serial driver when
it can take more output. It's slightly bogus having ppp_async call it
itself whether or not the serial driver can take more output at the
moment, but I suppose it won't hurt. I would really like to know the
precise circumstances where we need this fake wakeup though. Is the
serial driver failing to give us a wakeup call where it should, or is
ppp_async ignoring a wakeup for some reason?
I think the same effect could be achieved without an extra trip
through tasklet_schedule et al. by making those lines look like this
(untested):
if ((test_bit(XMIT_WAKEUP, &ap->xmit_flags) ||
test_bit(XMIT_FULL, &ap->xmit_flags)) && ppp_async_push(ap))
ppp_output_wakeup(&ap->chan);
so that ppp_async_push gets called if either XMIT_WAKEUP or XMIT_FULL
is set.
This is all relying on getting some input to kick off more output when
the wakeup gets missed, though. That's a reasonable workaround in most
situations, I guess, but I'd really like to know why the wakeup is
getting missed.
Paul.
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html