From: Florian Dollinger <dollinger.florian@gmx.de>
To: Andrey Smirnov <andrew.smirnov@gmail.com>,
Marcel Holtmann <marcel@holtmann.org>
Cc: linux-bluetooth@vger.kernel.org,
"Pierre-Loup A . Griffais" <pgriffais@valvesoftware.com>,
Johan Hedberg <johan.hedberg@gmail.com>,
linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [RFC] Bluetooth: Retry configure request if result is L2CAP_CONF_UNKNOWN
Date: Mon, 22 Apr 2019 22:06:22 +0200 [thread overview]
Message-ID: <fcdc7234-627c-dff1-d702-c574c975be54@gmx.de> (raw)
In-Reply-To: <CAHQ1cqHL+CjXhp4TadAQ5fZNbcxpnkNSxC+TaZ=Be_-giP_60A@mail.gmail.com>
I think in essence this is the same as my patch from Jan 2018 here:
https://raw.githubusercontent.com/atar-axis/xpadneo/master/misc/kernel_patches/0001-fix_bluetooth_reconnect.patch
Right? That's maybe why I am in CC :D
If yes, then I can fully confirm that this works as one would expect.
Let me copy&paste my patch description here:
---
The current L2CAP implementation does not change any options if the
other side respons with "unknown options", but does if "unaccepted
options" is the answer. It is up to the implementation to decide on the
effort spent on config negotiations, therefore the current
implementation is correct at this point - but [...] devices like [the]
Xbox One S controller [is] not useable this way.
A workaround for many users therefore is to disable_ertm, since this
is [in this case] the option which is unknown. I would prefer to try it
again with altered options instead of globally disable ERTM.
In result, I suggest the following patch. It simply adds a new case
(L2CAP_CONF_UNKNOWN), which does nothing but falling through to
L2CAP_CONF_UNACCEPT.
---
Cheers,
Florian Dollinger (atar-axis)
On 21.03.19 00:08, Andrey Smirnov wrote:
> On Mon, Feb 18, 2019 at 8:57 PM Andrey Smirnov <andrew.smirnov@gmail.com> wrote:
>>
>> On Mon, Feb 18, 2019 at 4:58 AM Marcel Holtmann <marcel@holtmann.org> wrote:
>>>
>>> Hi Andrey,
>>>
>>>> Due to:
>>>>
>>>> - current implementation of l2cap_config_rsp() dropping BT
>>>> connection if sender of configuration response replied with unknown
>>>> option failure (Result=0x0003/L2CAP_CONF_UNKNOWN)
>>>>
>>>> - current implementation of l2cap_build_conf_req() adding
>>>> L2CAP_CONF_RFC(0x04) option to initial configure request sent by
>>>> the Linux host.
>>>>
>>>> devices that do no recongninze L2CAP_CONF_RFC, such as Xbox One S
>>>> controllers, will get stuck in endless connect -> configure ->
>>>> disconnect loop, never connect and be generaly unusable.
>>>>
>>>> To avoid this problem add code to do the following:
>>>>
>>>> 1. Store a mask of supported conf option types per connection
>>>>
>>>> 2. Parse the body of response L2CAP_CONF_UNKNOWN and adjust
>>>> connection's supported conf option types mask
>>>>
>>>> 3. Retry configuration step the same way it's done for
>>>> L2CAP_CONF_UNACCEPT
>>>>
>>>> Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
>>>> Cc: Pierre-Loup A. Griffais <pgriffais@valvesoftware.com>
>>>> Cc: Florian Dollinger <dollinger.florian@gmx.de>
>>>> Cc: Marcel Holtmann <marcel@holtmann.org>
>>>> Cc: Johan Hedberg <johan.hedberg@gmail.com>
>>>> Cc: linux-bluetooth@vger.kernel.org
>>>> Cc: linux-kernel@vger.kernel.org
>>>> ---
>>>>
>>>> Everyone:
>>>>
>>>> I marked this as an RFC, since I don't have a lot of experience with
>>>> Bluetooth subsystem and don't have hight degree of confidence about
>>>> choices made in this patch. I do, however, thins is is good enough to
>>>> start a discussion about the problem.
>>>
>>> can you take a btmon -w trace.log protocol trace so that I can see where it fails. This seems a really odd behavior of the Xbox controller. We have to be careful in not breaking Bluetooth qualification to just workaround some buggy remote device.
>>>
>>
>> Sure, n/p, both "failure" (behavior before this patch) and "success"
>> (behavior with the patch) cases on my machine are available here:
>>
>> https://gist.github.com/ndreys/2b74094933601978e200af1ff0a55372
>>
>> Let me know if that's not accessible to you.
>>
>
> Marcel, did you have a chance to look at the logs?
>
> Thanks,
> Andrey Smirnov
>
next prev parent reply other threads:[~2019-04-22 20:06 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-08 2:58 Andrey Smirnov
2019-02-18 12:58 ` Marcel Holtmann
2019-02-19 4:57 ` Andrey Smirnov
2019-03-20 23:08 ` Andrey Smirnov
2019-04-22 20:06 ` Florian Dollinger [this message]
2019-04-23 20:08 ` Marcel Holtmann
2019-04-30 1:57 ` Andrey Smirnov
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=fcdc7234-627c-dff1-d702-c574c975be54@gmx.de \
--to=dollinger.florian@gmx.de \
--cc=andrew.smirnov@gmail.com \
--cc=johan.hedberg@gmail.com \
--cc=linux-bluetooth@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marcel@holtmann.org \
--cc=pgriffais@valvesoftware.com \
/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
all inboxes | Powered by JetHome®