diff options
Diffstat (limited to 'drivers/net/ethernet/intel/igbvf/netdev.c')
| -rw-r--r-- | drivers/net/ethernet/intel/igbvf/netdev.c | 8 | 
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/net/ethernet/intel/igbvf/netdev.c b/drivers/net/ethernet/intel/igbvf/netdev.c index 12bb877df860..7dff7f6239cd 100644 --- a/drivers/net/ethernet/intel/igbvf/netdev.c +++ b/drivers/net/ethernet/intel/igbvf/netdev.c @@ -1965,11 +1965,15 @@ static int igbvf_tso(struct igbvf_ring *tx_ring,  	/* initialize outer IP header fields */  	if (ip.v4->version == 4) { +		unsigned char *csum_start = skb_checksum_start(skb); +		unsigned char *trans_start = ip.hdr + (ip.v4->ihl * 4); +  		/* IP header will have to cancel out any data that  		 * is not a part of the outer IP header  		 */ -		ip.v4->check = csum_fold(csum_add(lco_csum(skb), -						  csum_unfold(l4.tcp->check))); +		ip.v4->check = csum_fold(csum_partial(trans_start, +						      csum_start - trans_start, +						      0));  		type_tucmd |= E1000_ADVTXD_TUCMD_IPV4;  		ip.v4->tot_len = 0;  | 
