On Thu, 2020-09-17 at 13:39 +0300, M. Vefa Bicakci wrote: > On 17/09/2020 13.23, Bastien Nocera wrote: > > On Thu, 2020-09-17 at 12:59 +0300, M. Vefa Bicakci wrote: > > > This commit resolves two minor bugs in the selection/discovery of > > > more > > > specific USB device drivers for devices that are currently bound > > > to > > > generic USB device drivers. > > > > > > The first bug is related to the way a candidate USB device driver > > > is > > > compared against the generic USB device driver. The code in > > > is_dev_usb_generic_driver() used to unconditionally use > > > to_usb_device_driver() on each device driver, without verifying > > > that > > > the device driver in question is a USB device driver (as opposed > > > to a > > > USB interface driver). > > > > You could also return early if is_usb_device() fails in > > __usb_bus_reprobe_drivers(). Each of the interface and the device > > itself is a separate "struct device", and "non-interface" devices > > won't > > have interface devices assigned to them. > > Will do! If I understand you correctly, you mean something like the > following: > > static int __usb_bus_reprobe_drivers(struct device *dev, void *data) > { > struct usb_device_driver *new_udriver = data; > struct usb_device *udev; > int ret; > > /* Proposed addition begins */ > > if (!is_usb_device(dev)) > return 0; > > /* Proposed addition ends */ > > if (!is_dev_usb_generic_driver(dev)) > return 0; Or: if (!is_usb_device(dev) || !is_dev_usb_generic_driver(dev)) return 0;