From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0B79DA0C4B; Wed, 27 Oct 2021 12:35:34 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8FCD74068C; Wed, 27 Oct 2021 12:35:33 +0200 (CEST) Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam07on2041.outbound.protection.outlook.com [40.107.95.41]) by mails.dpdk.org (Postfix) with ESMTP id E81254003F for ; Wed, 27 Oct 2021 12:35:31 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kI7pjKDZhEMpf5oJu3zlpJRrpJgNOsb72GnzQeAfaK2o/7lAm65Pt786KCwH5+Y60S9poALA0TxJ0oh89zW9e6HgZidQLn74nB8AX8oGLjpDMOU8y+NMQskKDWccfvztGFGsFVk9Uzqwvu5nf6zt7JTSYwl+h3fgM+ubZuN1EuWCQsSlhAjbG3n4rSCrMJ+oHz0HOhURZW3srEQLyh3HA6VRgdr0wK53CZX4VAoeTlqeKIDID8sOlPk+Q3RUJCzcVVlFBnDyzxDHg+c0o5Dtp7RIUscGWxWHMlNHNX8zq0pDTSjZNSzihrD62nDtsqSEwbX466+JUq9Twoz28F3ofw== 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=Vk2W9EOLLn4YefOlnv/0oLmGuI7tw/EaI62YptIv/S0=; b=OjwTP3IuYP2IbCGKshlUR4DDfYpv8ee1WVOvQFR7EZCp/fyBhUnbpMZRUj7xE02vE61OUf7xdVOPDIUM/lkDFsf95Ic/qc3ZdHmWOk9zEmWRXjYlCiVzuyIOTT7AGBgRF1UOanywaUbRagMggOc6bYqZTNPjFP8nrXHRaIkwm66g7GbBZzI5e7jmxBeueNb6lJ0/dOt5y+Ksmiyt6NE7N5uOESyQS1iVp8tn8dBQ74lezRWKLWUnZqcOTqfFwriN0k125yBmBdFHijf9LhmdAcdGElVU3fDHndCxWO8NYjIYdEkg2LnFgUzWmxgaq6LanfQlUySDQsdq85rfanMqCQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=dpdk.org smtp.mailfrom=nvidia.com; dmarc=pass (p=quarantine sp=quarantine 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=Vk2W9EOLLn4YefOlnv/0oLmGuI7tw/EaI62YptIv/S0=; b=TDEZSCJYEkrRaPzU4tcOB7m3W3pH3l3ddiQ9KqBIOkIgR+XCO2orCy5vNH/VMiws0oP2eN9VxyS/ieXAHN+lWoTC+1bewyxu3qvPKZjhKbeayHn48pg4WrVasR6ndxp/3JaO5uEwYTwwAQEckAYybAUhdW4iUATTaIQZIELeaRMJWhxCaY7U7Y3WJ78F0oz9YthfxvRCsXHIsOiL+CAFEB9YbUXrIYq5QDInG+ZVoWHWJNWUf5Hmkc5AVj3MhjkSnqlD0EsZbNUuuARrmqXG9FM/d7Jp/vAa4wzm9da3kAge0pxO6YRETKsaJ7hG2gvbMLVTVpxAheKhQZ9XLY4HNQ== Received: from BN0PR03CA0053.namprd03.prod.outlook.com (2603:10b6:408:e7::28) by DM6PR12MB2892.namprd12.prod.outlook.com (2603:10b6:5:182::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4628.20; Wed, 27 Oct 2021 10:35:30 +0000 Received: from BN8NAM11FT060.eop-nam11.prod.protection.outlook.com (2603:10b6:408:e7:cafe::65) by BN0PR03CA0053.outlook.office365.com (2603:10b6:408:e7::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4628.18 via Frontend Transport; Wed, 27 Oct 2021 10:35:29 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; dpdk.org; dkim=none (message not signed) header.d=none;dpdk.org; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by BN8NAM11FT060.mail.protection.outlook.com (10.13.177.211) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4649.14 via Frontend Transport; Wed, 27 Oct 2021 10:35:29 +0000 Received: from nvidia.com (172.20.187.5) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.18; Wed, 27 Oct 2021 10:35:27 +0000 From: Jiawei Wang To: , , , CC: , Date: Wed, 27 Oct 2021 13:35:10 +0300 Message-ID: <20211027103510.919-1-jiaweiw@nvidia.com> X-Mailer: git-send-email 2.18.1 In-Reply-To: <20210930115217.35210-1-jiaweiw@nvidia.com> References: <20210930115217.35210-1-jiaweiw@nvidia.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [172.20.187.5] X-ClientProxiedBy: HQMAIL111.nvidia.com (172.20.187.18) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 07d30eff-408a-454e-40d4-08d999357f54 X-MS-TrafficTypeDiagnostic: DM6PR12MB2892: X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4941; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: CtBWbc+RgXM+5YeoCf/i2YGXgf8MgehX6iTlrdZr7xpkWkrnkKJEDuIPuRhzCs72MXkVpIotdF9KOpGKvL+1hikpozgeyIXpic11btyLfpGma/daqqPArz9uQilh9SZNnspT4bftpVD7+rc8MjBsKvHO6Aaw94Cmu8zR/WNyImDDWjvwHuIhX3UjR+TbXeEJ2Qsgf36e+RrKjwTq0Ez5Tp/M7DPpO3km1uI7myFkp8VHFHmB8uUV3yhyeJQIaIu+M1eP/q2NbfLzSaKlLSGLt5sfbZkdGl/W3og2cVzX/7d6oXCwde1XjA5WEZIhjImHA4iacGBHpWYZ0XX8cI7dqevcs2OXqqKvzSuTQ5sfk/gxxGeV9re/YR1BvgzF5fwucR09BxXiTso2uIyMPbhjJ7RHwVMnn6MJqUpibj5mzv3I9bxHpSZYiUvxWtaVc9XRXFaVSdqA7rK2yzhJuNuPEDCaRGqgiBDWcRDOZ460Nf4UTypjiX6jOWBH20kLagxib9vT3gM4Y3+YrbZkV18Pj4iEKqkE+NkjXCO4CsxMCSLtQ73WRxXBjQ+mUtw/x/1mZdyhIIsIn4qOeYXBBr+Ik3FoTRW82pNG7wDCR86FhqiG6tfDiVt1bos+RZHVbK46UCzVkNv2s4g0KpCnCEGJ3v+vcQ1uaXkIDkB2wiTeYPa8JsiBNXUloDdCEWSkjYbxarL7kkxuLVzW5m13AetqwA== X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(46966006)(36840700001)(36906005)(6666004)(55016002)(7636003)(86362001)(7696005)(36860700001)(356005)(54906003)(1076003)(70586007)(36756003)(186003)(316002)(508600001)(82310400003)(110136005)(6286002)(5660300002)(70206006)(426003)(8936002)(16526019)(2906002)(107886003)(47076005)(26005)(2616005)(8676002)(30864003)(336012)(4326008)(83380400001); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Oct 2021 10:35:29.5681 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 07d30eff-408a-454e-40d4-08d999357f54 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT060.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB2892 Subject: [dpdk-dev] [PATCH v3] net/mlx5: optimize the device spawn time with representors 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 Sender: "dev" During the device spawn process, mlx5 PMD queried the available flow priorities by calling mlx5_flow_discover_priorities, queried if the DR drop action was supported on the root table by calling the mlx5_flow_discover_dr_action_support routine, and queried the availability of metadata register C by calling mlx5_flow_discover_mreg_c. These functions created the test flows to get the supported fields, and at the end destroyed the test flows. The test flows in the first two functions was created on the root table. If the device was spawned with multiple representors, these test flows were created and destroyed on each representor as well. The above operations took a significant amount of init time during the device spawn. This patch optimizes the device discover functions, if there is the device with multiple representors (VF/SF) being spawned, the priority and drop action and metadata register support check can be done only ones and check results can be shared for all representors. Signed-off-by: Jiawei Wang Acked-by: Viacheslav Ovsiienko --- v3: Rebase v2: Fix the CI warning --- drivers/net/mlx5/linux/mlx5_os.c | 33 +++++++++++++++++++++--------- drivers/net/mlx5/mlx5.h | 10 ++++++--- drivers/net/mlx5/mlx5_flow.c | 33 +++++++++++++++--------------- drivers/net/mlx5/mlx5_flow_verbs.c | 4 ++-- drivers/net/mlx5/windows/mlx5_os.c | 12 ++++++----- 5 files changed, 55 insertions(+), 37 deletions(-) diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c index 3deae861d5..f31f1e96c6 100644 --- a/drivers/net/mlx5/linux/mlx5_os.c +++ b/drivers/net/mlx5/linux/mlx5_os.c @@ -704,10 +704,15 @@ mlx5_flow_drop_action_config(struct rte_eth_dev *dev __rte_unused) * DR supports drop action placeholder when it is supported; * otherwise, use the queue drop action. */ - if (mlx5_flow_discover_dr_action_support(dev)) - priv->root_drop_action = priv->drop_queue.hrxq->action; - else + if (!priv->sh->drop_action_check_flag) { + if (!mlx5_flow_discover_dr_action_support(dev)) + priv->sh->dr_drop_action_en = 1; + priv->sh->drop_action_check_flag = 1; + } + if (priv->sh->dr_drop_action_en) priv->root_drop_action = priv->sh->dr_drop_action; + else + priv->root_drop_action = priv->drop_queue.hrxq->action; #endif } @@ -1720,13 +1725,19 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, priv->drop_queue.hrxq = mlx5_drop_action_create(eth_dev); if (!priv->drop_queue.hrxq) goto error; - /* Supported Verbs flow priority number detection. */ - err = mlx5_flow_discover_priorities(eth_dev); + /* Port representor shares the same max prioirity with pf port. */ + if (!priv->sh->flow_priority_check_flag) { + /* Supported Verbs flow priority number detection. */ + err = mlx5_flow_discover_priorities(eth_dev); + priv->sh->flow_max_priority = err; + priv->sh->flow_priority_check_flag = 1; + } else { + err = priv->sh->flow_max_priority; + } if (err < 0) { err = -err; goto error; } - priv->config.flow_prio = err; if (!priv->config.dv_esw_en && priv->config.dv_xmeta_en != MLX5_XMETA_MODE_LEGACY) { DRV_LOG(WARNING, "metadata mode %u is not supported " @@ -1752,10 +1763,12 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, goto error; rte_rwlock_init(&priv->ind_tbls_lock); /* Query availability of metadata reg_c's. */ - err = mlx5_flow_discover_mreg_c(eth_dev); - if (err < 0) { - err = -err; - goto error; + if (!priv->sh->metadata_regc_check_flag) { + err = mlx5_flow_discover_mreg_c(eth_dev); + if (err < 0) { + err = -err; + goto error; + } } if (!mlx5_flow_ext_mreg_supported(eth_dev)) { DRV_LOG(DEBUG, diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index 5768b82935..4d16c784c3 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -270,9 +270,6 @@ struct mlx5_dev_config { /* Rx queue count threshold to enable MPRQ. */ } mprq; /* Configurations for Multi-Packet RQ. */ int mps; /* Multi-packet send supported mode. */ - unsigned int flow_prio; /* Number of flow priorities. */ - enum modify_reg flow_mreg_c[MLX5_MREG_C_NUM]; - /* Availibility of mreg_c's. */ unsigned int tso_max_payload_sz; /* Maximum TCP payload for TSO. */ unsigned int ind_table_max_size; /* Maximum indirection table size. */ unsigned int max_dump_files_num; /* Maximum dump files per queue. */ @@ -1120,6 +1117,10 @@ struct mlx5_dev_ctx_shared { uint32_t tunnel_header_0_1:1; /* tunnel_header_0_1 is supported. */ uint32_t misc5_cap:1; /* misc5 matcher parameter is supported. */ uint32_t reclaim_mode:1; /* Reclaim memory. */ + uint32_t dr_drop_action_en:1; /* Use DR drop action. */ + uint32_t drop_action_check_flag:1; /* Check Flag for drop action. */ + uint32_t flow_priority_check_flag:1; /* Check Flag for flow priority. */ + uint32_t metadata_regc_check_flag:1; /* Check Flag for metadata REGC. */ uint32_t max_port; /* Maximal IB device port index. */ struct mlx5_bond_info bond; /* Bonding information. */ struct mlx5_common_device *cdev; /* Backend mlx5 device. */ @@ -1180,6 +1181,9 @@ struct mlx5_dev_ctx_shared { struct mlx5_aso_ct_pools_mng *ct_mng; /* Management data for ASO connection tracking. */ struct mlx5_lb_ctx self_lb; /* QP to enable self loopback for Devx. */ + unsigned int flow_max_priority; + enum modify_reg flow_mreg_c[MLX5_MREG_C_NUM]; + /* Availability of mreg_c's. */ struct mlx5_dev_shared_port port[]; /* per device port data array. */ }; diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c index 5d19ef1e82..f842ce0802 100644 --- a/drivers/net/mlx5/mlx5_flow.c +++ b/drivers/net/mlx5/mlx5_flow.c @@ -914,7 +914,7 @@ mlx5_flow_get_reg_id(struct rte_eth_dev *dev, return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM, NULL, "invalid tag id"); - if (config->flow_mreg_c[id + start_reg - REG_C_0] == REG_NON) + if (priv->sh->flow_mreg_c[id + start_reg - REG_C_0] == REG_NON) return rte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ITEM, NULL, "unsupported tag id"); @@ -924,21 +924,21 @@ mlx5_flow_get_reg_id(struct rte_eth_dev *dev, * If the available index REG_C_y >= REG_C_x, skip the * color register. */ - if (skip_mtr_reg && config->flow_mreg_c + if (skip_mtr_reg && priv->sh->flow_mreg_c [id + start_reg - REG_C_0] >= priv->mtr_color_reg) { if (id >= (uint32_t)(REG_C_7 - start_reg)) return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM, NULL, "invalid tag id"); - if (config->flow_mreg_c + if (priv->sh->flow_mreg_c [id + 1 + start_reg - REG_C_0] != REG_NON) - return config->flow_mreg_c + return priv->sh->flow_mreg_c [id + 1 + start_reg - REG_C_0]; return rte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ITEM, NULL, "unsupported tag id"); } - return config->flow_mreg_c[id + start_reg - REG_C_0]; + return priv->sh->flow_mreg_c[id + start_reg - REG_C_0]; } MLX5_ASSERT(false); return rte_flow_error_set(error, EINVAL, @@ -959,7 +959,6 @@ bool mlx5_flow_ext_mreg_supported(struct rte_eth_dev *dev) { struct mlx5_priv *priv = dev->data->dev_private; - struct mlx5_dev_config *config = &priv->config; /* * Having available reg_c can be regarded inclusively as supporting @@ -969,7 +968,7 @@ mlx5_flow_ext_mreg_supported(struct rte_eth_dev *dev) * - reg_c's are preserved across different domain (FDB and NIC) on * packet loopback by flow lookup miss. */ - return config->flow_mreg_c[2] != REG_NON; + return priv->sh->flow_mreg_c[2] != REG_NON; } /** @@ -990,7 +989,7 @@ mlx5_get_lowest_priority(struct rte_eth_dev *dev, struct mlx5_priv *priv = dev->data->dev_private; if (!attr->group && !attr->transfer) - return priv->config.flow_prio - 2; + return priv->sh->flow_max_priority - 2; return MLX5_NON_ROOT_FLOW_MAX_PRIO - 1; } @@ -1018,11 +1017,11 @@ mlx5_get_matcher_priority(struct rte_eth_dev *dev, if (!attr->group && !attr->transfer) { if (attr->priority == MLX5_FLOW_LOWEST_PRIO_INDICATOR) - priority = priv->config.flow_prio - 1; + priority = priv->sh->flow_max_priority - 1; return mlx5_os_flow_adjust_priority(dev, priority, subpriority); } else if (!external && attr->transfer && attr->group == 0 && attr->priority == MLX5_FLOW_LOWEST_PRIO_INDICATOR) { - return (priv->config.flow_prio - 1) * 3; + return (priv->sh->flow_max_priority - 1) * 3; } if (attr->priority == MLX5_FLOW_LOWEST_PRIO_INDICATOR) priority = MLX5_NON_ROOT_FLOW_MAX_PRIO; @@ -1877,7 +1876,7 @@ mlx5_flow_validate_attributes(struct rte_eth_dev *dev, struct rte_flow_error *error) { struct mlx5_priv *priv = dev->data->dev_private; - uint32_t priority_max = priv->config.flow_prio - 1; + uint32_t priority_max = priv->sh->flow_max_priority - 1; if (attributes->group) return rte_flow_error_set(error, ENOTSUP, @@ -8112,13 +8111,12 @@ int mlx5_flow_discover_mreg_c(struct rte_eth_dev *dev) { struct mlx5_priv *priv = dev->data->dev_private; - struct mlx5_dev_config *config = &priv->config; enum modify_reg idx; int n = 0; /* reg_c[0] and reg_c[1] are reserved. */ - config->flow_mreg_c[n++] = REG_C_0; - config->flow_mreg_c[n++] = REG_C_1; + priv->sh->flow_mreg_c[n++] = REG_C_0; + priv->sh->flow_mreg_c[n++] = REG_C_1; /* Discover availability of other reg_c's. */ for (idx = REG_C_2; idx <= REG_C_7; ++idx) { struct rte_flow_attr attr = { @@ -8154,7 +8152,7 @@ mlx5_flow_discover_mreg_c(struct rte_eth_dev *dev) struct rte_flow *flow; struct rte_flow_error error; - if (!config->dv_flow_en) + if (!priv->config.dv_flow_en) break; /* Create internal flow, validation skips copy action. */ flow_idx = flow_list_create(dev, MLX5_FLOW_TYPE_GEN, &attr, @@ -8163,11 +8161,12 @@ mlx5_flow_discover_mreg_c(struct rte_eth_dev *dev) flow_idx); if (!flow) continue; - config->flow_mreg_c[n++] = idx; + priv->sh->flow_mreg_c[n++] = idx; flow_list_destroy(dev, MLX5_FLOW_TYPE_GEN, flow_idx); } for (; n < MLX5_MREG_C_NUM; ++n) - config->flow_mreg_c[n] = REG_NON; + priv->sh->flow_mreg_c[n] = REG_NON; + priv->sh->metadata_regc_check_flag = 1; return 0; } diff --git a/drivers/net/mlx5/mlx5_flow_verbs.c b/drivers/net/mlx5/mlx5_flow_verbs.c index 176d867202..0a89a136a2 100644 --- a/drivers/net/mlx5/mlx5_flow_verbs.c +++ b/drivers/net/mlx5/mlx5_flow_verbs.c @@ -145,7 +145,7 @@ mlx5_flow_adjust_priority(struct rte_eth_dev *dev, int32_t priority, uint32_t res = 0; struct mlx5_priv *priv = dev->data->dev_private; - switch (priv->config.flow_prio) { + switch (priv->sh->flow_max_priority) { case RTE_DIM(priority_map_3): res = priority_map_3[priority][subpriority]; break; @@ -1723,7 +1723,7 @@ flow_verbs_translate(struct rte_eth_dev *dev, MLX5_ASSERT(wks); rss_desc = &wks->rss_desc; if (priority == MLX5_FLOW_LOWEST_PRIO_INDICATOR) - priority = priv->config.flow_prio - 1; + priority = priv->sh->flow_max_priority - 1; for (; actions->type != RTE_FLOW_ACTION_TYPE_END; actions++) { int ret; diff --git a/drivers/net/mlx5/windows/mlx5_os.c b/drivers/net/mlx5/windows/mlx5_os.c index 5e88453b03..dec4b923d0 100644 --- a/drivers/net/mlx5/windows/mlx5_os.c +++ b/drivers/net/mlx5/windows/mlx5_os.c @@ -605,7 +605,7 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, goto error; } /* No supported flow priority number detection. */ - priv->config.flow_prio = -1; + priv->sh->flow_max_priority = -1; if (!priv->config.dv_esw_en && priv->config.dv_xmeta_en != MLX5_XMETA_MODE_LEGACY) { DRV_LOG(WARNING, "metadata mode %u is not supported " @@ -626,10 +626,12 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, mlx5_hrxq_remove_cb, mlx5_hrxq_clone_cb, mlx5_hrxq_clone_free_cb); /* Query availability of metadata reg_c's. */ - err = mlx5_flow_discover_mreg_c(eth_dev); - if (err < 0) { - err = -err; - goto error; + if (!priv->sh->metadata_regc_check_flag) { + err = mlx5_flow_discover_mreg_c(eth_dev); + if (err < 0) { + err = -err; + goto error; + } } if (!mlx5_flow_ext_mreg_supported(eth_dev)) { DRV_LOG(DEBUG, -- 2.18.1