On 19.1.2024 0.16, Michał Pecio wrote:
My usual set of tests passes:
- no spam on disconnection from NEC
- no stream lockup on random errors on NEC
- no spam on disconnection from VIA
- finish_td called with right frame->status on VIA
(checked by means of extra printks)
+ /* Error mid TD, don't give TD back yet */
+ td->error_mid_td = true;
+ td->urb_length_set = true;
+
+ frame->actual_length = sum_trb_lengths(xhci, ep->ring, ep_trb) +
+ ep_trb_len - remaining;
Not a problem with this patch, but I noticed that every single use of
this function ends up adding ep_trb_len, maybe it could be inclusive.
+ td->urb->actual_length += frame->actual_length;
In your first email you mentioned hosts responding to every single TRB,
perhaps with the same error code repeated each time?
I imagine it could be problematic here if such hosts really exist and
if there are enough TRBs to execute this line twice. A check for the
error_mid_td bit previously set could help, if this is a real risk.
Good point, refactored that code a bit and it now both looks nicer and should
solve this case.
One more patchround
Thanks
Mathias