提交 8d09e6b8 编写于 作者: H Hariprasad Shenai 提交者: David S. Miller

cxgb4/cxgb4vf: Fixes regression in perf when tx vlan offload is disabled

The commit 637d3e99 ("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: 637d3e99 ("cxgb4: Discard the packet if the length is greater than mtu")
Signed-off-by: NHariprasad Shenai <hariprasad@chelsio.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 b2df430b
...@@ -1192,7 +1192,7 @@ out_free: dev_kfree_skb_any(skb); ...@@ -1192,7 +1192,7 @@ out_free: dev_kfree_skb_any(skb);
/* Discard the packet if the length is greater than mtu */ /* Discard the packet if the length is greater than mtu */
max_pkt_len = ETH_HLEN + dev->mtu; max_pkt_len = ETH_HLEN + dev->mtu;
if (skb_vlan_tag_present(skb)) if (skb_vlan_tagged(skb))
max_pkt_len += VLAN_HLEN; max_pkt_len += VLAN_HLEN;
if (!skb_shinfo(skb)->gso_size && (unlikely(skb->len > max_pkt_len))) if (!skb_shinfo(skb)->gso_size && (unlikely(skb->len > max_pkt_len)))
goto out_free; goto out_free;
......
...@@ -1188,7 +1188,7 @@ int t4vf_eth_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -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 */ /* Discard the packet if the length is greater than mtu */
max_pkt_len = ETH_HLEN + dev->mtu; max_pkt_len = ETH_HLEN + dev->mtu;
if (skb_vlan_tag_present(skb)) if (skb_vlan_tagged(skb))
max_pkt_len += VLAN_HLEN; max_pkt_len += VLAN_HLEN;
if (!skb_shinfo(skb)->gso_size && (unlikely(skb->len > max_pkt_len))) if (!skb_shinfo(skb)->gso_size && (unlikely(skb->len > max_pkt_len)))
goto out_free; goto out_free;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册