USB: fix root-hub resume when CONFIG_USB_SUSPEND is not set
authorAlan Stern <stern@rowland.harvard.edu>
Tue, 19 Sep 2006 14:08:43 +0000 (10:08 -0400)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 27 Sep 2006 18:58:57 +0000 (11:58 -0700)
This patch (as786) removes a redundant test and fixes a problem
involving repeated system sleeps when CONFIG_USB_SUSPEND is not set.
During the first wakeup, the root hub's dev.power.power_state.event
field doesn't get updated, causing it not to be suspended during the
second sleep transition.

This takes care of the issue raised by Rafael J. Wysocki and Mattia
Dongili.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/core/driver.c

index 2b2000ac05ab5c57dd63d08886585c87ffb4a9e3..0d063c8ca4b46017cde051bf4ae5b77aad7dec01 100644 (file)
@@ -1071,10 +1071,15 @@ int usb_resume_both(struct usb_device *udev)
                                        PM_EVENT_ON)
                                status = -EHOSTUNREACH;
                }
-               if (status == 0 && udev->state == USB_STATE_SUSPENDED)
+               if (status == 0)
                        status = resume_device(udev);
                if (parent)
                        mutex_unlock(&parent->pm_mutex);
+       } else {
+
+               /* Needed only for setting udev->dev.power.power_state.event
+                * and for possible debugging message. */
+               status = resume_device(udev);
        }
 
        /* Now the parent won't suspend until we are finished */