From patchwork Mon Mar 20 14:12:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hamdan Igbaria X-Patchwork-Id: 125317 X-Patchwork-Delegate: rasland@nvidia.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 01E3E427E2; Mon, 20 Mar 2023 15:13:12 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D10F640A7F; Mon, 20 Mar 2023 15:13:11 +0100 (CET) Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam02on2047.outbound.protection.outlook.com [40.107.95.47]) by mails.dpdk.org (Postfix) with ESMTP id 257BA406BC for ; Mon, 20 Mar 2023 15:13:10 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IXbK/XisDjk+g3y91GbZHqqjUx+v4QQzJdQPd/IQkhvpsYo6MW9VD+0qeSCznB9DhPDX3xCrKVtfLGaQVsUMzt16pQb9uFw8H6suUdBGC1L3uf9dvF22dZdTcVJrvGMSNaHyjkIj+IMxCaTfgbQd2v9Cm0nM89otCTTgr1Rn8OSFYS81x6PVWZPL/qMtXi7r9KaPsTobfse7UgDhMG8eVziTaw14QhcUoYgtpUgQ9nFMyNsTnkpIBgw0HAnruNnR7EFDLkwUKDrnZsr+0N1xee8sffjZdPuorCXxU8OW7jYsXP4tBe+6bI9ayL7/BvHChGI0lD7y4lOqml5f02EVDg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=3WmEIGwL3vLo4JxXi4jnWNTDqgUH0WN5cpYzahd+ZpU=; b=hZSN/DpSCHvqtWGHtD8bSui4Bv7LYKUaPhfC5AMsrUfrWbY4GEl0jnmWi3cWtdoDv191Fo1k/LrQgyqHI9TUqHHOEZDH7j8cHrViNQvYS9BVzVBE4A/1RFC+m3wsnBDSLqMreZWP/Ug2j3bLbNjiylCPyj7+DNtFLL8NgIvJFnJwjIPV/CYXqpjfppHRJrbeW9olGA1ksClPKOErIBwB6D1o6nP7ojydrNHoXrX9Oa9CUGAjOJplJUPV461dZ58+pbe7DPZOb+eyfsMab8kiJyJJrUCjKXeGxWxJ7WRkRTfHmweJDKDC1xSE2eSDvISmdU1B9pvDmN9AAHSvyHvxoQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=monjalon.net smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3WmEIGwL3vLo4JxXi4jnWNTDqgUH0WN5cpYzahd+ZpU=; b=guz2oh2+vdt8Rt0tyOGzOhIM+CRriNicLkNOBX8nBjyn5gQKVMuq5fXq2ckrXg8V6XRlSQnTYd/vwRb5NIyeRTbDfv8ynhbKb+HNRHleGkwisTxyASmRDIpa78KIkmFp6RjXdvJUOiMGlhUh6Q5EEh3PZ/IMa9uWBTn97gi/KGI8k6SlRiy01CNvHEsYFZAuHc6+usBejPCDQHiPPR6mOnXL5ojFoGilSwmW29SBliaQsLg/iuvd0pqtjmExYx9bBTWM2WOPQkEtU2xb5OASiuEzXC28SIMWpU8tPR+WIgk/ellGL3dMBSj401fzKMvj0/sSgN1TZ6slZ1AVq8T2IQ== Received: from MW4P221CA0021.NAMP221.PROD.OUTLOOK.COM (2603:10b6:303:8b::26) by CH3PR12MB8878.namprd12.prod.outlook.com (2603:10b6:610:17e::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.37; Mon, 20 Mar 2023 14:13:08 +0000 Received: from CO1NAM11FT004.eop-nam11.prod.protection.outlook.com (2603:10b6:303:8b:cafe::33) by MW4P221CA0021.outlook.office365.com (2603:10b6:303:8b::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.37 via Frontend Transport; Mon, 20 Mar 2023 14:13:08 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CO1NAM11FT004.mail.protection.outlook.com (10.13.175.89) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6222.15 via Frontend Transport; Mon, 20 Mar 2023 14:13:07 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.5; Mon, 20 Mar 2023 07:12:59 -0700 Received: from nvidia.com (10.126.231.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.37; Mon, 20 Mar 2023 07:12:56 -0700 From: Hamdan Igbaria To: , , , , Matan Azrad CC: , , Subject: [v1 1/3] net/mlx5/hws: support dest root table action Date: Mon, 20 Mar 2023 16:12:26 +0200 Message-ID: <20230320141229.104748-1-hamdani@nvidia.com> X-Mailer: git-send-email 2.26.3 MIME-Version: 1.0 X-Originating-IP: [10.126.231.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1NAM11FT004:EE_|CH3PR12MB8878:EE_ X-MS-Office365-Filtering-Correlation-Id: 314b6b3c-a948-4e89-9c62-08db294d3ae5 X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QCPatWsALJW+pjQu56Wkxq3U24rlZwQRSLMN43uCgT5W8cVwTBi/A4LbF/X31quwmlZrsSs8E+7QhPJSuoKNFUpj1fS0s7qSn6Hl/ZtlMP6HqyYeFG3egr/9G29W0+fIzWL0VuBFz48zCC3xLnMK3SCGa4LhT0QYreYmIFfthTj1WJQpdSD3GBzsW3gvwcF10+EVsTkQWoZ0xCoJ+h60wvwUgnK2D6diqlZXVTXpr8te2bd/pR6TA8C/VOJ75dmvmgvUXU/1j3ywAmprzvWRBAqhMuAAyOM7Dou5UyjtzO6zVsjeqJoxKzy9k1V5p+08pFyHZTCpQa3Hr6SA1BTFzwkGnMOjMHL3XNYF3n7neqS6j4GIZkHmNiQTdUUJim7tj0Ba51NE6y25bs37Eg8oLJpuSisyDUFbbnTiQ1qhmcFXRuVYqSDCtSxAfimIODNQoGJn9yyA5zk7NbYIPeu1DXucoCNJH+Dcg6UvTHkznQSSfh/+4R0FTqG+aTEbgN3SMC6CuVM1NjyPqBl//aPBjGarYMm0bHhcrQUq62vrKRlC4FW1sghCMhocau31FKVJqa8kBo/ia2FfIvhe98worI7V+70MXawtm8YfEnZzt1pfSUY7prmijWDA05uthNnxXOV54j1m9NZTlSoIFp77Q5bjcegbWbzJP+Hk0x1I9VK5njZjxoHVqTVGw7KHsMCSMME7R3olShoQk8qNZlueTf5HFKHPTrB6jrkkKbVYuQfw/tQXRXy1KLuWtRH8gBLK X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230025)(4636009)(376002)(39860400002)(136003)(346002)(396003)(451199018)(40470700004)(46966006)(36840700001)(40460700003)(4326008)(110136005)(5660300002)(70586007)(70206006)(8676002)(41300700001)(54906003)(6636002)(478600001)(316002)(6666004)(8936002)(36860700001)(336012)(1076003)(107886003)(30864003)(26005)(186003)(83380400001)(7696005)(6286002)(16526019)(426003)(47076005)(82310400005)(2616005)(40480700001)(36756003)(86362001)(2906002)(82740400003)(7636003)(356005)(55016003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Mar 2023 14:13:07.9310 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 314b6b3c-a948-4e89-9c62-08db294d3ae5 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT004.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB8878 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Add support for dest root table action creation. This support will allow to redirect the packets to the kernel from non root tables. Signed-off-by: Hamdan Igbaria Reviewed-by: Alex Vesker --- drivers/common/mlx5/linux/meson.build | 2 + drivers/common/mlx5/linux/mlx5_glue.c | 28 +++++++++ drivers/common/mlx5/linux/mlx5_glue.h | 16 +++++ drivers/net/mlx5/hws/mlx5dr.h | 19 ++++++ drivers/net/mlx5/hws/mlx5dr_action.c | 84 +++++++++++++++++++++++++-- drivers/net/mlx5/hws/mlx5dr_action.h | 3 + drivers/net/mlx5/hws/mlx5dr_debug.c | 1 + 7 files changed, 147 insertions(+), 6 deletions(-) diff --git a/drivers/common/mlx5/linux/meson.build b/drivers/common/mlx5/linux/meson.build index 96a6c6c9be..16d7011899 100644 --- a/drivers/common/mlx5/linux/meson.build +++ b/drivers/common/mlx5/linux/meson.build @@ -219,6 +219,8 @@ has_sym_args = [ 'ibv_import_device' ], [ 'HAVE_MLX5DV_DR_ACTION_CREATE_DEST_ROOT_TABLE', 'infiniband/mlx5dv.h', 'mlx5dv_dr_action_create_dest_root_table' ], + [ 'HAVE_MLX5DV_CREATE_STEERING_ANCHOR', 'infiniband/mlx5dv.h', + 'mlx5dv_create_steering_anchor'], ] if libmtcr_ul_found has_sym_args += [ diff --git a/drivers/common/mlx5/linux/mlx5_glue.c b/drivers/common/mlx5/linux/mlx5_glue.c index 702eb36b62..3497aa940d 100644 --- a/drivers/common/mlx5/linux/mlx5_glue.c +++ b/drivers/common/mlx5/linux/mlx5_glue.c @@ -1548,6 +1548,32 @@ mlx5_glue_dr_create_flow_action_send_to_kernel(void *tbl, uint16_t priority) #endif } +static struct mlx5dv_steering_anchor * +mlx5_glue_dv_create_steering_anchor(struct ibv_context *context, + struct mlx5dv_steering_anchor_attr *attr) +{ +#ifdef HAVE_MLX5DV_CREATE_STEERING_ANCHOR + return mlx5dv_create_steering_anchor(context, attr); +#else + (void)context; + (void)attr; + errno = ENOTSUP; + return NULL; +#endif +} + +static int +mlx5_glue_dv_destroy_steering_anchor(struct mlx5dv_steering_anchor *sa) +{ +#ifdef HAVE_MLX5DV_CREATE_STEERING_ANCHOR + return mlx5dv_destroy_steering_anchor(sa); +#else + (void)sa; + errno = ENOTSUP; + return -ENOTSUP; +#endif +} + __rte_cache_aligned const struct mlx5_glue *mlx5_glue = &(const struct mlx5_glue) { .version = MLX5_GLUE_VERSION, @@ -1685,4 +1711,6 @@ const struct mlx5_glue *mlx5_glue = &(const struct mlx5_glue) { .dv_free_pp = mlx5_glue_dv_free_pp, .dr_create_flow_action_send_to_kernel = mlx5_glue_dr_create_flow_action_send_to_kernel, + .create_steering_anchor = mlx5_glue_dv_create_steering_anchor, + .destroy_steering_anchor = mlx5_glue_dv_destroy_steering_anchor, }; diff --git a/drivers/common/mlx5/linux/mlx5_glue.h b/drivers/common/mlx5/linux/mlx5_glue.h index 88aa7430e8..81d6b0aaf9 100644 --- a/drivers/common/mlx5/linux/mlx5_glue.h +++ b/drivers/common/mlx5/linux/mlx5_glue.h @@ -148,6 +148,18 @@ struct mlx5dv_var { uint32_t page_id; uint32_t length; off_t mmap_off; #define IBV_ACCESS_RELAXED_ORDERING 0 #endif +#ifndef HAVE_MLX5DV_CREATE_STEERING_ANCHOR +struct mlx5dv_steering_anchor_attr { + uint32_t ft_type; + uint16_t priority; + uint64_t comp_mask; +}; + +struct mlx5dv_steering_anchor { + uint32_t id; +}; +#endif + struct mlx5_glue { const char *version; int (*fork_init)(void); @@ -392,6 +404,10 @@ struct mlx5_glue { uint32_t offset, uint32_t flags, uint8_t return_reg_c); void *(*dr_create_flow_action_send_to_kernel)(void *tbl, uint16_t priority); + struct mlx5dv_steering_anchor *(*create_steering_anchor) + (struct ibv_context *context, + struct mlx5dv_steering_anchor_attr *attr); + int (*destroy_steering_anchor)(struct mlx5dv_steering_anchor *sa); }; extern const struct mlx5_glue *mlx5_glue; diff --git a/drivers/net/mlx5/hws/mlx5dr.h b/drivers/net/mlx5/hws/mlx5dr.h index 2b02884dc3..c14fef7a6b 100644 --- a/drivers/net/mlx5/hws/mlx5dr.h +++ b/drivers/net/mlx5/hws/mlx5dr.h @@ -45,6 +45,7 @@ enum mlx5dr_action_type { MLX5DR_ACTION_TYP_PUSH_VLAN, MLX5DR_ACTION_TYP_ASO_METER, MLX5DR_ACTION_TYP_ASO_CT, + MLX5DR_ACTION_TYP_DEST_ROOT_TABLE, MLX5DR_ACTION_TYP_MAX, }; @@ -565,6 +566,24 @@ mlx5dr_action_create_pop_vlan(struct mlx5dr_context *ctx, uint32_t flags); struct mlx5dr_action * mlx5dr_action_create_push_vlan(struct mlx5dr_context *ctx, uint32_t flags); +/* Create dest root table, this action will jump to root table according + * the given priority. + * @param[in] ctx + * The context in which the new action will be created. + * @param[in] tbl + * The root table to jump to. + * @param[in] priority + * The priority of matcher in the root table to jump to. + * @param[in] flags + * Action creation flags. (enum mlx5dr_action_flags). + * @return pointer to mlx5dr_action on success NULL otherwise. + */ +struct mlx5dr_action * +mlx5dr_action_create_dest_root_table(struct mlx5dr_context *ctx, + struct mlx5dr_table *tbl, + uint16_t priority, + uint32_t flags); + /* Destroy direct rule action. * * @param[in] action diff --git a/drivers/net/mlx5/hws/mlx5dr_action.c b/drivers/net/mlx5/hws/mlx5dr_action.c index 2db62635c1..9a408b0a1a 100644 --- a/drivers/net/mlx5/hws/mlx5dr_action.c +++ b/drivers/net/mlx5/hws/mlx5dr_action.c @@ -33,7 +33,8 @@ static const uint32_t action_order_arr[MLX5DR_TABLE_TYPE_MAX][MLX5DR_ACTION_TYP_ BIT(MLX5DR_ACTION_TYP_FT) | BIT(MLX5DR_ACTION_TYP_MISS) | BIT(MLX5DR_ACTION_TYP_TIR) | - BIT(MLX5DR_ACTION_TYP_DROP), + BIT(MLX5DR_ACTION_TYP_DROP) | + BIT(MLX5DR_ACTION_TYP_DEST_ROOT_TABLE), BIT(MLX5DR_ACTION_TYP_LAST), }, [MLX5DR_TABLE_TYPE_NIC_TX] = { @@ -49,7 +50,8 @@ static const uint32_t action_order_arr[MLX5DR_TABLE_TYPE_MAX][MLX5DR_ACTION_TYP_ BIT(MLX5DR_ACTION_TYP_L2_TO_TNL_L3), BIT(MLX5DR_ACTION_TYP_FT) | BIT(MLX5DR_ACTION_TYP_MISS) | - BIT(MLX5DR_ACTION_TYP_DROP), + BIT(MLX5DR_ACTION_TYP_DROP) | + BIT(MLX5DR_ACTION_TYP_DEST_ROOT_TABLE), BIT(MLX5DR_ACTION_TYP_LAST), }, [MLX5DR_TABLE_TYPE_FDB] = { @@ -68,7 +70,8 @@ static const uint32_t action_order_arr[MLX5DR_TABLE_TYPE_MAX][MLX5DR_ACTION_TYP_ BIT(MLX5DR_ACTION_TYP_FT) | BIT(MLX5DR_ACTION_TYP_MISS) | BIT(MLX5DR_ACTION_TYP_VPORT) | - BIT(MLX5DR_ACTION_TYP_DROP), + BIT(MLX5DR_ACTION_TYP_DROP) | + BIT(MLX5DR_ACTION_TYP_DEST_ROOT_TABLE), BIT(MLX5DR_ACTION_TYP_LAST), }, }; @@ -521,6 +524,11 @@ static void mlx5dr_action_fill_stc_attr(struct mlx5dr_action *action, attr->action_offset = MLX5DR_ACTION_OFFSET_HIT; attr->dest_table_id = obj->id; break; + case MLX5DR_ACTION_TYP_DEST_ROOT_TABLE: + attr->action_type = MLX5_IFC_STC_ACTION_TYPE_JUMP_TO_FT; + attr->action_offset = MLX5DR_ACTION_OFFSET_HIT; + attr->dest_table_id = action->root_tbl.sa->id; + break; case MLX5DR_ACTION_TYP_TNL_L2_TO_L2: attr->action_type = MLX5_IFC_STC_ACTION_TYPE_HEADER_REMOVE; attr->action_offset = MLX5DR_ACTION_OFFSET_DW5; @@ -1172,12 +1180,12 @@ mlx5dr_action_conv_reformat_to_verbs(uint32_t action_type, static int mlx5dr_action_conv_flags_to_ft_type(uint32_t flags, enum mlx5dv_flow_table_type *ft_type) { - if (flags & MLX5DR_ACTION_FLAG_ROOT_RX) { + if (flags & (MLX5DR_ACTION_FLAG_ROOT_RX | MLX5DR_ACTION_FLAG_HWS_RX)) { *ft_type = MLX5DV_FLOW_TABLE_TYPE_NIC_RX; - } else if (flags & MLX5DR_ACTION_FLAG_ROOT_TX) { + } else if (flags & (MLX5DR_ACTION_FLAG_ROOT_TX | MLX5DR_ACTION_FLAG_HWS_TX)) { *ft_type = MLX5DV_FLOW_TABLE_TYPE_NIC_TX; #ifdef HAVE_MLX5DV_FLOW_MATCHER_FT_TYPE - } else if (flags & MLX5DR_ACTION_FLAG_ROOT_FDB) { + } else if (flags & (MLX5DR_ACTION_FLAG_ROOT_FDB | MLX5DR_ACTION_FLAG_HWS_FDB)) { *ft_type = MLX5DV_FLOW_TABLE_TYPE_FDB; #endif } else { @@ -1633,6 +1641,65 @@ mlx5dr_action_create_modify_header(struct mlx5dr_context *ctx, return NULL; } +struct mlx5dr_action * +mlx5dr_action_create_dest_root_table(struct mlx5dr_context *ctx, + struct mlx5dr_table *tbl, + uint16_t priority, + uint32_t flags) +{ + struct mlx5dv_steering_anchor_attr attr = {0}; + struct mlx5dv_steering_anchor *sa; + struct mlx5dr_action *action; + int ret; + + if (mlx5dr_action_is_root_flags(flags)) { + DR_LOG(ERR, "Action flags must be only non root (HWS)"); + rte_errno = ENOTSUP; + return NULL; + } + + if (!mlx5dr_table_is_root(tbl)) { + DR_LOG(ERR, "Non root table cannot be set as destination"); + rte_errno = ENOTSUP; + return NULL; + } + + if (mlx5dr_context_shared_gvmi_used(ctx)) { + DR_LOG(ERR, "Cannot use this action in shared GVMI context"); + rte_errno = ENOTSUP; + return NULL; + } + + if (mlx5dr_action_conv_flags_to_ft_type(flags, &attr.ft_type)) + return NULL; + + attr.priority = priority; + + sa = mlx5_glue->create_steering_anchor(ctx->ibv_ctx, &attr); + if (!sa) { + DR_LOG(ERR, "Creation of steering anchor failed"); + return NULL; + } + + action = mlx5dr_action_create_generic(ctx, flags, MLX5DR_ACTION_TYP_DEST_ROOT_TABLE); + if (!action) + goto free_steering_anchor; + + action->root_tbl.sa = sa; + + ret = mlx5dr_action_create_stcs(action, NULL); + if (ret) + goto free_action; + + return action; + +free_action: + simple_free(action); +free_steering_anchor: + mlx5_glue->destroy_steering_anchor(sa); + return NULL; +} + static void mlx5dr_action_destroy_hws(struct mlx5dr_action *action) { switch (action->type) { @@ -1652,6 +1719,10 @@ static void mlx5dr_action_destroy_hws(struct mlx5dr_action *action) case MLX5DR_ACTION_TYP_PUSH_VLAN: mlx5dr_action_destroy_stcs(action); break; + case MLX5DR_ACTION_TYP_DEST_ROOT_TABLE: + mlx5dr_action_destroy_stcs(action); + mlx5_glue->destroy_steering_anchor(action->root_tbl.sa); + break; case MLX5DR_ACTION_TYP_POP_VLAN: mlx5dr_action_destroy_stcs(action); mlx5dr_action_put_shared_stc(action, MLX5DR_CONTEXT_SHARED_STC_POP); @@ -2132,6 +2203,7 @@ int mlx5dr_action_template_process(struct mlx5dr_action_template *at) case MLX5DR_ACTION_TYP_DROP: case MLX5DR_ACTION_TYP_TIR: case MLX5DR_ACTION_TYP_FT: + case MLX5DR_ACTION_TYP_DEST_ROOT_TABLE: case MLX5DR_ACTION_TYP_VPORT: case MLX5DR_ACTION_TYP_MISS: /* Hit action */ diff --git a/drivers/net/mlx5/hws/mlx5dr_action.h b/drivers/net/mlx5/hws/mlx5dr_action.h index 17619c0057..a85f3b0139 100644 --- a/drivers/net/mlx5/hws/mlx5dr_action.h +++ b/drivers/net/mlx5/hws/mlx5dr_action.h @@ -141,6 +141,9 @@ struct mlx5dr_action { struct { struct mlx5dr_devx_obj *devx_obj; } alias; + struct { + struct mlx5dv_steering_anchor *sa; + } root_tbl; }; }; diff --git a/drivers/net/mlx5/hws/mlx5dr_debug.c b/drivers/net/mlx5/hws/mlx5dr_debug.c index 6b32ac4ee6..e29122aa98 100644 --- a/drivers/net/mlx5/hws/mlx5dr_debug.c +++ b/drivers/net/mlx5/hws/mlx5dr_debug.c @@ -22,6 +22,7 @@ const char *mlx5dr_debug_action_type_str[] = { [MLX5DR_ACTION_TYP_PUSH_VLAN] = "PUSH_VLAN", [MLX5DR_ACTION_TYP_ASO_METER] = "ASO_METER", [MLX5DR_ACTION_TYP_ASO_CT] = "ASO_CT", + [MLX5DR_ACTION_TYP_DEST_ROOT_TABLE] = "DEST_ROOT_TABLE", }; static_assert(ARRAY_SIZE(mlx5dr_debug_action_type_str) == MLX5DR_ACTION_TYP_MAX, From patchwork Mon Mar 20 14:12:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hamdan Igbaria X-Patchwork-Id: 125318 X-Patchwork-Delegate: rasland@nvidia.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 09827427E2; Mon, 20 Mar 2023 15:13:18 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E973E41141; Mon, 20 Mar 2023 15:13:13 +0100 (CET) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2059.outbound.protection.outlook.com [40.107.220.59]) by mails.dpdk.org (Postfix) with ESMTP id BB900410EF for ; Mon, 20 Mar 2023 15:13:12 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LYlOcGmAq5S0L3Etei16FvAwn9a1+7d4Wup5VNN/zQ7F58G75FNu/DrUbExND365EbvcWfgK0iAXrTxkWKllO/GmcsdDiZm+zqWkaZzywgL8iQJ2s34Zvmc09aFX85/Z1Xi5NvKdojbmIc5z1bRZP4E6At7hFYZ/GS/DZ019MpytLwoDGQKL6pOTxjLU+9vVx/3ulRF/BEbTvxjo0NkidMRxzot/7eXkUJlZfq3d7nnGSCxzQANN7Rx6784i48XnzLrl06ukrFMI6qdXhbFnjC1pz+5Q2QmFZOjIvVeojuC7/lyiq2ogdT4sbJHmsIrUQJdcjoLmGVScDCmQSenvMQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=fEoDllUt+tCchy/LPPXzvNZD94mr4rQhW7HKgEjXiRo=; b=fyGeFioNDbLepug1/MugHouPIV4plAIIly9+jaqw9/EjhfGd7qpR9J12MoVKyuMaIzKLr2KQgNIRvp719PiXen6nFUCFIeShLoWFY9mGXg77scO0s5mlv+ahTxWmNXwlty8u9DJ6bETDH3T7MSDPpwpiam0ybE14qWHR1XjyfU+2rKfZIIphQfR2FKNBk0FNBzfqcU4HaZlNjvebyNLT6xQNswEl4u4ZHx33DeTnBdJtUhQ59gB18U3ywVGAgpLpmDJdPCjqECY2mdWj3lVETPkTUuvYFlHXiQfsOR0MYYZnYks32t8njjY1wAqr6Qs6anESjv8DSqQaKhVxNUaHgw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=monjalon.net smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fEoDllUt+tCchy/LPPXzvNZD94mr4rQhW7HKgEjXiRo=; b=kn5IBSS1N7sS69JXDPdpOB2L7Zd1L7QbPK6M6dO1nD/pxrMwFfxEw9Y/mQ7y4BXVKj36XUwaarMc3Azd1p0cGyUQFYYrnK34GwrIVu13Zai2w9bidEvlMx27TiCVxcwwaaglDgotFI2RfUuBCuSZi+7UVuBvLrJ0FGVuNNpzIqv0NqNmS/cTLXFAHZ12K2W5rG51hoAv7aTvZsECf4dTsjBHR56i4EiDLJLj+pc4JTqh0CiPU8GxZRGdjiY40NV98kumdz2JEdD5jK/ogOqXPbpq7DFvoL+3/Ma6M5p0fnNNe6pMUo7BIpjAx0CUcfapczL+igjfry57ZxGiYrXhQg== Received: from MW4P221CA0004.NAMP221.PROD.OUTLOOK.COM (2603:10b6:303:8b::9) by SN7PR12MB7369.namprd12.prod.outlook.com (2603:10b6:806:298::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.37; Mon, 20 Mar 2023 14:13:10 +0000 Received: from CO1NAM11FT004.eop-nam11.prod.protection.outlook.com (2603:10b6:303:8b:cafe::16) by MW4P221CA0004.outlook.office365.com (2603:10b6:303:8b::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.37 via Frontend Transport; Mon, 20 Mar 2023 14:13:10 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CO1NAM11FT004.mail.protection.outlook.com (10.13.175.89) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6222.15 via Frontend Transport; Mon, 20 Mar 2023 14:13:10 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.5; Mon, 20 Mar 2023 07:13:02 -0700 Received: from nvidia.com (10.126.231.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.37; Mon, 20 Mar 2023 07:12:59 -0700 From: Hamdan Igbaria To: , , , , Matan Azrad CC: , , Subject: [v1 2/3] net/mlx5/hws: dump FT icm addresses Date: Mon, 20 Mar 2023 16:12:27 +0200 Message-ID: <20230320141229.104748-2-hamdani@nvidia.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: <20230320141229.104748-1-hamdani@nvidia.com> References: <20230320141229.104748-1-hamdani@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [10.126.231.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1NAM11FT004:EE_|SN7PR12MB7369:EE_ X-MS-Office365-Filtering-Correlation-Id: 5d4f6a7b-ea0b-479e-34c4-08db294d3c6a X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xglgsdjND3Ab+mJdsewTO1kftDBDg5Z253JRrYK5CIl77n0exdelkmhihjxa4FSEauHWLeNfqgHRv0SmYgPM+vaEAxmE4DZ3OgHSh/eOG0JlRpP4NWD8rofVaLS7YT7sn9ZSKmq8UZKPC3ZKe5b4XcooR6nJEUH/h1MEb3MglBy8APKEIT8+e9DP0qipz2anvHKZvtDCYcKZ1r2yoSuBWNnbhrmP1gfQcBH0+g2sehqO+J4c5ZJMM6Gkzkjr41uVEZ5gBNuILOXbD6nYjnD0HuXLqlq18+u+SiqhmRRXjLTc02SVhkOR8NMMYI1dpWE/pkCovRLfZfklWjYxAjTa0pm54jBM2ku3QJeyRJjCJliAos1Lj99J/GNrocx9M6lAOd3I3mZUgygzqvwah38tw7PPl5l0ERIDeu11qb3q2vpU5vxcpwkcQaRXtERgbMDen+6ImK7/eNDB0XUEXpffO6JgMfYWLhd62hrhdTi608PTycKjcsqLIAiKHw+9iMgYIrR0qBpZXKjARIvaGnxE3nTIE3Cv2lFjX28t+M+84cfgvgFIICqaTEdxOXo0vd2MASedDxSRBMsjlui/jureMYNfq+/qVWwGyWTPDlgTZrgRSoEZUPICJMF4jXgw6M3NGP58q+rsbLKwb6LxgwnterLcoKfYEMHlrmxG+PEH8hYOhGfuBPKMOPGfp411S7iq/xNEF5vHMkMgBWwxE5YzaYRSlXWpMOCcLo4jiYb5yoHtda6qUe6MgPbej24e4pfP X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230025)(4636009)(39860400002)(346002)(396003)(376002)(136003)(451199018)(46966006)(40470700004)(36840700001)(83380400001)(5660300002)(8936002)(426003)(2906002)(47076005)(86362001)(7696005)(36756003)(40460700003)(6286002)(26005)(186003)(16526019)(2616005)(1076003)(55016003)(40480700001)(336012)(107886003)(6666004)(8676002)(4326008)(316002)(356005)(41300700001)(7636003)(70586007)(70206006)(82740400003)(478600001)(36860700001)(54906003)(82310400005)(110136005)(6636002); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Mar 2023 14:13:10.4933 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5d4f6a7b-ea0b-479e-34c4-08db294d3c6a X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT004.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB7369 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Add the support for query FT command. Use the query FT command to dump the ICM addresses of table start anchor and matcher end anchor. Signed-off-by: Hamdan Igbaria Reviewed-by: Alex Vesker --- drivers/common/mlx5/mlx5_prm.h | 50 ++++++++++++++++++++--- drivers/net/mlx5/hws/mlx5dr_cmd.c | 28 +++++++++++++ drivers/net/mlx5/hws/mlx5dr_cmd.h | 9 +++++ drivers/net/mlx5/hws/mlx5dr_debug.c | 62 ++++++++++++++++++++++++++--- drivers/net/mlx5/hws/mlx5dr_debug.h | 6 +++ 5 files changed, 144 insertions(+), 11 deletions(-) diff --git a/drivers/common/mlx5/mlx5_prm.h b/drivers/common/mlx5/mlx5_prm.h index 4b0a56f4e5..6b72039bdd 100644 --- a/drivers/common/mlx5/mlx5_prm.h +++ b/drivers/common/mlx5/mlx5_prm.h @@ -1156,6 +1156,7 @@ enum { MLX5_CMD_OP_CREATE_RQT = 0x916, MLX5_CMD_OP_MODIFY_RQT = 0x917, MLX5_CMD_OP_CREATE_FLOW_TABLE = 0x930, + MLX5_CMD_OP_QUERY_FLOW_TABLE = 0x932, MLX5_CMD_OP_CREATE_FLOW_GROUP = 0x933, MLX5_CMD_OP_SET_FLOW_TABLE_ENTRY = 0x936, MLX5_CMD_OP_MODIFY_FLOW_TABLE = 0x93c, @@ -4872,11 +4873,17 @@ struct mlx5_ifc_flow_table_context_bits { u8 reserved_at_60[0x60]; - u8 rtc_id_0[0x20]; - - u8 rtc_id_1[0x20]; - - u8 reserved_at_100[0x40]; + union { + struct { + u8 rtc_id_0[0x20]; + u8 rtc_id_1[0x20]; + u8 reserved_at_100[0x40]; + }; + struct { + u8 sw_owner_icm_root_1[0x40]; + u8 sw_owner_icm_root_0[0x40]; + }; + }; }; struct mlx5_ifc_create_flow_table_in_bits { @@ -4909,6 +4916,39 @@ struct mlx5_ifc_create_flow_table_out_bits { u8 icm_address_31_0[0x20]; }; +struct mlx5_ifc_query_flow_table_in_bits { + u8 opcode[0x10]; + u8 uid[0x10]; + + u8 vhca_tunnel_id[0x10]; + u8 op_mod[0x10]; + + u8 other_vport[0x1]; + u8 reserved_at_41[0xf]; + u8 vport_number[0x10]; + + u8 reserved_at_60[0x20]; + + u8 table_type[0x8]; + u8 reserved_at_88[0x18]; + + u8 reserved_at_a0[0x8]; + u8 table_id[0x18]; + + u8 reserved_at_c0[0x140]; +}; + +struct mlx5_ifc_query_flow_table_out_bits { + u8 status[0x8]; + u8 reserved_at_8[0x18]; + + u8 syndrome[0x20]; + + u8 reserved_at_40[0x80]; + + struct mlx5_ifc_flow_table_context_bits flow_table_context; +}; + enum mlx5_flow_destination_type { MLX5_FLOW_DESTINATION_TYPE_VPORT = 0x0, }; diff --git a/drivers/net/mlx5/hws/mlx5dr_cmd.c b/drivers/net/mlx5/hws/mlx5dr_cmd.c index a444fb4438..6e7d6eb1ac 100644 --- a/drivers/net/mlx5/hws/mlx5dr_cmd.c +++ b/drivers/net/mlx5/hws/mlx5dr_cmd.c @@ -80,6 +80,34 @@ mlx5dr_cmd_flow_table_modify(struct mlx5dr_devx_obj *devx_obj, return ret; } +int +mlx5dr_cmd_flow_table_query(struct mlx5dr_devx_obj *devx_obj, + struct mlx5dr_cmd_ft_query_attr *ft_attr, + uint64_t *icm_addr_0, uint64_t *icm_addr_1) +{ + uint32_t out[MLX5_ST_SZ_DW(query_flow_table_out)] = {0}; + uint32_t in[MLX5_ST_SZ_DW(query_flow_table_in)] = {0}; + void *ft_ctx; + int ret; + + MLX5_SET(query_flow_table_in, in, opcode, MLX5_CMD_OP_QUERY_FLOW_TABLE); + MLX5_SET(query_flow_table_in, in, table_type, ft_attr->type); + MLX5_SET(query_flow_table_in, in, table_id, devx_obj->id); + + ret = mlx5_glue->devx_obj_query(devx_obj->obj, in, sizeof(in), out, sizeof(out)); + if (ret) { + DR_LOG(ERR, "Failed to query FT"); + rte_errno = errno; + return ret; + } + + ft_ctx = MLX5_ADDR_OF(query_flow_table_out, out, flow_table_context); + *icm_addr_0 = MLX5_GET64(flow_table_context, ft_ctx, sw_owner_icm_root_0); + *icm_addr_1 = MLX5_GET64(flow_table_context, ft_ctx, sw_owner_icm_root_1); + + return ret; +} + static struct mlx5dr_devx_obj * mlx5dr_cmd_flow_group_create(struct ibv_context *ctx, struct mlx5dr_cmd_fg_attr *fg_attr) diff --git a/drivers/net/mlx5/hws/mlx5dr_cmd.h b/drivers/net/mlx5/hws/mlx5dr_cmd.h index 3f40c085be..7d03f3d169 100644 --- a/drivers/net/mlx5/hws/mlx5dr_cmd.h +++ b/drivers/net/mlx5/hws/mlx5dr_cmd.h @@ -22,6 +22,10 @@ struct mlx5dr_cmd_ft_modify_attr { uint64_t modify_fs; }; +struct mlx5dr_cmd_ft_query_attr { + uint8_t type; +}; + struct mlx5dr_cmd_fg_attr { uint32_t table_id; uint32_t table_type; @@ -215,6 +219,11 @@ int mlx5dr_cmd_flow_table_modify(struct mlx5dr_devx_obj *devx_obj, struct mlx5dr_cmd_ft_modify_attr *ft_attr); +int +mlx5dr_cmd_flow_table_query(struct mlx5dr_devx_obj *devx_obj, + struct mlx5dr_cmd_ft_query_attr *ft_attr, + uint64_t *icm_addr_0, uint64_t *icm_addr_1); + struct mlx5dr_devx_obj * mlx5dr_cmd_rtc_create(struct ibv_context *ctx, struct mlx5dr_cmd_rtc_create_attr *rtc_attr); diff --git a/drivers/net/mlx5/hws/mlx5dr_debug.c b/drivers/net/mlx5/hws/mlx5dr_debug.c index e29122aa98..c49b504317 100644 --- a/drivers/net/mlx5/hws/mlx5dr_debug.c +++ b/drivers/net/mlx5/hws/mlx5dr_debug.c @@ -198,9 +198,12 @@ static int mlx5dr_debug_dump_matcher(FILE *f, struct mlx5dr_matcher *matcher) bool is_shared = mlx5dr_context_shared_gvmi_used(matcher->tbl->ctx); bool is_root = matcher->tbl->level == MLX5DR_ROOT_LEVEL; enum mlx5dr_table_type tbl_type = matcher->tbl->type; + struct mlx5dr_cmd_ft_query_attr ft_attr = {0}; struct mlx5dr_devx_obj *ste_0, *ste_1 = NULL; struct mlx5dr_pool_chunk *ste; struct mlx5dr_pool *ste_pool; + uint64_t icm_addr_0 = 0; + uint64_t icm_addr_1 = 0; int ret; ret = fprintf(f, "%d,0x%" PRIx64 ",0x%" PRIx64 ",%d,%d,0x%" PRIx64, @@ -243,13 +246,25 @@ static int mlx5dr_debug_dump_matcher(FILE *f, struct mlx5dr_matcher *matcher) ste_1 = NULL; } - ret = fprintf(f, ",%d,%d,%d,%d,%d\n", + if (!is_root) { + ft_attr.type = matcher->tbl->fw_ft_type; + ret = mlx5dr_cmd_flow_table_query(matcher->end_ft, + &ft_attr, + &icm_addr_0, + &icm_addr_1); + if (ret) + return ret; + } + + ret = fprintf(f, ",%d,%d,%d,%d,%d,0x%" PRIx64 ",0x%" PRIx64 "\n", matcher->action_ste.rtc_0 ? matcher->action_ste.rtc_0->id : 0, ste_0 ? (int)ste_0->id : -1, matcher->action_ste.rtc_1 ? matcher->action_ste.rtc_1->id : 0, ste_1 ? (int)ste_1->id : -1, is_shared && !is_root ? - matcher->match_ste.aliased_rtc_0->id : 0); + matcher->match_ste.aliased_rtc_0->id : 0, + mlx5dr_debug_icm_to_idx(icm_addr_0), + mlx5dr_debug_icm_to_idx(icm_addr_1)); if (ret < 0) goto out_err; @@ -276,10 +291,15 @@ static int mlx5dr_debug_dump_table(FILE *f, struct mlx5dr_table *tbl) { bool is_shared = mlx5dr_context_shared_gvmi_used(tbl->ctx); bool is_root = tbl->level == MLX5DR_ROOT_LEVEL; + struct mlx5dr_cmd_ft_query_attr ft_attr = {0}; struct mlx5dr_matcher *matcher; + uint64_t local_icm_addr_0 = 0; + uint64_t local_icm_addr_1 = 0; + uint64_t icm_addr_0 = 0; + uint64_t icm_addr_1 = 0; int ret; - ret = fprintf(f, "%d,0x%" PRIx64 ",0x%" PRIx64 ",%d,%d,%d,%d,%d\n", + ret = fprintf(f, "%d,0x%" PRIx64 ",0x%" PRIx64 ",%d,%d,%d,%d,%d", MLX5DR_DEBUG_RES_TYPE_TABLE, (uint64_t)(uintptr_t)tbl, (uint64_t)(uintptr_t)tbl->ctx, @@ -288,11 +308,37 @@ static int mlx5dr_debug_dump_table(FILE *f, struct mlx5dr_table *tbl) is_root ? 0 : tbl->fw_ft_type, tbl->level, is_shared && !is_root ? tbl->local_ft->id : 0); - if (ret < 0) { - rte_errno = EINVAL; - return rte_errno; + if (ret < 0) + goto out_err; + + if (!is_root) { + ft_attr.type = tbl->fw_ft_type; + ret = mlx5dr_cmd_flow_table_query(tbl->ft, + &ft_attr, + &icm_addr_0, + &icm_addr_1); + if (ret) + return ret; + + if (is_shared) { + ft_attr.type = tbl->fw_ft_type; + ret = mlx5dr_cmd_flow_table_query(tbl->local_ft, + &ft_attr, + &local_icm_addr_0, + &local_icm_addr_1); + if (ret) + return ret; + } } + ret = fprintf(f, ",0x%" PRIx64 ",0x%" PRIx64 ",0x%" PRIx64 ",0x%" PRIx64 "\n", + mlx5dr_debug_icm_to_idx(icm_addr_0), + mlx5dr_debug_icm_to_idx(icm_addr_1), + mlx5dr_debug_icm_to_idx(local_icm_addr_0), + mlx5dr_debug_icm_to_idx(local_icm_addr_1)); + if (ret < 0) + goto out_err; + LIST_FOREACH(matcher, &tbl->head, next) { ret = mlx5dr_debug_dump_matcher(f, matcher); if (ret) @@ -300,6 +346,10 @@ static int mlx5dr_debug_dump_table(FILE *f, struct mlx5dr_table *tbl) } return 0; + +out_err: + rte_errno = EINVAL; + return rte_errno; } static int diff --git a/drivers/net/mlx5/hws/mlx5dr_debug.h b/drivers/net/mlx5/hws/mlx5dr_debug.h index 0f88e73186..5cffdb10b5 100644 --- a/drivers/net/mlx5/hws/mlx5dr_debug.h +++ b/drivers/net/mlx5/hws/mlx5dr_debug.h @@ -26,6 +26,12 @@ enum mlx5dr_debug_res_type { MLX5DR_DEBUG_RES_TYPE_MATCHER_TEMPLATE_RANGE_DEFINER = 4206, }; +static inline uint64_t +mlx5dr_debug_icm_to_idx(uint64_t icm_addr) +{ + return (icm_addr >> 6) & 0xffffffff; +} + const char *mlx5dr_debug_action_type_to_str(enum mlx5dr_action_type action_type); #endif /* MLX5DR_DEBUG_H_ */ From patchwork Mon Mar 20 14:12:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hamdan Igbaria X-Patchwork-Id: 125319 X-Patchwork-Delegate: rasland@nvidia.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7B353427E2; Mon, 20 Mar 2023 15:13:27 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8FD6B4282D; Mon, 20 Mar 2023 15:13:19 +0100 (CET) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2063.outbound.protection.outlook.com [40.107.244.63]) by mails.dpdk.org (Postfix) with ESMTP id 89B6B410EF for ; Mon, 20 Mar 2023 15:13:18 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=T4VYQVTxeNiU5uR+dmrxpKTdDfgqd6QnKSc7SYS7/xjz3gtE6oDUxC0Im7eBHYEjZjX/kcACdGICzjkvE68RgHcYbbC8w1wmc0Z1O1vcaST5lslq1+KzyTNbTwwDAHkPRNZ8UC0PlhhcWKWwRpb6RkIokZxjJHcMpBArPhXPZnN6ZEqPixsPjyoWMtdFKHMeWE1M6T0Ws0Hq4esuLXw2hpYrHaHxklU9TWd71wQ+exkw2W9wtwuzBMMllbsJDPNuZ02cM6PvqmAreBNH9/zDmfGjzoBFrJXi7X4Ev6bHa0OzaRK7Z0q7xWir04QrfSDWeBjE0nWNlLDlcVvpq4+9AQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=9iut3h/BrppH1SuRzTSTKuprgdG1Z1zQdYqXj7AACgI=; b=kJeN8YVR2W0sWM6Hi9GS9brh3gNUwdvvmPjSmZ00bdwAwicAYUvzwS9t9gQvxXuQBPmnPyispoL5vBvXl7rJ1EKkxCJkWE7Hun+5h93QPjDDuL+5dgRF2RreaujB5EyaFYJiY4+ZfzA5EzVNIyQBnX8VYQpWSh8hZMMJ0ztYJoZ6gLwRhf8HMzGYMBXPKjLLwotLd24RqjrUX8+bwsiPtrpJtR6AQ2FQvLXZKjsqOPIyBvBwyBevVEXHJlnkYsEGtN3pYwTbIL0i2gQe2FToPfCf3Mm85cfUYqqU5C7lH4HgEx+fjyxcJS4RLwcsrB+qnsIKHA1XMoVTTovX3w1Wag== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=monjalon.net smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9iut3h/BrppH1SuRzTSTKuprgdG1Z1zQdYqXj7AACgI=; b=OQT417FzaOXw8lY7vNcph5lUKBWyw8bJPTlxItQIswy8LKIlkpd9pI/JVOILCt8NyBtiSNMD0aQoe9UzXcjV4M5FhnUeuE8La3XnFiOglaFc/SR7Tk4qjMuRkzOZZoMqlx/JBd7jlP5NHYIedRq1FSvdHYvwwzZXekjfrfuHtrNcwE985nF641XB/puu8z9606uJvCP/4ZlJJaiHSe/5tzYyBlp6tvFPGuZNhGuecJUa2tA/Bs//lujsAElvOS3x6poHzbHAFCt+YxlAje/Js4gH1Lb87sTzba4wrfP5r33hpSUBIp5XYylPvr0zbPvAldbFx/Fm1tMXgxFwZrr7bA== Received: from MW4PR03CA0229.namprd03.prod.outlook.com (2603:10b6:303:b9::24) by LV2PR12MB6013.namprd12.prod.outlook.com (2603:10b6:408:171::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.37; Mon, 20 Mar 2023 14:13:15 +0000 Received: from CO1NAM11FT019.eop-nam11.prod.protection.outlook.com (2603:10b6:303:b9:cafe::4e) by MW4PR03CA0229.outlook.office365.com (2603:10b6:303:b9::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.37 via Frontend Transport; Mon, 20 Mar 2023 14:13:15 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CO1NAM11FT019.mail.protection.outlook.com (10.13.175.57) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6222.15 via Frontend Transport; Mon, 20 Mar 2023 14:13:14 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.5; Mon, 20 Mar 2023 07:13:05 -0700 Received: from nvidia.com (10.126.231.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.37; Mon, 20 Mar 2023 07:13:02 -0700 From: Hamdan Igbaria To: , , , , Matan Azrad CC: , , Subject: [v1 3/3] net/mlx5/hws: Enhance forward table and FTE creation Date: Mon, 20 Mar 2023 16:12:28 +0200 Message-ID: <20230320141229.104748-3-hamdani@nvidia.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: <20230320141229.104748-1-hamdani@nvidia.com> References: <20230320141229.104748-1-hamdani@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [10.126.231.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1NAM11FT019:EE_|LV2PR12MB6013:EE_ X-MS-Office365-Filtering-Correlation-Id: a9909441-51fd-45b5-3030-08db294d3f16 X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: H07w99l4JCSY0nDMjAv//uJ4q97IsHtCt6K/jmKMXz6gXiOZc82v22Bio0YSRuB4JTFaOvIM4UF8zpBsr12J0pnaRiMqIHTfr4WAsC6eqWChfTcXSBD4/rbSFu8uMV9aYhhqdPCvGvxW6nHW1FIr6OX/GxsXhOXJdxsnZ+hKOcd7+AMeIUTBlqhXAYpS2YZIPmOTtcao6FL/Zz23VWBjqu1MUx4A+/1PFMmH6jEGJtGtFKY1I8JbSLqMnHSsogCMj7B8sqq2DfZFPNeprrpgtSJ1MO0JZHeFB/M5P9+Ar984qEVo7V1Y2oflFNAWcH9lpHypyW62qbpAJUQITiECndKMgKwGJIr/ovkYKyCyTvPS039QKm5YCwZyLI9l1Z1Oud6DOEXPX3a7LFZYsX20nVn2TPxnyeBYQA+VOEfCP2sVHdhsNvjVbHpzWT0exx8t51mYHBbOXFJu6GBVvkldrirE/TxBsqX/phydCRrHG+ItIzDoULJwAKki4TS1jNNtiVgnJgfXS/DtzzTwqGxwBu9WvHkyQg68PCc4EQ9F6gFZDkgnbtJ6atzLTXnY6qiG0MfEHoA2WcoI9MgFkWVEalgHLY1vYZAUhOCATSRxqU4W6WolsJiHAlP3mzv2y/pfI10nVSJfWiu9fMmPLh3u0C6Qu5hrh7ZkegN+eJt0MaulTRBOulUM+laVQm4N+nKLRseSbX9KkKUaz5MGmZEbPu+hImIjh3DmImiqP+at/m/9S2TKReanG0oEqJzyO9RY X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230025)(4636009)(376002)(136003)(39860400002)(346002)(396003)(451199018)(46966006)(36840700001)(40470700004)(186003)(1076003)(26005)(7696005)(82740400003)(6286002)(426003)(47076005)(6636002)(2616005)(83380400001)(316002)(478600001)(54906003)(16526019)(110136005)(107886003)(336012)(6666004)(4326008)(8676002)(70586007)(70206006)(41300700001)(36860700001)(36756003)(40460700003)(5660300002)(7636003)(2906002)(8936002)(356005)(82310400005)(40480700001)(86362001)(55016003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Mar 2023 14:13:14.9759 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a9909441-51fd-45b5-3030-08db294d3f16 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT019.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV2PR12MB6013 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Changed FW FT and FTE creation to allow dynamic creation. Till now only FTE with vport destination action was supported. Also enhanced forward table creation to be generic. Signed-off-by: Hamdan Igbaria Reviewed-by: Alex Vesker --- drivers/common/mlx5/mlx5_prm.h | 20 +++++++-- drivers/net/mlx5/hws/mlx5dr_cmd.c | 66 +++++++++++++++++------------ drivers/net/mlx5/hws/mlx5dr_cmd.h | 28 +++++++++--- drivers/net/mlx5/hws/mlx5dr_table.c | 12 ++++-- 4 files changed, 83 insertions(+), 43 deletions(-) diff --git a/drivers/common/mlx5/mlx5_prm.h b/drivers/common/mlx5/mlx5_prm.h index 6b72039bdd..d6af069fae 100644 --- a/drivers/common/mlx5/mlx5_prm.h +++ b/drivers/common/mlx5/mlx5_prm.h @@ -4951,10 +4951,17 @@ struct mlx5_ifc_query_flow_table_out_bits { enum mlx5_flow_destination_type { MLX5_FLOW_DESTINATION_TYPE_VPORT = 0x0, + MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE = 0x1, }; -enum { - MLX5_FLOW_CONTEXT_ACTION_FWD_DEST = 0x4, +enum mlx5_flow_context_action { + MLX5_FLOW_CONTEXT_ACTION_FWD_DEST = 1 << 2, +}; + +enum mlx5_flow_context_flow_source { + MLX5_FLOW_CONTEXT_FLOW_SOURCE_ANY_VPORT = 0x0, + MLX5_FLOW_CONTEXT_FLOW_SOURCE_UPLINK = 0x1, + MLX5_FLOW_CONTEXT_FLOW_SOURCE_LOCAL_VPORT = 0x2, }; struct mlx5_ifc_set_fte_out_bits { @@ -4992,11 +4999,16 @@ struct mlx5_ifc_flow_context_bits { u8 reserved_at_60[0x10]; u8 action[0x10]; u8 extended_destination[0x1]; - u8 reserved_at_81[0x7]; + u8 reserved_at_81[0x1]; + u8 flow_source[0x2]; + u8 encrypt_decrypt_type[0x4]; u8 destination_list_size[0x18]; u8 reserved_at_a0[0x8]; u8 flow_counter_list_size[0x18]; - u8 reserved_at_c0[0x1740]; + u8 packet_reformat_id[0x20]; + u8 reserved_at_e0[0x40]; + u8 encrypt_decrypt_obj_id[0x20]; + u8 reserved_at_140[0x16c0]; /* Currently only one destnation */ union mlx5_ifc_dest_format_flow_counter_list_auto_bits destination[1]; }; diff --git a/drivers/net/mlx5/hws/mlx5dr_cmd.c b/drivers/net/mlx5/hws/mlx5dr_cmd.c index 6e7d6eb1ac..369bc8bf55 100644 --- a/drivers/net/mlx5/hws/mlx5dr_cmd.c +++ b/drivers/net/mlx5/hws/mlx5dr_cmd.c @@ -140,17 +140,18 @@ mlx5dr_cmd_flow_group_create(struct ibv_context *ctx, return devx_obj; } -static struct mlx5dr_devx_obj * -mlx5dr_cmd_set_vport_fte(struct ibv_context *ctx, - uint32_t table_type, - uint32_t table_id, - uint32_t group_id, - uint32_t vport_id) +struct mlx5dr_devx_obj * +mlx5dr_cmd_set_fte(struct ibv_context *ctx, + uint32_t table_type, + uint32_t table_id, + uint32_t group_id, + struct mlx5dr_cmd_set_fte_attr *fte_attr) { uint32_t in[MLX5_ST_SZ_DW(set_fte_in) + MLX5_ST_SZ_DW(dest_format)] = {0}; uint32_t out[MLX5_ST_SZ_DW(set_fte_out)] = {0}; struct mlx5dr_devx_obj *devx_obj; void *in_flow_context; + uint32_t action_flags; void *in_dests; devx_obj = simple_malloc(sizeof(*devx_obj)); @@ -166,50 +167,51 @@ mlx5dr_cmd_set_vport_fte(struct ibv_context *ctx, in_flow_context = MLX5_ADDR_OF(set_fte_in, in, flow_context); MLX5_SET(flow_context, in_flow_context, group_id, group_id); - MLX5_SET(flow_context, in_flow_context, destination_list_size, 1); - MLX5_SET(flow_context, in_flow_context, action, MLX5_FLOW_CONTEXT_ACTION_FWD_DEST); + MLX5_SET(flow_context, in_flow_context, flow_source, fte_attr->flow_source); + + action_flags = fte_attr->action_flags; + MLX5_SET(flow_context, in_flow_context, action, action_flags); - in_dests = MLX5_ADDR_OF(flow_context, in_flow_context, destination); - MLX5_SET(dest_format, in_dests, destination_type, - MLX5_FLOW_DESTINATION_TYPE_VPORT); - MLX5_SET(dest_format, in_dests, destination_id, vport_id); + if (action_flags & MLX5_FLOW_CONTEXT_ACTION_FWD_DEST) { + /* Only destination_list_size of size 1 is supported */ + MLX5_SET(flow_context, in_flow_context, destination_list_size, 1); + in_dests = MLX5_ADDR_OF(flow_context, in_flow_context, destination); + MLX5_SET(dest_format, in_dests, destination_type, fte_attr->destination_type); + MLX5_SET(dest_format, in_dests, destination_id, fte_attr->destination_id); + } devx_obj->obj = mlx5_glue->devx_obj_create(ctx, in, sizeof(in), out, sizeof(out)); if (!devx_obj->obj) { DR_LOG(ERR, "Failed to create FTE"); - simple_free(devx_obj); rte_errno = errno; - return NULL; + goto free_devx; } return devx_obj; -} -void mlx5dr_cmd_miss_ft_destroy(struct mlx5dr_cmd_forward_tbl *tbl) -{ - mlx5dr_cmd_destroy_obj(tbl->fte); - mlx5dr_cmd_destroy_obj(tbl->fg); - mlx5dr_cmd_destroy_obj(tbl->ft); +free_devx: + simple_free(devx_obj); + return NULL; } struct mlx5dr_cmd_forward_tbl * -mlx5dr_cmd_miss_ft_create(struct ibv_context *ctx, - struct mlx5dr_cmd_ft_create_attr *ft_attr, - uint32_t vport) +mlx5dr_cmd_forward_tbl_create(struct ibv_context *ctx, + struct mlx5dr_cmd_ft_create_attr *ft_attr, + struct mlx5dr_cmd_set_fte_attr *fte_attr) { struct mlx5dr_cmd_fg_attr fg_attr = {0}; struct mlx5dr_cmd_forward_tbl *tbl; tbl = simple_calloc(1, sizeof(*tbl)); if (!tbl) { - DR_LOG(ERR, "Failed to allocate memory for forward default"); + DR_LOG(ERR, "Failed to allocate memory"); rte_errno = ENOMEM; return NULL; } tbl->ft = mlx5dr_cmd_flow_table_create(ctx, ft_attr); if (!tbl->ft) { - DR_LOG(ERR, "Failed to create FT for miss-table"); + DR_LOG(ERR, "Failed to create FT"); goto free_tbl; } @@ -218,13 +220,13 @@ mlx5dr_cmd_miss_ft_create(struct ibv_context *ctx, tbl->fg = mlx5dr_cmd_flow_group_create(ctx, &fg_attr); if (!tbl->fg) { - DR_LOG(ERR, "Failed to create FG for miss-table"); + DR_LOG(ERR, "Failed to create FG"); goto free_ft; } - tbl->fte = mlx5dr_cmd_set_vport_fte(ctx, ft_attr->type, tbl->ft->id, tbl->fg->id, vport); + tbl->fte = mlx5dr_cmd_set_fte(ctx, ft_attr->type, tbl->ft->id, tbl->fg->id, fte_attr); if (!tbl->fte) { - DR_LOG(ERR, "Failed to create FTE for miss-table"); + DR_LOG(ERR, "Failed to create FTE"); goto free_fg; } return tbl; @@ -238,6 +240,14 @@ mlx5dr_cmd_miss_ft_create(struct ibv_context *ctx, return NULL; } +void mlx5dr_cmd_forward_tbl_destroy(struct mlx5dr_cmd_forward_tbl *tbl) +{ + mlx5dr_cmd_destroy_obj(tbl->fte); + mlx5dr_cmd_destroy_obj(tbl->fg); + mlx5dr_cmd_destroy_obj(tbl->ft); + simple_free(tbl); +} + void mlx5dr_cmd_set_attr_connect_miss_tbl(struct mlx5dr_context *ctx, uint32_t fw_ft_type, enum mlx5dr_table_type type, diff --git a/drivers/net/mlx5/hws/mlx5dr_cmd.h b/drivers/net/mlx5/hws/mlx5dr_cmd.h index 7d03f3d169..e57013c309 100644 --- a/drivers/net/mlx5/hws/mlx5dr_cmd.h +++ b/drivers/net/mlx5/hws/mlx5dr_cmd.h @@ -5,6 +5,13 @@ #ifndef MLX5DR_CMD_H_ #define MLX5DR_CMD_H_ +struct mlx5dr_cmd_set_fte_attr { + uint32_t action_flags; + uint8_t destination_type; + uint32_t destination_id; + uint8_t flow_source; +}; + struct mlx5dr_cmd_ft_create_attr { uint8_t type; uint8_t level; @@ -263,6 +270,20 @@ mlx5dr_cmd_header_modify_pattern_create(struct ibv_context *ctx, uint32_t pattern_length, uint8_t *actions); +struct mlx5dr_devx_obj * +mlx5dr_cmd_set_fte(struct ibv_context *ctx, + uint32_t table_type, + uint32_t table_id, + uint32_t group_id, + struct mlx5dr_cmd_set_fte_attr *fte_attr); + +struct mlx5dr_cmd_forward_tbl * +mlx5dr_cmd_forward_tbl_create(struct ibv_context *ctx, + struct mlx5dr_cmd_ft_create_attr *ft_attr, + struct mlx5dr_cmd_set_fte_attr *fte_attr); + +void mlx5dr_cmd_forward_tbl_destroy(struct mlx5dr_cmd_forward_tbl *tbl); + struct mlx5dr_devx_obj * mlx5dr_cmd_alias_obj_create(struct ibv_context *ctx, struct mlx5dr_cmd_alias_obj_create_attr *alias_attr); @@ -275,13 +296,6 @@ int mlx5dr_cmd_query_ib_port(struct ibv_context *ctx, int mlx5dr_cmd_query_caps(struct ibv_context *ctx, struct mlx5dr_cmd_query_caps *caps); -void mlx5dr_cmd_miss_ft_destroy(struct mlx5dr_cmd_forward_tbl *tbl); - -struct mlx5dr_cmd_forward_tbl * -mlx5dr_cmd_miss_ft_create(struct ibv_context *ctx, - struct mlx5dr_cmd_ft_create_attr *ft_attr, - uint32_t vport); - void mlx5dr_cmd_set_attr_connect_miss_tbl(struct mlx5dr_context *ctx, uint32_t fw_ft_type, enum mlx5dr_table_type type, diff --git a/drivers/net/mlx5/hws/mlx5dr_table.c b/drivers/net/mlx5/hws/mlx5dr_table.c index 327e2ec710..8474a9cf61 100644 --- a/drivers/net/mlx5/hws/mlx5dr_table.c +++ b/drivers/net/mlx5/hws/mlx5dr_table.c @@ -20,6 +20,7 @@ static int mlx5dr_table_up_default_fdb_miss_tbl(struct mlx5dr_table *tbl) { struct mlx5dr_cmd_ft_create_attr ft_attr = {0}; + struct mlx5dr_cmd_set_fte_attr fte_attr = {0}; struct mlx5dr_cmd_forward_tbl *default_miss; struct mlx5dr_context *ctx = tbl->ctx; uint8_t tbl_type = tbl->type; @@ -40,8 +41,12 @@ mlx5dr_table_up_default_fdb_miss_tbl(struct mlx5dr_table *tbl) assert(ctx->caps->eswitch_manager); vport = ctx->caps->eswitch_manager_vport_number; - default_miss = mlx5dr_cmd_miss_ft_create(mlx5dr_context_get_local_ibv(ctx), - &ft_attr, vport); + fte_attr.action_flags = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST; + fte_attr.destination_type = MLX5_FLOW_DESTINATION_TYPE_VPORT; + fte_attr.destination_id = vport; + + default_miss = mlx5dr_cmd_forward_tbl_create(mlx5dr_context_get_local_ibv(ctx), + &ft_attr, &fte_attr); if (!default_miss) { DR_LOG(ERR, "Failed to default miss table type: 0x%x", tbl_type); return rte_errno; @@ -66,9 +71,8 @@ static void mlx5dr_table_down_default_fdb_miss_tbl(struct mlx5dr_table *tbl) if (--default_miss->refcount) return; - mlx5dr_cmd_miss_ft_destroy(default_miss); + mlx5dr_cmd_forward_tbl_destroy(default_miss); - simple_free(default_miss); ctx->common_res[tbl_type].default_miss = NULL; }