tty: Add throttle/unthrottle helpers
PATCH 1/1 tty: Add throttle/unthrottle helpers
Something Arjan suggested which allows us to clean up the code nicely
Signed-off-by Alan Cox <[email protected]>
drivers/char/tty_ioctl.c +18 -0
@@ -67,6 +67,24 @@EXPORT_SYMBOL (tty_driver_flush_buffer); +void tty_throttle (struct tty_struct *tty) +{ +/* check TTY_THROTTLED first so it indicates our state */ +if (!test_and_set_bit (TTY_THROTTLED , &tty->flags) && + tty->ops->throttle) + tty->ops->throttle (tty); +} + +EXPORT_SYMBOL (tty_throttle); + +void tty_unthrottle (struct tty_struct *tty) +{ +if (test_and_clear_bit (TTY_THROTTLED , &tty->flags) && + tty->ops->unthrottle) + tty->ops->unthrottle (tty); +} + +EXPORT_SYMBOL (tty_unthrottle);/** * tty_wait_until_sent - wait for I/O to finish
include/linux/tty_driver.h +7 -3
@@ -83,10 +83,10 @@* void (*set_termios)(struct tty_struct *tty, struct ktermios * old); * * This routine allows the tty driver to be notified when -* device's termios settings have changed. +* device's termios settings have changed. * * Optional: Called under the termios lock * * * void (*set_ldisc)(struct tty_struct *tty); *
@@ -100,6 +100,8 @@* This routine notifies the tty driver that input buffers for * the line discipline are close to full, and it should somehow * signal that no more characters should be sent to the tty. +* +* Optional: Always invoke via tty_throttle(); * * void (*unthrottle)(struct tty_struct * tty); *
@@ -107,12 +109,14 @@* that characters can now be sent to the tty without fear of * overrunning the input buffers of the line disciplines. * +* Optional: Always invoke via tty_unthrottle(); +* * void (*stop)(struct tty_struct *tty); * * This routine notifies the tty driver that it should stop * outputting characters to the tty device. * -* Optional: +* Optional: * * Note: Call stop_tty not this method. *
@@ -141,7 +145,7 @@* * If this routine is implemented, the high-level tty driver will * handle the following ioctls: TCSBRK, TCSBRKP, TIOCSBRK, -* TIOCCBRK. +* TIOCCBRK. * * Optional: Required for TCSBRK/BRKP/etc handling. *
include/linux/tty.h +2 -0
@@ -303,6 +321,8 @@extern int tty_chars_in_buffer (struct tty_struct *tty);extern int tty_write_room (struct tty_struct *tty);extern void tty_driver_flush_buffer (struct tty_struct *tty); +extern void tty_throttle (struct tty_struct *tty); +extern void tty_unthrottle (struct tty_struct *tty);extern int is_current_pgrp_orphaned (void );extern struct pid *tty_get_pgrp (struct tty_struct *tty);
drivers/bluetooth/hci_ldisc.c +1 -3
@@ -370,9 +370,7 @@ hu->hdev->stat.byte_rx += count;spin_unlock (&hu->rx_lock); -if (test_and_clear_bit (TTY_THROTTLED , &tty->flags) && - tty->ops->unthrottle) - tty->ops->unthrottle (tty); +tty_unthrottle (tty); }static int hci_uart_register_dev (struct hci_uart *hu)
drivers/char/n_tty.c +4 -10
@@ -147,10 +147,8 @@static void check_unthrottle (struct tty_struct *tty) { -if (tty->count && -test_and_clear_bit (TTY_THROTTLED , &tty->flags) && - tty->ops->unthrottle) - tty->ops->unthrottle (tty); +if (tty->count) +tty_unthrottle (tty); }/**
@@ -982,12 +980,8 @@* mode. We don't want to throttle the driver if we're in * canonical mode and don't have a newline yet! */ -if (tty->receive_room <TTY_THRESHOLD_THROTTLE ) { -/* check TTY_THROTTLED first so it indicates our state */ -if (!test_and_set_bit (TTY_THROTTLED , &tty->flags) && - tty->ops->throttle) - tty->ops->throttle (tty); - } +if (tty->receive_room <TTY_THRESHOLD_THROTTLE ) +tty_throttle (tty); }int is_ignored (int sig)
drivers/net/hamradio/6pack.c +1 -3
@@ -491,9 +491,7 @@sixpack_decode (sp, buf, count1);sp_put (sp); -if (test_and_clear_bit (TTY_THROTTLED , &tty->flags) - && tty->ops->unthrottle) - tty->ops->unthrottle (tty); +tty_unthrottle (tty); }/*
drivers/net/hamradio/mkiss.c +1 -3
@@ -936,9 +936,7 @@ }mkiss_put (ax); -if (test_and_clear_bit (TTY_THROTTLED , &tty->flags) - && tty->ops->unthrottle) - tty->ops->unthrottle (tty); +tty_unthrottle (tty); }/*
drivers/net/ppp_async.c +1 -3
@@ -361,9 +361,7 @@if (!skb_queue_empty (&ap->rqueue))tasklet_schedule (&ap->tsk);ap_put (ap); -if (test_and_clear_bit (TTY_THROTTLED , &tty->flags) - && tty->ops->unthrottle) - tty->ops->unthrottle (tty); +tty_unthrottle (tty); } static void
drivers/net/ppp_synctty.c +1 -3
@@ -401,9 +401,7 @@if (!skb_queue_empty (&ap->rqueue))tasklet_schedule (&ap->tsk);sp_put (ap); -if (test_and_clear_bit (TTY_THROTTLED , &tty->flags) - && tty->ops->unthrottle) - tty->ops->unthrottle (tty); +tty_unthrottle (tty); } static void