From patchwork Mon Aug 23 08:55:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Asaf Penso X-Patchwork-Id: 97217 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 B75E9A0C56; Mon, 23 Aug 2021 10:55:41 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D05824014D; Mon, 23 Aug 2021 10:55:40 +0200 (CEST) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2052.outbound.protection.outlook.com [40.107.220.52]) by mails.dpdk.org (Postfix) with ESMTP id 0C74240143 for ; Mon, 23 Aug 2021 10:55:39 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NjvoAjujKkvqFX59WA7iw7rQ4TqIZAxjoPuCPT9fr6lebTpd5cwkYObymjpNhZEbQzCjdWxIe75euw6Jum/eru0mmiOormvHRzBt549+ZwB72C8+v8QgPwENczTJocM6k4xgRjwxtkVtvQToJtB0HxwQjxFlDrh7/P0X7HY7jNQn9mff/cC6w4A588fnQNpmGzywaCd4rGLMSJMrBEXiiOOZ+U7ORoiIYUUD2Me/gndge1ij4+vis6bQ6oRkxkPB4mkTwl8Zg4qPL9UCrxrDWHGnLgVyOJYQjOTf+dkQ9P5yGdcpSZ488xRW+ueoXCH//WplEr9weuScRpHKcoIFJw== 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=AHJps43oAfpJWblfdsRO+GlDG4AYnohIOOrb+lTW82U=; b=YC93xk4HwwqPHAhJ9eJtoJG35mVl4uv/C561FkVUNwj3HjBoFZrtqSvnQV9FQoOgaNlZuFWj+w27GTeXKi1P2KQpfHgcJweieWvENjytRgd0LiWSWpoysVgzA/G1aQSTZABNiUuiaG/fvoxoehHP8DtQeDT40j9VU/aEvd6XKyxJLOGRTugVDIopecMuO32Vt7sIrRcCua3fvVF4HTg5l4SuqCLmBFJf0tbdyOe8z7SlAFM526NXjx8PaHsghz/12nJ554vfkXPRJgkRXlcKtXzeEgYwbOmBnm5itMnkz8aP04Ok+mFZKHkIOjWgAMM1OWgCCD51ww/eRKXnDNN77w== 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=quarantine 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=AHJps43oAfpJWblfdsRO+GlDG4AYnohIOOrb+lTW82U=; b=UIPU58YXW0FuELUR9Ep5sXFRWt5y7U071LTN6vWT0zAFkEsf+lDpizfbb18ic0dTKh6ENXFZGy3tQAM89BnhPz/X7CoSjHLV9DAoJRsIl9ewoqS7vlSc6yVcH/exP5PqrlPZODcXANa3cjN7ho80lyC0FCfFPh5WO2urR0LK49ZXAfXIw5+9sK/IcPgKgjiUoxR4OTbKsZFEmxmrcS/y7xx18G6i4/uVX1whLCQqScfjMuVmv/u6zGw6+lg76MvS4OpMh0YmiSLvvWiUWl3x4vkMpcP+vNcD4+s2LPb+yTwCwDoxz20WHiABTqoNcztTdiYvqGDfvdrNZaL9Hc0Pxg== Received: from MWHPR1701CA0013.namprd17.prod.outlook.com (2603:10b6:301:14::23) by MN2PR12MB3950.namprd12.prod.outlook.com (2603:10b6:208:16d::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.19; Mon, 23 Aug 2021 08:55:35 +0000 Received: from CO1NAM11FT050.eop-nam11.prod.protection.outlook.com (2603:10b6:301:14:cafe::ca) by MWHPR1701CA0013.outlook.office365.com (2603:10b6:301:14::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.19 via Frontend Transport; Mon, 23 Aug 2021 08:55:35 +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 CO1NAM11FT050.mail.protection.outlook.com (10.13.174.79) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4436.19 via Frontend Transport; Mon, 23 Aug 2021 08:55:35 +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.2; Mon, 23 Aug 2021 08:55:33 +0000 From: Asaf Penso To: CC: , , , Date: Mon, 23 Aug 2021 11:55:11 +0300 Message-ID: <20210823085511.3079434-1-asafp@nvidia.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-Originating-IP: [172.20.187.5] X-ClientProxiedBy: HQMAIL107.nvidia.com (172.20.187.13) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2a6b50ed-0c56-4c38-e501-08d96613c582 X-MS-TrafficTypeDiagnostic: MN2PR12MB3950: X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:949; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: tpggCkfsjFuC4sXAYOYq79CBfnM6vh8LpBxCZ+wnh4GwzzBJdT88pt53ReFYqcWTRphfL0+rp5bFWizduADecQjYMNdQQScCrBoDLGD8hcfY9Dpbtlh4EVBjADZlp3gIOhgLGxrjhbhM8L2QYASfSW1ezyhLlaPaV0DTsCArx4A8adipfuClik0J1LP8krCZXwnYSBN5dBzWsQOA5UgfKiEnZ4aLmD2EF2m+swz2nJ+K+TmXV0w9F7894znQuGRirw4hf9SApAEMXRHf0cHPDUtHYaDQTt+pyWy0S+1KRnGvy+acHjRT0VN3o/7cUps35R2Zefg4s4gictSV2OCeeJtWuA1ZX4NstDIHV6pZccCdxvC6krxatWmUaEWsQxM4oewGlyKPECGYrACre0euIUZvAYs9HwYAGaAdgiJmviz+EgTyRwOgnFcVH96z0odgi/dG1EYe1j5pjkPWfp9VVr0e9tbVnDC6/qA3gChLBeadvZ3Vc6ZgJa3Idl5GgkCeQPOyWzFK8LmoMEdMJqkmKxHCBUCYKLvelNUlxq/9wEgfdpWfw/YwWJnIKyse5pkTI/uEaET9V9ev6zGoUHC22DfVGS+OciFceMYtef4ss1+mnjtxLbizm7t1S+KgUE29TMYg5yaFXceg+jpsrcTDjRPHb1LiwsX9Gq1LB8mh8OJFJryM5SrixVELlpJSamn7FA/I5QxQg17iptpn/bQP4A== 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)(136003)(346002)(376002)(46966006)(36840700001)(186003)(16526019)(2616005)(5660300002)(107886003)(426003)(6666004)(6286002)(82310400003)(4326008)(36906005)(336012)(55016002)(70586007)(70206006)(36756003)(83380400001)(6916009)(1076003)(478600001)(356005)(7636003)(47076005)(82740400003)(36860700001)(7696005)(2906002)(8676002)(26005)(8936002)(54906003)(316002)(86362001); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Aug 2021 08:55:35.2578 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2a6b50ed-0c56-4c38-e501-08d96613c582 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: CO1NAM11FT050.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB3950 Subject: [dpdk-dev] [PATCH 1/1] net/mlx5: add stub functions to null drv ops 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" There are several functions implementation that queries the drv type to understand which fops function to use. In case the type is DV, the fucntion gets the concrete DV function and calls it. In case it’s not, the function returns an error. The current implementation is not flexible enough and will not support future concrete functions in a good way. This patch adds more stub functions that include error handling and are assigned to the null drv ops struct. This allows the functions to always call the virtual function without basing the decision on a specific drv type. Signed-off-by: Asaf Penso --- drivers/net/mlx5/mlx5_flow.c | 87 +++++++++++++++++------------- drivers/net/mlx5/mlx5_flow.h | 12 +++++ drivers/net/mlx5/mlx5_flow_verbs.c | 4 ++ 3 files changed, 66 insertions(+), 37 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c index e63a297e2a..894c16ba20 100644 --- a/drivers/net/mlx5/mlx5_flow.c +++ b/drivers/net/mlx5/mlx5_flow.c @@ -3231,6 +3231,45 @@ flow_null_sync_domain(struct rte_eth_dev *dev __rte_unused, return 0; } +int +flow_null_get_aged_flows(struct rte_eth_dev *dev, + void **context __rte_unused, + uint32_t nb_contexts __rte_unused, + struct rte_flow_error *error __rte_unused) +{ + DRV_LOG(ERR, "port %u get aged flows is not supported.", + dev->data->port_id); + return -ENOTSUP; +} + +uint32_t +flow_null_counter_allocate(struct rte_eth_dev *dev) +{ + DRV_LOG(ERR, "port %u counter allocate is not supported.", + dev->data->port_id); + return 0; +} + +void +flow_null_counter_free(struct rte_eth_dev *dev, + uint32_t counter __rte_unused) +{ + DRV_LOG(ERR, "port %u counter free is not supported.", + dev->data->port_id); +} + +int +flow_null_counter_query(struct rte_eth_dev *dev, + uint32_t counter __rte_unused, + bool clear __rte_unused, + uint64_t *pkts __rte_unused, + uint64_t *bytes __rte_unused) +{ + DRV_LOG(ERR, "port %u counter query is not supported.", + dev->data->port_id); + return -ENOTSUP; +} + /* Void driver to protect from null pointer reference. */ const struct mlx5_flow_driver_ops mlx5_flow_null_drv_ops = { .validate = flow_null_validate, @@ -3241,6 +3280,10 @@ const struct mlx5_flow_driver_ops mlx5_flow_null_drv_ops = { .destroy = flow_null_destroy, .query = flow_null_query, .sync_domain = flow_null_sync_domain, + .get_aged_flows = flow_null_get_aged_flows, + .counter_alloc = flow_null_counter_allocate, + .counter_free = flow_null_counter_free, + .counter_query = flow_null_counter_query, }; /** @@ -7497,17 +7540,10 @@ mlx5_flow_mtr_free(struct rte_eth_dev *dev, uint32_t mtr_idx) uint32_t mlx5_counter_alloc(struct rte_eth_dev *dev) { - const struct mlx5_flow_driver_ops *fops; struct rte_flow_attr attr = { .transfer = 0 }; - if (flow_get_drv_type(dev, &attr) == MLX5_FLOW_TYPE_DV) { - fops = flow_get_drv_ops(MLX5_FLOW_TYPE_DV); - return fops->counter_alloc(dev); - } - DRV_LOG(ERR, - "port %u counter allocate is not supported.", - dev->data->port_id); - return 0; + return flow_get_drv_ops(flow_get_drv_type(dev, &attr))->counter_alloc + (dev); } /** @@ -7521,17 +7557,9 @@ mlx5_counter_alloc(struct rte_eth_dev *dev) void mlx5_counter_free(struct rte_eth_dev *dev, uint32_t cnt) { - const struct mlx5_flow_driver_ops *fops; struct rte_flow_attr attr = { .transfer = 0 }; - if (flow_get_drv_type(dev, &attr) == MLX5_FLOW_TYPE_DV) { - fops = flow_get_drv_ops(MLX5_FLOW_TYPE_DV); - fops->counter_free(dev, cnt); - return; - } - DRV_LOG(ERR, - "port %u counter free is not supported.", - dev->data->port_id); + flow_get_drv_ops(flow_get_drv_type(dev, &attr))->counter_free(dev, cnt); } /** @@ -7555,17 +7583,10 @@ int mlx5_counter_query(struct rte_eth_dev *dev, uint32_t cnt, bool clear, uint64_t *pkts, uint64_t *bytes) { - const struct mlx5_flow_driver_ops *fops; struct rte_flow_attr attr = { .transfer = 0 }; - if (flow_get_drv_type(dev, &attr) == MLX5_FLOW_TYPE_DV) { - fops = flow_get_drv_ops(MLX5_FLOW_TYPE_DV); - return fops->counter_query(dev, cnt, clear, pkts, bytes); - } - DRV_LOG(ERR, - "port %u counter query is not supported.", - dev->data->port_id); - return -ENOTSUP; + return flow_get_drv_ops(flow_get_drv_type(dev, &attr))->counter_query + (dev, cnt, clear, pkts, bytes); } /** @@ -8279,18 +8300,10 @@ int mlx5_flow_get_aged_flows(struct rte_eth_dev *dev, void **contexts, uint32_t nb_contexts, struct rte_flow_error *error) { - const struct mlx5_flow_driver_ops *fops; struct rte_flow_attr attr = { .transfer = 0 }; - if (flow_get_drv_type(dev, &attr) == MLX5_FLOW_TYPE_DV) { - fops = flow_get_drv_ops(MLX5_FLOW_TYPE_DV); - return fops->get_aged_flows(dev, contexts, nb_contexts, - error); - } - DRV_LOG(ERR, - "port %u get aged flows is not supported.", - dev->data->port_id); - return -ENOTSUP; + return flow_get_drv_ops(flow_get_drv_type(dev, &attr))->get_aged_flows + (dev, contexts, nb_contexts, error); } /* Wrapper for driver action_validate op callback */ diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h index 76ad53f2a1..bb23a5efce 100644 --- a/drivers/net/mlx5/mlx5_flow.h +++ b/drivers/net/mlx5/mlx5_flow.h @@ -1713,5 +1713,17 @@ mlx5_get_tof(const struct rte_flow_item *items, const struct rte_flow_action *actions, enum mlx5_tof_rule_type *rule_type); +int flow_null_get_aged_flows(struct rte_eth_dev *dev, + void **context, + uint32_t nb_contexts, + struct rte_flow_error *error); +uint32_t flow_null_counter_allocate(struct rte_eth_dev *dev); +void flow_null_counter_free(struct rte_eth_dev *dev, + uint32_t counter); +int flow_null_counter_query(struct rte_eth_dev *dev, + uint32_t counter, + bool clear, + uint64_t *pkts, + uint64_t *bytes); #endif /* RTE_PMD_MLX5_FLOW_H_ */ diff --git a/drivers/net/mlx5/mlx5_flow_verbs.c b/drivers/net/mlx5/mlx5_flow_verbs.c index b93fd4d2c9..b90d683916 100644 --- a/drivers/net/mlx5/mlx5_flow_verbs.c +++ b/drivers/net/mlx5/mlx5_flow_verbs.c @@ -2105,4 +2105,8 @@ const struct mlx5_flow_driver_ops mlx5_flow_verbs_drv_ops = { .destroy = flow_verbs_destroy, .query = flow_verbs_query, .sync_domain = flow_verbs_sync_domain, + .get_aged_flows = flow_null_get_aged_flows, + .counter_alloc = flow_null_counter_allocate, + .counter_free = flow_null_counter_free, + .counter_query = flow_null_counter_query, };