From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-19.7 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 84BD1C4338F for ; Mon, 16 Aug 2021 23:22:37 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6F4BB60EBD for ; Mon, 16 Aug 2021 23:22:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234525AbhHPXXI (ORCPT ); Mon, 16 Aug 2021 19:23:08 -0400 Received: from mail.kernel.org ([198.145.29.99]:51304 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234060AbhHPXXC (ORCPT ); Mon, 16 Aug 2021 19:23:02 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id EAE0B60F4B; Mon, 16 Aug 2021 23:22:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1629156150; bh=PSg6rHNPs51vmWz5MurCJWMOtaTw+6JlcjTCVul7xr4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=h1SaBGOUuKYs15VCFe+jPqj4J+gerHN8YI8+mtJhQv8enCjxFYHSDmqAQLaAwovH7 Tukrqr5upcsCORe2Wc13MKj5QB/Vn+Ga0hTum/JdDUp1+LIH2d8q0ixBEiDeQu2c1x 2EC63b8xBaQYLwGtmOQNFT48XWU/Hvw3IdeSQNqJIGcTuFi1xmURPz/HXGKo/8OBiS NRab1delIuO2lwm3uh9YIkR1wyj84hewmaSALD8MB9FAnjq6MT43gFy632WHboLYJN 3XzLk/dbs66WIEwgtIY6B0BEZVkSdX50f/0KW4ZsOdlz1UcGI1UV0h7uYTBcP5W6mJ axzvhTag/QtYQ== From: Saeed Mahameed To: "David S. Miller" , Jakub Kicinski Cc: netdev@vger.kernel.org, Tariq Toukan , Leon Romanovsky , Maxim Mikityanskiy , Saeed Mahameed Subject: [net-next V2 02/17] net/mlx5e: Introduce TIR create/destroy API in rx_res Date: Mon, 16 Aug 2021 16:22:04 -0700 Message-Id: <20210816232219.557083-3-saeed@kernel.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210816232219.557083-1-saeed@kernel.org> References: <20210816232219.557083-1-saeed@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Tariq Toukan Take TIR control operations in rx_res into functions. This is in preparation to supporting on-demand TIR operations in downstream patches. Signed-off-by: Tariq Toukan Reviewed-by: Maxim Mikityanskiy Signed-off-by: Saeed Mahameed --- .../ethernet/mellanox/mlx5/core/en/rx_res.c | 140 +++++++++++------- 1 file changed, 83 insertions(+), 57 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c b/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c index 2d0e8c809936..dfa492a14928 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c @@ -117,84 +117,114 @@ static void mlx5e_rx_res_rss_params_init(struct mlx5e_rx_res *res, unsigned int mlx5e_rss_get_default_tt_config(tt).rx_hash_fields; } -static int mlx5e_rx_res_rss_init(struct mlx5e_rx_res *res, - const struct mlx5e_lro_param *init_lro_param) +static void mlx5e_rx_res_rss_destroy_tir(struct mlx5e_rx_res *res, + enum mlx5_traffic_types tt, + bool inner) +{ + struct mlx5e_tir *tir; + + tir = inner ? &res->rss[tt].inner_indir_tir : &res->rss[tt].indir_tir; + mlx5e_tir_destroy(tir); +} + +static int mlx5e_rx_res_rss_create_tir(struct mlx5e_rx_res *res, + struct mlx5e_tir_builder *builder, + enum mlx5_traffic_types tt, + const struct mlx5e_lro_param *init_lro_param, + bool inner) { bool inner_ft_support = res->features & MLX5E_RX_RES_FEATURE_INNER_FT; + struct mlx5e_rss_params_traffic_type rss_tt; + struct mlx5e_tir *tir; + u32 rqtn; + int err; + + tir = inner ? &res->rss[tt].inner_indir_tir : &res->rss[tt].indir_tir; + + rqtn = mlx5e_rqt_get_rqtn(&res->indir_rqt); + mlx5e_tir_builder_build_rqt(builder, res->mdev->mlx5e_res.hw_objs.td.tdn, + rqtn, inner_ft_support); + mlx5e_tir_builder_build_lro(builder, init_lro_param); + rss_tt = mlx5e_rx_res_rss_get_current_tt_config(res, tt); + mlx5e_tir_builder_build_rss(builder, &res->rss_params.hash, &rss_tt, inner); + + err = mlx5e_tir_init(tir, builder, res->mdev, true); + if (err) { + mlx5_core_warn(res->mdev, "Failed to create %sindirect TIR: err = %d, tt = %d\n", + inner ? "inner " : "", err, tt); + return err; + } + + return 0; +} + +static int mlx5e_rx_res_rss_create_tirs(struct mlx5e_rx_res *res, + const struct mlx5e_lro_param *init_lro_param, + bool inner) +{ enum mlx5_traffic_types tt, max_tt; struct mlx5e_tir_builder *builder; - u32 indir_rqtn; int err; builder = mlx5e_tir_builder_alloc(false); if (!builder) return -ENOMEM; - err = mlx5e_rqt_init_direct(&res->indir_rqt, res->mdev, true, res->drop_rqn); - if (err) - goto out; - - indir_rqtn = mlx5e_rqt_get_rqtn(&res->indir_rqt); - for (tt = 0; tt < MLX5E_NUM_INDIR_TIRS; tt++) { - struct mlx5e_rss_params_traffic_type rss_tt; - - mlx5e_tir_builder_build_rqt(builder, res->mdev->mlx5e_res.hw_objs.td.tdn, - indir_rqtn, inner_ft_support); - mlx5e_tir_builder_build_lro(builder, init_lro_param); - rss_tt = mlx5e_rx_res_rss_get_current_tt_config(res, tt); - mlx5e_tir_builder_build_rss(builder, &res->rss_params.hash, &rss_tt, false); - - err = mlx5e_tir_init(&res->rss[tt].indir_tir, builder, res->mdev, true); - if (err) { - mlx5_core_warn(res->mdev, "Failed to create an indirect TIR: err = %d, tt = %d\n", - err, tt); + err = mlx5e_rx_res_rss_create_tir(res, builder, tt, init_lro_param, inner); + if (err) goto err_destroy_tirs; - } mlx5e_tir_builder_clear(builder); } - if (!inner_ft_support) - goto out; +out: + mlx5e_tir_builder_free(builder); + return err; - for (tt = 0; tt < MLX5E_NUM_INDIR_TIRS; tt++) { - struct mlx5e_rss_params_traffic_type rss_tt; +err_destroy_tirs: + max_tt = tt; + for (tt = 0; tt < max_tt; tt++) + mlx5e_rx_res_rss_destroy_tir(res, tt, inner); + goto out; +} - mlx5e_tir_builder_build_rqt(builder, res->mdev->mlx5e_res.hw_objs.td.tdn, - indir_rqtn, inner_ft_support); - mlx5e_tir_builder_build_lro(builder, init_lro_param); - rss_tt = mlx5e_rx_res_rss_get_current_tt_config(res, tt); - mlx5e_tir_builder_build_rss(builder, &res->rss_params.hash, &rss_tt, true); +static void mlx5e_rx_res_rss_destroy_tirs(struct mlx5e_rx_res *res, bool inner) +{ + enum mlx5_traffic_types tt; - err = mlx5e_tir_init(&res->rss[tt].inner_indir_tir, builder, res->mdev, true); - if (err) { - mlx5_core_warn(res->mdev, "Failed to create an inner indirect TIR: err = %d, tt = %d\n", - err, tt); - goto err_destroy_inner_tirs; - } + for (tt = 0; tt < MLX5E_NUM_INDIR_TIRS; tt++) + mlx5e_rx_res_rss_destroy_tir(res, tt, inner); +} - mlx5e_tir_builder_clear(builder); - } +static int mlx5e_rx_res_rss_init(struct mlx5e_rx_res *res, + const struct mlx5e_lro_param *init_lro_param) +{ + bool inner_ft_support = res->features & MLX5E_RX_RES_FEATURE_INNER_FT; + int err; - goto out; + err = mlx5e_rqt_init_direct(&res->indir_rqt, res->mdev, true, res->drop_rqn); + if (err) + return err; -err_destroy_inner_tirs: - max_tt = tt; - for (tt = 0; tt < max_tt; tt++) - mlx5e_tir_destroy(&res->rss[tt].inner_indir_tir); + err = mlx5e_rx_res_rss_create_tirs(res, init_lro_param, false); + if (err) + goto err_destroy_rqt; + + if (inner_ft_support) { + err = mlx5e_rx_res_rss_create_tirs(res, init_lro_param, true); + if (err) + goto err_destroy_tirs; + } + + return 0; - tt = MLX5E_NUM_INDIR_TIRS; err_destroy_tirs: - max_tt = tt; - for (tt = 0; tt < max_tt; tt++) - mlx5e_tir_destroy(&res->rss[tt].indir_tir); + mlx5e_rx_res_rss_destroy_tirs(res, false); +err_destroy_rqt: mlx5e_rqt_destroy(&res->indir_rqt); -out: - mlx5e_tir_builder_free(builder); - return err; } @@ -337,14 +367,10 @@ static int mlx5e_rx_res_ptp_init(struct mlx5e_rx_res *res) static void mlx5e_rx_res_rss_destroy(struct mlx5e_rx_res *res) { - enum mlx5_traffic_types tt; - - for (tt = 0; tt < MLX5E_NUM_INDIR_TIRS; tt++) - mlx5e_tir_destroy(&res->rss[tt].indir_tir); + mlx5e_rx_res_rss_destroy_tirs(res, false); if (res->features & MLX5E_RX_RES_FEATURE_INNER_FT) - for (tt = 0; tt < MLX5E_NUM_INDIR_TIRS; tt++) - mlx5e_tir_destroy(&res->rss[tt].inner_indir_tir); + mlx5e_rx_res_rss_destroy_tirs(res, true); mlx5e_rqt_destroy(&res->indir_rqt); } -- 2.31.1