Hi Alan, thanks for thinking about this.

> You must have had debug set to 1, because your listing did not include the
> skeleton QH's.  That's what's confusing you; the QH at dee6e210 is the
> Terminating QH.

Yup.

> It might be worthwhile examining a dump made immediately after you queue
> the problem-causing URB.  Comparing that with the values after the HC has
> halted might possibly (?) point to the source of the error.

I've tracked it down to the following: the first of two queued urbs completes,
and the HC detects a problem in the following stretch of code in uhci_irq:

        /* Walk the list of pending URB's to see which ones completed */
        spin_lock(&uhci->urb_list_lock);
        head = &uhci->urb_list;
        tmp = head->next;
        while (tmp != head) {
                struct urb_priv *urbp = list_entry(tmp, struct urb_priv, urb_list);
                struct urb *urb = urbp->urb;

                tmp = tmp->next;

                /* Checks the status and does all of the magic necessary */
                uhci_transfer_result(uhci, urb);
        }
        spin_unlock(&uhci->urb_list_lock);

        uhci_finish_completion(hcd, regs);

Interestingly enough, if I put a delay statement before uhci_finish_completion(hcd, 
regs);
then the HC no longer barfs (*).  I guessing that, in this stretch of code, links are 
modified in
the wrong order so that the schedule is momentarily inconsistent; the HC spots it and
flags the error.

Ciao,

Duncan.

(*) I moved the code from uhci_free_pending_qhs(uhci); onwards in uhci_irq into
a tasklet, so as to run it with interrupts on.  Otherwise, putting delay statements
in wouldn't help much in tracking down where in this lot the interrupt occurs!


-------------------------------------------------------
This SF.net email is sponsored by:  Etnus, makers of TotalView, The best
thread debugger on the planet. Designed with thread debugging features
you've never dreamed of, try TotalView 6 free at www.etnus.com.
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to