Received: by 2002:a05:7412:98c1:b0:fa:551:50a7 with SMTP id kc1csp1320811rdb; Sun, 7 Jan 2024 14:20:37 -0800 (PST) X-Google-Smtp-Source: AGHT+IFFG3F7STtmAtP8PnyMhIsziwbnDoJvqeIkjaCr2iL9/9uUs+mw1dEBu2B9NNgdB+0EkH6N X-Received: by 2002:a05:622a:180e:b0:429:8856:948c with SMTP id t14-20020a05622a180e00b004298856948cmr3004717qtc.10.1704666037078; Sun, 07 Jan 2024 14:20:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704666037; cv=none; d=google.com; s=arc-20160816; b=PWkAmjsvYcISQMnos6tZHHiy1yEr5MUy7BZbS4TGHduI9/qiXd6FMSLlgXqjsBznX+ ZKEF+T6VQNvOZGeSJ6Sfg3LoFdu9R8+a5dGANk1g5V20L2moKGuCwiUNmAdyyXYWQ5EF 11gGWew9h4fM4vNpEuEw+giZ3dZwOv3CzTMo+za5P2sEaiXXvjOi6vnjyt2xsYx86d17 jqRE9pjfjZn6jaqV4TaD+nafJc97NxNzFNtl4W7xQ+LUikXS+qDIeKI5ZwgKd7hqwAMq 60rqG9hMNB7DYXPzDFx2KhwXaqleatn5EwDxipUV0abzasLtfqf+/2SskcUo149SRii3 hDWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:date:message-id; bh=3VY0laTFzmMOtdLlpyMcCG33MOeLd2HST95kLDl1VYw=; fh=ejTmNziM7PP6VaYrXzJjZ8S6ziNw4IH2+hp/z/RRgDQ=; b=WfWEZU/BGZ9z/vdu3Pw2UxQEjulbhUDqhzE3AQ6WCjf5OCBI9pmpraA+NtQHiO4cRy oOqiyYWgLw0VJrCFT/xMlymhXp5kywmfFlaK0pP8VOd7RM8NrsfNNzLJr9Yqqxd61z0D /XqNU1OzPDA3e2mZO8gUNwSCjbAGOaAh7QC2YiLj54ZtdhjDWIUKm92qXqeYM8niLRSg 38vLlMCyRBfDCfxh5XDqdAueLcge6sUrGgAr8PrOT2COaPFgCsmwCYxaMi8nvYkRo8Hh 3AxcjMFgwzDZKItBYdVtpWwC+Xh9qA43c5FWWhK+O/90XIcwq2lujNURWUUVECk/+uHt hOBA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-bluetooth+bounces-943-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-bluetooth+bounces-943-linux.lists.archive=gmail.com@vger.kernel.org" Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id s11-20020a05622a178b00b004282e157fdbsi6437354qtk.789.2024.01.07.14.20.36 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 07 Jan 2024 14:20:37 -0800 (PST) Received-SPF: pass (google.com: domain of linux-bluetooth+bounces-943-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-bluetooth+bounces-943-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-bluetooth+bounces-943-linux.lists.archive=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id D262E1C20C49 for ; Sun, 7 Jan 2024 22:20:36 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 3577711CBE; Sun, 7 Jan 2024 22:20:28 +0000 (UTC) X-Original-To: linux-bluetooth@vger.kernel.org Received: from mout-p-101.mailbox.org (mout-p-101.mailbox.org [80.241.56.151]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CA4EE11C80; Sun, 7 Jan 2024 22:20:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=v0yd.nl Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=v0yd.nl Received: from smtp2.mailbox.org (smtp2.mailbox.org [10.196.197.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-101.mailbox.org (Postfix) with ESMTPS id 4T7Wpl2Spqz9sZF; Sun, 7 Jan 2024 23:20:15 +0100 (CET) Message-ID: <9b728113-8bb5-44df-8ba8-b0ee535100c8@v0yd.nl> Date: Sun, 7 Jan 2024 23:20:13 +0100 Precedence: bulk X-Mailing-List: linux-bluetooth@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Subject: Re: [PATCH 3/5] Bluetooth: hci_event: Remove limit of 2 reconnection attempts Content-Language: en-US To: Luiz Augusto von Dentz Cc: Marcel Holtmann , Johan Hedberg , linux-bluetooth@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, verdre@v0yd.nl References: <20240102185933.64179-1-verdre@v0yd.nl> <20240102185933.64179-4-verdre@v0yd.nl> <7036c788-7d8c-4e36-8289-64f43a3f8610@v0yd.nl> From: =?UTF-8?Q?Jonas_Dre=C3=9Fler?= In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi Luiz, On 1/5/24 17:05, Luiz Augusto von Dentz wrote: > Hi Jonas, > > On Fri, Jan 5, 2024 at 10:54 AM Jonas Dreßler wrote: >> >> Hi Luiz, >> >> On 1/3/24 17:05, Luiz Augusto von Dentz wrote: >>> Hi Jonas, >>> >>> On Tue, Jan 2, 2024 at 1:59 PM Jonas Dreßler wrote: >>>> >>>> Since commit 4c67bc74f016b0d360b8573e18969c0ff7926974, we retry connecting >>>> later when we get a "Command Disallowed" error returned by "Create >>>> Connection". >>>> >>>> In this commit the intention was to retry only once, and give up if we see >>>> "Command Disallowed" again on the second try. >>>> >>>> This made sense back then when the retry was initiated *only* from the >>>> "Connect Complete" event. If we received that event, we knew that now the >>>> card now must have a "free slot" for a new connection request again. These >>>> days we call hci_conn_check_pending() from a few more places though, and >>>> in these places we can't really be sure that there's a "free slot" on the >>>> card, so the second try to "Create Connection" might fail again. >>>> >>>> Deal with this by being less strict about these retries and try again >>>> every time we get "Command Disallowed" errors, removing the limitation to >>>> only two attempts. >>>> >>>> Since this can potentially cause us to enter an endless cycle of >>>> reconnection attempts, we'll add some guarding against that with the next >>>> commit. >>> >>> Don't see where you are doing such guarding, besides you seem to >>> assume HCI_ERROR_COMMAND_DISALLOWED would always means the controller >>> is busy, or something like that, but it could perform the connection >>> later, but that may not always be the case, thus why I think >>> reconnecting just a few number of times is better, if you really need >>> to keep retrying then this needs to be controlled by a policy in >>> userspace not hardcoded in the kernel, well I can even argument that >>> perhaps the initial number of reconnection shall be configurable so >>> one don't have to recompile the kernel if that needs changing. >> >> Yes, fair enough, the next commit assumes that COMMAND_DISALLOWED always >> means busy. The guarding is that we stop retrying as soon as there's no >> (competing) ongoing connection attempt nor an active inquiry, which >> should eventually be the case no matter what, no? >> >> I agree it's probably still better to not rely on this fairly complex >> sanity check and keep the checking of attempts nonetheless. >> >> I think we could keep doing that if we check for >> !hci_conn_hash_lookup_state(hdev, ACL_LINK, BT_CONNECT) && >> !test_bit(HCI_INQUIRY, &hdev->flags) in hci_conn_check_pending() before >> we actually retry, to make sure the retry counter doesn't get >> incremented wrongly. I'll give that a try. > > Perhaps I'm missing something, but it should be possible to block > concurrent access to HCI while a command is pending with use of > hci_cmd_sync, at least on LE we do that by waiting the connection > complete event so connection attempts are serialized but we don't seem > to be doing the same for BR/EDR. > That's a good point, it might even allow for a nice little cleanup because we can then cancel inquiries in hci_acl_create_connection() synchronously, too. Question is just whether there's any devices out there that actually do support paging with more than a single device at a time and if we want to support that? > >>> >>>> Signed-off-by: Jonas Dreßler >>>> --- >>>> net/bluetooth/hci_event.c | 7 ++++--- >>>> 1 file changed, 4 insertions(+), 3 deletions(-) >>>> >>>> diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c >>>> index e8b4a0126..e1f5b6f90 100644 >>>> --- a/net/bluetooth/hci_event.c >>>> +++ b/net/bluetooth/hci_event.c >>>> @@ -2323,12 +2323,13 @@ static void hci_cs_create_conn(struct hci_dev *hdev, __u8 status) >>>> >>>> if (status) { >>>> if (conn && conn->state == BT_CONNECT) { >>>> - if (status != HCI_ERROR_COMMAND_DISALLOWED || conn->attempt > 2) { >>>> + if (status == HCI_ERROR_COMMAND_DISALLOWED) { >>>> + conn->state = BT_CONNECT2; >>>> + } else { >>>> conn->state = BT_CLOSED; >>>> hci_connect_cfm(conn, status); >>>> hci_conn_del(conn); >>>> - } else >>>> - conn->state = BT_CONNECT2; >>>> + } >>>> } >>>> } else { >>>> if (!conn) { >>>> -- >>>> 2.43.0 >>>> >>> >>> >> >> Cheers, >> Jonas > > > > -- > Luiz Augusto von Dentz