[PATCH] tty: add ioctl for setting the throttle threshold (handshake)

From: Dirk Eibach
Date: Thu Aug 03 2006 - 08:51:28 EST


From: Dirk Eibach <eibach@xxxxxxxx>

The threshold for throttling tty input is currently set fixed to 128 byte remaining room (drivers/char/n_tty.c:TTY_THRESHOLD_THROTTLE). The unthrottling threshold is set fixed to 128 byte remaining in the buffer.

If the sender reacts slowly and bitrate is high, 128 byte may not be sufficient to avoid buffer overflows.

To be more flexible ioctls were added to control the throttling thresholds.

This patch applies to kernel 2.6.16.

Signed-off-by: Dirk Eibach <eibach@xxxxxxxx>
---
diff -uprN -X linux-2.6.16.orig//Documentation/dontdiff linux-2.6.16.tiny/drivers/char/n_tty.c linux-2.6.16-throttle/drivers/char/n_tty.c
--- linux-2.6.16.tiny/drivers/char/n_tty.c 2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16-throttle/drivers/char/n_tty.c 2006-08-03 14:14:35.000000000 +0200
@@ -52,14 +52,6 @@
/* number of characters left in xmit buffer before select has we have room */
#define WAKEUP_CHARS 256

-/*
- * This defines the low- and high-watermarks for throttling and
- * unthrottling the TTY driver. These watermarks are used for
- * controlling the space in the read buffer.
- */
-#define TTY_THRESHOLD_THROTTLE 128 /* now based on remaining room */
-#define TTY_THRESHOLD_UNTHROTTLE 128
-
static inline unsigned char *alloc_buf(void)
{
gfp_t prio = in_interrupt() ? GFP_ATOMIC : GFP_KERNEL;
@@ -968,7 +960,7 @@ static void n_tty_receive_buf(struct tty
* 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) {
+ 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->driver->throttle)
@@ -1384,7 +1376,7 @@ do_it_again:
* longer than TTY_THRESHOLD_UNTHROTTLE in canonical mode,
* we won't get any more characters.
*/
- if (n_tty_chars_in_buffer(tty) <= TTY_THRESHOLD_UNTHROTTLE)
+ if (n_tty_chars_in_buffer(tty) <= tty->threshold_unthrottle)
check_unthrottle(tty);

if (b - buf >= minimum)
diff -uprN -X linux-2.6.16.orig//Documentation/dontdiff linux-2.6.16.tiny/drivers/char/tty_io.c linux-2.6.16-throttle/drivers/char/tty_io.c
--- linux-2.6.16.tiny/drivers/char/tty_io.c 2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16-throttle/drivers/char/tty_io.c 2006-08-03 14:15:37.000000000 +0200
@@ -111,6 +111,14 @@
#define TTY_PARANOIA_CHECK 1
#define CHECK_TTY_COUNT 1

+/*
+* This defines the low- and high-watermarks for throttling and
+* unthrottling the TTY driver. These watermarks are used for
+* controlling the space in the read buffer.
+*/
+#define TTY_THRESHOLD_THROTTLE 128 /* now based on remaining room */
+#define TTY_THRESHOLD_UNTHROTTLE 128
+
struct termios tty_std_termios = { /* for the benefit of tty drivers */
.c_iflag = ICRNL | IXON,
.c_oflag = OPOST | ONLCR,
@@ -2920,6 +2928,8 @@ static void initialize_tty_struct(struct
spin_lock_init(&tty->read_lock);
INIT_LIST_HEAD(&tty->tty_files);
INIT_WORK(&tty->SAK_work, NULL, NULL);
+ tty->threshold_throttle = TTY_THRESHOLD_THROTTLE;
+ tty->threshold_unthrottle = TTY_THRESHOLD_UNTHROTTLE;
}

/*
diff -uprN -X linux-2.6.16.orig//Documentation/dontdiff linux-2.6.16.tiny/drivers/char/tty_ioctl.c linux-2.6.16-throttle/drivers/char/tty_ioctl.c
--- linux-2.6.16.tiny/drivers/char/tty_ioctl.c 2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16-throttle/drivers/char/tty_ioctl.c 2006-08-03 10:38:10.000000000 +0200
@@ -543,6 +543,26 @@ int n_tty_ioctl(struct tty_struct * tty,
(arg ? CLOCAL : 0));
up(&tty->termios_sem);
return 0;
+#ifdef TIOCGTHROTTLE
+ case TIOCGTHROTTLE:
+ return put_user(tty->threshold_throttle, (unsigned int __user *)arg);
+ case TIOCSTHROTTLE:
+ if (get_user(arg, (unsigned int __user *) arg))
+ return -EFAULT;
+ if ((arg >= N_TTY_BUF_SIZE) || (arg == 0))
+ return -EINVAL;
+ tty->threshold_throttle = arg;
+ return 0;
+ case TIOCGUNTHROTTLE:
+ return put_user(tty->threshold_unthrottle, (unsigned int __user *)arg);
+ case TIOCSUNTHROTTLE:
+ if (get_user(arg, (unsigned int __user *) arg))
+ return -EFAULT;
+ if ((arg >= N_TTY_BUF_SIZE) || (arg == 0))
+ return -EINVAL;
+ tty->threshold_unthrottle = arg;
+ return 0;
+#endif
default:
return -ENOIOCTLCMD;
}
diff -uprN -X linux-2.6.16.orig//Documentation/dontdiff linux-2.6.16.tiny/include/asm-alpha/ioctls.h linux-2.6.16-throttle/include/asm-alpha/ioctls.h
--- linux-2.6.16.tiny/include/asm-alpha/ioctls.h 2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16-throttle/include/asm-alpha/ioctls.h 2006-08-03 13:54:37.000000000 +0200
@@ -109,4 +109,9 @@
#define TIOCGHAYESESP 0x545E /* Get Hayes ESP configuration */
#define TIOCSHAYESESP 0x545F /* Set Hayes ESP configuration */

+#define TIOCGTHROTTLE _IOR('T',0x70, unsigned int)
+#define TIOCSTHROTTLE _IOW('T',0x71, unsigned int)
+#define TIOCGUNTHROTTLE _IOR('T',0x72, unsigned int)
+#define TIOCSUNTHROTTLE _IOW('T',0x73, unsigned int)
+
#endif /* _ASM_ALPHA_IOCTLS_H */
diff -uprN -X linux-2.6.16.orig//Documentation/dontdiff linux-2.6.16.tiny/include/asm-arm/ioctls.h linux-2.6.16-throttle/include/asm-arm/ioctls.h
--- linux-2.6.16.tiny/include/asm-arm/ioctls.h 2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16-throttle/include/asm-arm/ioctls.h 2006-08-03 13:53:39.000000000 +0200
@@ -66,6 +66,11 @@
#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
#define FIOQSIZE 0x545E

+#define TIOCGTHROTTLE _IOR('T',0x70, unsigned int)
+#define TIOCSTHROTTLE _IOW('T',0x71, unsigned int)
+#define TIOCGUNTHROTTLE _IOR('T',0x72, unsigned int)
+#define TIOCSUNTHROTTLE _IOW('T',0x73, unsigned int)
+
/* Used for packet mode */
#define TIOCPKT_DATA 0
#define TIOCPKT_FLUSHREAD 1
diff -uprN -X linux-2.6.16.orig//Documentation/dontdiff linux-2.6.16.tiny/include/asm-arm26/ioctls.h linux-2.6.16-throttle/include/asm-arm26/ioctls.h
--- linux-2.6.16.tiny/include/asm-arm26/ioctls.h 2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16-throttle/include/asm-arm26/ioctls.h 2006-08-03 13:55:41.000000000 +0200
@@ -67,6 +67,11 @@
#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
#define FIOQSIZE 0x545E

+#define TIOCGTHROTTLE _IOR('T',0x70, unsigned int)
+#define TIOCSTHROTTLE _IOW('T',0x71, unsigned int)
+#define TIOCGUNTHROTTLE _IOR('T',0x72, unsigned int)
+#define TIOCSUNTHROTTLE _IOW('T',0x73, unsigned int)
+
/* Used for packet mode */
#define TIOCPKT_DATA 0
#define TIOCPKT_FLUSHREAD 1
diff -uprN -X linux-2.6.16.orig//Documentation/dontdiff linux-2.6.16.tiny/include/asm-cris/ioctls.h linux-2.6.16-throttle/include/asm-cris/ioctls.h
--- linux-2.6.16.tiny/include/asm-cris/ioctls.h 2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16-throttle/include/asm-cris/ioctls.h 2006-08-03 13:56:04.000000000 +0200
@@ -73,6 +73,11 @@
#define TIOCSERSETRS485 0x5461 /* enable rs-485 */
#define TIOCSERWRRS485 0x5462 /* write rs-485 */

+#define TIOCGTHROTTLE _IOR('T',0x70, unsigned int)
+#define TIOCSTHROTTLE _IOW('T',0x71, unsigned int)
+#define TIOCGUNTHROTTLE _IOR('T',0x72, unsigned int)
+#define TIOCSUNTHROTTLE _IOW('T',0x73, unsigned int)
+
/* Used for packet mode */
#define TIOCPKT_DATA 0
#define TIOCPKT_FLUSHREAD 1
diff -uprN -X linux-2.6.16.orig//Documentation/dontdiff linux-2.6.16.tiny/include/asm-frv/ioctls.h linux-2.6.16-throttle/include/asm-frv/ioctls.h
--- linux-2.6.16.tiny/include/asm-frv/ioctls.h 2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16-throttle/include/asm-frv/ioctls.h 2006-08-03 13:56:28.000000000 +0200
@@ -67,6 +67,11 @@
#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
#define FIOQSIZE 0x545E

+#define TIOCGTHROTTLE _IOR('T',0x70, unsigned int)
+#define TIOCSTHROTTLE _IOW('T',0x71, unsigned int)
+#define TIOCGUNTHROTTLE _IOR('T',0x72, unsigned int)
+#define TIOCSUNTHROTTLE _IOW('T',0x73, unsigned int)
+
/* Used for packet mode */
#define TIOCPKT_DATA 0
#define TIOCPKT_FLUSHREAD 1
diff -uprN -X linux-2.6.16.orig//Documentation/dontdiff linux-2.6.16.tiny/include/asm-h8300/ioctls.h linux-2.6.16-throttle/include/asm-h8300/ioctls.h
--- linux-2.6.16.tiny/include/asm-h8300/ioctls.h 2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16-throttle/include/asm-h8300/ioctls.h 2006-08-03 13:56:57.000000000 +0200
@@ -67,6 +67,11 @@
#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
#define FIOQSIZE 0x545E

+#define TIOCGTHROTTLE _IOR('T',0x70, unsigned int)
+#define TIOCSTHROTTLE _IOW('T',0x71, unsigned int)
+#define TIOCGUNTHROTTLE _IOR('T',0x72, unsigned int)
+#define TIOCSUNTHROTTLE _IOW('T',0x73, unsigned int)
+
/* Used for packet mode */
#define TIOCPKT_DATA 0
#define TIOCPKT_FLUSHREAD 1
diff -uprN -X linux-2.6.16.orig//Documentation/dontdiff linux-2.6.16.tiny/include/asm-i386/ioctls.h linux-2.6.16-throttle/include/asm-i386/ioctls.h
--- linux-2.6.16.tiny/include/asm-i386/ioctls.h 2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16-throttle/include/asm-i386/ioctls.h 2006-08-03 13:54:25.000000000 +0200
@@ -69,6 +69,11 @@
#define TIOCSHAYESESP 0x545F /* Set Hayes ESP configuration */
#define FIOQSIZE 0x5460

+#define TIOCGTHROTTLE _IOR('T',0x70, unsigned int)
+#define TIOCSTHROTTLE _IOW('T',0x71, unsigned int)
+#define TIOCGUNTHROTTLE _IOR('T',0x72, unsigned int)
+#define TIOCSUNTHROTTLE _IOW('T',0x73, unsigned int)
+
/* Used for packet mode */
#define TIOCPKT_DATA 0
#define TIOCPKT_FLUSHREAD 1
diff -uprN -X linux-2.6.16.orig//Documentation/dontdiff linux-2.6.16.tiny/include/asm-ia64/ioctls.h linux-2.6.16-throttle/include/asm-ia64/ioctls.h
--- linux-2.6.16.tiny/include/asm-ia64/ioctls.h 2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16-throttle/include/asm-ia64/ioctls.h 2006-08-03 13:57:31.000000000 +0200
@@ -75,6 +75,11 @@
#define TIOCSHAYESESP 0x545F /* Set Hayes ESP configuration */
#define FIOQSIZE 0x5460

+#define TIOCGTHROTTLE _IOR('T',0x70, unsigned int)
+#define TIOCSTHROTTLE _IOW('T',0x71, unsigned int)
+#define TIOCGUNTHROTTLE _IOR('T',0x72, unsigned int)
+#define TIOCSUNTHROTTLE _IOW('T',0x73, unsigned int)
+
/* Used for packet mode */
#define TIOCPKT_DATA 0
#define TIOCPKT_FLUSHREAD 1
diff -uprN -X linux-2.6.16.orig//Documentation/dontdiff linux-2.6.16.tiny/include/asm-m32r/ioctls.h linux-2.6.16-throttle/include/asm-m32r/ioctls.h
--- linux-2.6.16.tiny/include/asm-m32r/ioctls.h 2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16-throttle/include/asm-m32r/ioctls.h 2006-08-03 13:57:58.000000000 +0200
@@ -73,6 +73,11 @@
#define TIOCSHAYESESP 0x545F /* Set Hayes ESP configuration */
#define FIOQSIZE 0x5460

+#define TIOCGTHROTTLE _IOR('T',0x70, unsigned int)
+#define TIOCSTHROTTLE _IOW('T',0x71, unsigned int)
+#define TIOCGUNTHROTTLE _IOR('T',0x72, unsigned int)
+#define TIOCSUNTHROTTLE _IOW('T',0x73, unsigned int)
+
/* Used for packet mode */
#define TIOCPKT_DATA 0
#define TIOCPKT_FLUSHREAD 1
diff -uprN -X linux-2.6.16.orig//Documentation/dontdiff linux-2.6.16.tiny/include/asm-m68k/ioctls.h linux-2.6.16-throttle/include/asm-m68k/ioctls.h
--- linux-2.6.16.tiny/include/asm-m68k/ioctls.h 2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16-throttle/include/asm-m68k/ioctls.h 2006-08-03 13:58:22.000000000 +0200
@@ -66,6 +66,11 @@
#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
#define FIOQSIZE 0x545E

+#define TIOCGTHROTTLE _IOR('T',0x70, unsigned int)
+#define TIOCSTHROTTLE _IOW('T',0x71, unsigned int)
+#define TIOCGUNTHROTTLE _IOR('T',0x72, unsigned int)
+#define TIOCSUNTHROTTLE _IOW('T',0x73, unsigned int)
+
/* Used for packet mode */
#define TIOCPKT_DATA 0
#define TIOCPKT_FLUSHREAD 1
diff -uprN -X linux-2.6.16.orig//Documentation/dontdiff linux-2.6.16.tiny/include/asm-mips/ioctls.h linux-2.6.16-throttle/include/asm-mips/ioctls.h
--- linux-2.6.16.tiny/include/asm-mips/ioctls.h 2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16-throttle/include/asm-mips/ioctls.h 2006-08-03 13:59:18.000000000 +0200
@@ -80,6 +80,11 @@
#define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
#define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */

+#define TIOCGTHROTTLE _IOR('T',0x70, unsigned int)
+#define TIOCSTHROTTLE _IOW('T',0x71, unsigned int)
+#define TIOCGUNTHROTTLE _IOR('T',0x72, unsigned int)
+#define TIOCSUNTHROTTLE _IOW('T',0x73, unsigned int)
+
/* I hope the range from 0x5480 on is free ... */
#define TIOCSCTTY 0x5480 /* become controlling tty */
#define TIOCGSOFTCAR 0x5481
diff -uprN -X linux-2.6.16.orig//Documentation/dontdiff linux-2.6.16.tiny/include/asm-parisc/ioctls.h linux-2.6.16-throttle/include/asm-parisc/ioctls.h
--- linux-2.6.16.tiny/include/asm-parisc/ioctls.h 2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16-throttle/include/asm-parisc/ioctls.h 2006-08-03 13:59:46.000000000 +0200
@@ -72,6 +72,11 @@
#define TIOCSTOP 0x5462
#define TIOCSLTC 0x5462

+#define TIOCGTHROTTLE _IOR('T',0x70, unsigned int)
+#define TIOCSTHROTTLE _IOW('T',0x71, unsigned int)
+#define TIOCGUNTHROTTLE _IOR('T',0x72, unsigned int)
+#define TIOCSUNTHROTTLE _IOW('T',0x73, unsigned int)
+
/* Used for packet mode */
#define TIOCPKT_DATA 0
#define TIOCPKT_FLUSHREAD 1
diff -uprN -X linux-2.6.16.orig//Documentation/dontdiff linux-2.6.16.tiny/include/asm-powerpc/ioctls.h linux-2.6.16-throttle/include/asm-powerpc/ioctls.h
--- linux-2.6.16.tiny/include/asm-powerpc/ioctls.h 2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16-throttle/include/asm-powerpc/ioctls.h 2006-08-03 14:00:15.000000000 +0200
@@ -107,4 +107,9 @@
#define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */
#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */

+#define TIOCGTHROTTLE _IOR('T',0x70, unsigned int)
+#define TIOCSTHROTTLE _IOW('T',0x71, unsigned int)
+#define TIOCGUNTHROTTLE _IOR('T',0x72, unsigned int)
+#define TIOCSUNTHROTTLE _IOW('T',0x73, unsigned int)
+
#endif /* _ASM_POWERPC_IOCTLS_H */
diff -uprN -X linux-2.6.16.orig//Documentation/dontdiff linux-2.6.16.tiny/include/asm-s390/ioctls.h linux-2.6.16-throttle/include/asm-s390/ioctls.h
--- linux-2.6.16.tiny/include/asm-s390/ioctls.h 2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16-throttle/include/asm-s390/ioctls.h 2006-08-03 14:01:01.000000000 +0200
@@ -74,6 +74,11 @@
#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
#define FIOQSIZE 0x545E

+#define TIOCGTHROTTLE _IOR('T',0x70, unsigned int)
+#define TIOCSTHROTTLE _IOW('T',0x71, unsigned int)
+#define TIOCGUNTHROTTLE _IOR('T',0x72, unsigned int)
+#define TIOCSUNTHROTTLE _IOW('T',0x73, unsigned int)
+
/* Used for packet mode */
#define TIOCPKT_DATA 0
#define TIOCPKT_FLUSHREAD 1
diff -uprN -X linux-2.6.16.orig//Documentation/dontdiff linux-2.6.16.tiny/include/asm-sparc/ioctls.h linux-2.6.16-throttle/include/asm-sparc/ioctls.h
--- linux-2.6.16.tiny/include/asm-sparc/ioctls.h 2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16-throttle/include/asm-sparc/ioctls.h 2006-08-03 14:01:50.000000000 +0200
@@ -111,6 +111,11 @@
#define TIOCMIWAIT 0x545C /* Wait input */
#define TIOCGICOUNT 0x545D /* Read serial port inline interrupt counts */

+#define TIOCGTHROTTLE _IOR('T',0x70, unsigned int)
+#define TIOCSTHROTTLE _IOW('T',0x71, unsigned int)
+#define TIOCGUNTHROTTLE _IOR('T',0x72, unsigned int)
+#define TIOCSUNTHROTTLE _IOW('T',0x73, unsigned int)
+
/* Kernel definitions */
#ifdef __KERNEL__
#define TIOCGETC __TIOCGETC
diff -uprN -X linux-2.6.16.orig//Documentation/dontdiff linux-2.6.16.tiny/include/asm-sparc64/ioctls.h linux-2.6.16-throttle/include/asm-sparc64/ioctls.h
--- linux-2.6.16.tiny/include/asm-sparc64/ioctls.h 2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16-throttle/include/asm-sparc64/ioctls.h 2006-08-03 14:02:15.000000000 +0200
@@ -112,6 +112,11 @@
#define TIOCMIWAIT 0x545C /* Wait for change on serial input line(s) */
#define TIOCGICOUNT 0x545D /* Read serial port inline interrupt counts */

+#define TIOCGTHROTTLE _IOR('T',0x70, unsigned int)
+#define TIOCSTHROTTLE _IOW('T',0x71, unsigned int)
+#define TIOCGUNTHROTTLE _IOR('T',0x72, unsigned int)
+#define TIOCSUNTHROTTLE _IOW('T',0x73, unsigned int)
+
/* Kernel definitions */
#ifdef __KERNEL__
#define TIOCGETC __TIOCGETC
diff -uprN -X linux-2.6.16.orig//Documentation/dontdiff linux-2.6.16.tiny/include/asm-v850/ioctls.h linux-2.6.16-throttle/include/asm-v850/ioctls.h
--- linux-2.6.16.tiny/include/asm-v850/ioctls.h 2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16-throttle/include/asm-v850/ioctls.h 2006-08-03 14:02:56.000000000 +0200
@@ -66,6 +66,11 @@
#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
#define FIOQSIZE 0x545E

+#define TIOCGTHROTTLE _IOR('T',0x70, unsigned int)
+#define TIOCSTHROTTLE _IOW('T',0x71, unsigned int)
+#define TIOCGUNTHROTTLE _IOR('T',0x72, unsigned int)
+#define TIOCSUNTHROTTLE _IOW('T',0x73, unsigned int)
+
/* Used for packet mode */
#define TIOCPKT_DATA 0
#define TIOCPKT_FLUSHREAD 1
diff -uprN -X linux-2.6.16.orig//Documentation/dontdiff linux-2.6.16.tiny/include/asm-x86_64/ioctls.h linux-2.6.16-throttle/include/asm-x86_64/ioctls.h
--- linux-2.6.16.tiny/include/asm-x86_64/ioctls.h 2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16-throttle/include/asm-x86_64/ioctls.h 2006-08-03 14:03:23.000000000 +0200
@@ -68,6 +68,11 @@
#define TIOCSHAYESESP 0x545F /* Set Hayes ESP configuration */
#define FIOQSIZE 0x5460

+#define TIOCGTHROTTLE _IOR('T',0x70, unsigned int)
+#define TIOCSTHROTTLE _IOW('T',0x71, unsigned int)
+#define TIOCGUNTHROTTLE _IOR('T',0x72, unsigned int)
+#define TIOCSUNTHROTTLE _IOW('T',0x73, unsigned int)
+
/* Used for packet mode */
#define TIOCPKT_DATA 0
#define TIOCPKT_FLUSHREAD 1
diff -uprN -X linux-2.6.16.orig//Documentation/dontdiff linux-2.6.16.tiny/include/asm-xtensa/ioctls.h linux-2.6.16-throttle/include/asm-xtensa/ioctls.h
--- linux-2.6.16.tiny/include/asm-xtensa/ioctls.h 2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16-throttle/include/asm-xtensa/ioctls.h 2006-08-03 14:04:00.000000000 +0200
@@ -94,6 +94,11 @@
#define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
#define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */

+#define TIOCGTHROTTLE _IOR('T',0x70, unsigned int)
+#define TIOCSTHROTTLE _IOW('T',0x71, unsigned int)
+#define TIOCGUNTHROTTLE _IOR('T',0x72, unsigned int)
+#define TIOCSUNTHROTTLE _IOW('T',0x73, unsigned int)
+
#define TIOCSERCONFIG _IO('T', 83)
#define TIOCSERGWILD _IOR('T', 84, int)
#define TIOCSERSWILD _IOW('T', 85, int)
diff -uprN -X linux-2.6.16.orig//Documentation/dontdiff linux-2.6.16.tiny/include/linux/tty.h linux-2.6.16-throttle/include/linux/tty.h
--- linux-2.6.16.tiny/include/linux/tty.h 2006-03-20 06:53:29.000000000 +0100
+++ linux-2.6.16-throttle/include/linux/tty.h 2006-08-03 14:15:48.000000000 +0200
@@ -238,6 +238,10 @@ struct tty_struct {
spinlock_t read_lock;
/* If the tty has a pending do_SAK, queue it here - akpm */
struct work_struct SAK_work;
+
+ /* dynamic throttle support */
+ unsigned int threshold_throttle;
+ unsigned int threshold_unthrottle;
};

/* tty magic number */



-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/