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 35E31A054A; Fri, 23 Sep 2022 16:46:28 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6C82D42C06; Fri, 23 Sep 2022 16:44:38 +0200 (CEST) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2057.outbound.protection.outlook.com [40.107.220.57]) by mails.dpdk.org (Postfix) with ESMTP id 9512E42BE6 for ; Fri, 23 Sep 2022 16:44:37 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IMhC6WN+w+8/emhFqNtXIyB3yNzYYyvnXs61YGGLGuEk48hpCPwLJxsZ2XktfAhuxa/CDhRaiECFWod+AeOrh2KsfjHIKkOlmwyOgWLdu6YhYeOfwyQqjHtfvzopQFY/0Npq0GpmcPrQJ2vOat6Zr2S8QO/jXQpTWI/6WFHSNnKGWOdUaH9OznEJyziBZE5eKsbjN6q2nvWQL/BLV9KUL07o7FbiKV7bdTZom7eD63493kcARc/2AVqVbCuWjwKI+35DDA3m+4PP+PdiKGJUBBKRSnFE9BJ1dq7BI3Zm+kPD95d5sAJRgwXDh9wQU7ALlWhP/Mf29fWKEktOFzL1pA== 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=aK11pt2lPsEotcROCqFZSpNgzKWV/SL4D+nPfTPDOXs=; b=XiS2CnS+XDax6fE1Lt3iC6BTaTma+f4EYjXxMBn21l0e362pcqFwKe7wOgdIhFaOcgUz65kjLm4Nrdfm182TNu8UniQzyNPmkv/jPGGT/XNT3QRnMcUzYUBp4L9H7EIDCWeTYHI6IZIkALr04iRKRlWoj4atQ3DjDh/h3GHB1fQID47JAlR2psRBfBezotG7PrdaTG9l7dJeh5wopmKlv//VmdD8ECvuFUq1rNf0TATgp6WPV1WHsoROKa1qiccTYDrJ22eQCIP0KriV/r7Tk3gRm+Xgzs8m1+ZugKtu5Kqs/vtfl9T7Kc5SVc9sL1sSZLH7wPbGUw1BvzaO0AHlTg== 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=aK11pt2lPsEotcROCqFZSpNgzKWV/SL4D+nPfTPDOXs=; b=bI9sygqPBh3t8g7MXgYXHBA9iutL4JJdJ1QtVFwx1kBveXbpLijKNtNMrjH7bC97zh2urL+h/+itmbP7mhqgL4PJwNzua8M9xcI9Lkcsv5s865ROzCvQXW1iUZqCJY3ysiGe5YdX4dQDEa8epJnfWrUuO1Yp/GTfDf3ddeavl1vKxP5wWfy8vvPjMDZQhIh462uI/vaJPC3DaZNPiewa9SF4wrnaBuJePcJRAzMceIeTV4juHh/yk+IRmeX/GWu4qmvsdvs2lYkoYN/wasXTQxwf1Z0Z1ytozwJdeLvQE0kEFfXWkqOVb9jn0aS1G/wcWEi74sPqWMlwJN29mC23Cw== Received: from MW4PR03CA0238.namprd03.prod.outlook.com (2603:10b6:303:b9::33) by DM6PR12MB5021.namprd12.prod.outlook.com (2603:10b6:5:208::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.20; Fri, 23 Sep 2022 14:44:35 +0000 Received: from CO1NAM11FT026.eop-nam11.prod.protection.outlook.com (2603:10b6:303:b9:cafe::54) by MW4PR03CA0238.outlook.office365.com (2603:10b6:303:b9::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.20 via Frontend Transport; Fri, 23 Sep 2022 14:44:35 +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 CO1NAM11FT026.mail.protection.outlook.com (10.13.175.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.14 via Frontend Transport; Fri, 23 Sep 2022 14:44:35 +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.26; Fri, 23 Sep 2022 07:44:18 -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.29; Fri, 23 Sep 2022 07:44:16 -0700 From: Suanming Mou To: Matan Azrad , Viacheslav Ovsiienko CC: , Xiaoyu Min Subject: [PATCH 16/27] net/mlx5: support indirect count action for HW steering Date: Fri, 23 Sep 2022 17:43:23 +0300 Message-ID: <20220923144334.27736-17-suanmingm@nvidia.com> X-Mailer: git-send-email 2.18.1 In-Reply-To: <20220923144334.27736-1-suanmingm@nvidia.com> References: <20220923144334.27736-1-suanmingm@nvidia.com> MIME-Version: 1.0 Content-Type: text/plain 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: CO1NAM11FT026:EE_|DM6PR12MB5021:EE_ X-MS-Office365-Filtering-Correlation-Id: c56c8b57-3873-42c3-2a6c-08da9d72222e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vNDHpA+B0ys1vZD5T+Ghd+Oe5W2JHYYuJUscIwbT763zCaTLa3n4Zt8gNhYALFzjXrCdY+dNMnAZwYuMuqHpJyFWm/rH3NYhJxcpvalPh3zyU5ZCOu2IJsMeneCqYDQ8VJAOks2iZ0N2RxAEUXPhuyvrCM1Xqt3rVYuKEEf2AbbZnmqGLfb3aX9YRs3qGzxwV9QN7mpuW3EFmmzFrRtiXg4Tv9RbK9ZFSX1aSzuAfTF8e/lmWdTFSCYyAEnadnexQSlc90rXrkFMRe2Hrj5+m4X0rKg4CI5xB8FJeFz0izc5zMhjcMGwFFl9RZKqBVDgpIhJWUihe64pD+a2bD54XO2xF/dVZ2Ztk3E1wkNEOpKbVIhvvtP9EJQmXDXp0NKOtpMBedSCv0v88YP/Ls5ViH7MzyFq/fN72vp2tDpLo5ZfTKEZ8RyajX86V3dbe6TfVfV3ZhegkHfRUBZPndyH5LT3fTL2lPTOwPrPg67T4ycBq7VCa8pLi1stEJcWn3CpiSR0IBs85eiBF7foh7Dp+qy5xUfRQZx9wqUNZRMAXskFAOarXSCGIX+/sC/C/6NevDzli1LSOMNbo5TYgeP7fvtcaXyHNiOgNl15+HCORm2UORlNdsu383JY3i4BstsYLCQ38sDkLUP5wWIiIZXTXVuVIONgFfHIkeSnTuHvzgyXvHkjl0nfTrxWeDeGWqDPe49xDgasgpErhn0sjiYo2RTefOga+4X/QhEBK+FGA2S4Fp57fCH3wdFIctGqvL/w7h0uZiBdrtpOw+irm/GkDw== 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:(13230022)(4636009)(136003)(346002)(396003)(376002)(39860400002)(451199015)(36840700001)(40470700004)(46966006)(86362001)(36756003)(40480700001)(55016003)(40460700003)(356005)(7636003)(70586007)(70206006)(4326008)(6636002)(8676002)(54906003)(110136005)(316002)(36860700001)(82310400005)(82740400003)(7696005)(107886003)(478600001)(5660300002)(6666004)(426003)(2616005)(26005)(2906002)(41300700001)(8936002)(16526019)(1076003)(186003)(336012)(47076005)(83380400001)(6286002); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Sep 2022 14:44:35.0067 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c56c8b57-3873-42c3-2a6c-08da9d72222e 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: CO1NAM11FT026.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB5021 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 From: Xiaoyu Min The indirect counter action is taked as _shared_ counter between the flows use it. This _shared_ counter is gotten from counter pool at time the indirect action is created. And be put back to counter pool when indirect action is destroyed. Signed-off-by: Xiaoyu Min --- drivers/net/mlx5/mlx5_flow.h | 3 + drivers/net/mlx5/mlx5_flow_hw.c | 104 +++++++++++++++++++++++++++++++- 2 files changed, 104 insertions(+), 3 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h index c982cb953a..a39dacc60a 100644 --- a/drivers/net/mlx5/mlx5_flow.h +++ b/drivers/net/mlx5/mlx5_flow.h @@ -1148,6 +1148,9 @@ struct mlx5_action_construct_data { uint32_t level; /* RSS level. */ uint32_t idx; /* Shared action index. */ } shared_rss; + struct { + uint32_t id; + } shared_counter; }; }; diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c index de82396a04..92b61b63d1 100644 --- a/drivers/net/mlx5/mlx5_flow_hw.c +++ b/drivers/net/mlx5/mlx5_flow_hw.c @@ -536,6 +536,44 @@ __flow_hw_act_data_shared_rss_append(struct mlx5_priv *priv, return 0; } +/** + * Append shared counter action to the dynamic action list. + * + * @param[in] priv + * Pointer to the port private data structure. + * @param[in] acts + * Pointer to the template HW steering DR actions. + * @param[in] type + * Action type. + * @param[in] action_src + * Offset of source rte flow action. + * @param[in] action_dst + * Offset of destination DR action. + * @param[in] cnt_id + * Shared counter id. + * + * @return + * 0 on success, negative value otherwise and rte_errno is set. + */ +static __rte_always_inline int +__flow_hw_act_data_shared_cnt_append(struct mlx5_priv *priv, + struct mlx5_hw_actions *acts, + enum rte_flow_action_type type, + uint16_t action_src, + uint16_t action_dst, + cnt_id_t cnt_id) +{ struct mlx5_action_construct_data *act_data; + + act_data = __flow_hw_act_data_alloc(priv, type, action_src, action_dst); + if (!act_data) + return -1; + act_data->type = type; + act_data->shared_counter.id = cnt_id; + LIST_INSERT_HEAD(&acts->act_list, act_data, next); + return 0; +} + + /** * Translate shared indirect action. * @@ -577,6 +615,13 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev, action_src, action_dst, idx, shared_rss)) return -1; break; + case MLX5_INDIRECT_ACTION_TYPE_COUNT: + if (__flow_hw_act_data_shared_cnt_append(priv, acts, + (enum rte_flow_action_type) + MLX5_RTE_FLOW_ACTION_TYPE_COUNT, + action_src, action_dst, act_idx)) + return -1; + break; default: DRV_LOG(WARNING, "Unsupported shared action type:%d", type); break; @@ -1454,6 +1499,13 @@ flow_hw_shared_action_construct(struct rte_eth_dev *dev, (dev, &act_data, item_flags, rule_act)) return -1; break; + case MLX5_INDIRECT_ACTION_TYPE_COUNT: + if (mlx5_hws_cnt_pool_get_action_offset(priv->hws_cpool, + act_idx, + &rule_act->action, + &rule_act->counter.offset)) + return -1; + break; default: DRV_LOG(WARNING, "Unsupported shared action type:%d", type); break; @@ -1761,6 +1813,17 @@ flow_hw_actions_construct(struct rte_eth_dev *dev, return ret; job->flow->cnt_id = cnt_id; break; + case MLX5_RTE_FLOW_ACTION_TYPE_COUNT: + ret = mlx5_hws_cnt_pool_get_action_offset + (priv->hws_cpool, + act_data->shared_counter.id, + &rule_acts[act_data->action_dst].action, + &rule_acts[act_data->action_dst].counter.offset + ); + if (ret != 0) + return ret; + job->flow->cnt_id = act_data->shared_counter.id; + break; default: break; } @@ -4860,10 +4923,28 @@ flow_hw_action_handle_create(struct rte_eth_dev *dev, uint32_t queue, void *user_data, struct rte_flow_error *error) { + struct rte_flow_action_handle *handle = NULL; + struct mlx5_priv *priv = dev->data->dev_private; + cnt_id_t cnt_id; + RTE_SET_USED(queue); RTE_SET_USED(attr); RTE_SET_USED(user_data); - return flow_dv_action_create(dev, conf, action, error); + switch (action->type) { + case RTE_FLOW_ACTION_TYPE_COUNT: + if (mlx5_hws_cnt_shared_get(priv->hws_cpool, &cnt_id)) + rte_flow_error_set(error, ENODEV, + RTE_FLOW_ERROR_TYPE_ACTION, + NULL, + "counter are not configured!"); + else + handle = (struct rte_flow_action_handle *) + (uintptr_t)cnt_id; + break; + default: + handle = flow_dv_action_create(dev, conf, action, error); + } + return handle; } /** @@ -4927,10 +5008,19 @@ flow_hw_action_handle_destroy(struct rte_eth_dev *dev, uint32_t queue, void *user_data, struct rte_flow_error *error) { + uint32_t act_idx = (uint32_t)(uintptr_t)handle; + uint32_t type = act_idx >> MLX5_INDIRECT_ACTION_TYPE_OFFSET; + struct mlx5_priv *priv = dev->data->dev_private; + RTE_SET_USED(queue); RTE_SET_USED(attr); RTE_SET_USED(user_data); - return flow_dv_action_destroy(dev, handle, error); + switch (type) { + case MLX5_INDIRECT_ACTION_TYPE_COUNT: + return mlx5_hws_cnt_shared_put(priv->hws_cpool, &act_idx); + default: + return flow_dv_action_destroy(dev, handle, error); + } } static int @@ -5075,7 +5165,15 @@ flow_hw_action_query(struct rte_eth_dev *dev, const struct rte_flow_action_handle *handle, void *data, struct rte_flow_error *error) { - return flow_dv_action_query(dev, handle, data, error); + uint32_t act_idx = (uint32_t)(uintptr_t)handle; + uint32_t type = act_idx >> MLX5_INDIRECT_ACTION_TYPE_OFFSET; + + switch (type) { + case MLX5_INDIRECT_ACTION_TYPE_COUNT: + return flow_hw_query_counter(dev, act_idx, data, error); + default: + return flow_dv_action_query(dev, handle, data, error); + } } const struct mlx5_flow_driver_ops mlx5_flow_hw_drv_ops = { -- 2.25.1