On Wed, Feb 19, 2003, Greg KH <[EMAIL PROTECTED]> wrote: > On Wed, Feb 19, 2003 at 07:57:29PM -0500, Johannes Erdfelt wrote: > > > > > > Heh. No, urbs are referenced counted now. So a driver can do the > > > following just fine: > > > - usb_alloc_urb() > > > - urb data = kmalloc() > > > - usb_submit_urb() > > > - usb_free_urb() > > > > > > Then later in the completion function you free the transfer buffer. > > > When the hcd is done with the urb, the last urb_free_urb() call in the > > > hcd causes the urb to disappear. > > > > > > No worries or overhead in the usb driver to keep track of all of > > > the urbs it created, enabling very simple code. > > > > > > So I guess I do need to add module reference counting to urbs in order > > > to get this case to work properly. I'll look into it... > > > > It seems to me that this is dangerous. > > > > The only way this could work is if some other code (core, HCD) keeps > > track of the URBs and then unlinks them when disconnect processing > > happens. > > You've said that if a device is disconnected, it's urbs will eventually > timeout, right? So everything should be fine, given what I say below...
Actually, not in every case. If the driver was unloaded because the sysadmin wanted it unloaded, then the device could still be present and won't be forced into error by the HC. You'd need to set urb->timeout, but that wouldn't be a good idea for URBs that stay around forever expecting the device to NAK it until data comes in (like the serial drivers do). > > Otherwise, the device could be closed by the application and the driver > > unloaded only to have URBs it allocated still active only to have a > > callback made into an old modules address space. > > Hence the need to prevent such a module from being unloaded until all > urbs "owned" by it are retired. I take it back, the driver needs to unlink them, it can't depend on it happening automagically because of an error. JE ------------------------------------------------------- This SF.net email is sponsored by: SlickEdit Inc. Develop an edge. The most comprehensive and flexible code editor you can use. Code faster. C/C++, C#, Java, HTML, XML, many more. FREE 30-Day Trial. www.slickedit.com/sourceforge _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel