lkml.org 
[lkml]   [2020]   [May]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 250/312] cxgb4/cxgb4vf: Fixes regression in perf when tx vlan offload is disabled
    Date
    From: Hariprasad Shenai <hariprasad@chelsio.com>

    commit 8d09e6b8b9c9969ac59496dc21e10b67fe727e7e upstream.

    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>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/net/ethernet/chelsio/cxgb4/sge.c | 2 +-
    drivers/net/ethernet/chelsio/cxgb4vf/sge.c | 2 +-
    2 files changed, 2 insertions(+), 2 deletions(-)

    --- a/drivers/net/ethernet/chelsio/cxgb4/sge.c
    +++ b/drivers/net/ethernet/chelsio/cxgb4/sge.c
    @@ -1165,7 +1165,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;
    --- a/drivers/net/ethernet/chelsio/cxgb4vf/sge.c
    +++ b/drivers/net/ethernet/chelsio/cxgb4vf/sge.c
    @@ -1188,7 +1188,7 @@ int t4vf_eth_xmit(struct sk_buff *skb, s

    /* 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;

    \
     
     \ /
      Last update: 2020-05-08 15:15    [W:4.150 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site