From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Julius Werner <jwerner@chromium.org>,
Sarah Sharp <sarah.a.sharp@linux.intel.com>
Subject: [ 12/17] usb: core: dont try to reset_device() a port that got just disconnected
Date: Mon, 12 Aug 2013 23:35:58 -0700 [thread overview]
Message-ID: <20130813063502.714255939@linuxfoundation.org> (raw)
In-Reply-To: <20130813063501.728847844@linuxfoundation.org>
3.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Julius Werner <jwerner@chromium.org>
commit 481f2d4f89f87a0baa26147f323380e31cfa7c44 upstream.
The USB hub driver's event handler contains a check to catch SuperSpeed
devices that transitioned into the SS.Inactive state and tries to fix
them with a reset. It decides whether to do a plain hub port reset or
call the usb_reset_device() function based on whether there was a device
attached to the port.
However, there are device/hub combinations (found with a JetFlash
Transcend mass storage stick (8564:1000) on the root hub of an Intel
LynxPoint PCH) which can transition to the SS.Inactive state on
disconnect (and stay there long enough for the host to notice). In this
case, above-mentioned reset check will call usb_reset_device() on the
stale device data structure. The kernel will send pointless LPM control
messages to the no longer connected device address and can even cause
several 5 second khubd stalls on some (buggy?) host controllers, before
finally accepting the device's fate amongst a flurry of error messages.
This patch makes the choice of reset dependent on the port status that
has just been read from the hub in addition to the existence of an
in-kernel data structure for the device, and only proceeds with the more
extensive reset if both are valid.
Signed-off-by: Julius Werner <jwerner@chromium.org>
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/usb/core/hub.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -3890,7 +3890,8 @@ static void hub_events(void)
hub->hdev->children[i - 1];
dev_dbg(hub_dev, "warm reset port %d\n", i);
- if (!udev) {
+ if (!udev || !(portstatus &
+ USB_PORT_STAT_CONNECTION)) {
status = hub_port_reset(hub, i,
NULL, HUB_BH_RESET_TIME,
true);
@@ -3900,8 +3901,8 @@ static void hub_events(void)
usb_lock_device(udev);
status = usb_reset_device(udev);
usb_unlock_device(udev);
+ connect_change = 0;
}
- connect_change = 0;
}
if (connect_change)
next prev parent reply other threads:[~2013-08-13 6:35 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-13 6:35 [ 00/17] 3.4.58-stable review Greg Kroah-Hartman
2013-08-13 6:35 ` [ 01/17] SCSI: Dont attempt to send extended INQUIRY command if skip_vpd_pages is set Greg Kroah-Hartman
2013-08-13 6:35 ` [ 02/17] SCSI: megaraid_sas: megaraid_sas driver init fails in kdump kernel Greg Kroah-Hartman
2013-08-13 6:35 ` [ 03/17] ext4: make sure group number is bumped after a inode allocation race Greg Kroah-Hartman
2013-08-13 6:35 ` [ 04/17] hwmon: (adt7470) Fix incorrect return code check Greg Kroah-Hartman
2013-08-13 6:35 ` [ 05/17] virtio: console: fix race with port unplug and open/close Greg Kroah-Hartman
2013-08-13 6:35 ` [ 06/17] virtio: console: fix race in port_fops_open() and port unplug Greg Kroah-Hartman
2013-08-13 6:35 ` [ 07/17] virtio: console: clean up port data immediately at time of unplug Greg Kroah-Hartman
2013-08-13 6:35 ` [ 08/17] virtio: console: fix raising SIGIO after port unplug Greg Kroah-Hartman
2013-08-13 6:35 ` [ 09/17] virtio: console: return -ENODEV on all read operations after unplug Greg Kroah-Hartman
2013-08-13 6:35 ` [ 10/17] ext4: fix mount/remount error messages for incompatible mount options Greg Kroah-Hartman
2013-08-13 6:35 ` [ 11/17] cifs: extend the buffer length enought for sprintf() using Greg Kroah-Hartman
2013-08-13 6:35 ` Greg Kroah-Hartman [this message]
2013-08-13 6:35 ` [ 13/17] debugfs: debugfs_remove_recursive() must not rely on list_empty(d_subdirs) Greg Kroah-Hartman
2013-08-13 6:36 ` [ 14/17] tracing: Fix fields of struct trace_iterator that are zeroed by mistake Greg Kroah-Hartman
2013-08-13 6:36 ` [ 15/17] SCSI: nsp32: use mdelay instead of large udelay constants Greg Kroah-Hartman
2013-08-13 6:36 ` [ 16/17] vfs: d_obtain_alias() needs to use "/" as default name Greg Kroah-Hartman
2013-08-13 6:36 ` [ 17/17] perf tools: Add anonymous huge page recognition Greg Kroah-Hartman
2013-08-13 11:49 ` [ 00/17] 3.4.58-stable review Guenter Roeck
2013-08-13 17:58 ` Greg Kroah-Hartman
2013-08-13 20:19 ` Guenter Roeck
2013-08-13 20:49 ` Geert Uytterhoeven
2013-08-13 22:36 ` Guenter Roeck
2013-08-14 8:26 ` Geert Uytterhoeven
2013-08-14 10:14 ` Guenter Roeck
2013-08-15 6:36 ` Greg Kroah-Hartman
2013-08-15 7:08 ` Guenter Roeck
2013-08-15 8:40 ` Guenter Roeck
2013-08-16 0:54 ` Greg Kroah-Hartman
2013-08-15 9:07 ` Guenter Roeck
2013-08-16 0:58 ` Greg Kroah-Hartman
2013-08-16 1:07 ` Guenter Roeck
2013-08-15 14:45 ` Guenter Roeck
2013-08-16 1:22 ` Greg Kroah-Hartman
2013-08-16 1:28 ` Guenter Roeck
2013-08-16 1:38 ` Greg Kroah-Hartman
2013-08-15 15:12 ` Guenter Roeck
2013-08-16 1:18 ` Greg Kroah-Hartman
2013-08-15 6:35 ` Greg Kroah-Hartman
2013-08-15 16:54 ` Luis Henriques
2013-08-15 6:34 ` Greg Kroah-Hartman
2013-08-15 6:31 ` Greg Kroah-Hartman
2013-08-15 7:43 ` Guenter Roeck
2013-08-15 7:55 ` Geert Uytterhoeven
2013-08-15 8:05 ` Guenter Roeck
[not found] ` <520DB045.7000309@roeck-us.net>
2013-08-16 5:10 ` Greg Kroah-Hartman
[not found] ` <520DE21D.8000905@roeck-us.net>
[not found] ` <20130816124140.GD24550@kroah.com>
2013-08-16 20:27 ` Guenter Roeck
2013-08-16 21:55 ` Geert Uytterhoeven
2013-08-16 22:39 ` Guenter Roeck
2013-08-16 23:08 ` Greg Kroah-Hartman
2013-08-16 0:53 ` Greg Kroah-Hartman
2013-08-13 20:33 ` Guenter Roeck
2013-08-13 17:19 ` Shuah Khan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130813063502.714255939@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=jwerner@chromium.org \
--cc=linux-kernel@vger.kernel.org \
--cc=sarah.a.sharp@linux.intel.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).