Commit 8df0d77d authored by Alan Stern's avatar Alan Stern Committed by Greg Kroah-Hartman

USB: EHCI: improvements to unlink_empty_async_suspended()

unlink_empty_async_suspended() is marked __maybe_unused.  This is
because its caller, ehci_bus_suspend(), is protected by "#ifdef
CONFIG_PM".  We should use the same protection here instead of
__maybe_unused.

unlink_empty_async_suspended() gets called only when the root hub is
suspended.  It's silly for it to call start_iaa_cycle() at such a
time; the IAA mechanism doesn't work when the root hub isn't running.
It should call end_unlink_async() instead.  But even this isn't
necessary, since there already is a call to end_iaa_cycle() right
before the call to unlink_empty_async_suspended().  All we have to do
is interchange the two subroutine calls.
Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 87d61912
...@@ -347,9 +347,10 @@ static int ehci_bus_suspend (struct usb_hcd *hcd) ...@@ -347,9 +347,10 @@ static int ehci_bus_suspend (struct usb_hcd *hcd)
goto done; goto done;
ehci->rh_state = EHCI_RH_SUSPENDED; ehci->rh_state = EHCI_RH_SUSPENDED;
unlink_empty_async_suspended(ehci);
/* Any IAA cycle that started before the suspend is now invalid */ /* Any IAA cycle that started before the suspend is now invalid */
end_iaa_cycle(ehci); end_iaa_cycle(ehci);
unlink_empty_async_suspended(ehci);
ehci_handle_start_intr_unlinks(ehci); ehci_handle_start_intr_unlinks(ehci);
ehci_handle_intr_unlinks(ehci); ehci_handle_intr_unlinks(ehci);
end_free_itds(ehci); end_free_itds(ehci);
......
...@@ -1459,8 +1459,10 @@ static void unlink_empty_async(struct ehci_hcd *ehci) ...@@ -1459,8 +1459,10 @@ static void unlink_empty_async(struct ehci_hcd *ehci)
} }
} }
#ifdef CONFIG_PM
/* The root hub is suspended; unlink all the async QHs */ /* The root hub is suspended; unlink all the async QHs */
static void __maybe_unused unlink_empty_async_suspended(struct ehci_hcd *ehci) static void unlink_empty_async_suspended(struct ehci_hcd *ehci)
{ {
struct ehci_qh *qh; struct ehci_qh *qh;
...@@ -1469,9 +1471,10 @@ static void __maybe_unused unlink_empty_async_suspended(struct ehci_hcd *ehci) ...@@ -1469,9 +1471,10 @@ static void __maybe_unused unlink_empty_async_suspended(struct ehci_hcd *ehci)
WARN_ON(!list_empty(&qh->qtd_list)); WARN_ON(!list_empty(&qh->qtd_list));
single_unlink_async(ehci, qh); single_unlink_async(ehci, qh);
} }
start_iaa_cycle(ehci);
} }
#endif
/* makes sure the async qh will become idle */ /* makes sure the async qh will become idle */
/* caller must own ehci->lock */ /* caller must own ehci->lock */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment