Re: [PATCH 1/4] uas: new function to cancel data urbs

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

 



>>>> +static void uas_unlink_data_urbs(struct uas_dev_info *devinfo,
>>>> +				 struct uas_cmd_info *cmdinfo)
>>>> +{
>>>> +	unsigned long flags;
>>>> +
>>>> +	spin_lock_irqsave(&devinfo->lock, flags);
>>>> +	if (cmdinfo->state & DATA_IN_URB_INFLIGHT) {
>>>> +		spin_unlock_irqrestore(&devinfo->lock, flags);
>>
>> urb_unlink_urb may call the completion callback which in turn grabs the
>> lock to update cmdinfo->state, so we must drop it to avoid deadlocks.
> 
> But what is the point of taking it at all if the result of the check may be reversed
> when you act upon it?

Good question.  I'm doing all cmdinfo->state access under lock to avoid
races, but I can see how this is kida pointless here.  Guess I can just
call urb_unlink_urb no matter what as the usb core guarantees the
completion handler is called only once.

Is it safe to call urb_unlink_urb twice on the same urb?  Or must I take
care to not do that?

cheers,
  Gerd
--
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