On Fri, Jan 24, 2025 at 10:57:44AM +0200, Cosmin Ratiu wrote: > --- > drivers/net/bonding/bond_main.c | 19 ++++++++++--------- > 1 file changed, 10 insertions(+), 9 deletions(-) > > diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c > index 7b78c2bada81..e45bba240cbc 100644 > --- a/drivers/net/bonding/bond_main.c > +++ b/drivers/net/bonding/bond_main.c > @@ -1538,17 +1538,20 @@ static netdev_features_t bond_fix_features(struct net_device *dev, > NETIF_F_HIGHDMA | NETIF_F_LRO) > > #define BOND_ENC_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | \ > - NETIF_F_RXCSUM | NETIF_F_GSO_SOFTWARE) > + NETIF_F_RXCSUM | NETIF_F_GSO_SOFTWARE | \ > + NETIF_F_GSO_PARTIAL) > > #define BOND_MPLS_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | \ > NETIF_F_GSO_SOFTWARE) > > +#define BOND_GSO_PARTIAL_FEATURES (NETIF_F_GSO_ESP) > + > > static void bond_compute_features(struct bonding *bond) > { > + netdev_features_t gso_partial_features = BOND_GSO_PARTIAL_FEATURES; > unsigned int dst_release_flag = IFF_XMIT_DST_RELEASE | > IFF_XMIT_DST_RELEASE_PERM; > - netdev_features_t gso_partial_features = NETIF_F_GSO_ESP; > netdev_features_t vlan_features = BOND_VLAN_FEATURES; > netdev_features_t enc_features = BOND_ENC_FEATURES; > #ifdef CONFIG_XFRM_OFFLOAD > @@ -1582,8 +1585,9 @@ static void bond_compute_features(struct bonding *bond) > BOND_XFRM_FEATURES); > #endif /* CONFIG_XFRM_OFFLOAD */ > > - if (slave->dev->hw_enc_features & NETIF_F_GSO_PARTIAL) > - gso_partial_features &= slave->dev->gso_partial_features; > + gso_partial_features = netdev_increment_features(gso_partial_features, > + slave->dev->gso_partial_features, > + BOND_GSO_PARTIAL_FEATURES); > > mpls_features = netdev_increment_features(mpls_features, > slave->dev->mpls_features, > @@ -1598,12 +1602,8 @@ static void bond_compute_features(struct bonding *bond) > } > bond_dev->hard_header_len = max_hard_header_len; > > - if (gso_partial_features & NETIF_F_GSO_ESP) > - bond_dev->gso_partial_features |= NETIF_F_GSO_ESP; > - else > - bond_dev->gso_partial_features &= ~NETIF_F_GSO_ESP; > - > done: > + bond_dev->gso_partial_features = gso_partial_features; > bond_dev->vlan_features = vlan_features; > bond_dev->hw_enc_features = enc_features | NETIF_F_GSO_ENCAP_ALL | > NETIF_F_HW_VLAN_CTAG_TX | if (!bond_has_slaves(bond)) goto done; If there is no slaves, should we add the gso_partial_features? Thanks Hangbin > @@ -6046,6 +6046,7 @@ void bond_setup(struct net_device *bond_dev) > bond_dev->hw_features |= NETIF_F_GSO_ENCAP_ALL; > bond_dev->features |= bond_dev->hw_features; > bond_dev->features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_STAG_TX; > + bond_dev->features |= NETIF_F_GSO_PARTIAL; > #ifdef CONFIG_XFRM_OFFLOAD > bond_dev->hw_features |= BOND_XFRM_FEATURES; > /* Only enable XFRM features if this is an active-backup config */ > -- > 2.45.0 >