On Fri, Jul 18, 2003 at 09:49:36AM +0200, Oliver Neukum wrote:
> 
> > @@ -116,6 +133,9 @@
> >  
> >     down(&driver->serialize);
> >  
> > +   /* release all urbs for this device */
> > +   nuke_urbs(interface_to_usbdev(intf));
> > +
> >     if (intf->driver && intf->driver->disconnect)
> >             intf->driver->disconnect(intf);
> >  
> > @@ -896,6 +916,9 @@
> 
> It seems to me that if you are going to do this. Locking here
> 
> static void hcd_endpoint_disable (struct usb_device *udev, int endpoint)
> <snip>
>       dev = udev->hcpriv;
>       hcd = udev->bus->hcpriv;
> 
> rescan:
>       /* (re)block new requests, as best we can */
>       if (endpoint & USB_DIR_IN) {
>               usb_endpoint_halt (udev, epnum, 0);
>               udev->epmaxpacketin [epnum] = 0;
>       } else {
>               usb_endpoint_halt (udev, epnum, 1);
>               udev->epmaxpacketout [epnum] = 0;
>       }
> 
>       /* then kill any current requests */
>       spin_lock_irqsave (&hcd_data_lock, flags);
>       list_for_each_entry (urb, &dev->urb_list, urb_list) {
> 
> is insufficient. There is a window between halting the endpoint and adding
> an URB to the list. Putting a synchronize_kernel in between should solve this.
> Comments?

Hm, where is the window?  After the endpoint has been halted, we can't
submit any more urbs, right?

Or have a proposed patch that would show how to fix this?

thanks,

greg k-h


-------------------------------------------------------
This SF.net email is sponsored by: VM Ware
With VMware you can run multiple operating systems on a single machine.
WITHOUT REBOOTING! Mix Linux / Windows / Novell virtual machines at the
same time. Free trial click here: http://www.vmware.com/wl/offer/345/0
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to