mirror of
https://github.com/torvalds/linux.git
synced 2026-06-03 12:03:54 +02:00
net/mlx5e: Use TIR API in mlx5e_modify_tirs_lb()
Extend the TIR API and use it in mlx5e_modify_tirs_lb() instead of the explicit modify_tir code. Signed-off-by: Tariq Toukan <tariqt@nvidia.com> Reviewed-by: Carolina Jubran <cjubran@nvidia.com> Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com> Reviewed-by: Simon Horman <horms@kernel.org> Link: https://patch.msgid.link/1761831159-1013140-3-git-send-email-tariqt@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
091400a5d4
commit
5c51a86122
|
|
@ -146,6 +146,31 @@ void mlx5e_tir_builder_build_direct(struct mlx5e_tir_builder *builder)
|
|||
MLX5_SET(tirc, tirc, rx_hash_fn, MLX5_RX_HASH_FN_INVERTED_XOR8);
|
||||
}
|
||||
|
||||
static void mlx5e_tir_context_self_lb_block(void *tirc, bool enable_uc_lb,
|
||||
bool enable_mc_lb)
|
||||
{
|
||||
u8 lb_flags = 0;
|
||||
|
||||
if (enable_uc_lb)
|
||||
lb_flags = MLX5_TIRC_SELF_LB_BLOCK_BLOCK_UNICAST;
|
||||
if (enable_mc_lb)
|
||||
lb_flags |= MLX5_TIRC_SELF_LB_BLOCK_BLOCK_MULTICAST;
|
||||
|
||||
MLX5_SET(tirc, tirc, self_lb_block, lb_flags);
|
||||
}
|
||||
|
||||
void mlx5e_tir_builder_build_self_lb_block(struct mlx5e_tir_builder *builder,
|
||||
bool enable_uc_lb,
|
||||
bool enable_mc_lb)
|
||||
{
|
||||
void *tirc = mlx5e_tir_builder_get_tirc(builder);
|
||||
|
||||
if (builder->modify)
|
||||
MLX5_SET(modify_tir_in, builder->in, bitmask.self_lb_en, 1);
|
||||
|
||||
mlx5e_tir_context_self_lb_block(tirc, enable_uc_lb, enable_mc_lb);
|
||||
}
|
||||
|
||||
void mlx5e_tir_builder_build_tls(struct mlx5e_tir_builder *builder)
|
||||
{
|
||||
void *tirc = mlx5e_tir_builder_get_tirc(builder);
|
||||
|
|
@ -153,9 +178,7 @@ void mlx5e_tir_builder_build_tls(struct mlx5e_tir_builder *builder)
|
|||
WARN_ON(builder->modify);
|
||||
|
||||
MLX5_SET(tirc, tirc, tls_en, 1);
|
||||
MLX5_SET(tirc, tirc, self_lb_block,
|
||||
MLX5_TIRC_SELF_LB_BLOCK_BLOCK_UNICAST |
|
||||
MLX5_TIRC_SELF_LB_BLOCK_BLOCK_MULTICAST);
|
||||
mlx5e_tir_context_self_lb_block(tirc, true, true);
|
||||
}
|
||||
|
||||
int mlx5e_tir_init(struct mlx5e_tir *tir, struct mlx5e_tir_builder *builder,
|
||||
|
|
|
|||
|
|
@ -35,6 +35,9 @@ void mlx5e_tir_builder_build_rss(struct mlx5e_tir_builder *builder,
|
|||
const struct mlx5e_rss_params_traffic_type *rss_tt,
|
||||
bool inner);
|
||||
void mlx5e_tir_builder_build_direct(struct mlx5e_tir_builder *builder);
|
||||
void mlx5e_tir_builder_build_self_lb_block(struct mlx5e_tir_builder *builder,
|
||||
bool enable_uc_lb,
|
||||
bool enable_mc_lb);
|
||||
void mlx5e_tir_builder_build_tls(struct mlx5e_tir_builder *builder);
|
||||
|
||||
struct mlx5_core_dev;
|
||||
|
|
|
|||
|
|
@ -250,44 +250,31 @@ void mlx5e_destroy_mdev_resources(struct mlx5_core_dev *mdev)
|
|||
int mlx5e_modify_tirs_lb(struct mlx5_core_dev *mdev, bool enable_uc_lb,
|
||||
bool enable_mc_lb)
|
||||
{
|
||||
struct mlx5e_tir_builder *builder;
|
||||
struct mlx5e_tir *tir;
|
||||
u8 lb_flags = 0;
|
||||
int err = 0;
|
||||
u32 tirn = 0;
|
||||
int inlen;
|
||||
void *in;
|
||||
int err = 0;
|
||||
|
||||
inlen = MLX5_ST_SZ_BYTES(modify_tir_in);
|
||||
in = kvzalloc(inlen, GFP_KERNEL);
|
||||
if (!in)
|
||||
builder = mlx5e_tir_builder_alloc(true);
|
||||
if (!builder)
|
||||
return -ENOMEM;
|
||||
|
||||
if (enable_uc_lb)
|
||||
lb_flags = MLX5_TIRC_SELF_LB_BLOCK_BLOCK_UNICAST;
|
||||
|
||||
if (enable_mc_lb)
|
||||
lb_flags |= MLX5_TIRC_SELF_LB_BLOCK_BLOCK_MULTICAST;
|
||||
|
||||
if (lb_flags)
|
||||
MLX5_SET(modify_tir_in, in, ctx.self_lb_block, lb_flags);
|
||||
|
||||
MLX5_SET(modify_tir_in, in, bitmask.self_lb_en, 1);
|
||||
mlx5e_tir_builder_build_self_lb_block(builder, enable_uc_lb,
|
||||
enable_mc_lb);
|
||||
|
||||
mutex_lock(&mdev->mlx5e_res.hw_objs.td.list_lock);
|
||||
list_for_each_entry(tir, &mdev->mlx5e_res.hw_objs.td.tirs_list, list) {
|
||||
tirn = tir->tirn;
|
||||
err = mlx5_core_modify_tir(mdev, tirn, in);
|
||||
if (err)
|
||||
err = mlx5e_tir_modify(tir, builder);
|
||||
if (err) {
|
||||
mlx5_core_err(mdev,
|
||||
"modify tir(0x%x) enable_lb uc(%d) mc(%d) failed, %d\n",
|
||||
mlx5e_tir_get_tirn(tir),
|
||||
enable_uc_lb, enable_mc_lb, err);
|
||||
break;
|
||||
}
|
||||
}
|
||||
mutex_unlock(&mdev->mlx5e_res.hw_objs.td.list_lock);
|
||||
|
||||
kvfree(in);
|
||||
if (err)
|
||||
mlx5_core_err(mdev,
|
||||
"modify tir(0x%x) enable_lb uc(%d) mc(%d) failed, %d\n",
|
||||
tirn,
|
||||
enable_uc_lb, enable_mc_lb, err);
|
||||
mlx5e_tir_builder_free(builder);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user