cxgb4/cxgb4vf: Fixes regression in perf when tx vlan offload is disabled
authorHariprasad Shenai <hariprasad@chelsio.com>
Thu, 28 Jul 2016 07:58:57 +0000 (13:28 +0530)
committerDavid S. Miller <davem@davemloft.net>
Sun, 31 Jul 2016 03:39:59 +0000 (20:39 -0700)
The commit 637d3e997351 ("cxgb4: Discard the packet if the length is
greater than mtu") introduced a regression in the VLAN interface
performance when Tx VLAN offload is disabled.

Check if skb is tagged, regardless of whether it is hardware accelerated
or not. Presently we were checking only for hardware acclereated one,
which caused performance to drop to ~0.17Mbps on a 10GbE adapter for
VLAN interface, when tx vlan offload is turned off using ethtool.
The ethernet head length calculation was going wrong in this case, and
driver ended up dropping packets.

Fixes: 637d3e997351 ("cxgb4: Discard the packet if the length is greater than mtu")
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/chelsio/cxgb4/sge.c
drivers/net/ethernet/chelsio/cxgb4vf/sge.c

index bad253beb8c8671ede3531d7471dd6754651d178..ad3552df054576d14d9b3fc4cdf08f103a888756 100644 (file)
@@ -1192,7 +1192,7 @@ out_free: dev_kfree_skb_any(skb);
 
        /* Discard the packet if the length is greater than mtu */
        max_pkt_len = ETH_HLEN + dev->mtu;
-       if (skb_vlan_tag_present(skb))
+       if (skb_vlan_tagged(skb))
                max_pkt_len += VLAN_HLEN;
        if (!skb_shinfo(skb)->gso_size && (unlikely(skb->len > max_pkt_len)))
                goto out_free;
index 1bb57d3fbbe8783e32187509081ea3a63991641e..c8fd4f8fe1fab58589576cfe12cec9210442b52d 100644 (file)
@@ -1188,7 +1188,7 @@ int t4vf_eth_xmit(struct sk_buff *skb, struct net_device *dev)
 
        /* Discard the packet if the length is greater than mtu */
        max_pkt_len = ETH_HLEN + dev->mtu;
-       if (skb_vlan_tag_present(skb))
+       if (skb_vlan_tagged(skb))
                max_pkt_len += VLAN_HLEN;
        if (!skb_shinfo(skb)->gso_size && (unlikely(skb->len > max_pkt_len)))
                goto out_free;