• Anjali Singhai Jain's avatar
    i40e/i40evf: Fix mixed size frags and linearization · 30520831
    Anjali Singhai Jain authored
    This patch fixes a bug where the i40e Tx queue will hang if this
    skb is passed to the driver.
    
    With mixed size fragments while using TSO there was a corner case
    where we needed to linearize but we were not. This was seen with
    iSCSI traffic and could be reproduced with a frag list that looks
    like this:
    
    num_frags = 17, gso_segs = 17, hdr_len = 66,
    skb_shinfo(skb)->gso_size = 1448
    size = 3002, j = 1, frag_size = 2936, num_frags = 17
    size = 4268, j = 1, frag_size = 4096, num_frags = 16
    size = 5534, j = 1, frag_size = 4096, num_frags = 15
    size = 5352, j = 1, frag_size = 4096, num_frags = 14
    size = 5170, j = 1, frag_size = 4096, num_frags = 13
    size = 3468, j = 1, frag_size = 2576, num_frags = 12
    size = 750, j = 1, frag_size = 112, num_frags = 11
    size = 862, j = 2, frag_size = 112, num_frags = 10
    size = 974, j = 3, frag_size = 112, num_frags = 9
    size = 1126, j = 4, frag_size = 152, num_frags = 8
    size = 1330, j = 5, frag_size = 204, num_frags = 7
    size = 1534, j = 6, frag_size = 204, num_frags = 6
    size = 356, j = 1, frag_size = 204, num_frags = 5
    size = 560, j = 2, frag_size = 204, num_frags = 4
    size = 764, j = 3, frag_size = 204, num_frags = 3
    size = 968, j = 4, frag_size = 204, num_frags = 2
    size = 1140, j = 5, frag_size = 172, num_frags = 1
    result: linearize = 0, j = 6
    
    Change-ID: I79bb1aeab0af255fe2ce28e93672a85d85bf47e8
    Signed-off-by: default avatarAnjali Singhai Jain <anjali.singhai@intel.com>
    Signed-off-by: default avatarJesse Brandeburg <jesse.brandeburg@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    30520831
i40e_txrx.c 54.6 KB