From: Andiry Xu <andiry.xu@xxxxxxx> This patch clear PORT_POWER when suspend a USB3.0 device behind a USB3.0 external hub, so the system can suspend and resume. Note USB3.0 device may not work after system resume and this is a temporary workaround. The correct fix will be in future patches. Signed-off-by: Andiry Xu <andiry.xu@xxxxxxx> --- Cai, Can you please test this patch and confirm that it fixes the issue you saw with the second hibernate attempt failing when a USB 3.0 hard drive was plugged into a USB 3.0 hub? Note that we don't expect the USB 3.0 hard drive to survive the resume, but an unplug-replug cycle should make it work, and the system should be able to suspend and resume consistently. If so, we'll queue this quick fix for 2.6.39, and Andiry's larger USB 3.0 hub power management patches will get queued for 2.6.40. Here's a link to those patches, if you want to test them also: http://marc.info/?l=linux-usb&m=130136755804342&w=2 Thanks, Sarah Sharp drivers/usb/core/hub.c | 12 +++++++++++- 1 files changed, 11 insertions(+), 1 deletions(-) diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 0968157..42160c9 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -2283,7 +2283,17 @@ int usb_port_suspend(struct usb_device *udev, pm_message_t msg) } /* see 7.1.7.6 */ - status = set_port_feature(hub->hdev, port1, USB_PORT_FEAT_SUSPEND); + /* Clear PORT_POWER if it's a USB3.0 device connected to USB 3.0 + * external hub. + * FIXME: this is a temporary workaround to make the system able + * to suspend/resume. + */ + if ((hub->hdev->parent != NULL) && hub_is_superspeed(hub->hdev)) + status = clear_port_feature(hub->hdev, port1, + USB_PORT_FEAT_POWER); + else + status = set_port_feature(hub->hdev, port1, + USB_PORT_FEAT_SUSPEND); if (status) { dev_dbg(hub->intfdev, "can't suspend port %d, status %d\n", port1, status); -- 1.7.1 ----- End forwarded message ----- -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html