aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/ibm
diff options
context:
space:
mode:
authorThomas Falcon <tlfalcon@linux.vnet.ibm.com>2018-03-12 12:51:05 -0400
committerDavid S. Miller <davem@davemloft.net>2018-03-13 10:09:28 -0400
commitf10b09ef687f3134c26027d2a38a9d4cd3bb9cb7 (patch)
tree3b6f70150be0606cf1f3679a76fd01514c036c2f /drivers/net/ethernet/ibm
parent1f247a6f9e5d1b5a1e57d66829ee52dbafac256f (diff)
ibmvnic: Handle TSO backing device errata
TSO packets with one segment or with an MSS less than 224 can cause errors on some backing devices, so disable GSO in those cases. Signed-off-by: Thomas Falcon <tlfalcon@linux.vnet.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/ibm')
-rw-r--r--drivers/net/ethernet/ibm/ibmvnic.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index 7ed87fbb156b..e02d3b9aaf15 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -2049,6 +2049,23 @@ static int ibmvnic_change_mtu(struct net_device *netdev, int new_mtu)
2049 return wait_for_reset(adapter); 2049 return wait_for_reset(adapter);
2050} 2050}
2051 2051
2052static netdev_features_t ibmvnic_features_check(struct sk_buff *skb,
2053 struct net_device *dev,
2054 netdev_features_t features)
2055{
2056 /* Some backing hardware adapters can not
2057 * handle packets with a MSS less than 224
2058 * or with only one segment.
2059 */
2060 if (skb_is_gso(skb)) {
2061 if (skb_shinfo(skb)->gso_size < 224 ||
2062 skb_shinfo(skb)->gso_segs == 1)
2063 features &= ~NETIF_F_GSO_MASK;
2064 }
2065
2066 return features;
2067}
2068
2052static const struct net_device_ops ibmvnic_netdev_ops = { 2069static const struct net_device_ops ibmvnic_netdev_ops = {
2053 .ndo_open = ibmvnic_open, 2070 .ndo_open = ibmvnic_open,
2054 .ndo_stop = ibmvnic_close, 2071 .ndo_stop = ibmvnic_close,
@@ -2061,6 +2078,7 @@ static const struct net_device_ops ibmvnic_netdev_ops = {
2061 .ndo_poll_controller = ibmvnic_netpoll_controller, 2078 .ndo_poll_controller = ibmvnic_netpoll_controller,
2062#endif 2079#endif
2063 .ndo_change_mtu = ibmvnic_change_mtu, 2080 .ndo_change_mtu = ibmvnic_change_mtu,
2081 .ndo_features_check = ibmvnic_features_check,
2064}; 2082};
2065 2083
2066/* ethtool functions */ 2084/* ethtool functions */