提交 01cd0819 编写于 作者: A Arjan van de Ven 提交者: Greg Kroah-Hartman

USB: Patch to align the various USB timers to fire at the same time

This patch modifies the USB regular 250ms timer to be "perfectly aligned" to
the second and quarters thereof. This change is there to make sure that if
you have multiple USB ports, the timers for all these ports will fire at the
same time rather than all spread out. All spread out wakes the CPU up from
power saving idle a lot more than needed...
Signed-off-by: NArjan van de Ven <arjan@linux.intel.com>
Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
上级 fc4cbd75
...@@ -582,10 +582,12 @@ void usb_hcd_poll_rh_status(struct usb_hcd *hcd) ...@@ -582,10 +582,12 @@ void usb_hcd_poll_rh_status(struct usb_hcd *hcd)
} }
/* The USB 2.0 spec says 256 ms. This is close enough and won't /* The USB 2.0 spec says 256 ms. This is close enough and won't
* exceed that limit if HZ is 100. */ * exceed that limit if HZ is 100. The math is more clunky than
* maybe expected, this is to make sure that all timers for USB devices
* fire at the same time to give the CPU a break inbetween */
if (hcd->uses_new_polling ? hcd->poll_rh : if (hcd->uses_new_polling ? hcd->poll_rh :
(length == 0 && hcd->status_urb != NULL)) (length == 0 && hcd->status_urb != NULL))
mod_timer (&hcd->rh_timer, jiffies + msecs_to_jiffies(250)); mod_timer (&hcd->rh_timer, (jiffies/(HZ/4) + 1) * (HZ/4));
} }
EXPORT_SYMBOL_GPL(usb_hcd_poll_rh_status); EXPORT_SYMBOL_GPL(usb_hcd_poll_rh_status);
...@@ -614,8 +616,8 @@ static int rh_queue_status (struct usb_hcd *hcd, struct urb *urb) ...@@ -614,8 +616,8 @@ static int rh_queue_status (struct usb_hcd *hcd, struct urb *urb)
urb->hcpriv = hcd; /* indicate it's queued */ urb->hcpriv = hcd; /* indicate it's queued */
if (!hcd->uses_new_polling) if (!hcd->uses_new_polling)
mod_timer (&hcd->rh_timer, jiffies + mod_timer (&hcd->rh_timer,
msecs_to_jiffies(250)); (jiffies/(HZ/4) + 1) * (HZ/4));
/* If a status change has already occurred, report it ASAP */ /* If a status change has already occurred, report it ASAP */
else if (hcd->poll_pending) else if (hcd->poll_pending)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册