mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
net/mlx5e: Refactor mlx5e_rss_init() and mlx5e_rss_free() API's
Introduce code refactoring below: 1) Introduce single API for creating and destroying rss object, mlx5e_rss_create() and mlx5e_rss_destroy() respectively. 2) mlx5e_rss_create() constructs and initializes RSS object depends on a function new param enum mlx5e_rss_create_type. Callers (like rx_res.c) will no longer need to allocate RSS object via mlx5e_rss_alloc() and initialize it immediately via mlx5e_rss_init_no_tirs() or mlx5e_rss_init(), this will be done by a single call to mlx5e_rss_create(). Hence, mlx5e_rss_alloc() and mlx5e_rss_init_no_tirs() have been removed from rss.h file and became static functions. Signed-off-by: Adham Faris <afaris@nvidia.com> Reviewed-by: Tariq Toukan <tariqt@nvidia.com> Reviewed-by: Jacob Keller <jacob.e.keller@intel.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
This commit is contained in:
parent
cae8e6dea2
commit
0d806cf9c0
3 changed files with 48 additions and 54 deletions
|
@ -81,12 +81,12 @@ struct mlx5e_rss {
|
|||
refcount_t refcnt;
|
||||
};
|
||||
|
||||
struct mlx5e_rss *mlx5e_rss_alloc(void)
|
||||
static struct mlx5e_rss *mlx5e_rss_alloc(void)
|
||||
{
|
||||
return kvzalloc(sizeof(struct mlx5e_rss), GFP_KERNEL);
|
||||
}
|
||||
|
||||
void mlx5e_rss_free(struct mlx5e_rss *rss)
|
||||
static void mlx5e_rss_free(struct mlx5e_rss *rss)
|
||||
{
|
||||
kvfree(rss);
|
||||
}
|
||||
|
@ -282,28 +282,35 @@ static int mlx5e_rss_update_tirs(struct mlx5e_rss *rss)
|
|||
return retval;
|
||||
}
|
||||
|
||||
int mlx5e_rss_init_no_tirs(struct mlx5e_rss *rss, struct mlx5_core_dev *mdev,
|
||||
bool inner_ft_support, u32 drop_rqn)
|
||||
static int mlx5e_rss_init_no_tirs(struct mlx5e_rss *rss)
|
||||
{
|
||||
mlx5e_rss_params_init(rss);
|
||||
refcount_set(&rss->refcnt, 1);
|
||||
|
||||
return mlx5e_rqt_init_direct(&rss->rqt, rss->mdev, true, rss->drop_rqn);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
struct mlx5e_rss *rss;
|
||||
int err;
|
||||
|
||||
rss = mlx5e_rss_alloc();
|
||||
if (!rss)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
rss->mdev = mdev;
|
||||
rss->inner_ft_support = inner_ft_support;
|
||||
rss->drop_rqn = drop_rqn;
|
||||
|
||||
mlx5e_rss_params_init(rss);
|
||||
refcount_set(&rss->refcnt, 1);
|
||||
|
||||
return mlx5e_rqt_init_direct(&rss->rqt, mdev, true, drop_rqn);
|
||||
}
|
||||
|
||||
int mlx5e_rss_init(struct mlx5e_rss *rss, struct mlx5_core_dev *mdev,
|
||||
bool inner_ft_support, u32 drop_rqn,
|
||||
const struct mlx5e_packet_merge_param *init_pkt_merge_param)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = mlx5e_rss_init_no_tirs(rss, mdev, inner_ft_support, drop_rqn);
|
||||
err = mlx5e_rss_init_no_tirs(rss);
|
||||
if (err)
|
||||
goto err_out;
|
||||
goto err_free_rss;
|
||||
|
||||
if (type == MLX5E_RSS_INIT_NO_TIRS)
|
||||
goto out;
|
||||
|
||||
err = mlx5e_rss_create_tirs(rss, init_pkt_merge_param, false);
|
||||
if (err)
|
||||
|
@ -315,14 +322,16 @@ int mlx5e_rss_init(struct mlx5e_rss *rss, struct mlx5_core_dev *mdev,
|
|||
goto err_destroy_tirs;
|
||||
}
|
||||
|
||||
return 0;
|
||||
out:
|
||||
return rss;
|
||||
|
||||
err_destroy_tirs:
|
||||
mlx5e_rss_destroy_tirs(rss, false);
|
||||
err_destroy_rqt:
|
||||
mlx5e_rqt_destroy(&rss->rqt);
|
||||
err_out:
|
||||
return err;
|
||||
err_free_rss:
|
||||
mlx5e_rss_free(rss);
|
||||
return ERR_PTR(err);
|
||||
}
|
||||
|
||||
int mlx5e_rss_cleanup(struct mlx5e_rss *rss)
|
||||
|
@ -336,6 +345,7 @@ int mlx5e_rss_cleanup(struct mlx5e_rss *rss)
|
|||
mlx5e_rss_destroy_tirs(rss, true);
|
||||
|
||||
mlx5e_rqt_destroy(&rss->rqt);
|
||||
mlx5e_rss_free(rss);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -8,18 +8,19 @@
|
|||
#include "tir.h"
|
||||
#include "fs.h"
|
||||
|
||||
enum mlx5e_rss_init_type {
|
||||
MLX5E_RSS_INIT_NO_TIRS = 0,
|
||||
MLX5E_RSS_INIT_TIRS
|
||||
};
|
||||
|
||||
struct mlx5e_rss_params_traffic_type
|
||||
mlx5e_rss_get_default_tt_config(enum mlx5_traffic_types tt);
|
||||
|
||||
struct mlx5e_rss;
|
||||
|
||||
struct mlx5e_rss *mlx5e_rss_alloc(void);
|
||||
void mlx5e_rss_free(struct mlx5e_rss *rss);
|
||||
int mlx5e_rss_init(struct mlx5e_rss *rss, struct mlx5_core_dev *mdev,
|
||||
bool inner_ft_support, u32 drop_rqn,
|
||||
const struct mlx5e_packet_merge_param *init_pkt_merge_param);
|
||||
int mlx5e_rss_init_no_tirs(struct mlx5e_rss *rss, struct mlx5_core_dev *mdev,
|
||||
bool inner_ft_support, u32 drop_rqn);
|
||||
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);
|
||||
int mlx5e_rss_cleanup(struct mlx5e_rss *rss);
|
||||
|
||||
void mlx5e_rss_refcnt_inc(struct mlx5e_rss *rss);
|
||||
|
|
|
@ -39,36 +39,27 @@ static int mlx5e_rx_res_rss_init_def(struct mlx5e_rx_res *res,
|
|||
{
|
||||
bool inner_ft_support = res->features & MLX5E_RX_RES_FEATURE_INNER_FT;
|
||||
struct mlx5e_rss *rss;
|
||||
int err;
|
||||
|
||||
if (WARN_ON(res->rss[0]))
|
||||
return -EINVAL;
|
||||
|
||||
rss = mlx5e_rss_alloc();
|
||||
if (!rss)
|
||||
return -ENOMEM;
|
||||
|
||||
err = mlx5e_rss_init(rss, res->mdev, inner_ft_support, res->drop_rqn,
|
||||
&res->pkt_merge_param);
|
||||
if (err)
|
||||
goto err_rss_free;
|
||||
rss = mlx5e_rss_init(res->mdev, inner_ft_support, res->drop_rqn,
|
||||
&res->pkt_merge_param, MLX5E_RSS_INIT_TIRS);
|
||||
if (IS_ERR(rss))
|
||||
return PTR_ERR(rss);
|
||||
|
||||
mlx5e_rss_set_indir_uniform(rss, init_nch);
|
||||
|
||||
res->rss[0] = rss;
|
||||
|
||||
return 0;
|
||||
|
||||
err_rss_free:
|
||||
mlx5e_rss_free(rss);
|
||||
return err;
|
||||
}
|
||||
|
||||
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 *rss;
|
||||
int err, i;
|
||||
int i;
|
||||
|
||||
for (i = 1; i < MLX5E_MAX_NUM_RSS; i++)
|
||||
if (!res->rss[i])
|
||||
|
@ -77,13 +68,10 @@ int mlx5e_rx_res_rss_init(struct mlx5e_rx_res *res, u32 *rss_idx, unsigned int i
|
|||
if (i == MLX5E_MAX_NUM_RSS)
|
||||
return -ENOSPC;
|
||||
|
||||
rss = mlx5e_rss_alloc();
|
||||
if (!rss)
|
||||
return -ENOMEM;
|
||||
|
||||
err = mlx5e_rss_init_no_tirs(rss, res->mdev, inner_ft_support, res->drop_rqn);
|
||||
if (err)
|
||||
goto err_rss_free;
|
||||
rss = mlx5e_rss_init(res->mdev, inner_ft_support, res->drop_rqn,
|
||||
&res->pkt_merge_param, MLX5E_RSS_INIT_NO_TIRS);
|
||||
if (IS_ERR(rss))
|
||||
return PTR_ERR(rss);
|
||||
|
||||
mlx5e_rss_set_indir_uniform(rss, init_nch);
|
||||
if (res->rss_active)
|
||||
|
@ -93,10 +81,6 @@ int mlx5e_rx_res_rss_init(struct mlx5e_rx_res *res, u32 *rss_idx, unsigned int i
|
|||
*rss_idx = i;
|
||||
|
||||
return 0;
|
||||
|
||||
err_rss_free:
|
||||
mlx5e_rss_free(rss);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int __mlx5e_rx_res_rss_destroy(struct mlx5e_rx_res *res, u32 rss_idx)
|
||||
|
@ -108,7 +92,6 @@ static int __mlx5e_rx_res_rss_destroy(struct mlx5e_rx_res *res, u32 rss_idx)
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
mlx5e_rss_free(rss);
|
||||
res->rss[rss_idx] = NULL;
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Add table
Reference in a new issue