All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] tty: Add throttle/unthrottle helpers
@ 2008-04-29 13:26 Alan Cox
  0 siblings, 0 replies; only message in thread
From: Alan Cox @ 2008-04-29 13:26 UTC (permalink / raw)
  To: akpm, linux-kernel

Something Arjan suggested which allows us to clean up the code nicely

Signed-off-by: Alan Cox <alan@redhat.com>

diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.25-mm1/drivers/char/tty_ioctl.c linux-2.6.25-mm1/drivers/char/tty_ioctl.c
--- linux.vanilla-2.6.25-mm1/drivers/char/tty_ioctl.c	2008-04-28 11:36:48.000000000 +0100
+++ linux-2.6.25-mm1/drivers/char/tty_ioctl.c	2008-04-14 14:27:41.000000000 +0100
@@ -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
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.25-mm1/include/linux/tty_driver.h linux-2.6.25-mm1/include/linux/tty_driver.h
--- linux.vanilla-2.6.25-mm1/include/linux/tty_driver.h	2008-04-28 11:36:52.000000000 +0100
+++ linux-2.6.25-mm1/include/linux/tty_driver.h	2008-04-14 14:27:30.000000000 +0100
@@ -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.
  *
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.25-mm1/include/linux/tty.h linux-2.6.25-mm1/include/linux/tty.h
--- linux.vanilla-2.6.25-mm1/include/linux/tty.h	2008-04-28 11:36:52.000000000 +0100
+++ linux-2.6.25-mm1/include/linux/tty.h	2008-04-28 12:26:36.000000000 +0100
@@ -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);
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.25-mm1/drivers/bluetooth/hci_ldisc.c linux-2.6.25-mm1/drivers/bluetooth/hci_ldisc.c
--- linux.vanilla-2.6.25-mm1/drivers/bluetooth/hci_ldisc.c	2008-04-28 11:36:48.000000000 +0100
+++ linux-2.6.25-mm1/drivers/bluetooth/hci_ldisc.c	2008-04-28 11:43:39.000000000 +0100
@@ -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)
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.25-mm1/drivers/char/n_tty.c linux-2.6.25-mm1/drivers/char/n_tty.c
--- linux.vanilla-2.6.25-mm1/drivers/char/n_tty.c	2008-04-28 11:36:48.000000000 +0100
+++ linux-2.6.25-mm1/drivers/char/n_tty.c	2008-04-14 14:26:29.000000000 +0100
@@ -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)
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.25-mm1/drivers/net/hamradio/6pack.c linux-2.6.25-mm1/drivers/net/hamradio/6pack.c
--- linux.vanilla-2.6.25-mm1/drivers/net/hamradio/6pack.c	2008-04-28 11:36:49.000000000 +0100
+++ linux-2.6.25-mm1/drivers/net/hamradio/6pack.c	2008-04-14 14:29:14.000000000 +0100
@@ -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);
 }
 
 /*
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.25-mm1/drivers/net/hamradio/mkiss.c linux-2.6.25-mm1/drivers/net/hamradio/mkiss.c
--- linux.vanilla-2.6.25-mm1/drivers/net/hamradio/mkiss.c	2008-04-28 11:36:49.000000000 +0100
+++ linux-2.6.25-mm1/drivers/net/hamradio/mkiss.c	2008-04-14 14:29:29.000000000 +0100
@@ -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);
 }
 
 /*
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.25-mm1/drivers/net/ppp_async.c linux-2.6.25-mm1/drivers/net/ppp_async.c
--- linux.vanilla-2.6.25-mm1/drivers/net/ppp_async.c	2008-04-28 11:36:49.000000000 +0100
+++ linux-2.6.25-mm1/drivers/net/ppp_async.c	2008-04-14 14:28:29.000000000 +0100
@@ -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
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.25-mm1/drivers/net/ppp_synctty.c linux-2.6.25-mm1/drivers/net/ppp_synctty.c
--- linux.vanilla-2.6.25-mm1/drivers/net/ppp_synctty.c	2008-04-28 11:36:49.000000000 +0100
+++ linux-2.6.25-mm1/drivers/net/ppp_synctty.c	2008-04-14 14:28:46.000000000 +0100
@@ -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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-04-29 13:34 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-29 13:26 [PATCH] tty: Add throttle/unthrottle helpers Alan Cox

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.