Open chelmuth opened 9 months ago
The error happened last 2024-05-06 in the CI, but I could not spot any relevant source-code change since then. I'll keep an eye on it.
It seems to be a race/corruption manifesting in drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c:1083.
1071 static void dwc_otg_hcd_clear_tt_buffer_complete(struct usb_hcd *hcd,
1072 struct usb_host_endpoint *ep)
1073 {
1074 dwc_otg_hcd_t *dwc_hcd = hcd_to_dwc_otg_hcd(hcd);
1075 dwc_otg_qh_t *qh;
1076 unsigned long flags;
1077
1078 qh = ep->hcpriv;
1079 if (!qh)
1080 return;
1081
1082 DWC_SPINLOCK_IRQSAVE(dwc_hcd->lock, &flags);
-> 1083 qh->tt_buffer_dirty = 0;
1084
1085 if (dwc_hcd->flags.b.port_connect_status)
1086 dwc_otg_hcd_queue_transactions(dwc_hcd, DWC_OTG_TRANSACTION_ALL);
1087
1088 DWC_SPINUNLOCK_IRQRESTORE(dwc_hcd->lock, flags);
1089 }
As discovered in #4958, the test above fails on rpi like follows.
Note, it may take quite a lot of unplug-plug cycles to reproduce (hinted by usb-device index 63).