Re: [PATCH] Use tty_schedule in VT code.

Paul Fulghum
2007-07-18T19:28:25Z

On Wed, 2007-07-18 at 19:17 +0100, James Simmons wrote:

> I have no problem leaving at one. Here is the new patch. I did address the
> problem with tty_flip_buffer_push in this patch. It is possible for a
> driver to call tty_flip_buffer_push within a interrupt context if they
> set the low_latency flag.
> --- a/drivers/char/tty_io.c
> +++ b/drivers/char/tty_io.c
> @@ -3647,11 +3647,7 @@ void tty_flip_buffer_push(struct tty_struct *tty)
> if (tty->buf.tail != NULL)
> tty->buf.tail->commit = tty->buf.tail->used;
> spin_unlock_irqrestore(&tty->buf.lock, flags);
> -
> - if (tty->low_latency)
> - flush_to_ldisc(&tty->buf.work.work);
> - else
> - schedule_delayed_work(&tty->buf.work, 1);
> + schedule_delayed_work(&tty->buf.work, 1);
> }

While I have no problem with this, it would be a significant
behavior change (more so than changing the initial delay to 0).

IIRC, when the serial_core dead lock was being debugged
(by Russel King with some Dell guy who reported it 1-2 years ago)
this change was suggested and rejected because some callers
are not running at IRQ context and want to use low_latency.
In the end, I think they decided to leave the correct use of
low_latency WRT running in IRQ context to the caller.

It might be safest to drop this portion so you can get the
obvious part of the patch accepted (consolidating
the redundant xxx_schedule_flip functions).

--
Paul Fulghum
Microgate Systems, Ltd