Hi,

On Wednesday 16 May 2007 19:38, Alan Stern wrote:
> On Wed, 16 May 2007, Hans Petter Selasky wrote:
> > On Wednesday 16 May 2007 18:25, Alan Stern wrote:
> > > On Wed, 16 May 2007, Hans Petter Selasky wrote:
> > > > It is very clear to me that non-blocking memory allocation at the
> > > > point of starting an USB transfer will require extra error handling
> > > > in the USB device driver code!
> > >
> > > It's not so clear to me.
> >
> > In my new USB stack, I pass all endpoint and buffer size information
> > to "usbd_transfer_setup()" at attach time:
> >
> > For example:
>
> Irrelevant.  This doesn't affect the need for error handling later on.
>
> > > > My "usbd_transfer_start()" returns "void". Your "usb_submit_urb()"
> > > > returns "int".
> > >
> > > URB submission has other failure possibilities than lack of memory.
> > > Those other things have to be checked for regardless.
> >
> > Yes, but that is because you allow too many parameters in the URB to be
> > changed between USB transfers.
>
> No; it's because unforeseen events can occur.  For example, the device
> may have been unplugged or suspended.

On FreeBSD it will never happen that you call the equivalent 
of "usb_submit_urb()" after that the device has detached! It must be 
something terribly wrong in the Linux USB stack if the callbacks are alive 
after that you have detached a USB device.

Therefore you don't have to check anything when starting or stopping a USB 
transfer on FreeBSD [new stack].

>
> > > > Pre-allocating everything you need simply saves code, hence you only
> > > > check once if you got the memory or not.
> > >
> > > It doesn't save code.  You need to check for the memory when you
> > > allocate it, no matter when that is done.
> >
> > Yes, but it is a difference doing it once at attach or doing it every
> > time you start a transfer.
>
> Above you said it "saves code".  That is wrong.
>
> > > One allocation = one check.
> > > The total code size is the same if you do the allocation early and only
> > > once or if you do it late and many times.
> > >
> > > It does save execution time.  But that's a different matter; it also
> > > wastes data space.
> >
> > Yes, it wastes some memory, but that is just how it is. Get used to it
> > :-)
> >
> > I have some times been thinking that USB endpoint descriptors should have
> > supplied some information on the maximum bandwidth supported, so that the
> > USB devices can allocate appropriate buffers.
>
> The manufacturers would probably get it wrong anyway.

Yes, probably.

--HPS

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
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