From: Or Har-Toov <ohartoov@nvidia.com>
To: Jakub Kicinski <kuba@kernel.org>, tariqt@nvidia.com
Cc: andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com,
netdev@vger.kernel.org, pabeni@redhat.com, edwards@nvidia.com,
gal@nvidia.com, jgg@ziepe.ca, leon@kernel.org,
linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org,
msanalla@nvidia.com, mbloch@nvidia.com, saeedm@nvidia.com,
shayd@nvidia.com
Subject: Re: [PATCH net 2/5] net/mlx5: Lag, reset vport speed on teardown
Date: Thu, 1 Oct 2026 17:48:48 +0300 [thread overview]
Message-ID: <fe3cddf6-17e2-4f78-9944-ba723ed15fd1@nvidia.com> (raw)
In-Reply-To: <20260915015122.875353-1-kuba@kernel.org>
On 15/09/2026 4:51, Jakub Kicinski wrote:
> External email: Use caution opening links or attachments
>
>
> This is an AI-generated review of your patch. The human sending this
> email has considered the AI review valid, or at least plausible.
> ---
> net/mlx5: Lag, reset vport speed on teardown
>
> The cached agg_max_tx_speed was only reset on the regular LAG teardown
> path in mlx5_do_bond(), so MPESW teardown left stale values behind. The
> reset call is moved into mlx5_deactivate_lag() so all teardown paths run
> it.
>
>> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c b/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c
>> index 5aa9d5c98fe16..c2f21eb4ea7cf 100644
>> --- a/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c
>> +++ b/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c
>> @@ -1075,6 +1075,8 @@ int mlx5_deactivate_lag(struct mlx5_lag *ldev)
>> if (master_idx < 0)
>> return -EINVAL;
>>
>> + mlx5_lag_reset_vports_speed(ldev);
>> +
>
> [Severity: Medium]
> This isn't a bug introduced by this patch, but now that mlx5_deactivate_lag()
> is the single place claimed to reset the vport speeds on "every teardown
> path", is the helper it calls complete enough for that claim?
>
> mlx5_lag_reset_vports_speed() skips a PF entirely when the oper speed query
> fails:
>
> drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c:mlx5_lag_reset_vports_speed() {
> ret = mlx5_port_oper_linkspeed(mdev, &speed);
> if (ret) {
> mlx5_core_dbg(mdev,
> "Failed to reset vports speed for device %s. Oper speed is not available (err=%d)\n",
> dev_name(mdev->device), ret);
> continue;
> }
> }
>
> For that PF, vport->agg_max_tx_speed keeps the LAG aggregate value written
> earlier by mlx5_lag_modify_device_vports_speed(), and enabled vports keep
> the aggregated max_tx_speed in FW even though the FW LAG object is
> destroyed.
>
> The stale value then gets replayed later, in eswitch.c:
>
> mlx5_esw_vport_enable() {
> if (vport->agg_max_tx_speed)
> mlx5_esw_vport_set_max_tx_speed(esw, vport);
> }
>
> and is also used as the fallback in vport.c:
>
> mlx5_modify_vport_admin_state() {
> speed = IS_ERR(esw_vport) ? 0 : esw_vport->agg_max_tx_speed;
> }
>
> so an inflated reported TX speed can survive with no LAG present. This is
> the same best-effort handling that came in with 50f1d188c580, and moving the
> call site strictly increases the number of paths that attempt the reset, so
> nothing is made worse here.
>
> Both mlx5_lag_reset_vports_speed() and
> mlx5_lag_modify_device_vports_speed() return void, so mlx5_deactivate_lag()
> cannot observe the skip and still returns 0. Would it make sense to have the
> reset path clear the cached agg_max_tx_speed (or fall back to zero) when
> mlx5_port_oper_linkspeed() fails, rather than leaving the LAG aggregate
> cached?
>
> Also worth noting on the caching order in
> mlx5_lag_modify_device_vports_speed():
>
> vport->agg_max_tx_speed = speed;
>
> if (!vport->enabled)
> continue;
>
> ret = mlx5_modify_vport_max_tx_speed(mdev, op_mod, vport->vport, true, speed);
> if (ret)
> mlx5_core_dbg(...);
>
> the cache is updated before the FW command and a FW failure is only logged,
> so cache and FW can diverge during teardown too.
>
Not related to this patch, will send in separated patches
>> @@ -1676,7 +1678,6 @@ static void mlx5_do_bond(struct mlx5_lag *ldev)
>> mlx5_modify_lag(ldev, &tracker);
>> mlx5_lag_set_vports_agg_speed(ldev);
>> } else if (mlx5_lag_should_disable_lag(ldev, do_bond)) {
>> - mlx5_lag_reset_vports_speed(ldev);
>> mlx5_disable_lag(ldev);
>> }
>> }
next prev parent reply other threads:[~2026-10-01 14:49 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-10 10:24 [PATCH net 0/5] net/mlx5: fixes for LAG max_tx_speed update flow Tariq Toukan
2026-09-10 10:24 ` [PATCH net 1/5] net/mlx5: Lag, split aggregate speed into oper and max helpers Tariq Toukan
2026-09-10 10:46 ` sashiko-bot
2026-09-15 1:51 ` Jakub Kicinski
2026-09-30 21:22 ` Or Har-Toov
2026-09-10 10:24 ` [PATCH net 2/5] net/mlx5: Lag, reset vport speed on teardown Tariq Toukan
2026-09-10 10:46 ` sashiko-bot
2026-09-15 1:51 ` Jakub Kicinski
2026-10-01 14:48 ` Or Har-Toov [this message]
2026-09-10 10:24 ` [PATCH net 3/5] {RDMA,net}/mlx5: cache and use TX-enabled aggregate speed for vports Tariq Toukan
2026-09-10 10:46 ` sashiko-bot
2026-09-15 1:51 ` Jakub Kicinski
2026-09-10 10:24 ` [PATCH net 4/5] net/mlx5: Lag, limit aggregated TX speed by PCIe bandwidth Tariq Toukan
2026-09-10 10:46 ` sashiko-bot
2026-09-15 1:51 ` Jakub Kicinski
2026-09-10 10:24 ` [PATCH net 5/5] {RDMA,net}/mlx5: notify RoCE LAG speed change via driver event Tariq Toukan
2026-09-10 10:46 ` sashiko-bot
2026-09-15 1:51 ` Jakub Kicinski
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=fe3cddf6-17e2-4f78-9944-ba723ed15fd1@nvidia.com \
--to=ohartoov@nvidia.com \
--cc=andrew+netdev@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=edwards@nvidia.com \
--cc=gal@nvidia.com \
--cc=jgg@ziepe.ca \
--cc=kuba@kernel.org \
--cc=leon@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=mbloch@nvidia.com \
--cc=msanalla@nvidia.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=saeedm@nvidia.com \
--cc=shayd@nvidia.com \
--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.