• Alexandre Rames's avatar
    sfc: Fix DMA unmapping issue with firmware assisted TSO · 2acdb92e
    Alexandre Rames authored
    When using firmware assisted TSO, we use a single DMA mapping for
    the linear area of a TSO skb.
    
    We still have to segment the super-packet and insert a descriptor
    containing the original headers before each segment of payload, so we
    can unmap the linear area only after the last segment is completed.
    The unmapping information for the linear area is therefore associated
    with the last header descriptor.
    
    We calculate the DMA address to unmap from using the map length and
    the invariant that the end of the DMA mapping matches the end of
    the data referenced by the last descriptor.  But this invariant is
    broken when there is TCP payload in the linear area.
    
    Fix this by adding and using an explicit dma_offset field.
    Signed-off-by: default avatarBen Hutchings <bhutchings@solarflare.com>
    2acdb92e
tx.c 37 KB