summaryrefslogtreecommitdiff
path: root/examples/host/libusb_api/src
diff options
context:
space:
mode:
authorhathach <[email protected]>2026-08-14 01:08:50 +0700
committerhathach <[email protected]>2026-08-18 12:19:09 +0700
commitf822f69a9871b2115c5213889d70411da66ca1b1 (patch)
treee8d1ddba4dbed71112af7f216aa2e677321a8c1c /examples/host/libusb_api/src
parent3963a1b70a572132aced1c1a0033e1c8249a0c7e (diff)
skills, docs: rewrite USB recovery from the live incidents
Two things the rig taught us that the old guidance got wrong. A usbfs ioctl wedged in D state cannot be freed on a running kernel. It holds the device lock, so usb_disconnect() blocks behind it; reboot(2) walks device_shutdown() and takes the same lock, so every userspace reboot stalls too. Only sysrq b (emergency_restart, which skips device_shutdown) or hypervisor action clears it -- all cited to the kernel source. The recovery ladder is generic across rigs now (ci.lan, hifiphile, a bench PC) and ends at hypervisor escalation only where host access exists. Two claims are corrected outright: JLinkExe is NOT convoy-safe, and a park-flash cannot free a device-lock owner. The hil skill's banner list is what an operator agent matches a report against, so it enumerates the banners that actually exist, including the D-state note -- which is explicitly NOT a wedge, since a healthy in-flight testusb is uninterruptible for most of every case and a concurrent CI battery would otherwise turn a clean run red.
Diffstat (limited to 'examples/host/libusb_api/src')
0 files changed, 0 insertions, 0 deletions