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