2005/10/12, Alan Stern <[EMAIL PROTECTED]>:
> On Wed, 12 Oct 2005, Franck wrote:
>
> > > >   A simple fix is to link urb right after
> > > > calling hcd->urb_enqueue. What do you think about this ?
> > >
> > > Not good.  The URB must be linked before the HCD is called.  Your idea
> > > runs the risk of the opposite problem: giving back the URB before it has
> > > been added to the endpoint's list!  (Not with your HCD, but with others.)
> > >
> >
> > OK, so we can link it just before calling HCD enqueue method ?
> > Actually the issue is that we link an URB before it's fully
> > initialized.
>
> That's because the link belongs to usbcore, not to the HCD.  Yes, you
> could move the code that links the URB to just before calling urb_enqueue.
> But then (a) you would have to handle the case of root-hub URBs
> separately, and (b) you would also have to move the code that handles the
> hcd_data_lock spinlock.
>

Does a patch that do this have any chance to be accepted ?

> > > I still think think using the endpoint's URB list in your HCD isn't a good
> > > idea.  That list can be updated at any time by usbcore.  If your HCD
> > > happens to be following the list pointers when that happens, you could
> > > easily get into trouble.  Of course, this will never arise on a UP system
> > > if your HCD runs with interrupts disabled.  But it's a real possibility
> > > (even if low probability) on SMP.
> >
> > Hm, this mean that we need to duplicate information there. IMHO,
> > usbcore should be aware that it shares this list with at least HCD.
> > And once an urb is linked, usbcore or other must use an interface to
> > unlink URB or to modify linked URB.
>
> The problem is that HCDs need to protect their links by locks, and usbcore
> isn't aware of the HCDs' internal locks.  That makes it hard to share the
> list.
>

but HCD is aware of the lock that protects the ep's list.

> Maybe a better idea would be for usbcore not to use the list at all, and
> rely on the HCD to manage it.  However that list is currently the only way
> usbcore has of checking whether or not an URB actually is active.  Maybe
> instead it could simply look to see whether urb->hcpriv is non-NULL.
>

What do you mean by active exactly ? Does it mean linked ? or does it
mean that the HCD _is_ transfering the URB ?

Thanks
--
               Franck


-------------------------------------------------------
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to