Re: [PATCH] USB: WUSBCORE: clear RPIPE stall for control endpoints

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2013-08-13 at 11:40 -0500, Thomas Pugliese wrote:
>  static void wa_xfer_result_chew(struct wahc *wa, struct wa_xfer
> *xfer)
>  {
> @@ -1488,17 +1532,38 @@ error_submit_buf_in:
>         seg->result = result;
>         kfree(wa->buf_in_urb->sg);
>  error_sg_alloc:
> +       __wa_xfer_abort(xfer);
>  error_complete:
>         seg->status = WA_SEG_ERROR;
>         xfer->segs_done++;
>         rpipe_ready = rpipe_avail_inc(rpipe);
> -       __wa_xfer_abort(xfer);
>         done = __wa_xfer_is_done(xfer);
> -       spin_unlock_irqrestore(&xfer->lock, flags);
> -       if (done)
> -               wa_xfer_completion(xfer);
> -       if (rpipe_ready)
> -               wa_xfer_delayed_run(rpipe);
> +       /*
> +        * queue work item to clear STALL for control endpoints.
> +        * Otherwise, let endpoint_reset take care of it.
> +        */
> +       if (((usb_status & 0x3f) == WA_XFER_STATUS_HALTED) &&
> +               usb_endpoint_xfer_control(&xfer->ep->desc) &&
> +               done) {
> +               unsigned long flags2;
> +
> +               dev_info(dev, "Control EP stall.  Queue delayed
> work.\n");
> +               spin_lock_irqsave(&wa->xfer_list_lock, flags2);
> +               /* remove xfer from xfer_list. */
> +               list_del(&xfer->list_node);
> +               /* add xfer to xfer_errored_list. */
> +               list_add_tail(&xfer->list_node,
> &wa->xfer_errored_list);
> +               spin_unlock_irqrestore(&wa->xfer_list_lock, flags2);
> +               spin_unlock_irqrestore(&xfer->lock, flags);


Hi,

there is no use in taking irqsave spinlocks in a nested manner.
Just do:

spin_lock_irqsave()
spin_lock()

spin_unlock()
spin_unlock_irqrestore()

	Regards
		Oliver


--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux