From 02f2dfd9cec754463c0e3b3b738842baa1405aac Mon Sep 17 00:00:00 2001 From: Alan Stern Date: Tue, 3 Apr 2012 15:24:18 -0400 Subject: [PATCH] --- yaml --- r: 299143 b: refs/heads/master c: 879d38e6bc36d73b0ac40ec9b0d839fda9fa8b1a h: refs/heads/master i: 299141: 6bbf965561e7f4850931dc5dd2ed7d55c00b79ed 299139: bf7700787a07773f5d9b129cd2cd111f7ffca264 299135: 140c524356e829259f432e6ef9a8f7beae0aac50 v: v3 --- [refs] | 2 +- trunk/drivers/usb/core/hcd.c | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 10f4d3c8c01a..f17a93be7c12 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c5d703dcc776cb542b41665f2b7e2ba054efb4a7 +refs/heads/master: 879d38e6bc36d73b0ac40ec9b0d839fda9fa8b1a diff --git a/trunk/drivers/usb/core/hcd.c b/trunk/drivers/usb/core/hcd.c index 9d7fc9a39933..140d3e11f212 100644 --- a/trunk/drivers/usb/core/hcd.c +++ b/trunk/drivers/usb/core/hcd.c @@ -1978,6 +1978,18 @@ int hcd_bus_suspend(struct usb_device *rhdev, pm_message_t msg) if (status == 0) { usb_set_device_state(rhdev, USB_STATE_SUSPENDED); hcd->state = HC_STATE_SUSPENDED; + + /* Did we race with a root-hub wakeup event? */ + if (rhdev->do_remote_wakeup) { + char buffer[6]; + + status = hcd->driver->hub_status_data(hcd, buffer); + if (status != 0) { + dev_dbg(&rhdev->dev, "suspend raced with wakeup event\n"); + hcd_bus_resume(rhdev, PMSG_AUTO_RESUME); + status = -EBUSY; + } + } } else { spin_lock_irq(&hcd_root_hub_lock); if (!HCD_DEAD(hcd)) {