• M
    xhci: align the last trb before link if it is easily splittable. · 474ed23a
    Mathias Nyman 提交于
    TD fragments section 4.11.7.1 in xhci specs have additional requirements
    on how trbs in TDs must be organized.
    
    TD fragments shall not span transfer ring segments and TD fragments must
    be packet aligned. Normally we don't care about TD fragments, on TD is one
    big fragment, but if a TD spans ring segments it will be treated as two
    fragments, and we need to comply with the alignment requirements.
    
    For us this means that the payload data must be packet aligned in the
    last trb before a link trb.
    In most mass storage bulk tranfers we are lucky as the block size aligns
    nicely with packet size, and there are no issues.
    However, usb network adapters using scatterlists can hit this alignment
    issue, and usbtest in kernel triggers this in minutes.
    
    This patch is a partial solution, it solves the easy case when the last
    trb before the link trb contains a packet boundary.
    If that is the case then just split the trb at the boundary.
    If not, then just print a debug message and continue as we have always
    done, hoping for the best
    Signed-off-by: NMathias Nyman <mathias.nyman@linux.intel.com>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    474ed23a
xhci-ring.c 123.3 KB