mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-26 08:31:13 +00:00
[PATCH] usbcore: Don't call device_release_driver recursively
This patch fixes usb_driver_release_interface() to make it avoid calling device_release_driver() recursively, i.e., when invoked from within the disconnect routine for the same device. The patch applies to your "driver" tree. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
c95a6b057b
commit
f409661877
1 changed files with 8 additions and 2 deletions
|
@ -322,9 +322,15 @@ void usb_driver_release_interface(struct usb_driver *driver,
|
||||||
if (!dev->driver || dev->driver != &driver->driver)
|
if (!dev->driver || dev->driver != &driver->driver)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* don't disconnect from disconnect(), or before dev_add() */
|
/* don't release from within disconnect() */
|
||||||
if (!klist_node_attached(&dev->knode_driver) && !klist_node_attached(&dev->knode_bus))
|
if (iface->condition != USB_INTERFACE_BOUND)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* release only after device_add() */
|
||||||
|
if (klist_node_attached(&dev->knode_bus)) {
|
||||||
|
iface->condition = USB_INTERFACE_UNBINDING;
|
||||||
device_release_driver(dev);
|
device_release_driver(dev);
|
||||||
|
}
|
||||||
|
|
||||||
dev->driver = NULL;
|
dev->driver = NULL;
|
||||||
usb_set_intfdata(iface, NULL);
|
usb_set_intfdata(iface, NULL);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue