]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net/mlx5e: Use TIR API in mlx5e_modify_tirs_lb()
authorTariq Toukan <tariqt@nvidia.com>
Thu, 30 Oct 2025 13:32:34 +0000 (15:32 +0200)
committerJakub Kicinski <kuba@kernel.org>
Wed, 5 Nov 2025 01:04:35 +0000 (17:04 -0800)
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>
drivers/net/ethernet/mellanox/mlx5/core/en/tir.c
drivers/net/ethernet/mellanox/mlx5/core/en/tir.h
drivers/net/ethernet/mellanox/mlx5/core/en_common.c

index 19499072f67f6205ac30b3d75f4ce0a7f545552d..0b55e77f19c8df98959afb941e095d80950ac095 100644 (file)
@@ -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,
index e8df3aaf6562ffb3349d34f127b1f061ea6997cc..958eeb959a192b0ece9851936e40c55537845f17 100644 (file)
@@ -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;
index 376a018b2db1236946abdddafefc0ce62a232e3c..022a0cf7063cdf21f70ba9b1d0b32a2f82542323 100644 (file)
@@ -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;
 }