Commit fdfb719e authored by Peter Hurley's avatar Peter Hurley Committed by Greg Kroah-Hartman

tty: Remove chars_in_buffer() line discipline method

The chars_in_buffer() line discipline method serves no functional
purpose, other than as a (dubious) debugging aid for mostly bit-rotting
drivers. Despite being documented as an optional method, every caller
is unconditionally executed (although conditionally compiled).
Furthermore, direct tty->ldisc access without an ldisc ref is unsafe.
Lastly, N_TTY's chars_in_buffer() has warned of removal since 3.12.
Signed-off-by: default avatarPeter Hurley <peter@hurleysoftware.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 582e20a0
...@@ -72,9 +72,6 @@ flush_buffer() - (optional) May be called at any point between ...@@ -72,9 +72,6 @@ flush_buffer() - (optional) May be called at any point between
open and close, and instructs the line discipline open and close, and instructs the line discipline
to empty its input buffer. to empty its input buffer.
chars_in_buffer() - (optional) Report the number of bytes in the input
buffer.
set_termios() - (optional) Called on termios structure changes. set_termios() - (optional) Called on termios structure changes.
The caller passes the old termios data and the The caller passes the old termios data and the
current data is in the tty. Called under the current data is in the tty. Called under the
......
...@@ -965,8 +965,7 @@ static void rs_throttle(struct tty_struct * tty) ...@@ -965,8 +965,7 @@ static void rs_throttle(struct tty_struct * tty)
struct serial_state *info = tty->driver_data; struct serial_state *info = tty->driver_data;
unsigned long flags; unsigned long flags;
#ifdef SERIAL_DEBUG_THROTTLE #ifdef SERIAL_DEBUG_THROTTLE
printk("throttle %s: %d....\n", tty_name(tty), printk("throttle %s ....\n", tty_name(tty));
tty->ldisc.chars_in_buffer(tty));
#endif #endif
if (serial_paranoia_check(info, tty->name, "rs_throttle")) if (serial_paranoia_check(info, tty->name, "rs_throttle"))
...@@ -988,8 +987,7 @@ static void rs_unthrottle(struct tty_struct * tty) ...@@ -988,8 +987,7 @@ static void rs_unthrottle(struct tty_struct * tty)
struct serial_state *info = tty->driver_data; struct serial_state *info = tty->driver_data;
unsigned long flags; unsigned long flags;
#ifdef SERIAL_DEBUG_THROTTLE #ifdef SERIAL_DEBUG_THROTTLE
printk("unthrottle %s: %d....\n", tty_name(tty), printk("unthrottle %s ....\n", tty_name(tty));
tty->ldisc.chars_in_buffer(tty));
#endif #endif
if (serial_paranoia_check(info, tty->name, "rs_unthrottle")) if (serial_paranoia_check(info, tty->name, "rs_unthrottle"))
......
...@@ -2852,8 +2852,8 @@ static void cy_throttle(struct tty_struct *tty) ...@@ -2852,8 +2852,8 @@ static void cy_throttle(struct tty_struct *tty)
unsigned long flags; unsigned long flags;
#ifdef CY_DEBUG_THROTTLE #ifdef CY_DEBUG_THROTTLE
printk(KERN_DEBUG "cyc:throttle %s: %ld...ttyC%d\n", tty_name(tty), printk(KERN_DEBUG "cyc:throttle %s ...ttyC%d\n", tty_name(tty),
tty->ldisc.chars_in_buffer(tty), info->line); info->line);
#endif #endif
if (serial_paranoia_check(info, tty->name, "cy_throttle")) if (serial_paranoia_check(info, tty->name, "cy_throttle"))
...@@ -2891,8 +2891,8 @@ static void cy_unthrottle(struct tty_struct *tty) ...@@ -2891,8 +2891,8 @@ static void cy_unthrottle(struct tty_struct *tty)
unsigned long flags; unsigned long flags;
#ifdef CY_DEBUG_THROTTLE #ifdef CY_DEBUG_THROTTLE
printk(KERN_DEBUG "cyc:unthrottle %s: %ld...ttyC%d\n", printk(KERN_DEBUG "cyc:unthrottle %s ...ttyC%d\n",
tty_name(tty), tty_chars_in_buffer(tty), info->line); tty_name(tty), info->line);
#endif #endif
if (serial_paranoia_check(info, tty->name, "cy_unthrottle")) if (serial_paranoia_check(info, tty->name, "cy_unthrottle"))
......
...@@ -2303,21 +2303,6 @@ static void gsmld_receive_buf(struct tty_struct *tty, const unsigned char *cp, ...@@ -2303,21 +2303,6 @@ static void gsmld_receive_buf(struct tty_struct *tty, const unsigned char *cp,
/* If clogged call tty_throttle(tty); */ /* If clogged call tty_throttle(tty); */
} }
/**
* gsmld_chars_in_buffer - report available bytes
* @tty: tty device
*
* Report the number of characters buffered to be delivered to user
* at this instant in time.
*
* Locking: gsm lock
*/
static ssize_t gsmld_chars_in_buffer(struct tty_struct *tty)
{
return 0;
}
/** /**
* gsmld_flush_buffer - clean input queue * gsmld_flush_buffer - clean input queue
* @tty: terminal device * @tty: terminal device
...@@ -2830,7 +2815,6 @@ static struct tty_ldisc_ops tty_ldisc_packet = { ...@@ -2830,7 +2815,6 @@ static struct tty_ldisc_ops tty_ldisc_packet = {
.open = gsmld_open, .open = gsmld_open,
.close = gsmld_close, .close = gsmld_close,
.flush_buffer = gsmld_flush_buffer, .flush_buffer = gsmld_flush_buffer,
.chars_in_buffer = gsmld_chars_in_buffer,
.read = gsmld_read, .read = gsmld_read,
.write = gsmld_write, .write = gsmld_write,
.ioctl = gsmld_ioctl, .ioctl = gsmld_ioctl,
......
...@@ -380,28 +380,6 @@ static void n_tty_flush_buffer(struct tty_struct *tty) ...@@ -380,28 +380,6 @@ static void n_tty_flush_buffer(struct tty_struct *tty)
up_write(&tty->termios_rwsem); up_write(&tty->termios_rwsem);
} }
/**
* n_tty_chars_in_buffer - report available bytes
* @tty: tty device
*
* Report the number of characters buffered to be delivered to user
* at this instant in time.
*
* Locking: exclusive termios_rwsem
*/
static ssize_t n_tty_chars_in_buffer(struct tty_struct *tty)
{
ssize_t n;
WARN_ONCE(1, "%s is deprecated and scheduled for removal.", __func__);
down_write(&tty->termios_rwsem);
n = chars_in_buffer(tty);
up_write(&tty->termios_rwsem);
return n;
}
/** /**
* is_utf8_continuation - utf8 multibyte check * is_utf8_continuation - utf8 multibyte check
* @c: byte to check * @c: byte to check
...@@ -2525,7 +2503,6 @@ struct tty_ldisc_ops tty_ldisc_N_TTY = { ...@@ -2525,7 +2503,6 @@ struct tty_ldisc_ops tty_ldisc_N_TTY = {
.open = n_tty_open, .open = n_tty_open,
.close = n_tty_close, .close = n_tty_close,
.flush_buffer = n_tty_flush_buffer, .flush_buffer = n_tty_flush_buffer,
.chars_in_buffer = n_tty_chars_in_buffer,
.read = n_tty_read, .read = n_tty_read,
.write = n_tty_write, .write = n_tty_write,
.ioctl = n_tty_ioctl, .ioctl = n_tty_ioctl,
......
...@@ -1360,8 +1360,7 @@ static void rp_throttle(struct tty_struct *tty) ...@@ -1360,8 +1360,7 @@ static void rp_throttle(struct tty_struct *tty)
struct r_port *info = tty->driver_data; struct r_port *info = tty->driver_data;
#ifdef ROCKET_DEBUG_THROTTLE #ifdef ROCKET_DEBUG_THROTTLE
printk(KERN_INFO "throttle %s: %d....\n", tty->name, printk(KERN_INFO "throttle %s ....\n", tty->name);
tty->ldisc.chars_in_buffer(tty));
#endif #endif
if (rocket_paranoia_check(info, "rp_throttle")) if (rocket_paranoia_check(info, "rp_throttle"))
...@@ -1377,8 +1376,7 @@ static void rp_unthrottle(struct tty_struct *tty) ...@@ -1377,8 +1376,7 @@ static void rp_unthrottle(struct tty_struct *tty)
{ {
struct r_port *info = tty->driver_data; struct r_port *info = tty->driver_data;
#ifdef ROCKET_DEBUG_THROTTLE #ifdef ROCKET_DEBUG_THROTTLE
printk(KERN_INFO "unthrottle %s: %d....\n", tty->name, printk(KERN_INFO "unthrottle %s ....\n", tty->name);
tty->ldisc.chars_in_buffer(tty));
#endif #endif
if (rocket_paranoia_check(info, "rp_unthrottle")) if (rocket_paranoia_check(info, "rp_unthrottle"))
......
...@@ -2968,7 +2968,7 @@ static int rs_raw_write(struct tty_struct *tty, ...@@ -2968,7 +2968,7 @@ static int rs_raw_write(struct tty_struct *tty,
local_save_flags(flags); local_save_flags(flags);
DFLOW(DEBUG_LOG(info->line, "write count %i ", count)); DFLOW(DEBUG_LOG(info->line, "write count %i ", count));
DFLOW(DEBUG_LOG(info->line, "ldisc %i\n", tty->ldisc.chars_in_buffer(tty))); DFLOW(DEBUG_LOG(info->line, "ldisc\n"));
/* The local_irq_disable/restore_flags pairs below are needed /* The local_irq_disable/restore_flags pairs below are needed
...@@ -3161,10 +3161,9 @@ rs_throttle(struct tty_struct * tty) ...@@ -3161,10 +3161,9 @@ rs_throttle(struct tty_struct * tty)
{ {
struct e100_serial *info = (struct e100_serial *)tty->driver_data; struct e100_serial *info = (struct e100_serial *)tty->driver_data;
#ifdef SERIAL_DEBUG_THROTTLE #ifdef SERIAL_DEBUG_THROTTLE
printk("throttle %s: %lu....\n", tty_name(tty), printk("throttle %s ....\n", tty_name(tty));
(unsigned long)tty->ldisc.chars_in_buffer(tty));
#endif #endif
DFLOW(DEBUG_LOG(info->line,"rs_throttle %lu\n", tty->ldisc.chars_in_buffer(tty))); DFLOW(DEBUG_LOG(info->line,"rs_throttle\n"));
/* Do RTS before XOFF since XOFF might take some time */ /* Do RTS before XOFF since XOFF might take some time */
if (tty->termios.c_cflag & CRTSCTS) { if (tty->termios.c_cflag & CRTSCTS) {
...@@ -3181,10 +3180,9 @@ rs_unthrottle(struct tty_struct * tty) ...@@ -3181,10 +3180,9 @@ rs_unthrottle(struct tty_struct * tty)
{ {
struct e100_serial *info = (struct e100_serial *)tty->driver_data; struct e100_serial *info = (struct e100_serial *)tty->driver_data;
#ifdef SERIAL_DEBUG_THROTTLE #ifdef SERIAL_DEBUG_THROTTLE
printk("unthrottle %s: %lu....\n", tty_name(tty), printk("unthrottle %s ....\n", tty_name(tty));
(unsigned long)tty->ldisc.chars_in_buffer(tty));
#endif #endif
DFLOW(DEBUG_LOG(info->line,"rs_unthrottle ldisc %d\n", tty->ldisc.chars_in_buffer(tty))); DFLOW(DEBUG_LOG(info->line,"rs_unthrottle ldisc\n"));
DFLOW(DEBUG_LOG(info->line,"rs_unthrottle flip.count: %i\n", tty->flip.count)); DFLOW(DEBUG_LOG(info->line,"rs_unthrottle flip.count: %i\n", tty->flip.count));
/* Do RTS before XOFF since XOFF might take some time */ /* Do RTS before XOFF since XOFF might take some time */
if (tty->termios.c_cflag & CRTSCTS) { if (tty->termios.c_cflag & CRTSCTS) {
......
...@@ -25,12 +25,6 @@ ...@@ -25,12 +25,6 @@
* buffers of any input characters it may have queued to be * buffers of any input characters it may have queued to be
* delivered to the user mode process. * delivered to the user mode process.
* *
* ssize_t (*chars_in_buffer)(struct tty_struct *tty);
*
* This function returns the number of input characters the line
* discipline may have queued up to be delivered to the user mode
* process.
*
* ssize_t (*read)(struct tty_struct * tty, struct file * file, * ssize_t (*read)(struct tty_struct * tty, struct file * file,
* unsigned char * buf, size_t nr); * unsigned char * buf, size_t nr);
* *
...@@ -188,7 +182,6 @@ struct tty_ldisc_ops { ...@@ -188,7 +182,6 @@ struct tty_ldisc_ops {
int (*open)(struct tty_struct *); int (*open)(struct tty_struct *);
void (*close)(struct tty_struct *); void (*close)(struct tty_struct *);
void (*flush_buffer)(struct tty_struct *tty); void (*flush_buffer)(struct tty_struct *tty);
ssize_t (*chars_in_buffer)(struct tty_struct *tty);
ssize_t (*read)(struct tty_struct *tty, struct file *file, ssize_t (*read)(struct tty_struct *tty, struct file *file,
unsigned char __user *buf, size_t nr); unsigned char __user *buf, size_t nr);
ssize_t (*write)(struct tty_struct *tty, struct file *file, ssize_t (*write)(struct tty_struct *tty, struct file *file,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment