tty: prevent unnecessary work queue lock checking on flip buffer copy
When low_latency flag is set the TTY receive flip buffer is copied to the line discipline directly instead of using a work queue in the background. Therefor only in case a workqueue is actually used for copying data to the line discipline we'll have to flush the workqueue. This prevents unnecessary spin lock/unlock on the workqueue spin lock that can cause additional scheduling overhead on a PREEMPT_RT system. On a 200 MHz AT91SAM9261 processor setup this fixes about 100us of scheduling overhead on the TTY read call. Signed-off-by: Ivo Sieben <meltedpianoman@gmail.com> Acked-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
daee779718
commit
cee4ad1ed9
|
@ -342,6 +342,8 @@ EXPORT_SYMBOL(tty_insert_flip_string_flags);
|
||||||
* Takes any pending buffers and transfers their ownership to the
|
* Takes any pending buffers and transfers their ownership to the
|
||||||
* ldisc side of the queue. It then schedules those characters for
|
* ldisc side of the queue. It then schedules those characters for
|
||||||
* processing by the line discipline.
|
* processing by the line discipline.
|
||||||
|
* Note that this function can only be used when the low_latency flag
|
||||||
|
* is unset. Otherwise the workqueue won't be flushed.
|
||||||
*
|
*
|
||||||
* Locking: Takes tty->buf.lock
|
* Locking: Takes tty->buf.lock
|
||||||
*/
|
*/
|
||||||
|
@ -514,7 +516,8 @@ static void flush_to_ldisc(struct work_struct *work)
|
||||||
*/
|
*/
|
||||||
void tty_flush_to_ldisc(struct tty_struct *tty)
|
void tty_flush_to_ldisc(struct tty_struct *tty)
|
||||||
{
|
{
|
||||||
flush_work(&tty->buf.work);
|
if (!tty->low_latency)
|
||||||
|
flush_work(&tty->buf.work);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Reference in New Issue