usb/isp1760: Improve urb queueing, get rid of BUG():s in normal code paths
authorArvid Brodin <arvid.brodin@enea.com>
Tue, 26 Apr 2011 19:48:30 +0000 (21:48 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 3 May 2011 00:03:50 +0000 (17:03 -0700)
commit71a9f9d268a5c2b0a80ae606cf8e502f3410a5df
treefd8c3512ff67b64e8a487eecabdfa7ff5131bcdb
parent22bea9cef810ec54abdb057de46cea04c972dc64
usb/isp1760: Improve urb queueing, get rid of BUG():s in normal code paths

This patch replaces the code that handles qtds. Intead of directly allocating
chip mem and chip slot, enqueue the transfer in a list of queue heads. Use
a centralized function enqueue_qtds() to prioritize and enqueue transfers.

This removes all of the interrupt context BUG() calls when out of chip
mem or transfer slots. It also makes it possible to efficiently use the
dual-port mem on the chip for double-buffered transfers, which improve
transfer times to/from/between usb sticks by about 40 % on my HW.

With this patch it should also be possible to handle qtd scheduling outside
of the interrupt handler, for significantly improved kernel latency. I have
not implemented this since there are some locking issues which I haven't
had time to look at.

Signed-off-by: Arvid Brodin <arvid.brodin@enea.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/host/isp1760-hcd.c
drivers/usb/host/isp1760-hcd.h