lkml.org 
[lkml]   [2004]   [Sep]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectSerial driver hangs
Date
Hi,

my platform is uClinux kernel 2.4.24 with an ARM with PCI and
a 2 port VSCOM 200I PCI card.

I use the serial driver with very high load. With my
application sends and receives on two ports with 921600 baud.

After a while the driver hangs in an endless loop in the
interrupt routine.
As I can see, the bit TTY_DONT_FLIP in tty->flags is set, so
the receive-buffer can't be flipped. In receive_chars() all
ports are checked for received bytes, but if the buffer is
full and can't be flipped, no byte are read from the UART and
the interrupt will never go inactive.

>>>>>>>>>>>>
do {
if (tty->flip.count >= TTY_FLIPBUF_SIZE) {
tty->flip.tqueue.routine((void *) tty);
if (tty->flip.count >= TTY_FLIPBUF_SIZE)
return; // if TTY_DONT_FLIP is set
}
ch = serial_inp(info, UART_RX);
*tty->flip.char_buf_ptr = ch;
icount->rx++;
>>>>>>>>>>>>

I have tried just to read all byte left in the FIFO of the
UART in that case and throw them away.

>>>>>>>>>>>>
if (tty->flip.count >= TTY_FLIPBUF_SIZE)
{
do {
ch = serial_inp(info, UART_RX);
icount->overrun++;
*status = serial_inp(info, UART_LSR);
} while (*status & UART_LSR_DR);
return; // if TTY_DONT_FLIP is set
}
>>>>>>>>>>>>

This is working but would probably not the best way, because
there could be enough place in the other flip buffer. Maybe
it is possible to disable the receive interrupt of the UART
till the receive routine read_chan(), which sets
TTY_DONT_FLIP, releases the buffer.

Thanks for any help,
Roland
--
___________________________________________________

VS Vision Systems GmbH, Industrial Image Processing
Dipl.-Ing. Roland Caßebohm
Aspelohe 27A, D-22848 Norderstedt, Germany
http://www.visionsystems.de
___________________________________________________
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 14:06    [W:0.093 / U:0.056 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site