diff options
Diffstat (limited to 'drivers/net/ethernet/intel/ixgbe/ixgbe_main.c')
-rw-r--r-- | drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index 2436984481cc..1e2f39ebd824 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | |||
@@ -7287,11 +7287,15 @@ static int ixgbe_tso(struct ixgbe_ring *tx_ring, | |||
7287 | 7287 | ||
7288 | /* initialize outer IP header fields */ | 7288 | /* initialize outer IP header fields */ |
7289 | if (ip.v4->version == 4) { | 7289 | if (ip.v4->version == 4) { |
7290 | unsigned char *csum_start = skb_checksum_start(skb); | ||
7291 | unsigned char *trans_start = ip.hdr + (ip.v4->ihl * 4); | ||
7292 | |||
7290 | /* IP header will have to cancel out any data that | 7293 | /* IP header will have to cancel out any data that |
7291 | * is not a part of the outer IP header | 7294 | * is not a part of the outer IP header |
7292 | */ | 7295 | */ |
7293 | ip.v4->check = csum_fold(csum_add(lco_csum(skb), | 7296 | ip.v4->check = csum_fold(csum_partial(trans_start, |
7294 | csum_unfold(l4.tcp->check))); | 7297 | csum_start - trans_start, |
7298 | 0)); | ||
7295 | type_tucmd |= IXGBE_ADVTXD_TUCMD_IPV4; | 7299 | type_tucmd |= IXGBE_ADVTXD_TUCMD_IPV4; |
7296 | 7300 | ||
7297 | ip.v4->tot_len = 0; | 7301 | ip.v4->tot_len = 0; |