Linux bluetooth development
 help / color / mirror / Atom feed
From: Gustavo Padovan <padovan@profusion.mobi>
To: "Ilia, Kolominsky" <iliak@ti.com>
Cc: Marcel Holtmann <marcel@holtmann.org>,
	"linux-bluetooth@vger.kernel.org"
	<linux-bluetooth@vger.kernel.org>
Subject: Re: BUG: Reordering of L2CAP connection pending/accesspted replies
Date: Tue, 27 Dec 2011 18:32:29 -0200	[thread overview]
Message-ID: <20111227203229.GB13870@joana> (raw)
In-Reply-To: <A7CD2DBA66569F478A0C1ECFC39E1C520A654F6D@DLEE74.ent.ti.com>

Hi Ilia,

* Ilia, Kolominsky <iliak@ti.com> [2011-12-27 11:58:54 +0000]:

> Hi Marcel
>  
> > Hi Ilia,
> > 
> > > > > I have encountered an incorrect behavior of l2cap connection
> > > > > establishment mechanism when handling an incoming connection
> > > > > request:
> > > > >
> > > > > > ACL data: handle 1 flags 0x02 dlen 12
> > > > >     L2CAP(s): Connect req: psm 23 scid 0x0083
> > > > > < ACL data: handle 1 flags 0x00 dlen 16
> > > > >     L2CAP(s): Connect rsp: dcid 0x0040 scid 0x0083 result 0
> > status 0
> > > > >       Connection successful
> > > > > < HCI Command: Exit Sniff Mode (0x02|0x0004) plen 2
> > > > >     handle 1
> > > > > < ACL data: handle 1 flags 0x00 dlen 12
> > > > >     L2CAP(s): Config req: dcid 0x0083 flags 0x00 clen 0
> > > > > > HCI Event: Mode Change (0x14) plen 6
> > > > >     status 0x00 handle 1 mode 0x00 interval 0
> > > > >     Mode: Active
> > > > > < ACL data: handle 1 flags 0x00 dlen 16
> > > > >     L2CAP(s): Connect rsp: dcid 0x0040 scid 0x0083 result 1
> > status 2
> > > > >       Connection pending - Authorization pending
> > > > >
> > > > > After analyzing the code, it seems to me that there is indeed a
> > > > > clear possibility that replies will egress out of order on
> > > > > multicore systems:
> > > > >
> > > > > CPU0 (Tasklet: hci_rx_task)          CPU1 (user process)
> > > >
> > > > Can you check if this also happens after the move to workqueue
> > > > processing?
> > > > The workqueue handling is quite different, then this problem might
> > not
> > > > be
> > > > there anymore.
> > >
> > > Firstly, I think workqueue should only make the matters worse -
> > > since it can be preempted ( unlike tasklets ) this can
> > > happen even on single CPU. ) e.g. resched just before send_resp
> > label).
> > > Secondly, as with any race situations, this bug is difficult to
> > reproduce,
> > > I saw it only a couple of times, thus I call for theoretical
> > analysis.
> > 
> > we are actually using a CPU unbound workqueue where the kernel ensures
> > that only one will be active across the set of CPUs. Both RX and TX are
> > executed from that same workqueue. So the only way this can happen is
> > if
> > one work is scheduled from the other. However since the event
> > processing
> > is now also run from that same workqueue, I fail to see how that could
> > happen.
> 
> I am putting back the original diagram because I feel that it is
> quite relevant to the discussion:
> 
> CPU0 (Tasklet: hci_rx_task)          CPU1 (user process)
> ...                                  sk = sys_accept()
> ...                                    l2cap_sock_accept()
> ...                                    add_wait_queue_exclusive()
> l2cap_connect_req()                  ...
>   result = L2CAP_CR_PEND;            ... 
>   status = L2CAP_CS_AUTHOR_PEND;     ...
>   parent->sk_data_ready(parent, 0)   ...

Move to the workqueue based code and add a call schedule() here, before send
L2CAP_CR_PEND. Let's see if this issue is real.

	Gustavo

  reply	other threads:[~2011-12-27 20:32 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-12-25 20:34 BUG: Reordering of L2CAP connection pending/accesspted replies Ilia, Kolominsky
2011-12-26 12:50 ` Gustavo Padovan
2011-12-26 13:33   ` Ilia, Kolominsky
2011-12-26 19:43     ` Marcel Holtmann
2011-12-27 11:58       ` Ilia, Kolominsky
2011-12-27 20:32         ` Gustavo Padovan [this message]
2011-12-27 11:52 ` Luiz Augusto von Dentz
2011-12-27 12:27   ` Ilia, Kolominsky

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=20111227203229.GB13870@joana \
    --to=padovan@profusion.mobi \
    --cc=iliak@ti.com \
    --cc=linux-bluetooth@vger.kernel.org \
    --cc=marcel@holtmann.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