diff options
author | Thomas Pugliese <thomas.pugliese@gmail.com> | 2013-06-06 19:40:49 +0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-06-06 22:19:27 +0400 |
commit | 7d9852a88cb76b102b60b31949d5777e645f1421 (patch) | |
tree | d71cf9993bffb9b892c45ac2aef784f7bec06991 /drivers/usb/wusbcore/wusbhc.c | |
parent | d9ea21a779278da06d0cbe989594bf542ed213d7 (diff) | |
download | linux-7d9852a88cb76b102b60b31949d5777e645f1421.tar.xz |
wusbcore: reduce keepalive threshold from timeout/2 to timeout/3
This patch reduces the keepalive threshold of WUSB host controllers from
timeout/2 to timeout/3. The keepalive timer fires every timeout/2 ms, but
due to rounding errors and jitter, the host may decide not to send a
keepalive at timeout/2. By the time the next timer fires, a full timeout
period may have expired causing the device to be disconnected without ever
having been sent a keepalive. Changing the keepalive threshold to
timeout/3 ensures that at least one keepalive will be sent before a device
is disconnected. The patch also updates the code to use msecs_to_jiffies
consistently.
Signed-off-by: Thomas Pugliese <thomas.pugliese@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/wusbcore/wusbhc.c')
-rw-r--r-- | drivers/usb/wusbcore/wusbhc.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/usb/wusbcore/wusbhc.c b/drivers/usb/wusbcore/wusbhc.c index 0faca16df765..c35ee4394810 100644 --- a/drivers/usb/wusbcore/wusbhc.c +++ b/drivers/usb/wusbcore/wusbhc.c @@ -75,12 +75,11 @@ static ssize_t wusb_trust_timeout_store(struct device *dev, result = -EINVAL; goto out; } - /* FIXME: maybe we should check for range validity? */ - wusbhc->trust_timeout = trust_timeout; + wusbhc->trust_timeout = min_t(unsigned, trust_timeout, 500); cancel_delayed_work(&wusbhc->keep_alive_timer); flush_workqueue(wusbd); queue_delayed_work(wusbd, &wusbhc->keep_alive_timer, - (trust_timeout * CONFIG_HZ)/1000/2); + msecs_to_jiffies(wusbhc->trust_timeout / 2)); out: return result < 0 ? result : size; } |