|
@@ -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;
|