public inbox for linux-bluetooth@vger.kernel.org
 help / color / mirror / Atom feed
* Bluetooth: btusb: Intel AX211 (8087:0033) permanently lost after suspend/resume
@ 2026-03-20 11:40 Frederik Berg
  2026-03-20 11:44 ` [PATCH] Bluetooth: btusb: cancel pending HCI commands before USB suspend Frederik Berg
  0 siblings, 1 reply; 5+ messages in thread
From: Frederik Berg @ 2026-03-20 11:40 UTC (permalink / raw)
  To: linux-bluetooth

Hi,

I'm hitting an issue where my Intel AX211 Bluetooth controller (USB 
8087:0033) permanently vanishes after suspend/resume. The device 
disappears from lsusb entirely and doesn't come back, even across 
further suspend/resume cycles. Only way to recover without rebooting is 
resetting the xHCI host controller.

I traced this across multiple suspend/resume cycles in the same boot and 
found what looks like a race condition between the PM notifier's HCI 
shutdown and the USB subsystem tearing down the device. I also took a 
look at the btusb source and believe I found the root cause, included as 
a patch in a follow-up.

*Setup:*

  * Lenovo ThinkPad T14 Intel
  * Intel AX211 Bluetooth, USB ID 8087:0033
  * Internal USB port 3-10, xHCI at PCI 0000:00:14.0
  * Firmware: intel/ibt-0040-0041.sfi, version 133-20.25
  * Kernel: 6.17.0-14-generic (Ubuntu)

*What I'm seeing:*

On successful resumes, the HCI power-off command (Write Scan Enable, 
0x0c1a) times out with -ETIMEDOUT. The ACPI reset method then kicks in, 
the device re-enumerates at full-speed, firmware loads, everything works:

|Bluetooth: hci0: command 0x0c1a tx timeout Bluetooth: hci0: Initiating 
acpi reset method Bluetooth: hci0: Opcode 0x0c1a failed: -110 usb 3-10: 
new full-speed USB device using xhci_hcd usb 3-10: New USB device found, 
idVendor=8087, idProduct=0033 Bluetooth: hci0: Found device firmware: 
intel/ibt-0040-0041.sfi Bluetooth: hci0: Firmware loaded in 1602079 usecs |

On the failed resume, the USB subsystem disconnects the device before 
the HCI command can timeout. The error is -ENODEV instead of -ETIMEDOUT:

|usb 3-10: USB disconnect, device number 19 Bluetooth: hci0: Opcode 
0x0c1a failed: -19 Bluetooth: hci0: Error when powering off device on 
rfkill (-19) Bluetooth: hci0: sending frame failed (-19) Bluetooth: 
hci0: HCI reset during shutdown failed usb 3-10: new low-speed USB 
device number 30 using xhci_hcd usb 3-10: Device not responding to setup 
address. usb 3-10: device not accepting address 30, error -71 |

After this, /sys/bus/usb/devices/3-10/ is gone, bluetoothctl says "No 
default controller available", and btusb is loaded with 0 users. rfkill 
block/unblock does nothing since the USB device itself no longer exists.

*What I think is happening in the code:*

hci_cmd_timeout() (hci_core.c:1462) is the only path that calls 
hdev->reset(), which for Intel devices triggers 
btintel_acpi_reset_method() via btusb_intel_reset(). But when the 
pending HCI command is canceled with ENODEV (via 
hci_cmd_sync_cancel_sync in hci_dev_close_sync), hci_cmd_timeout never 
fires, so the ACPI reset that would recover the device is bypassed entirely.

The race exists because the PM notifier (hci_suspend_notifier -> 
hci_suspend_dev) and USB suspend (btusb_suspend) run concurrently with 
no synchronization. Whether the device survives depends on whether the 
HCI command times out before or after the USB subsystem tears things down.

*Recovery* (without reboot):

|echo "0000:00:14.0" > /sys/bus/pci/drivers/xhci_hcd/unbind sleep 3 echo 
"0000:00:14.0" > /sys/bus/pci/drivers/xhci_hcd/bind |

*Reproduction:*

Intermittent, timing-dependent. In my case, the first two suspend/resume 
cycles in a boot succeeded and the third failed. I haven't bisected to a 
specific commit yet.

Thanks,
Frederik Berg



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-03-20 18:48 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-20 11:40 Bluetooth: btusb: Intel AX211 (8087:0033) permanently lost after suspend/resume Frederik Berg
2026-03-20 11:44 ` [PATCH] Bluetooth: btusb: cancel pending HCI commands before USB suspend Frederik Berg
2026-03-20 12:14   ` bluez.test.bot
2026-03-20 18:31   ` [PATCH] " Luiz Augusto von Dentz
2026-03-20 18:48     ` Frederik Berg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox