[BUG] xhci: repeated URB cancel on UVC status interrupt EP (0x83) loops for ~15s, stalls camera - Intel Cannon Point-LP [8086:9ded]

Дмитрий <[email protected]> Wed, 05 Aug 2026 22:09:24 +0300
Newsgroups org.kernel.vger.linux-usb
Message-ID <[email protected]>
Hi,

The built-in UVC webcam on an ASUS VivoBook X509FL freezes after a few

rapid stream restart cycles: video hitches for a second at random, then

stalls completely for ~15 s before recovering on its own. ftrace of

xhci-hcd points at a repeated URB-cancel loop on the camera's VideoControl

status interrupt endpoint (0x83), not at the isoc video stream.

This is not application-specific and not a regression. It reproduces with

a plain v4l2-ctl restart loop (no browser/Zoom), and behaves the same on

6.8.11, 6.11.11 and 7.1.3 (Fedora builds); the dmesg event storm is just

more verbose on 6.12+.

Hardware:

- Intel Cannon Point-LP USB 3.1 xHCI Controller [8086:9ded] (rev 30)

- Camera: 13d3:5a11 "USB2.0 VGA UVC WebCam", UVC 1.00

- EP 0x81: isochronous video (VideoStreaming, 8 alt settings, max

alt 7 = 3x1024 B/uframe), appears as "ep 2" in the xhci context

- EP 0x83: interrupt IN (VideoControl status)

- No ALSA device is exposed by the camera; audio is not involved.

Reproducer (no application needed):

# continuous single stream - always stable, 30 fps, never stalls:

timeout 120 v4l2-ctl -d /dev/video0 --stream-mmap --stream-count=3600

# rapid STREAMON/STREAMOFF loop - stalls within a few iterations

# (v4l2-ctl hangs, zero frames), recovers by itself after ~15 s:

for i in $(seq 1 40); do

v4l2-ctl -d /dev/video0 --stream-mmap --stream-count=120

echo "run $i: $?"

done

ftrace (events: xhci-hcd) captured while reproducing. During the stall,

one URB on ep 0x83 is cancelled 68 times over ~14.7 s (t=6119.476 ..

6134.178), each iteration advancing TR Deq Ptr by exactly one TRB (0x10):

xhci_dbg_cancel_urb: Cancel URB 00000000978a08ef, dev 5, ep 0x83, starting at offset 0x1167e9440

xhci_handle_cmd_stop_ep: ...

xhci_dbg_cancel_urb: Removing canceled TD starting at 0x1167e9440 (dma) in stream 0 URB 00000000978a08ef

xhci_dbg_cancel_urb: Set TR Deq ptr 0x1167e9450, cycle 0

xhci_handle_cmd_set_deq_ep: ...

xhci_dbg_cancel_urb: Successful Set TR Deq Ptr cmd, deq = @1167e9450

xhci_dbg_cancel_urb: Cancel URB 00000000978a08ef, dev 5, ep 0x83, starting at offset 0x1167e9450

... (repeats, deq crawling +0x10 each time: 440 -> 450 -> 460 -> ...)

ep 0x81 shows 10 cancels in the same window. Note the trace logs

"in stream 0" for an interrupt endpoint, which has no streams - possibly

relevant.

As a side effect, the isoc video endpoint (0x81 / "ep 2") floods dmesg

during the stall:

xhci_hcd 0000:00:14.0: Event dma 0x... for ep 2 status 13 not part of TD at 0x...

xhci_hcd 0000:00:14.0: Event dma 0x... for ep 2 status 1 not part of TD at 0x...

xhci_hcd 0000:00:14.0: Event TRB for slot 4 ep 2 with no TDs queued

The USB control path is clean: usbmon shows the standard UVC restart

(VS_PROBE/COMMIT SET_CUR/GET_CUR, then SET_INTERFACE alt 7 / alt 0)

completing without any STALL. The device responds correctly; the failure

is on the xHCI cancel/set-deq side.

Attached:

- xhci ftrace (trace-cmd report output), the main exhibit

- usbmon capture (bus 1) across the transition into the stall

- dmesg fragment with the event storm

- lsusb -v -d 13d3:5a11

- lspci -nnvv -s 00:14.0

Happy to test patches, add dynamic debug, or capture more tracing.

Thanks,

Dmitry

Link to files if weren't sent: https://pixeldrain.com/l/iPwNbqVf
cam-trace.txt.xz (application/x-xz, 741.3 KB) - not displayed