Linux Serial subsystem development
 help / color / mirror / Atom feed
From: Philip Oberstaller <Philip.Oberstaller@septentrio.com>
To: linux-serial@vger.kernel.org
Subject: Printf hangs when internal buffer of driver is temporarily full
Date: Mon, 14 Jan 2013 14:11:31 +0100	[thread overview]
Message-ID: <50F40403.9040000@septentrio.com> (raw)

Hi,

I'm writing a driver for the Exar's XR20M1280 SPI-based serial port
using kernel version 3.4.17.

If a string, which is considerably longer than the driver's internal buffer
(512 bytes), is written with printf/fprintf to the dedicated port, then the
function call hangs after the driver's write_room function returns zero,
which happens when the driver's internal buffer is temporarily full.
I would have expected that the TTY layer or the libc implementation of
printf would requery write_room automatically and thus would notice
after a while that there is space again, but this doesn't seem to happen.
Eventually the printf function returns after a very long timeout but without
that the remaining characters have been printed.

I based my code mainly on the ifx6x60-driver and I looked at other similar
drivers as well, but I can't see that they are using a different strategy.

In a dated driver book it was suggested that write_room and write should
always return at least one. I could use busy waiting in the write function
until there is space for at least one character, but I hope that there is
a better solution around?!

Thanks,
Philip

[Please CC me, I'm not on the list]

________________________________

This e-mail communication contains information that is confidential and may also be privileged. It is intended for the exclusive use of the addressees. If you are not the person or organization to whom it is addressed, you must not copy, distribute or take any action in reliance upon it. If you received this communication in error, please notify Septentrio nv immediately [ telephone +32 [0] 16 300800 ]. Septentrio nv will not accept liability for contractual commitments made by individuals employed by this company outside the scope of our business.

             reply	other threads:[~2013-01-14 13:24 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-14 13:11 Philip Oberstaller [this message]
2013-01-14 16:19 ` Printf hangs when internal buffer of driver is temporarily full Greg KH
2013-01-14 19:36 ` Alan Cox
2013-01-15 14:23   ` Philip Oberstaller

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=50F40403.9040000@septentrio.com \
    --to=philip.oberstaller@septentrio.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