On Tue, Dec 10, 2024 at 03:12:41PM +0100, Daniel Borkmann wrote: > Both bonding and team driver have logic to derive the base feature > flags before iterating over their slave devices to refine the set > via netdev_increment_features(). > > Add a small helper netdev_base_features() so this can be reused > instead of having it open-coded multiple times. > > Signed-off-by: Daniel Borkmann <daniel@xxxxxxxxxxxxx> > Cc: Nikolay Aleksandrov <razor@xxxxxxxxxxxxx> > Cc: Ido Schimmel <idosch@xxxxxxxxxx> > Cc: Jiri Pirko <jiri@xxxxxxxxxx> > --- > drivers/net/bonding/bond_main.c | 4 +--- > drivers/net/team/team_core.c | 3 +-- > include/linux/netdev_features.h | 7 +++++++ > 3 files changed, 9 insertions(+), 5 deletions(-) > > diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c > index 49dd4fe195e5..42c835c60cd8 100644 > --- a/drivers/net/bonding/bond_main.c > +++ b/drivers/net/bonding/bond_main.c > @@ -1520,9 +1520,7 @@ static netdev_features_t bond_fix_features(struct net_device *dev, > struct slave *slave; > > mask = features; > - > - features &= ~NETIF_F_ONE_FOR_ALL; > - features |= NETIF_F_ALL_FOR_ALL; > + features = netdev_base_features(features); > > bond_for_each_slave(bond, slave, iter) { > features = netdev_increment_features(features, > diff --git a/drivers/net/team/team_core.c b/drivers/net/team/team_core.c > index a1b27b69f010..1df062c67640 100644 > --- a/drivers/net/team/team_core.c > +++ b/drivers/net/team/team_core.c > @@ -2011,8 +2011,7 @@ static netdev_features_t team_fix_features(struct net_device *dev, > netdev_features_t mask; > > mask = features; > - features &= ~NETIF_F_ONE_FOR_ALL; > - features |= NETIF_F_ALL_FOR_ALL; > + features = netdev_base_features(features); > > rcu_read_lock(); > list_for_each_entry_rcu(port, &team->port_list, list) { > diff --git a/include/linux/netdev_features.h b/include/linux/netdev_features.h > index 66e7d26b70a4..11be70a7929f 100644 > --- a/include/linux/netdev_features.h > +++ b/include/linux/netdev_features.h > @@ -253,4 +253,11 @@ static inline int find_next_netdev_feature(u64 feature, unsigned long start) > NETIF_F_GSO_UDP_TUNNEL | \ > NETIF_F_GSO_UDP_TUNNEL_CSUM) > > +static inline netdev_features_t netdev_base_features(netdev_features_t features) > +{ > + features &= ~NETIF_F_ONE_FOR_ALL; > + features |= NETIF_F_ALL_FOR_ALL; > + return features; > +} > + > #endif /* _LINUX_NETDEV_FEATURES_H */ > -- > 2.43.0 > Reviewed-by: Hangbin Liu <liuhangbin@xxxxxxxxx>