From patchwork Wed Feb 1 07:28:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alex Vesker X-Patchwork-Id: 122789 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 32D5341B9B; Wed, 1 Feb 2023 08:30:20 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C480542D5F; Wed, 1 Feb 2023 08:29:22 +0100 (CET) Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam02on2046.outbound.protection.outlook.com [40.107.95.46]) by mails.dpdk.org (Postfix) with ESMTP id A9E5541151 for ; Wed, 1 Feb 2023 08:29:20 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kkV1Sd4TOMtSuwBKRf1jVKuGLWlrST+xy7Gbtvn2lZWsunnY+qvSZcycLiQgtTwLUsSt2CaVVMU5CO7SjiUUwrmGAmJ5w5dqfycxc4XiaipdfdTJoCfVfLN+RoQANz08bEjJDJQWb/UpA/rQE6N6YO8JM3iJukR/CX3gxgIXX0A2iRpjnJVRvFA7h3H3u3gwfe0FWkMG9KdSAY2vQ+p8a6LX7VmhoVIAgBSpuDdkaZrcdbj8DBI8UYgi6owa9SwudTK4pz2N8aIWLjmCtYMu0kGSFq4WukpakhfblSlSokg0vu1+ffleLooyfUchReukI/SD/JgZIac4kgJB8tlXzA== 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=+UC+oXp2u5FZ6NvhCCMrP9ddTq0iCJeMbPXx/nURAno=; b=iiFWV/Lp3KgcD3Nwmkk17+CApcuv2OolIOVG6eas3UE2U7RUJ/Byvx86WQQv0lg0Dmx+KU9O0un5SYDAbmMqXKjOC9TcnWJjE+EA0OJGsx3J+0Xc+EA1tkkXQYbANq3ZLxeimetunMORPWS+o5IrliG+nlCWJ3yaMbcTMVw6e9wmbqBUIUz9kmID60BPSbFbq6ubp+c0lTHjnsBhFHjO1oGVydDv8xMXc5n/xIwaf1cegkGNp1hRsBIcOjy5xUq+CTYgfHCuWaUQwZlvn6TQRg93HT1B0fEWrKVVGkgN/+BW+F3cC0tc28Z4csPfE5g2b7uZrYBI2l40U0bxPuJmNg== 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=+UC+oXp2u5FZ6NvhCCMrP9ddTq0iCJeMbPXx/nURAno=; b=Kph/dApQOIrOrfFo7JJabl+ILO8EkmaWypjZfuGsMPOQHyOhsisZSCSI239xm273O4d/j1wYTyi+M+wSA7lDnp9J0rTU5d/TD5FEwlgB09XW1gpKCNwoXrrywT16UftWBBzrJgRKarE3zO9V0sgpQwDFdExqB0Ce47dbi8eU+nFH5tZYfsdYubff/0KrR3xV+hV192ehtqv/kCi/qRbkVmCJmGS4OxTEHp3NWBpjOukkffiS/MCxkinEHyWa7ONZey44FS4lmJ27lk+w/fpYXOtNqUQgAkAncDIM/SobfI/UgcBSD2MJfdAuZ2n1PqxpEVV4olSCpNJpAVza5A22Mw== Received: from BN8PR15CA0069.namprd15.prod.outlook.com (2603:10b6:408:80::46) by SA0PR12MB4445.namprd12.prod.outlook.com (2603:10b6:806:95::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6043.38; Wed, 1 Feb 2023 07:29:17 +0000 Received: from BN8NAM11FT082.eop-nam11.prod.protection.outlook.com (2603:10b6:408:80:cafe::5b) by BN8PR15CA0069.outlook.office365.com (2603:10b6:408:80::46) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6064.24 via Frontend Transport; Wed, 1 Feb 2023 07:29:17 +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 BN8NAM11FT082.mail.protection.outlook.com (10.13.176.94) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6064.22 via Frontend Transport; Wed, 1 Feb 2023 07:29:17 +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.36; Tue, 31 Jan 2023 23:29:04 -0800 Received: from nvidia.com (10.126.230.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.36; Tue, 31 Jan 2023 23:29:02 -0800 From: Alex Vesker To: , , , "Matan Azrad" CC: , Subject: [v2 11/16] net/mlx5/hws: support partial hash Date: Wed, 1 Feb 2023 09:28:10 +0200 Message-ID: <20230201072815.1329101-12-valex@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20230201072815.1329101-1-valex@nvidia.com> References: <20230131093346.1261066-1-valex@nvidia.com> <20230201072815.1329101-1-valex@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [10.126.230.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: BN8NAM11FT082:EE_|SA0PR12MB4445:EE_ X-MS-Office365-Filtering-Correlation-Id: 304223a5-afe1-464f-cb87-08db0426071f 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: 5WfDvLE0GX78tB2jtfVprPWRynG3CVrGrY8JoK3A0i8VD2bhQclL0FyLiu8q6SX2A4Vt7KBHtnSOCsjlKjndJ486w0zGPMtWhsIjqCDUonbqWds+15oMnzS++1ny6BCsPILsKEb00wxA2HP7jiNONPI5mz0YEbwkW7QCviNBJrtr8xGcL9evm/dMZieXL4Oj2p9BIS1TBfpadz+sLt8BRDGF7X2xadv24sP6a2qpdkbxKrHtKa0LOQzqqrtZB4syVNq1gyZGwe1Vj8CpE7dgw65uhx2MNdv2gg6VujGMZTB/q+MpUlyktQ7qGtg7kKDx9X+gvxVcShkq5nis0N4BZYMhtlU9j3EhDdBrJ7q/TMb2CcYgYSyM7rcwxca99708BORdt7NhtbOJmcwt7PhGq4mtaY1KGp7iC0HSe3ggw+PJ6JaFz/ZCw/odLeOanVsJjhGqFrCRWf9YSllHgFv9t7nxA3Zz6s5MEGVOHC6GbXDuE0+UewrJVTyZFSflwUUuz510OI/Ck4R8u/A0hf1IGcse52dU10h6AiGI85aG82FREpxiAgppFQ+SF3DYfI556etx8HJt2Z3Gr+tpvH1Ecm7w2VZ0Y+9OBCD/0mdHBmHMM3Hl15IlhFBQYea5MKfy6b2bUvtKf5QrZ6OqSnpe4/7+r/mj3qGF2aiSL+3zBcn+F/2GdRrBN4yYrNC8PQW2jDsEV9eewKb5Uj5yUfAulA== 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)(136003)(396003)(39860400002)(376002)(346002)(451199018)(46966006)(40470700004)(36840700001)(82740400003)(7636003)(6286002)(26005)(8676002)(356005)(54906003)(4326008)(6636002)(70586007)(110136005)(316002)(40460700003)(336012)(107886003)(1076003)(6666004)(186003)(2616005)(426003)(7696005)(16526019)(82310400005)(47076005)(70206006)(83380400001)(36756003)(55016003)(36860700001)(40480700001)(478600001)(2906002)(41300700001)(5660300002)(86362001)(30864003)(8936002); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Feb 2023 07:29:17.5818 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 304223a5-afe1-464f-cb87-08db0426071f 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: BN8NAM11FT082.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR12MB4445 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 Hash definers allow performing hashing over a subset of the fields which are used for matching. This allows combining match templates which were considered invalid until now. During matcher creation mlx5dr code will process the match templates and check if such hash definer is needed based on the definers bitmasks intersection. Since current HW GTA implementation doesn't allow specifying match and hash definers rule insertion is done using the FW GTA WQE command. Signed-off-by: Alex Vesker --- drivers/common/mlx5/mlx5_prm.h | 4 + drivers/net/mlx5/hws/mlx5dr_definer.c | 105 ++++++++++++++++++++++++++ drivers/net/mlx5/hws/mlx5dr_matcher.c | 66 +++++++++++++++- drivers/net/mlx5/hws/mlx5dr_matcher.h | 10 ++- 4 files changed, 181 insertions(+), 4 deletions(-) diff --git a/drivers/common/mlx5/mlx5_prm.h b/drivers/common/mlx5/mlx5_prm.h index 298cc48b06..243952bf85 100644 --- a/drivers/common/mlx5/mlx5_prm.h +++ b/drivers/common/mlx5/mlx5_prm.h @@ -2112,6 +2112,10 @@ enum mlx5_ifc_cross_vhca_allowed_objects_types { MLX5_CROSS_VHCA_ALLOWED_OBJS_RTC = 1 << 0xa, }; +enum { + MLX5_GENERATE_WQE_TYPE_FLOW_UPDATE = 1 << 1, +}; + /* * HCA Capabilities 2 */ diff --git a/drivers/net/mlx5/hws/mlx5dr_definer.c b/drivers/net/mlx5/hws/mlx5dr_definer.c index 75e997ba28..0da38a818c 100644 --- a/drivers/net/mlx5/hws/mlx5dr_definer.c +++ b/drivers/net/mlx5/hws/mlx5dr_definer.c @@ -1928,6 +1928,27 @@ int mlx5dr_definer_get_id(struct mlx5dr_definer *definer) return definer->obj->id; } +static int +mlx5dr_definer_compare(struct mlx5dr_definer *definer_a, + struct mlx5dr_definer *definer_b) +{ + int i; + + for (i = 0; i < BYTE_SELECTORS; i++) + if (definer_a->byte_selector[i] != definer_b->byte_selector[i]) + return 1; + + for (i = 0; i < DW_SELECTORS; i++) + if (definer_a->dw_selector[i] != definer_b->dw_selector[i]) + return 1; + + for (i = 0; i < MLX5DR_JUMBO_TAG_SZ; i++) + if (definer_a->mask.jumbo[i] != definer_b->mask.jumbo[i]) + return 1; + + return 0; +} + static int mlx5dr_definer_calc_layout(struct mlx5dr_matcher *matcher, struct mlx5dr_definer *match_definer) @@ -2070,6 +2091,80 @@ mlx5dr_definer_matcher_match_uninit(struct mlx5dr_matcher *matcher) mlx5dr_definer_free(matcher->mt[i].definer); } +static int +mlx5dr_definer_matcher_hash_init(struct mlx5dr_context *ctx, + struct mlx5dr_matcher *matcher) +{ + struct mlx5dr_cmd_definer_create_attr def_attr = {0}; + struct mlx5dr_match_template *mt = matcher->mt; + struct ibv_context *ibv_ctx = ctx->ibv_ctx; + uint8_t *bit_mask; + int i, j; + + for (i = 1; i < matcher->num_of_mt; i++) + if (mlx5dr_definer_compare(mt[i].definer, mt[i - 1].definer)) + matcher->flags |= MLX5DR_MATCHER_FLAGS_HASH_DEFINER; + + if (!(matcher->flags & MLX5DR_MATCHER_FLAGS_HASH_DEFINER)) + return 0; + + /* Insert by index requires all MT using the same definer */ + if (matcher->attr.insert_mode == MLX5DR_MATCHER_INSERT_BY_INDEX) { + DR_LOG(ERR, "Insert by index not supported with MT combination"); + rte_errno = EOPNOTSUPP; + return rte_errno; + } + + matcher->hash_definer = simple_calloc(1, sizeof(*matcher->hash_definer)); + if (!matcher->hash_definer) { + DR_LOG(ERR, "Failed to allocate memory for hash definer"); + rte_errno = ENOMEM; + return rte_errno; + } + + /* Calculate intersection between all match templates bitmasks. + * We will use mt[0] as reference and intersect it with mt[1..n]. + * From this we will get: + * hash_definer.selectors = mt[0].selecotrs + * hash_definer.mask = mt[0].mask & mt[0].mask & ... & mt[n].mask + */ + + /* Use first definer which should also contain intersection fields */ + memcpy(matcher->hash_definer, mt->definer, sizeof(struct mlx5dr_definer)); + + /* Calculate intersection between first to all match templates bitmasks */ + for (i = 1; i < matcher->num_of_mt; i++) { + bit_mask = (uint8_t *)&mt[i].definer->mask; + for (j = 0; j < MLX5DR_JUMBO_TAG_SZ; j++) + ((uint8_t *)&matcher->hash_definer->mask)[j] &= bit_mask[j]; + } + + def_attr.match_mask = matcher->hash_definer->mask.jumbo; + def_attr.dw_selector = matcher->hash_definer->dw_selector; + def_attr.byte_selector = matcher->hash_definer->byte_selector; + matcher->hash_definer->obj = mlx5dr_cmd_definer_create(ibv_ctx, &def_attr); + if (!matcher->hash_definer->obj) { + DR_LOG(ERR, "Failed to create hash definer"); + goto free_hash_definer; + } + + return 0; + +free_hash_definer: + simple_free(matcher->hash_definer); + return rte_errno; +} + +static void +mlx5dr_definer_matcher_hash_uninit(struct mlx5dr_matcher *matcher) +{ + if (!matcher->hash_definer) + return; + + mlx5dr_cmd_destroy_obj(matcher->hash_definer->obj); + simple_free(matcher->hash_definer); +} + int mlx5dr_definer_matcher_init(struct mlx5dr_context *ctx, struct mlx5dr_matcher *matcher) { @@ -2093,8 +2188,17 @@ int mlx5dr_definer_matcher_init(struct mlx5dr_context *ctx, goto free_fc; } + /* Calculate partial hash definer */ + ret = mlx5dr_definer_matcher_hash_init(ctx, matcher); + if (ret) { + DR_LOG(ERR, "Failed to init hash definer"); + goto uninit_match_definer; + } + return 0; +uninit_match_definer: + mlx5dr_definer_matcher_match_uninit(matcher); free_fc: for (i = 0; i < matcher->num_of_mt; i++) simple_free(matcher->mt[i].fc); @@ -2109,6 +2213,7 @@ void mlx5dr_definer_matcher_uninit(struct mlx5dr_matcher *matcher) if (matcher->flags & MLX5DR_MATCHER_FLAGS_COLLISION) return; + mlx5dr_definer_matcher_hash_uninit(matcher); mlx5dr_definer_matcher_match_uninit(matcher); for (i = 0; i < matcher->num_of_mt; i++) diff --git a/drivers/net/mlx5/hws/mlx5dr_matcher.c b/drivers/net/mlx5/hws/mlx5dr_matcher.c index 4334b87cef..0158a60ac3 100644 --- a/drivers/net/mlx5/hws/mlx5dr_matcher.c +++ b/drivers/net/mlx5/hws/mlx5dr_matcher.c @@ -337,6 +337,42 @@ static int mlx5dr_matcher_disconnect(struct mlx5dr_matcher *matcher) return 0; } +static bool mlx5dr_matcher_supp_fw_wqe(struct mlx5dr_matcher *matcher) +{ + struct mlx5dr_cmd_query_caps *caps = matcher->tbl->ctx->caps; + + if (matcher->flags & MLX5DR_MATCHER_FLAGS_HASH_DEFINER) { + if (matcher->hash_definer->type == MLX5DR_DEFINER_TYPE_MATCH && + !IS_BIT_SET(caps->supp_ste_format_gen_wqe, MLX5_IFC_RTC_STE_FORMAT_8DW)) { + DR_LOG(ERR, "Gen WQE MATCH format not supported"); + return false; + } + + if (matcher->hash_definer->type == MLX5DR_DEFINER_TYPE_JUMBO) { + DR_LOG(ERR, "Gen WQE JUMBO format not supported"); + return false; + } + } + + if (matcher->attr.insert_mode != MLX5DR_MATCHER_INSERT_BY_HASH || + matcher->attr.distribute_mode != MLX5DR_MATCHER_DISTRIBUTE_BY_HASH) { + DR_LOG(ERR, "Gen WQE must be inserted and distribute by hash"); + return false; + } + + if (!(caps->supp_type_gen_wqe & MLX5_GENERATE_WQE_TYPE_FLOW_UPDATE)) { + DR_LOG(ERR, "Gen WQE command not supporting GTA"); + return false; + } + + if (!caps->rtc_max_hash_def_gen_wqe) { + DR_LOG(ERR, "Hash definer not supported"); + return false; + } + + return true; +} + static void mlx5dr_matcher_set_rtc_attr_sz(struct mlx5dr_matcher *matcher, struct mlx5dr_cmd_rtc_create_attr *rtc_attr, enum mlx5dr_matcher_rtc_type rtc_type, @@ -432,8 +468,16 @@ static int mlx5dr_matcher_create_rtc(struct mlx5dr_matcher *matcher, if (attr->insert_mode == MLX5DR_MATCHER_INSERT_BY_HASH) { /* The usual Hash Table */ rtc_attr.update_index_mode = MLX5_IFC_RTC_STE_UPDATE_MODE_BY_HASH; - /* The first match template is used since all share the same definer */ - rtc_attr.match_definer_0 = mlx5dr_definer_get_id(mt->definer); + if (matcher->hash_definer) { + /* Specify definer_id_0 is used for hashing */ + rtc_attr.fw_gen_wqe = true; + rtc_attr.num_hash_definer = 1; + rtc_attr.match_definer_0 = + mlx5dr_definer_get_id(matcher->hash_definer); + } else { + /* The first mt is used since all share the same definer */ + rtc_attr.match_definer_0 = mlx5dr_definer_get_id(mt->definer); + } } else if (attr->insert_mode == MLX5DR_MATCHER_INSERT_BY_INDEX) { rtc_attr.update_index_mode = MLX5_IFC_RTC_STE_UPDATE_MODE_BY_OFFSET; rtc_attr.num_hash_definer = 1; @@ -640,6 +684,12 @@ static int mlx5dr_matcher_bind_at(struct mlx5dr_matcher *matcher) if (!matcher->action_ste.max_stes) return 0; + if (mlx5dr_matcher_req_fw_wqe(matcher)) { + DR_LOG(ERR, "FW extended matcher cannot be binded to complex at"); + rte_errno = ENOTSUP; + return rte_errno; + } + /* Allocate action STE mempool */ pool_attr.table_type = tbl->type; pool_attr.pool_type = MLX5DR_POOL_TYPE_STE; @@ -701,13 +751,21 @@ static int mlx5dr_matcher_bind_mt(struct mlx5dr_matcher *matcher) struct mlx5dr_pool_attr pool_attr = {0}; int ret; - /* Calculate match definers */ + /* Calculate match and hash definers */ ret = mlx5dr_definer_matcher_init(ctx, matcher); if (ret) { DR_LOG(ERR, "Failed to set matcher templates with match definers"); return ret; } + if (mlx5dr_matcher_req_fw_wqe(matcher) && + !mlx5dr_matcher_supp_fw_wqe(matcher)) { + DR_LOG(ERR, "Matcher requires FW WQE which is not supported"); + rte_errno = ENOTSUP; + ret = rte_errno; + goto uninit_match_definer; + } + /* Create an STE pool per matcher*/ pool_attr.table_type = matcher->tbl->type; pool_attr.pool_type = MLX5DR_POOL_TYPE_STE; @@ -719,6 +777,7 @@ static int mlx5dr_matcher_bind_mt(struct mlx5dr_matcher *matcher) matcher->match_ste.pool = mlx5dr_pool_create(ctx, &pool_attr); if (!matcher->match_ste.pool) { DR_LOG(ERR, "Failed to allocate matcher STE pool"); + ret = ENOTSUP; goto uninit_match_definer; } @@ -932,6 +991,7 @@ mlx5dr_matcher_create_col_matcher(struct mlx5dr_matcher *matcher) col_matcher->at = matcher->at; col_matcher->num_of_at = matcher->num_of_at; col_matcher->num_of_mt = matcher->num_of_mt; + col_matcher->hash_definer = matcher->hash_definer; col_matcher->attr.priority = matcher->attr.priority; col_matcher->flags = matcher->flags; col_matcher->flags |= MLX5DR_MATCHER_FLAGS_COLLISION; diff --git a/drivers/net/mlx5/hws/mlx5dr_matcher.h b/drivers/net/mlx5/hws/mlx5dr_matcher.h index fabf50a343..8dadc0ee66 100644 --- a/drivers/net/mlx5/hws/mlx5dr_matcher.h +++ b/drivers/net/mlx5/hws/mlx5dr_matcher.h @@ -23,7 +23,8 @@ #define MLX5DR_MATCHER_ASSURED_MAIN_TBL_DEPTH 2 enum mlx5dr_matcher_flags { - MLX5DR_MATCHER_FLAGS_COLLISION = 1 << 0, + MLX5DR_MATCHER_FLAGS_HASH_DEFINER = 1 << 0, + MLX5DR_MATCHER_FLAGS_COLLISION = 1 << 1, }; struct mlx5dr_match_template { @@ -69,6 +70,7 @@ struct mlx5dr_matcher { struct mlx5dr_matcher *col_matcher; struct mlx5dr_matcher_match_ste match_ste; struct mlx5dr_matcher_action_ste action_ste; + struct mlx5dr_definer *hash_definer; LIST_ENTRY(mlx5dr_matcher) next; }; @@ -78,6 +80,12 @@ mlx5dr_matcher_mt_is_jumbo(struct mlx5dr_match_template *mt) return mlx5dr_definer_is_jumbo(mt->definer); } +static inline bool mlx5dr_matcher_req_fw_wqe(struct mlx5dr_matcher *matcher) +{ + /* Currently HWS doesn't support hash different from match or range */ + return unlikely(matcher->flags & MLX5DR_MATCHER_FLAGS_HASH_DEFINER); +} + int mlx5dr_matcher_conv_items_to_prm(uint64_t *match_buf, struct rte_flow_item *items, uint8_t *match_criteria,