* [PATCH v6 1/3] USB: Simplify USB ID table match @ 2020-07-27 10:46 Bastien Nocera 2020-07-27 10:46 ` [PATCH v6 2/3] USB: Also check for ->match Bastien Nocera 2020-07-27 10:46 ` [PATCH v6 3/3] USB: Fix device driver race Bastien Nocera 0 siblings, 2 replies; 8+ messages in thread From: Bastien Nocera @ 2020-07-27 10:46 UTC (permalink / raw) To: linux-usb; +Cc: Greg Kroah-Hartman, Alan Stern, Bastien Nocera usb_device_match_id() supports being passed NULL tables, so no need to check for it. Signed-off-by: Bastien Nocera <hadess@hadess.net> --- - No changes since previous version drivers/usb/core/generic.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/usb/core/generic.c b/drivers/usb/core/generic.c index 4626227a6dd2..b6f2d4b44754 100644 --- a/drivers/usb/core/generic.c +++ b/drivers/usb/core/generic.c @@ -205,8 +205,6 @@ static int __check_usb_generic(struct device_driver *drv, void *data) udrv = to_usb_device_driver(drv); if (udrv == &usb_generic_driver) return 0; - if (!udrv->id_table) - return 0; return usb_device_match_id(udev, udrv->id_table) != NULL; } -- 2.26.2 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v6 2/3] USB: Also check for ->match 2020-07-27 10:46 [PATCH v6 1/3] USB: Simplify USB ID table match Bastien Nocera @ 2020-07-27 10:46 ` Bastien Nocera 2020-07-27 10:46 ` [PATCH v6 3/3] USB: Fix device driver race Bastien Nocera 1 sibling, 0 replies; 8+ messages in thread From: Bastien Nocera @ 2020-07-27 10:46 UTC (permalink / raw) To: linux-usb; +Cc: Greg Kroah-Hartman, Alan Stern, Bastien Nocera We only ever used the ID table matching before, but we should probably also support an open-coded match function. Fixes: 88b7381a939de ("USB: Select better matching USB drivers when available") Signed-off-by: Bastien Nocera <hadess@hadess.net> --- Changes since first version: - Fixed typo in commit message drivers/usb/core/generic.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/usb/core/generic.c b/drivers/usb/core/generic.c index b6f2d4b44754..2b2f1ab6e36a 100644 --- a/drivers/usb/core/generic.c +++ b/drivers/usb/core/generic.c @@ -205,8 +205,9 @@ static int __check_usb_generic(struct device_driver *drv, void *data) udrv = to_usb_device_driver(drv); if (udrv == &usb_generic_driver) return 0; - - return usb_device_match_id(udev, udrv->id_table) != NULL; + if (usb_device_match_id(udev, udrv->id_table) != NULL) + return 1; + return (udrv->match && udrv->match(udev)); } static bool usb_generic_driver_match(struct usb_device *udev) -- 2.26.2 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v6 3/3] USB: Fix device driver race 2020-07-27 10:46 [PATCH v6 1/3] USB: Simplify USB ID table match Bastien Nocera 2020-07-27 10:46 ` [PATCH v6 2/3] USB: Also check for ->match Bastien Nocera @ 2020-07-27 10:46 ` Bastien Nocera 2020-08-03 15:04 ` Bastien Nocera 1 sibling, 1 reply; 8+ messages in thread From: Bastien Nocera @ 2020-07-27 10:46 UTC (permalink / raw) To: linux-usb; +Cc: Greg Kroah-Hartman, Alan Stern, Bastien Nocera When a new device with a specialised device driver is plugged in, the new driver will be modprobe()'d but the driver core will attach the "generic" driver to the device. After that, nothing will trigger a reprobe when the modprobe()'d device driver has finished initialising, as the device has the "generic" driver attached to it. Trigger a reprobe ourselves when new specialised drivers get registered. Fixes: 88b7381a939d ("USB: Select better matching USB drivers when available") Signed-off-by: Bastien Nocera <hadess@hadess.net> --- Changes since v5: - Throw error when device_reprobe() fails Changes since v4: - Add commit subject to "fixes" section - Clarify conditional that checks for generic driver - Remove check duplicated inside the loop Changes since v3: - Only reprobe devices that could use the new driver - Many code fixes Changes since v2: - Fix formatting Changes since v1: - Simplified after Alan Stern's comments and some clarifications from Benjamin Tissoires. drivers/usb/core/driver.c | 40 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c index f81606c6a35b..7e73e989645b 100644 --- a/drivers/usb/core/driver.c +++ b/drivers/usb/core/driver.c @@ -905,6 +905,35 @@ static int usb_uevent(struct device *dev, struct kobj_uevent_env *env) return 0; } +static bool is_dev_usb_generic_driver(struct device *dev) +{ + struct usb_device_driver *udd = dev->driver ? + to_usb_device_driver(dev->driver) : NULL; + + return udd == &usb_generic_driver; +} + +static int __usb_bus_reprobe_drivers(struct device *dev, void *data) +{ + struct usb_device_driver *new_udriver = data; + struct usb_device *udev; + int ret; + + if (!is_dev_usb_generic_driver(dev)) + return 0; + + udev = to_usb_device(dev); + if (usb_device_match_id(udev, new_udriver->id_table) == NULL && + (!new_udriver->match || new_udriver->match(udev) != 0)) + return 0; + + ret = device_reprobe(dev); + if (ret && ret != -EPROBE_DEFER) + dev_err(dev, "Failed to reprobe device (error %d)\n", ret); + + return 0; +} + /** * usb_register_device_driver - register a USB device (not interface) driver * @new_udriver: USB operations for the device driver @@ -934,13 +963,20 @@ int usb_register_device_driver(struct usb_device_driver *new_udriver, retval = driver_register(&new_udriver->drvwrap.driver); - if (!retval) + if (!retval) { pr_info("%s: registered new device driver %s\n", usbcore_name, new_udriver->name); - else + /* + * Check whether any device could be better served with + * this new driver + */ + bus_for_each_dev(&usb_bus_type, NULL, new_udriver, + __usb_bus_reprobe_drivers); + } else { printk(KERN_ERR "%s: error %d registering device " " driver %s\n", usbcore_name, retval, new_udriver->name); + } return retval; } -- 2.26.2 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v6 3/3] USB: Fix device driver race 2020-07-27 10:46 ` [PATCH v6 3/3] USB: Fix device driver race Bastien Nocera @ 2020-08-03 15:04 ` Bastien Nocera 2020-08-03 15:38 ` Greg Kroah-Hartman 2020-08-03 16:02 ` Alan Stern 0 siblings, 2 replies; 8+ messages in thread From: Bastien Nocera @ 2020-08-03 15:04 UTC (permalink / raw) To: linux-usb; +Cc: Greg Kroah-Hartman, Alan Stern On Mon, 2020-07-27 at 12:46 +0200, Bastien Nocera wrote: > When a new device with a specialised device driver is plugged in, the > new driver will be modprobe()'d but the driver core will attach the > "generic" driver to the device. > > After that, nothing will trigger a reprobe when the modprobe()'d > device > driver has finished initialising, as the device has the "generic" > driver attached to it. > > Trigger a reprobe ourselves when new specialised drivers get > registered. > > Fixes: 88b7381a939d ("USB: Select better matching USB drivers when > available") > Signed-off-by: Bastien Nocera <hadess@hadess.net> Greg, Alan, are you happy with this iteration? If so, I can send it again with Alan's acks, along with a fix for the function name Alan mentioned. I see that the first patch in the list landed in usb-next already. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v6 3/3] USB: Fix device driver race 2020-08-03 15:04 ` Bastien Nocera @ 2020-08-03 15:38 ` Greg Kroah-Hartman 2020-08-04 11:41 ` Bastien Nocera 2020-08-03 16:02 ` Alan Stern 1 sibling, 1 reply; 8+ messages in thread From: Greg Kroah-Hartman @ 2020-08-03 15:38 UTC (permalink / raw) To: Bastien Nocera; +Cc: linux-usb, Alan Stern On Mon, Aug 03, 2020 at 05:04:46PM +0200, Bastien Nocera wrote: > On Mon, 2020-07-27 at 12:46 +0200, Bastien Nocera wrote: > > When a new device with a specialised device driver is plugged in, the > > new driver will be modprobe()'d but the driver core will attach the > > "generic" driver to the device. > > > > After that, nothing will trigger a reprobe when the modprobe()'d > > device > > driver has finished initialising, as the device has the "generic" > > driver attached to it. > > > > Trigger a reprobe ourselves when new specialised drivers get > > registered. > > > > Fixes: 88b7381a939d ("USB: Select better matching USB drivers when > > available") > > Signed-off-by: Bastien Nocera <hadess@hadess.net> > > Greg, Alan, are you happy with this iteration? > > If so, I can send it again with Alan's acks, along with a fix for the > function name Alan mentioned. I see that the first patch in the list > landed in usb-next already. > Yes, please resend the remaining patches. I don't recall seeing Alan's ack on it. thanks, greg k-h ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v6 3/3] USB: Fix device driver race 2020-08-03 15:38 ` Greg Kroah-Hartman @ 2020-08-04 11:41 ` Bastien Nocera 2020-08-04 11:56 ` Greg Kroah-Hartman 0 siblings, 1 reply; 8+ messages in thread From: Bastien Nocera @ 2020-08-04 11:41 UTC (permalink / raw) To: Greg Kroah-Hartman; +Cc: linux-usb, Alan Stern On Mon, 2020-08-03 at 17:38 +0200, Greg Kroah-Hartman wrote: > On Mon, Aug 03, 2020 at 05:04:46PM +0200, Bastien Nocera wrote: > > On Mon, 2020-07-27 at 12:46 +0200, Bastien Nocera wrote: > > > When a new device with a specialised device driver is plugged in, > > > the > > > new driver will be modprobe()'d but the driver core will attach > > > the > > > "generic" driver to the device. > > > > > > After that, nothing will trigger a reprobe when the modprobe()'d > > > device > > > driver has finished initialising, as the device has the "generic" > > > driver attached to it. > > > > > > Trigger a reprobe ourselves when new specialised drivers get > > > registered. > > > > > > Fixes: 88b7381a939d ("USB: Select better matching USB drivers > > > when > > > available") > > > Signed-off-by: Bastien Nocera <hadess@hadess.net> > > > > Greg, Alan, are you happy with this iteration? > > > > If so, I can send it again with Alan's acks, along with a fix for > > the > > function name Alan mentioned. I see that the first patch in the > > list > > landed in usb-next already. > > > > Yes, please resend the remaining patches. I don't recall seeing > Alan's > ack on it. Resent as v7. There's a new patch in the lot, based on a comment by Alan in this thread which I thought appropriate to include. Cheers ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v6 3/3] USB: Fix device driver race 2020-08-04 11:41 ` Bastien Nocera @ 2020-08-04 11:56 ` Greg Kroah-Hartman 0 siblings, 0 replies; 8+ messages in thread From: Greg Kroah-Hartman @ 2020-08-04 11:56 UTC (permalink / raw) To: Bastien Nocera; +Cc: linux-usb, Alan Stern On Tue, Aug 04, 2020 at 01:41:25PM +0200, Bastien Nocera wrote: > On Mon, 2020-08-03 at 17:38 +0200, Greg Kroah-Hartman wrote: > > On Mon, Aug 03, 2020 at 05:04:46PM +0200, Bastien Nocera wrote: > > > On Mon, 2020-07-27 at 12:46 +0200, Bastien Nocera wrote: > > > > When a new device with a specialised device driver is plugged in, > > > > the > > > > new driver will be modprobe()'d but the driver core will attach > > > > the > > > > "generic" driver to the device. > > > > > > > > After that, nothing will trigger a reprobe when the modprobe()'d > > > > device > > > > driver has finished initialising, as the device has the "generic" > > > > driver attached to it. > > > > > > > > Trigger a reprobe ourselves when new specialised drivers get > > > > registered. > > > > > > > > Fixes: 88b7381a939d ("USB: Select better matching USB drivers > > > > when > > > > available") > > > > Signed-off-by: Bastien Nocera <hadess@hadess.net> > > > > > > Greg, Alan, are you happy with this iteration? > > > > > > If so, I can send it again with Alan's acks, along with a fix for > > > the > > > function name Alan mentioned. I see that the first patch in the > > > list > > > landed in usb-next already. > > > > > > > Yes, please resend the remaining patches. I don't recall seeing > > Alan's > > ack on it. > > Resent as v7. There's a new patch in the lot, based on a comment by > Alan in this thread which I thought appropriate to include. Thanks, will look at them once 5.9-rc1 is out as I can't do anything with my tree until then. greg k-h ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v6 3/3] USB: Fix device driver race 2020-08-03 15:04 ` Bastien Nocera 2020-08-03 15:38 ` Greg Kroah-Hartman @ 2020-08-03 16:02 ` Alan Stern 1 sibling, 0 replies; 8+ messages in thread From: Alan Stern @ 2020-08-03 16:02 UTC (permalink / raw) To: Bastien Nocera; +Cc: linux-usb, Greg Kroah-Hartman On Mon, Aug 03, 2020 at 05:04:46PM +0200, Bastien Nocera wrote: > On Mon, 2020-07-27 at 12:46 +0200, Bastien Nocera wrote: > > When a new device with a specialised device driver is plugged in, the > > new driver will be modprobe()'d but the driver core will attach the > > "generic" driver to the device. > > > > After that, nothing will trigger a reprobe when the modprobe()'d > > device > > driver has finished initialising, as the device has the "generic" > > driver attached to it. > > > > Trigger a reprobe ourselves when new specialised drivers get > > registered. > > > > Fixes: 88b7381a939d ("USB: Select better matching USB drivers when > > available") > > Signed-off-by: Bastien Nocera <hadess@hadess.net> > > Greg, Alan, are you happy with this iteration? > > If so, I can send it again with Alan's acks, along with a fix for the > function name Alan mentioned. I see that the first patch in the list > landed in usb-next already. This is almost the same as v5, which I already Acked. The only difference is the error logging when the reprobe fails, and that looks fine. So... Acked-by: Alan Stern <stern@rowland.harvard.edu> Alan Stern ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2020-08-04 11:59 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-07-27 10:46 [PATCH v6 1/3] USB: Simplify USB ID table match Bastien Nocera 2020-07-27 10:46 ` [PATCH v6 2/3] USB: Also check for ->match Bastien Nocera 2020-07-27 10:46 ` [PATCH v6 3/3] USB: Fix device driver race Bastien Nocera 2020-08-03 15:04 ` Bastien Nocera 2020-08-03 15:38 ` Greg Kroah-Hartman 2020-08-04 11:41 ` Bastien Nocera 2020-08-04 11:56 ` Greg Kroah-Hartman 2020-08-03 16:02 ` Alan Stern
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).