From patchwork Tue Aug 8 10:00:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Gregory Etelson X-Patchwork-Id: 129942 X-Patchwork-Delegate: ferruh.yigit@amd.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 D685E4300B; Tue, 8 Aug 2023 12:01:17 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B0E8343247; Tue, 8 Aug 2023 12:01:17 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2078.outbound.protection.outlook.com [40.107.237.78]) by mails.dpdk.org (Postfix) with ESMTP id F13FD40A87 for ; Tue, 8 Aug 2023 12:01:15 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=O61eq8RCsN3tUi2qymdWAsVDC+Oeq3ZIPhxK/l4wZIJsQkQ5w2afiwArzkkhLWdKzJJlUvDVXqAm3aaSP3jW+E/36vqlnzyPgYmWGSmq9bbn493T61+eO/PUbDw1/Zcuhn1KJFKKfIa1Vk38yB0T2VED0j5LjYa0x1gRRYxrnlft6cHn6XHsQ0SghGugPR/y5NHcULYDF11GfwYPsUl1z8TbbVYGWbwhMQMam+TAwDJIdplQOLPCdG+H5NJlR7Bs2PzvzOjDhM++Jnb4C2lOEEAFaVk1pnQ5IrVITew9bTMr5QZYlamHT7K6roGb/+MCDBLZaz/BuhxcYZKGPsIs9w== 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=xum6sl4RXJBnjieEkcPdUcMyphlxyLFFmXcRLm1HV+c=; b=JdHkzAC4EPmIbhlHdJHzABlaZ8wIzZ16zI3ede2aBHKnhf7ajVsj3oPsz8VpUbxm3EHcg/rONdyddLiPs1d2Qjq3PR0MZJTe8y6q84s/f71MKJWax3ExcJz20i0eagcHvgpQhPkBe3YpAkPxqZ3OyYLPo1H2U5+MWGJS0ISpGgpDBYpPR85LUQluYA9SQdxmn9JpstWIX9NuPJjU1rrRyGHf1dl892olTff+863amXv6tQq7tHPTOv6ZrQuOpLmmDbO+s7QbmJhmZzJcU/qkqUoiZ/wy70NIWEZ6WjrO1oan7eIYlJJ5QDtj/xZEOpQG6MK2e1fZvO8TvA3J3AsmZw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=dpdk.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xum6sl4RXJBnjieEkcPdUcMyphlxyLFFmXcRLm1HV+c=; b=QaYDfxM9msjnfsPlOmF+Ke+zcv2fSQJ5YR6IDA15o5vpaEmR8rsaXx9UpIKBBJxoS6SofqbPQuY7nFMhW7N0aVK1UBqoUVpQEXUV6QR5LzQB1jWfRlwH6xD8zOk6FDMu6rWuSCUl20gUOclkq3WdQHXC2mN0fdqbFNqqJUOk6bo7HqaFMoaOMcySjTq5hXTI9XQDezrRWSkT3Or7QhKwgYLSpbmZdGWu7Aggv1QiJQUggxxBjNrKAlh9Q516nWNLzeRpxJApSY6w/Sq3cYmNwpTrXbtKBoXdPO4ub7nRMuFCStHrIq6ESpqHQlsmP/4lXVUEIHR+gRywSKA0lJraSw== Received: from PH8PR07CA0016.namprd07.prod.outlook.com (2603:10b6:510:2cd::24) by BN9PR12MB5210.namprd12.prod.outlook.com (2603:10b6:408:11b::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.27; Tue, 8 Aug 2023 10:01:09 +0000 Received: from SN1PEPF0002529E.namprd05.prod.outlook.com (2603:10b6:510:2cd:cafe::43) by PH8PR07CA0016.outlook.office365.com (2603:10b6:510:2cd::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.27 via Frontend Transport; Tue, 8 Aug 2023 10:01:12 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by SN1PEPF0002529E.mail.protection.outlook.com (10.167.242.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.20 via Frontend Transport; Tue, 8 Aug 2023 10:01:12 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.5; Tue, 8 Aug 2023 03:00:56 -0700 Received: from nvidia.com (10.126.231.35) 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.37; Tue, 8 Aug 2023 03:00:51 -0700 From: Gregory Etelson To: CC: , , , "Ori Kam" , Aman Singh , Yuying Zhang , Matan Azrad , "Viacheslav Ovsiienko" , Suanming Mou , Thomas Monjalon , Ferruh Yigit , Andrew Rybchenko Subject: [PATCH] ethdev: remove init_color from METER_MARK action Date: Tue, 8 Aug 2023 13:00:36 +0300 Message-ID: <20230808100036.215477-1-getelson@nvidia.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-Originating-IP: [10.126.231.35] 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: SN1PEPF0002529E:EE_|BN9PR12MB5210:EE_ X-MS-Office365-Filtering-Correlation-Id: 9e08e6a0-80b8-4060-5f17-08db97f6659d 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: yiCppdNE91CA7HKHS5Io89TiYzFjV3rTV8fjG5kYJm7G7kvKd1GQOhDOXPpYGvbllPYStUvtonJJO44EYWAbeqGjEunRKShluRInSD9I+f/K2HBEIAwvQRMoH+lTvadFqfRdkYP2cugBrcoM1U4HkLyhCs4eU0EOskoxqCB7qaIvQ6hp7AOGZGnWkGOdbzgYRUqKzyNThoA/W28AEWjbnmEF3aLQW6JhFbOVwe66Og+Uynz56nhWz5meIDbCrJ8o70y6ByGKbp3NTLofghjrgoj8G8VM0v1MxXUJqXqkfBFfRs9t8eWrGiw7XWn6OhxzkvqceQcdFPgvHEyTFSnJm54WmI8WHUrBkdn9FxcH9W0rQKMYIJynW605C6vfdV0Gf85rEIyUc4fkfvqUTaWG5ijtMmxdjoX/MDgvjDfqN1CW+6ZZRr8zd+4UbjS3zw8Qrhb6hcLD6eswdvw33XmVJJOGEganKt+T+APFQX73T09Qo9cuXoG2OCTvziyrJJX3Bf3z8M67BkDrO7PexzC14LcsmF9wO8ADQsFKF0/naqA3znW91ReILKYqW6437WTuIzgtbz2afrN1XAaAdO+yGL8bdCFr71P78qtb0HD3h2EzPZqDWgHvN4EuoZLeX/lhnZzP0EWs2hzqfa9/SQLM6+tth7xD9KZ5urj6RoLibJyqyhUfJpvUjZ13fKjlY2h7/2WXdSGHnoVfLPXdeMV6j7NBuXibmNmdEsHNuXhC2slGj/dFzCjmV6B0z/xG14so X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230028)(4636009)(346002)(136003)(39860400002)(376002)(396003)(1800799003)(186006)(451199021)(82310400008)(40470700004)(46966006)(36840700001)(40480700001)(55016003)(1076003)(26005)(40460700003)(36756003)(54906003)(5660300002)(86362001)(2906002)(4326008)(8676002)(70206006)(316002)(6916009)(8936002)(41300700001)(6666004)(70586007)(7696005)(356005)(82740400003)(7636003)(478600001)(426003)(36860700001)(83380400001)(47076005)(2616005)(16526019)(336012)(6286002); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Aug 2023 10:01:12.4368 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9e08e6a0-80b8-4060-5f17-08db97f6659d X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SN1PEPF0002529E.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN9PR12MB5210 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 Indirect list API defines 2 types of action update: • Action mutable context is always shared between all flows that referenced indirect actions list handle. Action mutable context can be changed by explicit invocation of indirect handle update function. • Flow mutable context is private to a flow. Flow mutable context can be updated by indirect list handle flow rule configuration. `METER_MARK::init_color` is flow resource. Current flows implementation placed `init_color` in the `rte_flow_action_meter_mark` making it action level resource. The patch removes `init_color` from the `rte_flow_action_meter_mark` structure. API change: The patch removed: • struct rte_flow_action_meter_mark::init_color • struct rte_flow_update_meter_mark::init_color_valid Signed-off-by: Gregory Etelson Acked-by: Ori Kam --- app/test-pmd/cmdline_flow.c | 8 --- app/test-pmd/config.c | 1 - drivers/net/mlx5/mlx5_flow_hw.c | 97 ++++++++++++++------------------- lib/ethdev/rte_flow.h | 6 +- 4 files changed, 43 insertions(+), 69 deletions(-) diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index 94827bcc4a..54daede7cb 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -575,7 +575,6 @@ enum index { ACTION_METER_POLICY, ACTION_METER_POLICY_ID2PTR, ACTION_METER_COLOR_MODE, - ACTION_METER_INIT_COLOR, ACTION_METER_STATE, ACTION_OF_DEC_NW_TTL, ACTION_OF_POP_VLAN, @@ -2227,7 +2226,6 @@ static const enum index action_meter_mark[] = { ACTION_METER_PROFILE, ACTION_METER_POLICY, ACTION_METER_COLOR_MODE, - ACTION_METER_INIT_COLOR, ACTION_METER_STATE, ACTION_NEXT, ZERO, @@ -6175,12 +6173,6 @@ static const struct token token_list[] = { .args = ARGS(ARGS_ENTRY(struct rte_flow_action_meter_mark, color_mode)), .call = parse_vc_conf, }, - [ACTION_METER_INIT_COLOR] = { - .name = "mtr_init_color", - .help = "meter initial color", - .next = NEXT(action_meter_mark, NEXT_ENTRY(ITEM_METER_COLOR_NAME)), - .args = ARGS(ARGS_ENTRY(struct rte_flow_action_meter_mark, init_color)), - }, [ACTION_METER_STATE] = { .name = "mtr_state", .help = "meter state", diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index 11f3a22048..415da109dc 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -3179,7 +3179,6 @@ port_queue_action_handle_update(portid_t port_id, if (mtr_update.meter_mark.policy) mtr_update.policy_valid = 1; mtr_update.color_mode_valid = 1; - mtr_update.init_color_valid = 1; mtr_update.state_valid = 1; update = &mtr_update; break; diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c index 5395969eb0..8ddef811ee 100644 --- a/drivers/net/mlx5/mlx5_flow_hw.c +++ b/drivers/net/mlx5/mlx5_flow_hw.c @@ -1344,8 +1344,7 @@ flow_hw_meter_mark_alloc(struct rte_eth_dev *dev, uint32_t queue, aso_mtr->state = (queue == MLX5_HW_INV_QUEUE) ? ASO_METER_WAIT : ASO_METER_WAIT_ASYNC; aso_mtr->offset = mtr_id - 1; - aso_mtr->init_color = (meter_mark->color_mode) ? - meter_mark->init_color : RTE_COLOR_GREEN; + aso_mtr->init_color = fm->color_aware ? RTE_COLORS : RTE_COLOR_GREEN; /* Update ASO flow meter by wqe. */ if (mlx5_aso_meter_update_by_wqe(priv->sh, queue, aso_mtr, &priv->mtr_bulk, user_data, push)) { @@ -1380,9 +1379,6 @@ flow_hw_meter_mark_compile(struct rte_eth_dev *dev, /* Compile METER_MARK action */ acts[aso_mtr_pos].action = pool->action; acts[aso_mtr_pos].aso_meter.offset = aso_mtr->offset; - acts[aso_mtr_pos].aso_meter.init_color = - (enum mlx5dr_action_aso_meter_color) - rte_col_2_mlx5_col(aso_mtr->init_color); *index = aso_mtr->fm.meter_id; return 0; } @@ -2068,9 +2064,6 @@ flow_hw_shared_action_construct(struct rte_eth_dev *dev, uint32_t queue, return -1; rule_act->action = pool->action; rule_act->aso_meter.offset = aso_mtr->offset; - rule_act->aso_meter.init_color = - (enum mlx5dr_action_aso_meter_color) - rte_col_2_mlx5_col(aso_mtr->init_color); break; case MLX5_INDIRECT_ACTION_TYPE_QUOTA: flow_hw_construct_quota(priv, rule_act, idx); @@ -2483,9 +2476,6 @@ flow_hw_actions_construct(struct rte_eth_dev *dev, pool->action; rule_acts[act_data->action_dst].aso_meter.offset = aso_mtr->offset; - rule_acts[act_data->action_dst].aso_meter.init_color = - (enum mlx5dr_action_aso_meter_color) - rte_col_2_mlx5_col(aso_mtr->init_color); break; case RTE_FLOW_ACTION_TYPE_METER_MARK: /* @@ -8659,6 +8649,45 @@ flow_hw_action_handle_create(struct rte_eth_dev *dev, uint32_t queue, return handle; } +static int +mlx5_flow_update_meter_mark(struct rte_eth_dev *dev, uint32_t queue, + const struct rte_flow_update_meter_mark *upd_meter_mark, + uint32_t idx, bool push, + struct mlx5_hw_q_job *job, struct rte_flow_error *error) +{ + struct mlx5_priv *priv = dev->data->dev_private; + struct mlx5_aso_mtr_pool *pool = priv->hws_mpool; + const struct rte_flow_action_meter_mark *meter_mark = &upd_meter_mark->meter_mark; + struct mlx5_aso_mtr *aso_mtr = mlx5_ipool_get(pool->idx_pool, idx); + struct mlx5_flow_meter_info *fm; + + if (!aso_mtr) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_UNSPECIFIED, + NULL, "Invalid meter_mark update index"); + fm = &aso_mtr->fm; + if (upd_meter_mark->profile_valid) + fm->profile = (struct mlx5_flow_meter_profile *) + (meter_mark->profile); + if (upd_meter_mark->color_mode_valid) + fm->color_aware = meter_mark->color_mode; + if (upd_meter_mark->state_valid) + fm->is_enable = meter_mark->state; + /* Update ASO flow meter by wqe. */ + if (mlx5_aso_meter_update_by_wqe(priv->sh, queue, + aso_mtr, &priv->mtr_bulk, job, push)) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_UNSPECIFIED, + NULL, "Unable to update ASO meter WQE"); + /* Wait for ASO object completion. */ + if (queue == MLX5_HW_INV_QUEUE && + mlx5_aso_mtr_wait(priv->sh, MLX5_HW_INV_QUEUE, aso_mtr)) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_UNSPECIFIED, + NULL, "Unable to wait for ASO meter CQE"); + return 0; +} + /** * Update shared action. * @@ -8689,15 +8718,9 @@ flow_hw_action_handle_update(struct rte_eth_dev *dev, uint32_t queue, struct rte_flow_error *error) { struct mlx5_priv *priv = dev->data->dev_private; - struct mlx5_aso_mtr_pool *pool = priv->hws_mpool; const struct rte_flow_modify_conntrack *ct_conf = (const struct rte_flow_modify_conntrack *)update; - const struct rte_flow_update_meter_mark *upd_meter_mark = - (const struct rte_flow_update_meter_mark *)update; - const struct rte_flow_action_meter_mark *meter_mark; struct mlx5_hw_q_job *job = NULL; - struct mlx5_aso_mtr *aso_mtr; - struct mlx5_flow_meter_info *fm; uint32_t act_idx = (uint32_t)(uintptr_t)handle; uint32_t type = act_idx >> MLX5_INDIRECT_ACTION_TYPE_OFFSET; uint32_t idx = act_idx & ((1u << MLX5_INDIRECT_ACTION_TYPE_OFFSET) - 1); @@ -8724,44 +8747,8 @@ flow_hw_action_handle_update(struct rte_eth_dev *dev, uint32_t queue, break; case MLX5_INDIRECT_ACTION_TYPE_METER_MARK: aso = true; - meter_mark = &upd_meter_mark->meter_mark; - /* Find ASO object. */ - aso_mtr = mlx5_ipool_get(pool->idx_pool, idx); - if (!aso_mtr) { - ret = -EINVAL; - rte_flow_error_set(error, EINVAL, - RTE_FLOW_ERROR_TYPE_UNSPECIFIED, - NULL, "Invalid meter_mark update index"); - break; - } - fm = &aso_mtr->fm; - if (upd_meter_mark->profile_valid) - fm->profile = (struct mlx5_flow_meter_profile *) - (meter_mark->profile); - if (upd_meter_mark->color_mode_valid) - fm->color_aware = meter_mark->color_mode; - if (upd_meter_mark->init_color_valid) - aso_mtr->init_color = (meter_mark->color_mode) ? - meter_mark->init_color : RTE_COLOR_GREEN; - if (upd_meter_mark->state_valid) - fm->is_enable = meter_mark->state; - /* Update ASO flow meter by wqe. */ - if (mlx5_aso_meter_update_by_wqe(priv->sh, queue, - aso_mtr, &priv->mtr_bulk, job, push)) { - ret = -EINVAL; - rte_flow_error_set(error, EINVAL, - RTE_FLOW_ERROR_TYPE_UNSPECIFIED, - NULL, "Unable to update ASO meter WQE"); - break; - } - /* Wait for ASO object completion. */ - if (queue == MLX5_HW_INV_QUEUE && - mlx5_aso_mtr_wait(priv->sh, MLX5_HW_INV_QUEUE, aso_mtr)) { - ret = -EINVAL; - rte_flow_error_set(error, EINVAL, - RTE_FLOW_ERROR_TYPE_UNSPECIFIED, - NULL, "Unable to wait for ASO meter CQE"); - } + ret = mlx5_flow_update_meter_mark(dev, queue, update, idx, push, + job, error); break; case MLX5_INDIRECT_ACTION_TYPE_RSS: ret = flow_dv_action_update(dev, handle, update, error); diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h index 86ed98c562..b44e6077ad 100644 --- a/lib/ethdev/rte_flow.h +++ b/lib/ethdev/rte_flow.h @@ -4025,8 +4025,6 @@ struct rte_flow_action_meter_mark { struct rte_flow_meter_policy *policy; /** Metering mode: 0 - Color-Blind, 1 - Color-Aware. */ int color_mode; - /** Initial Color applied to packets in Color-Aware mode. */ - enum rte_color init_color; /** Metering state: 0 - Disabled, 1 - Enabled. */ int state; }; @@ -4045,12 +4043,10 @@ struct rte_flow_update_meter_mark { uint32_t policy_valid:1; /** The color mode will be updated. */ uint32_t color_mode_valid:1; - /** The initial color will be updated. */ - uint32_t init_color_valid:1; /** The meter state will be updated. */ uint32_t state_valid:1; /** Reserved bits for the future usage. */ - uint32_t reserved:27; + uint32_t reserved:28; }; /**