• G
    xhci: use linked list for transfers · 94b037f2
    Gerd Hoffmann 提交于
    xhci has a fixed number of 24 (TD_QUEUE) XHCITransfer structs per
    endpoint, which turns out to be a problem for usb3 devices with 32 (or
    more) bulk streams.  xhci re-checks the trb rings on every finished
    transfer to make sure it'll pick up any pending work.  But that scheme
    breaks in case the first transfer of a ring can't be started because we
    ran out of XHCITransfer structs already.
    
    So remove static XHCITransfer array from XHCIEPContext.  Use a linked
    list instead, and allocate/free XHCITransfer as needed.  Add helper
    functions to allocate & initialize and to cleanup & release
    XHCITransfer structs.  That also simplifies trb management, we never
    have to realloc XHCITransfer->trbs because we don't reuse XHCITransfer
    structs any more.
    
    New dynamic limit for in-flight xhci transfers per endpoint is
    number-of-streams + 16.
    Signed-off-by: NGerd Hoffmann <kraxel@redhat.com>
    Message-id: 1474965172-30321-5-git-send-email-kraxel@redhat.com
    94b037f2
hcd-xhci.c 114.2 KB