From patchwork Wed Feb 28 09:40:56 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 137413 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 A939543C1D; Wed, 28 Feb 2024 10:41:18 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5463C4027D; Wed, 28 Feb 2024 10:41:18 +0100 (CET) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2040.outbound.protection.outlook.com [40.107.237.40]) by mails.dpdk.org (Postfix) with ESMTP id 0EBFE4003C for ; Wed, 28 Feb 2024 10:41:17 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ENk8T3NdMtuANSFI0vi4suJkUmp0yJNEFI5R2f4avhl32EOB9cmdv9Af9BXy+5O+wUztDmynD0T5fwUEUOD/4zpKQhnHGkoPTQ4/ft2TOGRZ9WYpqk4nZXGDZ+N8X/OFOLTSsyfY4RPOwaARudYwGk8vIApfm1JqzQBdKZvJ8AYmBcsLYu9w6DYuGl63XqboP+yZC7CKdgZcfTcQOYSoypoqMkGzSnD3MB2GnyJEQ8iOr50KmgfKAtExJW49LI27Bc7yo9RVhiUtTFZlKCeVjJ+xeXzeSsQiu4dR04TMAujr+MDvy/vVNB/gmRqSWINe0Sc2x/c7nPfFFkzpeqkt8A== 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=cfQ5+zxy2f4jG0cxci1irDgi4/5Hokyktyn5K5ErInY=; b=hnMvorx2Dam/ItrMySRAcSIZMsflt00l4pllOIxXDUHu7BClcXyvCbI5+LgKFCerHf3CYgcPd9W/1HRl+tdcGykKQ+L0Z8bOAtinjT33N81px5SW78LZPBERxcvNllfjeZPt8+1tf5XSirxWjKGmrMf3FanGLgM5Lm9FTnucI2/yxFvfl+ARIcwAxeHicPoh7ZK5qSP3zGouA85rIR1op6yX4HYWUmLZ5AY9kKJqAQ4TqIJn5/wbn5gN8N1iQRJTd5enoZmpCwKMCY3d4cA31Ec16ruSqK90NZgO88EJT4Fb8BspV+QeB7XlbMaag1Tbhe1HQZVtsJv9gze5bNqWdg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.232) 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 (0) 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=cfQ5+zxy2f4jG0cxci1irDgi4/5Hokyktyn5K5ErInY=; b=inMx1q2y2hXsvQyAu78ve0SvE2e6VlYaU+aGB1jE4X9o+7TuFZwlA4YUbZpn+Hl0HGHAIaPYSqpNGJXBJoSAjjxSbC0fqIbPQ/en2f9loXODMF8Tg6xiV0RupXa1vaF3KnLi4aT+oB2IOHSHmXCg66CtKGgovll7gOvJPHUYlAslL837qdQH3AC4muVu5VEHYDQG0W2PTYRL6E1xOI2TNHmNg4fyaNEgHpqQ75P0EZ2zDxJOiBRXmPil96ETJi/h8AfpMLDijf7125RKwGCLLFxhnwjONjfCkYagEyxIBJpN2HhqiXiHqrf+ZOsMATBW2oi5XvmuGD0V5xaQ7weoOA== Received: from DS7PR03CA0350.namprd03.prod.outlook.com (2603:10b6:8:55::27) by BL3PR12MB6476.namprd12.prod.outlook.com (2603:10b6:208:3bc::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7316.31; Wed, 28 Feb 2024 09:41:14 +0000 Received: from DS3PEPF000099D7.namprd04.prod.outlook.com (2603:10b6:8:55:cafe::be) by DS7PR03CA0350.outlook.office365.com (2603:10b6:8:55::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7339.27 via Frontend Transport; Wed, 28 Feb 2024 09:41:14 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.232) 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.118.232 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.232; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.232) by DS3PEPF000099D7.mail.protection.outlook.com (10.167.17.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7292.25 via Frontend Transport; Wed, 28 Feb 2024 09:41:14 +0000 Received: from drhqmail201.nvidia.com (10.126.190.180) by mail.nvidia.com (10.127.129.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Wed, 28 Feb 2024 01:41:04 -0800 Received: from drhqmail202.nvidia.com (10.126.190.181) by drhqmail201.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.12; Wed, 28 Feb 2024 01:41:03 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.126.190.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.12 via Frontend Transport; Wed, 28 Feb 2024 01:41:01 -0800 From: Michael Baum To: CC: Matan Azrad , Dariusz Sosnowski , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou , Erez Shitrit Subject: [PATCH] net/mlx5: add HWS support for matching ingress metadata Date: Wed, 28 Feb 2024 11:40:56 +0200 Message-ID: <20240228094056.3107676-1-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS3PEPF000099D7:EE_|BL3PR12MB6476:EE_ X-MS-Office365-Filtering-Correlation-Id: 573caeb4-aba2-4849-092e-08dc384167c6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: LMrNcC1A916CQjsUX+BWdbZA4IeEsoPVBs4mod6gURPxehzI7TBQiazdkifcKD46mvl3aJq0DJmhphKH0/ZX1WET78uiCX5mvYQPYo3HhV2OyJr0UDH/NLZs85fnLjtDb0dXoqLQiHLWIFmtGDQzG8zwN1AixZdykMop9rSh6rg3yqYgWP8FnQvd+iFu/180kuJIiJ+6FYiPcEBJic79mEaBpQsaObVc6QEwyEihH0Yg9YsrhPs1Z/hJ9HuYbFpkQqwtdebBRJK7XcYt34UWD5srT7v8WgK+TSEUY6yptrhLwONUiOYWtWDhOxrpn1hzpxMdDX3ekrxrLxQNfrzHTOnIATjuVgRM+80BSQz+YOtmxZkkravmWJwHtHSkh9sz5h8FPY1tf2RvC7z6xLt8MuId332GoXDcuGTj/w2LJuroTUBkEdty6MtxZ+/MDXJmRHx/zhOFvCUnHyR4bJnw+Vvt0Aw3iaj856wTeOi0gg6h63gR5tAlr4gdGnhQuR3RSM7c/Ezrqjd9UIi45lrxSSdxlbqQXL1OqVr5qCIZoz7Jmrzi8YadgEAyxB9a+id7CJ9GoEA2gnfWTX8ogsLCqvci2swyEnCHPB/xjoDB0/2zeuJLNMjzbl9xT9goLUqT94CYoftpROKjJhfxD6swCcT1/S1Mc421K3BaVdmxZ+G9VOfmakRioFHtrLSO0EufQHzYj7Xwz1/IPbpRGMKFQDWlhfXoSUlxuZ++3ouJULj0jlZVJZ+jXHB+HpgmzRr/ X-Forefront-Antispam-Report: CIP:216.228.118.232; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc7edge1.nvidia.com; CAT:NONE; SFS:(13230031)(82310400014)(36860700004); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Feb 2024 09:41:14.3579 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 573caeb4-aba2-4849-092e-08dc384167c6 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.118.232]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: DS3PEPF000099D7.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR12MB6476 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 matching metadata in HWS ingress rules. It using REG_B matching which is supported for each device supports HWS. Signed-off-by: Michael Baum Reviewed-by: Erez Shitrit --- drivers/net/mlx5/hws/mlx5dr.h | 1 + drivers/net/mlx5/hws/mlx5dr_definer.c | 32 ++++++++++++++++++--------- drivers/net/mlx5/mlx5_flow.h | 16 ++++++++------ drivers/net/mlx5/mlx5_flow_dv.c | 19 ++++++++++------ drivers/net/mlx5/mlx5_flow_hw.c | 23 +++++++++---------- 5 files changed, 55 insertions(+), 36 deletions(-) diff --git a/drivers/net/mlx5/hws/mlx5dr.h b/drivers/net/mlx5/hws/mlx5dr.h index d612f300c6..a323b29cb4 100644 --- a/drivers/net/mlx5/hws/mlx5dr.h +++ b/drivers/net/mlx5/hws/mlx5dr.h @@ -18,6 +18,7 @@ enum mlx5dr_table_type { MLX5DR_TABLE_TYPE_NIC_TX, MLX5DR_TABLE_TYPE_FDB, MLX5DR_TABLE_TYPE_MAX, + MLX5DR_TABLE_TYPE_DONTCARE = MLX5DR_TABLE_TYPE_MAX, }; enum mlx5dr_matcher_resource_mode { diff --git a/drivers/net/mlx5/hws/mlx5dr_definer.c b/drivers/net/mlx5/hws/mlx5dr_definer.c index e036aca781..9b3508471b 100644 --- a/drivers/net/mlx5/hws/mlx5dr_definer.c +++ b/drivers/net/mlx5/hws/mlx5dr_definer.c @@ -1741,6 +1741,7 @@ mlx5dr_definer_conv_item_tag(struct mlx5dr_definer_conv_data *cd, if (item->type == RTE_FLOW_ITEM_TYPE_TAG) reg = flow_hw_get_reg_id_from_ctx(cd->ctx, RTE_FLOW_ITEM_TYPE_TAG, + MLX5DR_TABLE_TYPE_DONTCARE, v->index); else reg = (int)v->index; @@ -1801,9 +1802,10 @@ mlx5dr_definer_conv_item_quota(struct mlx5dr_definer_conv_data *cd, __rte_unused struct rte_flow_item *item, int item_idx) { - int mtr_reg = - flow_hw_get_reg_id_from_ctx(cd->ctx, RTE_FLOW_ITEM_TYPE_METER_COLOR, - 0); + int mtr_reg = flow_hw_get_reg_id_from_ctx(cd->ctx, + RTE_FLOW_ITEM_TYPE_METER_COLOR, + MLX5DR_TABLE_TYPE_DONTCARE, + 0); struct mlx5dr_definer_fc *fc; if (mtr_reg < 0) { @@ -1822,6 +1824,7 @@ mlx5dr_definer_conv_item_quota(struct mlx5dr_definer_conv_data *cd, static int mlx5dr_definer_conv_item_metadata(struct mlx5dr_definer_conv_data *cd, + enum mlx5dr_table_type table_domain_type, struct rte_flow_item *item, int item_idx) { @@ -1833,7 +1836,8 @@ mlx5dr_definer_conv_item_metadata(struct mlx5dr_definer_conv_data *cd, if (!m) return 0; - reg = flow_hw_get_reg_id_from_ctx(cd->ctx, RTE_FLOW_ITEM_TYPE_META, -1); + reg = flow_hw_get_reg_id_from_ctx(cd->ctx, RTE_FLOW_ITEM_TYPE_META, + table_domain_type, -1); if (reg <= 0) { DR_LOG(ERR, "Invalid register for item metadata"); rte_errno = EINVAL; @@ -2140,8 +2144,9 @@ mlx5dr_definer_conv_item_conntrack(struct mlx5dr_definer_conv_data *cd, if (!m) return 0; - reg = flow_hw_get_reg_id_from_ctx(cd->ctx, RTE_FLOW_ITEM_TYPE_CONNTRACK, - -1); + reg = flow_hw_get_reg_id_from_ctx(cd->ctx, + RTE_FLOW_ITEM_TYPE_CONNTRACK, + MLX5DR_TABLE_TYPE_DONTCARE, -1); if (reg <= 0) { DR_LOG(ERR, "Invalid register for item conntrack"); rte_errno = EINVAL; @@ -2283,7 +2288,8 @@ mlx5dr_definer_conv_item_meter_color(struct mlx5dr_definer_conv_data *cd, return 0; reg = flow_hw_get_reg_id_from_ctx(cd->ctx, - RTE_FLOW_ITEM_TYPE_METER_COLOR, 0); + RTE_FLOW_ITEM_TYPE_METER_COLOR, + MLX5DR_TABLE_TYPE_DONTCARE, 0); MLX5_ASSERT(reg > 0); fc = mlx5dr_definer_get_register_fc(cd, reg); @@ -2878,6 +2884,7 @@ mlx5dr_definer_conv_item_compare_field(const struct rte_flow_field_data *f, const struct rte_flow_field_data *other_f, struct mlx5dr_definer_conv_data *cd, int item_idx, + enum mlx5dr_table_type table_domain_type, enum mlx5dr_definer_compare_dw_selectors dw_offset) { struct mlx5dr_definer_fc *fc = NULL; @@ -2892,7 +2899,8 @@ mlx5dr_definer_conv_item_compare_field(const struct rte_flow_field_data *f, switch (f->field) { case RTE_FLOW_FIELD_META: reg = flow_hw_get_reg_id_from_ctx(cd->ctx, - RTE_FLOW_ITEM_TYPE_META, -1); + RTE_FLOW_ITEM_TYPE_META, + table_domain_type, -1); if (reg <= 0) { DR_LOG(ERR, "Invalid register for compare metadata field"); rte_errno = EINVAL; @@ -2911,6 +2919,7 @@ mlx5dr_definer_conv_item_compare_field(const struct rte_flow_field_data *f, case RTE_FLOW_FIELD_TAG: reg = flow_hw_get_reg_id_from_ctx(cd->ctx, RTE_FLOW_ITEM_TYPE_TAG, + MLX5DR_TABLE_TYPE_DONTCARE, f->tag_index); if (reg <= 0) { DR_LOG(ERR, "Invalid register for compare tag field"); @@ -2966,6 +2975,7 @@ mlx5dr_definer_conv_item_compare_field(const struct rte_flow_field_data *f, static int mlx5dr_definer_conv_item_compare(struct mlx5dr_definer_conv_data *cd, + enum mlx5dr_table_type table_domain_type, struct rte_flow_item *item, int item_idx) { @@ -2982,11 +2992,13 @@ mlx5dr_definer_conv_item_compare(struct mlx5dr_definer_conv_data *cd, } ret = mlx5dr_definer_conv_item_compare_field(a, b, cd, item_idx, + table_domain_type, MLX5DR_DEFINER_COMPARE_ARGUMENT_0); if (ret) return ret; ret = mlx5dr_definer_conv_item_compare_field(b, NULL, cd, item_idx, + table_domain_type, MLX5DR_DEFINER_COMPARE_BASE_0); if (ret) return ret; @@ -3082,7 +3094,7 @@ mlx5dr_definer_conv_items_to_hl(struct mlx5dr_context *ctx, item_flags |= MLX5_FLOW_ITEM_TAG; break; case RTE_FLOW_ITEM_TYPE_META: - ret = mlx5dr_definer_conv_item_metadata(&cd, items, i); + ret = mlx5dr_definer_conv_item_metadata(&cd, matcher->tbl->type, items, i); item_flags |= MLX5_FLOW_ITEM_METADATA; break; case RTE_FLOW_ITEM_TYPE_GRE: @@ -3173,7 +3185,7 @@ mlx5dr_definer_conv_items_to_hl(struct mlx5dr_context *ctx, DR_LOG(ERR, "Compare matcher not supported for more than one item"); goto not_supp; } - ret = mlx5dr_definer_conv_item_compare(&cd, items, i); + ret = mlx5dr_definer_conv_item_compare(&cd, matcher->tbl->type, items, i); item_flags |= MLX5_FLOW_ITEM_COMPARE; matcher->flags |= MLX5DR_MATCHER_FLAGS_COMPARE; break; diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h index a4d0ff7b13..9ad23e6624 100644 --- a/drivers/net/mlx5/mlx5_flow.h +++ b/drivers/net/mlx5/mlx5_flow.h @@ -1722,12 +1722,12 @@ flow_hw_get_wire_port(struct ibv_context *ibctx) /* * Convert metadata or tag to the actual register. - * META: Can only be used to match in the FDB in this stage, fixed C_1. + * META: Fixed C_1 for FDB mode, REG_A for NIC TX and REG_B for NIC RX. * TAG: C_x expect meter color reg and the reserved ones. */ static __rte_always_inline int -flow_hw_get_reg_id(struct rte_eth_dev *dev, - enum rte_flow_item_type type, uint32_t id) +flow_hw_get_reg_id(struct rte_eth_dev *dev, enum rte_flow_item_type type, + enum mlx5dr_table_type domain_type, uint32_t id) { struct mlx5_dev_ctx_shared *sh = MLX5_SH(dev); struct mlx5_dev_registers *reg = &sh->registers; @@ -1747,8 +1747,10 @@ flow_hw_get_reg_id(struct rte_eth_dev *dev, * On non-root tables - REG_A corresponds to general_purpose_lookup_field, * which translates to REG_A in NIC TX and to REG_B in NIC RX. * However, current FW does not implement REG_B case right now, so - * REG_B case should be rejected on pattern template validation. + * REG_B case is return explicitly by this function for NIC RX. */ + if (domain_type == MLX5DR_TABLE_TYPE_NIC_RX) + return REG_B; return REG_A; case RTE_FLOW_ITEM_TYPE_CONNTRACK: case RTE_FLOW_ITEM_TYPE_METER_COLOR: @@ -1764,8 +1766,8 @@ flow_hw_get_reg_id(struct rte_eth_dev *dev, } static __rte_always_inline int -flow_hw_get_reg_id_from_ctx(void *dr_ctx, - enum rte_flow_item_type type, uint32_t id) +flow_hw_get_reg_id_from_ctx(void *dr_ctx, enum rte_flow_item_type type, + enum mlx5dr_table_type domain_type, uint32_t id) { #ifdef HAVE_IBV_FLOW_DV_SUPPORT uint16_t port; @@ -1776,7 +1778,7 @@ flow_hw_get_reg_id_from_ctx(void *dr_ctx, priv = rte_eth_devices[port].data->dev_private; if (priv->dr_ctx == dr_ctx) return flow_hw_get_reg_id(&rte_eth_devices[port], - type, id); + type, domain_type, id); } #else RTE_SET_USED(dr_ctx); diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c index 75a8a223ab..8f07a6f888 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -2089,6 +2089,7 @@ mlx5_flow_field_id_to_modify_info if (priv->sh->config.dv_flow_en == 2) reg = flow_hw_get_reg_id(dev, RTE_FLOW_ITEM_TYPE_TAG, + MLX5DR_TABLE_TYPE_DONTCARE, tag_index); else reg = mlx5_flow_get_reg_id(dev, MLX5_APP_TAG, @@ -2206,12 +2207,13 @@ mlx5_flow_field_id_to_modify_info int reg; if (priv->sh->config.dv_flow_en == 2) - reg = flow_hw_get_reg_id - (dev, - RTE_FLOW_ITEM_TYPE_METER_COLOR, 0); + reg = flow_hw_get_reg_id(dev, + RTE_FLOW_ITEM_TYPE_METER_COLOR, + MLX5DR_TABLE_TYPE_DONTCARE, + 0); else reg = mlx5_flow_get_reg_id(dev, MLX5_MTR_COLOR, - 0, error); + 0, error); if (reg < 0) return; MLX5_ASSERT(reg != REG_NON); @@ -10548,7 +10550,8 @@ flow_dv_translate_item_meta(struct rte_eth_dev *dev, if (!!(key_type & MLX5_SET_MATCHER_SW)) reg = flow_dv_get_metadata_reg(dev, attr, NULL); else - reg = flow_hw_get_reg_id(dev, RTE_FLOW_ITEM_TYPE_META, 0); + reg = flow_hw_get_reg_id(dev, RTE_FLOW_ITEM_TYPE_META, + MLX5DR_TABLE_TYPE_DONTCARE, 0); if (reg < 0) return; MLX5_ASSERT(reg != REG_NON); @@ -10651,7 +10654,8 @@ flow_dv_translate_item_tag(struct rte_eth_dev *dev, void *key, if (!!(key_type & MLX5_SET_MATCHER_SW)) reg = mlx5_flow_get_reg_id(dev, MLX5_APP_TAG, index, NULL); else - reg = flow_hw_get_reg_id(dev, RTE_FLOW_ITEM_TYPE_TAG, index); + reg = flow_hw_get_reg_id(dev, RTE_FLOW_ITEM_TYPE_TAG, + MLX5DR_TABLE_TYPE_DONTCARE, index); MLX5_ASSERT(reg > 0); flow_dv_match_meta_reg(key, (enum modify_reg)reg, tag_v->data, tag_m->data); } @@ -11350,7 +11354,8 @@ flow_dv_translate_item_meter_color(struct rte_eth_dev *dev, void *key, reg = mlx5_flow_get_reg_id(dev, MLX5_MTR_COLOR, 0, NULL); else reg = flow_hw_get_reg_id(dev, - RTE_FLOW_ITEM_TYPE_METER_COLOR, 0); + RTE_FLOW_ITEM_TYPE_METER_COLOR, + MLX5DR_TABLE_TYPE_DONTCARE, 0); if (reg == REG_NON) return; flow_dv_match_meta_reg(key, (enum modify_reg)reg, value, mask); diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c index 783ad9e72a..b8a57e2e83 100644 --- a/drivers/net/mlx5/mlx5_flow_hw.c +++ b/drivers/net/mlx5/mlx5_flow_hw.c @@ -5221,9 +5221,13 @@ flow_hw_validate_action_modify_field(struct rte_eth_dev *dev, RTE_FLOW_ERROR_TYPE_ACTION, action, "tag index is out of range"); if ((action_conf->dst.field == RTE_FLOW_FIELD_TAG && - flow_hw_get_reg_id(dev, RTE_FLOW_ITEM_TYPE_TAG, action_conf->dst.tag_index) == REG_NON) || + flow_hw_get_reg_id(dev, RTE_FLOW_ITEM_TYPE_TAG, + MLX5DR_TABLE_TYPE_DONTCARE, + action_conf->dst.tag_index) == REG_NON) || (action_conf->src.field == RTE_FLOW_FIELD_TAG && - flow_hw_get_reg_id(dev, RTE_FLOW_ITEM_TYPE_TAG, action_conf->src.tag_index) == REG_NON)) + flow_hw_get_reg_id(dev, RTE_FLOW_ITEM_TYPE_TAG, + MLX5DR_TABLE_TYPE_DONTCARE, + action_conf->src.tag_index) == REG_NON)) return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION, action, "tag index is out of range"); @@ -7012,7 +7016,9 @@ flow_hw_pattern_validate(struct rte_eth_dev *dev, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL, "Invalid tag index"); - tag_idx = flow_hw_get_reg_id(dev, RTE_FLOW_ITEM_TYPE_TAG, tag->index); + tag_idx = flow_hw_get_reg_id(dev, RTE_FLOW_ITEM_TYPE_TAG, + MLX5DR_TABLE_TYPE_DONTCARE, + tag->index); if (tag_idx == REG_NON) return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, @@ -7058,20 +7064,13 @@ flow_hw_pattern_validate(struct rte_eth_dev *dev, " when egress attribute is set"); break; case RTE_FLOW_ITEM_TYPE_META: - if (!priv->sh->config.dv_esw_en || - priv->sh->config.dv_xmeta_en != MLX5_XMETA_MODE_META32_HWS) { - if (attr->ingress) - return rte_flow_error_set(error, EINVAL, - RTE_FLOW_ERROR_TYPE_ITEM, NULL, - "META item is not supported" - " on current FW with ingress" - " attribute"); - } + /* ingress + group 0 is not supported */ break; case RTE_FLOW_ITEM_TYPE_METER_COLOR: { int reg = flow_hw_get_reg_id(dev, RTE_FLOW_ITEM_TYPE_METER_COLOR, + MLX5DR_TABLE_TYPE_DONTCARE, 0); if (reg == REG_NON) return rte_flow_error_set(error, EINVAL,