From: Willem de Bruijn <willemdebruijn.ker...@gmail.com> Date: Mon, 2 Nov 2020 11:30:17 -0500
Hi! Thanks for the Ack. > 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? Two points: 1. Exactly, dummy is just dummy, while ifb is an intermediate netdev to share resources, so it should be as fine as with other virtual devs. 2. They both advertise NETIF_F_ALL_TSO | NETIF_F_GSO_ENCAP_ALL, which assumes that they handle all GSO skbs just like the others (pass them as is to the real drivers in case with ifb). >> >> 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 Al