Commit 90b1df74 authored by Liu, Changcheng's avatar Liu, Changcheng Committed by Saeed Mahameed

net/mlx5: detect and enable bypass port select flow table

Use port selection capability port_select_flow_table_bypass
bit to detect and enable explicit port affinity even when
in lag hash mode.
Signed-off-by: default avatarLiu, Changcheng <jerrliu@nvidia.com>
Reviewed-by: default avatarMark Bloch <mbloch@nvidia.com>
Reviewed-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
parent b146a7cd
......@@ -652,6 +652,33 @@ static int handle_hca_cap_roce(struct mlx5_core_dev *dev, void *set_ctx)
return err;
}
static int handle_hca_cap_port_selection(struct mlx5_core_dev *dev,
void *set_ctx)
{
void *set_hca_cap;
int err;
if (!MLX5_CAP_GEN(dev, port_selection_cap))
return 0;
err = mlx5_core_get_caps(dev, MLX5_CAP_PORT_SELECTION);
if (err)
return err;
if (MLX5_CAP_PORT_SELECTION(dev, port_select_flow_table_bypass) ||
!MLX5_CAP_PORT_SELECTION_MAX(dev, port_select_flow_table_bypass))
return 0;
set_hca_cap = MLX5_ADDR_OF(set_hca_cap_in, set_ctx, capability);
memcpy(set_hca_cap, dev->caps.hca[MLX5_CAP_PORT_SELECTION]->cur,
MLX5_ST_SZ_BYTES(port_selection_cap));
MLX5_SET(port_selection_cap, set_hca_cap, port_select_flow_table_bypass, 1);
err = set_caps(dev, set_ctx, MLX5_SET_HCA_CAP_OP_MODE_PORT_SELECTION);
return err;
}
static int set_hca_cap(struct mlx5_core_dev *dev)
{
int set_sz = MLX5_ST_SZ_BYTES(set_hca_cap_in);
......@@ -696,6 +723,13 @@ static int set_hca_cap(struct mlx5_core_dev *dev)
goto out;
}
memset(set_ctx, 0, set_sz);
err = handle_hca_cap_port_selection(dev, set_ctx);
if (err) {
mlx5_core_err(dev, "handle_hca_cap_port_selection failed\n");
goto out;
}
out:
kfree(set_ctx);
return err;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment