linux-serial.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Albrecht Dreß" <albrecht.dress@arcor.de>
To: Greg KH <greg@kroah.com>, linux-serial@vger.kernel.org
Subject: Re: [PPC/MPC5200B] strange data loss on uart reception
Date: Mon, 01 Nov 2010 15:41:53 +0100	[thread overview]
Message-ID: <1288622520.1807.0@antares> (raw)
In-Reply-To: <20101101031003.GA2903@kroah.com> (from greg@kroah.com on Mon Nov  1 04:10:03 2010)

[-- Attachment #1: Type: text/plain, Size: 2647 bytes --]

Am 01.11.10 04:10 schrieb(en) Greg KH:
> On Sun, Oct 31, 2010 at 06:27:00PM +0100, Albrecht Dre? wrote:
>> Am I simply too dumb to use the uart correctly, or is there some issue in the kernel causing this effect?  I noticed that the function mpc52xx_uart_int_rx_chars() does not check the return value of tty_insert_flip_char().  If the system runs out of space (actually, the maximum buffer size used should be limited, in particular on embedded systems!), might this go undetected?  This might explain the bigger "chunks", as the '5200's uart has a rather big fifo (512 bytes).
> 
> That might help, have you tried changing this and seeing if it fixes anything?

Hmmm, apparently it's not possible to disable the fifo completely in this chip if I interpret the manual correctly.  I played with the fifo alarm levels (the number of space left in the fifo to immediately trigger an irq), though, and it doesn't change anything.

> Also, are you sure your userspace application is checking the return value of write() to verify that it really wrote everything it thought it did?

The UART is connected to a ftdi usb/rs232 converter, and I write data using USB functions into the ftdi, which in turn sends them into the 5200's uart at 3 MBaud (yes, the wires are *very* short, and the uart doesn't see any framing or parity errors... ;-).  And I am pretty sure the uart's rx register sees the correct number of bytes, as the TIOCGICOUNT ioctl reports exactly the number of bytes I sent.  The rx counter is updated in the isr mpc52xx_uart_int_rx_chars() which reads data from the fifo, btw.

However, in this function I added a printk when tty_insert_flip_char() returns 0, and actually this happens when more than 64kb are sent quickly!  Reading through the code, the following seems to happen:
- tty_insert_flip_char() detects that the struct tty_buffer is full and calls tty_insert_flip_string_flags()
- tty_insert_flip_string_flags() calls tty_buffer_request_room()
- tty_buffer_request_room() calls tty_buffer_find()
- tty_buffer_find() calls tty_buffer_alloc() if no free buffer is found
- tty_buffer_alloc() contains at the very beginning

         if (tty->buf.memory_used + size > 65536)
                 return NULL;

I didn't add more debug output here, but for me it looks as if the kernel simply rejects buffering more than 64kByte.  Could this be the correct interpretation of the path outlined above?  If this is the case, then IMHO there is a serious problem, as data can be lost completely undetected, at least in any uart driver which ignores the return value of tty_insert_flip_char()!

Thanks,
Albrecht.

[-- Attachment #2: Type: application/pgp-signature, Size: 190 bytes --]

  reply	other threads:[~2010-11-01 14:42 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-31 17:27 [PPC/MPC5200B] strange data loss on uart reception Albrecht Dreß
2010-11-01  3:10 ` Greg KH
2010-11-01 14:41   ` Albrecht Dreß [this message]
2010-11-02 18:06     ` Albrecht Dreß
2010-11-03  4:02       ` Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1288622520.1807.0@antares \
    --to=albrecht.dress@arcor.de \
    --cc=greg@kroah.com \
    --cc=linux-serial@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).