Loading drivers/usb/core/usb.c +13 −10 Original line number Diff line number Diff line Loading @@ -192,20 +192,23 @@ void usb_driver_release_interface(struct usb_driver *driver, iface->condition = USB_INTERFACE_UNBOUND; mark_quiesced(iface); } struct find_interface_arg { int minor; struct usb_interface *interface; }; static int __find_interface(struct device * dev, void * data) { struct usb_interface ** ret = (struct usb_interface **)data; struct usb_interface * intf = *ret; int *minor = (int *)data; struct find_interface_arg *arg = data; struct usb_interface *intf; /* can't look at usb devices, only interfaces */ if (dev->driver == &usb_generic_driver) return 0; intf = to_usb_interface(dev); if (intf->minor != -1 && intf->minor == *minor) { *ret = intf; if (intf->minor != -1 && intf->minor == arg->minor) { arg->interface = intf; return 1; } return 0; Loading @@ -222,12 +225,12 @@ static int __find_interface(struct device * dev, void * data) */ struct usb_interface *usb_find_interface(struct usb_driver *drv, int minor) { struct usb_interface *intf = (struct usb_interface *)(long)minor; int ret; ret = driver_for_each_device(&drv->driver, NULL, &intf, __find_interface); struct find_interface_arg argb; return ret ? intf : NULL; argb.minor = minor; argb.interface = NULL; driver_for_each_device(&drv->driver, NULL, &argb, __find_interface); return argb.interface; } #ifdef CONFIG_HOTPLUG Loading Loading
drivers/usb/core/usb.c +13 −10 Original line number Diff line number Diff line Loading @@ -192,20 +192,23 @@ void usb_driver_release_interface(struct usb_driver *driver, iface->condition = USB_INTERFACE_UNBOUND; mark_quiesced(iface); } struct find_interface_arg { int minor; struct usb_interface *interface; }; static int __find_interface(struct device * dev, void * data) { struct usb_interface ** ret = (struct usb_interface **)data; struct usb_interface * intf = *ret; int *minor = (int *)data; struct find_interface_arg *arg = data; struct usb_interface *intf; /* can't look at usb devices, only interfaces */ if (dev->driver == &usb_generic_driver) return 0; intf = to_usb_interface(dev); if (intf->minor != -1 && intf->minor == *minor) { *ret = intf; if (intf->minor != -1 && intf->minor == arg->minor) { arg->interface = intf; return 1; } return 0; Loading @@ -222,12 +225,12 @@ static int __find_interface(struct device * dev, void * data) */ struct usb_interface *usb_find_interface(struct usb_driver *drv, int minor) { struct usb_interface *intf = (struct usb_interface *)(long)minor; int ret; ret = driver_for_each_device(&drv->driver, NULL, &intf, __find_interface); struct find_interface_arg argb; return ret ? intf : NULL; argb.minor = minor; argb.interface = NULL; driver_for_each_device(&drv->driver, NULL, &argb, __find_interface); return argb.interface; } #ifdef CONFIG_HOTPLUG Loading