• Dmitry Bezrukov's avatar
    net: atlantic: checksum compat issue · 15beab0a
    Dmitry Bezrukov authored
    Yet another checksum offload compatibility issue was found.
    
    The known issue is that AQC HW marks tcp packets with 0xFFFF checksum
    as invalid (1). This is workarounded in driver, passing all the suspicious
    packets up to the stack for further csum validation.
    
    Another HW problem (2) is that it hides invalid csum of LRO aggregated
    packets inside of the individual descriptors. That was workarounded
    by forced scan of all LRO descriptors for checksum errors.
    
    However the scan logic was joint for both LRO and multi-descriptor
    packets (jumbos). And this causes the issue.
    
    We have to drop LRO packets with the detected bad checksum
    because of (2), but we have to pass jumbo packets to stack because of (1).
    
    When using windows tcp partner with jumbo frames but with LSO disabled
    driver discards such frames as bad checksummed. But only LRO frames
    should be dropped, not jumbos.
    
    On such a configurations tcp stream have a chance of drops and stucks.
    
    (1) 76f254d4 ("net: aquantia: tcp checksum 0xffff being handled incorrectly")
    (2) d08b9a0a ("net: aquantia: do not pass lro session with invalid tcp checksum")
    
    Fixes: d08b9a0a ("net: aquantia: do not pass lro session with invalid tcp checksum")
    Signed-off-by: default avatarDmitry Bezrukov <dbezrukov@marvell.com>
    Signed-off-by: default avatarIgor Russkikh <irusskikh@marvell.com>
    Signed-off-by: default avatarDmitry Bogdanov <dbogdanov@marvell.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    15beab0a
aq_ring.h 4.23 KB