diff options
| author | Paolo Abeni <[email protected]> | 2022-09-08 16:34:54 +0000 |
|---|---|---|
| committer | Paolo Abeni <[email protected]> | 2022-09-08 16:38:30 +0000 |
| commit | 9f8f1933dce555d3c246f447f54fca8de8889da9 (patch) | |
| tree | dc447d0174473de8385d47eb8aedc058a336e4a9 /drivers/usb/core/hub.c | |
| parent | net: sparx5: fix function return type to match actual type (diff) | |
| parent | Merge tag 'net-6.0-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/netd... (diff) | |
| download | kernel-9f8f1933dce555d3c246f447f54fca8de8889da9.tar.gz kernel-9f8f1933dce555d3c246f447f54fca8de8889da9.zip | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
drivers/net/ethernet/freescale/fec.h
7d650df99d52 ("net: fec: add pm_qos support on imx6q platform")
40c79ce13b03 ("net: fec: add stop mode support for imx8 platform")
Signed-off-by: Paolo Abeni <[email protected]>
Diffstat (limited to 'drivers/usb/core/hub.c')
| -rw-r--r-- | drivers/usb/core/hub.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 2633acde7ac1..d4b1e70d1498 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -6038,6 +6038,11 @@ re_enumerate: * the reset is over (using their post_reset method). * * Return: The same as for usb_reset_and_verify_device(). + * However, if a reset is already in progress (for instance, if a + * driver doesn't have pre_ or post_reset() callbacks, and while + * being unbound or re-bound during the ongoing reset its disconnect() + * or probe() routine tries to perform a second, nested reset), the + * routine returns -EINPROGRESS. * * Note: * The caller must own the device lock. For example, it's safe to use @@ -6071,6 +6076,10 @@ int usb_reset_device(struct usb_device *udev) return -EISDIR; } + if (udev->reset_in_progress) + return -EINPROGRESS; + udev->reset_in_progress = 1; + port_dev = hub->ports[udev->portnum - 1]; /* @@ -6135,6 +6144,7 @@ int usb_reset_device(struct usb_device *udev) usb_autosuspend_device(udev); memalloc_noio_restore(noio_flag); + udev->reset_in_progress = 0; return ret; } EXPORT_SYMBOL_GPL(usb_reset_device); |
