tty: mxser: Remove ASYNC_CLOSING
authorPeter Hurley <peter@hurleysoftware.com>
Sun, 10 Jan 2016 22:51:38 +0000 (14:51 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 28 Jan 2016 22:19:12 +0000 (14:19 -0800)
The tty core no longer provides ASYNC_CLOSING. Use private flag for
same purpose, which is to clear the fifos at each and every interrupt
during driver close(). The driver uses this sledgehammer approach because
its close/shutdown sequence is hopelessly borked.

Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/mxser.c

index e9600cece8daebddbac72f8cafcb55821466e791..9a0791e523b5f5a660de5051b3247397542bd496 100644 (file)
@@ -254,6 +254,7 @@ struct mxser_port {
        int xmit_head;
        int xmit_tail;
        int xmit_cnt;
+       int closing;
 
        struct ktermios normal_termios;
 
@@ -1081,6 +1082,7 @@ static void mxser_close(struct tty_struct *tty, struct file *filp)
                return;
        if (tty_port_close_start(port, tty, filp) == 0)
                return;
+       info->closing = 1;
        mutex_lock(&port->mutex);
        mxser_close_port(port);
        mxser_flush_buffer(tty);
@@ -1091,6 +1093,7 @@ static void mxser_close(struct tty_struct *tty, struct file *filp)
        mxser_shutdown_port(port);
        clear_bit(ASYNCB_INITIALIZED, &port->flags);
        mutex_unlock(&port->mutex);
+       info->closing = 0;
        /* Right now the tty_port set is done outside of the close_end helper
           as we don't yet have everyone using refcounts */     
        tty_port_close_end(port, tty);
@@ -2253,10 +2256,8 @@ static irqreturn_t mxser_interrupt(int irq, void *dev_id)
                                        break;
                                iir &= MOXA_MUST_IIR_MASK;
                                tty = tty_port_tty_get(&port->port);
-                               if (!tty ||
-                                               (port->port.flags & ASYNC_CLOSING) ||
-                                               !(port->port.flags &
-                                                       ASYNC_INITIALIZED)) {
+                               if (!tty || port->closing ||
+                                   !(port->port.flags & ASYNC_INITIALIZED)) {
                                        status = inb(port->ioaddr + UART_LSR);
                                        outb(0x27, port->ioaddr + UART_FCR);
                                        inb(port->ioaddr + UART_MSR);