diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2013-10-18 11:18:21 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-10-19 14:10:16 -0700 |
commit | b8efdafb4005a79ab2305f8af31025d49292d4cf (patch) | |
tree | 730c489ddb3c786cb7b45b9adbbeed4ba81d9653 | |
parent | 0a56b4fa6844f74976d4bfa4956fa6d606b392ea (diff) | |
download | op-kernel-dev-b8efdafb4005a79ab2305f8af31025d49292d4cf.zip op-kernel-dev-b8efdafb4005a79ab2305f8af31025d49292d4cf.tar.gz |
USB: EHCI: add check for wakeup/suspend race
hcd-pci.c in usbcore contains a check for wakeup requests racing with
controller suspend. This check is going to be moved out of usbcore
and into the individual controller drivers, where it can apply to all
platforms, not just PCI.
This patch adds the check to ehci-hcd.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/usb/host/ehci-hcd.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index e66706a..e8ba4c4 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c @@ -1095,6 +1095,14 @@ int ehci_suspend(struct usb_hcd *hcd, bool do_wakeup) clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); spin_unlock_irq(&ehci->lock); + synchronize_irq(hcd->irq); + + /* Check for race with a wakeup request */ + if (do_wakeup && HCD_WAKEUP_PENDING(hcd)) { + ehci_resume(hcd, false); + return -EBUSY; + } + return 0; } EXPORT_SYMBOL_GPL(ehci_suspend); |