All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Tariq Toukan" <tariqt@nvidia.com>
Cc: linux-rdma@vger.kernel.org
Subject: Re: [PATCH net-next 05/15] net/mlx5: LAG, decouple iteration end-of-walk from MLX5_MAX_PORTS
Date: Wed, 04 Nov 2026 17:13:46 +0000	[thread overview]
Message-ID: <sashiko-outbox-197732@kernel.org> (raw)
In-Reply-To: <20261103171009.563034-6-tariqt@nvidia.com>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] net/mlx5: LAG, wrong loop sentinel check in mlx5_handle_changeupper_event()
--

commit 2ad8acabb3b31aebe50252b21fd494729c3bdc6a
Author: Shay Drory <shayd@nvidia.com>

net/mlx5: LAG, decouple iteration end-of-walk from MLX5_MAX_PORTS

This commit introduces ldev->max_funcs to replace MLX5_MAX_PORTS as the
end-of-walk sentinel for LAG xarray iterators and updates callers and
xa_alloc() bounds accordingly.

> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c b/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c
> index b2ac5c671ae60..73bce918cddba 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c
> @@ -395,6 +395,7 @@ static struct mlx5_lag *mlx5_lag_dev_alloc(struct mlx5_core_dev *dev)
>  		mlx5_core_err(dev, "Failed to init multipath lag err=%d\n",
>  			      err);
>  
> +	ldev->max_funcs = ldev->ports;
>  	return ldev;
>  
>  err_wq:

[ ... ]

> @@ -2095,7 +2096,7 @@ static int mlx5_handle_changeupper_event(struct mlx5_lag *ldev,
>  				break;
>  			}
>  		}
> -		if (i < MLX5_MAX_PORTS) {
> +		if (i < ldev->ports) {
>  			if (netif_is_bond_master(upper)) {
>  				slave = bond_slave_get_rcu(ndev_tmp);
>  				if (slave)

[Severity: Medium]
Should the check in mlx5_handle_changeupper_event() compare i against
ldev->max_funcs instead of ldev->ports?

In mlx5_handle_changeupper_event(), the loop uses mlx5_ldev_for_each():

	for_each_netdev_in_bond_rcu(upper, ndev_tmp) {
		mlx5_ldev_for_each(i, 0, ldev) {
			pf = mlx5_lag_pf(ldev, i);
			if (pf->netdev == ndev_tmp) {
				idx++;
				break;
			}
		}
		if (i < ldev->ports) {
			...
			bond_status |= (1 << idx);
		}

mlx5_ldev_for_each() calls mlx5_get_next_lag_func(), which now returns
ldev->max_funcs when the walk reaches the end without a match.

If ldev->max_funcs has grown past ldev->ports and a port function resides at
an xarray index i where ldev->ports <= i < ldev->max_funcs, a matching
ndev_tmp will increment idx and break out of the loop, but (i < ldev->ports)
will be false, skipping the has_inactive and bond_status updates for that
slave.

Additionally, in mlx5_lag_dev_alloc(), ldev->ports is initialized and
register_netdevice_notifier_net() registers mlx5_lag_netdev_event() before
mlx5_lag_mp_init() and before ldev->max_funcs = ldev->ports. If a
NETDEV_CHANGEUPPER event runs during that window while ldev->max_funcs is 0
and ldev->ports >= 2, mlx5_ldev_for_each() finishes immediately with i == 0
and idx == -1, causing (i < ldev->ports) to evaluate to true and execute
bond_status |= (1 << -1).

Would it make sense to compare i < ldev->max_funcs in
mlx5_handle_changeupper_event() and initialize ldev->max_funcs alongside
ldev->ports before registering the netdevice notifier in
mlx5_lag_dev_alloc()?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261103171009.563034-1-tariqt@nvidia.com?part=5

  reply	other threads:[~2026-11-04 17:13 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-03 17:09 [PATCH net-next 00/15] net/mlx5: LAG over VFs/SFs (virtual LAG) Tariq Toukan
2026-11-03 17:09 ` [PATCH net-next 01/15] net/mlx5: Distinguish VFs/SFs in the SW system image GUID for LAG grouping Tariq Toukan
2026-11-04 17:13   ` sashiko-bot
2026-11-09 17:22   ` Shay Drori
2026-11-03 17:09 ` [PATCH net-next 02/15] net/mlx5: LAG, select the MPESW master from the live member snapshot Tariq Toukan
2026-11-04 17:13   ` sashiko-bot
2026-11-03 17:09 ` [PATCH net-next 03/15] net/mlx5: LAG, skip phys LAG prerequisites for a virt LAG Tariq Toukan
2026-11-04 17:13   ` sashiko-bot
2026-11-03 17:09 ` [PATCH net-next 04/15] net/mlx5: LAG, treat virt LAG as a software managed LAG Tariq Toukan
2026-11-04 17:13   ` sashiko-bot
2026-11-03 17:09 ` [PATCH net-next 05/15] net/mlx5: LAG, decouple iteration end-of-walk from MLX5_MAX_PORTS Tariq Toukan
2026-11-04 17:13   ` sashiko-bot [this message]
2026-11-09 18:21   ` Shay Drori
2026-11-10 11:00   ` Paolo Abeni
2026-11-10 14:10     ` Shay Drory
2026-11-03 17:10 ` [PATCH net-next 06/15] net/mlx5: LAG, rename PF naming to fn Tariq Toukan
2026-11-04 17:13   ` sashiko-bot
2026-11-03 17:10 ` [PATCH net-next 07/15] net/mlx5: LAG, resolve affinity indices only in queue-affinity mode Tariq Toukan
2026-11-04 17:13   ` sashiko-bot
2026-11-03 17:10 ` [PATCH net-next 08/15] net/mlx5: LAG: replace fixed MLX5_MAX_PORTS arrays with dynamic allocation Tariq Toukan
2026-11-04 17:13   ` sashiko-bot
2026-11-09 18:26   ` Shay Drori
2026-11-03 17:10 ` [PATCH net-next 09/15] net/mlx5: LAG, drop MLX5_MAX_PORTS scratch array from device rescan Tariq Toukan
2026-11-04 17:13   ` sashiko-bot
2026-11-03 17:10 ` [PATCH net-next 10/15] net/mlx5: LAG, do not add a device to an already-active LAG Tariq Toukan
2026-11-04 17:13   ` sashiko-bot
2026-11-09 18:31   ` Shay Drori
2026-11-03 17:10 ` [PATCH net-next 11/15] net/mlx5: E-switch, add match-metadata allocator for nested VF/SF eswitches Tariq Toukan
2026-11-04 17:13   ` sashiko-bot
2026-11-10  9:31   ` Shay Drory
2026-11-03 17:10 ` [PATCH net-next 12/15] net/mlx5: E-switch, match master egress rule by vport metadata Tariq Toukan
2026-11-04 17:13   ` sashiko-bot
2026-11-10  9:36   ` Shay Drory
2026-11-03 17:10 ` [PATCH net-next 13/15] net/mlx5: E-switch, drop master egress rule under a SW vport LAG Tariq Toukan
2026-11-04 17:13   ` sashiko-bot
2026-11-03 17:10 ` [PATCH net-next 14/15] net/mlx5e: Register eswitch-manager VF/SF self-port with switch-id Tariq Toukan
2026-11-04 17:13   ` sashiko-bot
2026-11-10  9:54   ` Shay Drory
2026-11-03 17:10 ` [PATCH net-next 15/15] net/mlx5: LAG, enable LAG over functions that do not represent a physical port Tariq Toukan
2026-11-04 17:13   ` sashiko-bot

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=sashiko-outbox-197732@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    --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.