alistair23-linux/drivers/net/ethernet/intel/i40evf
Anjali Singhai Jain 30520831f0 i40e/i40evf: Fix mixed size frags and linearization
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: Anjali Singhai Jain <anjali.singhai@intel.com>
Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
2015-06-04 20:06:06 -07:00
..
i40e_adminq.c i40e: let firmware catch the NVM busy error 2014-12-09 12:57:02 -08:00
i40e_adminq.h i40e/i40evf: print FW build number in version string 2015-03-03 01:07:24 -08:00
i40e_adminq_cmd.h i40e: AQ API updates for new commands 2015-01-16 05:20:37 -08:00
i40e_alloc.h i40evf: Fix the headers and update copyright year. 2014-05-21 01:54:43 -07:00
i40e_common.c i40e/i40evf: implement KR2 support 2015-03-27 00:12:09 -07:00
i40e_hmc.h i40e/i40evf: Force a shifted '1' to be unsigned 2014-07-02 19:02:19 -07:00
i40e_lan_hmc.h i40e/i40evf: Big endian fixes for handling HMC 2014-06-26 04:44:57 -07:00
i40e_osdep.h i40evf: Fix the headers and update copyright year. 2014-05-21 01:54:43 -07:00
i40e_prototype.h i40e/i40evf: Clean up some formatting and other things 2015-03-05 06:39:42 -08:00
i40e_register.h i40e/i40evf: i40e_register.h updates 2015-02-23 17:11:57 -08:00
i40e_status.h i40evf: Fix the headers and update copyright year. 2014-05-21 01:54:43 -07:00
i40e_txrx.c i40e/i40evf: Fix mixed size frags and linearization 2015-06-04 20:06:06 -07:00
i40e_txrx.h Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2015-03-03 21:16:48 -05:00
i40e_type.h i40e/i40evf: Save WR_CSR_PROT field from DEV/FUNC capabilities 2015-04-14 20:25:45 -07:00
i40e_virtchnl.h i40e/i40evf: restrict VC opcodes to their initial values 2015-02-23 17:11:56 -08:00
i40evf.h i40evf: remove aq_pending 2015-04-14 17:20:39 -07:00
i40evf_ethtool.c i40evf: add FW version to ethtool info 2015-03-27 03:01:29 -07:00
i40evf_main.c i40evf: remove aq_pending 2015-04-14 17:20:39 -07:00
i40evf_virtchnl.c i40evf: remove aq_pending 2015-04-14 17:20:39 -07:00
Makefile i40evf: Fix the headers and update copyright year. 2014-05-21 01:54:43 -07:00