EHCI: don't rescan interrupt QHs needlessly
authorAlan Stern <stern@rowland.harvard.edu>
Tue, 17 May 2011 14:40:51 +0000 (10:40 -0400)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 17 May 2011 18:20:24 +0000 (11:20 -0700)
commit1e12c910eed82da6971f1c0421a069c680faba2e
tree46851229d59c72fa10596f7cecd567918ce348eb
parent2b7aaf503d56216b847c8265421d2a7d9b42df3e
EHCI: don't rescan interrupt QHs needlessly

This patch (as1466) speeds up processing of ehci-hcd's periodic list.
The existing code will pointlessly rescan an interrupt endpoint queue
each time it encounters the queue's QH in the periodic list, which can
happen quite a few times if the endpoint's period is low.  On some
embedded systems, this useless overhead can waste so much time that
the driver falls hopelessly behind and loses events.

The patch introduces a "periodic_stamp" variable, which gets
incremented each time scan_periodic() runs and each time the scan
advances to a new frame.  If the corresponding stamp in an interrupt
QH is equal to the current periodic_stamp, we assume the QH has
already been scanned and skip over it.  Otherwise we scan the QH as
usual, and if none of its URBs have completed then we store the
current periodic_stamp in the QH's stamp, preventing it from being
scanned again.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/host/ehci-q.c
drivers/usb/host/ehci-sched.c
drivers/usb/host/ehci.h