• Arvid Brodin's avatar
    usb/isp1760: Improve urb queueing, get rid of BUG():s in normal code paths · 71a9f9d2
    Arvid Brodin authored
    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: default avatarArvid Brodin <arvid.brodin@enea.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    71a9f9d2
isp1760-hcd.c 52.7 KB