|
@@ -3329,11 +3329,15 @@ static int ixgbevf_tso(struct ixgbevf_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 |= IXGBE_ADVTXD_TUCMD_IPV4;
|
|
|
|
|
|
ip.v4->tot_len = 0;
|