ixgbevf: fix handling of tx checksumming
authorEmil Tantilov <emil.s.tantilov@intel.com>
Fri, 28 Feb 2014 04:32:44 +0000 (20:32 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 28 Feb 2014 17:40:57 +0000 (12:40 -0500)
This patch resolves an issue introduced by:
commit 7ad1a093519e37fb673579819bf6af122641c397
ixgbevf: make the first tx_buffer a repository for most of the skb info

Incorrect check for the result of ixgbevf_tso() can lead to calling
ixgbevf_tx_csum() which can spawn 2 context descriptors and result in
performance degradation and/or corrupted packets.

Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c

index a6af7b7c59b131adcf1f5a54cf076890dd08c744..79023ba29fdc9c41e5ec23351602031b0061660c 100644 (file)
@@ -3155,7 +3155,7 @@ static int ixgbevf_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
        tso = ixgbevf_tso(tx_ring, first, &hdr_len);
        if (tso < 0)
                goto out_drop;
-       else
+       else if (!tso)
                ixgbevf_tx_csum(tx_ring, first);
 
        ixgbevf_tx_map(tx_ring, first, hdr_len);