Skip to content

Commit

Permalink
[PATCH] Char: mxser_new, reverse if-else-paths patch
Browse files Browse the repository at this point in the history
This patch was intorduced in mxser to 1.9.1 conversion, but causes endless
sleep in tcdrain userspace call.

Thanks to Sergei Organov <osv@javad.com> for testing and pointing this out.

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Jiri Slaby authored and Linus Torvalds committed Dec 8, 2006
1 parent cd7ed64 commit 925e9c1
Showing 1 changed file with 7 additions and 20 deletions.
27 changes: 7 additions & 20 deletions drivers/char/mxser_new.c
Original file line number Diff line number Diff line change
Expand Up @@ -1218,12 +1218,7 @@ static int mxser_write_room(struct tty_struct *tty)
static int mxser_chars_in_buffer(struct tty_struct *tty)
{
struct mxser_port *info = tty->driver_data;
int len = info->xmit_cnt;

if (!(inb(info->ioaddr + UART_LSR) & UART_LSR_THRE))
len++;

return len;
return info->xmit_cnt;
}

static void mxser_flush_buffer(struct tty_struct *tty)
Expand Down Expand Up @@ -1953,7 +1948,7 @@ static void mxser_stoprx(struct tty_struct *tty)
if (info->board->chip_flag) {
info->IER &= ~MOXA_MUST_RECV_ISR;
outb(info->IER, info->ioaddr + UART_IER);
} else if (!(info->flags & ASYNC_CLOSING)) {
} else {
info->x_char = STOP_CHAR(tty);
outb(0, info->ioaddr + UART_IER);
info->IER |= UART_IER_THRI;
Expand Down Expand Up @@ -1990,7 +1985,7 @@ static void mxser_unthrottle(struct tty_struct *tty)
if (info->board->chip_flag) {
info->IER |= MOXA_MUST_RECV_ISR;
outb(info->IER, info->ioaddr + UART_IER);
} else if (!(info->flags & ASYNC_CLOSING)) {
} else {
info->x_char = START_CHAR(tty);
outb(0, info->ioaddr + UART_IER);
info->IER |= UART_IER_THRI;
Expand Down Expand Up @@ -2265,10 +2260,8 @@ static void mxser_receive_chars(struct mxser_port *port, int *status)
flag = TTY_OVERRUN;
/* added by casper 1/11/2000 */
port->icount.overrun++;
} else
flags = TTY_BREAK;
} else
flags = 0;
}
}
tty_insert_flip_char(tty, ch, flag);
cnt++;
if (cnt >= recv_room) {
Expand Down Expand Up @@ -2324,14 +2317,8 @@ static void mxser_transmit_chars(struct mxser_port *port)
if (port->xmit_buf == 0)
goto unlock;

if (port->xmit_cnt == 0) {
if (port->xmit_cnt < WAKEUP_CHARS) { /* XXX what's this for?? */
set_bit(MXSER_EVENT_TXLOW, &port->event);
schedule_work(&port->tqueue);
}
goto unlock;
}
if (port->tty->stopped || (port->tty->hw_stopped &&
if ((port->xmit_cnt <= 0) || port->tty->stopped ||
(port->tty->hw_stopped &&
(port->type != PORT_16550A) &&
(!port->board->chip_flag))) {
port->IER &= ~UART_IER_THRI;
Expand Down

0 comments on commit 925e9c1

Please sign in to comment.