提交 18900ca6 编写于 作者: P Peter Hurley 提交者: Greg Kroah-Hartman

tty: Replace TTY_IO_ERROR bit tests with tty_io_error()

Abstract TTY_IO_ERROR status test treewide with tty_io_error().
NB: tty->flags uses atomic bit ops; replace non-atomic bit test
with test_bit().
Signed-off-by: NPeter Hurley <peter@hurleysoftware.com>
Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
上级 1aabf523
...@@ -300,7 +300,7 @@ static int rs_ioctl(struct tty_struct *tty, unsigned int cmd, unsigned long arg) ...@@ -300,7 +300,7 @@ static int rs_ioctl(struct tty_struct *tty, unsigned int cmd, unsigned long arg)
if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) && if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
(cmd != TIOCSERCONFIG) && (cmd != TIOCSERGSTRUCT) && (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGSTRUCT) &&
(cmd != TIOCMIWAIT)) { (cmd != TIOCMIWAIT)) {
if (tty->flags & (1 << TTY_IO_ERROR)) if (tty_io_error(tty))
return -EIO; return -EIO;
} }
......
...@@ -2246,7 +2246,7 @@ static int mgslpc_ioctl(struct tty_struct *tty, ...@@ -2246,7 +2246,7 @@ static int mgslpc_ioctl(struct tty_struct *tty,
if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) && if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
(cmd != TIOCMIWAIT)) { (cmd != TIOCMIWAIT)) {
if (tty->flags & (1 << TTY_IO_ERROR)) if (tty_io_error(tty))
return -EIO; return -EIO;
} }
......
...@@ -1351,7 +1351,7 @@ isdn_tty_tiocmget(struct tty_struct *tty) ...@@ -1351,7 +1351,7 @@ isdn_tty_tiocmget(struct tty_struct *tty)
if (isdn_tty_paranoia_check(info, tty->name, __func__)) if (isdn_tty_paranoia_check(info, tty->name, __func__))
return -ENODEV; return -ENODEV;
if (tty->flags & (1 << TTY_IO_ERROR)) if (tty_io_error(tty))
return -EIO; return -EIO;
mutex_lock(&modem_info_mutex); mutex_lock(&modem_info_mutex);
...@@ -1378,7 +1378,7 @@ isdn_tty_tiocmset(struct tty_struct *tty, ...@@ -1378,7 +1378,7 @@ isdn_tty_tiocmset(struct tty_struct *tty,
if (isdn_tty_paranoia_check(info, tty->name, __func__)) if (isdn_tty_paranoia_check(info, tty->name, __func__))
return -ENODEV; return -ENODEV;
if (tty->flags & (1 << TTY_IO_ERROR)) if (tty_io_error(tty))
return -EIO; return -EIO;
#ifdef ISDN_DEBUG_MODEM_IOCTL #ifdef ISDN_DEBUG_MODEM_IOCTL
...@@ -1419,7 +1419,7 @@ isdn_tty_ioctl(struct tty_struct *tty, uint cmd, ulong arg) ...@@ -1419,7 +1419,7 @@ isdn_tty_ioctl(struct tty_struct *tty, uint cmd, ulong arg)
if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_ioctl")) if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_ioctl"))
return -ENODEV; return -ENODEV;
if (tty->flags & (1 << TTY_IO_ERROR)) if (tty_io_error(tty))
return -EIO; return -EIO;
switch (cmd) { switch (cmd) {
case TCSBRK: /* SVID version: non-zero arg --> no break */ case TCSBRK: /* SVID version: non-zero arg --> no break */
......
...@@ -1804,7 +1804,7 @@ static int tty3270_ioctl(struct tty_struct *tty, unsigned int cmd, ...@@ -1804,7 +1804,7 @@ static int tty3270_ioctl(struct tty_struct *tty, unsigned int cmd,
tp = tty->driver_data; tp = tty->driver_data;
if (!tp) if (!tp)
return -ENODEV; return -ENODEV;
if (tty->flags & (1 << TTY_IO_ERROR)) if (tty_io_error(tty))
return -EIO; return -EIO;
return kbd_ioctl(tp->kbd, cmd, arg); return kbd_ioctl(tp->kbd, cmd, arg);
} }
...@@ -1818,7 +1818,7 @@ static long tty3270_compat_ioctl(struct tty_struct *tty, ...@@ -1818,7 +1818,7 @@ static long tty3270_compat_ioctl(struct tty_struct *tty,
tp = tty->driver_data; tp = tty->driver_data;
if (!tp) if (!tp)
return -ENODEV; return -ENODEV;
if (tty->flags & (1 << TTY_IO_ERROR)) if (tty_io_error(tty))
return -EIO; return -EIO;
return kbd_ioctl(tp->kbd, cmd, (unsigned long)compat_ptr(arg)); return kbd_ioctl(tp->kbd, cmd, (unsigned long)compat_ptr(arg));
} }
......
...@@ -1255,7 +1255,7 @@ static int dgnc_block_til_ready(struct tty_struct *tty, ...@@ -1255,7 +1255,7 @@ static int dgnc_block_til_ready(struct tty_struct *tty,
if (file->f_flags & O_NONBLOCK) if (file->f_flags & O_NONBLOCK)
break; break;
if (tty->flags & (1 << TTY_IO_ERROR)) { if (tty_io_error(tty)) {
retval = -EIO; retval = -EIO;
break; break;
} }
......
...@@ -1143,7 +1143,7 @@ static int rs_tiocmget(struct tty_struct *tty) ...@@ -1143,7 +1143,7 @@ static int rs_tiocmget(struct tty_struct *tty)
if (serial_paranoia_check(info, tty->name, "rs_ioctl")) if (serial_paranoia_check(info, tty->name, "rs_ioctl"))
return -ENODEV; return -ENODEV;
if (tty->flags & (1 << TTY_IO_ERROR)) if (tty_io_error(tty))
return -EIO; return -EIO;
control = info->MCR; control = info->MCR;
...@@ -1165,7 +1165,7 @@ static int rs_tiocmset(struct tty_struct *tty, unsigned int set, ...@@ -1165,7 +1165,7 @@ static int rs_tiocmset(struct tty_struct *tty, unsigned int set,
if (serial_paranoia_check(info, tty->name, "rs_ioctl")) if (serial_paranoia_check(info, tty->name, "rs_ioctl"))
return -ENODEV; return -ENODEV;
if (tty->flags & (1 << TTY_IO_ERROR)) if (tty_io_error(tty))
return -EIO; return -EIO;
local_irq_save(flags); local_irq_save(flags);
...@@ -1250,7 +1250,7 @@ static int rs_ioctl(struct tty_struct *tty, ...@@ -1250,7 +1250,7 @@ static int rs_ioctl(struct tty_struct *tty,
if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) && if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
(cmd != TIOCSERCONFIG) && (cmd != TIOCSERGSTRUCT) && (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGSTRUCT) &&
(cmd != TIOCMIWAIT) && (cmd != TIOCGICOUNT)) { (cmd != TIOCMIWAIT) && (cmd != TIOCGICOUNT)) {
if (tty->flags & (1 << TTY_IO_ERROR)) if (tty_io_error(tty))
return -EIO; return -EIO;
} }
......
...@@ -1334,7 +1334,7 @@ static int mxser_tiocmget(struct tty_struct *tty) ...@@ -1334,7 +1334,7 @@ static int mxser_tiocmget(struct tty_struct *tty)
if (tty->index == MXSER_PORTS) if (tty->index == MXSER_PORTS)
return -ENOIOCTLCMD; return -ENOIOCTLCMD;
if (test_bit(TTY_IO_ERROR, &tty->flags)) if (tty_io_error(tty))
return -EIO; return -EIO;
control = info->MCR; control = info->MCR;
...@@ -1361,7 +1361,7 @@ static int mxser_tiocmset(struct tty_struct *tty, ...@@ -1361,7 +1361,7 @@ static int mxser_tiocmset(struct tty_struct *tty,
if (tty->index == MXSER_PORTS) if (tty->index == MXSER_PORTS)
return -ENOIOCTLCMD; return -ENOIOCTLCMD;
if (test_bit(TTY_IO_ERROR, &tty->flags)) if (tty_io_error(tty))
return -EIO; return -EIO;
spin_lock_irqsave(&info->slock, flags); spin_lock_irqsave(&info->slock, flags);
...@@ -1715,8 +1715,7 @@ static int mxser_ioctl(struct tty_struct *tty, ...@@ -1715,8 +1715,7 @@ static int mxser_ioctl(struct tty_struct *tty,
return 0; return 0;
} }
if (cmd != TIOCGSERIAL && cmd != TIOCMIWAIT && if (cmd != TIOCGSERIAL && cmd != TIOCMIWAIT && tty_io_error(tty))
test_bit(TTY_IO_ERROR, &tty->flags))
return -EIO; return -EIO;
switch (cmd) { switch (cmd) {
......
...@@ -44,7 +44,7 @@ static void pty_close(struct tty_struct *tty, struct file *filp) ...@@ -44,7 +44,7 @@ static void pty_close(struct tty_struct *tty, struct file *filp)
if (tty->driver->subtype == PTY_TYPE_MASTER) if (tty->driver->subtype == PTY_TYPE_MASTER)
WARN_ON(tty->count > 1); WARN_ON(tty->count > 1);
else { else {
if (test_bit(TTY_IO_ERROR, &tty->flags)) if (tty_io_error(tty))
return; return;
if (tty->count > 2) if (tty->count > 2)
return; return;
......
...@@ -3445,7 +3445,7 @@ rs_ioctl(struct tty_struct *tty, ...@@ -3445,7 +3445,7 @@ rs_ioctl(struct tty_struct *tty,
if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) && if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
(cmd != TIOCSERCONFIG) && (cmd != TIOCSERGWILD) && (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGWILD) &&
(cmd != TIOCSERSWILD) && (cmd != TIOCSERGSTRUCT)) { (cmd != TIOCSERSWILD) && (cmd != TIOCSERGSTRUCT)) {
if (tty->flags & (1 << TTY_IO_ERROR)) if (tty_io_error(tty))
return -EIO; return -EIO;
} }
...@@ -3755,8 +3755,7 @@ block_til_ready(struct tty_struct *tty, struct file * filp, ...@@ -3755,8 +3755,7 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
* If non-blocking mode is set, or the port is not enabled, * If non-blocking mode is set, or the port is not enabled,
* then make the check up front and then exit. * then make the check up front and then exit.
*/ */
if ((filp->f_flags & O_NONBLOCK) || if ((filp->f_flags & O_NONBLOCK) || tty_io_error(tty)) {
(tty->flags & (1 << TTY_IO_ERROR))) {
info->port.flags |= ASYNC_NORMAL_ACTIVE; info->port.flags |= ASYNC_NORMAL_ACTIVE;
return 0; return 0;
} }
......
...@@ -969,7 +969,7 @@ static int uart_tiocmget(struct tty_struct *tty) ...@@ -969,7 +969,7 @@ static int uart_tiocmget(struct tty_struct *tty)
int result = -EIO; int result = -EIO;
mutex_lock(&port->mutex); mutex_lock(&port->mutex);
if (!(tty->flags & (1 << TTY_IO_ERROR))) { if (!tty_io_error(tty)) {
result = uport->mctrl; result = uport->mctrl;
spin_lock_irq(&uport->lock); spin_lock_irq(&uport->lock);
result |= uport->ops->get_mctrl(uport); result |= uport->ops->get_mctrl(uport);
...@@ -989,7 +989,7 @@ uart_tiocmset(struct tty_struct *tty, unsigned int set, unsigned int clear) ...@@ -989,7 +989,7 @@ uart_tiocmset(struct tty_struct *tty, unsigned int set, unsigned int clear)
int ret = -EIO; int ret = -EIO;
mutex_lock(&port->mutex); mutex_lock(&port->mutex);
if (!(tty->flags & (1 << TTY_IO_ERROR))) { if (!tty_io_error(tty)) {
uart_update_mctrl(uport, set, clear); uart_update_mctrl(uport, set, clear);
ret = 0; ret = 0;
} }
...@@ -1238,7 +1238,7 @@ uart_ioctl(struct tty_struct *tty, unsigned int cmd, ...@@ -1238,7 +1238,7 @@ uart_ioctl(struct tty_struct *tty, unsigned int cmd,
if (ret != -ENOIOCTLCMD) if (ret != -ENOIOCTLCMD)
goto out; goto out;
if (tty->flags & (1 << TTY_IO_ERROR)) { if (tty_io_error(tty)) {
ret = -EIO; ret = -EIO;
goto out; goto out;
} }
...@@ -1257,7 +1257,7 @@ uart_ioctl(struct tty_struct *tty, unsigned int cmd, ...@@ -1257,7 +1257,7 @@ uart_ioctl(struct tty_struct *tty, unsigned int cmd,
mutex_lock(&port->mutex); mutex_lock(&port->mutex);
if (tty->flags & (1 << TTY_IO_ERROR)) { if (tty_io_error(tty)) {
ret = -EIO; ret = -EIO;
goto out_up; goto out_up;
} }
......
...@@ -2972,7 +2972,7 @@ static int mgsl_ioctl(struct tty_struct *tty, ...@@ -2972,7 +2972,7 @@ static int mgsl_ioctl(struct tty_struct *tty,
if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) && if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
(cmd != TIOCMIWAIT)) { (cmd != TIOCMIWAIT)) {
if (tty->flags & (1 << TTY_IO_ERROR)) if (tty_io_error(tty))
return -EIO; return -EIO;
} }
...@@ -3270,7 +3270,7 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp, ...@@ -3270,7 +3270,7 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp,
printk("%s(%d):block_til_ready on %s\n", printk("%s(%d):block_til_ready on %s\n",
__FILE__,__LINE__, tty->driver->name ); __FILE__,__LINE__, tty->driver->name );
if (filp->f_flags & O_NONBLOCK || tty->flags & (1 << TTY_IO_ERROR)){ if (filp->f_flags & O_NONBLOCK || tty_io_error(tty)) {
/* nonblock mode is set or port is not enabled */ /* nonblock mode is set or port is not enabled */
port->flags |= ASYNC_NORMAL_ACTIVE; port->flags |= ASYNC_NORMAL_ACTIVE;
return 0; return 0;
......
...@@ -1032,7 +1032,7 @@ static int ioctl(struct tty_struct *tty, ...@@ -1032,7 +1032,7 @@ static int ioctl(struct tty_struct *tty,
if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) && if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
(cmd != TIOCMIWAIT)) { (cmd != TIOCMIWAIT)) {
if (tty->flags & (1 << TTY_IO_ERROR)) if (tty_io_error(tty))
return -EIO; return -EIO;
} }
...@@ -3269,7 +3269,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, ...@@ -3269,7 +3269,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp,
DBGINFO(("%s block_til_ready\n", tty->driver->name)); DBGINFO(("%s block_til_ready\n", tty->driver->name));
if (filp->f_flags & O_NONBLOCK || tty->flags & (1 << TTY_IO_ERROR)){ if (filp->f_flags & O_NONBLOCK || tty_io_error(tty)) {
/* nonblock mode is set or port is not enabled */ /* nonblock mode is set or port is not enabled */
port->flags |= ASYNC_NORMAL_ACTIVE; port->flags |= ASYNC_NORMAL_ACTIVE;
return 0; return 0;
......
...@@ -1261,7 +1261,7 @@ static int ioctl(struct tty_struct *tty, ...@@ -1261,7 +1261,7 @@ static int ioctl(struct tty_struct *tty,
if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) && if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
(cmd != TIOCMIWAIT)) { (cmd != TIOCMIWAIT)) {
if (tty->flags & (1 << TTY_IO_ERROR)) if (tty_io_error(tty))
return -EIO; return -EIO;
} }
...@@ -3285,7 +3285,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, ...@@ -3285,7 +3285,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp,
printk("%s(%d):%s block_til_ready()\n", printk("%s(%d):%s block_til_ready()\n",
__FILE__,__LINE__, tty->driver->name ); __FILE__,__LINE__, tty->driver->name );
if (filp->f_flags & O_NONBLOCK || tty->flags & (1 << TTY_IO_ERROR)){ if (filp->f_flags & O_NONBLOCK || tty_io_error(tty)) {
/* nonblock mode is set or port is not enabled */ /* nonblock mode is set or port is not enabled */
/* just verify that callout device is not active */ /* just verify that callout device is not active */
port->flags |= ASYNC_NORMAL_ACTIVE; port->flags |= ASYNC_NORMAL_ACTIVE;
......
...@@ -1070,7 +1070,7 @@ static ssize_t tty_read(struct file *file, char __user *buf, size_t count, ...@@ -1070,7 +1070,7 @@ static ssize_t tty_read(struct file *file, char __user *buf, size_t count,
if (tty_paranoia_check(tty, inode, "tty_read")) if (tty_paranoia_check(tty, inode, "tty_read"))
return -EIO; return -EIO;
if (!tty || (test_bit(TTY_IO_ERROR, &tty->flags))) if (!tty || tty_io_error(tty))
return -EIO; return -EIO;
/* We want to wait for the line discipline to sort out in this /* We want to wait for the line discipline to sort out in this
...@@ -1245,8 +1245,7 @@ static ssize_t tty_write(struct file *file, const char __user *buf, ...@@ -1245,8 +1245,7 @@ static ssize_t tty_write(struct file *file, const char __user *buf,
if (tty_paranoia_check(tty, file_inode(file), "tty_write")) if (tty_paranoia_check(tty, file_inode(file), "tty_write"))
return -EIO; return -EIO;
if (!tty || !tty->ops->write || if (!tty || !tty->ops->write || tty_io_error(tty))
(test_bit(TTY_IO_ERROR, &tty->flags)))
return -EIO; return -EIO;
/* Short term debug to catch buggy drivers */ /* Short term debug to catch buggy drivers */
if (tty->ops->write_room == NULL) if (tty->ops->write_room == NULL)
......
...@@ -364,7 +364,7 @@ int tty_port_block_til_ready(struct tty_port *port, ...@@ -364,7 +364,7 @@ int tty_port_block_til_ready(struct tty_port *port,
/* if non-blocking mode is set we can pass directly to open unless /* if non-blocking mode is set we can pass directly to open unless
the port has just hung up or is in another error state */ the port has just hung up or is in another error state */
if (tty->flags & (1 << TTY_IO_ERROR)) { if (tty_io_error(tty)) {
port->flags |= ASYNC_NORMAL_ACTIVE; port->flags |= ASYNC_NORMAL_ACTIVE;
return 0; return 0;
} }
......
...@@ -360,6 +360,11 @@ static inline void tty_set_flow_change(struct tty_struct *tty, int val) ...@@ -360,6 +360,11 @@ static inline void tty_set_flow_change(struct tty_struct *tty, int val)
smp_mb(); smp_mb();
} }
static inline bool tty_io_error(struct tty_struct *tty)
{
return test_bit(TTY_IO_ERROR, &tty->flags);
}
#ifdef CONFIG_TTY #ifdef CONFIG_TTY
extern void console_init(void); extern void console_init(void);
extern void tty_kref_put(struct tty_struct *tty); extern void tty_kref_put(struct tty_struct *tty);
......
...@@ -280,7 +280,7 @@ static int ircomm_tty_block_til_ready(struct ircomm_tty_cb *self, ...@@ -280,7 +280,7 @@ static int ircomm_tty_block_til_ready(struct ircomm_tty_cb *self,
* If non-blocking mode is set, or the port is not enabled, * If non-blocking mode is set, or the port is not enabled,
* then make the check up front and then exit. * then make the check up front and then exit.
*/ */
if (test_bit(TTY_IO_ERROR, &tty->flags)) { if (tty_io_error(tty)) {
port->flags |= ASYNC_NORMAL_ACTIVE; port->flags |= ASYNC_NORMAL_ACTIVE;
return 0; return 0;
} }
......
...@@ -190,7 +190,7 @@ int ircomm_tty_tiocmget(struct tty_struct *tty) ...@@ -190,7 +190,7 @@ int ircomm_tty_tiocmget(struct tty_struct *tty)
struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data;
unsigned int result; unsigned int result;
if (tty->flags & (1 << TTY_IO_ERROR)) if (tty_io_error(tty))
return -EIO; return -EIO;
result = ((self->settings.dte & IRCOMM_RTS) ? TIOCM_RTS : 0) result = ((self->settings.dte & IRCOMM_RTS) ? TIOCM_RTS : 0)
...@@ -213,7 +213,7 @@ int ircomm_tty_tiocmset(struct tty_struct *tty, ...@@ -213,7 +213,7 @@ int ircomm_tty_tiocmset(struct tty_struct *tty,
{ {
struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data; struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) tty->driver_data;
if (tty->flags & (1 << TTY_IO_ERROR)) if (tty_io_error(tty))
return -EIO; return -EIO;
IRDA_ASSERT(self != NULL, return -1;); IRDA_ASSERT(self != NULL, return -1;);
...@@ -362,7 +362,7 @@ int ircomm_tty_ioctl(struct tty_struct *tty, ...@@ -362,7 +362,7 @@ int ircomm_tty_ioctl(struct tty_struct *tty,
if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) && if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
(cmd != TIOCSERCONFIG) && (cmd != TIOCSERGSTRUCT) && (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGSTRUCT) &&
(cmd != TIOCMIWAIT) && (cmd != TIOCGICOUNT)) { (cmd != TIOCMIWAIT) && (cmd != TIOCGICOUNT)) {
if (tty->flags & (1 << TTY_IO_ERROR)) if (tty_io_error(tty))
return -EIO; return -EIO;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册