]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
net/mlx5e: Lag, Only handle events from highest priority multipath entry
authorRoi Dayan <roid@nvidia.com>
Wed, 16 Feb 2022 11:56:57 +0000 (13:56 +0200)
committerPaolo Pisati <paolo.pisati@canonical.com>
Wed, 23 Mar 2022 10:49:02 +0000 (11:49 +0100)
BugLink: https://bugs.launchpad.net/bugs/1966056
[ Upstream commit ad11c4f1d8fd1f03639460e425a36f7fd0ea83f5 ]

There could be multiple multipath entries but changing the port affinity
for each one doesn't make much sense and there should be a default one.
So only track the entry with lowest priority value.
The commit doesn't affect existing users with a single entry.

Fixes: 544fe7c2e654 ("net/mlx5e: Activate HW multipath and handle port affinity based on FIB events")
Signed-off-by: Roi Dayan <roid@nvidia.com>
Reviewed-by: Maor Dickman <maord@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
drivers/net/ethernet/mellanox/mlx5/core/lag_mp.c

index 30282d86e6b966f58be948863be09d4dcc2b2717..cb0a48d374a3c331b9ad1f9f6da2f81d169bb382 100644 (file)
@@ -126,6 +126,10 @@ static void mlx5_lag_fib_route_event(struct mlx5_lag *ldev,
                return;
        }
 
+       /* Handle multipath entry with lower priority value */
+       if (mp->mfi && mp->mfi != fi && fi->fib_priority >= mp->mfi->fib_priority)
+               return;
+
        /* Handle add/replace event */
        nhs = fib_info_num_path(fi);
        if (nhs == 1) {
@@ -135,12 +139,13 @@ static void mlx5_lag_fib_route_event(struct mlx5_lag *ldev,
                        int i = mlx5_lag_dev_get_netdev_idx(ldev, nh_dev);
 
                        if (i < 0)
-                               i = MLX5_LAG_NORMAL_AFFINITY;
-                       else
-                               ++i;
+                               return;
 
+                       i++;
                        mlx5_lag_set_port_affinity(ldev, i);
                }
+
+               mp->mfi = fi;
                return;
        }