[patch v6 3/4] USB: add Cypress c67x00 OTG controller HCD driver
Alan Stern
stern at rowland.harvard.edu
Thu Jan 31 02:19:12 EST 2008
On Wed, 30 Jan 2008, Peter Korsgaard wrote:
> >> +static void c67x00_sched_done(unsigned long __c67x00)
> >> +{
> >> + struct c67x00_hcd *c67x00 = (struct c67x00_hcd *)__c67x00;
> >> + struct c67x00_urb_priv *urbp, *tmp;
> >> + struct urb *urb;
> >> +
> >> + spin_lock(&c67x00->lock);
> >> +
> >> + /* Loop over the done list and give back all the urbs */
> >> + list_for_each_entry_safe(urbp, tmp, &c67x00->done_list, hep_node) {
> >> + urb = urbp->urb;
> >> + c67x00_release_urb(c67x00, urb);
> >> + if (!usb_hcd_check_unlink_urb(c67x00_hcd_to_hcd(c67x00),
> >> + urb, urbp->status)) {
>
> Alan> The function call above is completely wrong. It is meant to be used only
> Alan> from within the dequeue method.
>
> Ahh, so should I just unconditionally do the unlink_urb_from_ep and
> giveback_urb?
Yes, that's right. The check_unlink_urb routine merely verifies that
an unlink is valid. If you're about to giveback an URB then you
already know it's valid to do so.
Alan Stern
More information about the Linuxppc-dev
mailing list