diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2013-03-18 12:04:54 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-03-18 16:05:58 -0700 |
commit | 6d5df8976266d8e40603601f7695537f9f3dc9e2 (patch) | |
tree | 7870d6ddb4ca6a5cee7d5e2923ddecd0b3c7305a /drivers/usb/host/ehci-timer.c | |
parent | 413fd1e9aa3e0441e64ed4703ce1bba164e135c0 (diff) |
USB: EHCI: decrease schedule-status poll timeout
This patch (as1657) decreases the timeout used by ehci-hcd for polling
the async and periodic schedule statuses. The timeout is currently
set to 20 ms, which is much too high. Controllers should always
update the schedule status within one or two ms of being told to do
so; if they don't then something is wrong.
Furthermore, bug reports have shown that sometimes controllers
(particularly those made by VIA) don't update the status bit at all,
even when the schedule does change state. When this happens, polling
for 20 ms would cause an unnecessarily long delay.
The delay is reduced to somewhere between 2 and 4 ms, depending on the
slop allowed by the kernel's high-res timers.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/host/ehci-timer.c')
-rw-r--r-- | drivers/usb/host/ehci-timer.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/usb/host/ehci-timer.c b/drivers/usb/host/ehci-timer.c index 20dbdcbe9b0..cc9ad5892d1 100644 --- a/drivers/usb/host/ehci-timer.c +++ b/drivers/usb/host/ehci-timer.c @@ -113,8 +113,8 @@ static void ehci_poll_ASS(struct ehci_hcd *ehci) if (want != actual) { - /* Poll again later, but give up after about 20 ms */ - if (ehci->ASS_poll_count++ < 20) { + /* Poll again later, but give up after about 2-4 ms */ + if (ehci->ASS_poll_count++ < 2) { ehci_enable_event(ehci, EHCI_HRTIMER_POLL_ASS, true); return; } @@ -159,8 +159,8 @@ static void ehci_poll_PSS(struct ehci_hcd *ehci) if (want != actual) { - /* Poll again later, but give up after about 20 ms */ - if (ehci->PSS_poll_count++ < 20) { + /* Poll again later, but give up after about 2-4 ms */ + if (ehci->PSS_poll_count++ < 2) { ehci_enable_event(ehci, EHCI_HRTIMER_POLL_PSS, true); return; } |