于 2012年12月17日 23:27, Alan Stern 写道:
> On Mon, 17 Dec 2012, Chen Gang wrote:
>
>> 于 2012年12月17日 11:08, Alan Stern 写道:
>>> It is pretty much as I explained in my previous email.
>>>
>>> finish_urb calls usb_free_priv while holding the lock. Then while
>>> still holding the lock, it calls usb_hcd_unlink_urb_from_ep.
>>>
>>> In addition, ohci_urb_dequeue calls usb_hcd_check_unlink_urb while
>>> holding the lock, and does nothing if the return value is nonzero.
>>>
>>> So all you need to do is verify that after usb_hcd_unlink_urb_from_ep
>>> runs, usb_hcd_check_unlink_urb will always return a nonzero value. In
>>> fact, it will return -EIDRM -- until the next time the URB is submitted
>>> and usb_hcd_link_urb_to_ep is called.
>>
>> it is true for ohci_urb_dequeue.
>> how about finish_unlinks and takeback_td in drives/usb/host/ohci-q.c ?
>> (they also can call finish_urb).
>
> Those routines, like almost all the rest of the driver, look at TDs
> that haven't been processed yet and URBs that haven't been completed
> yet. Once a TD is processed, it is freed. Since finish_urb isn't
> called until all the TDs in an URB have been processed, urb->hcpriv
> will be a valid pointer for any URB encountered.
>
> The only places where this isn't true is while an URB is being
> submitted. The submission routines are careful to free all the private
> data structures if the URB is not accepted.
>
> Alan Stern
>
thank you for your reply in details.
:-)
next:
I will write the 2 patches
one for current suggestion.
the other for sprintf suggestion.
time region:
tomorrow, I begin constructing relative environments.
I should try to finish 2 patches within this week (before Mon Dec 24 2012)
excuse me:
I can not give a full test, but I need provide enough unit test, at least.
after finish 2 patches, I will turn back for the details of your reply, again.
welcome any additional suggestions
thanks.
--
Chen Gang
Asianux Corporation
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html