• Tariq Toukan's avatar
    net/mlx5e: Fix wrong CQE decompression · 36154be4
    Tariq Toukan authored
    In cqe compression with striding RQ, the decompression of the CQE field
    wqe_counter was done with a wrong wraparound value.
    This caused handling cqes with a wrong pointer to wqe (rx descriptor)
    and creating SKBs with wrong data, pointing to wrong (and already consumed)
    strides/pages.
    
    The meaning of the CQE field wqe_counter in striding RQ holds the
    stride index instead of the WQE index. Hence, when decompressing
    a CQE, wqe_counter should have wrapped-around the number of strides
    in a single multi-packet WQE.
    
    We dropped this wrap-around mask at all in CQE decompression of striding
    RQ. It is not needed as in such cases the CQE compression session would
    break because of different value of wqe_id field, starting a new
    compression session.
    
    Tested:
     ethtool -K ethxx lro off/on
     ethtool --set-priv-flags ethxx rx_cqe_compress on
     super_netperf 16 {ipv4,ipv6} -t TCP_STREAM -m 50 -D
     verified no csum errors and no page refcount issues.
    
    Fixes: 7219ab34 ("net/mlx5e: CQE compression")
    Signed-off-by: default avatarTariq Toukan <tariqt@mellanox.com>
    Reported-by: default avatarTom Herbert <tom@herbertland.com>
    Cc: kernel-team@fb.com
    Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    36154be4
en_rx.c 26 KB