On Sun, Nov 1, 2020 at 8:17 AM Alexander Lobakin <aloba...@pm.me> wrote: > > Virtual netdevs should use NETIF_F_GSO_SOFTWARE to forward GSO skbs > as-is and let the final drivers deal with them when supported. > Also remove NETIF_F_GSO_UDP_L4 from bonding and team drivers as it's > now included in the "software" list.
The rationale is that it is okay to advertise these features with software fallback as bonding/teaming "hardware" features, because there will always be a downstream device for which they will be implemented, possibly in the software fallback, correct? That does not apply to dummy or IFB. I guess dummy is fine, because xmit is a black hole, and IFB because ingress can safely handle these packets? How did you arrive at the choice of changing these two, of all virtual devices? > > Suggested-by: Willem de Bruijn <will...@google.com> > Signed-off-by: Alexander Lobakin <aloba...@pm.me> > --- > drivers/net/bonding/bond_main.c | 11 +++++------ > drivers/net/dummy.c | 2 +- > drivers/net/ifb.c | 3 +-- > drivers/net/team/team.c | 9 ++++----- > 4 files changed, 11 insertions(+), 14 deletions(-) > > diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c > index 84ecbc6fa0ff..71c9677d135f 100644 > --- a/drivers/net/bonding/bond_main.c > +++ b/drivers/net/bonding/bond_main.c > @@ -1228,14 +1228,14 @@ static netdev_features_t bond_fix_features(struct > net_device *dev, > } > > #define BOND_VLAN_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | \ > - NETIF_F_FRAGLIST | NETIF_F_ALL_TSO | \ > + NETIF_F_FRAGLIST | NETIF_F_GSO_SOFTWARE | \ > NETIF_F_HIGHDMA | NETIF_F_LRO) > > #define BOND_ENC_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | \ > - NETIF_F_RXCSUM | NETIF_F_ALL_TSO) > + NETIF_F_RXCSUM | NETIF_F_GSO_SOFTWARE) > > #define BOND_MPLS_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | \ > - NETIF_F_ALL_TSO) > + NETIF_F_GSO_SOFTWARE) > > > static void bond_compute_features(struct bonding *bond) > @@ -1291,8 +1291,7 @@ static void bond_compute_features(struct bonding *bond) > bond_dev->vlan_features = vlan_features; > bond_dev->hw_enc_features = enc_features | NETIF_F_GSO_ENCAP_ALL | > NETIF_F_HW_VLAN_CTAG_TX | > - NETIF_F_HW_VLAN_STAG_TX | > - NETIF_F_GSO_UDP_L4; > + NETIF_F_HW_VLAN_STAG_TX; > #ifdef CONFIG_XFRM_OFFLOAD > bond_dev->hw_enc_features |= xfrm_features; > #endif /* CONFIG_XFRM_OFFLOAD */ > @@ -4721,7 +4720,7 @@ void bond_setup(struct net_device *bond_dev) > NETIF_F_HW_VLAN_CTAG_RX | > NETIF_F_HW_VLAN_CTAG_FILTER; > > - bond_dev->hw_features |= NETIF_F_GSO_ENCAP_ALL | NETIF_F_GSO_UDP_L4; > + bond_dev->hw_features |= NETIF_F_GSO_ENCAP_ALL; > #ifdef CONFIG_XFRM_OFFLOAD > bond_dev->hw_features |= BOND_XFRM_FEATURES; > #endif /* CONFIG_XFRM_OFFLOAD */ > diff --git a/drivers/net/dummy.c b/drivers/net/dummy.c > index bab3a9bb5e6f..f82ad7419508 100644 > --- a/drivers/net/dummy.c > +++ b/drivers/net/dummy.c > @@ -124,7 +124,7 @@ static void dummy_setup(struct net_device *dev) > dev->flags &= ~IFF_MULTICAST; > dev->priv_flags |= IFF_LIVE_ADDR_CHANGE | IFF_NO_QUEUE; > dev->features |= NETIF_F_SG | NETIF_F_FRAGLIST; > - dev->features |= NETIF_F_ALL_TSO; > + dev->features |= NETIF_F_GSO_SOFTWARE; > dev->features |= NETIF_F_HW_CSUM | NETIF_F_HIGHDMA | NETIF_F_LLTX; > dev->features |= NETIF_F_GSO_ENCAP_ALL; > dev->hw_features |= dev->features; > diff --git a/drivers/net/ifb.c b/drivers/net/ifb.c > index 7fe306e76281..fa63d4dee0ba 100644 > --- a/drivers/net/ifb.c > +++ b/drivers/net/ifb.c > @@ -187,8 +187,7 @@ static const struct net_device_ops ifb_netdev_ops = { > }; > > #define IFB_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | NETIF_F_FRAGLIST | \ > - NETIF_F_TSO_ECN | NETIF_F_TSO | NETIF_F_TSO6 | \ > - NETIF_F_GSO_ENCAP_ALL | \ > + NETIF_F_GSO_SOFTWARE | NETIF_F_GSO_ENCAP_ALL | \ > NETIF_F_HIGHDMA | NETIF_F_HW_VLAN_CTAG_TX | \ > NETIF_F_HW_VLAN_STAG_TX) > > diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c > index 07f1f3933927..b4092127a92c 100644 > --- a/drivers/net/team/team.c > +++ b/drivers/net/team/team.c > @@ -975,11 +975,11 @@ static void team_port_disable(struct team *team, > } > > #define TEAM_VLAN_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | \ > - NETIF_F_FRAGLIST | NETIF_F_ALL_TSO | \ > + NETIF_F_FRAGLIST | NETIF_F_GSO_SOFTWARE | \ > NETIF_F_HIGHDMA | NETIF_F_LRO) > > #define TEAM_ENC_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | \ > - NETIF_F_RXCSUM | NETIF_F_ALL_TSO) > + NETIF_F_RXCSUM | NETIF_F_GSO_SOFTWARE) > > static void __team_compute_features(struct team *team) > { > @@ -1009,8 +1009,7 @@ static void __team_compute_features(struct team *team) > team->dev->vlan_features = vlan_features; > team->dev->hw_enc_features = enc_features | NETIF_F_GSO_ENCAP_ALL | > NETIF_F_HW_VLAN_CTAG_TX | > - NETIF_F_HW_VLAN_STAG_TX | > - NETIF_F_GSO_UDP_L4; > + NETIF_F_HW_VLAN_STAG_TX; > team->dev->hard_header_len = max_hard_header_len; > > team->dev->priv_flags &= ~IFF_XMIT_DST_RELEASE; > @@ -2175,7 +2174,7 @@ static void team_setup(struct net_device *dev) > NETIF_F_HW_VLAN_CTAG_RX | > NETIF_F_HW_VLAN_CTAG_FILTER; > > - dev->hw_features |= NETIF_F_GSO_ENCAP_ALL | NETIF_F_GSO_UDP_L4; > + dev->hw_features |= NETIF_F_GSO_ENCAP_ALL; > dev->features |= dev->hw_features; > dev->features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_STAG_TX; > } > -- > 2.29.2 > >