From: Jay Vosburgh <jv@jvosburgh.net>
To: Cosmin Ratiu <cratiu@nvidia.com>
Cc: netdev@vger.kernel.org, Nikolay Aleksandrov <razor@blackwall.org>,
"David S . Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Simon Horman <horms@kernel.org>, Jianbo Liu <jianbol@nvidia.com>,
Boris Pismenny <borisp@nvidia.com>,
Tariq Toukan <tariqt@nvidia.com>,
linux-kselftest@vger.kernel.org,
Hangbin Liu <liuhangbin@gmail.com>, Liang Li <liali@redhat.com>
Subject: Re: [PATCH net v3] bonding: Correctly support GSO ESP offload
Date: Mon, 27 Jan 2025 15:25:14 -0800 [thread overview]
Message-ID: <115558.1738020314@famine> (raw)
In-Reply-To: <20250127104147.759658-1-cratiu@nvidia.com>
Cosmin Ratiu <cratiu@nvidia.com> wrote:
>The referenced fix is incomplete. It correctly computes
>bond_dev->gso_partial_features across slaves, but unfortunately
>netdev_fix_features discards gso_partial_features from the feature set
>if NETIF_F_GSO_PARTIAL isn't set in bond_dev->features.
>
>This is visible with ethtool -k bond0 | grep esp:
>tx-esp-segmentation: off [requested on]
>esp-hw-offload: on
>esp-tx-csum-hw-offload: on
>
>This patch reworks the bonding GSO offload support by:
>- making aggregating gso_partial_features across slaves similar to the
> other feature sets (this part is a no-op).
>- advertising the default partial gso features on empty bond devs, same
> as with other feature sets (also a no-op).
>- adding NETIF_F_GSO_PARTIAL to hw_enc_features filtered across slaves.
>- adding NETIF_F_GSO_PARTIAL to features in bond_setup()
>
>With all of these, 'ethtool -k bond0 | grep esp' now reports:
>tx-esp-segmentation: on
>esp-hw-offload: on
>esp-tx-csum-hw-offload: on
>
>Fixes: 4861333b4217 ("bonding: add ESP offload features when slaves support")
>Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
>Signed-off-by: Cosmin Ratiu <cratiu@nvidia.com>
Acked-by: Jay Vosburgh <jv@jvosburgh.net>
>---
> 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 |
>@@ -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
>
next prev parent reply other threads:[~2025-01-27 23:25 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-27 10:41 [PATCH net v3] bonding: Correctly support GSO ESP offload Cosmin Ratiu
2025-01-27 10:45 ` Cosmin Ratiu
2025-01-27 13:27 ` Hangbin Liu
2025-01-27 23:25 ` Jay Vosburgh [this message]
2025-01-28 12:30 ` patchwork-bot+netdevbpf
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=115558.1738020314@famine \
--to=jv@jvosburgh.net \
--cc=borisp@nvidia.com \
--cc=cratiu@nvidia.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=jianbol@nvidia.com \
--cc=kuba@kernel.org \
--cc=liali@redhat.com \
--cc=linux-kselftest@vger.kernel.org \
--cc=liuhangbin@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=razor@blackwall.org \
--cc=tariqt@nvidia.com \
/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.