lkml.org 
[lkml]   [2020]   [Jan]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 241/271] net: usb: lan78xx: Add .ndo_features_check
    Date
    From: James Hughes <james.hughes@raspberrypi.org>

    [ Upstream commit ce896476c65d72b4b99fa09c2f33436b4198f034 ]

    As reported by Eric Dumazet, there are still some outstanding
    cases where the driver does not handle TSO correctly when skb's
    are over a certain size. Most cases have been fixed, this patch
    should ensure that forwarded SKB's that are greater than
    MAX_SINGLE_PACKET_SIZE - TX_OVERHEAD are software segmented
    and handled correctly.

    Signed-off-by: James Hughes <james.hughes@raspberrypi.org>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/usb/lan78xx.c | 15 +++++++++++++++
    1 file changed, 15 insertions(+)

    --- a/drivers/net/usb/lan78xx.c
    +++ b/drivers/net/usb/lan78xx.c
    @@ -30,6 +30,7 @@
    #include <linux/ipv6.h>
    #include <linux/mdio.h>
    #include <net/ip6_checksum.h>
    +#include <net/vxlan.h>
    #include <linux/microchipphy.h>
    #include <linux/of_net.h>
    #include "lan78xx.h"
    @@ -3291,6 +3292,19 @@ static void lan78xx_tx_timeout(struct ne
    tasklet_schedule(&dev->bh);
    }

    +static netdev_features_t lan78xx_features_check(struct sk_buff *skb,
    + struct net_device *netdev,
    + netdev_features_t features)
    +{
    + if (skb->len + TX_OVERHEAD > MAX_SINGLE_PACKET_SIZE)
    + features &= ~NETIF_F_GSO_MASK;
    +
    + features = vlan_features_check(skb, features);
    + features = vxlan_features_check(skb, features);
    +
    + return features;
    +}
    +
    static const struct net_device_ops lan78xx_netdev_ops = {
    .ndo_open = lan78xx_open,
    .ndo_stop = lan78xx_stop,
    @@ -3304,6 +3318,7 @@ static const struct net_device_ops lan78
    .ndo_set_features = lan78xx_set_features,
    .ndo_vlan_rx_add_vid = lan78xx_vlan_rx_add_vid,
    .ndo_vlan_rx_kill_vid = lan78xx_vlan_rx_kill_vid,
    + .ndo_features_check = lan78xx_features_check,
    };

    static void lan78xx_stat_monitor(unsigned long param)

    \
     
     \ /
      Last update: 2020-01-28 15:25    [W:6.587 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site