NACK/Cmnt: [SRU][Noble] Bluetooth: hci_sync: fix HCI_CMD_DRAIN_WORKQUEUE fix
Edoardo Canepa
edoardo.canepa at canonical.com
Wed Sep 23 09:20:52 UTC 2026
Rejected for the following reasons:
The submission is missing a cover letter, the PATCH indication on the
subject,
and even if it proposes a SAUCE patch it should at least have a
reference to upstream
discussion to keep track of the possible code evolution.
On 9/23/26 09:44, Krzysztof Adamski via kernel-team wrote:
> BugLink: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2167919
>
> The commit fd719dc6e35c ("Bluetooth: hci_sync: Set
> HCI_CMD_DRAIN_WORKQUEUE during device close") introduced a regression
> that breaks hci_cmd_timeout(). This was disovered on the Ventuno Q
> platform, where this prevents the QCA2066 Bluetooth card from probing,
> as its initialization relies on a timeout-triggered reset.
>
> The regression was caused by an incorrect rebase of upstream commit
> 47330cc875b3 with the same name. The original change intended to set the
> HCI_CMD_DRAIN_WORKQUEUE flag only during hci_dev_close_sync() and clear
> it before completion. Instead, the flag was mistakenly added to
> hci_dev_open_sync() at rebase.
>
> As a result, command timeout handling was permanently cancelled upon
> device bring-up rather than temporarily during device closure. Fix this
> by moving the flag handling to hci_dev_close_sync().
>
> Signed-off-by: Krzysztof Adamski <krzysztof.adamski at canonical.com>
> ---
> net/bluetooth/hci_sync.c | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
> index 88675037f21f..5f60b95390e2 100644
> --- a/net/bluetooth/hci_sync.c
> +++ b/net/bluetooth/hci_sync.c
> @@ -5049,12 +5049,6 @@ int hci_dev_open_sync(struct hci_dev *hdev)
>
> bt_dev_dbg(hdev, "");
>
> - /* Set HCI_DRAIN_WORKQUEUE flag to prevent queuing work during
> - * reset/close. See hci_cmd_work() and handle_cmd_cnt_and_timer().
> - */
> - hci_dev_set_flag(hdev, HCI_CMD_DRAIN_WORKQUEUE);
> - synchronize_rcu();
> -
> if (hci_dev_test_flag(hdev, HCI_UNREGISTER)) {
> ret = -ENODEV;
> goto done;
> @@ -5206,6 +5200,12 @@ int hci_dev_close_sync(struct hci_dev *hdev)
>
> bt_dev_dbg(hdev, "");
>
> + /* Set HCI_DRAIN_WORKQUEUE flag to prevent queuing work during
> + * reset/close. See hci_cmd_work() and handle_cmd_cnt_and_timer().
> + */
> + hci_dev_set_flag(hdev, HCI_CMD_DRAIN_WORKQUEUE);
> + synchronize_rcu();
> +
> cancel_delayed_work(&hdev->power_off);
> cancel_delayed_work(&hdev->ncmd_timer);
> cancel_delayed_work(&hdev->le_scan_disable);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature.asc
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20260923/07a11fae/attachment.sig>
More information about the kernel-team
mailing list