Serial driver hangs
From: Roland Caßebohm (roland.cassebohm_at_VisionSystems.de)
Date: 09/28/04
- Previous message: Roland Dreier: "Re: [PATCH][1/2] [RESEND] kobject: add HOTPLUG_ENV_VAR"
- Next in thread: Paul Fulghum: "Re: Serial driver hangs"
- Reply: Paul Fulghum: "Re: Serial driver hangs"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
To: linux-kernel@vger.kernel.org Date: Tue, 28 Sep 2004 17:34:38 +0200
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/
- Previous message: Roland Dreier: "Re: [PATCH][1/2] [RESEND] kobject: add HOTPLUG_ENV_VAR"
- Next in thread: Paul Fulghum: "Re: Serial driver hangs"
- Reply: Paul Fulghum: "Re: Serial driver hangs"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Relevant Pages
|