From patchwork Thu Sep 28 13:09:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shun Hao X-Patchwork-Id: 132140 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 39F8C42661; Thu, 28 Sep 2023 15:10:02 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5D6EF40A8A; Thu, 28 Sep 2023 15:09:57 +0200 (CEST) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2069.outbound.protection.outlook.com [40.107.244.69]) by mails.dpdk.org (Postfix) with ESMTP id 8E89A40DCE for ; Thu, 28 Sep 2023 15:09:55 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jp5s/b/hxiAj24JJR7Rotxkddc7gZdi3sv75ESzKB71J60rcwvvgSlZC9Ku7LWU6QkkPsEeFYROu+NDvRUtR9xjHBRaifz75llo1BZK/Fzi4o3aSCKLtqOdh21VXLleBTr0ZZgIsoYJCJk5rG+nrPbl1izmkbZr2c39mJ/5CCfEIy8x+qccFb7DQRJVZZuTnPeR1Xxp2KBS/3rrghIck7JKYdc2jYXggn1UIzoqjipiBdCYxnrzt+RNBQQlsIMPC9eR5wLBkXgDp/UhmA9QLWFABfR8r1R0c6jqmaqfWd7jJ06KqhpWCvuzNY7ey3x32lGPc5FNoPLTJ1PZJv5ci8w== 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=yEBZPdE/3CayOpns2bEQvBwBpM/sAWl0oFj2ltxbVFI=; b=Fo0gR2Y5o1MURanMx0BoXcaoiTIoMa6Q63wuiB8qi5ktg9bCfOZ7ClHbnT65G5BpDVFnvQqoVIPxuloP7TAzPFQdDoXBLYsrDrjkHs7SIn89z2JlYsCrQ3uQ/XxQtZU31K9guYe6sRGkT1FRtuolXQVeKc7KqKaoqSu7HNWciUwFQQXk2x0YeDdkvOTXvJRA87qFeMUahgeTMmFhiLfTNcZYrjucOtgbt2ZR6i9cmdHO4B3GB/9y2mWg1430B9SP4Gzu3+URHKgiNEfUFQr9Es5hdq/2l2+Hn+WI51G+4TSW9URn2K1kp5NIYswXmURRiOVlwbUimQkmwSSJ0FRKjg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=dpdk.org 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=yEBZPdE/3CayOpns2bEQvBwBpM/sAWl0oFj2ltxbVFI=; b=Dc/WwTjjxVkTlnt2TbbKqq5dvQVfJIezI8X7WEYNjBPhn7f9Vd26/p/+JBAuoL0r4rFLylOe9/9ux98nXe/RRHOfABFlvBNri0x9aZFQJNrN3Me7Cl7H93xPb/85ANB83reJJWEy9P7Fn6SkfVXlBwL18q0h2q0sbTEADIsnpfYV90Y3hA8i8CApxMXmc2rc3vJFRD6/o1YHkxO2mIHFlOrc1r0SsE2X59ZrK4JQE40QeYapk81Kb6R9J0fOs7jOcImyAYJJvy9LzsKPTk+7ks+M9tVPaAQS7G6C+9ntU+78XBNiaCJgZgg7bIVCTgJo8EgJp9uyAu8xbbGHV0iO8Q== Received: from BL1P221CA0018.NAMP221.PROD.OUTLOOK.COM (2603:10b6:208:2c5::30) by SJ2PR12MB9006.namprd12.prod.outlook.com (2603:10b6:a03:540::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6813.32; Thu, 28 Sep 2023 13:09:52 +0000 Received: from MN1PEPF0000ECD8.namprd02.prod.outlook.com (2603:10b6:208:2c5:cafe::80) by BL1P221CA0018.outlook.office365.com (2603:10b6:208:2c5::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.25 via Frontend Transport; Thu, 28 Sep 2023 13:09:52 +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 MN1PEPF0000ECD8.mail.protection.outlook.com (10.167.242.137) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.14 via Frontend Transport; Thu, 28 Sep 2023 13:09:52 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) 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.41; Thu, 28 Sep 2023 06:09:36 -0700 Received: from nvidia.com (10.126.230.35) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Thu, 28 Sep 2023 06:09:34 -0700 From: Shun Hao To: , , , "Suanming Mou" CC: , , Hamdan Igbaria , Alex Vesker Subject: [PATCH v1 1/3] net/mlx5/hws: add creation of packet reformat DevX obj Date: Thu, 28 Sep 2023 16:09:11 +0300 Message-ID: <20230928130913.2583907-2-shunh@nvidia.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20230928130913.2583907-1-shunh@nvidia.com> References: <20230928130913.2583907-1-shunh@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [10.126.230.35] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail202.nvidia.com (10.129.68.7) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MN1PEPF0000ECD8:EE_|SJ2PR12MB9006:EE_ X-MS-Office365-Filtering-Correlation-Id: f1aa06ba-3316-400d-b124-08dbc02433cc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: S2S2wgfBDx6z0VrALmNcCeq8p0lEWh5m+u/qlMUzhas3FDGxgGiK7OtFH4Qgfa/8ukF8DSBxSZv0PDhC2W3iBt9GUCxlpAbHCKEXSMKv321uJPqXfOfzkr8SvmmG60DPMYEKG+IYeZtBJVxMx5kCkxcuOSor95qFCG7ilauKPaOfjxZWjkodcAaXIamR4mHRAbCDsFIKW4K1joDDPDxNzZIXxiHu5d4tVjmDpbXFGz1M102mHRbkgM72OavdyJhlrIMBDmje2lfLARjRH6En726ZyWdbXk3U55dgGechAwcdbRGxhO8BBdN8nhfLzONHRn7qHmxUSPz6mhinr0u044qrsZcnY+OwMT3bhGJpLHFO3foSLvZ82tiJ1L099YQ3RcEcW5e9chkbCD5Q3EJdzHC0P84/2Uc6rtSI3ZKopr4uhzOJWiFsP4ShzkUayOJPww+9JuCEGkrJ2IFhUkgQRaYtSuGMB5ttsiDjVYnDZB02HLezd+gFxodM5g6RB0/APHR+JAui/wjEjTBvP5wSyMkfP0UnNvBJzm1Si+PTGGWkz3rye//JZ7mJAiVcbgloBWwysgulYqDim7uYHIiVZRu2ScoctQMHrZoaP7IKMxkJKrGK4yxDH60s7IZR4uLRMXTclrHD2vy7gNSykEvln55mpfjKORPxWZdEzCiTNrckVgtOq0+RFFJavleBXyD/s/4BC1xcangoMsFgJQ8qJL4kl42uq0sQj5tG+OszV5GPxIcS1sTH1zzhJgb8RyF7 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:(13230031)(4636009)(396003)(39860400002)(376002)(136003)(346002)(230922051799003)(1800799009)(64100799003)(82310400011)(186009)(451199024)(36840700001)(40470700004)(46966006)(40460700003)(66899024)(5660300002)(83380400001)(40480700001)(55016003)(316002)(41300700001)(6666004)(36756003)(8676002)(70586007)(70206006)(36860700001)(478600001)(6636002)(54906003)(8936002)(7636003)(110136005)(86362001)(47076005)(7696005)(82740400003)(2906002)(4326008)(356005)(426003)(2616005)(107886003)(26005)(6286002)(1076003)(336012)(16526019); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Sep 2023 13:09:52.1434 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f1aa06ba-3316-400d-b124-08dbc02433cc 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: MN1PEPF0000ECD8.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ2PR12MB9006 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 From: Hamdan Igbaria Add support for creation of packet reformat object, via the ALLOC_PACKET_REFORMAT_CONTEXT command. Signed-off-by: Hamdan Igbaria Acked-by: Alex Vesker --- drivers/common/mlx5/mlx5_prm.h | 39 +++++++++++++++++ drivers/net/mlx5/hws/mlx5dr_cmd.c | 60 ++++++++++++++++++++++++++ drivers/net/mlx5/hws/mlx5dr_cmd.h | 11 +++++ drivers/net/mlx5/hws/mlx5dr_internal.h | 5 +++ drivers/net/mlx5/hws/mlx5dr_send.c | 5 --- 5 files changed, 115 insertions(+), 5 deletions(-) diff --git a/drivers/common/mlx5/mlx5_prm.h b/drivers/common/mlx5/mlx5_prm.h index 51f426c614..6749f2c037 100644 --- a/drivers/common/mlx5/mlx5_prm.h +++ b/drivers/common/mlx5/mlx5_prm.h @@ -1213,6 +1213,8 @@ enum { MLX5_CMD_OP_CREATE_FLOW_GROUP = 0x933, MLX5_CMD_OP_SET_FLOW_TABLE_ENTRY = 0x936, MLX5_CMD_OP_MODIFY_FLOW_TABLE = 0x93c, + MLX5_CMD_OP_ALLOC_PACKET_REFORMAT_CONTEXT = 0x93d, + MLX5_CMD_OP_DEALLOC_PACKET_REFORMAT_CONTEXT = 0x93e, MLX5_CMD_OP_ALLOC_FLOW_COUNTER = 0x939, MLX5_CMD_OP_QUERY_FLOW_COUNTER = 0x93b, MLX5_CMD_OP_CREATE_GENERAL_OBJECT = 0xa00, @@ -5180,6 +5182,43 @@ struct mlx5_ifc_modify_flow_table_out_bits { u8 reserved_at_40[0x60]; }; +struct mlx5_ifc_packet_reformat_context_in_bits { + u8 reformat_type[0x8]; + u8 reserved_at_8[0x4]; + u8 reformat_param_0[0x4]; + u8 reserved_at_16[0x6]; + u8 reformat_data_size[0xa]; + + u8 reformat_param_1[0x8]; + u8 reserved_at_40[0x8]; + u8 reformat_data[6][0x8]; + + u8 more_reformat_data[][0x8]; +}; + +struct mlx5_ifc_alloc_packet_reformat_context_in_bits { + u8 opcode[0x10]; + u8 uid[0x10]; + + u8 reserved_at_20[0x10]; + u8 op_mod[0x10]; + + u8 reserved_at_40[0xa0]; + + u8 packet_reformat_context[]; +}; + +struct mlx5_ifc_alloc_packet_reformat_out_bits { + u8 status[0x8]; + u8 reserved_at_8[0x18]; + + u8 syndrome[0x20]; + + u8 packet_reformat_id[0x20]; + + u8 reserved_at_60[0x20]; +}; + /* CQE format mask. */ #define MLX5E_CQE_FORMAT_MASK 0xc diff --git a/drivers/net/mlx5/hws/mlx5dr_cmd.c b/drivers/net/mlx5/hws/mlx5dr_cmd.c index 7771aeb8cf..d20ec7f0c4 100644 --- a/drivers/net/mlx5/hws/mlx5dr_cmd.c +++ b/drivers/net/mlx5/hws/mlx5dr_cmd.c @@ -779,6 +779,66 @@ mlx5dr_cmd_sq_create(struct ibv_context *ctx, return devx_obj; } +struct mlx5dr_devx_obj * +mlx5dr_cmd_packet_reformat_create(struct ibv_context *ctx, + struct mlx5dr_cmd_packet_reformat_create_attr *attr) +{ + uint32_t out[DEVX_ST_SZ_DW(alloc_packet_reformat_out)] = {0}; + size_t insz, cmd_data_sz, cmd_total_sz; + struct mlx5dr_devx_obj *devx_obj; + void *prctx; + void *pdata; + void *in; + + cmd_total_sz = DEVX_ST_SZ_BYTES(alloc_packet_reformat_context_in); + cmd_total_sz += DEVX_ST_SZ_BYTES(packet_reformat_context_in); + cmd_data_sz = DEVX_FLD_SZ_BYTES(packet_reformat_context_in, reformat_data); + insz = align(cmd_total_sz + attr->data_sz - cmd_data_sz, DW_SIZE); + in = simple_calloc(1, insz); + if (!in) { + rte_errno = ENOMEM; + return NULL; + } + + MLX5_SET(alloc_packet_reformat_context_in, in, opcode, + MLX5_CMD_OP_ALLOC_PACKET_REFORMAT_CONTEXT); + + prctx = DEVX_ADDR_OF(alloc_packet_reformat_context_in, in, + packet_reformat_context); + pdata = DEVX_ADDR_OF(packet_reformat_context_in, prctx, reformat_data); + + MLX5_SET(packet_reformat_context_in, prctx, reformat_type, attr->type); + MLX5_SET(packet_reformat_context_in, prctx, reformat_param_0, attr->reformat_param_0); + MLX5_SET(packet_reformat_context_in, prctx, reformat_data_size, attr->data_sz); + memcpy(pdata, attr->data, attr->data_sz); + + devx_obj = simple_malloc(sizeof(*devx_obj)); + if (!devx_obj) { + DR_LOG(ERR, "Failed to allocate memory for packet reformat object"); + rte_errno = ENOMEM; + goto out_free_in; + } + + devx_obj->obj = mlx5_glue->devx_obj_create(ctx, in, insz, out, sizeof(out)); + if (!devx_obj->obj) { + DR_LOG(ERR, "Failed to create packet reformat"); + rte_errno = errno; + goto out_free_devx; + } + + devx_obj->id = MLX5_GET(alloc_packet_reformat_out, out, packet_reformat_id); + + simple_free(in); + + return devx_obj; + +out_free_devx: + simple_free(devx_obj); +out_free_in: + simple_free(in); + return NULL; +} + int mlx5dr_cmd_sq_modify_rdy(struct mlx5dr_devx_obj *devx_obj) { uint32_t out[MLX5_ST_SZ_DW(modify_sq_out)] = {0}; diff --git a/drivers/net/mlx5/hws/mlx5dr_cmd.h b/drivers/net/mlx5/hws/mlx5dr_cmd.h index e57013c309..ee427c1829 100644 --- a/drivers/net/mlx5/hws/mlx5dr_cmd.h +++ b/drivers/net/mlx5/hws/mlx5dr_cmd.h @@ -155,6 +155,13 @@ struct mlx5dr_cmd_allow_other_vhca_access_attr { uint8_t access_key[ACCESS_KEY_LEN]; }; +struct mlx5dr_cmd_packet_reformat_create_attr { + uint8_t type; + size_t data_sz; + void *data; + uint8_t reformat_param_0; +}; + struct mlx5dr_cmd_query_ft_caps { uint8_t max_level; uint8_t reparse; @@ -270,6 +277,10 @@ mlx5dr_cmd_header_modify_pattern_create(struct ibv_context *ctx, uint32_t pattern_length, uint8_t *actions); +struct mlx5dr_devx_obj * +mlx5dr_cmd_packet_reformat_create(struct ibv_context *ctx, + struct mlx5dr_cmd_packet_reformat_create_attr *attr); + struct mlx5dr_devx_obj * mlx5dr_cmd_set_fte(struct ibv_context *ctx, uint32_t table_type, diff --git a/drivers/net/mlx5/hws/mlx5dr_internal.h b/drivers/net/mlx5/hws/mlx5dr_internal.h index c3c077667d..3770d28e62 100644 --- a/drivers/net/mlx5/hws/mlx5dr_internal.h +++ b/drivers/net/mlx5/hws/mlx5dr_internal.h @@ -91,4 +91,9 @@ static inline uint64_t roundup_pow_of_two(uint64_t n) return n == 1 ? 1 : 1ULL << log2above(n); } +static inline unsigned long align(unsigned long val, unsigned long align) +{ + return (val + align - 1) & ~(align - 1); +} + #endif /* MLX5DR_INTERNAL_H_ */ diff --git a/drivers/net/mlx5/hws/mlx5dr_send.c b/drivers/net/mlx5/hws/mlx5dr_send.c index e58fdeb117..622d574bfa 100644 --- a/drivers/net/mlx5/hws/mlx5dr_send.c +++ b/drivers/net/mlx5/hws/mlx5dr_send.c @@ -668,11 +668,6 @@ static int mlx5dr_send_ring_create_sq_obj(struct mlx5dr_context *ctx, return err; } -static inline unsigned long align(unsigned long val, unsigned long align) -{ - return (val + align - 1) & ~(align - 1); -} - static int mlx5dr_send_ring_open_sq(struct mlx5dr_context *ctx, struct mlx5dr_send_engine *queue, struct mlx5dr_send_ring_sq *sq, From patchwork Thu Sep 28 13:09:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shun Hao X-Patchwork-Id: 132141 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 5011542661; Thu, 28 Sep 2023 15:10:10 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6EB3340DDE; Thu, 28 Sep 2023 15:09:59 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2067.outbound.protection.outlook.com [40.107.237.67]) by mails.dpdk.org (Postfix) with ESMTP id C50F840A6F for ; Thu, 28 Sep 2023 15:09:57 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cMpMARQrUXLQkfM3x4XTpKan0G8WmPXgiUYCP7cpZ0p+qto1dT3BK7oXf5QpUvx6YpWD4EvFoJ5HsOjUoIbVnppTviiChm78yqDxG4S08kS51QpNpImYYKig148ZZnj4UGzDnHNvDNxHFPbBEw1liIM2vjMys9byx3+haQt5I3pwnv9qoSkZVayjWqGy0WojmCgObmG05eEoNwZECLjTLnji0m2j1G7sf7L8wUbmUTS4dy8EVC42Rqi9xQMfRNa0mchyXGcZsKIKhD5hIhWEfuSqo/cKfxwLCA70Y2+F0n9deUh67CTeK7R56B2dVGyUswUD5leYjfSfLKVyTTSXlQ== 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=k9IwMIsafOzErh5CTkmZqIegUCn6I2QdkeDeR7fvRcw=; b=Xpk9xXV9wOg/8jKfnXa9ORD1l6+ybr35ddL7tz5YuctFuCCAsmxd98SZfMBNGs3hUQq7SX8XkZ+IT9Fiupei2//fdRQEd6J4ZdNPEWP7n7zdhqVNV+HUppfYKX1sJ6LFhSpWkTDnJn7+SrIwD9+fmTLOcnmzW09rIIuDlOF6CX4BccUDLLqAWwHOGxA4s6JqlFBKd+giESA6cu4Ob1TE7ttq2Y51pUQ3S/C1sN32PUZ//3OvjuM2eYO0PrwBAWBEoQ/yLlw/pnoRNeAullh5nL+GU7OVZba97BWl+oBE2MSU1bhB21R/qiu8a1Puw7rZ6sxLRO3CfJQy3M3aAYZESw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=dpdk.org 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=k9IwMIsafOzErh5CTkmZqIegUCn6I2QdkeDeR7fvRcw=; b=tNOP1e6yJlbGSyeuzWUw3u1GSwmwE2JefVodW4Z3l/C3J8Pw9aNKkwAVslvwuOEjGL8BpFyASXUhZu5mvIrz2O2OGfSXHsZMdZHGB+hr6m/fJVVRkZsUgjK6KfjWRv7JCNllDKZdmoxfNZ3wYg1/X5hql7Spgr8URZE+biPeUbu+m5xl5l0tyTqBjxkdPc0scoye9XgEA7ivT2fii3l6xwu8RsVxlT2nlfio+Gf9lwOPdr3SrbyDLYzEJNMI/MhymG/Cv2K0NY3Y4Js3owvfTsMvEf1MIjjD8ZGRtbpFcrSi7fGOQdYwfGAY1ZljvPIJIJHV+A8+Q5E2V5j24uH9qA== Received: from BLAPR03CA0074.namprd03.prod.outlook.com (2603:10b6:208:329::19) by PH7PR12MB7234.namprd12.prod.outlook.com (2603:10b6:510:205::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6768.30; Thu, 28 Sep 2023 13:09:54 +0000 Received: from BL6PEPF0001AB55.namprd02.prod.outlook.com (2603:10b6:208:329:cafe::30) by BLAPR03CA0074.outlook.office365.com (2603:10b6:208:329::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.23 via Frontend Transport; Thu, 28 Sep 2023 13:09:53 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) 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.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by BL6PEPF0001AB55.mail.protection.outlook.com (10.167.241.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.14 via Frontend Transport; Thu, 28 Sep 2023 13:09:53 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Thu, 28 Sep 2023 06:09:39 -0700 Received: from nvidia.com (10.126.230.35) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Thu, 28 Sep 2023 06:09:36 -0700 From: Shun Hao To: , , , "Suanming Mou" CC: , , Hamdan Igbaria , Alex Vesker Subject: [PATCH v1 2/3] net/mlx5/hws: add mlx5dr obj struct to mlx5dr action Date: Thu, 28 Sep 2023 16:09:12 +0300 Message-ID: <20230928130913.2583907-3-shunh@nvidia.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20230928130913.2583907-1-shunh@nvidia.com> References: <20230928130913.2583907-1-shunh@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [10.126.230.35] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail202.nvidia.com (10.129.68.7) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF0001AB55:EE_|PH7PR12MB7234:EE_ X-MS-Office365-Filtering-Correlation-Id: 9642f986-84c3-4abe-2cbf-08dbc02434b9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Sh5mf/qsVWOlke2J8L9gcGK6g2mVYodb5eoffJpInyzStk44chsbRxYMnArJLn2wwPezPawmp6xo+lD+KIO5r2fRIDlieqP5OE16E5jcmFEJjr6wtncYYRD/KJ/FQP6pQ1Hdiwkk2X3OlCts0nEBhBBb4yuIO5+3gPjA7k9+kZmT+sFflyXxwDYieGcOHQMJ36xyGs52xGeYNqimhuhFMRNVndVzDycDITye85TmqvjCCM7rV7wpgVn+bpZuln9nyS/T+m8zQ4bfU/fTs7JfqrqG9bL+sS00FitcfIlDW4wCa8g+gA/ENOJCX7ol8ZOgBgYO8yvMfR95PA6Uk5rftrTkoYz2KZGI37a2Z/Iz9cKcwJ3zGibAdHDjwGuwUHRkbEZNLqq2IpFzkq3ALFOx1nw5CTdXFvC0CNAl1kU6WoDifMvAsHXI2xfFz6r9xN3JKyzfmFcKilUeRkNi+KbiJAFiZunR+8N53Uhe3CXJA939jyeMpbUEkYi+FP8ihWYqiVhru6M9qqxpZee5MFKswHc230NF6ZZSNN25gonjMGp7UaQoLPUuCiB9o2oiTZHUYykeRAl7gvSfudFYmJWNxG2tj1jBnCSIH+F9MNlC2WRWIkVBN/jIbrQxb0JhdghjkwAzSwH/qYW4fweubd2N2pCxuyhVjYlTAx9mw0EYJHPb+azrnLe9Qr/djsBXkaHKgOfgR3XHJGXuyX9bZUj17num/FLwyDk81eCu64M8q9dpjGwvy1gtUCPIL29zhJMEFlt6YbEuinbs/B2RnBkhlu6pUejTDJYHqTgNnnocMYU= X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230031)(4636009)(136003)(376002)(346002)(39860400002)(396003)(230922051799003)(451199024)(1800799009)(64100799003)(186009)(82310400011)(36840700001)(46966006)(40470700004)(6666004)(16526019)(8676002)(70206006)(2906002)(356005)(4326008)(26005)(6286002)(478600001)(8936002)(47076005)(41300700001)(7636003)(5660300002)(36860700001)(70586007)(7696005)(316002)(83380400001)(426003)(6636002)(86362001)(336012)(40480700001)(55016003)(110136005)(1076003)(2616005)(107886003)(54906003)(36756003)(40460700003)(82740400003)(42413004)(32563001); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Sep 2023 13:09:53.6932 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9642f986-84c3-4abe-2cbf-08dbc02434b9 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.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB55.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB7234 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 From: Hamdan Igbaria Add mlx5dr_devx_obj struct to mlx5dr_action, so we could hold the FT obj in dest table action. Signed-off-by: Hamdan Igbaria Acked-by: Alex Vesker --- drivers/net/mlx5/hws/mlx5dr_action.c | 2 ++ drivers/net/mlx5/hws/mlx5dr_action.h | 3 +++ drivers/net/mlx5/hws/mlx5dr_table.c | 1 - 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/net/mlx5/hws/mlx5dr_action.c b/drivers/net/mlx5/hws/mlx5dr_action.c index d38201d738..ba17d97517 100644 --- a/drivers/net/mlx5/hws/mlx5dr_action.c +++ b/drivers/net/mlx5/hws/mlx5dr_action.c @@ -785,6 +785,8 @@ mlx5dr_action_create_dest_table(struct mlx5dr_context *ctx, ret = mlx5dr_action_create_stcs(action, tbl->ft); if (ret) goto free_action; + + action->devx_dest.devx_obj = tbl->ft; } return action; diff --git a/drivers/net/mlx5/hws/mlx5dr_action.h b/drivers/net/mlx5/hws/mlx5dr_action.h index 314e289780..104c6880c1 100644 --- a/drivers/net/mlx5/hws/mlx5dr_action.h +++ b/drivers/net/mlx5/hws/mlx5dr_action.h @@ -148,6 +148,9 @@ struct mlx5dr_action { struct { struct mlx5dv_steering_anchor *sa; } root_tbl; + struct { + struct mlx5dr_devx_obj *devx_obj; + } devx_dest; }; }; diff --git a/drivers/net/mlx5/hws/mlx5dr_table.c b/drivers/net/mlx5/hws/mlx5dr_table.c index f91f04d924..c26b22c248 100644 --- a/drivers/net/mlx5/hws/mlx5dr_table.c +++ b/drivers/net/mlx5/hws/mlx5dr_table.c @@ -68,7 +68,6 @@ static void mlx5dr_table_down_default_fdb_miss_tbl(struct mlx5dr_table *tbl) return; mlx5dr_cmd_forward_tbl_destroy(default_miss); - ctx->common_res[tbl_type].default_miss = NULL; } From patchwork Thu Sep 28 13:09:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shun Hao X-Patchwork-Id: 132142 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 D38A942661; Thu, 28 Sep 2023 15:10:18 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8C68B40E36; Thu, 28 Sep 2023 15:10:00 +0200 (CEST) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2044.outbound.protection.outlook.com [40.107.94.44]) by mails.dpdk.org (Postfix) with ESMTP id 2AD5F40A6F for ; Thu, 28 Sep 2023 15:09:59 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NRfdrb9tVsi0QPFEHInwZeuJxZxFNRa8/MfirbCX9P/XHQAbVY9GurMItHSC2AiPVaKYg2AYEsrxP3ZXeXXgiQhlEWY+Ge4FR6MVZ4RiFxq1hTZB1QQyF6bTy/fYX9/QGwv92kOSseaK16My+/rcm4t05DoxQ1tC0mQ0RsuYv42W4Edw2SDNqdVDkT+48CEJADDHUsQwDZWLspE+3N2r2lbcrzNVVdF22wYOXZJ85oaZbuoYKbaOZjxoR3kda78mxjKeJKr5YWUtKiwXoywSv5St5ouSeQhX/q9xpsq0My05NpPQVFU9E+vyAdcUaclIT/nFyKoFAboQlNIwVuoPWw== 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=4fN7FvXAilQPFakOCE2IVns5YC2YFljew/bltsB5Nxo=; b=fDyqGpy1HH+bPypGJklRP5Er6pKA7jpwi3bQefkE8csHSzQRpVaBvZv5tCNbHcIn8R+jI+/BQVDcfX3MLAcgq7dSwytJLWtFJyZtCZTfGgiEvJ3NCzlUtbXDklFXJz0cETuNRW7AF+8jVNMx9ILkGVHRIBnq7+ZLFZwGrsZVxtAbxxu0EPPvckUEs7gX8MEtJPhtqnvkXNDZn4kF+iU980AxlJhJRLkEHiaIGreT0tfvmF9vxkMhmqA63D37rhJkBIvTzH7gBvMUe7eJn6xQifS3phfQLL6YtqB6iNj01lb826Y7Dc+TaP4JtQ2puZ9a0x7Fjs/fJiXamvK0vvNMvw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=dpdk.org 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=4fN7FvXAilQPFakOCE2IVns5YC2YFljew/bltsB5Nxo=; b=jGZtHydk1YIx0VhuyuAW+zw2yZy8BYOs2E5ZG1N79UQj2uaNPGdU/xItgDNYBRrlG7bU0IGXLJx+FcON2ONxL0DuWr4o85ojhNEjy3lIv2AMUvMEf5m3kGlBa+6cCf+yoom7PvtMMVOZIdqo0W362z6Lq3LWBKu18ZHX0GGij1qSTRU5t0GE3E4Xvva4aJ+0oKBB3A+G8IFi0yTMNL38mgI3HMmd0Gi5g85ouVqrgVKF/cSh5bKbZkUzro+ya1rHfw5+Xi0BM/lzYw6Fz4xtujk8CJ5VSJtkrbreBQLDGOqcczzXoF3dFd7hbyfPYpf/4XhFN3fh47b974FHlJBYLw== Received: from BLAPR03CA0081.namprd03.prod.outlook.com (2603:10b6:208:329::26) by LV2PR12MB5919.namprd12.prod.outlook.com (2603:10b6:408:173::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6813.20; Thu, 28 Sep 2023 13:09:55 +0000 Received: from BL6PEPF0001AB55.namprd02.prod.outlook.com (2603:10b6:208:329:cafe::27) by BLAPR03CA0081.outlook.office365.com (2603:10b6:208:329::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.25 via Frontend Transport; Thu, 28 Sep 2023 13:09:55 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) 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.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by BL6PEPF0001AB55.mail.protection.outlook.com (10.167.241.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.14 via Frontend Transport; Thu, 28 Sep 2023 13:09:55 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Thu, 28 Sep 2023 06:09:42 -0700 Received: from nvidia.com (10.126.230.35) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Thu, 28 Sep 2023 06:09:39 -0700 From: Shun Hao To: , , , "Suanming Mou" CC: , , Alex Vesker Subject: [PATCH v1 3/3] net/mlx5/hws: add support for mirroring Date: Thu, 28 Sep 2023 16:09:13 +0300 Message-ID: <20230928130913.2583907-4-shunh@nvidia.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20230928130913.2583907-1-shunh@nvidia.com> References: <20230928130913.2583907-1-shunh@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [10.126.230.35] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail202.nvidia.com (10.129.68.7) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF0001AB55:EE_|LV2PR12MB5919:EE_ X-MS-Office365-Filtering-Correlation-Id: 02548544-585d-4f49-5ab7-08dbc02435cb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: sEOw8LSvmXVRDfCPoJh0EQGCGFK9g7vgyEJgJ4YXpt9hR7Ftcdn4JkjuEOgcJ1u6inP3aUjqgl/qf9nJmSAzpAumlgDKn0PFe0wWF7ctiyNd96jHEq988uXGvt9wKOvjWsxFC9qfL6EJcn7J/iu0wids0HY2rEOXfphPP27eBnAt4uIrDaciYmaJEv7Whtu7IEyGylljH1VVn27qmEJ4bsjWx2hvAm0fKQ9euGeY2J3O6NfkNWwNLF3YUZGmjP/TK/pkt4rbwrIcioFwZ3lBHD8Fy8mQspzLBwea6u126X6NWeRK5JMKgbza1lYOhKVxYwhxnIMrCwMjNYWFp0Lk8TtpjG4OvSoUipGf5Af2XT7gaC37qC23M2UpRZLsr6g2cSN8ZnoduPXn+vwVQewgVY6BWz4CfJgka6nePr9UGkveBSGLHrGuxVSyow/aURih5rKcBsTwc8Gw9hp+/2s+w5QS6T6vISXvFSZCcLKULdVYWq9dlW1Ize5EiyE+doZzWy7fhPEQVLOsZqXj4tkzd3EAttjl9c7yU1JqzmgCu72q+37FvHQUyLeIDYkSrPpPWDKZ7T3Wvn1HMenZRrMoga7AVgRyUUa2y7g1q11vS+eOG9xXEtKKjbW+1GPqd3yPIl96PY6YdidKQ4yiHS4X0LDcqlQHkD2rUoZeieZH1r0OyQ0noFYDn4OjEtefout9s6ik3jkhT5PffP7/7nne9EcTs59DSC95qquLNthSLE9sXcHZpWC+QLGC3b53xvV9 X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230031)(4636009)(39860400002)(396003)(346002)(376002)(136003)(230922051799003)(186009)(64100799003)(82310400011)(1800799009)(451199024)(40470700004)(36840700001)(46966006)(2616005)(7696005)(6666004)(36756003)(83380400001)(86362001)(82740400003)(356005)(107886003)(7636003)(40460700003)(47076005)(36860700001)(54906003)(30864003)(16526019)(55016003)(316002)(40480700001)(26005)(5660300002)(70586007)(6286002)(70206006)(41300700001)(2906002)(336012)(426003)(4326008)(8676002)(110136005)(1076003)(8936002)(478600001)(6636002); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Sep 2023 13:09:55.4744 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 02548544-585d-4f49-5ab7-08dbc02435cb 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.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB55.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV2PR12MB5919 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 This patch supports mirroring by adding an dest_array action. The action accecpts a list containing multiple destination actions, and can duplicate packet and forward to each destination in the list. Signed-off-by: Shun Hao Acked-by: Alex Vesker --- drivers/common/mlx5/mlx5_prm.h | 23 ++++- drivers/net/mlx5/hws/mlx5dr.h | 34 +++++++ drivers/net/mlx5/hws/mlx5dr_action.c | 132 ++++++++++++++++++++++++++- drivers/net/mlx5/hws/mlx5dr_action.h | 3 + drivers/net/mlx5/hws/mlx5dr_cmd.c | 63 +++++++++++-- drivers/net/mlx5/hws/mlx5dr_cmd.h | 19 +++- drivers/net/mlx5/hws/mlx5dr_debug.c | 1 + drivers/net/mlx5/hws/mlx5dr_table.c | 7 +- 8 files changed, 264 insertions(+), 18 deletions(-) diff --git a/drivers/common/mlx5/mlx5_prm.h b/drivers/common/mlx5/mlx5_prm.h index 6749f2c037..5d62dd8e84 100644 --- a/drivers/common/mlx5/mlx5_prm.h +++ b/drivers/common/mlx5/mlx5_prm.h @@ -2310,7 +2310,11 @@ struct mlx5_ifc_cmd_hca_cap_2_bits { }; struct mlx5_ifc_esw_cap_bits { - u8 reserved_at_0[0x60]; + u8 reserved_at_0[0x1d]; + u8 merged_eswitch[0x1]; + u8 reserved_at_1e[0x2]; + + u8 reserved_at_20[0x40]; u8 esw_manager_vport_number_valid[0x1]; u8 reserved_at_61[0xf]; @@ -5034,6 +5038,7 @@ 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, + MLX5_FLOW_DESTINATION_TYPE_TIR = 0x2, }; enum mlx5_flow_context_action { @@ -5073,6 +5078,19 @@ union mlx5_ifc_dest_format_flow_counter_list_auto_bits { u8 reserved_at_0[0x40]; }; +struct mlx5_ifc_extended_dest_format_bits { + struct mlx5_ifc_dest_format_bits destination_entry; + + u8 packet_reformat_id[0x20]; + + u8 reserved_at_60[0x20]; +}; + +#define MLX5_IFC_MULTI_PATH_FT_MAX_LEVEL 64 + +#ifdef PEDANTIC +#pragma GCC diagnostic ignored "-Wpedantic" +#endif struct mlx5_ifc_flow_context_bits { u8 reserved_at_00[0x20]; u8 group_id[0x20]; @@ -5091,8 +5109,7 @@ struct mlx5_ifc_flow_context_bits { 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]; + union mlx5_ifc_dest_format_flow_counter_list_auto_bits destination[0]; }; struct mlx5_ifc_set_fte_in_bits { diff --git a/drivers/net/mlx5/hws/mlx5dr.h b/drivers/net/mlx5/hws/mlx5dr.h index 184de8feaf..5eabbc34a4 100644 --- a/drivers/net/mlx5/hws/mlx5dr.h +++ b/drivers/net/mlx5/hws/mlx5dr.h @@ -46,6 +46,7 @@ enum mlx5dr_action_type { MLX5DR_ACTION_TYP_ASO_METER, MLX5DR_ACTION_TYP_ASO_CT, MLX5DR_ACTION_TYP_DEST_ROOT, + MLX5DR_ACTION_TYP_DEST_ARRAY, MLX5DR_ACTION_TYP_MAX, }; @@ -213,6 +214,20 @@ struct mlx5dr_rule_action { }; }; +struct mlx5dr_action_dest_attr { + /* Required action combination */ + enum mlx5dr_action_type *action_type; + + /* Required destination action to forward the packet */ + struct mlx5dr_action *dest; + + /* Optional reformat data */ + struct { + size_t reformat_data_sz; + void *reformat_data; + } reformat; +}; + /* Open a context used for direct rule insertion using hardware steering. * Each context can contain multiple tables of different types. * @@ -604,6 +619,25 @@ 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 a dest array action, this action can duplicate packets and forward to + * multiple destinations in the destination list. + * @param[in] ctx + * The context in which the new action will be created. + * @param[in] num_dest + * The number of dests attributes. + * @param[in] dests + * The destination array. Each contains a destination action and can have + * additional actions. + * @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_array(struct mlx5dr_context *ctx, + size_t num_dest, + struct mlx5dr_action_dest_attr *dests, + uint32_t flags); + /* Create dest root table, this action will jump to root table according * the given priority. * @param[in] ctx diff --git a/drivers/net/mlx5/hws/mlx5dr_action.c b/drivers/net/mlx5/hws/mlx5dr_action.c index ba17d97517..e890ebb481 100644 --- a/drivers/net/mlx5/hws/mlx5dr_action.c +++ b/drivers/net/mlx5/hws/mlx5dr_action.c @@ -34,7 +34,8 @@ static const uint32_t action_order_arr[MLX5DR_TABLE_TYPE_MAX][MLX5DR_ACTION_TYP_ BIT(MLX5DR_ACTION_TYP_MISS) | BIT(MLX5DR_ACTION_TYP_TIR) | BIT(MLX5DR_ACTION_TYP_DROP) | - BIT(MLX5DR_ACTION_TYP_DEST_ROOT), + BIT(MLX5DR_ACTION_TYP_DEST_ROOT) | + BIT(MLX5DR_ACTION_TYP_DEST_ARRAY), BIT(MLX5DR_ACTION_TYP_LAST), }, [MLX5DR_TABLE_TYPE_NIC_TX] = { @@ -71,7 +72,8 @@ static const uint32_t action_order_arr[MLX5DR_TABLE_TYPE_MAX][MLX5DR_ACTION_TYP_ BIT(MLX5DR_ACTION_TYP_MISS) | BIT(MLX5DR_ACTION_TYP_VPORT) | BIT(MLX5DR_ACTION_TYP_DROP) | - BIT(MLX5DR_ACTION_TYP_DEST_ROOT), + BIT(MLX5DR_ACTION_TYP_DEST_ROOT) | + BIT(MLX5DR_ACTION_TYP_DEST_ARRAY), BIT(MLX5DR_ACTION_TYP_LAST), }, }; @@ -533,6 +535,7 @@ static void mlx5dr_action_fill_stc_attr(struct mlx5dr_action *action, } break; case MLX5DR_ACTION_TYP_TBL: + case MLX5DR_ACTION_TYP_DEST_ARRAY: attr->action_type = MLX5_IFC_STC_ACTION_TYPE_JUMP_TO_FT; attr->action_offset = MLX5DR_ACTION_OFFSET_HIT; attr->dest_table_id = obj->id; @@ -864,6 +867,8 @@ mlx5dr_action_create_dest_tir(struct mlx5dr_context *ctx, ret = mlx5dr_action_create_stcs(action, cur_obj); if (ret) goto clean_obj; + + action->devx_dest.devx_obj = cur_obj; } return action; @@ -1696,6 +1701,124 @@ mlx5dr_action_create_modify_header(struct mlx5dr_context *ctx, return NULL; } +struct mlx5dr_action * +mlx5dr_action_create_dest_array(struct mlx5dr_context *ctx, + size_t num_dest, + struct mlx5dr_action_dest_attr *dests, + uint32_t flags) +{ + struct mlx5dr_cmd_set_fte_dest *dest_list = NULL; + struct mlx5dr_cmd_ft_create_attr ft_attr = {0}; + struct mlx5dr_cmd_set_fte_attr fte_attr = {0}; + struct mlx5dr_cmd_forward_tbl *fw_island; + enum mlx5dr_table_type table_type; + struct mlx5dr_action *action; + uint32_t i; + int ret; + + if (num_dest <= 1) { + rte_errno = EINVAL; + DR_LOG(ERR, "Action must have multiple dests"); + return NULL; + } + + if (flags == (MLX5DR_ACTION_FLAG_HWS_RX | MLX5DR_ACTION_FLAG_SHARED)) { + ft_attr.type = FS_FT_NIC_RX; + ft_attr.level = MLX5_IFC_MULTI_PATH_FT_MAX_LEVEL - 1; + table_type = MLX5DR_TABLE_TYPE_NIC_RX; + } else if (flags == (MLX5DR_ACTION_FLAG_HWS_FDB | MLX5DR_ACTION_FLAG_SHARED)) { + ft_attr.type = FS_FT_FDB; + ft_attr.level = ctx->caps->fdb_ft.max_level - 1; + table_type = MLX5DR_TABLE_TYPE_FDB; + } else { + DR_LOG(ERR, "Action flags not supported"); + 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; + } + + dest_list = simple_calloc(num_dest, sizeof(*dest_list)); + if (!dest_list) { + DR_LOG(ERR, "Failed to allocate memory for destinations"); + rte_errno = ENOMEM; + return NULL; + } + + for (i = 0; i < num_dest; i++) { + enum mlx5dr_action_type *action_type = dests[i].action_type; + + if (!mlx5dr_action_check_combo(dests[i].action_type, table_type)) { + DR_LOG(ERR, "Invalid combination of actions"); + rte_errno = EINVAL; + goto free_dest_list; + } + + for (; *action_type != MLX5DR_ACTION_TYP_LAST; action_type++) { + switch (*action_type) { + case MLX5DR_ACTION_TYP_TBL: + dest_list[i].destination_type = + MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE; + dest_list[i].destination_id = dests[i].dest->devx_dest.devx_obj->id; + fte_attr.action_flags |= MLX5_FLOW_CONTEXT_ACTION_FWD_DEST; + fte_attr.ignore_flow_level = 1; + break; + case MLX5DR_ACTION_TYP_VPORT: + dest_list[i].destination_type = MLX5_FLOW_DESTINATION_TYPE_VPORT; + dest_list[i].destination_id = dests[i].dest->vport.vport_num; + fte_attr.action_flags |= MLX5_FLOW_CONTEXT_ACTION_FWD_DEST; + if (ctx->caps->merged_eswitch) { + dest_list[i].ext_flags |= + MLX5DR_CMD_EXT_DEST_ESW_OWNER_VHCA_ID; + dest_list[i].esw_owner_vhca_id = + dests[i].dest->vport.esw_owner_vhca_id; + } + break; + case MLX5DR_ACTION_TYP_TIR: + dest_list[i].destination_type = MLX5_FLOW_DESTINATION_TYPE_TIR; + dest_list[i].destination_id = dests[i].dest->devx_dest.devx_obj->id; + fte_attr.action_flags |= MLX5_FLOW_CONTEXT_ACTION_FWD_DEST; + break; + default: + DR_LOG(ERR, "Unsupported action in dest_array"); + rte_errno = ENOTSUP; + goto free_dest_list; + } + } + } + fte_attr.dests_num = num_dest; + fte_attr.dests = dest_list; + + fw_island = mlx5dr_cmd_forward_tbl_create(ctx->ibv_ctx, &ft_attr, &fte_attr); + if (!fw_island) + goto free_dest_list; + + action = mlx5dr_action_create_generic(ctx, flags, MLX5DR_ACTION_TYP_DEST_ARRAY); + if (!action) + goto destroy_fw_island; + + ret = mlx5dr_action_create_stcs(action, fw_island->ft); + if (ret) + goto free_action; + + action->dest_array.fw_island = fw_island; + + simple_free(dest_list); + return action; + +free_action: + simple_free(action); +destroy_fw_island: + mlx5dr_cmd_forward_tbl_destroy(fw_island); +free_dest_list: + simple_free(dest_list); + return NULL; +} + struct mlx5dr_action * mlx5dr_action_create_dest_root(struct mlx5dr_context *ctx, uint16_t priority, @@ -1778,6 +1901,10 @@ static void mlx5dr_action_destroy_hws(struct mlx5dr_action *action) mlx5dr_action_destroy_stcs(action); mlx5dr_action_put_shared_stc(action, MLX5DR_CONTEXT_SHARED_STC_POP); break; + case MLX5DR_ACTION_TYP_DEST_ARRAY: + mlx5dr_action_destroy_stcs(action); + mlx5dr_cmd_forward_tbl_destroy(action->dest_array.fw_island); + break; case MLX5DR_ACTION_TYP_REFORMAT_TNL_L3_TO_L2: case MLX5DR_ACTION_TYP_MODIFY_HDR: for (i = 0; i < action->modify_header.num_of_patterns; i++) { @@ -2285,6 +2412,7 @@ int mlx5dr_action_template_process(struct mlx5dr_action_template *at) case MLX5DR_ACTION_TYP_TIR: case MLX5DR_ACTION_TYP_TBL: case MLX5DR_ACTION_TYP_DEST_ROOT: + case MLX5DR_ACTION_TYP_DEST_ARRAY: 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 104c6880c1..efe07c9d47 100644 --- a/drivers/net/mlx5/hws/mlx5dr_action.h +++ b/drivers/net/mlx5/hws/mlx5dr_action.h @@ -151,6 +151,9 @@ struct mlx5dr_action { struct { struct mlx5dr_devx_obj *devx_obj; } devx_dest; + struct { + struct mlx5dr_cmd_forward_tbl *fw_island; + } dest_array; }; }; diff --git a/drivers/net/mlx5/hws/mlx5dr_cmd.c b/drivers/net/mlx5/hws/mlx5dr_cmd.c index d20ec7f0c4..3b4545324e 100644 --- a/drivers/net/mlx5/hws/mlx5dr_cmd.c +++ b/drivers/net/mlx5/hws/mlx5dr_cmd.c @@ -157,18 +157,31 @@ mlx5dr_cmd_set_fte(struct ibv_context *ctx, 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; + uint32_t dest_entry_sz; + uint32_t total_dest_sz; void *in_flow_context; uint32_t action_flags; - void *in_dests; + uint8_t *in_dests; + uint32_t inlen; + uint32_t *in; + uint32_t i; + + dest_entry_sz = MLX5_ST_SZ_BYTES(dest_format); + total_dest_sz = dest_entry_sz * fte_attr->dests_num; + inlen = align((MLX5_ST_SZ_BYTES(set_fte_in) + total_dest_sz), DW_SIZE); + in = simple_calloc(1, inlen); + if (!in) { + rte_errno = ENOMEM; + return NULL; + } devx_obj = simple_malloc(sizeof(*devx_obj)); if (!devx_obj) { DR_LOG(ERR, "Failed to allocate memory for fte object"); rte_errno = ENOMEM; - return NULL; + goto free_in; } MLX5_SET(set_fte_in, in, opcode, MLX5_CMD_OP_SET_FLOW_TABLE_ENTRY); @@ -178,19 +191,45 @@ mlx5dr_cmd_set_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, flow_source, fte_attr->flow_source); + MLX5_SET(set_fte_in, in, ignore_flow_level, fte_attr->ignore_flow_level); action_flags = fte_attr->action_flags; MLX5_SET(flow_context, in_flow_context, action, action_flags); 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); + in_dests = (uint8_t *)MLX5_ADDR_OF(flow_context, in_flow_context, destination); + + for (i = 0; i < fte_attr->dests_num; i++) { + struct mlx5dr_cmd_set_fte_dest *dest = &fte_attr->dests[i]; + + switch (dest->destination_type) { + case MLX5_FLOW_DESTINATION_TYPE_VPORT: + if (dest->ext_flags & MLX5DR_CMD_EXT_DEST_ESW_OWNER_VHCA_ID) { + MLX5_SET(dest_format, in_dests, + destination_eswitch_owner_vhca_id_valid, 1); + MLX5_SET(dest_format, in_dests, + destination_eswitch_owner_vhca_id, + dest->esw_owner_vhca_id); + } + /* Fall through */ + case MLX5_FLOW_DESTINATION_TYPE_TIR: + case MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE: + MLX5_SET(dest_format, in_dests, destination_type, + dest->destination_type); + MLX5_SET(dest_format, in_dests, destination_id, + dest->destination_id); + break; + default: + rte_errno = EOPNOTSUPP; + goto free_devx; + } + + in_dests = in_dests + dest_entry_sz; + } + MLX5_SET(flow_context, in_flow_context, destination_list_size, fte_attr->dests_num); } - devx_obj->obj = mlx5_glue->devx_obj_create(ctx, in, sizeof(in), out, sizeof(out)); + devx_obj->obj = mlx5_glue->devx_obj_create(ctx, in, inlen, out, sizeof(out)); if (!devx_obj->obj) { DR_LOG(ERR, "Failed to create FTE (syndrome: %#x)", mlx5dr_cmd_get_syndrome(out)); @@ -198,10 +237,13 @@ mlx5dr_cmd_set_fte(struct ibv_context *ctx, goto free_devx; } + simple_free(in); return devx_obj; free_devx: simple_free(devx_obj); +free_in: + simple_free(in); return NULL; } @@ -1224,6 +1266,9 @@ int mlx5dr_cmd_query_caps(struct ibv_context *ctx, caps->eswitch_manager_vport_number = MLX5_GET(query_hca_cap_out, out, capability.esw_cap.esw_manager_vport_number); + + caps->merged_eswitch = MLX5_GET(query_hca_cap_out, out, + capability.esw_cap.merged_eswitch); } ret = mlx5_glue->query_device_ex(ctx, NULL, &attr_ex); diff --git a/drivers/net/mlx5/hws/mlx5dr_cmd.h b/drivers/net/mlx5/hws/mlx5dr_cmd.h index ee427c1829..37cb501c98 100644 --- a/drivers/net/mlx5/hws/mlx5dr_cmd.h +++ b/drivers/net/mlx5/hws/mlx5dr_cmd.h @@ -5,11 +5,25 @@ #ifndef MLX5DR_CMD_H_ #define MLX5DR_CMD_H_ -struct mlx5dr_cmd_set_fte_attr { - uint32_t action_flags; +enum mlx5dr_cmd_ext_dest_flags { + MLX5DR_CMD_EXT_DEST_REFORMAT = 1 << 0, + MLX5DR_CMD_EXT_DEST_ESW_OWNER_VHCA_ID = 1 << 1, +}; + +struct mlx5dr_cmd_set_fte_dest { uint8_t destination_type; uint32_t destination_id; + enum mlx5dr_cmd_ext_dest_flags ext_flags; + uint16_t esw_owner_vhca_id; +}; + +struct mlx5dr_cmd_set_fte_attr { + uint32_t action_flags; + uint8_t ignore_flow_level; uint8_t flow_source; + uint32_t packet_reformat_id; + uint32_t dests_num; + struct mlx5dr_cmd_set_fte_dest *dests; }; struct mlx5dr_cmd_ft_create_attr { @@ -210,6 +224,7 @@ struct mlx5dr_cmd_query_caps { struct mlx5dr_cmd_query_ft_caps nic_ft; struct mlx5dr_cmd_query_ft_caps fdb_ft; bool eswitch_manager; + uint8_t merged_eswitch; uint32_t eswitch_manager_vport_number; uint8_t log_header_modify_argument_granularity; uint8_t log_header_modify_argument_max_alloc; diff --git a/drivers/net/mlx5/hws/mlx5dr_debug.c b/drivers/net/mlx5/hws/mlx5dr_debug.c index 48810142a0..7ede8ec43f 100644 --- a/drivers/net/mlx5/hws/mlx5dr_debug.c +++ b/drivers/net/mlx5/hws/mlx5dr_debug.c @@ -23,6 +23,7 @@ const char *mlx5dr_debug_action_type_str[] = { [MLX5DR_ACTION_TYP_ASO_METER] = "ASO_METER", [MLX5DR_ACTION_TYP_ASO_CT] = "ASO_CT", [MLX5DR_ACTION_TYP_DEST_ROOT] = "DEST_ROOT", + [MLX5DR_ACTION_TYP_DEST_ARRAY] = "DEST_ARRAY", }; static_assert(ARRAY_SIZE(mlx5dr_debug_action_type_str) == MLX5DR_ACTION_TYP_MAX, diff --git a/drivers/net/mlx5/hws/mlx5dr_table.c b/drivers/net/mlx5/hws/mlx5dr_table.c index c26b22c248..c8d60e68f3 100644 --- a/drivers/net/mlx5/hws/mlx5dr_table.c +++ b/drivers/net/mlx5/hws/mlx5dr_table.c @@ -22,6 +22,7 @@ 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_cmd_set_fte_dest dest = {0}; struct mlx5dr_context *ctx = tbl->ctx; uint8_t tbl_type = tbl->type; @@ -37,9 +38,11 @@ mlx5dr_table_up_default_fdb_miss_tbl(struct mlx5dr_table *tbl) ft_attr.level = tbl->ctx->caps->fdb_ft.max_level; /* The last level */ ft_attr.rtc_valid = false; + dest.destination_type = MLX5_FLOW_DESTINATION_TYPE_VPORT; + dest.destination_id = ctx->caps->eswitch_manager_vport_number; fte_attr.action_flags = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST; - fte_attr.destination_type = MLX5_FLOW_DESTINATION_TYPE_VPORT; - fte_attr.destination_id = ctx->caps->eswitch_manager_vport_number; + fte_attr.dests_num = 1; + fte_attr.dests = &dest; default_miss = mlx5dr_cmd_forward_tbl_create(mlx5dr_context_get_local_ibv(ctx), &ft_attr, &fte_attr);