From: Olivier Sobrie <olivier@sobrie.be>
To: David Miller <davem@davemloft.net>
Cc: j.dumon@option.com, linux-usb@vger.kernel.org,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/2] hso: fix deadlock when receiving bursts of data
Date: Thu, 10 Jul 2014 16:28:48 +0200 [thread overview]
Message-ID: <20140710142848.GA28056@hposo> (raw)
In-Reply-To: <20140708.161633.2130069042930765600.davem@davemloft.net>
Hi David,
On Tue, Jul 08, 2014 at 04:16:33PM -0700, David Miller wrote:
> From: Olivier Sobrie <olivier@sobrie.be>
> Date: Mon, 7 Jul 2014 11:06:07 +0200
>
> > When the module sends bursts of data, sometimes a deadlock happens in
> > the hso driver when the tty buffer doesn't get the chance to be flushed
> > quickly enough.
> >
> > To avoid this, first, we remove the endless while loop in
> > put_rx_bufdata() which is the root cause of the deadlock.
> > Secondly, when there is no room anymore in the tty buffer, we set up a
> > timer of 100 msecs to give a chance to the upper layer to flush the tty
> > buffer and make room for new data.
> >
> > Signed-off-by: Olivier Sobrie <olivier@sobrie.be>
>
> I agree with the feedback you've been given in that adding a delay
> like this is really not a reasonable solution.
>
> Why is it so difficult to make the event which places the data there
> trigger to necessary calls to pull the data out of the URB transfer
> buffer?
>
> This should be totally and completely event based.
The function put_rxbuf_data() is called from the urb completion handler.
It puts the data of the urb transfer in the tty buffer with
tty_insert_flip_string_flags() and schedules a work queue in order to
push the data to the ldisc.
Problem is that we are in a urb completion handler so we can't wait
until there is room in the tty buffer.
An option I see is: If tty_insert_flip_string_flags() returns 0, start a
workqueue that will insert the remaining data in the tty buffer and then
restart the urb. But I'm not convinced that it is a good solution.
I should miss something...
In put_rxbuf_data(), when tty_insert_flip_string_flags() returns 0, would
it be correct to set the TTY_THROTTLED flag? I assume not...
I'll have a look in other drivers how such cases are handled.
Thanks,
--
Olivier
next prev parent reply other threads:[~2014-07-10 14:29 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-07 9:06 [PATCH 1/2] hso: remove unused workqueue Olivier Sobrie
2014-07-07 9:06 ` [PATCH 2/2] hso: fix deadlock when receiving bursts of data Olivier Sobrie
2014-07-07 9:13 ` David Laight
2014-07-07 10:42 ` Olivier Sobrie
2014-07-07 12:55 ` David Laight
2014-07-07 13:38 ` Olivier Sobrie
2014-07-07 16:41 ` Dan Williams
2014-07-07 18:50 ` Olivier Sobrie
2014-07-08 23:16 ` David Miller
2014-07-10 14:28 ` Olivier Sobrie [this message]
2014-07-10 14:37 ` David Laight
2014-07-10 15:50 ` One Thousand Gnomes
2014-07-10 15:55 ` David Laight
2014-07-10 21:20 ` One Thousand Gnomes
2014-07-11 9:18 ` Olivier Sobrie
2014-07-11 9:28 ` David Laight
2014-07-11 9:28 ` David Laight
2014-07-11 12:05 ` Olivier Sobrie
2014-07-11 13:05 ` [PATCH v2 " Olivier Sobrie
2014-07-11 18:36 ` David Miller
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=20140710142848.GA28056@hposo \
--to=olivier@sobrie.be \
--cc=davem@davemloft.net \
--cc=j.dumon@option.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=netdev@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.