From patchwork Fri Jul 2 09:14:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shun Hao X-Patchwork-Id: 95208 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 472BCA0A0C; Fri, 2 Jul 2021 11:15:14 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2EB0241368; Fri, 2 Jul 2021 11:15:14 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2050.outbound.protection.outlook.com [40.107.237.50]) by mails.dpdk.org (Postfix) with ESMTP id 565634014E for ; Fri, 2 Jul 2021 11:15:13 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ugq7mOk4OrmvuanSdVbOZdcm3uaC0vJz82G/vhwlb2U/vFkud7czAZDtfb/O04ZOHd5Yax5VGKrM2ciJzd+E0AxkTQbuXr9p4UNTwXk3FMFNtFXpLjuKGVQ0m7jrD9frBP4mpl1CFkXzfHn2goNOYLjrnQwUVIt2AJfEdUyqRi8xpdyq5yfqdEKfSc+bU/igyWzrAQ5luWVR05y3T3uWV7m/oiyhN1qjhNeTEu0ToNxAGM64adrXZ0dzYSG692jRi7Q8PHkDm9NEdm4sKDcgRYPQ1ILl0+inUnQp7PmICTzUeVU2uj4BBDEgTH2C6JEx1tzYPk5tg6ROBq6QInDjcQ== 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-SenderADCheck; bh=0nwto0kKj3JA6q6Xmuu8eSVLgXKIh26HXta5iyfsZyA=; b=ESICtzJcHqR+DSNYPv6goJeOU4N5hEBTsPGZe3Z5tnbECzYCImGNytJzPJcZb6dueN35qjTqHxPE+voMzbOa/Jc0GZ49ySS7UG5NPTaDsfLz8hYEzfgioO/+JNQGMTHc/tR3SY9KXDhiu+u2Zn4t6A7wznkG7nf96RtH4lsD/2XJ4JCIPKHORhPybzSB4UrDqybBcdwKtNvuKb9yI5IWP0sJZ9Ox3QZEneQpOiSJ78Y5EzeVHRjaU/qZhA+ZF7XKiWUhGgdZYGi+NdVjRVGYwK7BGZiQMPGgr2+jsGcumw9xs5krQ2yvXLlj4wO7vyPJyAw3/UudOuEQH7BMYjWpMQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=monjalon.net smtp.mailfrom=nvidia.com; dmarc=pass (p=none sp=none 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=0nwto0kKj3JA6q6Xmuu8eSVLgXKIh26HXta5iyfsZyA=; b=T+Ub+hegNhf9pLh52aDU515fDYZR9TX8Hl1pxgssf0dzKh0r9U4MtzA0KpL+3EGCIDcoifgr3wZSPNYoIcEg8MfAH5bcH7/G21wQWp1bvDa/2bbA6yXFNFHLjR7B45YNntUHNgafOxadmDJOtcp5CUILPfJ7dXkynVO53wO4UaPQ0VgNvNUwSuRppSTudghEYpcRbgi8UZIxzGZ6EIMJ6I77F/DJEo+7Ul+7Z+t1bMC25VEGa7YZJlBo0QPkT8eYRxvaTakZTrru8tAOFj6SNoR7bYzAq0J3seGENJGK7ig6RMSsxJNs9fhq4gkzInReqXw+FM3R9vOmNdCu0JE0gA== Received: from DM5PR21CA0004.namprd21.prod.outlook.com (2603:10b6:3:ac::14) by MN2PR12MB2958.namprd12.prod.outlook.com (2603:10b6:208:aa::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.19; Fri, 2 Jul 2021 09:15:11 +0000 Received: from DM6NAM11FT034.eop-nam11.prod.protection.outlook.com (2603:10b6:3:ac:cafe::5f) by DM5PR21CA0004.outlook.office365.com (2603:10b6:3:ac::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.9 via Frontend Transport; Fri, 2 Jul 2021 09:15:11 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; monjalon.net; dkim=none (message not signed) header.d=none;monjalon.net; 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 DM6NAM11FT034.mail.protection.outlook.com (10.13.173.47) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4287.22 via Frontend Transport; Fri, 2 Jul 2021 09:15:11 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 2 Jul 2021 09:15:08 +0000 From: Shun Hao To: , , , CC: , , , Date: Fri, 2 Jul 2021 12:14:43 +0300 Message-ID: <20210702091446.24635-2-shunh@nvidia.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20210702091446.24635-1-shunh@nvidia.com> References: <20210702091446.24635-1-shunh@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] 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: 493b4073-b897-4a1c-260f-08d93d39e51f X-MS-TrafficTypeDiagnostic: MN2PR12MB2958: X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:33; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2ZPq+TO3pVKdODTwAQ6Ez/quAPWq6GD1zXRwcj3Eet/rA+faBrYxYyxCUNn8cO7n0TXZSBOTkVHuc+AXssOwBJonHGTmO1ZsuAQZBz8KKdHJT2/AFPFuQCbNo7Eh6oSWy7fvdQJYfBEVBoUN8kj9N7RCPqrvnbis4+ultjdRG9ZfUDk14FCTOVhoZffzz0NTUb8rYSabtkegKs5K0bSt1L0zjBoWFNeUMkhH4KDmribnxADmA47pXMKiaAqIreEoAVEczHIS3bXYdWs9J6lum4kLQs0XpGcibxjLFhA9Ita3nwQrur2oBDSe3vKZXPOUXjlTrSd0c/vLzoDl2Xm3zcX/+WGWXpphyeOw6JN9aoRbzQdgOhWBUV6q5DndBUYNRPY2ADHdro7flf1ktWxfUkq5C37M82SSUGdPKKwjoKlnA7DxCyFhRMUdfPhbRgfO6zeBB9jhTmfjkvoDJwV7JaupETY/nmXeTXFTkVRAvDjD8kxPPgwAk0RYn0MJrKoBTOEqe6kGp9C4b1zYpwIxPPw3EQPrf2mqkikX46l9KXMiC8r8fKvkSsJCGSD5rQPAuBOI0JSHyYfuFhTnw3jgK6uNOvLh5v1L92OXHUnwVBQ6X68aWNDnFrz52SU4F7hvlBLIDBvZSbWGmc03CuroFtRCNAuNg/g7WbtOwNCaskUS5GMp855qdIG5uHsUS9SuHnCb0Wul7nV4NjQTzZj8TA== 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)(396003)(136003)(346002)(376002)(39860400002)(46966006)(36840700001)(36906005)(316002)(6636002)(336012)(8936002)(54906003)(110136005)(426003)(70206006)(82740400003)(36756003)(107886003)(478600001)(6286002)(2906002)(26005)(4326008)(70586007)(86362001)(83380400001)(6666004)(47076005)(356005)(16526019)(7636003)(1076003)(55016002)(186003)(82310400003)(5660300002)(8676002)(7696005)(36860700001)(2616005); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jul 2021 09:15:11.4101 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 493b4073-b897-4a1c-260f-08d93d39e51f 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: DM6NAM11FT034.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB2958 Subject: [dpdk-dev] [PATCH v1 1/4] net/mlx5: use meter profile lookup table 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" Currently a list is used to save all meter profile ids, which is not efficient when looking up profile from huge mount of profiles. This changes to use a l3 table instead to save meter profile ids, so as to improve the lookup performance. Signed-off-by: Shun Hao Acked-by: Matan Azrad --- drivers/net/mlx5/linux/mlx5_os.c | 6 +++- drivers/net/mlx5/mlx5.h | 2 +- drivers/net/mlx5/mlx5_flow_meter.c | 53 ++++++++++++++++++++---------- drivers/net/mlx5/windows/mlx5_os.c | 6 +++- 4 files changed, 47 insertions(+), 20 deletions(-) diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c index 92b3009786..b3f9e392ab 100644 --- a/drivers/net/mlx5/linux/mlx5_os.c +++ b/drivers/net/mlx5/linux/mlx5_os.c @@ -1570,7 +1570,9 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, priv->ctrl_flows = 0; rte_spinlock_init(&priv->flow_list_lock); TAILQ_INIT(&priv->flow_meters); - TAILQ_INIT(&priv->flow_meter_profiles); + priv->mtr_profile_tbl = mlx5_l3t_create(MLX5_L3T_TYPE_PTR); + if (!priv->mtr_profile_tbl) + goto error; /* Hint libmlx5 to use PMD allocator for data plane resources */ mlx5_glue->dv_set_context_attr(sh->ctx, MLX5DV_CTX_ATTR_BUF_ALLOCATORS, @@ -1713,6 +1715,8 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, mlx5_vlan_vmwa_exit(priv->vmwa_context); if (eth_dev && priv->drop_queue.hrxq) mlx5_drop_action_destroy(eth_dev); + if (priv->mtr_profile_tbl) + mlx5_l3t_destroy(priv->mtr_profile_tbl); if (own_domain_id) claim_zero(rte_eth_switch_domain_free(priv->domain_id)); mlx5_cache_list_destroy(&priv->hrxqs); diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index 1b2dc8f815..0226327bc3 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -1373,8 +1373,8 @@ struct mlx5_priv { /* Hash table of Rx metadata register copy table. */ uint8_t mtr_sfx_reg; /* Meter prefix-suffix flow match REG_C. */ uint8_t mtr_color_reg; /* Meter color match REG_C. */ - struct mlx5_mtr_profiles flow_meter_profiles; /* MTR profile list. */ struct mlx5_legacy_flow_meters flow_meters; /* MTR list. */ + struct mlx5_l3t_tbl *mtr_profile_tbl; /* Meter index lookup table. */ struct mlx5_l3t_tbl *mtr_idx_tbl; /* Meter index lookup table. */ uint8_t skip_default_rss_reta; /* Skip configuration of default reta. */ uint8_t fdb_def_rule; /* Whether fdb jump to table 1 is configured. */ diff --git a/drivers/net/mlx5/mlx5_flow_meter.c b/drivers/net/mlx5/mlx5_flow_meter.c index d7ce5cd2f6..87c5782956 100644 --- a/drivers/net/mlx5/mlx5_flow_meter.c +++ b/drivers/net/mlx5/mlx5_flow_meter.c @@ -91,13 +91,20 @@ mlx5_flow_meter_action_create(struct mlx5_priv *priv, static struct mlx5_flow_meter_profile * mlx5_flow_meter_profile_find(struct mlx5_priv *priv, uint32_t meter_profile_id) { - struct mlx5_mtr_profiles *fmps = &priv->flow_meter_profiles; struct mlx5_flow_meter_profile *fmp; + union mlx5_l3t_data data; + int32_t ret; - TAILQ_FOREACH(fmp, fmps, next) - if (meter_profile_id == fmp->id) - return fmp; - return NULL; + if (mlx5_l3t_get_entry(priv->mtr_profile_tbl, + meter_profile_id, &data) || !data.ptr) + return NULL; + fmp = data.ptr; + /* Remove reference taken by the mlx5_l3t_get_entry. */ + ret = mlx5_l3t_clear_entry(priv->mtr_profile_tbl, + meter_profile_id); + if (!ret || ret == -1) + return NULL; + return fmp; } /** @@ -399,8 +406,8 @@ mlx5_flow_meter_profile_add(struct rte_eth_dev *dev, struct rte_mtr_error *error) { struct mlx5_priv *priv = dev->data->dev_private; - struct mlx5_mtr_profiles *fmps = &priv->flow_meter_profiles; struct mlx5_flow_meter_profile *fmp; + union mlx5_l3t_data data; int ret; if (!priv->mtr_en) @@ -427,8 +434,13 @@ mlx5_flow_meter_profile_add(struct rte_eth_dev *dev, ret = mlx5_flow_meter_param_fill(fmp, priv, error); if (ret) goto error; - /* Add to list. */ - TAILQ_INSERT_TAIL(fmps, fmp, next); + data.ptr = fmp; + ret = mlx5_l3t_set_entry(priv->mtr_profile_tbl, + meter_profile_id, &data); + if (ret) + return -rte_mtr_error_set(error, ENOTSUP, + RTE_MTR_ERROR_TYPE_UNSPECIFIED, + NULL, "Meter profile insert fail."); return 0; error: mlx5_free(fmp); @@ -472,8 +484,10 @@ mlx5_flow_meter_profile_delete(struct rte_eth_dev *dev, return -rte_mtr_error_set(error, EBUSY, RTE_MTR_ERROR_TYPE_METER_PROFILE_ID, NULL, "Meter profile is in use."); - /* Remove from list. */ - TAILQ_REMOVE(&priv->flow_meter_profiles, fmp, next); + if (mlx5_l3t_clear_entry(priv->mtr_profile_tbl, meter_profile_id)) + return -rte_mtr_error_set(error, EBUSY, + RTE_MTR_ERROR_TYPE_METER_PROFILE_ID, + NULL, "Meter profile remove fail."); mlx5_free(fmp); return 0; } @@ -1859,7 +1873,6 @@ mlx5_flow_meter_flush(struct rte_eth_dev *dev, struct rte_mtr_error *error) { struct mlx5_priv *priv = dev->data->dev_private; struct mlx5_legacy_flow_meters *fms = &priv->flow_meters; - struct mlx5_mtr_profiles *fmps = &priv->flow_meter_profiles; struct mlx5_flow_meter_profile *fmp; struct mlx5_legacy_flow_meter *legacy_fm; struct mlx5_flow_meter_info *fm; @@ -1921,12 +1934,18 @@ mlx5_flow_meter_flush(struct rte_eth_dev *dev, struct rte_mtr_error *error) mlx5_l3t_destroy(priv->sh->mtrmng->policy_idx_tbl); priv->sh->mtrmng->policy_idx_tbl = NULL; } - TAILQ_FOREACH_SAFE(fmp, fmps, next, tmp) { - /* Check unused. */ - MLX5_ASSERT(!fmp->ref_cnt); - /* Remove from list. */ - TAILQ_REMOVE(&priv->flow_meter_profiles, fmp, next); - mlx5_free(fmp); + if (priv->mtr_profile_tbl) { + MLX5_L3T_FOREACH(priv->mtr_profile_tbl, i, entry) { + fmp = entry; + if (mlx5_flow_meter_profile_delete(dev, fmp->id, + error)) + return -rte_mtr_error_set(error, EINVAL, + RTE_MTR_ERROR_TYPE_METER_POLICY_ID, + NULL, "Fail to destroy " + "meter profile."); + } + mlx5_l3t_destroy(priv->mtr_profile_tbl); + priv->mtr_profile_tbl = NULL; } /* Delete default policy table. */ mlx5_flow_destroy_def_policy(dev); diff --git a/drivers/net/mlx5/windows/mlx5_os.c b/drivers/net/mlx5/windows/mlx5_os.c index 3fe3f55f49..e30b682822 100644 --- a/drivers/net/mlx5/windows/mlx5_os.c +++ b/drivers/net/mlx5/windows/mlx5_os.c @@ -566,7 +566,9 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, priv->flows = 0; priv->ctrl_flows = 0; TAILQ_INIT(&priv->flow_meters); - TAILQ_INIT(&priv->flow_meter_profiles); + priv->mtr_profile_tbl = mlx5_l3t_create(MLX5_L3T_TYPE_PTR); + if (!priv->mtr_profile_tbl) + goto error; /* Bring Ethernet device up. */ DRV_LOG(DEBUG, "port %u forcing Ethernet interface up.", eth_dev->data->port_id); @@ -644,6 +646,8 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, return eth_dev; error: if (priv) { + if (priv->mtr_profile_tbl) + mlx5_l3t_destroy(priv->mtr_profile_tbl); if (own_domain_id) claim_zero(rte_eth_switch_domain_free(priv->domain_id)); mlx5_free(priv); From patchwork Fri Jul 2 09:14:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shun Hao X-Patchwork-Id: 95209 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 6EF33A0A0C; Fri, 2 Jul 2021 11:15:22 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B256641381; Fri, 2 Jul 2021 11:15:20 +0200 (CEST) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2071.outbound.protection.outlook.com [40.107.92.71]) by mails.dpdk.org (Postfix) with ESMTP id 6E6A84137E; Fri, 2 Jul 2021 11:15:19 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gQ4N2jVOwmrFnztrFe/0/jPz75tjRrM6lL8uul4xsFzWa6Nz8mGmgj3eWoERj0em1POoHyWtb2eYGoxN5l3/xZGlT4mdvACF0YuThapMjLwUU5fR+CwKIeVFxxeEgIznm3F0h59/ZwYJmh3D/TftYfwncnjcOMtz55cRKP2hG5V7GuYrVz1NSwQFUycGCuQxelojD9qL8obNoYNL1rjo97M3DCv5uIKZWHinkZumLFSf3rpZHXejIwt3TqQToojg9jXNesRXRr3HaVr+SrYefo3EA/CdgKAzmpD/8LIbidtp4KzeK1RbJUaHunE73oIdCCERaifLEGRq1jilu4b+OA== 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-SenderADCheck; bh=qEhvYQ14PzUQ9VG9FruRDetQkv2cU657efRb0qkxEOg=; b=Sc28NMtdRJ9PFRYQGyVLTOSYUWerW8WTJeoF0qCVppUC4tvFho7R3xGr/EJDVsOdhA3GMrl7ZvoYHvYy2hl/YLujdZmj5qX6DRhYt6NMU5TmU5adQKyh2X6XrwS2AbjC/Eg6W5As8wtRJk5QQti9hOaw2kjFmbtgu62k5zlnZ8xeoOgIjZ9YB54SZ4HRT1cCWtr3L6FHg56+K+4Ax1Nt3Opvdd8AiOPTQ6U6NPWFhMqekYOg5iQJhJYu3cSIh/u+y01BvxjBXWjfFU7DcQqP2W4Q7p7R0KQ6L5XlZLtlG/03vM2Bx5AuPfbpMwqK8JVTiQL2/EqD4/gm8OyFf3oWUQ== 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=none sp=none 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=qEhvYQ14PzUQ9VG9FruRDetQkv2cU657efRb0qkxEOg=; b=sD9FriDtdtgAKETtbFAHHEU0vZgagWKlmMofh4+9dPiuhwAb9fgNHiyP+68E55ooueVhe2lCdFJ++qE4Upzwtm4ClyHMERyZY8fWMjUp5epL7gVFIP01KqfC7JSTAnlRdQ/6kbzeEUam8BEzQ/WCh94aJw2ZfcLmkmrSZcVTDvf4zdLCa0+2mzThC+l1QojWI2fvD67aYCefVDoPMlM2V5qKOQ48LjiKHgB3BckqKPMFPaF3D2MBCvpdyQn1aiipVbpwaROQQDUouTERVCy/CkPHCFHiCHfKT0YnaPn8fT2/HzX1xLmuaZS9n1BhCNfqCcw68r8/imNIWSDRZMW7bQ== Received: from DM5PR20CA0005.namprd20.prod.outlook.com (2603:10b6:3:93::15) by DM6PR12MB3593.namprd12.prod.outlook.com (2603:10b6:5:11c::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22; Fri, 2 Jul 2021 09:15:14 +0000 Received: from DM6NAM11FT018.eop-nam11.prod.protection.outlook.com (2603:10b6:3:93:cafe::f) by DM5PR20CA0005.outlook.office365.com (2603:10b6:3:93::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.22 via Frontend Transport; Fri, 2 Jul 2021 09:15:14 +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 DM6NAM11FT018.mail.protection.outlook.com (10.13.172.110) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4287.22 via Frontend Transport; Fri, 2 Jul 2021 09:15:14 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 2 Jul 2021 09:15:11 +0000 From: Shun Hao To: , , , , Li Zhang CC: , , , , Date: Fri, 2 Jul 2021 12:14:44 +0300 Message-ID: <20210702091446.24635-3-shunh@nvidia.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20210702091446.24635-1-shunh@nvidia.com> References: <20210702091446.24635-1-shunh@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] 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: 9a35a770-6e83-48a5-041a-08d93d39e6ec X-MS-TrafficTypeDiagnostic: DM6PR12MB3593: X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3044; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PWGB2EcQPVNT32IqMsdIiBvyCHVanm2/z8agq+Mjg/Xbi6wVkbAA6tTs7EDTYzoTk240mzTd4P5RYB+2vc+tPzF2Dk8plY+sACq17hvZyNdK+hbOoJ0FvPYezAxtPkGRPvjmh8M8olopLsckEti9G/6PAqxL1IXXNFF/pghFPG/dcw53LVcW1Kby8pS9unSQit92RVch/QpueQW3yS2PbnhRGDuc956w2YOhye3gHrAGKAbDCOZagwakQD1il13KMP4Mrjn9DBb20oRxnFJnN0PbR3v2s0TtIgAIMK3PR/bwrZ0LmAE31dzfFGkyxJemTqFYWZtf18jzk5joNGsEOCjw5GTI0upCVeR8RDrupu8+k72RrZUGj7LSDAmp7xOxLcgNNnDaWhpqBn57OBqK1zu5J7E/38OrMO3sqnH/RgsqF9w4XvwM4BYj6aOl3w9CJz7vlg/xVk1BcDCo/FeoKatxjN/ad81b6xyscISPxVvuQ4/fFHOoS1SHrFE+qd+UxEDsJwQORE3NogHipIK/ac4EUIBpcBqkBk6MNs9MGLqu2KlpBawrt6RJl5TQK0Qr58y3d7HWDJg9nrWAu2v3LTobRd+4x+2RjtC4jsboJCbcAQsp4VQQDw+He8pNXH1fOcZ5YaYL7ZxAMvUZZ7J2M/RZR0N38d7MaCmK5Z+9WJDOO6f+MsUslI4iTjwXGcwA5TAZc01OnMC4BETDWHo3ow== 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)(346002)(396003)(136003)(39860400002)(376002)(36840700001)(46966006)(356005)(336012)(426003)(316002)(4326008)(2616005)(36756003)(47076005)(6286002)(6636002)(83380400001)(26005)(36906005)(7636003)(6666004)(86362001)(16526019)(186003)(70586007)(478600001)(70206006)(7696005)(2906002)(110136005)(8936002)(1076003)(54906003)(8676002)(5660300002)(55016002)(36860700001)(82310400003)(82740400003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jul 2021 09:15:14.5073 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9a35a770-6e83-48a5-041a-08d93d39e6ec 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: DM6NAM11FT018.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3593 Subject: [dpdk-dev] [PATCH v1 2/4] net/mlx5: fix meter policy ID table container 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" The meter policy handlers are managed by user IDs and the driver used l3 table in order to map the user ID to the internal driver handler of the policy. The l3 table was wrongly saved in the shared device structure which manages all the switch domain ports what made the user IDs shared between different ethdev ports. Move the policy l3 table to be per port by saving it in the port private structure. Fixes: afb4aa4f122 ("net/mlx5: support meter policy operations") Cc: stable@dpdk.org Signed-off-by: Shun Hao Acked-by: Matan Azrad --- drivers/net/mlx5/mlx5.c | 2 -- drivers/net/mlx5/mlx5.h | 3 +-- drivers/net/mlx5/mlx5_flow_meter.c | 38 ++++++++++++------------------ 3 files changed, 16 insertions(+), 27 deletions(-) diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index cf1815cb74..5f10a45c02 100644 --- a/drivers/net/mlx5/mlx5.c +++ b/drivers/net/mlx5/mlx5.c @@ -600,8 +600,6 @@ mlx5_aso_flow_mtrs_mng_init(struct mlx5_dev_ctx_shared *sh) if (sh->meter_aso_en) { rte_spinlock_init(&sh->mtrmng->pools_mng.mtrsl); LIST_INIT(&sh->mtrmng->pools_mng.meters); - sh->mtrmng->policy_idx_tbl = - mlx5_l3t_create(MLX5_L3T_TYPE_DWORD); } sh->mtrmng->def_policy_id = MLX5_INVALID_POLICY_ID; } diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index 0226327bc3..6eae7b6fd7 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -870,8 +870,6 @@ struct mlx5_flow_mtr_mng { /* Default policy id. */ uint32_t def_policy_ref_cnt; /** def_policy meter use count. */ - struct mlx5_l3t_tbl *policy_idx_tbl; - /* Policy index lookup table. */ struct mlx5_flow_tbl_resource *drop_tbl[MLX5_MTR_DOMAIN_MAX]; /* Meter drop table. */ struct mlx5_flow_dv_matcher * @@ -1375,6 +1373,7 @@ struct mlx5_priv { uint8_t mtr_color_reg; /* Meter color match REG_C. */ struct mlx5_legacy_flow_meters flow_meters; /* MTR list. */ struct mlx5_l3t_tbl *mtr_profile_tbl; /* Meter index lookup table. */ + struct mlx5_l3t_tbl *policy_idx_tbl; /* Policy index lookup table. */ struct mlx5_l3t_tbl *mtr_idx_tbl; /* Meter index lookup table. */ uint8_t skip_default_rss_reta; /* Skip configuration of default reta. */ uint8_t fdb_def_rule; /* Whether fdb jump to table 1 is configured. */ diff --git a/drivers/net/mlx5/mlx5_flow_meter.c b/drivers/net/mlx5/mlx5_flow_meter.c index 87c5782956..6f962a8d52 100644 --- a/drivers/net/mlx5/mlx5_flow_meter.c +++ b/drivers/net/mlx5/mlx5_flow_meter.c @@ -512,11 +512,9 @@ mlx5_flow_meter_policy_find(struct rte_eth_dev *dev, struct mlx5_flow_meter_sub_policy *sub_policy = NULL; union mlx5_l3t_data data; - if (policy_id > MLX5_MAX_SUB_POLICY_TBL_NUM || - !priv->sh->mtrmng->policy_idx_tbl) + if (policy_id > MLX5_MAX_SUB_POLICY_TBL_NUM || !priv->policy_idx_tbl) return NULL; - if (mlx5_l3t_get_entry(priv->sh->mtrmng->policy_idx_tbl, - policy_id, &data) || + if (mlx5_l3t_get_entry(priv->policy_idx_tbl, policy_id, &data) || !data.dword) return NULL; if (policy_idx) @@ -524,8 +522,7 @@ mlx5_flow_meter_policy_find(struct rte_eth_dev *dev, sub_policy = mlx5_ipool_get(priv->sh->ipool[MLX5_IPOOL_MTR_POLICY], data.dword); /* Remove reference taken by the mlx5_l3t_get_entry. */ - mlx5_l3t_clear_entry(priv->sh->mtrmng->policy_idx_tbl, - policy_id); + mlx5_l3t_clear_entry(priv->policy_idx_tbl, policy_id); if (sub_policy) if (sub_policy->main_policy_id) return sub_policy->main_policy; @@ -605,9 +602,8 @@ __mlx5_flow_meter_policy_delete(struct rte_eth_dev *dev, } } } - if (priv->sh->mtrmng->policy_idx_tbl && clear_l3t) { - if (mlx5_l3t_clear_entry(priv->sh->mtrmng->policy_idx_tbl, - policy_id)) { + if (priv->policy_idx_tbl && clear_l3t) { + if (mlx5_l3t_clear_entry(priv->policy_idx_tbl, policy_id)) { rte_spinlock_unlock(&mtr_policy->sl); return -rte_mtr_error_set(error, ENOTSUP, RTE_MTR_ERROR_TYPE_METER_POLICY_ID, NULL, @@ -770,14 +766,12 @@ mlx5_flow_meter_policy_add(struct rte_eth_dev *dev, goto policy_add_err; } data.dword = policy_idx; - if (!priv->sh->mtrmng->policy_idx_tbl) { - priv->sh->mtrmng->policy_idx_tbl = - mlx5_l3t_create(MLX5_L3T_TYPE_DWORD); - if (!priv->sh->mtrmng->policy_idx_tbl) + if (!priv->policy_idx_tbl) { + priv->policy_idx_tbl = mlx5_l3t_create(MLX5_L3T_TYPE_DWORD); + if (!priv->policy_idx_tbl) goto policy_add_err; } - if (mlx5_l3t_set_entry(priv->sh->mtrmng->policy_idx_tbl, - policy_id, &data)) + if (mlx5_l3t_set_entry(priv->policy_idx_tbl, policy_id, &data)) goto policy_add_err; return 0; policy_add_err: @@ -1840,9 +1834,8 @@ mlx5_flow_meter_rxq_flush(struct rte_eth_dev *dev) if (!priv->mtr_en) return; - if (priv->sh->mtrmng->policy_idx_tbl && priv->sh->refcnt == 1) { - MLX5_L3T_FOREACH(priv->sh->mtrmng->policy_idx_tbl, - i, entry) { + if (priv->policy_idx_tbl) { + MLX5_L3T_FOREACH(priv->policy_idx_tbl, i, entry) { policy_idx = *(uint32_t *)entry; sub_policy = mlx5_ipool_get (priv->sh->ipool[MLX5_IPOOL_MTR_POLICY], @@ -1908,9 +1901,8 @@ mlx5_flow_meter_flush(struct rte_eth_dev *dev, struct rte_mtr_error *error) NULL, "MTR object meter profile invalid."); } } - if (priv->sh->mtrmng->policy_idx_tbl && priv->sh->refcnt == 1) { - MLX5_L3T_FOREACH(priv->sh->mtrmng->policy_idx_tbl, - i, entry) { + if (priv->policy_idx_tbl) { + MLX5_L3T_FOREACH(priv->policy_idx_tbl, i, entry) { policy_idx = *(uint32_t *)entry; sub_policy = mlx5_ipool_get (priv->sh->ipool[MLX5_IPOOL_MTR_POLICY], @@ -1931,8 +1923,8 @@ mlx5_flow_meter_flush(struct rte_eth_dev *dev, struct rte_mtr_error *error) "meter policy invalid."); mlx5_free(sub_policy->main_policy); } - mlx5_l3t_destroy(priv->sh->mtrmng->policy_idx_tbl); - priv->sh->mtrmng->policy_idx_tbl = NULL; + mlx5_l3t_destroy(priv->policy_idx_tbl); + priv->policy_idx_tbl = NULL; } if (priv->mtr_profile_tbl) { MLX5_L3T_FOREACH(priv->mtr_profile_tbl, i, entry) { From patchwork Fri Jul 2 09:14:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shun Hao X-Patchwork-Id: 95210 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 93A48A0A0C; Fri, 2 Jul 2021 11:15:30 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D81D44138E; Fri, 2 Jul 2021 11:15:21 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2064.outbound.protection.outlook.com [40.107.237.64]) by mails.dpdk.org (Postfix) with ESMTP id 8E8DB41381; Fri, 2 Jul 2021 11:15:19 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dMeo6gY2Ls3VzS1G1gQwVTbCHuoQmIL6L3u2FbRnNQMDwwcpTQpvXhjaNdJ+pvc83JB+WceFjvTslO3YyQmBfccVWP48A1T7EYuPzjRznB5lwchymeqjBb/Un4Bz4YOqheaxqN3ZoeKG6J9lHnkLdd8ZvzsG8gnK2vcbP4eSQPSfkSiQz7o9u4AZBUqUNZo0TApv/eA/TTLKAPn/jr9Krl3Cce7mAgg3QRkirCa/WeVTFqJpwI0raEXY/K8DBvvGdwcCNCTIJDJjq6PMjQuMNH3UwXacYrn0XWcyDGPoEnQVbblGtdeEKrhGJfznt2UM6Enkog6lKJV0zpqQaAeRMw== 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-SenderADCheck; bh=Fo+XtsiRGR3dSaMu5oQt9+Y64SGUJzhtNopCjeTg7Y0=; b=GxL32lV3whjQfYpx9tz+1iOA/iO3iUM8+zFJCSspuJ/iWmYfwOno/DPPdxNvs2BXKKZ/KmsyhFzUzchYiG+IUDHQAWLwSKkkRASD4ngcyySMMdFT6lsPVGCJvG83caoiNPIu1oSMek/F0La820Lq6oapW2VdYMLLGDfnZ/pUA+1fAf4/Lom3Kwa9tpOYL075bHnukqyjLvquSGBt4WC05Lenlk860c7vBlhjpXdHvsyFdy1WzGvbtLqOjC46ydiMwcyspvJwudkbtwD8Sb+h1ZrSu0MLL6pwmpwVyV9sXB3Cbrd9BPMy8cwSpVwn00IP0UC4gWnXqr7/NxbIQrLAIg== 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=none sp=none 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=Fo+XtsiRGR3dSaMu5oQt9+Y64SGUJzhtNopCjeTg7Y0=; b=ZeamzY1F5OQ+TbUG55pq2n0Pw4CdxbachWmPnlMLoqpPmL5PdC2Vb26EWu3IAHAIR4ROWGV7VTTVowDfb6qeXt+cfWo52vVWW3icpRnWcLmtp/4N+DIlI/rZ+ns3TRULSq+QhWwEDzkskOY/7QuyjDYLolvq78YOGNxhTEPTiL4+0KIoETp429YWYgeNjkSwdgVM+hD8zbc86mEgIJlAIIPCw6HiwYuUquIfIHnfEBDWizN2fIRiGErPd0lzhIdyb/Vx3yQxod+9muZNVj8KGhbIkE2E6KYmJB3VydbYE4WNUjmm9dTeRhGanHLfVjW0KnZZk9QVwtYsMDyrOXXJsQ== Received: from DS7PR05CA0012.namprd05.prod.outlook.com (2603:10b6:5:3b9::17) by BN9PR12MB5366.namprd12.prod.outlook.com (2603:10b6:408:103::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23; Fri, 2 Jul 2021 09:15:18 +0000 Received: from DM6NAM11FT048.eop-nam11.prod.protection.outlook.com (2603:10b6:5:3b9:cafe::8c) by DS7PR05CA0012.outlook.office365.com (2603:10b6:5:3b9::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.7 via Frontend Transport; Fri, 2 Jul 2021 09:15:18 +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 DM6NAM11FT048.mail.protection.outlook.com (10.13.173.114) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4287.22 via Frontend Transport; Fri, 2 Jul 2021 09:15:17 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 2 Jul 2021 09:15:14 +0000 From: Shun Hao To: , , , , Li Zhang CC: , , , , Date: Fri, 2 Jul 2021 12:14:45 +0300 Message-ID: <20210702091446.24635-4-shunh@nvidia.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20210702091446.24635-1-shunh@nvidia.com> References: <20210702091446.24635-1-shunh@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] 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: 5b46c1bc-01b8-4d5f-0001-08d93d39e8ec X-MS-TrafficTypeDiagnostic: BN9PR12MB5366: X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2733; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: w0gyPr0GfbFe3FV1C+9wLF/9z6vMUxKofYSFcMyUCTIjV5eZCEJnmDOEoDUBjaWOqELviVLAodWE84P5earoqiEvDH+FZFTgL+sT2kf+N1Akn9j4ElbGtXX+rZEGgUV9UT5LRNzPI4/6mTNHs1xjGsEb+5ID3j2yHQBbtE5gAVDY9BXcDRJnAYbExQoucA9O4r0q1bkajFuq+XkYnWbgu+wApl7j/O2cy+c3nLQYiDPno15QIbxUwn+wTbC9Qnn98+8wIj/O29TWN291qA39V4aRE2CdjxWvcRxu9e5WcLh6aeHE8w+J/97ixJGRmLRFizyehEqXfhtVfiN8OlrAulXGiABH5gOjvJAVm40PfUyGO/Q5TmvZOwZ7ld6U3Cih8/p09a6T4f7jqyhbFGhny33oyu3klIwkV7sA381Y3YtyeTvWWQ+s9iByWz1pF5Zkps763N/00HLZNWbGcckQwit6v5eG6jN81UTKd4chxQti8/S5gIHtMdPnT3382jmwqFY2jaeW/q4xBNgfVOUTOriSHCo6gIjf+LJfyrloBpYLuUluLto2/FS9zt/GW9yLJsXwY3IYfYHR3vneFZ8pSl+sGrrT9mpQyi0eIP8oC9ZdHvv2T6K5Fy/pOXgk4mRVTR5NM1bGWrgjnHfo85gW1ez6zhMy0drNQOFr1Jwfcxh6OlWjJw9orRQCb5bospHW0Aq8iQ0ICTl/+Q+UziLeDw== 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)(346002)(136003)(396003)(39860400002)(376002)(46966006)(36840700001)(426003)(6286002)(6636002)(2616005)(1076003)(54906003)(4326008)(55016002)(47076005)(2906002)(82310400003)(336012)(36860700001)(26005)(82740400003)(70586007)(16526019)(186003)(316002)(36906005)(6666004)(7636003)(83380400001)(8676002)(7696005)(5660300002)(8936002)(478600001)(110136005)(86362001)(356005)(70206006)(36756003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jul 2021 09:15:17.8807 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5b46c1bc-01b8-4d5f-0001-08d93d39e8ec 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: DM6NAM11FT048.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN9PR12MB5366 Subject: [dpdk-dev] [PATCH v1 3/4] net/mlx5: fix meter flow direction check 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" When preparing prefix flow using ASO meter, if it's tx flow, need to make meter action the first one. Currently the check of flow direction in switch domain is incorrect that it checks the flow dev port only. This adds the fix for the check that if there's port_id match item in flow, use that port_id as src port to determine flow direction. Fixes: c99b4f8bc2f1 ("net/mlx5: support ASO meter action") Cc: stable@dpdk.org Signed-off-by: Shun Hao Acked-by: Matan Azrad --- drivers/net/mlx5/mlx5_flow.c | 83 ++++++++++++++++++++++-------------- 1 file changed, 50 insertions(+), 33 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c index 3b7c94d92f..c27f6197a0 100644 --- a/drivers/net/mlx5/mlx5_flow.c +++ b/drivers/net/mlx5/mlx5_flow.c @@ -4740,12 +4740,12 @@ flow_meter_split_prep(struct rte_eth_dev *dev, struct mlx5_rte_flow_item_tag *tag_item_spec; struct mlx5_rte_flow_item_tag *tag_item_mask; uint32_t tag_id = 0; - bool copy_vlan = false; + struct rte_flow_item *vlan_item_dst = NULL; + const struct rte_flow_item *vlan_item_src = NULL; struct rte_flow_action *hw_mtr_action; struct rte_flow_action *action_pre_head = NULL; - bool mtr_first = priv->sh->meter_aso_en && - (attr->egress || - (attr->transfer && priv->representor_id != UINT16_MAX)); + int32_t flow_src_port = priv->representor_id; + bool mtr_first; uint8_t mtr_id_offset = priv->mtr_reg_share ? MLX5_MTR_COLOR_BITS : 0; uint8_t mtr_reg_bits = priv->mtr_reg_share ? MLX5_MTR_IDLE_BITS_IN_COLOR_REG : MLX5_REG_BITS; @@ -4754,6 +4754,42 @@ flow_meter_split_prep(struct rte_eth_dev *dev, uint8_t flow_id_bits = 0; int shift; + /* Prepare the suffix subflow items. */ + tag_item = sfx_items++; + for (; items->type != RTE_FLOW_ITEM_TYPE_END; items++) { + struct mlx5_priv *port_priv; + const struct rte_flow_item_port_id *pid_v; + int item_type = items->type; + + switch (item_type) { + case RTE_FLOW_ITEM_TYPE_PORT_ID: + pid_v = items->spec; + MLX5_ASSERT(pid_v); + port_priv = mlx5_port_to_eswitch_info(pid_v->id, false); + if (!port_priv) + return rte_flow_error_set(error, + rte_errno, + RTE_FLOW_ERROR_TYPE_ITEM_SPEC, + pid_v, + "Failed to get port info."); + flow_src_port = port_priv->representor_id; + memcpy(sfx_items, items, sizeof(*sfx_items)); + sfx_items++; + break; + case RTE_FLOW_ITEM_TYPE_VLAN: + /* Determine if copy vlan item below. */ + vlan_item_src = items; + vlan_item_dst = sfx_items++; + vlan_item_dst->type = RTE_FLOW_ITEM_TYPE_VOID; + break; + default: + break; + } + } + sfx_items->type = RTE_FLOW_ITEM_TYPE_END; + sfx_items++; + mtr_first = priv->sh->meter_aso_en && + (attr->egress || (attr->transfer && flow_src_port != 0xffff)); /* For ASO meter, meter must be before tag in TX direction. */ if (mtr_first) { action_pre_head = actions_pre++; @@ -4790,7 +4826,16 @@ flow_meter_split_prep(struct rte_eth_dev *dev, break; case RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN: case RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_VID: - copy_vlan = true; + if (vlan_item_dst && vlan_item_src) { + memcpy(vlan_item_dst, vlan_item_src, + sizeof(*vlan_item_dst)); + /* + * Convert to internal match item, it is used + * for vlan push and set vid. + */ + vlan_item_dst->type = (enum rte_flow_item_type) + MLX5_RTE_FLOW_ITEM_TYPE_VLAN; + } break; default: break; @@ -4862,34 +4907,6 @@ flow_meter_split_prep(struct rte_eth_dev *dev, if (flow_id_bits > priv->sh->mtrmng->max_mtr_flow_bits) priv->sh->mtrmng->max_mtr_flow_bits = flow_id_bits; } - /* Prepare the suffix subflow items. */ - tag_item = sfx_items++; - for (; items->type != RTE_FLOW_ITEM_TYPE_END; items++) { - int item_type = items->type; - - switch (item_type) { - case RTE_FLOW_ITEM_TYPE_PORT_ID: - memcpy(sfx_items, items, sizeof(*sfx_items)); - sfx_items++; - break; - case RTE_FLOW_ITEM_TYPE_VLAN: - if (copy_vlan) { - memcpy(sfx_items, items, sizeof(*sfx_items)); - /* - * Convert to internal match item, it is used - * for vlan push and set vid. - */ - sfx_items->type = (enum rte_flow_item_type) - MLX5_RTE_FLOW_ITEM_TYPE_VLAN; - sfx_items++; - } - break; - default: - break; - } - } - sfx_items->type = RTE_FLOW_ITEM_TYPE_END; - sfx_items++; /* Build tag actions and items for meter_id/meter flow_id. */ set_tag = (struct mlx5_rte_flow_action_set_tag *)actions_pre; tag_item_spec = (struct mlx5_rte_flow_item_tag *)sfx_items; From patchwork Fri Jul 2 09:14:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shun Hao X-Patchwork-Id: 95211 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 6D895A0A0C; Fri, 2 Jul 2021 11:15:39 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3C7C44139B; Fri, 2 Jul 2021 11:15:26 +0200 (CEST) Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2050.outbound.protection.outlook.com [40.107.243.50]) by mails.dpdk.org (Postfix) with ESMTP id 6391C4138A; Fri, 2 Jul 2021 11:15:24 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bOL3gv23UQL3QYFg8LN+/FAWT3qRP4fmnMPdkw5FOlBkjrypHS5rSua1l4KSUR4g3Z4s8z55Oep8QLXc+kl6dNenA7/65Y8Q1V681/3drqJl8Axjg18RqIcFiBtHeVMZMPkQ4ZIK4j0XD/vOsIq2l9Iyyg8nX0y1OdtOa3VkIM54/ZHxpCM29UVyS7jv9SHLcwpkRc3dWJg4ZrW7MMqiK82F7Ugs3h7UJY4n/4uj1L1wYREVmMUA4GlQ5QaFg3CXmoNUlYrP9xpTYHDUup+p70Jq5SeeOWhyGEUZyiuoiNqlc3ayQYh3ct5v11g+1A/w0y/ghUXvgaJWMub8BO4rsA== 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-SenderADCheck; bh=hp+UwPaJMdZKQRRWKjyBgDoon+C/Kv4oxX8vgaCg7Ng=; b=F+R/a9EkKg0j2fTLTRPgnAe7zncJUOa6HFD5jBw7tu6AI7L1yUdwv9Ldf/S4LlxzriDidAgCV7IRG4Pujhui+RzgUXoYWbcPSUGVwF3na374vzOa0Yw+FbkpuS6Tpje2jDE1cFX8pHAH1CP0WfrWqHCpNDcVVW/rLt3UQeqke2LP0b9cb9R5Tx+TxPzLRx5KCEYfyBP+tiFfsNoB/hxlsKUMwPv9VHumhIWZBrl56tzj4N8O0MtZXRtL/Qa8gi6xSSOaFEelPkC5cfh1f+UquhbrnSEnW5YNQIoXtXmZLk60G/1hU0bCy/uiCLOamNpL+iOtFLxlY6ccrfSyyJtu1w== 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=none sp=none 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=hp+UwPaJMdZKQRRWKjyBgDoon+C/Kv4oxX8vgaCg7Ng=; b=MgOQn5QnT5rWiCVnB/bbu7n64tFLiTIVo98ghbH3rsLkEZnZEVUux3ChL71k7lwRfW/zKKSC7LJvUzbLENlHLjk/ZbSmEpuYAz9QZ3lYldCZwbnvB5RMYjoER3SCHAz4ge2c8xr136Zkd67Bcu1m2zAiV+RciNq29Yun20R6x2FrUXj/VceUgLghvUn1lUpYCL+CazZOaL6DvWjZgDXlzciHqdLPXFGQ8rL6lJiSdBwiXMxnL4520W7wTiNYSj5B3SqgpbKspkoQoCj16X478nXiZ8xnQPDIgtSErdX1JV0aWFGObNgh5wkt35IkW5jOurUBKxbI9Ecs7nHbLmyHdA== Received: from DS7PR03CA0086.namprd03.prod.outlook.com (2603:10b6:5:3bb::31) by MW3PR12MB4506.namprd12.prod.outlook.com (2603:10b6:303:53::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.19; Fri, 2 Jul 2021 09:15:22 +0000 Received: from DM6NAM11FT041.eop-nam11.prod.protection.outlook.com (2603:10b6:5:3bb:cafe::2) by DS7PR03CA0086.outlook.office365.com (2603:10b6:5:3bb::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.23 via Frontend Transport; Fri, 2 Jul 2021 09:15:22 +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 DM6NAM11FT041.mail.protection.outlook.com (10.13.172.98) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4287.22 via Frontend Transport; Fri, 2 Jul 2021 09:15:22 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 2 Jul 2021 09:15:18 +0000 From: Shun Hao To: , , , , Li Zhang CC: , , , , Date: Fri, 2 Jul 2021 12:14:46 +0300 Message-ID: <20210702091446.24635-5-shunh@nvidia.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20210702091446.24635-1-shunh@nvidia.com> References: <20210702091446.24635-1-shunh@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] 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: 320da707-e5a1-4c5b-8e15-08d93d39ebcc X-MS-TrafficTypeDiagnostic: MW3PR12MB4506: X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7691; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Kia1Q9VKycAQV/i5BAa3jqcwZ4+EodeF1ZNPfJAZfPuI6ZXt8GEerAJnEtZanHJjlwdx4jRci/J67e83xmFOy96g9UTa+7q/CttumBWMc1/iRLzevvFy89PS4e2x9Xd/eItv96jHJgLoNJwX1kitnWIC8OJymRYnG3DE22VwN3WdcgsCMl4ar3OfI57KHZ5vx5Vd9mUjqHeq5RpZQdFn6Dq9wEbtrogOtwkBUa1M1NIeV2p5kpCHYe4m1zz+d6/U7sWu+PKQTweyFqbcMp8isWnRIIYFrvSrgOu2hjlHPXDqMofP79huU/4i9MXnJQS1Q0fuium8TpICqukl5iQzQIz9VLPmvo5AgsHBFw7whb4mbzCT6ytHiEsg8Sqtz7lpi63leEV+x4N/llf5tNUhAl8B7zfI+WONd25/fj0NLpLevd+Ta+6wMvfqrUnPWO479QR2PhR4V3fNpLnjUv1RotRDgNqnfXm1p6x5BAEirRV43NFo6TTeqDZ6j6SNFBMmg7SLlmTF/KcHZOMbN65YRxdKWgaW29jIEJ1Gfcp+imjfl2pAJ2T4GxG84/KtOiw7BBmB56/Nm2DdVdyVimY4qhrzNT085fHIyoLkcxtEFr0RhWwi0RY95KvUEkCxUWqIVZ+SgQ2QwTNOFvn8Kjq2GuoPZEzPH/boUUzkQAvhqmlWwH4JJe3lLrKTEtSt4zwgGhq7uHksAV93ZKxJby/BZA== 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)(39860400002)(396003)(376002)(136003)(346002)(36840700001)(46966006)(426003)(336012)(82310400003)(4326008)(478600001)(54906003)(110136005)(7696005)(36906005)(70586007)(26005)(36756003)(6666004)(316002)(8676002)(70206006)(2616005)(16526019)(7636003)(1076003)(86362001)(5660300002)(82740400003)(186003)(83380400001)(2906002)(6636002)(6286002)(47076005)(356005)(55016002)(8936002)(36860700001); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jul 2021 09:15:22.6898 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 320da707-e5a1-4c5b-8e15-08d93d39ebcc 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: DM6NAM11FT041.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW3PR12MB4506 Subject: [dpdk-dev] [PATCH v1 4/4] net/mlx5: fix meter policy flow match item 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" Currently when creating meter policy, a src port_id match item will always be added in switch domain. So if one meter is used by another port, it will not work correctly. This issue is solved: 1. If policy fate action is port_id, add the src port_id match item, and the meter cannot be shared by another port. 2. If policy fate action isn't port_id, don't add the src port_id match, meter can be shared by another port. This fix enables one meter being shared by different ports. User can create a meter flow using a port_id match item to make this meter shared by other port. Fixes: afb4aa4f122 ("net/mlx5: support meter policy operations") Cc: stable@dpdk.org Signed-off-by: Shun Hao Acked-by: Matan Azrad --- doc/guides/nics/mlx5.rst | 8 +++++ drivers/net/mlx5/mlx5.h | 2 ++ drivers/net/mlx5/mlx5_flow_dv.c | 58 ++++++++++++++++++++++++++++----- 3 files changed, 59 insertions(+), 9 deletions(-) diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst index eb44a070b1..57e7d17b87 100644 --- a/doc/guides/nics/mlx5.rst +++ b/doc/guides/nics/mlx5.rst @@ -1912,3 +1912,11 @@ all flows with assistance of external tools. .. code-block:: console mlx_steering_dump.py -f -flowptr + +How to share a meter between ports in the same switch domain +------------------------------------------------------------ + +This section demonstrates how to use the shared meter. A meter M can be created +on port X and to be shared with a port Y on the same switch domain by the next way: + + flow create X ingress transfer pattern eth / port_id id is Y / end actions meter mtr_id M / end diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index 6eae7b6fd7..0f4b239142 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -682,6 +682,8 @@ struct mlx5_meter_policy_action_container { /* Flow meter policy parameter structure. */ struct mlx5_flow_meter_policy { + struct rte_eth_dev *dev; + /* The port dev on which policy is created. */ uint32_t is_rss:1; /* Is RSS policy table. */ uint32_t ingress:1; diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c index a04a3c2bb8..75ef6216ac 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -5031,6 +5031,8 @@ flow_dv_modify_hdr_action_max(struct rte_eth_dev *dev __rte_unused, * Pointer to the meter action. * @param[in] attr * Attributes of flow that includes this action. + * @param[in] port_id_item + * Pointer to item indicating port id. * @param[out] error * Pointer to error structure. * @@ -5042,6 +5044,7 @@ mlx5_flow_validate_action_meter(struct rte_eth_dev *dev, uint64_t action_flags, const struct rte_flow_action *action, const struct rte_flow_attr *attr, + const struct rte_flow_item *port_id_item, bool *def_policy, struct rte_flow_error *error) { @@ -5112,6 +5115,37 @@ mlx5_flow_validate_action_meter(struct rte_eth_dev *dev, "Flow attributes domain " "have a conflict with current " "meter domain attributes"); + if (attr->transfer && mtr_policy->dev) { + /** + * When policy has fate action of port_id, + * the flow should have the same src port as policy. + */ + struct mlx5_priv *policy_port_priv = + mtr_policy->dev->data->dev_private; + int32_t flow_src_port = priv->representor_id; + + if (port_id_item) { + const struct rte_flow_item_port_id *spec = + port_id_item->spec; + struct mlx5_priv *port_priv = + mlx5_port_to_eswitch_info(spec->id, + false); + if (!port_priv) + return rte_flow_error_set(error, + rte_errno, + RTE_FLOW_ERROR_TYPE_ITEM_SPEC, + spec, + "Failed to get port info."); + flow_src_port = port_priv->representor_id; + } + if (flow_src_port != policy_port_priv->representor_id) + return rte_flow_error_set(error, + rte_errno, + RTE_FLOW_ERROR_TYPE_ITEM_SPEC, + NULL, + "Flow and meter policy " + "have different src port."); + } *def_policy = false; } return 0; @@ -6685,6 +6719,7 @@ flow_dv_validate(struct rte_eth_dev *dev, const struct rte_flow_attr *attr, }; const struct rte_eth_hairpin_conf *conf; const struct rte_flow_item *rule_items = items; + const struct rte_flow_item *port_id_item = NULL; bool def_policy = false; if (items == NULL) @@ -6726,6 +6761,7 @@ flow_dv_validate(struct rte_eth_dev *dev, const struct rte_flow_attr *attr, if (ret < 0) return ret; last_item = MLX5_FLOW_ITEM_PORT_ID; + port_id_item = items; break; case RTE_FLOW_ITEM_TYPE_ETH: ret = mlx5_flow_validate_item_eth(items, item_flags, @@ -7463,6 +7499,7 @@ flow_dv_validate(struct rte_eth_dev *dev, const struct rte_flow_attr *attr, ret = mlx5_flow_validate_action_meter(dev, action_flags, actions, attr, + port_id_item, &def_policy, error); if (ret < 0) @@ -15348,7 +15385,7 @@ __flow_dv_create_policy_flow(struct rte_eth_dev *dev, uint32_t color_reg_c_idx, enum rte_color color, void *matcher_object, int actions_n, void *actions, - bool is_default_policy, void **rule, + bool match_src_port, void **rule, const struct rte_flow_attr *attr) { int ret; @@ -15362,7 +15399,7 @@ __flow_dv_create_policy_flow(struct rte_eth_dev *dev, }; struct mlx5_priv *priv = dev->data->dev_private; - if (!is_default_policy && (priv->representor || priv->master)) { + if (match_src_port && (priv->representor || priv->master)) { if (flow_dv_translate_item_port_id(dev, matcher.buf, value.buf, NULL, attr)) { DRV_LOG(ERR, @@ -15389,7 +15426,7 @@ __flow_dv_create_policy_matcher(struct rte_eth_dev *dev, uint16_t priority, struct mlx5_flow_meter_sub_policy *sub_policy, const struct rte_flow_attr *attr, - bool is_default_policy, + bool match_src_port, struct rte_flow_error *error) { struct mlx5_cache_entry *entry; @@ -15413,7 +15450,7 @@ __flow_dv_create_policy_matcher(struct rte_eth_dev *dev, struct mlx5_priv *priv = dev->data->dev_private; uint32_t color_mask = (UINT32_C(1) << MLX5_MTR_COLOR_BITS) - 1; - if (!is_default_policy && (priv->representor || priv->master)) { + if (match_src_port && (priv->representor || priv->master)) { if (flow_dv_translate_item_port_id(dev, matcher.mask.buf, value.buf, NULL, attr)) { DRV_LOG(ERR, @@ -15458,7 +15495,7 @@ __flow_dv_create_policy_matcher(struct rte_eth_dev *dev, static int __flow_dv_create_domain_policy_rules(struct rte_eth_dev *dev, struct mlx5_flow_meter_sub_policy *sub_policy, - uint8_t egress, uint8_t transfer, bool is_default_policy, + uint8_t egress, uint8_t transfer, bool match_src_port, struct mlx5_meter_policy_acts acts[RTE_COLORS]) { struct rte_flow_error flow_err; @@ -15497,7 +15534,7 @@ __flow_dv_create_domain_policy_rules(struct rte_eth_dev *dev, /* Create matchers for Color. */ if (__flow_dv_create_policy_matcher(dev, color_reg_c_idx, i, sub_policy, - &attr, is_default_policy, &flow_err)) + &attr, match_src_port, &flow_err)) return -1; } /* Create flow, matching color. */ @@ -15507,7 +15544,7 @@ __flow_dv_create_domain_policy_rules(struct rte_eth_dev *dev, sub_policy->color_matcher[i]->matcher_object, acts[i].actions_n, acts[i].dv_actions, - is_default_policy, + match_src_port, &sub_policy->color_rule[i], &attr)) return -1; @@ -15527,6 +15564,7 @@ __flow_dv_create_policy_acts_rules(struct rte_eth_dev *dev, struct mlx5_flow_dv_port_id_action_resource *port_action; struct mlx5_hrxq *hrxq; uint8_t egress, transfer; + bool match_src_port = false; int i; for (i = 0; i < RTE_COLORS; i++) { @@ -15571,6 +15609,8 @@ __flow_dv_create_policy_acts_rules(struct rte_eth_dev *dev, acts[i].dv_actions[acts[i].actions_n] = port_action->action; acts[i].actions_n++; + mtr_policy->dev = dev; + match_src_port = true; break; case MLX5_FLOW_FATE_DROP: case MLX5_FLOW_FATE_JUMP: @@ -15601,7 +15641,7 @@ __flow_dv_create_policy_acts_rules(struct rte_eth_dev *dev, egress = (domain == MLX5_MTR_DOMAIN_EGRESS) ? 1 : 0; transfer = (domain == MLX5_MTR_DOMAIN_TRANSFER) ? 1 : 0; if (__flow_dv_create_domain_policy_rules(dev, sub_policy, - egress, transfer, false, acts)) { + egress, transfer, match_src_port, acts)) { DRV_LOG(ERR, "Failed to create policy rules per domain."); return -1; @@ -15709,7 +15749,7 @@ __flow_dv_create_domain_def_policy(struct rte_eth_dev *dev, uint32_t domain) /* Create default policy rules. */ ret = __flow_dv_create_domain_policy_rules(dev, &def_policy->sub_policy, - egress, transfer, true, acts); + egress, transfer, false, acts); if (ret) { DRV_LOG(ERR, "Failed to create " "default policy rules.");