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 810fcf7aa2c6..839ba110f7fb 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, | |||
1965 | 1965 | ||
1966 | /* initialize outer IP header fields */ | 1966 | /* initialize outer IP header fields */ |
1967 | if (ip.v4->version == 4) { | 1967 | if (ip.v4->version == 4) { |
1968 | unsigned char *csum_start = skb_checksum_start(skb); | ||
1969 | unsigned char *trans_start = ip.hdr + (ip.v4->ihl * 4); | ||
1970 | |||
1968 | /* IP header will have to cancel out any data that | 1971 | /* IP header will have to cancel out any data that |
1969 | * is not a part of the outer IP header | 1972 | * is not a part of the outer IP header |
1970 | */ | 1973 | */ |
1971 | ip.v4->check = csum_fold(csum_add(lco_csum(skb), | 1974 | ip.v4->check = csum_fold(csum_partial(trans_start, |
1972 | csum_unfold(l4.tcp->check))); | 1975 | csum_start - trans_start, |
1976 | 0)); | ||
1973 | type_tucmd |= E1000_ADVTXD_TUCMD_IPV4; | 1977 | type_tucmd |= E1000_ADVTXD_TUCMD_IPV4; |
1974 | 1978 | ||
1975 | ip.v4->tot_len = 0; | 1979 | ip.v4->tot_len = 0; |