提交 f4096618 编写于 作者: A Alan Stern 提交者: Greg Kroah-Hartman

[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: NAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
上级 c95a6b05
......@@ -322,9 +322,15 @@ void usb_driver_release_interface(struct usb_driver *driver,
if (!dev->driver || dev->driver != &driver->driver)
return;
/* don't disconnect from disconnect(), or before dev_add() */
if (!klist_node_attached(&dev->knode_driver) && !klist_node_attached(&dev->knode_bus))
/* don't release from within disconnect() */
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);
}
dev->driver = NULL;
usb_set_intfdata(iface, NULL);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册