> @@ -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?
Regards
Oliver
-------------------------------------------------------
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