On Wed, 16 Jul 2003, Charles Lepple wrote:

> > The patch below will log some additional debugging information.  It might
> > help pinpoint where things go wrong during your test.  Unfortunately, it
> > will generate a good deal of output even when things go right.  Try to
> > run just the test that produced the error messages above and post the
> > corresponding part of the kernel log.
> 
> Following David's suggestion, here are the kernel logs for "testusb -t10
> -g3 -c5000" and "testusb -t10 -g4 -c5000". The maximum seems to be 3
> queued requests before the kernel panics, but even -g2 causes messages
> similar to those in the -g3 log.

The information in the -g4 log was helpful.  Here's another patch, which 
is my attempt to fix the bug.  It actually changes two things:

        Unlinked URBs are added to the end of the remove list, not the 
beginning, so their completion routines will be called in the proper 
order.

        Completed URBs have their status set right away, so that attempts 
to unlink them after they have completed will fail instead of messing up 
internal data structures.

Try this patch and run those tests again.  If it still fails, try 
repeating it with both this patch and the diagnostic patch I sent 
yesterday.

Alan Stern


===== uhci-hcd.c 1.53 vs edited =====
--- 1.53/drivers/usb/host/uhci-hcd.c    Wed Jul  2 12:28:41 2003
+++ edited/drivers/usb/host/uhci-hcd.c  Thu Jul 17 12:02:10 2003
@@ -1534,11 +1534,11 @@
                break;
        }
 
-       urbp->status = ret;
-
        if (ret == -EINPROGRESS)
                goto out;
 
+       urbp->status = urb->status = ret;
+
        switch (usb_pipetype(urb->pipe)) {
        case PIPE_CONTROL:
        case PIPE_BULK:
@@ -1657,7 +1657,7 @@
        /* If we're the first, set the next interrupt bit */
        if (list_empty(&uhci->urb_remove_list))
                uhci_set_next_interrupt(uhci);
-       list_add(&urbp->urb_list, &uhci->urb_remove_list);
+       list_add_tail(&urbp->urb_list, &uhci->urb_remove_list);
 
        spin_unlock(&uhci->urb_remove_list_lock);
        spin_unlock_irqrestore(&uhci->urb_list_lock, flags);



-------------------------------------------------------
This SF.net email is sponsored by: VM Ware
With VMware you can run multiple operating systems on a single machine.
WITHOUT REBOOTING! Mix Linux / Windows / Novell virtual machines at the
same time. Free trial click here: http://www.vmware.com/wl/offer/345/0
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to