From: Sabrina Dubroca <sd@queasysnail.net>
To: Hangbin Liu <liuhangbin@gmail.com>
Cc: netdev@vger.kernel.org, Jay Vosburgh <jv@jvosburgh.net>,
Andrew Lunn <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Jiri Pirko <jiri@resnulli.us>, Simon Horman <horms@kernel.org>,
Ido Schimmel <idosch@nvidia.com>, Shuah Khan <shuah@kernel.org>,
Stanislav Fomichev <sdf@fomichev.me>,
Kuniyuki Iwashima <kuniyu@google.com>,
Ahmed Zaki <ahmed.zaki@intel.com>,
Alexander Lobakin <aleksander.lobakin@intel.com>,
bridge@lists.linux.dev, linux-kselftest@vger.kernel.org
Subject: Re: [PATCHv2 net-next 1/5] net: add a common function to compute features from lowers devices
Date: Sat, 6 Sep 2025 19:42:48 +0200 [thread overview]
Message-ID: <aLxymFjpPjckFb2Q@krikkit> (raw)
In-Reply-To: <20250902072602.361122-2-liuhangbin@gmail.com>
2025-09-02, 07:25:58 +0000, Hangbin Liu wrote:
> diff --git a/net/core/dev.c b/net/core/dev.c
> index 1d1650d9ecff..5c1c8b016c8e 100644
> --- a/net/core/dev.c
> +++ b/net/core/dev.c
> @@ -12577,6 +12577,82 @@ netdev_features_t netdev_increment_features(netdev_features_t all,
> }
> EXPORT_SYMBOL(netdev_increment_features);
>
> +/**
> + * netdev_compute_features_from_lowers - compute feature from lowers
> + * @dev: the upper device
> + *
> + * Recompute the upper device's feature based on all lower devices.
> + */
> +void netdev_compute_features_from_lowers(struct net_device *dev)
> +{
> + unsigned int dst_release_flag = IFF_XMIT_DST_RELEASE | IFF_XMIT_DST_RELEASE_PERM;
> + netdev_features_t gso_partial_features = VIRTUAL_DEV_GSO_PARTIAL_FEATURES;
> +#ifdef CONFIG_XFRM_OFFLOAD
> + netdev_features_t xfrm_features = VIRTUAL_DEV_XFRM_FEATURES;
> +#endif
> + netdev_features_t mpls_features = VIRTUAL_DEV_MPLS_FEATURES;
> + netdev_features_t vlan_features = VIRTUAL_DEV_VLAN_FEATURES;
> + netdev_features_t enc_features = VIRTUAL_DEV_ENC_FEATURES;
> + unsigned int tso_max_size = TSO_MAX_SIZE;
> + u16 tso_max_segs = TSO_MAX_SEGS;
> + struct net_device *lower_dev;
> + struct list_head *iter;
> +
> + mpls_features = netdev_base_features(mpls_features);
> + vlan_features = netdev_base_features(vlan_features);
> + enc_features = netdev_base_features(enc_features);
> +
> + netdev_for_each_lower_dev(dev, lower_dev, iter) {
> + gso_partial_features = netdev_increment_features(gso_partial_features,
> + lower_dev->gso_partial_features,
> + VIRTUAL_DEV_GSO_PARTIAL_FEATURES);
> +
> + vlan_features = netdev_increment_features(vlan_features,
> + lower_dev->vlan_features,
> + VIRTUAL_DEV_VLAN_FEATURES);
> +
> +#ifdef CONFIG_XFRM_OFFLOAD
> + xfrm_features = netdev_increment_features(xfrm_features,
> + lower_dev->hw_enc_features,
> + VIRTUAL_DEV_XFRM_FEATURES);
> +#endif
> +
> + enc_features = netdev_increment_features(enc_features,
> + lower_dev->hw_enc_features,
> + VIRTUAL_DEV_ENC_FEATURES);
> +
> + mpls_features = netdev_increment_features(mpls_features,
> + lower_dev->mpls_features,
> + VIRTUAL_DEV_MPLS_FEATURES);
> +
> + dst_release_flag &= lower_dev->priv_flags;
> +
> + tso_max_size = min(tso_max_size, lower_dev->tso_max_size);
> + tso_max_segs = min(tso_max_segs, lower_dev->tso_max_segs);
> + }
> +
> + dev->gso_partial_features = gso_partial_features;
> + dev->vlan_features = vlan_features;
> +#ifdef CONFIG_XFRM_OFFLOAD
> + dev->hw_enc_features |= xfrm_features;
> +#endif
I'm not completely sure we want xfrm_features for upper devices other
than bonding [1], but this will get overwritten immediately
afterwards:
> + dev->hw_enc_features = enc_features | NETIF_F_GSO_ENCAP_ALL |
> + NETIF_F_HW_VLAN_CTAG_TX |
> + NETIF_F_HW_VLAN_STAG_TX;
[1] those lines in bond_compute_features were only added alongside
bond IPsec offload, see 18cb261afd7b ("bonding: support hardware
encryption offload to slaves")
but AFAIU hw_enc_features is only used as a mask over dev->features so
it shouldn't be a problem to have xfrm stuff in bridge/team as well
--
Sabrina
next prev parent reply other threads:[~2025-09-06 17:42 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-02 7:25 [PATCHv2 net-next 0/5] net: common feature compute for upper interface Hangbin Liu
2025-09-02 7:25 ` [PATCHv2 net-next 1/5] net: add a common function to compute features from lowers devices Hangbin Liu
2025-09-06 17:42 ` Sabrina Dubroca [this message]
2025-09-08 3:20 ` Hangbin Liu
2025-09-07 0:22 ` Jakub Kicinski
2025-09-02 7:25 ` [PATCHv2 net-next 2/5] bonding: use common function to compute the features Hangbin Liu
2025-09-02 7:26 ` [PATCHv2 net-next 3/5] team: " Hangbin Liu
2025-09-02 7:26 ` [PATCHv2 net-next 4/5] net: bridge: " Hangbin Liu
2025-09-02 7:26 ` [PATCHv2 net-next 5/5] selftests/net: add offload checking test for virtual interface Hangbin Liu
2025-09-06 21:30 ` Sabrina Dubroca
2025-09-08 4:15 ` Hangbin Liu
2025-09-08 9:36 ` Sabrina Dubroca
2025-09-08 10:14 ` Hangbin Liu
2025-09-08 21:48 ` Sabrina Dubroca
2025-09-09 2:54 ` Hangbin Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aLxymFjpPjckFb2Q@krikkit \
--to=sd@queasysnail.net \
--cc=ahmed.zaki@intel.com \
--cc=aleksander.lobakin@intel.com \
--cc=andrew+netdev@lunn.ch \
--cc=bridge@lists.linux.dev \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=idosch@nvidia.com \
--cc=jiri@resnulli.us \
--cc=jv@jvosburgh.net \
--cc=kuba@kernel.org \
--cc=kuniyu@google.com \
--cc=linux-kselftest@vger.kernel.org \
--cc=liuhangbin@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sdf@fomichev.me \
--cc=shuah@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.