On Thu, May 03, 2001, Martin Diehl <[EMAIL PROTECTED]> wrote:
> turns out much interrupt work (like ping -f localhost) was a pretty
> reliable trigger for the problem I've seen (uhci failes do IOC after
> some queued bulk processing).
Does this patch fix it? I haven't had the chance to test it myself, but it
compiles atleast.
JE
--- linux-2.4.5-pre1.orig/drivers/usb/uhci.c Wed May 2 12:25:47 2001
+++ linux-2.4.5-pre1/drivers/usb/uhci.c Wed May 2 15:59:52 2001
@@ -578,20 +578,20 @@
/* next URB's TD's already, so we'll take over ownership */
/* of this QH and use it instead. Don't forget to delete */
/* the old QH first */
- uhci_free_qh(uhci, nurbp->qh);
-
- nurbp->qh = urbp->qh;
- nurbp->qh->urbp = nurbp;
- urbp->qh = NULL;
/* If the last TD from the first (this) urb didn't */
/* complete, reset qh->element to the first TD in the */
/* next urb */
pltd = list_entry(urbp->td_list.prev, struct uhci_td, list);
status = uhci_status_bits(pltd->status);
- if ((status & TD_CTRL_ACTIVE) || uhci_actual_length(pltd->status) <
uhci_expected_length(pltd->info)) {
- struct uhci_td *ftd = list_entry(nurbp->td_list.next, struct
uhci_td, list);
- nurbp->qh->element = ftd->dma_handle;
+ if ((status & TD_CTRL_ACTIVE) || uhci_actual_length(pltd->status) <
+uhci_expected_length(pltd->info))
+ uhci_insert_qh(uhci, uhci->skel_hs_control_qh, nurbp->qh);
+ else {
+ uhci_free_qh(uhci, nurbp->qh);
+
+ nurbp->qh = urbp->qh;
+ nurbp->qh->urbp = nurbp;
+ urbp->qh = NULL;
}
nurbp->queued = 0;
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
http://lists.sourceforge.net/lists/listinfo/linux-usb-devel