From: Yael Chemla Set rxfh_indir_space to the maximum indirection table size the driver can support: the next power of two above MLX5E_MAX_NUM_CHANNELS times MLX5E_UNIFORM_SPREAD_RQT_FACTOR. Without this, ethtool_rxfh_ctxs_can_resize() returns -EINVAL, blocking non-default RSS contexts from tracking indirection table size changes when the channel count changes. Signed-off-by: Yael Chemla Reviewed-by: Nimrod Oren Signed-off-by: Tariq Toukan --- drivers/net/ethernet/mellanox/mlx5/core/en/rqt.c | 2 -- drivers/net/ethernet/mellanox/mlx5/core/en/rqt.h | 1 + drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c | 5 +++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/rqt.c b/drivers/net/ethernet/mellanox/mlx5/core/en/rqt.c index bcafb4bf9415..a3382f6a6b74 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/rqt.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/rqt.c @@ -168,8 +168,6 @@ int mlx5e_rqt_init_indir(struct mlx5e_rqt *rqt, struct mlx5_core_dev *mdev, return err; } -#define MLX5E_UNIFORM_SPREAD_RQT_FACTOR 2 - u32 mlx5e_rqt_size(struct mlx5_core_dev *mdev, unsigned int num_channels) { u32 rqt_size = max_t(u32, MLX5E_INDIR_MIN_RQT_SIZE, diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/rqt.h b/drivers/net/ethernet/mellanox/mlx5/core/en/rqt.h index e0bc30308c77..680700e7437f 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/rqt.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/rqt.h @@ -7,6 +7,7 @@ #include #define MLX5E_INDIR_MIN_RQT_SIZE (BIT(8)) +#define MLX5E_UNIFORM_SPREAD_RQT_FACTOR 2 struct mlx5_core_dev; diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c index a6da0219723c..c483008e33e9 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c @@ -45,6 +45,10 @@ #define LANES_UNKNOWN 0 +#define MLX5E_MAX_INDIR_RQT_SIZE \ + roundup_pow_of_two(MLX5E_MAX_NUM_CHANNELS * \ + MLX5E_UNIFORM_SPREAD_RQT_FACTOR) + void mlx5e_ethtool_get_drvinfo(struct mlx5e_priv *priv, struct ethtool_drvinfo *drvinfo) { @@ -2692,6 +2696,7 @@ const struct ethtool_ops mlx5e_ethtool_ops = { .supported_input_xfrm = RXH_XFRM_SYM_OR_XOR, .supported_ring_params = ETHTOOL_RING_USE_TCP_DATA_SPLIT | ETHTOOL_RING_USE_HDS_THRS, + .rxfh_indir_space = MLX5E_MAX_INDIR_RQT_SIZE, .get_drvinfo = mlx5e_get_drvinfo, .get_link = ethtool_op_get_link, .get_link_ext_state = mlx5e_get_link_ext_state, -- 2.44.0