1
linux/drivers/usb/host
David Brownell b963801164 USB: ehci-hcd unlink speedups
This patch fixes some performance bugs observed with some workloads
when unlinking EHCI queue header (QH) descriptors from the async ring
(control/bulk schedule).

The mechanism intended to defer unlinking an empty QH (so there is no
penalty in common cases where it's quickly reused) was not working as
intended.  Sometimes the unlink was scheduled:

 - too quickly ... which can be a *strong* negative effect, since
   that QH becomes unavailable for immediate re-use;

 - too slowly ... wasting DMA cycles, usually a minor issue except
   for increased bus contention and power usage;

Plus there was an extreme case of "too slowly":  a logical error in the
IAA watchdog-timer conversion meant that sometimes the unlink never
got scheduled.

The fix replaces a simple counter with a timestamp derived from the
controller's 8 KHz microframe counter, and adjusts the timer usage
for some issues associated with HZ being less than 8K.

(Based on a patch originally by Alan Stern, and good troubleshooting
from  Leonid.)

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: Leonid <leonidv11@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2008-07-21 15:16:27 -07:00
..
ehci-au1xxx.c USB: EHCI: suppress unwanted error messages 2008-05-29 13:59:03 -07:00
ehci-dbg.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
ehci-fsl.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
ehci-fsl.h
ehci-hcd.c USB: ehci-hcd unlink speedups 2008-07-21 15:16:27 -07:00
ehci-hub.c USB: EHCI: fix remote-wakeup regression 2008-05-29 13:59:04 -07:00
ehci-ixp4xx.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
ehci-mem.c
ehci-orion.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
ehci-pci.c USB: EHCI: suppress unwanted error messages 2008-05-29 13:59:03 -07:00
ehci-ppc-of.c USB: EHCI: suppress unwanted error messages 2008-05-29 13:59:03 -07:00
ehci-ppc-soc.c USB: EHCI: suppress unwanted error messages 2008-05-29 13:59:03 -07:00
ehci-ps3.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
ehci-q.c USB: ehci-hcd unlink speedups 2008-07-21 15:16:27 -07:00
ehci-sched.c USB: EHCI: fix bug in Iso scheduling 2008-05-29 13:59:04 -07:00
ehci.h USB: ehci-hcd unlink speedups 2008-07-21 15:16:27 -07:00
isp116x-hcd.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
isp116x.h USB: isp116x: fix enumeration on boot 2008-03-04 14:57:43 -08:00
isp1760-hcd.c USB: isp1760-hcd.c: make 2 functions static 2008-07-21 15:15:54 -07:00
isp1760-hcd.h USB: ISP1760 HCD driver 2008-05-02 10:25:50 -07:00
isp1760-if.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
Kconfig usb: r8a66597-hcd: Add support for SH7723 USB host 2008-06-09 16:04:12 +09:00
Makefile USB: ISP1760 HCD driver 2008-05-02 10:25:50 -07:00
ohci-at91.c USB: missing usb_put_hcd to ohci-at91 2008-07-21 15:16:24 -07:00
ohci-au1xxx.c Fix name of Russell King in various comments 2008-07-10 18:04:43 -07:00
ohci-dbg.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
ohci-ep93xx.c Revert "USB: don't explicitly reenable root-hub status interrupts" 2008-07-06 10:27:25 -07:00
ohci-hcd.c USB: make SA1111 OHCI driver SA11x0 specific 2008-07-21 15:16:24 -07:00
ohci-hub.c Revert "USB: don't explicitly reenable root-hub status interrupts" 2008-07-06 10:27:25 -07:00
ohci-lh7a404.c Fix name of Russell King in various comments 2008-07-10 18:04:43 -07:00
ohci-mem.c USB: OHCI handles more ZFMicro quirks 2007-10-12 14:54:59 -07:00
ohci-omap.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
ohci-pci.c Revert "USB: don't explicitly reenable root-hub status interrupts" 2008-07-06 10:27:25 -07:00
ohci-pnx4008.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
ohci-pnx8550.c Revert "USB: don't explicitly reenable root-hub status interrupts" 2008-07-06 10:27:25 -07:00
ohci-ppc-of.c USB: ohci-ppc-of: use linux/of_platform.h instead of asm 2008-07-21 15:16:22 -07:00
ohci-ppc-soc.c Revert "USB: don't explicitly reenable root-hub status interrupts" 2008-07-06 10:27:25 -07:00
ohci-ps3.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
ohci-pxa27x.c Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm 2008-07-14 16:06:58 -07:00
ohci-q.c USB: ohci_hcd hang: submit vs. rmmod race 2008-07-21 15:16:25 -07:00
ohci-s3c2410.c Fix name of Russell King in various comments 2008-07-10 18:04:43 -07:00
ohci-sa1111.c Fix name of Russell King in various comments 2008-07-10 18:04:43 -07:00
ohci-sh.c Revert "USB: don't explicitly reenable root-hub status interrupts" 2008-07-06 10:27:25 -07:00
ohci-sm501.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
ohci-ssb.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
ohci.h USB: convert ohci debug files to use debugfs instead of sysfs 2008-02-01 14:34:52 -08:00
pci-quirks.c USB: replace remaining __FUNCTION__ occurrences 2008-04-24 21:16:55 -07:00
pci-quirks.h
r8a66597-hcd.c drivers/usb annotations and fixes 2008-04-28 10:03:31 -07:00
r8a66597.h USB: r8a66597-hcd: Add support for SH7366 USB host 2008-04-24 21:16:49 -07:00
sl811_cs.c
sl811-hcd.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
sl811.h
u132-hcd.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
uhci-debug.c USB: add urb->unlinked field 2007-10-12 14:55:19 -07:00
uhci-hcd.c USB: UHCI: disable remote wakeup when it's not needed 2008-05-02 10:25:57 -07:00
uhci-hcd.h USB: UHCI: disable remote wakeup when it's not needed 2008-05-02 10:25:57 -07:00
uhci-hub.c
uhci-q.c USB: replace remaining __FUNCTION__ occurrences 2008-04-24 21:16:55 -07:00