Skip to content

Commit

Permalink
be2net: fix TSO6/GSO issue causing TX-stall on Lancer/BEx
Browse files Browse the repository at this point in the history
IPv6 TSO requests with extension hdrs are a problem to the
Lancer and BEx chips. Workaround is to disable TSO6 feature
for such packets.

Also in Lancer chips, MSS less than 256 was resulting in TX stall.
Fix this by disabling GSO when MSS less than 256.

Signed-off-by: Suresh Reddy <suresh.reddy@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Suresh Reddy authored and David S. Miller committed Sep 13, 2017
1 parent 854426e commit 822f856
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
8 changes: 8 additions & 0 deletions drivers/net/ethernet/emulex/benet/be.h
Original file line number Diff line number Diff line change
Expand Up @@ -930,6 +930,14 @@ static inline bool is_ipv4_pkt(struct sk_buff *skb)
return skb->protocol == htons(ETH_P_IP) && ip_hdr(skb)->version == 4;
}

static inline bool is_ipv6_ext_hdr(struct sk_buff *skb)
{
if (ip_hdr(skb)->version == 6)
return ipv6_ext_hdr(ipv6_hdr(skb)->nexthdr);
else
return false;
}

#define be_error_recovering(adapter) \
(adapter->flags & BE_FLAGS_TRY_RECOVERY)

Expand Down
14 changes: 14 additions & 0 deletions drivers/net/ethernet/emulex/benet/be_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -5089,6 +5089,20 @@ static netdev_features_t be_features_check(struct sk_buff *skb,
struct be_adapter *adapter = netdev_priv(dev);
u8 l4_hdr = 0;

if (skb_is_gso(skb)) {
/* IPv6 TSO requests with extension hdrs are a problem
* to Lancer and BE3 HW. Disable TSO6 feature.
*/
if (!skyhawk_chip(adapter) && is_ipv6_ext_hdr(skb))
features &= ~NETIF_F_TSO6;

/* Lancer cannot handle the packet with MSS less than 256.
* Disable the GSO support in such cases
*/
if (lancer_chip(adapter) && skb_shinfo(skb)->gso_size < 256)
features &= ~NETIF_F_GSO_MASK;
}

/* The code below restricts offload features for some tunneled and
* Q-in-Q packets.
* Offload features for normal (non tunnel) packets are unchanged.
Expand Down

0 comments on commit 822f856

Please sign in to comment.