Skip to content

Commit ee94431

Browse files
author
Benjamin Poirier
committed
net/mlx5: Lag, use port selection tables when available
JIRA: https://issues.redhat.com/browse/RHEL-72227 JIRA: https://issues.redhat.com/browse/RHEL-73520 Upstream-status: v6.15-rc1 commit 16ad839 Author: Mark Bloch <mbloch@nvidia.com> Date: Wed Mar 19 16:02:59 2025 +0200 net/mlx5: Lag, use port selection tables when available As queue affinity is being deprecated and will no longer be supported in the future, Always check for the presence of the port selection namespace. When available, leverage it to distribute traffic across the physical ports via steering, ensuring compatibility with future NICs. Signed-off-by: Mark Bloch <mbloch@nvidia.com> Reviewed-by: Maor Gottlieb <maorg@nvidia.com> Signed-off-by: Tariq Toukan <tariqt@nvidia.com> Link: https://patch.msgid.link/1742392983-153050-2-git-send-email-tariqt@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Benjamin Poirier <bpoirier@redhat.com>
1 parent c70e368 commit ee94431

File tree

1 file changed

+9
-29
lines changed
  • drivers/net/ethernet/mellanox/mlx5/core/lag

1 file changed

+9
-29
lines changed

drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -583,16 +583,22 @@ void mlx5_modify_lag(struct mlx5_lag *ldev,
583583
}
584584
}
585585

586-
static int mlx5_lag_set_port_sel_mode_roce(struct mlx5_lag *ldev,
587-
unsigned long *flags)
586+
static int mlx5_lag_set_port_sel_mode(struct mlx5_lag *ldev,
587+
enum mlx5_lag_mode mode,
588+
unsigned long *flags)
588589
{
589590
int first_idx = mlx5_lag_get_dev_index_by_seq(ldev, MLX5_LAG_P1);
590591
struct mlx5_core_dev *dev0;
591592

592593
if (first_idx < 0)
593594
return -EINVAL;
594595

596+
if (mode == MLX5_LAG_MODE_MPESW ||
597+
mode == MLX5_LAG_MODE_MULTIPATH)
598+
return 0;
599+
595600
dev0 = ldev->pf[first_idx].dev;
601+
596602
if (!MLX5_CAP_PORT_SELECTION(dev0, port_select_flow_table)) {
597603
if (ldev->ports > 2)
598604
return -EINVAL;
@@ -607,32 +613,10 @@ static int mlx5_lag_set_port_sel_mode_roce(struct mlx5_lag *ldev,
607613
return 0;
608614
}
609615

610-
static void mlx5_lag_set_port_sel_mode_offloads(struct mlx5_lag *ldev,
611-
struct lag_tracker *tracker,
612-
enum mlx5_lag_mode mode,
613-
unsigned long *flags)
614-
{
615-
int first_idx = mlx5_lag_get_dev_index_by_seq(ldev, MLX5_LAG_P1);
616-
struct lag_func *dev0;
617-
618-
if (first_idx < 0 || mode == MLX5_LAG_MODE_MPESW)
619-
return;
620-
621-
dev0 = &ldev->pf[first_idx];
622-
if (MLX5_CAP_PORT_SELECTION(dev0->dev, port_select_flow_table) &&
623-
tracker->tx_type == NETDEV_LAG_TX_TYPE_HASH) {
624-
if (ldev->ports > 2)
625-
ldev->buckets = MLX5_LAG_MAX_HASH_BUCKETS;
626-
set_bit(MLX5_LAG_MODE_FLAG_HASH_BASED, flags);
627-
}
628-
}
629-
630616
static int mlx5_lag_set_flags(struct mlx5_lag *ldev, enum mlx5_lag_mode mode,
631617
struct lag_tracker *tracker, bool shared_fdb,
632618
unsigned long *flags)
633619
{
634-
bool roce_lag = mode == MLX5_LAG_MODE_ROCE;
635-
636620
*flags = 0;
637621
if (shared_fdb) {
638622
set_bit(MLX5_LAG_MODE_FLAG_SHARED_FDB, flags);
@@ -642,11 +626,7 @@ static int mlx5_lag_set_flags(struct mlx5_lag *ldev, enum mlx5_lag_mode mode,
642626
if (mode == MLX5_LAG_MODE_MPESW)
643627
set_bit(MLX5_LAG_MODE_FLAG_FDB_SEL_MODE_NATIVE, flags);
644628

645-
if (roce_lag)
646-
return mlx5_lag_set_port_sel_mode_roce(ldev, flags);
647-
648-
mlx5_lag_set_port_sel_mode_offloads(ldev, tracker, mode, flags);
649-
return 0;
629+
return mlx5_lag_set_port_sel_mode(ldev, mode, flags);
650630
}
651631

652632
char *mlx5_get_str_port_sel_mode(enum mlx5_lag_mode mode, unsigned long flags)

0 commit comments

Comments
 (0)