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;