On Fri, 28 Dec 2007, Grant Likely wrote:

> From: Grant Likely <[EMAIL PROTECTED]>
> 
> This patch adds HDC support for the Cypress c67x00 family of devices.

One minor correction:

> +static void c67x00_sched_done(unsigned long __c67x00)
> +{
> +     struct c67x00_hcd *c67x00 = (struct c67x00_hcd *)__c67x00;
> +     struct c67x00_urb_priv *urbp, *tmp;
> +     struct usb_hcd *hcd = c67x00_hcd_to_hcd(c67x00);
> +     struct urb *urb;
> +     int status;
> +     unsigned long flags;
> +
> +     spin_lock_irqsave(&c67x00->lock, flags);
> +
> +     /* 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;
> +             status = urbp->status;
> +
> +             c67x00_release_urb(c67x00, urb);
> +
> +             usb_hcd_unlink_urb_from_ep(hcd, urb);
> +
> +             spin_unlock_irqrestore(&c67x00->lock, flags);
> +             usb_hcd_giveback_urb(hcd, urb, status);
> +             spin_lock_irqsave(&c67x00->lock, flags);

The giveback routine is supposed to be called with interrupts disabled.  
Consequently you should use spin_unlock() and spin_lock() here, not the 
_irqsave/_irqrestore variants.

> +     }
> +     spin_unlock_irqrestore(&c67x00->lock, flags);
> +}

Alan Stern

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Reply via email to