linux/drivers/usb/core
Alan Stern 59f0103d74 USB: unbind all interfaces before rebinding any
commit 6aec044cc2 upstream.

When a driver doesn't have pre_reset, post_reset, or reset_resume
methods, the USB core unbinds that driver when its device undergoes a
reset or a reset-resume, and then rebinds it afterward.

The existing straightforward implementation can lead to problems,
because each interface gets unbound and rebound before the next
interface is handled.  If a driver claims additional interfaces, the
claim may fail because the old binding instance may still own the
additional interface when the new instance tries to claim it.

This patch fixes the problem by first unbinding all the interfaces
that are marked (i.e., their needs_binding flag is set) and then
rebinding all of them.

The patch also makes the helper functions in driver.c a little more
uniform and adjusts some out-of-date comments.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Reported-and-tested-by: "Poulain, Loic" <loic.poulain@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2014-05-06 07:55:32 -07:00
..
buffer.c
config.c usb: Make DELAY_INIT quirk wait 100ms between Get Configuration requests 2014-03-23 21:38:15 -07:00
devices.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2013-02-26 20:16:07 -08:00
devio.c usb/core/devio.c: Don't reject control message to endpoint with wrong direction bit 2013-10-05 07:13:11 -07:00
driver.c USB: unbind all interfaces before rebinding any 2014-05-06 07:55:32 -07:00
endpoint.c usb/endpoint: Set release callback in the struct device_type instead of in the device itself directly 2012-08-20 14:38:08 -07:00
file.c USB: rename the usb misc class from "usb" to "usbmisc" 2012-06-13 15:37:13 -07:00
generic.c USB: avoid error messages when a device is disconnected 2013-03-28 11:05:52 -07:00
hcd-pci.c USB: fix crash during hotplug of PCI USB controller card 2014-05-06 07:55:29 -07:00
hcd.c Revert "usbcore: set lpm_capable field for LPM capable root hubs" 2014-02-22 12:41:28 -08:00
hub.c USB: unbind all interfaces before rebinding any 2014-05-06 07:55:32 -07:00
hub.h USB: global suspend and remote wakeup don't mix 2013-08-04 16:50:50 +08:00
Kconfig USB: remove remaining instances of USB_SUSPEND 2013-05-15 13:44:44 -04:00
Makefile usb: Add driver/usb/core/(port.c,hub.h) files 2013-01-18 15:49:00 -08:00
message.c usb/core: consider link speed while looking at bMaxPower 2013-01-11 16:16:01 -08:00
notify.c
otg_whitelist.h
port.c usb: Don't fail port power resume on device disconnect. 2013-09-26 17:18:12 -07:00
quirks.c usb: Add device quirk for Logitech HD Pro Webcams C920 and C930e 2014-03-23 21:38:15 -07:00
sysfs.c USB: remove CONFIG_USB_SUSPEND option 2013-03-28 11:10:22 -07:00
urb.c USB: fix urb-poison imbalance 2013-03-25 13:48:27 -07:00
usb-acpi.c usb/acpi: binding xhci root hub usb port with ACPI 2013-03-25 10:39:17 -07:00
usb.c USB patches for 3.10-rc1 2013-04-29 12:19:23 -07:00
usb.h USB: unbind all interfaces before rebinding any 2014-05-06 07:55:32 -07:00