Re: r8152: RX stops until rebind after -EPROTO on the bulk-in endpoint

From: Dane Linssen

Date: Mon Nov 02 2026 - 12:18:45 EST


Hi Michal,

Your patch works here for the simplified case. I applied it to
openSUSE's 7.3.0 (offsets only) and tested on a second host with the
same RTL8156B (bcdDevice 31.04) and an Intel xHCI (8086:02ed), 5 Gbps.

Without the fix (stock xhci, r8152 with only your trigger), down /
ethtool / up gave exactly the stall I see on the other host: four
soft resets about 3.5 ms apart, the hard reset at +14 ms, then
Transfer error + Hard-reset at ~270/s, and virt_state 0x40. So the
onset of my real stalls can't be told apart from a desync that starts
at the first error.

With the patch, three rounds of down / ethtool / up all recovered.
Round 1:

15:56:52.892 Transfer error for slot 1 ep 2 on endpoint
(3 more Transfer error + Soft-reset, ~3.5 ms apart)
15:56:52.907 Transfer error for slot 1 ep 2 on endpoint
15:56:52.907 waiting for ep 0x81 clear halt
15:56:52.908 Hard-reset ep 2, slot 1
15:56:52.908 usb_clear_halt(pipe_in): 0

No errors after that, and RX worked: the gateway answered pings and
rx_packets kept rising. usb_clear_halt() returned 0 every time.

The host that stalls on its own hasn't stalled since 10-28. Three
things changed around then: the adapter moved to another USB port,
the kernel went from 7.2.11 to 7.3.0 the day before, and the host now
carries much less traffic. However, a 74 GB copy at ~15 MB/s over the
new port on 10-28 didn't stall it.

Testing your patch on that host needs signed modules, and I can't get
to it for a while.

Thanks,
Dane