Commit fc92cddd authored by Carolina Jubran's avatar Carolina Jubran Committed by Jakub Kicinski
Browse files

net/mlx5e: Introduce mlx5e_rss_init_params



Introduce a dedicated structure to group RSS initialization parameters
that are only used during RSS creation, and drop the "init" prefix
from pkt_merge_param.

No functional changes.

Signed-off-by: default avatarCarolina Jubran <cjubran@nvidia.com>
Signed-off-by: default avatarTariq Toukan <tariqt@nvidia.com>
Link: https://patch.msgid.link/1759094723-843774-6-git-send-email-tariqt@nvidia.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent a3f69641
Loading
Loading
Loading
Loading
+26 −23
Original line number Diff line number Diff line
@@ -193,9 +193,9 @@ mlx5e_rss_get_tt_config(struct mlx5e_rss *rss, enum mlx5_traffic_types tt)
	return rss_tt;
}

static int mlx5e_rss_create_tir(struct mlx5e_rss *rss,
				enum mlx5_traffic_types tt,
				const struct mlx5e_packet_merge_param *init_pkt_merge_param,
static int
mlx5e_rss_create_tir(struct mlx5e_rss *rss, enum mlx5_traffic_types tt,
		     const struct mlx5e_packet_merge_param *pkt_merge_param,
		     bool inner)
{
	struct mlx5e_rss_params_traffic_type rss_tt;
@@ -229,7 +229,7 @@ static int mlx5e_rss_create_tir(struct mlx5e_rss *rss,
	rqtn = mlx5e_rqt_get_rqtn(&rss->rqt);
	mlx5e_tir_builder_build_rqt(builder, rss->mdev->mlx5e_res.hw_objs.td.tdn,
				    rqtn, rss->inner_ft_support);
	mlx5e_tir_builder_build_packet_merge(builder, init_pkt_merge_param);
	mlx5e_tir_builder_build_packet_merge(builder, pkt_merge_param);
	rss_tt = mlx5e_rss_get_tt_config(rss, tt);
	mlx5e_tir_builder_build_rss(builder, &rss->hash, &rss_tt, inner);

@@ -265,15 +265,16 @@ static void mlx5e_rss_destroy_tir(struct mlx5e_rss *rss, enum mlx5_traffic_types
	*tir_p = NULL;
}

static int mlx5e_rss_create_tirs(struct mlx5e_rss *rss,
				 const struct mlx5e_packet_merge_param *init_pkt_merge_param,
static int
mlx5e_rss_create_tirs(struct mlx5e_rss *rss,
		      const struct mlx5e_packet_merge_param *pkt_merge_param,
		      bool inner)
{
	enum mlx5_traffic_types tt, max_tt;
	int err;

	for (tt = 0; tt < MLX5E_NUM_INDIR_TIRS; tt++) {
		err = mlx5e_rss_create_tir(rss, tt, init_pkt_merge_param, inner);
		err = mlx5e_rss_create_tir(rss, tt, pkt_merge_param, inner);
		if (err)
			goto err_destroy_tirs;
	}
@@ -359,10 +360,9 @@ static int mlx5e_rss_init_no_tirs(struct mlx5e_rss *rss)
				     rss->drop_rqn, rss->indir.max_table_size);
}

struct mlx5e_rss *mlx5e_rss_init(struct mlx5_core_dev *mdev, bool inner_ft_support, u32 drop_rqn,
				 const struct mlx5e_packet_merge_param *init_pkt_merge_param,
				 enum mlx5e_rss_init_type type, unsigned int nch,
				 unsigned int max_nch)
struct mlx5e_rss *
mlx5e_rss_init(struct mlx5_core_dev *mdev, bool inner_ft_support, u32 drop_rqn,
	       const struct mlx5e_rss_init_params *init_params)
{
	u32 rqt_max_size, rqt_size;
	struct mlx5e_rss *rss;
@@ -372,8 +372,8 @@ struct mlx5e_rss *mlx5e_rss_init(struct mlx5_core_dev *mdev, bool inner_ft_suppo
	if (!rss)
		return ERR_PTR(-ENOMEM);

	rqt_size = mlx5e_rqt_size(mdev, nch);
	rqt_max_size = mlx5e_rqt_size(mdev, max_nch);
	rqt_size = mlx5e_rqt_size(mdev, init_params->nch);
	rqt_max_size = mlx5e_rqt_size(mdev, init_params->max_nch);
	err = mlx5e_rss_params_indir_init(&rss->indir, rqt_size, rqt_max_size);
	if (err)
		goto err_free_rss;
@@ -386,15 +386,18 @@ struct mlx5e_rss *mlx5e_rss_init(struct mlx5_core_dev *mdev, bool inner_ft_suppo
	if (err)
		goto err_free_indir;

	if (type == MLX5E_RSS_INIT_NO_TIRS)
	if (init_params->type == MLX5E_RSS_INIT_NO_TIRS)
		goto out;

	err = mlx5e_rss_create_tirs(rss, init_pkt_merge_param, false);
	err = mlx5e_rss_create_tirs(rss, init_params->pkt_merge_param,
				    false);
	if (err)
		goto err_destroy_rqt;

	if (inner_ft_support) {
		err = mlx5e_rss_create_tirs(rss, init_pkt_merge_param, true);
		err = mlx5e_rss_create_tirs(rss,
					    init_params->pkt_merge_param,
					    true);
		if (err)
			goto err_destroy_tirs;
	}
@@ -470,9 +473,9 @@ bool mlx5e_rss_valid_tir(struct mlx5e_rss *rss, enum mlx5_traffic_types tt, bool
/* Fill the "tirn" output parameter.
 * Create the requested TIR if it's its first usage.
 */
int mlx5e_rss_obtain_tirn(struct mlx5e_rss *rss,
			  enum mlx5_traffic_types tt,
			  const struct mlx5e_packet_merge_param *init_pkt_merge_param,
int
mlx5e_rss_obtain_tirn(struct mlx5e_rss *rss, enum mlx5_traffic_types tt,
		      const struct mlx5e_packet_merge_param *pkt_merge_param,
		      bool inner, u32 *tirn)
{
	struct mlx5e_tir *tir;
@@ -481,7 +484,7 @@ int mlx5e_rss_obtain_tirn(struct mlx5e_rss *rss,
	if (!tir) { /* TIR doesn't exist, create one */
		int err;

		err = mlx5e_rss_create_tir(rss, tt, init_pkt_merge_param, inner);
		err = mlx5e_rss_create_tir(rss, tt, pkt_merge_param, inner);
		if (err)
			return err;
		tir = rss_get_tir(rss, tt, inner);
+14 −8
Original line number Diff line number Diff line
@@ -13,6 +13,13 @@ enum mlx5e_rss_init_type {
	MLX5E_RSS_INIT_TIRS
};

struct mlx5e_rss_init_params {
	enum mlx5e_rss_init_type type;
	const struct mlx5e_packet_merge_param *pkt_merge_param;
	unsigned int nch;
	unsigned int max_nch;
};

struct mlx5e_rss_params_traffic_type
mlx5e_rss_get_default_tt_config(enum mlx5_traffic_types tt);

@@ -22,10 +29,9 @@ int mlx5e_rss_params_indir_init(struct mlx5e_rss_params_indir *indir,
				u32 actual_table_size, u32 max_table_size);
void mlx5e_rss_params_indir_cleanup(struct mlx5e_rss_params_indir *indir);
void mlx5e_rss_params_indir_modify_actual_size(struct mlx5e_rss *rss, u32 num_channels);
struct mlx5e_rss *mlx5e_rss_init(struct mlx5_core_dev *mdev, bool inner_ft_support, u32 drop_rqn,
				 const struct mlx5e_packet_merge_param *init_pkt_merge_param,
				 enum mlx5e_rss_init_type type, unsigned int nch,
				 unsigned int max_nch);
struct mlx5e_rss *
mlx5e_rss_init(struct mlx5_core_dev *mdev, bool inner_ft_support, u32 drop_rqn,
	       const struct mlx5e_rss_init_params *init_params);
int mlx5e_rss_cleanup(struct mlx5e_rss *rss);

void mlx5e_rss_refcnt_inc(struct mlx5e_rss *rss);
@@ -37,9 +43,9 @@ u32 mlx5e_rss_get_tirn(struct mlx5e_rss *rss, enum mlx5_traffic_types tt,
		       bool inner);
bool mlx5e_rss_valid_tir(struct mlx5e_rss *rss, enum mlx5_traffic_types tt, bool inner);
u32 mlx5e_rss_get_rqtn(struct mlx5e_rss *rss);
int mlx5e_rss_obtain_tirn(struct mlx5e_rss *rss,
			  enum mlx5_traffic_types tt,
			  const struct mlx5e_packet_merge_param *init_pkt_merge_param,
int
mlx5e_rss_obtain_tirn(struct mlx5e_rss *rss, enum mlx5_traffic_types tt,
		      const struct mlx5e_packet_merge_param *pkt_merge_param,
		      bool inner, u32 *tirn);

void mlx5e_rss_enable(struct mlx5e_rss *rss, u32 *rqns, u32 *vhca_ids, unsigned int num_rqns);
+22 −7
Original line number Diff line number Diff line
@@ -54,17 +54,25 @@ static int mlx5e_rx_res_rss_init_def(struct mlx5e_rx_res *res,
				     unsigned int init_nch)
{
	bool inner_ft_support = res->features & MLX5E_RX_RES_FEATURE_INNER_FT;
	struct mlx5e_rss_init_params init_params;
	struct mlx5e_rss *rss;

	if (WARN_ON(res->rss[0]))
		return -EINVAL;

	init_params = (struct mlx5e_rss_init_params) {
		.type = MLX5E_RSS_INIT_TIRS,
		.pkt_merge_param = &res->pkt_merge_param,
		.nch = init_nch,
		.max_nch = res->max_nch,
	};

	rss = mlx5e_rss_init(res->mdev, inner_ft_support, res->drop_rqn,
			     &res->pkt_merge_param, MLX5E_RSS_INIT_TIRS, init_nch, res->max_nch);
			     &init_params);
	if (IS_ERR(rss))
		return PTR_ERR(rss);

	mlx5e_rss_set_indir_uniform(rss, init_nch);
	mlx5e_rss_set_indir_uniform(rss, init_params.nch);

	res->rss[0] = rss;

@@ -74,18 +82,25 @@ static int mlx5e_rx_res_rss_init_def(struct mlx5e_rx_res *res,
int mlx5e_rx_res_rss_init(struct mlx5e_rx_res *res, u32 rss_idx, unsigned int init_nch)
{
	bool inner_ft_support = res->features & MLX5E_RX_RES_FEATURE_INNER_FT;
	struct mlx5e_rss_init_params init_params;
	struct mlx5e_rss *rss;

	if (WARN_ON_ONCE(res->rss[rss_idx]))
		return -ENOSPC;

	init_params = (struct mlx5e_rss_init_params) {
		.type = MLX5E_RSS_INIT_NO_TIRS,
		.pkt_merge_param = &res->pkt_merge_param,
		.nch = init_nch,
		.max_nch = res->max_nch,
	};

	rss = mlx5e_rss_init(res->mdev, inner_ft_support, res->drop_rqn,
			     &res->pkt_merge_param, MLX5E_RSS_INIT_NO_TIRS, init_nch,
			     res->max_nch);
			     &init_params);
	if (IS_ERR(rss))
		return PTR_ERR(rss);

	mlx5e_rss_set_indir_uniform(rss, init_nch);
	mlx5e_rss_set_indir_uniform(rss, init_params.nch);
	if (res->rss_active) {
		u32 *vhca_ids = get_vhca_ids(res, 0);

@@ -438,7 +453,7 @@ static void mlx5e_rx_res_ptp_destroy(struct mlx5e_rx_res *res)
struct mlx5e_rx_res *
mlx5e_rx_res_create(struct mlx5_core_dev *mdev, enum mlx5e_rx_res_features features,
		    unsigned int max_nch, u32 drop_rqn,
		    const struct mlx5e_packet_merge_param *init_pkt_merge_param,
		    const struct mlx5e_packet_merge_param *pkt_merge_param,
		    unsigned int init_nch)
{
	bool multi_vhca = features & MLX5E_RX_RES_FEATURE_MULTI_VHCA;
@@ -454,7 +469,7 @@ mlx5e_rx_res_create(struct mlx5_core_dev *mdev, enum mlx5e_rx_res_features featu
	res->max_nch = max_nch;
	res->drop_rqn = drop_rqn;

	res->pkt_merge_param = *init_pkt_merge_param;
	res->pkt_merge_param = *pkt_merge_param;
	init_rwsem(&res->pkt_merge_param_sem);

	err = mlx5e_rx_res_rss_init_def(res, init_nch);
+1 −1
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ enum mlx5e_rx_res_features {
struct mlx5e_rx_res *
mlx5e_rx_res_create(struct mlx5_core_dev *mdev, enum mlx5e_rx_res_features features,
		    unsigned int max_nch, u32 drop_rqn,
		    const struct mlx5e_packet_merge_param *init_pkt_merge_param,
		    const struct mlx5e_packet_merge_param *pkt_merge_param,
		    unsigned int init_nch);
void mlx5e_rx_res_destroy(struct mlx5e_rx_res *res);