From: bugzilla-daemon@kernel.org
To: linux-bluetooth@vger.kernel.org
Subject: [Bug 222164] MT7902 Bluetooth: firmware coredump after ~10h uptime, then "subsys reset fail" and permanent USB disconnect
Date: Wed, 21 Oct 2026 04:56:41 +0000 [thread overview]
Message-ID: <bug-222164-62941-IGjCAf8vML@https.bugzilla.kernel.org/> (raw)
In-Reply-To: <bug-222164-62941@https.bugzilla.kernel.org/>
https://bugzilla.kernel.org/show_bug.cgi?id=222164
hongweifei@cyue.net changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|MT7902 Bluetooth: firmware |MT7902 Bluetooth: firmware
|coredump after ~10h uptime, |coredump after ~10h uptime,
|then "subsys reset |then &quot;subsys reset
|fail" and permanent |fail&quot; and
|USB disconnect |permanent USB disconnect
--- Comment #6 from hongweifei@cyue.net ---
I analyzed the captured HCI trace to answer whether the host side triggers
this, and
to separate two questions that the log actually supports differentiating:
(a) what makes the firmware die, and
(b) why the driver cannot bring the controller back afterwards.
## (a) The host is not triggering the firmware crash
From the btmon trace of occurrence #3, the host side was completely quiet for
over
ten minutes before the firmware fell over:
12:30:45.022549 < HCI Command (0x08|0x0042) LE Set Extended Scan Enable
-> Status: Success (0x00)
(last HCI command sent by the host, ever)
12:30:45.02 -> 12:41:16.37 = 10 min 31 s with ZERO host commands
during that same window the firmware kept working normally, sending 19
HCI events of its own (Authentication (0x57), etc.)
12:41:16.374569 firmware starts emitting the Vendor Diagnostic flood
12:41:18.025926 Bluetooth: hci0: Mediatek coredump end
So: no failed command, no error status, no unusual command sequence, no command
flood from the driver. The last thing the driver did was a routine scan-enable
that
returned Success, and then it did nothing at all for 10.5 minutes. The firmware
then
entered an abnormal state on its own and produced ~6878 diagnostic
events/second,
ending in a 41 KB event and a coredump.
Also worth stating explicitly: there is no KASAN, oops, or lockdep output
anywhere
in the kernel log for any of the three occurrences. So this is not memory
corruption
inside the driver either.
## (b) But the recovery failure may still be ours
This is where I think the kernel side could help, even though the crash itself
looks
firmware-side:
The diagnostic flood arrives through the normal HCI event path, so `btmtk` is
processing it while the firmware is dying — including that final 41 KB event,
which
is far larger than any normal HCI event. Two things I would like to understand:
1. **Is `btmtk_process_coredump()` handling a pathological input stream
safely?**
11348 events in 1.65 s, ending in a 41 KB event, with 2372 all-zero payload
fragments mixed in. If the dump path allocates per-event or has any bound
that
assumed sane firmware behaviour, this is exactly the input that would break
it.
2. **Why does `subsys reset` fail, and can recovery be stronger?**
The failure is `Bluetooth: hci0: Can't get device id, subsys reset fail.`
after which the USB device stops answering descriptor reads entirely
(`device descriptor read/64, error -110`) and never comes back.
From the user side I tried and confirmed the following do NOT recover it
(details and the exact commands are in my original report):
USB port re-enumerate, driver reload (`btusb`/`btmtk`), unload-drivers-then-
re-enumerate-then-reload, and finally xHCI controller unbind/bind. For the
last
one, the controller re-bound fine and every other USB device on it (webcam,
storage, keyboard) re-enumerated normally — only the Bluetooth controller
stayed dead. That says the controller is not merely stuck in a bad driver
state.
Question: is there a recovery path that re-downloads the firmware to the
controller over USB after a coredump (like a full re-initialisation rather
than
a subsystem reset)? If the firmware can crash on its own after hours,
"notify
the user, they must reboot" is a poor outcome when the device might be
recoverable by re-uploading firmware. I do not know whether the MT7902
hardware
allows that after this particular failure mode — hence asking rather than
assuming.
## Summary of where the evidence points
- Firmware crash: appears to be firmware-side. Host idle for 10.5 min
beforehand,
firmware answering normally right up to the moment it starts dumping.
- Permanent controller loss afterwards: possibly improvable on the kernel side,
either in coredump handling robustness or in a deeper recovery path than
`subsys reset`.
Happy to collect more targeted data — e.g. ftrace on the btmtk coredump path,
or a
run with the flood piped through while watching allocation behaviour — if that
would
be useful.
--
You may reply to this email to add a comment.
You are receiving this mail because:
You are the assignee for the bug.
prev parent reply other threads:[~2026-10-21 4:56 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-21 1:56 [Bug 222164] New: MT7902 Bluetooth: firmware coredump after ~10h uptime, then "subsys reset fail" and permanent USB disconnect bugzilla-daemon
2026-10-21 1:56 ` [Bug 222164] " bugzilla-daemon
2026-10-21 1:56 ` bugzilla-daemon
2026-10-21 4:50 ` [Bug 222164] MT7902 Bluetooth: firmware coredump after ~10h uptime, then "subsys reset fail" " bugzilla-daemon
2026-10-21 4:51 ` bugzilla-daemon
2026-10-21 4:51 ` bugzilla-daemon
2026-10-21 4:56 ` bugzilla-daemon [this message]
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=bug-222164-62941-IGjCAf8vML@https.bugzilla.kernel.org/ \
--to=bugzilla-daemon@kernel.org \
--cc=linux-bluetooth@vger.kernel.org \
/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