diff mbox series

Bluetooth: hci_sync: fix LE init stage 3 failure

Message ID 20241118151947.3323927-1-andre.groenewald@streamunlimited.com (mailing list archive)
State New
Headers show
Series Bluetooth: hci_sync: fix LE init stage 3 failure | expand

Checks

Context Check Description
tedd_an/pre-ci_am success Success
tedd_an/SubjectPrefix success Gitlint PASS
tedd_an/BuildKernel success BuildKernel PASS
tedd_an/CheckAllWarning success CheckAllWarning PASS
tedd_an/CheckSparse success CheckSparse PASS
tedd_an/BuildKernel32 success BuildKernel32 PASS
tedd_an/TestRunnerSetup success TestRunnerSetup PASS
tedd_an/TestRunner_l2cap-tester success TestRunner PASS
tedd_an/TestRunner_iso-tester fail TestRunner_iso-tester: WARNING: possible circular locking dependency detected
tedd_an/TestRunner_bnep-tester success TestRunner PASS
tedd_an/TestRunner_mgmt-tester success TestRunner PASS
tedd_an/TestRunner_rfcomm-tester success TestRunner PASS
tedd_an/TestRunner_sco-tester success TestRunner PASS
tedd_an/TestRunner_ioctl-tester success TestRunner PASS
tedd_an/TestRunner_mesh-tester success TestRunner PASS
tedd_an/TestRunner_smp-tester success TestRunner PASS
tedd_an/TestRunner_userchan-tester success TestRunner PASS

Commit Message

André Groenewald Nov. 18, 2024, 3:19 p.m. UTC
A controller may indicate support for the extended advertising feature but
doesn't support the HCI_LE_Read_Number_of_Supported_Advertising_Sets
command, which will cause the initialization to fail.

Signed-off-by: André Groenewald <andre.groenewald@streamunlimited.com>
---
 net/bluetooth/hci_sync.c | 9 +++++++++
 1 file changed, 9 insertions(+)

Comments

Luiz Augusto von Dentz Nov. 18, 2024, 3:28 p.m. UTC | #1
Hi André,

On Mon, Nov 18, 2024 at 10:19 AM André Groenewald
<andre.groenewald@streamunlimited.com> wrote:
>
> A controller may indicate support for the extended advertising feature but
> doesn't support the HCI_LE_Read_Number_of_Supported_Advertising_Sets
> command, which will cause the initialization to fail.

It might be a good idea to mention the model and include the HCI trace
so it is easier for others to find out there is a fix for this
controller.

> Signed-off-by: André Groenewald <andre.groenewald@streamunlimited.com>
> ---
>  net/bluetooth/hci_sync.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
>
> diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
> index c86f4e42e69c..c07be5813113 100644
> --- a/net/bluetooth/hci_sync.c
> +++ b/net/bluetooth/hci_sync.c
> @@ -4416,6 +4416,15 @@ static int hci_le_read_num_support_adv_sets_sync(struct hci_dev *hdev)
>         if (!ext_adv_capable(hdev))
>                 return 0;
>
> +       /* Checking for extended advertising capabilities is not enough; refine
> +        * by checking if the HCI_LE_Read_Number_of_Supported_Advertising_Sets
> +        * command is supported. Since this command is part of the LE init
> +        * stage 3, the initialization will fail whenever the command is not
> +        * supported for devices that indicate extended advertising features.
> +        */
> +       if (!(hdev->commands[36] & 0x80))
> +               return 0;

Is this enough though? How can we figure the number of sets supported?
Or we shall assume it is just 1? Otherwise it might be better to just
revert to using legacy advertising commands instead.

>         return __hci_cmd_sync_status(hdev,
>                                      HCI_OP_LE_READ_NUM_SUPPORTED_ADV_SETS,
>                                      0, NULL, HCI_CMD_TIMEOUT);
> --
> 2.34.1
>
bluez.test.bot@gmail.com Nov. 18, 2024, 3:58 p.m. UTC | #2
This is automated email and please do not reply to this email!

Dear submitter,

Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=910673

---Test result---

Test Summary:
CheckPatch                    PENDING   0.34 seconds
GitLint                       PENDING   0.28 seconds
SubjectPrefix                 PASS      0.06 seconds
BuildKernel                   PASS      25.54 seconds
CheckAllWarning               PASS      27.96 seconds
CheckSparse                   PASS      31.11 seconds
BuildKernel32                 PASS      25.11 seconds
TestRunnerSetup               PASS      447.44 seconds
TestRunner_l2cap-tester       PASS      20.94 seconds
TestRunner_iso-tester         FAIL      35.16 seconds
TestRunner_bnep-tester        PASS      4.95 seconds
TestRunner_mgmt-tester        PASS      120.28 seconds
TestRunner_rfcomm-tester      PASS      7.78 seconds
TestRunner_sco-tester         PASS      11.63 seconds
TestRunner_ioctl-tester       PASS      8.33 seconds
TestRunner_mesh-tester        PASS      7.08 seconds
TestRunner_smp-tester         PASS      7.16 seconds
TestRunner_userchan-tester    PASS      5.10 seconds
IncrementalBuild              PENDING   0.80 seconds

Details
##############################
Test: CheckPatch - PENDING
Desc: Run checkpatch.pl script
Output:

##############################
Test: GitLint - PENDING
Desc: Run gitlint
Output:

##############################
Test: TestRunner_iso-tester - FAIL
Desc: Run iso-tester with test-runner
Output:
WARNING: possible circular locking dependency detected
Total: 124, Passed: 120 (96.8%), Failed: 0, Not Run: 4
##############################
Test: IncrementalBuild - PENDING
Desc: Incremental build with the patches in the series
Output:



---
Regards,
Linux Bluetooth
diff mbox series

Patch

diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
index c86f4e42e69c..c07be5813113 100644
--- a/net/bluetooth/hci_sync.c
+++ b/net/bluetooth/hci_sync.c
@@ -4416,6 +4416,15 @@  static int hci_le_read_num_support_adv_sets_sync(struct hci_dev *hdev)
 	if (!ext_adv_capable(hdev))
 		return 0;
 
+	/* Checking for extended advertising capabilities is not enough; refine
+	 * by checking if the HCI_LE_Read_Number_of_Supported_Advertising_Sets
+	 * command is supported. Since this command is part of the LE init
+	 * stage 3, the initialization will fail whenever the command is not
+	 * supported for devices that indicate extended advertising features.
+	 */
+	if (!(hdev->commands[36] & 0x80))
+		return 0;
+
 	return __hci_cmd_sync_status(hdev,
 				     HCI_OP_LE_READ_NUM_SUPPORTED_ADV_SETS,
 				     0, NULL, HCI_CMD_TIMEOUT);