On Tue, 2 Sep 2025 07:25:58 +0000 Hangbin Liu wrote: > --- a/include/linux/netdevice.h > +++ b/include/linux/netdevice.h > @@ -5279,6 +5279,25 @@ int __netdev_update_features(struct net_device *dev); > void netdev_update_features(struct net_device *dev); > void netdev_change_features(struct net_device *dev); > > +/* netdevice features */ > +#define VIRTUAL_DEV_VLAN_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | \ > + NETIF_F_FRAGLIST | NETIF_F_GSO_SOFTWARE | \ > + NETIF_F_GSO_ENCAP_ALL | \ > + NETIF_F_HIGHDMA | NETIF_F_LRO) > + > +#define VIRTUAL_DEV_ENC_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | \ > + NETIF_F_RXCSUM | NETIF_F_GSO_SOFTWARE | \ > + NETIF_F_GSO_PARTIAL) > + > +#define VIRTUAL_DEV_MPLS_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | \ > + NETIF_F_GSO_SOFTWARE) > + > +#define VIRTUAL_DEV_XFRM_FEATURES (NETIF_F_HW_ESP | NETIF_F_HW_ESP_TX_CSUM | \ > + NETIF_F_GSO_ESP) > + > +#define VIRTUAL_DEV_GSO_PARTIAL_FEATURES (NETIF_F_GSO_ESP) > +void netdev_compute_features_from_lowers(struct net_device *dev); Isn't this what the ALL_FOR_ALL, ONE_FOR_ALL etc. flag sets were supposed to also achieve? Please try to move the new code closer to those, both in terms of where they are defined and naming...