From patchwork Sun Dec 3 11:25:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 134748 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 EA3D84365F; Sun, 3 Dec 2023 12:26:29 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E0081402E0; Sun, 3 Dec 2023 12:26:17 +0100 (CET) Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on2074.outbound.protection.outlook.com [40.107.96.74]) by mails.dpdk.org (Postfix) with ESMTP id 37D1B402BB; Sun, 3 Dec 2023 12:26:15 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ax4y0ycEJL+9AZKpub87GyRihK+eGWe8pCQmnnnUQ9M2Yfc9hU+C7BypQKOzytolJH5/9ae6PW1tR5/8rac6Mn096wxWcGfA0beBCkfuzPUHapgPLYzWh0G/Uhk5A53Gkj8texu2VMYO50UtEruPjtgYstLBogdfgQp7tFqcDol95Q5g31tbqi24pNuzaWeNZ8qD2SVhZmYSsZU+HQLKGJS0zBKQSi/6ZzQsTARXgMV30noWTC7xsXllg5hlpq4s0t6VPjWa4QsjSxYEwCugxkW/bO0vK4mDl4vKuRUnJugBhYnDENjCKo0RgbNLp8SMO6n4cMhMP1szZZTJZFZvmA== 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=s7Yc7yS2OBcxKzaxvyS9PM+zn2fpVRP1CbdSR3MORZY=; b=EeO6WynQtSkaftOmP7SB2SJRRy1KOK0T8kTO6Ig2UruFeb17qB2AGa/uvi2QIwXmYTYwFUdHm1jQH77z0f7bPVFeDfOzqLijDVATYSn7oST8CzMs0XoRjY0SJ9HMHM4s++jCtvMBW8zBS0fEoi7kPvTc8bt29Dah2DLKMp8lVrHOvgbqgzy1y37woY3GHMqYhzaup6b1XbFaB632+/sSd9+7yqQKHlsbg0utJ808yHje4ohhDj4CIEk+wz90McRNkmzVqCEE/ICo+PTBqv16vYX/ipGX4J958VbXG8SKUwYkXtH1ibRwd5vu3w3uhul2FVhLibn85ruW/RdcnmQ0ug== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) 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 (0) 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=s7Yc7yS2OBcxKzaxvyS9PM+zn2fpVRP1CbdSR3MORZY=; b=c0iEuC/g2Xhs8Xgw/nar1vZdWSmzJ8Vl41FMBuCAy6aek0pyg/QbrfPMDlgg0vNzBFNg1Erbz+OkJz3qju3/CKf3i52FCVjbbqvN5L6wqn/mcI4iKFYrYainXVJnsZ6CwuEpgYCusBfThABmCyrNFjIAcsh7lH5/4wNuwQLPVQ+cElxsoxqjFwD6A3AF5gYKs6+otxvxpHY64hmg6kGZiGkMiOG2j5LWMy2E6EQG00P1309Tp2vsep0R5U9HCT7wQ7liyY4GB44acEzzjZ+6b9L84KmFj9ialGv3Mb7ukqaD0/fSAUFcEVy2JRhVDzpVws731WokIvpd1qWNjpPe0Q== Received: from MW4PR04CA0206.namprd04.prod.outlook.com (2603:10b6:303:86::31) by CH3PR12MB8878.namprd12.prod.outlook.com (2603:10b6:610:17e::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32; Sun, 3 Dec 2023 11:26:12 +0000 Received: from CO1PEPF000042AB.namprd03.prod.outlook.com (2603:10b6:303:86:cafe::65) by MW4PR04CA0206.outlook.office365.com (2603:10b6:303:86::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.30 via Frontend Transport; Sun, 3 Dec 2023 11:26:12 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CO1PEPF000042AB.mail.protection.outlook.com (10.167.243.40) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.20 via Frontend Transport; Sun, 3 Dec 2023 11:26:11 +0000 Received: from rnnvmail204.nvidia.com (10.129.68.6) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:25:52 -0800 Received: from rnnvmail205.nvidia.com (10.129.68.10) by rnnvmail204.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:25:52 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41 via Frontend Transport; Sun, 3 Dec 2023 03:25:50 -0800 From: Michael Baum To: CC: Matan Azrad , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou , , Subject: [PATCH v1 01/23] common/mlx5: fix duplicate read of general capabilities Date: Sun, 3 Dec 2023 13:25:21 +0200 Message-ID: <20231203112543.844014-2-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231203112543.844014-1-michaelba@nvidia.com> References: <20231203112543.844014-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000042AB:EE_|CH3PR12MB8878:EE_ X-MS-Office365-Filtering-Correlation-Id: 95ca11d7-d157-4448-5deb-08dbf3f2a773 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4/qJXYiGMnghKUCLNM40T98QO6ei+4q57jZNcGgI04T/VS0w8c9Ew5NwEwx8QaszTwfT/Z5rgS+/L/Q1y1Y8pOztW1PKEio0PJ1q3SITF+H+2ZeeOiR5oy0lvJW6T7NRagFRZQhozwtz7XE/wxgf+LccdTaugKb5lFDqTfN2Bcu0CPJI/qC9vap+H6y1vO9Is7ELg5lf4/unApkYOsW9Qeo++LjrBAXFLEdKRWvWqY9ujOmBMvS38chcGGONNhbriYjxvy9IaNHvwE3c3n0JYIyg3Y+JppGKFJCG4V3ISjZfdhjjiH8wK+wTeD6TBxb/IYiU2yXM2MEahE9BoizxxPGQ+2QXPdWtpHVX0cpYNgPKkJi2KFKUeBPOjoET1v1K0pLbY6tGjmQydRi+SEheIde3OeMNrk/AgpESSqvruIT4y1M8eFFkNXRfT/ygHtfgdKHx9QUMH1Cwt2Om3C/ZLF5bb55wWkJle+XSiXTj+x4lkfj6Vk7zJW4fUL3nDLeGoKKJxCPSH+dLjjw/ZOEVcOAYXrhtg2/8o2yNff920SfgG5SkM6nAzGIaczJnqe7Gd8X6Kq4RCKgBiUJq3+6A5woauvrXIpqRku4UvQw+wHZb0LARgwMjOY1Xblu5X62YNQT1l5GLM1acawkd2WG0Ox6XX9g6CySzBCxgBmTABUKaPTHmUWqP0DWrOFpPILh+UVBTmy4TR1TnEyoXgKyfLHL6RduGxlmeKqam9p0yJAw1Q485KwzmXbpjRXYuT3we X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230031)(4636009)(136003)(346002)(39860400002)(396003)(376002)(230922051799003)(186009)(64100799003)(1800799012)(451199024)(82310400011)(46966006)(40470700004)(36840700001)(6286002)(82740400003)(26005)(7636003)(55016003)(47076005)(356005)(336012)(426003)(36756003)(70586007)(70206006)(54906003)(6916009)(316002)(40480700001)(83380400001)(36860700001)(1076003)(41300700001)(2616005)(2906002)(478600001)(6666004)(7696005)(8676002)(8936002)(4326008)(5660300002)(86362001)(450100002)(40460700003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2023 11:26:11.8641 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 95ca11d7-d157-4448-5deb-08dbf3f2a773 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.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000042AB.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB8878 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 General object types support is indicated in bitmap general_obj_types, which is part of HCA capabilities list. This bitmap was read multiple times, and each time a different bit was extracted. Previous patch optimized the code, reading the bitmap once into a local variable, and then extracting the required bits. However, it missed few of them which still read the bitmap for themselves. In addition, for other readings, it moved them to use local variable without removing the old reading, and they are read twice. This patch moves them all to use the local variable and removes all duplications. Fixes: 876d4702b141 ("common/mlx5: optimize read of general capabilities") Cc: dekelp@nvidia.com Cc: stable@dpdk.org Signed-off-by: Michael Baum --- drivers/common/mlx5/mlx5_devx_cmds.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/drivers/common/mlx5/mlx5_devx_cmds.c b/drivers/common/mlx5/mlx5_devx_cmds.c index 4d8818924a..41f6e0a727 100644 --- a/drivers/common/mlx5/mlx5_devx_cmds.c +++ b/drivers/common/mlx5/mlx5_devx_cmds.c @@ -966,18 +966,6 @@ mlx5_devx_cmd_query_hca_attr(void *ctx, attr->max_geneve_tlv_option_data_len = MLX5_GET(cmd_hca_cap, hcattr, max_geneve_tlv_option_data_len); attr->qos.sup = MLX5_GET(cmd_hca_cap, hcattr, qos); - attr->qos.flow_meter_aso_sup = !!(MLX5_GET64(cmd_hca_cap, hcattr, - general_obj_types) & - MLX5_GENERAL_OBJ_TYPES_CAP_FLOW_METER_ASO); - attr->vdpa.valid = !!(MLX5_GET64(cmd_hca_cap, hcattr, - general_obj_types) & - MLX5_GENERAL_OBJ_TYPES_CAP_VIRTQ_NET_Q); - attr->vdpa.queue_counters_valid = !!(MLX5_GET64(cmd_hca_cap, hcattr, - general_obj_types) & - MLX5_GENERAL_OBJ_TYPES_CAP_VIRTIO_Q_COUNTERS); - attr->parse_graph_flex_node = !!(MLX5_GET64(cmd_hca_cap, hcattr, - general_obj_types) & - MLX5_GENERAL_OBJ_TYPES_CAP_PARSE_GRAPH_FLEX_NODE); attr->wqe_index_ignore = MLX5_GET(cmd_hca_cap, hcattr, wqe_index_ignore_cap); attr->cross_channel = MLX5_GET(cmd_hca_cap, hcattr, cd); @@ -1001,6 +989,9 @@ mlx5_devx_cmd_query_hca_attr(void *ctx, /* Read the general_obj_types bitmap and extract the relevant bits. */ general_obj_types_supported = MLX5_GET64(cmd_hca_cap, hcattr, general_obj_types); + attr->qos.flow_meter_aso_sup = + !!(general_obj_types_supported & + MLX5_GENERAL_OBJ_TYPES_CAP_FLOW_METER_ASO); attr->vdpa.valid = !!(general_obj_types_supported & MLX5_GENERAL_OBJ_TYPES_CAP_VIRTQ_NET_Q); attr->vdpa.queue_counters_valid = @@ -1074,8 +1065,7 @@ mlx5_devx_cmd_query_hca_attr(void *ctx, MLX5_GET(cmd_hca_cap, hcattr, umr_modify_entity_size_disabled); attr->wait_on_time = MLX5_GET(cmd_hca_cap, hcattr, wait_on_time); attr->crypto = MLX5_GET(cmd_hca_cap, hcattr, crypto); - attr->ct_offload = !!(MLX5_GET64(cmd_hca_cap, hcattr, - general_obj_types) & + attr->ct_offload = !!(general_obj_types_supported & MLX5_GENERAL_OBJ_TYPES_CAP_CONN_TRACK_OFFLOAD); attr->rq_delay_drop = MLX5_GET(cmd_hca_cap, hcattr, rq_delay_drop); attr->nic_flow_table = MLX5_GET(cmd_hca_cap, hcattr, nic_flow_table); From patchwork Sun Dec 3 11:25:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 134750 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 09FC64365F; Sun, 3 Dec 2023 12:26:48 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E8C2E4067A; Sun, 3 Dec 2023 12:26:23 +0100 (CET) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2067.outbound.protection.outlook.com [40.107.94.67]) by mails.dpdk.org (Postfix) with ESMTP id E594B402F2; Sun, 3 Dec 2023 12:26:19 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oDtT9iUk/+ayrzqhZvRA7WodybFywlGMOQykAh7zZ+fL6BUYCwT7FyAY9GuCx8bpmI5WomgORSUBT73zSLigHF1orGz7ZsR2GGdZLH0p4v9+6VhxGmkhPj+iJBEPfii3okoyPrIm9D5Nutpv3TfXwsL0TSy+YTlkEcvq86Yo12Nh4jKKL4E320MG8TjYWPCircBzvSOlKUr23fOcppVE+8VYz14bIpdcvmijjLM/dUvzOe4YsP6kacjeLdaYjziH4jxELOBax2RWN/iLuogZCYG/eUMH7KilNsYyZKKiwDKzhFCUTXpLSAcAhPoC+YEOmJn5080tUp2r+A12B/T6Cw== 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=q04X3eN34tMqwxrXPOSI0eFX9gEjXIiv3wlEcM2Pb7s=; b=mjFj/pCKbd8g7jdfksBf0N99eH2Onep+Dweg2C8i3UfwvQboG/M6hFLQxRGjQeqINFVCenPLgwaUd1yK5HWqLcilnAreZ6JbtLlFduTEKUwYRDY9GYKn7HAD3ZRERmz0Gu9Vt880GOcwdufjDoWD7UlAgolY+sZ3RQNkjxVBQQCEGa1C7V0TjJoI5Il6HVZBKGA0/37p1bD3YUH6sUuq0fSTQ98qWME3Gal/acX20DEXFCczXLMZ6CDXaTH9dAinzKDvdL4tP+3Crc2xA99ErLQzxITgvSasbs3jVO5BfEbdcWY5ur5oJPXMOvUjDS4SJeRbvW+Fv0ZcLkMCKKlYWg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) 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 (0) 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=q04X3eN34tMqwxrXPOSI0eFX9gEjXIiv3wlEcM2Pb7s=; b=CHkTNIbWjv/vgKED7HfagvkCgbUsA/AqqSs9XCnGMBZx3qdgiBux+/HkGc0FqoqM1ZDmmxNdH0qEyQ84LueY8OF6NUEggRc0Ds4X3dZvOzuvEtvgUlTuh4kHuWWxIDvKOo50Fcyhp3aD+7Pn8lUclkU/GHz37KUZZh8rtN30baF8vfYBaHQOjpRtRBjvwlEnZcjOkaRzWjcSdqEtCmv0MXt8KTOx/LDMQfipOWWHgvpK4OPYSTBmv0j+MfTVnKKMP1c831osqW/Y2QUpEOz4BgbEJ0OtjqSt8V1EE3wOTskK2eHuVtREGhsns3R1Y9LzUV8YT72nnqIcusPX1nkLIA== Received: from MW4PR04CA0184.namprd04.prod.outlook.com (2603:10b6:303:86::9) by BY5PR12MB4033.namprd12.prod.outlook.com (2603:10b6:a03:213::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32; Sun, 3 Dec 2023 11:26:13 +0000 Received: from CO1PEPF000042AB.namprd03.prod.outlook.com (2603:10b6:303:86:cafe::a) by MW4PR04CA0184.outlook.office365.com (2603:10b6:303:86::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.33 via Frontend Transport; Sun, 3 Dec 2023 11:26:13 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CO1PEPF000042AB.mail.protection.outlook.com (10.167.243.40) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.20 via Frontend Transport; Sun, 3 Dec 2023 11:26:13 +0000 Received: from rnnvmail204.nvidia.com (10.129.68.6) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:25:55 -0800 Received: from rnnvmail205.nvidia.com (10.129.68.10) by rnnvmail204.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:25:55 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41 via Frontend Transport; Sun, 3 Dec 2023 03:25:53 -0800 From: Michael Baum To: CC: Matan Azrad , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou , , Subject: [PATCH v1 02/23] common/mlx5: fix query sample info capability Date: Sun, 3 Dec 2023 13:25:22 +0200 Message-ID: <20231203112543.844014-3-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231203112543.844014-1-michaelba@nvidia.com> References: <20231203112543.844014-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000042AB:EE_|BY5PR12MB4033:EE_ X-MS-Office365-Filtering-Correlation-Id: d837405b-6afd-47db-7a39-08dbf3f2a872 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: eeCDcDPHzfo7qenUSsMddIR0FhFjQm+wn7ba3eBLUfZUeEaDeLJcEvQ7md/sJegY71sKAr5Bn6Ag4kuvoKPS5/WGRxuQCGiHKHi6rGKMfyRAVUl31kEpKPcVPWafz0E9GSiAnETJVSWd0mu7gU/fW2P1Ps6Uip7obwbXNeIfjogcOaPEKSEZqs46gq74NVAuBDzPSeuR8cjTblKzm0Sr+0OxBHE1Sb1A3RsHFqo1S2+YZmCo4W9QIjSNWW1PwzMjNdWVhS4ixMUtUkZK31uQqOD1AVWo6EyLnjJisQbIX98wE+wzn0M9ZNDoAJJnDGH3OkRiS+j24tYm/sxPG9I6JVgA3QcbYpL9OdzL2yCd5wZ/3QrVy8mOn0sHvmbVZkyM9RSz68X6G0IzkVQPzUzrW6S87X6clzrg0tzkVxkU+MEBZrvhBmQL/SG7XK0CqkqNzAEuwGAUzv2br9XhTh4Bg6pdaWos92GNNOnfy2Jzsm7IPe6f8HzeS2l/qP5m24pUKW7caxgCoJl32hFABn4nrBd7XRiXBNvgPPomVviM56KT/lvF7d2kWQF8Ph000s26lNLLmiC2MeO3KwvrH9bwdwiE1F0aUgu1o7yk4CptPDyP2d4WRH6H194s382JZoafFMKBR8ewC7hbrUEld3wE4DfSdZjUS3HmmrqEFnbMHG8MGEv69h3Ub17liCRTjezJU0eyuNpdwnpdl0kbPz2g9yGAKk6y36iWjgWvXGSPRudiQPvDFEO6tG6IHFzel842 X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230031)(4636009)(136003)(376002)(396003)(39850400004)(346002)(230922051799003)(186009)(82310400011)(451199024)(1800799012)(64100799003)(46966006)(40470700004)(36840700001)(47076005)(36860700001)(6666004)(7696005)(41300700001)(55016003)(356005)(7636003)(83380400001)(1076003)(426003)(2616005)(6286002)(336012)(26005)(40480700001)(478600001)(70206006)(70586007)(54906003)(316002)(40460700003)(8676002)(4326008)(450100002)(82740400003)(8936002)(36756003)(5660300002)(6916009)(2906002)(86362001); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2023 11:26:13.5360 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d837405b-6afd-47db-7a39-08dbf3f2a872 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.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000042AB.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4033 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 Query sample info operation might be used by either Geneve TLV option or parse graph. Each operations can be supported regardless to another according the configured profile. In current implementation, the query sample info capability is turn on only when parse graph operation is supported adding unnecessary requirement for Geneve TLV option. This patch adds different cap for Geneve TLV option. Fixes: bc0a9303ed6a ("net/mlx5: adopt new sample ID") Cc: rongweil@nvidia.com Cc: stable@dpdk.org Signed-off-by: Michael Baum --- drivers/common/mlx5/mlx5_devx_cmds.c | 6 ++++-- drivers/common/mlx5/mlx5_devx_cmds.h | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/common/mlx5/mlx5_devx_cmds.c b/drivers/common/mlx5/mlx5_devx_cmds.c index 41f6e0a727..3eeb27fc3f 100644 --- a/drivers/common/mlx5/mlx5_devx_cmds.c +++ b/drivers/common/mlx5/mlx5_devx_cmds.c @@ -965,6 +965,8 @@ mlx5_devx_cmd_query_hca_attr(void *ctx, max_geneve_tlv_options); attr->max_geneve_tlv_option_data_len = MLX5_GET(cmd_hca_cap, hcattr, max_geneve_tlv_option_data_len); + attr->query_match_sample_info = MLX5_GET(cmd_hca_cap, hcattr, + query_match_sample_info); attr->qos.sup = MLX5_GET(cmd_hca_cap, hcattr, qos); attr->wqe_index_ignore = MLX5_GET(cmd_hca_cap, hcattr, wqe_index_ignore_cap); @@ -1094,8 +1096,8 @@ mlx5_devx_cmd_query_hca_attr(void *ctx, (ctx, &attr->flex); if (rc) return -1; - attr->flex.query_match_sample_info = MLX5_GET(cmd_hca_cap, hcattr, - query_match_sample_info); + attr->flex.query_match_sample_info = + attr->query_match_sample_info; } if (attr->crypto) { attr->aes_xts = MLX5_GET(cmd_hca_cap, hcattr, aes_xts) || diff --git a/drivers/common/mlx5/mlx5_devx_cmds.h b/drivers/common/mlx5/mlx5_devx_cmds.h index 7f23e925a5..b814c8becc 100644 --- a/drivers/common/mlx5/mlx5_devx_cmds.h +++ b/drivers/common/mlx5/mlx5_devx_cmds.h @@ -315,6 +315,7 @@ struct mlx5_hca_attr { uint32_t flow_counter_bulk_log_granularity:5; uint32_t alloc_flow_counter_pd:1; uint32_t flow_counter_access_aso:1; + uint32_t query_match_sample_info:1; uint32_t flow_access_aso_opc_mod:8; uint32_t cross_vhca:1; uint32_t lag_rx_port_affinity:1; From patchwork Sun Dec 3 11:25:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 134747 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 518B243660; Sun, 3 Dec 2023 12:26:16 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id F38C04028C; Sun, 3 Dec 2023 12:26:14 +0100 (CET) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2063.outbound.protection.outlook.com [40.107.223.63]) by mails.dpdk.org (Postfix) with ESMTP id AA8C64027B; Sun, 3 Dec 2023 12:26:13 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Q8TrE5v3Ddf44v6TdAIQYMYkOGnbunUH4uzMkv8lpmCdDdMaxq0ZBJHr1epKHtrPBQ7RIQS5/4/wvJRx/Gr+0kAkLKWKb+nt3ZbMwqq89S2KQ2ax/dK8UeIrzjcjWy91vn+JBacG/G9GmHQBD2Bq+MayeFWwEtjKCp4zf+DSNfP7LmLLcJ/3Ht0zRyFD1KG3FPJ1YSyDDsSEoCLbWiMdxvMoEZQn+tVE0CeOg9SAjvHQAH2yugM9MBfYsYqDMVU+iFWyJHSuNrB/N+EHhOTgnaKfo0ndpNIurI6TH3b3kCy0vlw0D70a1WbPBnD2VHWIJqPU+gl/VkNnL7invHvYog== 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=0fV1SQ0GSegdEKhluA5bRl8GrAwXf8x+Rdt9kdFS0jA=; b=UuqzSE3nh3KtznJij34DFyKorsICQ7+oaZhl/7gIsU9/liFN9lT8M3k5LeuJDcyxwKAQ5tsykDw24m2kqhQkZc5Ptsttqqk2z7q2aJ8cymx8wOdeW72kXOMwVJhIP+ACtwrUm0p5XwUe45fiGSouW7rLO2aLXFrIgInA7PpEb/JpToAv4WVZhyI+Ns6uVTpFl3HMxLMXSUE4POUez+ru/eEyUbUx4cL4SMUsfytrerYt6AwD/UMoKwQqYa2et2nca7NH3o5bkH2suRhKpJke0ACpft3Q22mHxa7R2YP7Wq9vxGPOE7H91Ze2cpU0mSs/6n98g6bdloo/441yaDfPQg== 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 (0) 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=0fV1SQ0GSegdEKhluA5bRl8GrAwXf8x+Rdt9kdFS0jA=; b=V3Ckced+ETUdqwm/Fy0/f7siM7qi3Hwkgl6cK7FOLXZqHhRT0n00CnKrw4Xm1u8uyHymXjehJou2WZOi6rNOUHcGCtXLN1GS8SVgYqSH3XaygcglSfxE5MFopneTdF3TH4jslNrtyjt3HfM4MV4ApkYuepfpSUiihTebr0bhxxwe72gNNBbCI6OXfv+1HFHVF0pj4IVEbIJblYihNlD/TcsMR+y991Zs3+yM7fRrRz7uyAWKXrL+QsxKJKG9QLMRjWSOeOuwKfJ/bfv8hFSobypB6GtXkw1iEPXqn93L2Jt4SZ2stK0D3Eo1tEZ1aVvaMUgwaSTI8CTRjfsf6bGVmA== Received: from DM6PR21CA0022.namprd21.prod.outlook.com (2603:10b6:5:174::32) by CY5PR12MB6646.namprd12.prod.outlook.com (2603:10b6:930:41::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32; Sun, 3 Dec 2023 11:26:10 +0000 Received: from DS1PEPF00017098.namprd05.prod.outlook.com (2603:10b6:5:174:cafe::a8) by DM6PR21CA0022.outlook.office365.com (2603:10b6:5:174::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6977.16 via Frontend Transport; Sun, 3 Dec 2023 11:26:10 +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 DS1PEPF00017098.mail.protection.outlook.com (10.167.18.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.20 via Frontend Transport; Sun, 3 Dec 2023 11:26:10 +0000 Received: from rnnvmail204.nvidia.com (10.129.68.6) 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.41; Sun, 3 Dec 2023 03:25:58 -0800 Received: from rnnvmail205.nvidia.com (10.129.68.10) by rnnvmail204.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:25:58 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41 via Frontend Transport; Sun, 3 Dec 2023 03:25:55 -0800 From: Michael Baum To: CC: Matan Azrad , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou , Alex Vesker , , Subject: [PATCH v1 03/23] net/mlx5/hws: fix tunnel protocol checks Date: Sun, 3 Dec 2023 13:25:23 +0200 Message-ID: <20231203112543.844014-4-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231203112543.844014-1-michaelba@nvidia.com> References: <20231203112543.844014-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF00017098:EE_|CY5PR12MB6646:EE_ X-MS-Office365-Filtering-Correlation-Id: 1c87fe97-abb0-4c97-a496-08dbf3f2a6a2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DrWa3rP2es0CKMTazpJdzyW3ydaAOT0afjp6dJahOMajOAnzRFtQ4q5s/ZZ0R+1X+lID2gu8HOhIjbiIlJZvGZnHOhjiEYw/5gzHnS5D7k1BMSAGII/pltnVDnIyEb/0fHQ4R/EU9mZjX1MieS6RXU4RaNMx6vVPxBfrQ8/lZ/X2m6XdIw7rrgmG4f2VE7GbSXoqlrF8mU+UPlze7Q7FAuwPnFlAzY8uIC5AnWkZ63j0Dg7b82yp6fKN/ZTWlAlh3dBLy+hiGdHAEqCs1VMlRovuCFPMXEs8fT20JlSXPp3SFskH74vibti6PmD3ELQzxQ4Cf3HpxYMx3b5jDjtkC3Dz2d57+Op+hLVn83uCZz4aQcup3dX80luoVdqyrFbw5maWF15/a2nNt37MfJnw97hsGuKV2VhEeb5T2DUbNQYe16dUaZWtPbG7BVpOqTsF2cEYU0y14L4y5NET2l15uL9jhoCqsD66vXShuX1pGtSYbNd4PEAwOOp/wFoftJZye+IP6+27zGICVlFE4uUrpGHpzcoXws8ZYGFqaPAoKMfRc9qfrrAS81v5TazX2ePYUPjSNNUZxcXy5Pmp4qnOv5U7f+4j8oN0DnvoBQe/tsRYNh7IycIYktj0Toj3FpMBbZMcxkDmrKVljduLe3e0/dysdCP38CB1FX1T7wFA1RslRTqtN4urkvREScwMFc7k+FOXe5YG2hY7/kyquAfit0gIwAKwrHaTnRHu7hXjFrpzafzJ4p5fAtkPRIWYl1jtPKTXCkzRSOOlmFllvuDb0w== 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:(13230031)(4636009)(39860400002)(396003)(136003)(346002)(376002)(230922051799003)(186009)(451199024)(82310400011)(1800799012)(64100799003)(46966006)(36840700001)(40470700004)(40460700003)(450100002)(54906003)(6916009)(316002)(86362001)(8936002)(8676002)(4326008)(70586007)(478600001)(70206006)(41300700001)(36756003)(5660300002)(2906002)(36860700001)(356005)(7636003)(47076005)(2616005)(6286002)(26005)(1076003)(7696005)(6666004)(83380400001)(82740400003)(426003)(336012)(40480700001)(55016003)(309714004); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2023 11:26:10.4962 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1c87fe97-abb0-4c97-a496-08dbf3f2a6a2 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: DS1PEPF00017098.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6646 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: Alex Vesker Align GRE, GTPU and VXLAN tunnel protocols to fail in case the packet is already tunneled. Also use local defines for protocol UDP ports for better layering of mlx5dr API. Fixes: c55c2bf35333 ("net/mlx5/hws: add definer layer") Fixes: 5bf14a4beb1a ("net/mlx5/hws: support matching on MPLSoUDP") Cc: valex@nvidia.com Cc: erezsh@nvidia.com Cc: stable@dpdk.org Signed-off-by: Alex Vesker --- drivers/net/mlx5/hws/mlx5dr_definer.c | 39 +++++++++++++-------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/drivers/net/mlx5/hws/mlx5dr_definer.c b/drivers/net/mlx5/hws/mlx5dr_definer.c index 0b60479406..bab1869369 100644 --- a/drivers/net/mlx5/hws/mlx5dr_definer.c +++ b/drivers/net/mlx5/hws/mlx5dr_definer.c @@ -8,8 +8,9 @@ #define BAD_PORT 0xBAD #define ETH_TYPE_IPV4_VXLAN 0x0800 #define ETH_TYPE_IPV6_VXLAN 0x86DD -#define ETH_VXLAN_DEFAULT_PORT 4789 -#define IP_UDP_PORT_MPLS 6635 +#define UDP_GTPU_PORT 2152 +#define UDP_VXLAN_PORT 4789 +#define UDP_PORT_MPLS 6635 #define UDP_ROCEV2_PORT 4791 #define DR_FLOW_LAYER_TUNNEL_NO_MPLS (MLX5_FLOW_LAYER_TUNNEL & ~MLX5_FLOW_LAYER_MPLS) @@ -158,7 +159,7 @@ struct mlx5dr_definer_conv_data { X(SET, tcp_protocol, STE_TCP, rte_flow_item_tcp) \ X(SET_BE16, tcp_src_port, v->hdr.src_port, rte_flow_item_tcp) \ X(SET_BE16, tcp_dst_port, v->hdr.dst_port, rte_flow_item_tcp) \ - X(SET, gtp_udp_port, RTE_GTPU_UDP_PORT, rte_flow_item_gtp) \ + X(SET, gtp_udp_port, UDP_GTPU_PORT, rte_flow_item_gtp) \ X(SET_BE32, gtp_teid, v->hdr.teid, rte_flow_item_gtp) \ X(SET, gtp_msg_type, v->hdr.msg_type, rte_flow_item_gtp) \ X(SET, gtp_ext_flag, !!v->hdr.gtp_hdr_info, rte_flow_item_gtp) \ @@ -166,8 +167,8 @@ struct mlx5dr_definer_conv_data { X(SET, gtp_ext_hdr_pdu, v->hdr.type, rte_flow_item_gtp_psc) \ X(SET, gtp_ext_hdr_qfi, v->hdr.qfi, rte_flow_item_gtp_psc) \ X(SET, vxlan_flags, v->flags, rte_flow_item_vxlan) \ - X(SET, vxlan_udp_port, ETH_VXLAN_DEFAULT_PORT, rte_flow_item_vxlan) \ - X(SET, mpls_udp_port, IP_UDP_PORT_MPLS, rte_flow_item_mpls) \ + X(SET, vxlan_udp_port, UDP_VXLAN_PORT, rte_flow_item_vxlan) \ + X(SET, mpls_udp_port, UDP_PORT_MPLS, rte_flow_item_mpls) \ X(SET, source_qp, v->queue, mlx5_rte_flow_item_sq) \ X(SET, tag, v->data, rte_flow_item_tag) \ X(SET, metadata, v->data, rte_flow_item_meta) \ @@ -1170,6 +1171,12 @@ mlx5dr_definer_conv_item_gtp(struct mlx5dr_definer_conv_data *cd, const struct rte_flow_item_gtp *m = item->mask; struct mlx5dr_definer_fc *fc; + if (cd->tunnel) { + DR_LOG(ERR, "Inner GTPU item not supported"); + rte_errno = ENOTSUP; + return rte_errno; + } + /* Overwrite GTPU dest port if not present */ fc = &cd->fc[DR_CALC_FNAME(L4_DPORT, false)]; if (!fc->tag_set && !cd->relaxed) { @@ -1344,9 +1351,13 @@ mlx5dr_definer_conv_item_vxlan(struct mlx5dr_definer_conv_data *cd, struct mlx5dr_definer_fc *fc; bool inner = cd->tunnel; - /* In order to match on VXLAN we must match on ether_type, ip_protocol - * and l4_dport. - */ + if (inner) { + DR_LOG(ERR, "Inner VXLAN item not supported"); + rte_errno = ENOTSUP; + return rte_errno; + } + + /* In order to match on VXLAN we must match on ip_protocol and l4_dport */ if (!cd->relaxed) { fc = &cd->fc[DR_CALC_FNAME(IP_PROTOCOL, inner)]; if (!fc->tag_set) { @@ -1369,12 +1380,6 @@ mlx5dr_definer_conv_item_vxlan(struct mlx5dr_definer_conv_data *cd, return 0; if (m->flags) { - if (inner) { - DR_LOG(ERR, "Inner VXLAN flags item not supported"); - rte_errno = ENOTSUP; - return rte_errno; - } - fc = &cd->fc[MLX5DR_DEFINER_FNAME_VXLAN_FLAGS]; fc->item_idx = item_idx; fc->tag_set = &mlx5dr_definer_vxlan_flags_set; @@ -1384,12 +1389,6 @@ mlx5dr_definer_conv_item_vxlan(struct mlx5dr_definer_conv_data *cd, } if (!is_mem_zero(m->vni, 3)) { - if (inner) { - DR_LOG(ERR, "Inner VXLAN vni item not supported"); - rte_errno = ENOTSUP; - return rte_errno; - } - fc = &cd->fc[MLX5DR_DEFINER_FNAME_VXLAN_VNI]; fc->item_idx = item_idx; fc->tag_set = &mlx5dr_definer_vxlan_vni_set; From patchwork Sun Dec 3 11:25:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 134749 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 AEE7D4365F; Sun, 3 Dec 2023 12:26:39 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7D36540608; Sun, 3 Dec 2023 12:26:20 +0100 (CET) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2060.outbound.protection.outlook.com [40.107.93.60]) by mails.dpdk.org (Postfix) with ESMTP id 2D767402F2 for ; Sun, 3 Dec 2023 12:26:19 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZcAHqyI+iLXL745IIeuMjOKfuSwfCbYa1wbOQqD//QW12I1rfbpbtlGDGjlCk4/t7Gee9LwHW5m5tVgXgyiUg4sVG3iHmh1dDjZZ1cyIlDTGQqdEsJna87XJ1wDNYl+O9Ide1utcwBNHBoAkBX/b65aU1l9DGUkPHP57Me0t6BZICcaQZlkZ4AaSa0zyHboXQ6r4NYmG/R0Ar2zt3Xe+samt85DDDExfiAkClsG+jTR5twZ6sk/GRfEUN8EI1j0qLcVln0SeSl25xtNWtHSwWZkum+IGK/rtefdn5tnQ6L6ZEwzgfQjQbj3PBSHHKdrw14f60WhUqGBIH/fCcE+yNg== 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=uh5NS1B7paKILNL6b+d6iAI9WwS4+U1lvlSVGDZ3KyA=; b=RgvnA98uQ3no+mxuUTWzU2pZMSnwowyMMHiLrD5Gc1xp15sjqn7wREtpMyW92jB3RqOQwKhMh8KwZ9yVWmXc+bdBDCuxYQzkBRPjTLRgtTMDwg5wAD6tvLC1/jRjZ9oWlCXMvehM7lKcz/OdJP+FiIlnD8wjnjAjzk4WXXgp0zXuRARbQNZ/Y5naF4WTJarU4tBCPvF1O/S6E9fOokaq372xlOkfCGXCNypZnGu7Al9k72ZHrluEDt4A3zVew+aMF5r6eGJM2H1YNvCuoK/Yg3mTJrQ56v/j+BMvNcRUbmgw6DOVFthdYVwXuK2Qne8LNKgLa5xpkXdfkZTMfh74jg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) 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 (0) 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=uh5NS1B7paKILNL6b+d6iAI9WwS4+U1lvlSVGDZ3KyA=; b=NUihaGV8FfYopkE/2UFVlO0+sGxybl0wUKQOLgs2aQ4jHgS6MseSV24fzG5DzDnHfYstwWj3ka0LFeQi7V/A/yQY3sQ3wpSdJ0pdhl3iHDknHnN67ZnmiPWOWKh8O+z69mVkP9lxKSTgBeZsc3jJrD7qBeV2qn1ZtQT7fD7Q2P/dHt6rtkJg6j+DL8MConXUE/yJfQnhr7tzP2YsfTqdyESIZSsoqjpVHf4mCCnrokoxCEpeP+keGAUWpQYWoWpaNfdL2QcODZWVt4MMJTiz8fLitHLS7P/yD+b/hDH53KpeTyf2wzKdeh575/iGPfw0zfj7kiHbeOlq+PVpWJmpnA== Received: from SJ0PR05CA0156.namprd05.prod.outlook.com (2603:10b6:a03:339::11) by IA1PR12MB8555.namprd12.prod.outlook.com (2603:10b6:208:44f::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32; Sun, 3 Dec 2023 11:26:16 +0000 Received: from CO1PEPF000042AE.namprd03.prod.outlook.com (2603:10b6:a03:339:cafe::d9) by SJ0PR05CA0156.outlook.office365.com (2603:10b6:a03:339::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.21 via Frontend Transport; Sun, 3 Dec 2023 11:26:16 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CO1PEPF000042AE.mail.protection.outlook.com (10.167.243.43) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.20 via Frontend Transport; Sun, 3 Dec 2023 11:26:16 +0000 Received: from rnnvmail204.nvidia.com (10.129.68.6) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:26:00 -0800 Received: from rnnvmail205.nvidia.com (10.129.68.10) by rnnvmail204.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:26:00 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41 via Frontend Transport; Sun, 3 Dec 2023 03:25:58 -0800 From: Michael Baum To: CC: Matan Azrad , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou , Subject: [PATCH v1 04/23] net/mlx5: remove GENEVE options length limitation Date: Sun, 3 Dec 2023 13:25:24 +0200 Message-ID: <20231203112543.844014-5-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231203112543.844014-1-michaelba@nvidia.com> References: <20231203112543.844014-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000042AE:EE_|IA1PR12MB8555:EE_ X-MS-Office365-Filtering-Correlation-Id: 1cb40844-eaf1-40ed-cfb1-08dbf3f2aa05 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: hc14i+XaHsWHNBhYLCsMOz3jiW3C1luwfF2iKUE6F7su9+Cqmn4UsbuwY33gsWg2BeAYK5uibcZndHIYofJcv3c+juVt3SkGmiuaUj5imYsG9E/CnL5akJKcJNLeLw3MdOz6QY25+68hDq/8vgTHyQdipWvd+TNXvVHGuD2NKOUj3maJg58MPg9D3bDrDZLjOtYVleIIyBLW5srttN26XZvuccaORGjloc1nZ/s4BwPVDAWuCX71Urv9QD4wX/wXBu5Y5ExchzuTxa16ELE3vJomrkGAudBdSxE5PG7EX40f2TNIsER9XYWE1gEms6HNIvhFYDDZZuMgr/gd15wYY/XlhHZd5AoUQLsRONAjBWHrz9dVphuscYmDAUlfK9TJWSYB40xEuS1+iWx6BVESmwZ5Ocw/Hax7IrjUoE5N7Hbm+APFWYexN15un0I3Loa0CSTFo3QG6QyQ4HSWJ5BBoEVVYO01RDcjwo4nFkxnjunv5R93uw8wqwr09eKAUKM9+6522lFAcg97nJ2NqsksPHvpuByXjVuO5eHKZRbOAP5jNHS3EQLEzkziVYGUN3rFRZLe2K0/LjUfCQ4rmIIzOjoHtSxp2Nr89Vq+rK5uHhWnfyT7FvRY3YNVAfnpfVPIWFyIch9bIF2RFwRhECtk5+NidtpPxb3kqn/zIWQu1vnKYwvygb2uBGio9lAu3qSISnIARK2LVOwGr67OcQeNQKYBdrm+L5/ueS/NCVK5Wg1sg934VOBTM9emt2+PfHj0 X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230031)(4636009)(346002)(376002)(136003)(396003)(39860400002)(230922051799003)(451199024)(82310400011)(64100799003)(186009)(1800799012)(46966006)(40470700004)(36840700001)(107886003)(1076003)(2616005)(8936002)(8676002)(4326008)(7696005)(47076005)(40480700001)(55016003)(7636003)(356005)(83380400001)(36860700001)(426003)(336012)(82740400003)(6286002)(26005)(478600001)(40460700003)(6666004)(54906003)(70206006)(70586007)(316002)(6916009)(2906002)(41300700001)(36756003)(86362001)(5660300002); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2023 11:26:16.1793 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1cb40844-eaf1-40ed-cfb1-08dbf3f2aa05 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.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000042AE.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB8555 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 GENEVE header has field named "opt_len" describing the total length of all GENEVE options in 4-byte granularity. In SW sreering implementation, only single option with single DW data is supported. When matching on GENEVE option data is requested, matching on "opt_len" field is added according to given option length. This behaveior assumes that only packets with single option can be matched, but it is wrong, packet with a few option can be matched but only one of them can match its value. This patch removes the "opt_len" matching unless user ask it explicitly. Fixes: e440d6cf589e ("net/mlx5: add GENEVE TLV option flow translation") Cc: shirik@nvidia.com Signed-off-by: Michael Baum --- drivers/net/mlx5/mlx5_flow_dv.c | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c index 115d730317..62ca742654 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -9986,7 +9986,6 @@ flow_dv_translate_item_geneve_opt(struct rte_eth_dev *dev, void *key, const struct rte_flow_item_geneve_opt *geneve_opt_m; const struct rte_flow_item_geneve_opt *geneve_opt_v; const struct rte_flow_item_geneve_opt *geneve_opt_vv = item->spec; - void *misc_v = MLX5_ADDR_OF(fte_match_param, key, misc_parameters); void *misc3_v = MLX5_ADDR_OF(fte_match_param, key, misc_parameters_3); rte_be32_t opt_data_key = 0, opt_data_mask = 0; uint32_t *data; @@ -10005,21 +10004,6 @@ flow_dv_translate_item_geneve_opt(struct rte_eth_dev *dev, void *key, return ret; } } - /* - * Set the option length in GENEVE header if not requested. - * The GENEVE TLV option length is expressed by the option length field - * in the GENEVE header. - * If the option length was not requested but the GENEVE TLV option item - * is present we set the option length field implicitly. - */ - if (!MLX5_GET16(fte_match_set_misc, misc_v, geneve_opt_len)) { - if (key_type & MLX5_SET_MATCHER_M) - MLX5_SET(fte_match_set_misc, misc_v, geneve_opt_len, - MLX5_GENEVE_OPTLEN_MASK); - else - MLX5_SET(fte_match_set_misc, misc_v, geneve_opt_len, - geneve_opt_v->option_len + 1); - } /* Set the data. */ if (key_type == MLX5_SET_MATCHER_SW_V) data = geneve_opt_vv->data; From patchwork Sun Dec 3 11:25:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 134752 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 A4D944365F; Sun, 3 Dec 2023 12:27:03 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id F3012406A2; Sun, 3 Dec 2023 12:26:27 +0100 (CET) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2087.outbound.protection.outlook.com [40.107.93.87]) by mails.dpdk.org (Postfix) with ESMTP id 1A0A740685 for ; Sun, 3 Dec 2023 12:26:26 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nA15OAHjxxSlPWcjp0v8C28E6heX5BVRKHFWz3N7LhmgUqbh4yOvXAJeTefb3Wpne3+MD/WJ+iNh66CPsi98o3ypZF6249xht4Ke39ZUhq5GScWxBTAzwubOCKh1cWshsRjYEYdOkyv+iYg2il6DEtjmnPpYoPABOsaS7KpqPettfNhdQU5NTVOMsKvgTpNmNKaJF3UDtECTP/g66ULde4zFia5W7vR+6QkdkpC/fviBZxhKL8Ugyw68ja2IbTTTXCt7snFUChOunHlhDAdVkwoOE2NL9iyLTyRaxV1QAk2cQkoccN3Gs5L7GCLYIzCjXrG3ZwEIbvTwsyvzFRGM/g== 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=nwodTV+DYJQlrHc/1RB7QN3X43GdzAeWIyIYfW/TFFU=; b=QHWhmtzMB6JYIfluECrQ/qLgcMnv2CKdGwS3rWPC7nYQSjHllpuSHA4EeRel6/m2WQNVzNK9t1g7S4ZZTSKQoo4XNVq+MVqgFSG7+ExhM6fESb9sRKysMO6ADI4srozUEie1JBEs8zrGhf7vJntVnpZ1VTc5OUykW0I5tjcqtqdBDI8sl0KB6RmXMOsXe/zVt7Hm6Y90hXR/6ocRg0ykYcCuGpRxGeY0aTwgIcnV6lc6L+toAZsjP7QdVuZJBO6Xs373FczlEizjrHXQpbh4fF55dp/MtlwKS2TMCvo5k5d7PIA55Cn+xx3jkx0/hiTMwkMiuoL68Pnv2HxncHRqtg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) 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 (0) 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=nwodTV+DYJQlrHc/1RB7QN3X43GdzAeWIyIYfW/TFFU=; b=UHqUeKnIqqJw/rwflRTIZhoymsRT1WAVvPiqKxgqDk3RqeUdJtu8bL2DxdSuSEIzvX0BMKwyRQGsyiEVHXC33F+cWjtfLpNXlfYcyQ+aOZy1R8h99O6LVvcS1u57Qj/oBHemTHFLXEW99gjeglnOd0IGGlwocUFwXlsV1OKHPjnv/I2EUNdxxpH39TpdnFmNS89WP4Ahraz3xeJxlt+LkCENm8MFVQOebU627h7Tx5s40HmvMpACGPbeKFaflrL2Bs7f/CX4opSL8RPsJWeQXbQmypQTBzj00OFKkgpPoZxPzPTXKwigByibz9VyuzpuzYPqo4xXPjCn8MXFzLNeSw== Received: from MW4P222CA0026.NAMP222.PROD.OUTLOOK.COM (2603:10b6:303:114::31) by SJ0PR12MB5635.namprd12.prod.outlook.com (2603:10b6:a03:42a::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32; Sun, 3 Dec 2023 11:26:19 +0000 Received: from CO1PEPF000042AC.namprd03.prod.outlook.com (2603:10b6:303:114:cafe::12) by MW4P222CA0026.outlook.office365.com (2603:10b6:303:114::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32 via Frontend Transport; Sun, 3 Dec 2023 11:26:19 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CO1PEPF000042AC.mail.protection.outlook.com (10.167.243.41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.20 via Frontend Transport; Sun, 3 Dec 2023 11:26:19 +0000 Received: from rnnvmail204.nvidia.com (10.129.68.6) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:26:03 -0800 Received: from rnnvmail205.nvidia.com (10.129.68.10) by rnnvmail204.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:26:02 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41 via Frontend Transport; Sun, 3 Dec 2023 03:26:00 -0800 From: Michael Baum To: CC: Matan Azrad , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou Subject: [PATCH v1 05/23] net/mlx5: fix GENEVE option item translation Date: Sun, 3 Dec 2023 13:25:25 +0200 Message-ID: <20231203112543.844014-6-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231203112543.844014-1-michaelba@nvidia.com> References: <20231203112543.844014-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000042AC:EE_|SJ0PR12MB5635:EE_ X-MS-Office365-Filtering-Correlation-Id: 0934e829-5331-44cb-2f61-08dbf3f2ac09 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: IzKCaUOyorSCCiibZdXVUK/Q2gOkayihtuZJNXs8XJ9vprDLc8NSh3R5YIIs63IvY1j62pItJLc25FAuitJhQFaD1wsuMpAVzGCsznh/2+NlaSIRXG/u9xC+ywYJ4jGk0r7z/KnLz1yMoaYLB8JkAwb+57sHDFsGyA6kPvP4kemKrre3LjDthbEdcAY+e8Z+ObbRGa25FQw6JqAoGFHXsn/catpFU63z0LAGbVVmBEf2H6EqgFAK7Vq/kySsvkgEBiQnfw/sn/EchwU6xLa6ZYbmDIfjZynVrpKoSp2JAm8Hray1zHbv2gwpax+JNYNrLbzvh2h5PLIw58cC89W0EC6yAf1/ezmx2xidlkLjGJqU89EG/lkjh4PybbosHM1ZfDHkHTqSB+fmW3JyHHpaWUA6AK19/PWeayqZVl1QFNYFOfIjQjv6wUGg/0SbTqAsMHz4y34xz3Ax3Hccegpvnke80PDv1GOsNvXh6WhhbCT8zvBJAqmhmgljU2Fo7geuArUI0QsNaODd5g/nn6OLW/JXjeQklOysPMdAEpvP1Z2PtxwYKr04D+1UpJjvLyY9NEctBIQBcPsWBfUdZHPBLvcuRfcVKqKd826XZhBkuyDecvsRyzSURkmQMn4HIh9nV1ZeCV4sBqPgnvxCN93RYSiowSsgh9cp8uswXba/UFzgh/Mq4bfY+4TEt1KsL0K0aSZR8sVkrfmN/NZWTnAyBEw6eCUQ5L0rsXE9JXOHZPct5p8v+6DvR4+QPq/v1e7OhA+VL2NAYYpf5IL6DEdqa4HhPCDB0MMFKeFCsOO3r3M= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230031)(4636009)(376002)(346002)(136003)(39860400002)(396003)(230922051799003)(451199024)(186009)(64100799003)(1800799012)(82310400011)(36840700001)(40470700004)(46966006)(6666004)(1076003)(2616005)(7696005)(107886003)(7636003)(356005)(47076005)(36860700001)(316002)(70206006)(70586007)(6916009)(54906003)(83380400001)(336012)(426003)(40480700001)(26005)(55016003)(6286002)(82740400003)(8676002)(4326008)(478600001)(8936002)(2906002)(41300700001)(5660300002)(40460700003)(36756003)(86362001); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2023 11:26:19.5569 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0934e829-5331-44cb-2f61-08dbf3f2ac09 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.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000042AC.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB5635 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 The "flow_dv_translate_item_geneve_opt()" function is called twice per flow rule, for either matcher focusing the mask or value focusing the spec. The spec is always provided and its field "option_len" indicates the data size for both spec and mask. For using it, function has another pointer "geneve_opt_vv" representing the spec regardless to focusing while the "geneve_opt_v" pointer represents the mask for matcher and spec for rule creation. The current implementation has 2 issues: 1. geneve_opt_v get the spec in rule creation as sane as geneve_opt_vv, but function use if-else which is bacicly has same value. 2. function uses "option_len" from "geneve_opt_v" instead of "geneve_opt_v" even when the focus is on mask, for HWS the mask value may be 0 even data is valid. This patch refactors the function implementation to avoid those issues. Fixes: cd4ab742064a ("net/mlx5: split flow item matcher and value translation") Cc: suanmingm@nvidia.com Signed-off-by: Michael Baum --- drivers/net/mlx5/mlx5_flow_dv.c | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c index 62ca742654..f8e364dfdb 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -9985,13 +9985,13 @@ flow_dv_translate_item_geneve_opt(struct rte_eth_dev *dev, void *key, { const struct rte_flow_item_geneve_opt *geneve_opt_m; const struct rte_flow_item_geneve_opt *geneve_opt_v; - const struct rte_flow_item_geneve_opt *geneve_opt_vv = item->spec; + const struct rte_flow_item_geneve_opt *orig_spec = item->spec; void *misc3_v = MLX5_ADDR_OF(fte_match_param, key, misc_parameters_3); rte_be32_t opt_data_key = 0, opt_data_mask = 0; - uint32_t *data; + size_t option_byte_len; int ret = 0; - if (MLX5_ITEM_VALID(item, key_type)) + if (MLX5_ITEM_VALID(item, key_type) || !orig_spec) return -1; MLX5_ITEM_UPDATE(item, key_type, geneve_opt_v, geneve_opt_m, &rte_flow_item_geneve_opt_mask); @@ -10004,21 +10004,15 @@ flow_dv_translate_item_geneve_opt(struct rte_eth_dev *dev, void *key, return ret; } } - /* Set the data. */ - if (key_type == MLX5_SET_MATCHER_SW_V) - data = geneve_opt_vv->data; - else - data = geneve_opt_v->data; - if (data) { - memcpy(&opt_data_key, data, - RTE_MIN((uint32_t)(geneve_opt_v->option_len * 4), - sizeof(opt_data_key))); - memcpy(&opt_data_mask, geneve_opt_m->data, - RTE_MIN((uint32_t)(geneve_opt_v->option_len * 4), - sizeof(opt_data_mask))); + /* Convert the option length from DW to bytes for using memcpy. */ + option_byte_len = RTE_MIN((size_t)(orig_spec->option_len * 4), + sizeof(rte_be32_t)); + if (geneve_opt_v->data) { + memcpy(&opt_data_key, geneve_opt_v->data, option_byte_len); + memcpy(&opt_data_mask, geneve_opt_m->data, option_byte_len); MLX5_SET(fte_match_set_misc3, misc3_v, - geneve_tlv_option_0_data, - rte_be_to_cpu_32(opt_data_key & opt_data_mask)); + geneve_tlv_option_0_data, + rte_be_to_cpu_32(opt_data_key & opt_data_mask)); } return ret; } From patchwork Sun Dec 3 11:25:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 134753 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 6740A4365F; Sun, 3 Dec 2023 12:27:10 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3FF68406BA; Sun, 3 Dec 2023 12:26:29 +0100 (CET) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2047.outbound.protection.outlook.com [40.107.93.47]) by mails.dpdk.org (Postfix) with ESMTP id BE51D40698 for ; Sun, 3 Dec 2023 12:26:26 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Z69A2ch3a652opfkTgw6PAADxllxhC+htW979MIoXGW2gsr/C2aP9ghpke+M6UBc7llhBBDnlwCV/YyE2A9zun3F8jV5eb9wxkvhxGKJP/MCEeuroyWr+GRDTVYDzSjwTZmCHVWwjkXxGCEaobVa8kIKPwtpGQHA4nTY8XLmQTNSkPTQLKKqFJArL0bPfACksY3zR2+IlfBBOSt+yxVbPN8Bj1LcGWBGgXExZpyhVAYts3bpVUWoTrpiRGqPi12l/1e8oJGK34E81LDgR6tyNrzvhbMDdUCT6xQVmBKIlQchI28w4bcJITbI5yuqK7txyu3Z4hdUlgfm1i1b040r1Q== 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=pJsjXylNpw/LucAnzWmAGg65t3iV41mD6Tbq7+Oj94A=; b=fi/zXNpq+yzEcOqquMpSAO6SA+Xeyfd6Yjr2fVOpukCaK6M5WO2wVb4WqJLr3AmjfwYnRWOTv+Hyg9Ai+o6xJ01ECFYHmU1Fh8skVOR1IqVqzYADTt6rL2WdibDlcsMFaMuoVLIARfW+NJ3kmlPVJXDornRVBq+bDHTI3sDS7zDRv4dLikg6Eiv+ddGQ7bu6pxTEGHx+3/WjKcIm3JoJXrq656hdJ9hUUfZUbNJLSrzyzy/tQ/dGifjxx77Ai1nxMRXHE2i36VKyL1tYW3grhvaipd1PZ1AjecgAjOjd590R5P6v/6A0d9SyAqzd40Zk2suGg1ZNFUpjcCvjSLO2Ww== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) 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 (0) 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=pJsjXylNpw/LucAnzWmAGg65t3iV41mD6Tbq7+Oj94A=; b=uNsotUvdKjWYu02t3YDVO6hzwPYzuK+vhLNMgQIpD7cyFqdL0aDHEZSUgD/Jm4aVm7FBqJUSntpY8RJzc7fX51L1WPryZ0UxMF5qwcZaMg1JRaoh5IMhmyY8KcTEOgv8/w1JD1NRuJgYfWaE8DySwDswEiHtMTOfSS13O1v337TmHg3nYyIgB6o+rhOTysssHCd5xqhfcKfyUyBCLMO75vJ1RAip+jtIOeoiFHNwcpdV5pOgnq2xgzCMm/68XbJWanxshmdGLHzfEQ9+MZloUwv9RaA5GHTlZ0aSM7hyse9HfRb49kVlGxWg66u9EnO9uBNFfZi98sWPonDyTYpMlw== Received: from BYAPR03CA0026.namprd03.prod.outlook.com (2603:10b6:a02:a8::39) by SJ2PR12MB8010.namprd12.prod.outlook.com (2603:10b6:a03:4c7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32; Sun, 3 Dec 2023 11:26:24 +0000 Received: from CO1PEPF000042A9.namprd03.prod.outlook.com (2603:10b6:a02:a8:cafe::88) by BYAPR03CA0026.outlook.office365.com (2603:10b6:a02:a8::39) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32 via Frontend Transport; Sun, 3 Dec 2023 11:26:24 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CO1PEPF000042A9.mail.protection.outlook.com (10.167.243.38) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.20 via Frontend Transport; Sun, 3 Dec 2023 11:26:23 +0000 Received: from rnnvmail204.nvidia.com (10.129.68.6) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:26:05 -0800 Received: from rnnvmail205.nvidia.com (10.129.68.10) by rnnvmail204.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:26:04 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41 via Frontend Transport; Sun, 3 Dec 2023 03:26:03 -0800 From: Michael Baum To: CC: Matan Azrad , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou Subject: [PATCH v1 06/23] common/mlx5: add system image GUID attribute Date: Sun, 3 Dec 2023 13:25:26 +0200 Message-ID: <20231203112543.844014-7-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231203112543.844014-1-michaelba@nvidia.com> References: <20231203112543.844014-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000042A9:EE_|SJ2PR12MB8010:EE_ X-MS-Office365-Filtering-Correlation-Id: f77bd2d0-0a50-4387-a44d-08dbf3f2aead X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1i9vLHwyy3muPNiqR5PnyA5UG3SN5TubZZtuBJvRvwfk6kVL18XSjcplsBpSSB4/LhR4nI+z6CpCWjE0Gw85rl22OdCfkzq8t12fUzJ259IFq6fgeVyN2c18SaKTIEv3/y4nKAIpIu9w5H0h6mTu8IMMmCK7NAWo+aynaQ80SU0QJ/RVHO2/2y/IzBGq+fSSgjG9+OAR0324o6j16KBhvA0y5fyfEfVAduP4HfCAWWbzH/bXjSg7mjkx5rRnM3xAMn3hG/YHWUcjhkpbYEHf65K66bXJNipnUWpMdRRgck909vUhDKDDYuHhG6Em3KrvgNNNzV0dZWpwEsEr/7jBjvSiRa+WznSfzbSOlseK6aUEfAb/LU1bv9rlboNULuC5ISmoXtcN7IPX91J17EWZCyHM9+KDmiUk+aEDMvCmp6mwwKWGGNbQP8mkzt9BfJOwGpJxlkp5mdcvx0dIkgdnSglXUHRQKKItFy37LocKOoJ/K8iLgIQdAlP4qBkSMpTLbVVNHxzoJdqVJNHi5WekLtLNgbrE8rMnNLAH/zeQ0EGoZvQquAVhpWCJkAJ3i8LThGmi0Hz3AadwPc8MGPNPn6iCFFsXCsGvTVPhRFMKdz7Msvfs/fnu+/4TYkZjZrhviQpoNC0J2au60HYqLEmiXePkARZ8HPUSyjoFa6rk80OWJFOxjDkjcO20KscWuS+IOt0eZt22x0e8ezToiK8elSAFaBkOLEJ4TcAHYYbNo7UKUhqhqRX3yRMqP6OLrz3q X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230031)(4636009)(136003)(39860400002)(346002)(396003)(376002)(230922051799003)(1800799012)(64100799003)(82310400011)(186009)(451199024)(40470700004)(46966006)(36840700001)(54906003)(6916009)(70586007)(70206006)(4326008)(8676002)(8936002)(316002)(478600001)(40460700003)(6666004)(5660300002)(36756003)(41300700001)(2906002)(86362001)(40480700001)(47076005)(356005)(82740400003)(426003)(83380400001)(2616005)(26005)(336012)(6286002)(107886003)(1076003)(7636003)(55016003)(36860700001)(7696005); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2023 11:26:23.9901 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f77bd2d0-0a50-4387-a44d-08dbf3f2aead 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.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000042A9.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ2PR12MB8010 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 Add to the "system_image_guid" filed describing uniquely the physical device into "mlx5_hca_attr" structure. Signed-off-by: Michael Baum --- drivers/common/mlx5/mlx5_devx_cmds.c | 10 ++++++---- drivers/common/mlx5/mlx5_devx_cmds.h | 1 + 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/common/mlx5/mlx5_devx_cmds.c b/drivers/common/mlx5/mlx5_devx_cmds.c index 3eeb27fc3f..74609e7cb2 100644 --- a/drivers/common/mlx5/mlx5_devx_cmds.c +++ b/drivers/common/mlx5/mlx5_devx_cmds.c @@ -518,8 +518,11 @@ mlx5_devx_cmd_query_nic_vport_context(void *ctx, } vctx = MLX5_ADDR_OF(query_nic_vport_context_out, out, nic_vport_context); - attr->vport_inline_mode = MLX5_GET(nic_vport_context, vctx, - min_wqe_inline_mode); + if (attr->wqe_inline_mode == MLX5_CAP_INLINE_MODE_VPORT_CONTEXT) + attr->vport_inline_mode = MLX5_GET(nic_vport_context, vctx, + min_wqe_inline_mode); + attr->system_image_guid = MLX5_GET64(nic_vport_context, vctx, + system_image_guid); return 0; } @@ -1348,8 +1351,7 @@ mlx5_devx_cmd_query_hca_attr(void *ctx, } attr->qp_ts_format = MLX5_GET(roce_caps, hcattr, qp_ts_format); } - if (attr->eth_virt && - attr->wqe_inline_mode == MLX5_CAP_INLINE_MODE_VPORT_CONTEXT) { + if (attr->eth_virt) { rc = mlx5_devx_cmd_query_nic_vport_context(ctx, 0, attr); if (rc) { attr->eth_virt = 0; diff --git a/drivers/common/mlx5/mlx5_devx_cmds.h b/drivers/common/mlx5/mlx5_devx_cmds.h index b814c8becc..56ed911c2a 100644 --- a/drivers/common/mlx5/mlx5_devx_cmds.h +++ b/drivers/common/mlx5/mlx5_devx_cmds.h @@ -321,6 +321,7 @@ struct mlx5_hca_attr { uint32_t lag_rx_port_affinity:1; uint32_t wqe_based_flow_table_sup:1; uint8_t max_header_modify_pattern_length; + uint64_t system_image_guid; }; /* LAG Context. */ From patchwork Sun Dec 3 11:25:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 134755 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 3FF254365F; Sun, 3 Dec 2023 12:27:25 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 32E6E40A7D; Sun, 3 Dec 2023 12:26:34 +0100 (CET) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2075.outbound.protection.outlook.com [40.107.223.75]) by mails.dpdk.org (Postfix) with ESMTP id 7796F40A6D for ; Sun, 3 Dec 2023 12:26:32 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VM0038nU6vqUOSW9JlZ3+NnwXeh/zC0lA3MT+SHvu9679EVF6JC5+xggQ3RkHlP4CLHRBBvPBtSKNLzI2SkFIJFFxkAorskYutmnc3xTGUUlZ5UK5XmwEE4epPSm+GUuY3fA5Vs1hxxDmLQwpo92+cFLOFYwbadPOpsq6Z43C0MU1EzSrTj9ecu2gk2Fzi9Pj0Fr0KMIA2Y3jO3+AkQNmJQ4sV1zQEPcZbTK8ZMR4GA/mKEeBM6Xu8z7RREPzTdbETzBrQQ+EHdC+wijkaqZGjz1B5J8lw0HaCNb/bx9l+4I6+BHRNot44Tjrq2KmWIgy7FO7tIvKmdyaSZbdpukHg== 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=6pZ/bsAnn5ci2rZuSEJilBi4dODJWgmpCB28j0+i6/M=; b=JYSRQIVaQ8ichwsa5p0b0zdg29/z2RBi+qkSCOQ2x325+hDio1bEi3q4tgXPaOZf8WcKfifQHhFcKpCKYyZUoNT4EP9jyZq9NBkgz25nS+VKPf9cQiftwX0EpkPNOmBRZHrsptKAILyopCPibOsTsPS5qkOCbP/FKaiQLQM/KX+qjMOljmyZmmWG7iSXYJQpIp5qj4A4tEjdoYBvfapdYHY3tpKDcpXRL5hCCa0NHQ8Lt5iaa5XL90SWbN7/dk6bhVIuSsK0dL7xtYkNFNNY5Z1loqm2LLXFxVJLJCkDgmT4655rARDFeqbyXTq9Kxja5vXko22m1XhOObnqWPMCiw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) 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 (0) 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=6pZ/bsAnn5ci2rZuSEJilBi4dODJWgmpCB28j0+i6/M=; b=e0ZKZ0lqrUKALK8J0p6PsBBsRs+JapAba1pFt9XGNsjtbZbzIS5FNoc5ULJwIi8PXYJRWzJw1HEhMS2CvpZEMWrz4amkoYxwwWjcnlWIImehm3Q4xHVXjcBA8eBphY9kEJrWHotZwGTL3oDd8JE6CKEJE0Um+XnQlkiSclTYbsCCMGAd5jM6PT/mTJyYx3FLLZZJ40G9nzLpim1vQwRGZwOhDw7aZyd+OLmv/d5kOEKglUTAsm2gyJV647TYJXQNeahG0ujkBOSte1oP6Jv/nB4hGH8xGxDe4yng+wY+ikd3Pwp6f7k2HLZ8Kya7GCbrjHwdJEMJsiV96a4MC34sEQ== Received: from MW4P222CA0021.NAMP222.PROD.OUTLOOK.COM (2603:10b6:303:114::26) by PH7PR12MB8105.namprd12.prod.outlook.com (2603:10b6:510:2b7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32; Sun, 3 Dec 2023 11:26:28 +0000 Received: from CO1PEPF000042AC.namprd03.prod.outlook.com (2603:10b6:303:114:cafe::4e) by MW4P222CA0021.outlook.office365.com (2603:10b6:303:114::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32 via Frontend Transport; Sun, 3 Dec 2023 11:26:26 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CO1PEPF000042AC.mail.protection.outlook.com (10.167.243.41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.20 via Frontend Transport; Sun, 3 Dec 2023 11:26:26 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:26:07 -0800 Received: from rnnvmail205.nvidia.com (10.129.68.10) 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.41; Sun, 3 Dec 2023 03:26:07 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41 via Frontend Transport; Sun, 3 Dec 2023 03:26:05 -0800 From: Michael Baum To: CC: Matan Azrad , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou Subject: [PATCH v1 07/23] common/mlx5: add GENEVE TLV option attribute structure Date: Sun, 3 Dec 2023 13:25:27 +0200 Message-ID: <20231203112543.844014-8-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231203112543.844014-1-michaelba@nvidia.com> References: <20231203112543.844014-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000042AC:EE_|PH7PR12MB8105:EE_ X-MS-Office365-Filtering-Correlation-Id: 00d16144-79be-4fe4-ed2e-08dbf3f2b051 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xhyDe3OoE415oLOQuextY9cuzmOzELCgUPj3fOlHl+G3baHvl1TC9stZ+4S7TshAKCUAlDrQezl3mFHQ+xoCwEtyAQZZ0kwrDMVwzHMGnNMfxJqluIuc45Lzx9zcPQPcEIHlfhbyhYtYsBEPHYaSzL/emn9DC7sYl2lcoyBoqmFp0u/STT0bPCVCjnCx/8B8oPFoeSeVkxWbpznnwQ/ys0D6tswN5nZOBcsze2XGhXuRnNXnf0odcwtBwAf2F8Ob4U3kXHfROjqUQHFzhALULKeySX7X/5K5XDaqh7Kz1vPXh2WVS5jswVFbj+ug8tHpDM2H2GqwW7wcUfpm9Xlx65Ca66AHGqH/0rgUnRuum7x2Jo5WCGrHArZ5bieFGyF3shLUoiHbB1rGKHSC95pwP77z70Pt3HY8aRpmPMcP1vu+pziWITTY7ID6zLgn2U6HgLl49z10a/DSJrN5VX5caMSwe32lC6jIs8FkUiuFW1/yZe7gu7M+D2zsMVUN0PW4+lnOapRGISH/oSNPsZaoBfAA0Amkdkf2VJTsoH8iudluqxuPCeE/MIc8qiIzYnxTwE3copE1J5nSk1Gk+mpOGrUCUb8Nv+d33O8lqxkKtnJXINkS8AokkiuzC0SO7VOwyOO7ifp7xzp8tLI6F4Q1aIqK3i+SPTqUsO6bul3OghEcZuZPSH2mj/YeTJBBFA2t+zflFek6k4A3qHycKOBOkZcouFEW0TRr5pyVUtbAKreOxVPL7CqrLUX4CyZKmSAP X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230031)(4636009)(346002)(39860400002)(396003)(376002)(136003)(230922051799003)(186009)(451199024)(64100799003)(1800799012)(82310400011)(46966006)(36840700001)(40470700004)(55016003)(40480700001)(40460700003)(36860700001)(47076005)(7636003)(356005)(2906002)(5660300002)(82740400003)(83380400001)(6666004)(336012)(426003)(26005)(107886003)(7696005)(1076003)(2616005)(6286002)(478600001)(70586007)(70206006)(36756003)(41300700001)(54906003)(6916009)(4326008)(8676002)(86362001)(316002)(8936002); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2023 11:26:26.7288 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 00d16144-79be-4fe4-ed2e-08dbf3f2b051 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.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000042AC.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB8105 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 Add a new structure "mlx5_devx_geneve_tlv_option_attr" to use in GENEVE TLV option creation. Later this structure will be used by GENEVE TLV option query operation as well. Signed-off-by: Michael Baum --- drivers/common/mlx5/mlx5_devx_cmds.c | 28 +++++++++++++--------------- drivers/common/mlx5/mlx5_devx_cmds.h | 11 ++++++++++- drivers/net/mlx5/mlx5_flow_dv.c | 10 +++++++--- 3 files changed, 30 insertions(+), 19 deletions(-) diff --git a/drivers/common/mlx5/mlx5_devx_cmds.c b/drivers/common/mlx5/mlx5_devx_cmds.c index 74609e7cb2..9855a97bf4 100644 --- a/drivers/common/mlx5/mlx5_devx_cmds.c +++ b/drivers/common/mlx5/mlx5_devx_cmds.c @@ -2855,19 +2855,15 @@ mlx5_devx_cmd_create_conn_track_offload_obj(void *ctx, uint32_t pd, * * @param[in] ctx * Context returned from mlx5 open_device() glue function. - * @param [in] class - * TLV option variable value of class - * @param [in] type - * TLV option variable value of type - * @param [in] len - * TLV option variable value of len + * @param[in] attr + * Pointer to GENEVE TLV option attributes structure. * * @return * The DevX object created, NULL otherwise and rte_errno is set. */ struct mlx5_devx_obj * mlx5_devx_cmd_create_geneve_tlv_option(void *ctx, - uint16_t class, uint8_t type, uint8_t len) + struct mlx5_devx_geneve_tlv_option_attr *attr) { uint32_t in[MLX5_ST_SZ_DW(create_geneve_tlv_option_in)] = {0}; uint32_t out[MLX5_ST_SZ_DW(general_obj_out_cmd_hdr)] = {0}; @@ -2876,25 +2872,27 @@ mlx5_devx_cmd_create_geneve_tlv_option(void *ctx, 0, SOCKET_ID_ANY); if (!geneve_tlv_opt_obj) { - DRV_LOG(ERR, "Failed to allocate geneve tlv option object."); + DRV_LOG(ERR, "Failed to allocate GENEVE TLV option object."); rte_errno = ENOMEM; return NULL; } void *hdr = MLX5_ADDR_OF(create_geneve_tlv_option_in, in, hdr); void *opt = MLX5_ADDR_OF(create_geneve_tlv_option_in, in, - geneve_tlv_opt); + geneve_tlv_opt); MLX5_SET(general_obj_in_cmd_hdr, hdr, opcode, - MLX5_CMD_OP_CREATE_GENERAL_OBJECT); + MLX5_CMD_OP_CREATE_GENERAL_OBJECT); MLX5_SET(general_obj_in_cmd_hdr, hdr, obj_type, MLX5_GENERAL_OBJ_TYPE_GENEVE_TLV_OPT); MLX5_SET(geneve_tlv_option, opt, option_class, - rte_be_to_cpu_16(class)); - MLX5_SET(geneve_tlv_option, opt, option_type, type); - MLX5_SET(geneve_tlv_option, opt, option_data_length, len); + rte_be_to_cpu_16(attr->option_class)); + MLX5_SET(geneve_tlv_option, opt, option_type, attr->option_type); + MLX5_SET(geneve_tlv_option, opt, option_data_length, + attr->option_data_len); geneve_tlv_opt_obj->obj = mlx5_glue->devx_obj_create(ctx, in, - sizeof(in), out, sizeof(out)); + sizeof(in), out, + sizeof(out)); if (!geneve_tlv_opt_obj->obj) { - DEVX_DRV_LOG(ERR, out, "create GENEVE TLV", NULL, 0); + DEVX_DRV_LOG(ERR, out, "create GENEVE TLV option", NULL, 0); mlx5_free(geneve_tlv_opt_obj); return NULL; } diff --git a/drivers/common/mlx5/mlx5_devx_cmds.h b/drivers/common/mlx5/mlx5_devx_cmds.h index 56ed911c2a..78337dff17 100644 --- a/drivers/common/mlx5/mlx5_devx_cmds.h +++ b/drivers/common/mlx5/mlx5_devx_cmds.h @@ -667,6 +667,15 @@ struct mlx5_devx_crypto_login_attr { uint8_t credential[MLX5_CRYPTO_CREDENTIAL_SIZE]; }; +/* + * GENEVE TLV option attributes structure, used by GENEVE TLV option create. + */ +struct mlx5_devx_geneve_tlv_option_attr { + uint32_t option_class:16; + uint32_t option_type:8; + uint32_t option_data_len:5; +}; + /* mlx5_devx_cmds.c */ __rte_internal @@ -777,7 +786,7 @@ int mlx5_devx_cmd_register_write(void *ctx, uint16_t reg_id, __rte_internal struct mlx5_devx_obj * mlx5_devx_cmd_create_geneve_tlv_option(void *ctx, - uint16_t class, uint8_t type, uint8_t len); + struct mlx5_devx_geneve_tlv_option_attr *attr); /** * Create virtio queue counters object DevX API. diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c index f8e364dfdb..8894f51f4c 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -9928,11 +9928,15 @@ flow_dev_geneve_tlv_option_resource_register(struct rte_eth_dev *dev, goto exit; } } else { + struct mlx5_devx_geneve_tlv_option_attr attr = { + .option_class = geneve_opt_v->option_class, + .option_type = geneve_opt_v->option_type, + .option_data_len = geneve_opt_v->option_len, + }; + /* Create a GENEVE TLV object and resource. */ obj = mlx5_devx_cmd_create_geneve_tlv_option(sh->cdev->ctx, - geneve_opt_v->option_class, - geneve_opt_v->option_type, - geneve_opt_v->option_len); + &attr); if (!obj) { ret = rte_flow_error_set(error, ENODATA, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL, From patchwork Sun Dec 3 11:25:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 134751 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 216F44365F; Sun, 3 Dec 2023 12:26:55 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3DAD24067D; Sun, 3 Dec 2023 12:26:25 +0100 (CET) Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on2076.outbound.protection.outlook.com [40.107.96.76]) by mails.dpdk.org (Postfix) with ESMTP id 4013440648 for ; Sun, 3 Dec 2023 12:26:21 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=i38wloZzHb1NmQ4W342t/HUCq5P4uXDuEuX9EgEMOwVd29xJ2sclsZeYAQVroknIwidGJ8vmE5tE9NGgjJ6UQ1cuJrAABturmCWfLEA2bN3kK/YbFrLV0il7cNxLQfiNiws8bsDd7r4mG0ZAZfT1UoPELaM1vlPNeH7sJaZv2kyKSGsVtAVuSWbia86EMrWLeA3tgbFTDx2y1aq0BD9BVWNi07uMNxSnCwdwMTuM/4f/hmHq4IsLqiMC6b3jEhr9a4wF+Pd34fPtyqvmjRRD+VQTUm/RhkWM4940S/hkOV2axk1PN4LSY5PoqJkbzfAtIXdhOtqFG8B3+D/Vea4wpw== 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=1vlW2WbMReZtIbP3F5enkUaVc1iDEFvvfXUWndo07xY=; b=Daw97VthaDU1oNi3p3uJTl++OP/TDoGZBtR7MCcB4Rn688e4hWVGdRgnw35KSbNaM0j7vl1U4sjrVh4L6k0CShqnEtC/xsT5exCrpVoFPbjhBGqdC46YQQyur5XhPjWUY1+5j9GPPmLqqSNSqn5QnJSPWY9iQqjXnVoVDhQ99UNjUwY/EzZIR76i1lHAdUyYtVSSFat9dJS3un/nBvC3mFyB54k5RwHfp063DBuSo/1hF9Ag4Jg3vDaYBVTqgYznSekYkEV8uPuQVUw9x8pt/zv/WiCuakZ2kD7pFeQMkzpNYVYheSeEdnb0kjGv84dwJkhmaFoycYXn7NSN2LAB8g== 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 (0) 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=1vlW2WbMReZtIbP3F5enkUaVc1iDEFvvfXUWndo07xY=; b=KIIGMMnk5gPMQcfBsnV4OaQ1nsrZMRkEMQDhe8lQGFDQQe7QteKY6inZWzBsh+uY+iaCqF1t3CzswpFQke1N7phwo9p8DekFx+oDZCzLgcZ+P6Bcpl8U1RCfT2ExPB3YAr+X/8YtL7KLigCura0sGcHSsDx81rPPCtmQ/wnJs5+Z7g0qI5cAzjyE+5Pffw5i6Ad5wicWDpToUswidKhvY3eVSpv10/t83t8wnKVw99L8l40W4VboU3EbjQWLzT9JUzy3GDcXWLtuS3UjTAO37zIKxqh1gKOK+f5w0824+pAbP3FICFZZVXWXKxPUu91jHQVG9nV5uoMG9hqr/q2BaA== Received: from DM6PR02CA0076.namprd02.prod.outlook.com (2603:10b6:5:1f4::17) by CYYPR12MB8731.namprd12.prod.outlook.com (2603:10b6:930:ba::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32; Sun, 3 Dec 2023 11:26:17 +0000 Received: from DS1PEPF00017097.namprd05.prod.outlook.com (2603:10b6:5:1f4:cafe::f9) by DM6PR02CA0076.outlook.office365.com (2603:10b6:5:1f4::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.30 via Frontend Transport; Sun, 3 Dec 2023 11:26:17 +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 DS1PEPF00017097.mail.protection.outlook.com (10.167.18.101) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.20 via Frontend Transport; Sun, 3 Dec 2023 11:26:17 +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.41; Sun, 3 Dec 2023 03:26:09 -0800 Received: from rnnvmail205.nvidia.com (10.129.68.10) 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.41; Sun, 3 Dec 2023 03:26:09 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41 via Frontend Transport; Sun, 3 Dec 2023 03:26:07 -0800 From: Michael Baum To: CC: Matan Azrad , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou Subject: [PATCH v1 08/23] common/mlx5: add PRM attribute for TLV sample Date: Sun, 3 Dec 2023 13:25:28 +0200 Message-ID: <20231203112543.844014-9-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231203112543.844014-1-michaelba@nvidia.com> References: <20231203112543.844014-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF00017097:EE_|CYYPR12MB8731:EE_ X-MS-Office365-Filtering-Correlation-Id: 9d582ca6-f92d-4e3d-b131-08dbf3f2aa87 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /Y/v4ufscisvYjWVbaJeMcH88bWIYcCtnHW+phKwQEjErbTA3h+KC/ldxfKzJ5vPKz46kakbLB/o0+JNzRc81wrwObN/tMSuR6BLCGq8/3T30T+a6UCslCQQ/ZI7fhwqjJYdHuAlBILF14KkAUXPJtmr5xvQpCiLVn7HGo4kzAGjQ27l4wCzLmKTBTyisjzFQWI1siJ1AK9UVF6zaOolKXkmQiCnKjh1W/acXUs1PzGZ685Fa8Iw6ncwilDShX/0du6OOXsJ8NHIz0aOyKZFQCBqoJpx6dtARAhmqSSTIr7QQd0LDR/u74+twor+2SHFyWDm7MrnHURJWBV7WLaIKFDLa7dpbd0q1ZSJP4wRHKVXzD1DU6jP/PDtRNnlxN9byDItp30MvGnqksFdCe6k+AKxGdfb1dfOvt7LXdmKIh5DtFK5B4s/oiyK7oFngughlyonCIiOa0V0pSVOth9K1UbjTqgEQJbPzPfneVdFtYlq3nQjMceHc6ZL+opsAAey/TdrL9Qa2/b+XQUNlf+73b7p1/k9O1QAluv4AUx00ySypzoR6H3Ig5mmQbNDIBMRdeqrjOO2GiGWTLlf9G1weDe+awfP+I0yt4yM6AwlqEWrIs/HgPpjeDbkXFjD8RmHp9D1z+debFrooCW5+mzZRCIgG2ypNmoP7HJrsX69K8TSOlReqeeAWBmowpxN2OAzkt91FkG4JR9ZlNlI+MFIhiNhqDmV0eT2trFS4XZEAW4r4Mw68ESHEoZ8cUJeGkay 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:(13230031)(4636009)(346002)(376002)(39860400002)(396003)(136003)(230922051799003)(82310400011)(1800799012)(64100799003)(186009)(451199024)(46966006)(40470700004)(36840700001)(478600001)(26005)(83380400001)(7636003)(336012)(6286002)(47076005)(6666004)(7696005)(356005)(1076003)(40480700001)(82740400003)(426003)(36756003)(107886003)(2616005)(316002)(6916009)(54906003)(70206006)(70586007)(36860700001)(55016003)(5660300002)(4326008)(86362001)(2906002)(8936002)(8676002)(40460700003)(41300700001); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2023 11:26:17.0149 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9d582ca6-f92d-4e3d-b131-08dbf3f2aa87 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: DS1PEPF00017097.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CYYPR12MB8731 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 Add GENEVE TLV sample fields in 2 places: 1. New HCA capabilities indicating GENEVE TLV sample is supported. 2. New fields in "mlx5_ifc_geneve_tlv_option_bits" structure. Signed-off-by: Michael Baum --- drivers/common/mlx5/mlx5_devx_cmds.c | 18 ++++++++++++++++-- drivers/common/mlx5/mlx5_devx_cmds.h | 9 +++++++-- drivers/common/mlx5/mlx5_prm.h | 15 +++++++++++---- 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/drivers/common/mlx5/mlx5_devx_cmds.c b/drivers/common/mlx5/mlx5_devx_cmds.c index 9855a97bf4..674130c11f 100644 --- a/drivers/common/mlx5/mlx5_devx_cmds.c +++ b/drivers/common/mlx5/mlx5_devx_cmds.c @@ -968,6 +968,10 @@ mlx5_devx_cmd_query_hca_attr(void *ctx, max_geneve_tlv_options); attr->max_geneve_tlv_option_data_len = MLX5_GET(cmd_hca_cap, hcattr, max_geneve_tlv_option_data_len); + attr->geneve_tlv_option_offset = MLX5_GET(cmd_hca_cap, hcattr, + geneve_tlv_option_offset); + attr->geneve_tlv_sample = MLX5_GET(cmd_hca_cap, hcattr, + geneve_tlv_sample); attr->query_match_sample_info = MLX5_GET(cmd_hca_cap, hcattr, query_match_sample_info); attr->qos.sup = MLX5_GET(cmd_hca_cap, hcattr, qos); @@ -2883,11 +2887,21 @@ mlx5_devx_cmd_create_geneve_tlv_option(void *ctx, MLX5_CMD_OP_CREATE_GENERAL_OBJECT); MLX5_SET(general_obj_in_cmd_hdr, hdr, obj_type, MLX5_GENERAL_OBJ_TYPE_GENEVE_TLV_OPT); - MLX5_SET(geneve_tlv_option, opt, option_class, - rte_be_to_cpu_16(attr->option_class)); MLX5_SET(geneve_tlv_option, opt, option_type, attr->option_type); MLX5_SET(geneve_tlv_option, opt, option_data_length, attr->option_data_len); + if (attr->option_class_ignore) + MLX5_SET(geneve_tlv_option, opt, option_class_ignore, + attr->option_class_ignore); + else + MLX5_SET(geneve_tlv_option, opt, option_class, + rte_be_to_cpu_16(attr->option_class)); + if (attr->offset_valid) { + MLX5_SET(geneve_tlv_option, opt, sample_offset_valid, + attr->offset_valid); + MLX5_SET(geneve_tlv_option, opt, sample_offset, + attr->sample_offset); + } geneve_tlv_opt_obj->obj = mlx5_glue->devx_obj_create(ctx, in, sizeof(in), out, sizeof(out)); diff --git a/drivers/common/mlx5/mlx5_devx_cmds.h b/drivers/common/mlx5/mlx5_devx_cmds.h index 78337dff17..3f294e8f04 100644 --- a/drivers/common/mlx5/mlx5_devx_cmds.h +++ b/drivers/common/mlx5/mlx5_devx_cmds.h @@ -212,8 +212,10 @@ struct mlx5_hca_attr { uint32_t lro_timer_supported_periods[MLX5_LRO_NUM_SUPP_PERIODS]; uint16_t lro_min_mss_size; uint32_t flex_parser_protocols; - uint32_t max_geneve_tlv_options; - uint32_t max_geneve_tlv_option_data_len; + uint32_t max_geneve_tlv_options:8; + uint32_t max_geneve_tlv_option_data_len:5; + uint32_t geneve_tlv_sample:1; + uint32_t geneve_tlv_option_offset:1; uint32_t hairpin:1; uint32_t log_max_hairpin_queues:5; uint32_t log_max_hairpin_wq_data_sz:5; @@ -674,6 +676,9 @@ struct mlx5_devx_geneve_tlv_option_attr { uint32_t option_class:16; uint32_t option_type:8; uint32_t option_data_len:5; + uint32_t option_class_ignore:1; + uint32_t offset_valid:1; + uint32_t sample_offset:8; }; /* mlx5_devx_cmds.c */ diff --git a/drivers/common/mlx5/mlx5_prm.h b/drivers/common/mlx5/mlx5_prm.h index 9e22dce6da..59643a8788 100644 --- a/drivers/common/mlx5/mlx5_prm.h +++ b/drivers/common/mlx5/mlx5_prm.h @@ -1849,7 +1849,9 @@ struct mlx5_ifc_cmd_hca_cap_bits { u8 num_of_uars_per_page[0x20]; u8 flex_parser_protocols[0x20]; u8 max_geneve_tlv_options[0x8]; - u8 reserved_at_568[0x3]; + u8 geneve_tlv_sample[0x1]; + u8 geneve_tlv_option_offset[0x1]; + u8 reserved_at_56a[0x1]; u8 max_geneve_tlv_option_data_len[0x5]; u8 flex_parser_header_modify[0x1]; u8 reserved_at_571[0x2]; @@ -3416,16 +3418,21 @@ struct mlx5_ifc_virtio_q_counters_bits { struct mlx5_ifc_geneve_tlv_option_bits { u8 modify_field_select[0x40]; - u8 reserved_at_40[0x18]; + u8 reserved_at_40[0x8]; + u8 sample_offset[0x8]; + u8 sample_id_valid[0x1]; + u8 sample_offset_valid[0x1]; + u8 option_class_ignore[0x1]; + u8 reserved_at_53[0x5]; u8 geneve_option_fte_index[0x8]; u8 option_class[0x10]; u8 option_type[0x8]; u8 reserved_at_78[0x3]; u8 option_data_length[0x5]; - u8 reserved_at_80[0x180]; + u8 geneve_sample_field_id[0x20]; + u8 reserved_at_a0[0x160]; }; - enum mlx5_ifc_rtc_update_mode { MLX5_IFC_RTC_STE_UPDATE_MODE_BY_HASH = 0x0, MLX5_IFC_RTC_STE_UPDATE_MODE_BY_OFFSET = 0x1, From patchwork Sun Dec 3 11:25:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 134757 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 062174365F; Sun, 3 Dec 2023 12:27:38 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9E57B40A8A; Sun, 3 Dec 2023 12:26:36 +0100 (CET) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2043.outbound.protection.outlook.com [40.107.223.43]) by mails.dpdk.org (Postfix) with ESMTP id 6140240A81 for ; Sun, 3 Dec 2023 12:26:35 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ca2UbqLxSBcKtZhApZ0lhGEW2rG7Nz3gktCdJWLNa5ZHGSVOfQ5VMcpxPTGBvlyrmlo78Q7KxzqDvAtuP9G+a+o8VZaxlxFs/BP4K3tK1EcjjNH3zG5MTVkQUmaJiexXXnLBY4WoR2l8FCqysgEH7iLWrQjrcRLF1BusyJihj03SLQdpNoeQrZf5GRvgDiAGWtid5eVkMLTQvIvizSTSnbcJeDLe581gPDfPj8BERgxw43ELGGjKArGCRKsmkQRe9iseynmSs2BVWwSG88h+No08XLbWNvxutzmqQWRV3s0sXo6nMJf3uJuse3Cfy1V4UB2NB7CKcSo7S+Fdfv8QdQ== 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=uX+fkL8/keGhk4GqKMFgqjDnErcGmpNOlh8Qv3Y1Qbk=; b=jIrEdBXVr6Y0G7XLYeMBjC0/sQdfTXXeGsWHJpVtR4na0o7ExN8GdBbNfy0cj1W0Pgk6jS4doTg6xEfKJ24lAJUocsLFq0Xxx149ogzSfLyPOI7j80tD1+JZOgJ0zE2i1BA58p5h3qcnsAynU+caCwNOJFPp6Kjk5QEU358q72H/T4Fu2iQMapsdhW/BflYqUYTQv5Kxe7AKPCmuYkSCg2ar9gzWiiaYGGs/UD8m1kRC2MjWSfqeH0KkMYhGDxA46hTW15ih9wByahIcxHdxUJU4fsDDYFd4FfGhXHQ17PyJKOvuAsGkKKt/SYafuY57ZFJto8wTaHNEmzbPoe++YA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) 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 (0) 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=uX+fkL8/keGhk4GqKMFgqjDnErcGmpNOlh8Qv3Y1Qbk=; b=qfFvxiC1/QZZ2lTrPG3W9tsC5SE26jDXuNde4U7Y9vL9PuaYFTzHK2/hQFZyR5FTknlcTFQ20lG9pVjlrDY3nRPa1hNXVALOl80DjlRzOf2SYFTFf/Lk+VJCK620j1lbRxJuMLwigMgT5WYu5tbC+Pxe0tjuEb2o4JV74e1P0NQR6xGmWHu30j6ZyDeswZ0+KlKru/VTgRGkbKffyJBQC95UKZdXre0Ypx+sl3l4/rVn2DkZCqLHK9ni7jCBrIDaekG9B6qrbbjWrJh+sxTmg34jyGvnWv6moTxerQpQh1Z6BOVass+Cyu6qA2Px1q/GY848uzoYLbMaNxKMlTJAuA== Received: from BYAPR03CA0025.namprd03.prod.outlook.com (2603:10b6:a02:a8::38) by CH2PR12MB4071.namprd12.prod.outlook.com (2603:10b6:610:7b::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32; Sun, 3 Dec 2023 11:26:30 +0000 Received: from CO1PEPF000042A9.namprd03.prod.outlook.com (2603:10b6:a02:a8:cafe::3) by BYAPR03CA0025.outlook.office365.com (2603:10b6:a02:a8::38) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.33 via Frontend Transport; Sun, 3 Dec 2023 11:26:29 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CO1PEPF000042A9.mail.protection.outlook.com (10.167.243.38) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.20 via Frontend Transport; Sun, 3 Dec 2023 11:26:29 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:26:12 -0800 Received: from rnnvmail205.nvidia.com (10.129.68.10) 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.41; Sun, 3 Dec 2023 03:26:11 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41 via Frontend Transport; Sun, 3 Dec 2023 03:26:09 -0800 From: Michael Baum To: CC: Matan Azrad , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou Subject: [PATCH v1 09/23] common/mlx5: add sample info query syndrome into error log Date: Sun, 3 Dec 2023 13:25:29 +0200 Message-ID: <20231203112543.844014-10-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231203112543.844014-1-michaelba@nvidia.com> References: <20231203112543.844014-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000042A9:EE_|CH2PR12MB4071:EE_ X-MS-Office365-Filtering-Correlation-Id: 9ff098fd-468a-4d59-30c7-08dbf3f2b222 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xYA0YvTF4N22acDOWCoVWwWFhWqqP8rGSgj/B3fGPQwznj+Zy+cyEmFkajnGfrmyKDHSZlWhUvU/bI7SyW0fxR1r6EvICvtT+KTpBNMhF53juyUX9koDs1eFASuTYt5OM+98Nyg5EGtcbcbEe+SQhLPVuQTECKxbZP5CH3uPrdyg8HtnICatstirjivDSx/y+Woq8O+zjqEpfnEHrh4nm3laVqk2vUP6DUM8WasSa/YChn9pJqi9Ea8S5sSd4DIaKI1c+u3hi06gXnF2ARgIiYHlt8DtwhmAasIpgvLokWgT2lchpchX9OU5FBJkNtoFVOKL1vYO+JpgvK0AMyj86gq25FEf6HrBfxKLh8jpXBXbyv+gnev/BwV5Dlrusby6YG1gR+sRC2WXi5gwBl2Ppk25jwDU04S/e0H1BG7MJ0f0LEF/mQyS/FQ1Qvjj4G3DcWTb5ZQEOpm8gC5cjOFWXJV/ZD79YieKaTQByVfOqQMJ4hov/zsSLymNNpfZwAMwKvBYZ22qKSiIHFUmmqlw+qY64Y2KNREIPBq+gwQCMpAmBoX5Y+yA1q6SL+Hfhpb2o8HtGIoiKehdyUJVj2ikfeeibtpqjkunhvmoKQ0qWOg2YIsyIufP075juMOHv6BX9HpKu4ZFe5u7ILWvlPnJFsjK16ttTGSmy+JgCm89xkEIUWS/bnvEYS+UT7CdIhbJQ3PPbvrLKtz2VsiuC9GgYDkVYW7IG44TjMdxD382DVgRlY7QJrA6tl6FBzbxEoAW X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230031)(4636009)(396003)(136003)(39860400002)(376002)(346002)(230922051799003)(186009)(451199024)(82310400011)(64100799003)(1800799012)(46966006)(36840700001)(40470700004)(40460700003)(6916009)(54906003)(316002)(86362001)(8936002)(8676002)(4326008)(70586007)(478600001)(70206006)(41300700001)(36756003)(5660300002)(2906002)(36860700001)(356005)(7636003)(47076005)(1076003)(2616005)(6286002)(26005)(107886003)(7696005)(6666004)(83380400001)(82740400003)(426003)(336012)(40480700001)(55016003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2023 11:26:29.7871 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9ff098fd-468a-4d59-30c7-08dbf3f2b222 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.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000042A9.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR12MB4071 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 Move "mlx5_devx_cmd_match_sample_info_query()" function to use "DEVX_DRV_LOG" in case of "devx_general_cmd" failure. This macro contains syndrome report and used by all other function calling "devx_general_cmd". Signed-off-by: Michael Baum --- drivers/common/mlx5/mlx5_devx_cmds.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/drivers/common/mlx5/mlx5_devx_cmds.c b/drivers/common/mlx5/mlx5_devx_cmds.c index 674130c11f..b30f54ab1c 100644 --- a/drivers/common/mlx5/mlx5_devx_cmds.c +++ b/drivers/common/mlx5/mlx5_devx_cmds.c @@ -641,11 +641,10 @@ mlx5_devx_cmd_match_sample_info_query(void *ctx, uint32_t sample_field_id, MLX5_SET(query_match_sample_info_in, in, sample_field_id, sample_field_id); rc = mlx5_glue->devx_general_cmd(ctx, in, sizeof(in), out, sizeof(out)); - if (rc) { - DRV_LOG(ERR, "Failed to query match sample info using DevX: %s", - strerror(rc)); - rte_errno = rc; - return -rc; + if (rc || MLX5_FW_STATUS(out)) { + DEVX_DRV_LOG(ERR, out, "query match sample info", + "sample_field_id", sample_field_id); + return MLX5_DEVX_ERR_RC(rc); } attr->modify_field_id = MLX5_GET(query_match_sample_info_out, out, modify_field_id); From patchwork Sun Dec 3 11:25:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 134756 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 725C74365F; Sun, 3 Dec 2023 12:27:31 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5AB8340A80; Sun, 3 Dec 2023 12:26:35 +0100 (CET) Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2068.outbound.protection.outlook.com [40.107.243.68]) by mails.dpdk.org (Postfix) with ESMTP id 4826E40A80 for ; Sun, 3 Dec 2023 12:26:34 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WJpLdMuF4r43QZcOiLTnNXXZxlvrzkZN6CAgPKkSJfxTlXxYhP8Q4vnPfVNIcuTZmJX5BTWxZcTctPb5sdcVeh9mWVX3HJ1rGqPQRekaVIIbVyM+qNjsM9sb2G8MDGmF8gSZ1Unqfdi8WG0wwTbAgQ5xue8Wx0aUZOIfTU9J54GFtfMqP6R1dBMGjX3vayATGZBY/JcI/92VscCiFOxMkstTlRY97FCsSP02IY1rfdtGOd6gFJw2vlBwcLFPfHCjsJzL0qPYdlIRp4SB5L9KSJvEol+RafmO9GSy96thW7IY0GMRABc3y1cmq+334IjlOdCXQIrdnSidK9xwJVEDeA== 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=CL1RJ4yCPFFgLWO+IOXkaywhlt+AjkZP+YGFyZNOg/U=; b=j7HpUDudrCoKKHc9AxVRWv2Ug1qSNOCKABezA8wcdG3U+25FW/JktxJgXbcEUcavDrOdOT79+k3oCw5hxwS+cKloCpKyYGth78bKCKgjOJrro7piZ9kq3LdThI6dUP2zWkSPDSZRICP8uZaaYM9fLGh1A8TTGlL2IbwuiKPvzqC0J8CK21hyt3xjxiNF3KCEjdD+a0DyiO5SFDKxiViyfMmU7TL6FxZBYf3iGTXp2D7Y/UnU4Eyaa53Tql3KiMjXaFX+A04JvfSrrR9Dr+5snzfWcatJQCEZXodvqllIZj/MbDwgaxsL7uTKsVPiQMOcaoehfbmY78jUFm7lx5EY0A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) 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 (0) 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=CL1RJ4yCPFFgLWO+IOXkaywhlt+AjkZP+YGFyZNOg/U=; b=Xrrq4rhPn8J74owm7beoRrFvwnIvJIvcuyb6af6tXWIdldEIah1IpnxY1huGLfQIOUiTZOT9SlhoW1Sa7t2B9N3RYvbc4h30fa5iVyQT2338m9k09BYedgZOtjxem7rj7Nl36oj6vOXF8GevTxxCG0DRop4/g6+k8nxVe5UlxDwGkT1QC4qXAuYxhCrMTq0xUbfU2UYJBCuSgHkQ009rMtdkiNKQlOcalIAHMj+vhdpxcFeZXx84z5HRLVUMvPge8lK0dAFcY2xEXQ3O0/OYsyV+zzIf1y/nD78wXaaMbimPtrBgofA5dSKpMtQNP+d6aCninvJXZgrZrvX5PKpd+g== Received: from MW4P222CA0024.NAMP222.PROD.OUTLOOK.COM (2603:10b6:303:114::29) by DM4PR12MB5746.namprd12.prod.outlook.com (2603:10b6:8:5d::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32; Sun, 3 Dec 2023 11:26:32 +0000 Received: from CO1PEPF000042AC.namprd03.prod.outlook.com (2603:10b6:303:114:cafe::55) by MW4P222CA0024.outlook.office365.com (2603:10b6:303:114::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32 via Frontend Transport; Sun, 3 Dec 2023 11:26:31 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CO1PEPF000042AC.mail.protection.outlook.com (10.167.243.41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.20 via Frontend Transport; Sun, 3 Dec 2023 11:26:31 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:26:14 -0800 Received: from rnnvmail205.nvidia.com (10.129.68.10) 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.41; Sun, 3 Dec 2023 03:26:13 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41 via Frontend Transport; Sun, 3 Dec 2023 03:26:12 -0800 From: Michael Baum To: CC: Matan Azrad , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou Subject: [PATCH v1 10/23] common/mlx5: query GENEVE option sample ID from HCA attr Date: Sun, 3 Dec 2023 13:25:30 +0200 Message-ID: <20231203112543.844014-11-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231203112543.844014-1-michaelba@nvidia.com> References: <20231203112543.844014-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000042AC:EE_|DM4PR12MB5746:EE_ X-MS-Office365-Filtering-Correlation-Id: 3077f2db-d632-49dd-e040-08dbf3f2b34c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: JlW0xEPdcWPiDQpnJ8XmaQissGjicNYhHVLrqUnnTXf1x1ThSjrTlPfYKKtr8jTr0GS2z73zL83CIsKH5HGykqpOM1ejPXt1Yyc5vkstG2Undz5e5xZFp6mxis+1d/UMRWr/NB6wscNrepg1TCTfWi57J+YSSgL1cEe+qbvPhl0iGZSrHEEOm06wFV0mm+svHqSYVVAfeNXx4h42gwFUOFz2Xn0jFRPcQHvcBqV+gQlN4MHAsV6c3Z5G74BrLd9TDTCBBVnP7+id67L5ye42dnFobXBAIvxINE8ED/UN49/SHmZ9POE6qVAfeWnpaz02MyKxX6q5l3afOmFpd7loEyUnLecD64Ca+dW8WBwXTB94YnOGW1gA6iddT4TnLkcrvpbLkmIFQXC/rLP+2pTKbETmiWxbqDiBlgZ6cuLT9qtUNPG889V4Rw12wjYU0YSuLs34shqj2E7iD7J5M6Ek6okk/k2uU+PvZ8MDqYxXUd4T8GYCSJmFkfHUVUInGPz9tx2HEm3uZonp06Z3IlD8y/BYCCvrpPz5GeOCjNua8f3/GV3dXBgsjVyfHbpRtLXz5SzQLp7DM0m5k6bFoY32qf31V1kOc5cr5hqjdfs+Skehnb6YKzWd2NqVzDgzmOtXz2GlL7MTRaH2VMNaiYKcrfr+Jb3rmWNUtVVQshW5C+luoDP2yQgvWMbjI+xVWUms1ZJDKiCqBxvm5Z3hT62y9sgefVG4tQjE4QTVOjCQmjErwlJ9ulwd2kZ2cBAWHmcO X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230031)(4636009)(376002)(346002)(39860400002)(396003)(136003)(230922051799003)(82310400011)(1800799012)(64100799003)(186009)(451199024)(40470700004)(46966006)(36840700001)(478600001)(7636003)(336012)(6286002)(26005)(47076005)(6666004)(7696005)(426003)(356005)(1076003)(40480700001)(82740400003)(36756003)(107886003)(2616005)(316002)(6916009)(54906003)(70206006)(70586007)(36860700001)(55016003)(5660300002)(4326008)(86362001)(2906002)(8936002)(8676002)(40460700003)(41300700001); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2023 11:26:31.7445 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3077f2db-d632-49dd-e040-08dbf3f2b34c 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.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000042AC.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB5746 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 This patch adds the GENEVE option sample ID into HCA attribute structure. This sample ID is used as the input of "mlx5_devx_cmd_match_sample_info_query" function when flex parser profile is 1. Signed-off-by: Michael Baum --- drivers/common/mlx5/mlx5_devx_cmds.c | 2 ++ drivers/common/mlx5/mlx5_devx_cmds.h | 1 + 2 files changed, 3 insertions(+) diff --git a/drivers/common/mlx5/mlx5_devx_cmds.c b/drivers/common/mlx5/mlx5_devx_cmds.c index b30f54ab1c..332aebbe57 100644 --- a/drivers/common/mlx5/mlx5_devx_cmds.c +++ b/drivers/common/mlx5/mlx5_devx_cmds.c @@ -973,6 +973,8 @@ mlx5_devx_cmd_query_hca_attr(void *ctx, geneve_tlv_sample); attr->query_match_sample_info = MLX5_GET(cmd_hca_cap, hcattr, query_match_sample_info); + attr->geneve_tlv_option_sample_id = MLX5_GET(cmd_hca_cap, hcattr, + flex_parser_id_geneve_opt_0); attr->qos.sup = MLX5_GET(cmd_hca_cap, hcattr, qos); attr->wqe_index_ignore = MLX5_GET(cmd_hca_cap, hcattr, wqe_index_ignore_cap); diff --git a/drivers/common/mlx5/mlx5_devx_cmds.h b/drivers/common/mlx5/mlx5_devx_cmds.h index 3f294e8f04..1daf2fcca4 100644 --- a/drivers/common/mlx5/mlx5_devx_cmds.h +++ b/drivers/common/mlx5/mlx5_devx_cmds.h @@ -216,6 +216,7 @@ struct mlx5_hca_attr { uint32_t max_geneve_tlv_option_data_len:5; uint32_t geneve_tlv_sample:1; uint32_t geneve_tlv_option_offset:1; + uint32_t geneve_tlv_option_sample_id:4; uint32_t hairpin:1; uint32_t log_max_hairpin_queues:5; uint32_t log_max_hairpin_wq_data_sz:5; From patchwork Sun Dec 3 11:25:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 134758 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 15C024365F; Sun, 3 Dec 2023 12:27:46 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7AAE240DDC; Sun, 3 Dec 2023 12:26:39 +0100 (CET) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2078.outbound.protection.outlook.com [40.107.94.78]) by mails.dpdk.org (Postfix) with ESMTP id EC66E40A81 for ; Sun, 3 Dec 2023 12:26:35 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TWqZ/Lqy2KlXJOLnQoMSe9ukyab2tDtW6qaMbEK4HDDSi5thJ+HMK5638vrxYTu+FY4583AT1OAWexOUhnwsLgaNJYwH1FEvY1z+gwyXOg4z+cr/LS5fE9R0a7jbGadbt9x4QlPELFsuh3onN6W2sBEyRpR3we2p6hogiT6kEgNbWILxCBJuC/atMC3K5QyemBXF/UvDfblkbrC54WXjuQtJrV0dKTK4POzy5b7rkh9jJ8onWMrt1eaTP5+bldPh57om8rP1k3d/A5/3Z8wTf4Qoip8G5Ton9hUrSfpHDUuLz93THkKjy4UDXqvbKUD/P5+PDk43Q0BwtBOMDIXSzQ== 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=sjwCDLYBG3snhzVVSX2oVs+7vcXkWs+RLfp5EWMuP1U=; b=gVW0HC/fVyMeG/zJXqr0LkRl8tQtp9Sxhr45NlS87oSqIy+UmrNUW9BF2jWCcIP0424ms0RMiLHryntwJ0twBSF4s44iZrLE2nIlpW8e3EwJolSBaGUKpp9a9FudPK+B/NmvslMN5YrJpGMTYizjIJDps/aByLh4WYFENAk388FjpXW6sBQFMd7z839FM2IJNuR7XmIrOOwxgTSTtJ1Kdgt4FEp7W9RvsVPvJyhT8Y6KSXiRE54jqp5D7JKiNiR6spGj9oAPMwG4SpUZ9c1pyvZntCGCQOkbULHr9TawrwxR8Hb5BVtqCXV/VvbO2L2esLQIXd4VTfLWD6BuBNlR2Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) 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 (0) 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=sjwCDLYBG3snhzVVSX2oVs+7vcXkWs+RLfp5EWMuP1U=; b=Wumsgh9iSkOPY3PuwT840u7EFlr2rJ8g2QGlMOGmw+ZnFN2LPaG4s+VBa1FH5k7tJCFLG1wir23v82MaB/5LJTYxWBK76qXzdAg1YbwUmlae0723YS3ieUC+c4jBUCZIYEjFgAz/A4jw1zEUUanEXUynTGncD5FI3dGSFtIgsFC9wQUF9trvBWz63r3TndVUX+H1QFkUQm4C6lr/hdcwF4wURlBBEMvR+4NrKhDZ49WDcTjdMHvMm7mP7z1fC7QsdWn17Ayreb151FwmEL6rvoCsXZEMNtDXHnnoGZgFNPp5ERqFP/31LPw0tazgd+av7x9ofNQPLV0LeZ6GX/xiDg== Received: from MW4PR04CA0203.namprd04.prod.outlook.com (2603:10b6:303:86::28) by BN9PR12MB5052.namprd12.prod.outlook.com (2603:10b6:408:135::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32; Sun, 3 Dec 2023 11:26:33 +0000 Received: from CO1PEPF000042AB.namprd03.prod.outlook.com (2603:10b6:303:86:cafe::7f) by MW4PR04CA0203.outlook.office365.com (2603:10b6:303:86::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.30 via Frontend Transport; Sun, 3 Dec 2023 11:26:32 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CO1PEPF000042AB.mail.protection.outlook.com (10.167.243.40) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.20 via Frontend Transport; Sun, 3 Dec 2023 11:26:32 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:26:16 -0800 Received: from rnnvmail205.nvidia.com (10.129.68.10) 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.41; Sun, 3 Dec 2023 03:26:15 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41 via Frontend Transport; Sun, 3 Dec 2023 03:26:14 -0800 From: Michael Baum To: CC: Matan Azrad , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou Subject: [PATCH v1 11/23] common/mlx5: add function to query GENEVE TLV option Date: Sun, 3 Dec 2023 13:25:31 +0200 Message-ID: <20231203112543.844014-12-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231203112543.844014-1-michaelba@nvidia.com> References: <20231203112543.844014-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000042AB:EE_|BN9PR12MB5052:EE_ X-MS-Office365-Filtering-Correlation-Id: a8453175-65ee-4d32-e76e-08dbf3f2b3df X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3WV3zLDMp7Pwfq6chtPHLn+8C1uPaRoWgKni7PxTjmtJMJ2kLqdo0vZ+KkTBUjeIFxXkryYORZpjihHh/3j5zJPvFRl9Jea5Yb3XIx4D3QqxbTn62o1HizT0pkYmEaaBG7mkvs7aTIonVH8IBMXPub3oi0emHMRQ/FzTS1RxruEUDRMBLyQazojPQaWEez9XCMxyIILPqz/yWk6siTLmFJGYtoU+BD/gr8zFXj8vznMxZr04Gkwk7y+7R3jHsMLH2bQrNdVe0qGVWmNcls6UgvgWQnhu89pNRcqMedsEo9BoZfIBKNWPI/Z9zCk0u/HfW+wLTKH6X3d4yIpKpV/CNwrF3LxWh9MhubyQfwW+M1chaag5kH/PjciqWxFUy7UZlfOgpf/TatGEupL910xn3Y5WrY9FBGAdrsY4t3XmBqhu/EcVbwaxJp7K0Q2GOP+/DLc8dq3bAoPLKL65Dt6noetoJgBk7gxiYJ7sTu2su3xY2cc47xqroQAFES/iLGdH1VRGeP0YzOChHDWAwQwjBWxvPgSnShAV/hjkxZW77b+qCoNxDcpgRngIvNl3safxf8epYvgy8dZoR+6YMpBLbrHwArVKbpv1eB2CxeFwBj2paeMtbG8cmSRD3t1mzgthKozQ/GPyHGqidZTz+EEAK0Z+waq7vTZ4QzyZYzCTkYBsyKEDgztlV11XiapGJHg9tJCNhxjVuI5ElVEfg6ZRWd0GE0l0Rg9CDhsgCx0104dq3arkKPWDZyQR07rl1mDL X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230031)(4636009)(346002)(376002)(39860400002)(136003)(396003)(230922051799003)(186009)(451199024)(1800799012)(82310400011)(64100799003)(36840700001)(46966006)(40470700004)(1076003)(426003)(336012)(6286002)(26005)(55016003)(82740400003)(6666004)(478600001)(107886003)(2616005)(7696005)(40480700001)(8936002)(70206006)(70586007)(6916009)(54906003)(4326008)(316002)(8676002)(36860700001)(356005)(7636003)(47076005)(41300700001)(40460700003)(2906002)(5660300002)(86362001)(36756003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2023 11:26:32.6925 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a8453175-65ee-4d32-e76e-08dbf3f2b3df 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.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000042AB.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN9PR12MB5052 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 Add a new function to query information about GENEVE TLV option parser. Signed-off-by: Michael Baum --- drivers/common/mlx5/mlx5_devx_cmds.c | 50 ++++++++++++++++++++++++++++ drivers/common/mlx5/mlx5_devx_cmds.h | 6 ++++ drivers/common/mlx5/mlx5_prm.h | 5 +++ drivers/common/mlx5/version.map | 1 + 4 files changed, 62 insertions(+) diff --git a/drivers/common/mlx5/mlx5_devx_cmds.c b/drivers/common/mlx5/mlx5_devx_cmds.c index 332aebbe57..1fa75cd964 100644 --- a/drivers/common/mlx5/mlx5_devx_cmds.c +++ b/drivers/common/mlx5/mlx5_devx_cmds.c @@ -2915,6 +2915,56 @@ mlx5_devx_cmd_create_geneve_tlv_option(void *ctx, return geneve_tlv_opt_obj; } +/** + * Query GENEVE TLV option using DevX API. + * + * @param[in] ctx + * Context used to create GENEVE TLV option object. + * @param[in] geneve_tlv_opt_obj + * DevX object of the GENEVE TLV option. + * @param[out] attr + * Pointer to match sample info attributes structure. + * + * @return + * 0 on success, a negative errno otherwise and rte_errno is set. + */ +int +mlx5_devx_cmd_query_geneve_tlv_option(void *ctx, + struct mlx5_devx_obj *geneve_tlv_opt_obj, + struct mlx5_devx_match_sample_info_query_attr *attr) +{ + uint32_t in[MLX5_ST_SZ_DW(general_obj_in_cmd_hdr)] = {0}; + uint32_t out[MLX5_ST_SZ_DW(query_geneve_tlv_option_out)] = {0}; + void *hdr = MLX5_ADDR_OF(query_geneve_tlv_option_out, in, hdr); + void *opt = MLX5_ADDR_OF(query_geneve_tlv_option_out, out, + geneve_tlv_opt); + int ret; + + MLX5_SET(general_obj_in_cmd_hdr, hdr, opcode, + MLX5_CMD_OP_QUERY_GENERAL_OBJECT); + MLX5_SET(general_obj_in_cmd_hdr, hdr, obj_type, + MLX5_GENERAL_OBJ_TYPE_GENEVE_TLV_OPT); + MLX5_SET(general_obj_in_cmd_hdr, hdr, obj_id, geneve_tlv_opt_obj->id); + /* Call first query to get sample handle. */ + ret = mlx5_glue->devx_obj_query(geneve_tlv_opt_obj->obj, in, sizeof(in), + out, sizeof(out)); + if (ret) { + DRV_LOG(ERR, "Failed to query GENEVE TLV option using DevX."); + rte_errno = errno; + return -errno; + } + /* Call second query to get sample information. */ + if (MLX5_GET(geneve_tlv_option, opt, sample_id_valid)) { + uint32_t sample_id = MLX5_GET(geneve_tlv_option, opt, + geneve_sample_field_id); + + return mlx5_devx_cmd_match_sample_info_query(ctx, sample_id, + attr); + } + DRV_LOG(DEBUG, "GENEVE TLV option sample isn't valid."); + return 0; +} + int mlx5_devx_cmd_wq_query(void *wq, uint32_t *counter_set_id) { diff --git a/drivers/common/mlx5/mlx5_devx_cmds.h b/drivers/common/mlx5/mlx5_devx_cmds.h index 1daf2fcca4..6161c275da 100644 --- a/drivers/common/mlx5/mlx5_devx_cmds.h +++ b/drivers/common/mlx5/mlx5_devx_cmds.h @@ -794,6 +794,12 @@ struct mlx5_devx_obj * mlx5_devx_cmd_create_geneve_tlv_option(void *ctx, struct mlx5_devx_geneve_tlv_option_attr *attr); +__rte_internal +int +mlx5_devx_cmd_query_geneve_tlv_option(void *ctx, + struct mlx5_devx_obj *geneve_tlv_opt_obj, + struct mlx5_devx_match_sample_info_query_attr *attr); + /** * Create virtio queue counters object DevX API. * diff --git a/drivers/common/mlx5/mlx5_prm.h b/drivers/common/mlx5/mlx5_prm.h index 59643a8788..7c36961564 100644 --- a/drivers/common/mlx5/mlx5_prm.h +++ b/drivers/common/mlx5/mlx5_prm.h @@ -3721,6 +3721,11 @@ struct mlx5_ifc_create_geneve_tlv_option_in_bits { struct mlx5_ifc_geneve_tlv_option_bits geneve_tlv_opt; }; +struct mlx5_ifc_query_geneve_tlv_option_out_bits { + struct mlx5_ifc_general_obj_in_cmd_hdr_bits hdr; + struct mlx5_ifc_geneve_tlv_option_bits geneve_tlv_opt; +}; + struct mlx5_ifc_create_rtc_in_bits { struct mlx5_ifc_general_obj_in_cmd_hdr_bits hdr; struct mlx5_ifc_rtc_bits rtc; diff --git a/drivers/common/mlx5/version.map b/drivers/common/mlx5/version.map index 074eed46fd..589a450145 100644 --- a/drivers/common/mlx5/version.map +++ b/drivers/common/mlx5/version.map @@ -54,6 +54,7 @@ INTERNAL { mlx5_devx_cmd_modify_tir; mlx5_devx_cmd_modify_virtq; mlx5_devx_cmd_qp_query_tis_td; + mlx5_devx_cmd_query_geneve_tlv_option; mlx5_devx_cmd_query_hca_attr; mlx5_devx_cmd_query_lag; mlx5_devx_cmd_query_parse_samples; From patchwork Sun Dec 3 11:25:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 134754 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 AAD2A4365F; Sun, 3 Dec 2023 12:27:16 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 954AD406FF; Sun, 3 Dec 2023 12:26:31 +0100 (CET) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2071.outbound.protection.outlook.com [40.107.93.71]) by mails.dpdk.org (Postfix) with ESMTP id B0A74406FF for ; Sun, 3 Dec 2023 12:26:30 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UQ/iWGhHhDeSfXyGY/4AbG9TJqI8NL8F6nagq0qtL6UVKzatj6oyfq2BAP9Kh9smcvzqJbQn+bmCAZNnlrDeGzG65CAxnz8zMUxSr67dSNgyHAq2u1jdWMJaccAS125cuD1/2OEkZvm14aqzNa/J1btzB2EES67cQ12tZrXL4g/qNtJPeAIo/q7jALLL+vZ25XRHg4mQwSR05pKwwrDvfYJ88QhPJPTDFog6dz3QAG6RIl7EmgJqEL5XijMgzoomlemxqcE4fv1GMy9/i8LBko2NYMCdIKUPLGCGapefU7OjF1wd+1TGgiatHDdUVks3LSYef5aKM0ovcNOjeLI5SA== 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=i7U4O6jAaafQvmSGv9+5GQyMSdIh9qK1cyO/6ndG8jQ=; b=YBwE4G/sQnXRGIY/KQgBYyuMJCt2vkCLlGJc0+U4ETtPrTM1Zth2g3/IIe5d8Srd7qCDBZgTE1ZZiSSe30qkBuXv9tQnlulS85EmD83aUHh26rd34tY9JhUH/tMReGr8nBMPg0KgyiJdEAb4lIE2r1/9z4RoA5Z+0E9yr1rE1wnRLrJJg/vzjE4+2puTTFcD1VpV7Fahxz+nq4DI20SSWHUx8rbUKIjrrwSfjluJkUxoI7IT5QWu/n1Vs7aOOBhxFiGXzP28waJ3VwLE3VHNhqrp+Fcg1zW5yweM0NwCQnHbO+9LQPE0duBYPqiC3hwXmSqsE2e8PrAU9DzWq/j5pA== 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 (0) 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=i7U4O6jAaafQvmSGv9+5GQyMSdIh9qK1cyO/6ndG8jQ=; b=iWleCqKizAnLmlmqRYzY894iYxs4JsX/b2CoJmOVKckEXXCZkbufSrIt/McPuJWhA2DXc11GDwp4rA9U4aDd8URQB6rAhCuq3CK95dmBCpZbrTYwi0ah5qACRlBKhuFxLtiklRTQsoET/+J4CFcfdgGgtZR5Jo9zANUdxazDZWlrmYMloXzwfyJaSelaCbOf69zI5lHaoshred1eKl3I7IsoeyFHmBXAEed7OPplL12snm+OGEpu/pat5m5mEd2FKZbNXyXVCO6JZ79Q4/Pm30Ub8w4EnIkBOIc74cqfLw2tAE9WiZnfFswpDVInkIcMgjQwvvViBLSFA5Ns/fOZ8A== Received: from DM6PR02CA0112.namprd02.prod.outlook.com (2603:10b6:5:1b4::14) by MW3PR12MB4505.namprd12.prod.outlook.com (2603:10b6:303:5a::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.33; Sun, 3 Dec 2023 11:26:27 +0000 Received: from DS1PEPF0001709A.namprd05.prod.outlook.com (2603:10b6:5:1b4:cafe::7a) by DM6PR02CA0112.outlook.office365.com (2603:10b6:5:1b4::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32 via Frontend Transport; Sun, 3 Dec 2023 11:26:27 +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 DS1PEPF0001709A.mail.protection.outlook.com (10.167.18.104) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.20 via Frontend Transport; Sun, 3 Dec 2023 11:26:27 +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.41; Sun, 3 Dec 2023 03:26:18 -0800 Received: from rnnvmail205.nvidia.com (10.129.68.10) 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.41; Sun, 3 Dec 2023 03:26:18 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41 via Frontend Transport; Sun, 3 Dec 2023 03:26:16 -0800 From: Michael Baum To: CC: Matan Azrad , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou Subject: [PATCH v1 12/23] net/mlx5: add physical device handle Date: Sun, 3 Dec 2023 13:25:32 +0200 Message-ID: <20231203112543.844014-13-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231203112543.844014-1-michaelba@nvidia.com> References: <20231203112543.844014-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF0001709A:EE_|MW3PR12MB4505:EE_ X-MS-Office365-Filtering-Correlation-Id: 761e45e2-a11c-403b-5595-08dbf3f2b093 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: MC8kHHkSos50Ug/aqRtwsfToD/1Z6IPs2PFvvsNsmtCkdFvij58Al9BrbZ5lZWfQNAhZ+Tl5RTGLRszyI9T/WY6JCv9WiAgl/oRftRXh9xeK8dTuAVUuAgXIEZpCIs+r0PjcOXJ1M746SyqJGM6vJt03Nfnrxn6BP3s3BXnvPP9HAwL9RFx/+UZ6LFsXe/7v3HsV3X2FYkq/QVYQCpvk/qioKbKIVbGDtRBfY/qXxieRQk+uPdolyg7NXfTdNYs4UsSXI8LqsJbfngSGmKgtkOUP3PttNRy5rjRrQZsWl7ihDoKLNcWXQ1fcVSy0VPZj8OJ2Ye+2USYtwQwtMKjoO90Zxmiw5o3ufMIuViVPQMF5O68YKV0GYEvNwU0nkFX+wA2tEkuDeBmvIh1SQtE13FYkQxSvqZwdqUBgF7SSjsow18Xq5NH7DkpxHBXMFcoywARW9udKTC5fhCCdnXdqdTU9WxM1tB1ZyIIIgy2CkVFoEDKGbeyutPGx+ha67EncI+R6pDhkxbnqIGs9z2yis4SPVSYqK4djui4Fb70P/hw1PFbHGnTJ1vQnFVag3gF47R6718J7N2m2X1wWmfmfgW0LNjyHbNM3xX9eSqC0cBcxVXyxvTjvDuZ4QRou1wBjwrhh2NYe5q+a/yruTLLh6h3e+6tt601Q52Z9tSvK5uhOx8Y8uBPOWXvKqBxvJPP4X9iwjtElXj2kul2hSCshEmCzMQRBY3rKOjM60/S++9DYEMQWp93e1lyq1W/MmXRD 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:(13230031)(4636009)(136003)(396003)(39860400002)(346002)(376002)(230922051799003)(186009)(64100799003)(451199024)(82310400011)(1800799012)(36840700001)(46966006)(40470700004)(5660300002)(40460700003)(86362001)(4326008)(8676002)(8936002)(2906002)(41300700001)(36756003)(2616005)(107886003)(40480700001)(1076003)(356005)(82740400003)(426003)(83380400001)(7636003)(26005)(6286002)(336012)(478600001)(7696005)(6666004)(47076005)(36860700001)(55016003)(316002)(54906003)(6916009)(70206006)(70586007); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2023 11:26:27.1731 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 761e45e2-a11c-403b-5595-08dbf3f2b093 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: DS1PEPF0001709A.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW3PR12MB4505 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 Add structure describing physical device, and manage physical device global list. Signed-off-by: Michael Baum --- drivers/net/mlx5/mlx5.c | 77 ++++++++++++++++++++++++++++++++++++----- drivers/net/mlx5/mlx5.h | 13 +++++++ 2 files changed, 82 insertions(+), 8 deletions(-) diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index 3a182de248..f9fc652136 100644 --- a/drivers/net/mlx5/mlx5.c +++ b/drivers/net/mlx5/mlx5.c @@ -190,9 +190,10 @@ struct mlx5_shared_data *mlx5_shared_data; /** Driver-specific log messages type. */ int mlx5_logtype; -static LIST_HEAD(, mlx5_dev_ctx_shared) mlx5_dev_ctx_list = - LIST_HEAD_INITIALIZER(); +static LIST_HEAD(mlx5_dev_ctx_list, mlx5_dev_ctx_shared) dev_ctx_list = LIST_HEAD_INITIALIZER(); +static LIST_HEAD(mlx5_phdev_list, mlx5_physical_device) phdev_list = LIST_HEAD_INITIALIZER(); static pthread_mutex_t mlx5_dev_ctx_list_mutex; + static const struct mlx5_indexed_pool_config mlx5_ipool_cfg[] = { #if defined(HAVE_IBV_FLOW_DV_SUPPORT) || !defined(HAVE_INFINIBAND_VERBS_H) [MLX5_IPOOL_DECAP_ENCAP] = { @@ -1692,6 +1693,60 @@ mlx5_init_shared_dev_registers(struct mlx5_dev_ctx_shared *sh) mlx5_init_hws_flow_tags_registers(sh); } +static struct mlx5_physical_device * +mlx5_get_physical_device(struct mlx5_common_device *cdev) +{ + struct mlx5_physical_device *phdev; + struct mlx5_hca_attr *attr = &cdev->config.hca_attr; + + /* Search for physical device by system_image_guid. */ + LIST_FOREACH(phdev, &phdev_list, next) { + if (phdev->guid == attr->system_image_guid) { + phdev->refcnt++; + return phdev; + } + } + phdev = mlx5_malloc(MLX5_MEM_ZERO | MLX5_MEM_RTE, + sizeof(struct mlx5_physical_device), + RTE_CACHE_LINE_SIZE, SOCKET_ID_ANY); + if (!phdev) { + DRV_LOG(ERR, "Physical device allocation failure."); + rte_errno = ENOMEM; + return NULL; + } + phdev->guid = attr->system_image_guid; + phdev->refcnt = 1; + LIST_INSERT_HEAD(&phdev_list, phdev, next); + DRV_LOG(DEBUG, "Physical device is created, guid=%" PRIu64 ".", + phdev->guid); + return phdev; +} + +static void +mlx5_physical_device_destroy(struct mlx5_physical_device *phdev) +{ +#ifdef RTE_LIBRTE_MLX5_DEBUG + /* Check the object presence in the list. */ + struct mlx5_physical_device *lphdev; + + LIST_FOREACH(lphdev, &phdev_list, next) + if (lphdev == phdev) + break; + MLX5_ASSERT(lphdev); + if (lphdev != phdev) { + DRV_LOG(ERR, "Freeing non-existing physical device"); + return; + } +#endif + MLX5_ASSERT(phdev); + MLX5_ASSERT(phdev->refcnt); + if (--phdev->refcnt) + return; + /* Remove physical device from the global device list. */ + LIST_REMOVE(phdev, next); + mlx5_free(phdev); +} + /** * Allocate shared device context. If there is multiport device the * master and representors will share this context, if there is single @@ -1725,7 +1780,7 @@ mlx5_alloc_shared_dev_ctx(const struct mlx5_dev_spawn_data *spawn, MLX5_ASSERT(rte_eal_process_type() == RTE_PROC_PRIMARY); pthread_mutex_lock(&mlx5_dev_ctx_list_mutex); /* Search for IB context by device name. */ - LIST_FOREACH(sh, &mlx5_dev_ctx_list, next) { + LIST_FOREACH(sh, &dev_ctx_list, next) { if (!strcmp(sh->ibdev_name, spawn->phys_dev_name)) { sh->refcnt++; goto exit; @@ -1765,6 +1820,9 @@ mlx5_alloc_shared_dev_ctx(const struct mlx5_dev_spawn_data *spawn, sizeof(sh->ibdev_name) - 1); strncpy(sh->ibdev_path, mlx5_os_get_ctx_device_path(sh->cdev->ctx), sizeof(sh->ibdev_path) - 1); + sh->phdev = mlx5_get_physical_device(sh->cdev); + if (!sh->phdev) + goto error; /* * Setting port_id to max unallowed value means there is no interrupt * subhandler installed for the given port index i. @@ -1798,7 +1856,7 @@ mlx5_alloc_shared_dev_ctx(const struct mlx5_dev_spawn_data *spawn, #endif } mlx5_os_dev_shared_handler_install(sh); - if (LIST_EMPTY(&mlx5_dev_ctx_list)) { + if (LIST_EMPTY(&dev_ctx_list)) { err = mlx5_flow_os_init_workspace_once(); if (err) goto error; @@ -1811,7 +1869,7 @@ mlx5_alloc_shared_dev_ctx(const struct mlx5_dev_spawn_data *spawn, mlx5_flow_aging_init(sh); mlx5_flow_ipool_create(sh); /* Add context to the global device list. */ - LIST_INSERT_HEAD(&mlx5_dev_ctx_list, sh, next); + LIST_INSERT_HEAD(&dev_ctx_list, sh, next); rte_spinlock_init(&sh->geneve_tlv_opt_sl); mlx5_init_shared_dev_registers(sh); /* Init counter pool list header and lock. */ @@ -1833,6 +1891,8 @@ mlx5_alloc_shared_dev_ctx(const struct mlx5_dev_spawn_data *spawn, } while (++i <= (uint32_t)sh->bond.n_port); if (sh->td) claim_zero(mlx5_devx_cmd_destroy(sh->td)); + if (sh->phdev) + mlx5_physical_device_destroy(sh->phdev); mlx5_free(sh); rte_errno = err; return NULL; @@ -1919,7 +1979,7 @@ mlx5_free_shared_dev_ctx(struct mlx5_dev_ctx_shared *sh) /* Check the object presence in the list. */ struct mlx5_dev_ctx_shared *lctx; - LIST_FOREACH(lctx, &mlx5_dev_ctx_list, next) + LIST_FOREACH(lctx, &dev_ctx_list, next) if (lctx == sh) break; MLX5_ASSERT(lctx); @@ -1945,7 +2005,7 @@ mlx5_free_shared_dev_ctx(struct mlx5_dev_ctx_shared *sh) /* Remove context from the global device list. */ LIST_REMOVE(sh, next); /* Release resources on the last device removal. */ - if (LIST_EMPTY(&mlx5_dev_ctx_list)) { + if (LIST_EMPTY(&dev_ctx_list)) { mlx5_os_net_cleanup(); mlx5_flow_os_release_workspace(); } @@ -1985,6 +2045,7 @@ mlx5_free_shared_dev_ctx(struct mlx5_dev_ctx_shared *sh) MLX5_ASSERT(sh->geneve_tlv_option_resource == NULL); pthread_mutex_destroy(&sh->txpp.mutex); mlx5_lwm_unset(sh); + mlx5_physical_device_destroy(sh->phdev); mlx5_free(sh); return; exit: @@ -2929,7 +2990,7 @@ mlx5_probe_again_args_validate(struct mlx5_common_device *cdev, return 0; pthread_mutex_lock(&mlx5_dev_ctx_list_mutex); /* Search for IB context by common device pointer. */ - LIST_FOREACH(sh, &mlx5_dev_ctx_list, next) + LIST_FOREACH(sh, &dev_ctx_list, next) if (sh->cdev == cdev) break; pthread_mutex_unlock(&mlx5_dev_ctx_list_mutex); diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index 263ebead7f..6a82c38cf4 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -1419,6 +1419,18 @@ struct mlx5_dev_registers { #define HAVE_MLX5_DR_CREATE_ACTION_ASO_EXT #endif +/** + * Physical device structure. + * This device is created once per NIC to manage recourses shared by all ports + * under same physical device. + */ +struct mlx5_physical_device { + LIST_ENTRY(mlx5_physical_device) next; + struct mlx5_dev_ctx_shared *sh; /* Created on sherd context. */ + uint64_t guid; /* System image guid, the uniq ID of physical device. */ + uint32_t refcnt; +}; + /* * Shared Infiniband device context for Master/Representors * which belong to same IB device with multiple IB ports. @@ -1449,6 +1461,7 @@ struct mlx5_dev_ctx_shared { uint32_t max_port; /* Maximal IB device port index. */ struct mlx5_bond_info bond; /* Bonding information. */ struct mlx5_common_device *cdev; /* Backend mlx5 device. */ + struct mlx5_physical_device *phdev; /* Backend physical device. */ uint32_t tdn; /* Transport Domain number. */ char ibdev_name[MLX5_FS_NAME_MAX]; /* SYSFS dev name. */ char ibdev_path[MLX5_FS_PATH_MAX]; /* SYSFS dev path for secondary */ From patchwork Sun Dec 3 11:25:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 134761 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 C8D174365F; Sun, 3 Dec 2023 12:28:04 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id F0AD240649; Sun, 3 Dec 2023 12:26:45 +0100 (CET) Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on2078.outbound.protection.outlook.com [40.107.96.78]) by mails.dpdk.org (Postfix) with ESMTP id E48FA402BB for ; Sun, 3 Dec 2023 12:26:42 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bTWCtiisj+k5+771U8nSKPYqdcmNRMIXSgTlccZzhcr99rNgprnfYO0aVQy2R5Z4DjsgJKp6535/njttRAlQYi0kFdbCjRTSTWOkdyeyhv/6seh4qVJSfDfYiaOj4t/kCPEz6jIer8p+iPdmlC3RKd6Isse76KFs0GtMLWEySGPl5dV/3A+OoCfYHLDiXSmlb+V030tggryoqK6UjR3cG9wNExQYaTGzi9ksbCMpSHn6RFcU3Rdpiu9bmCE7EUwsmE0LYJVeeRwZ+A+GP7XcARPNtA8OfBFbcfIFW3bpcRnYmABlU9dpf+K8XwsbJ0w2dTFcoKqqbuVLqxePVzLFwA== 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=OpBo2w4slCEL9KcWbywUvH8PfP/DM+4pBuRhXDiSxSI=; b=EEtS0oeWoAnesMG7JohF/S6VXSdCp5gf6WdMZ2N9iLpUhJGyc3tKpP5ehGuiD8RLwbO2OPW5hGk0SpZ6ejh7STbtLy4Njbpp6XNVBkapQjmUrs4dfcfmyGFyiQNjaW4EZjccsVG+CzXn40c/cei869gealLcs6sNAoIKGXWZBWPlgH+lnbasGM6S9pHR8kzxuAVTm+1tf+GLuiCuNz+xsDUwPILjqVRNpYL1ENJMRM0iCKlH/upnVagNUcbWuCKwwRfsgvTrmULv+wYYPLOsN0/jQs3b48e1ZN1Zm3t7mwGL5KyxNJFvkYKjdZLcwNieJCigpTqnv9ipEnzO6kbl/A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) 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 (0) 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=OpBo2w4slCEL9KcWbywUvH8PfP/DM+4pBuRhXDiSxSI=; b=dXlgVMlr0XDrrbzYbCd0sxmuIGEvtJjPEPiE6Y/9/Mik6uD32p2mYdW6Ed45P5z0BfxrBVxI3RqphLb7cja+iT1yHRV/jbG81mvisZ6cLRzxz+6ZUip4KS/gY4mVTDTKpXAoU34pVgtvsujIewhozkSmdiH1NXpZLxxe0T/7U3VR8Y+CEkybebq6iNMHOpcvASg0dRdgimnJ/bpnMA/gZeKmDVj5VDyocGNYYyj+sxorTk7yMyo2xZ47Eh0A+GvPerotmT2qzulmcLHTACAdpCayKceZbQQoS0w8yWPfBKaBQWtayQYyXbhbkq0s6nPf+zAq4M1CKn5i7vMdvsr3Dw== Received: from MW4P222CA0024.NAMP222.PROD.OUTLOOK.COM (2603:10b6:303:114::29) by IA1PR12MB6020.namprd12.prod.outlook.com (2603:10b6:208:3d4::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.33; Sun, 3 Dec 2023 11:26:38 +0000 Received: from CO1PEPF000042AC.namprd03.prod.outlook.com (2603:10b6:303:114:cafe::6b) by MW4P222CA0024.outlook.office365.com (2603:10b6:303:114::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32 via Frontend Transport; Sun, 3 Dec 2023 11:26:38 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CO1PEPF000042AC.mail.protection.outlook.com (10.167.243.41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.20 via Frontend Transport; Sun, 3 Dec 2023 11:26:37 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:26:22 -0800 Received: from rnnvmail205.nvidia.com (10.129.68.10) 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.41; Sun, 3 Dec 2023 03:26:20 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41 via Frontend Transport; Sun, 3 Dec 2023 03:26:18 -0800 From: Michael Baum To: CC: Matan Azrad , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou Subject: [PATCH v1 13/23] net/mlx5: add GENEVE TLV options parser API Date: Sun, 3 Dec 2023 13:25:33 +0200 Message-ID: <20231203112543.844014-14-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231203112543.844014-1-michaelba@nvidia.com> References: <20231203112543.844014-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000042AC:EE_|IA1PR12MB6020:EE_ X-MS-Office365-Filtering-Correlation-Id: ee3fbf73-dd9b-4484-1b18-08dbf3f2b6f1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: t+pEv6/TZcYIPlJcfUKElODar3hXpid4Tqblv3Lmu8ufEd9IFOFO/4+oB8yg/I9tZ8h3YT+rraLD6PdZ46tLZxF3K4CFzr80glbWsYqxYd2R6pX/R/6+/b5kh43+1w+TpMGOBvWgm9gKQftxmgvVWFTFuy4qKFVwtzkhrpmtWmUiEcpDDPz8P0VMUdafGTM0t2x11zcLov2EQVeXP9Itkxge41XnfEyuCka8e59E7QwJ0YniqMPavO+WUMlgLm/4AcJ7fg0cnlY3qLAicmq1okU5UGMKC5MbmqcoR1/PCcnMfi/7/40d/vZI+L+csxrJmePTs596wLH2aAn6KcOSkUIATeFOrzGuo/s1sNU5j0Y9Uzu1u5FU+eib+rtPXde/Zc2lJZPBFcqsBmnRYKrZRt2AJ0WlS8UMjj6eBz2K1oLgInP2roOcjug982ICX3b8hbmTaxFZ+Nr5rNYlOzPU9IN+CaeLwGRkSECVkWYcjpTveOsZjpk7OJlNzR0Rj7J88gwIbbSwuF5m9EQffo4gS/80+c1uLKq+Cb6yj3sc4lWMk9Bcj4a/sgoosuoI7xjL7g0E2pFatKrGpNkRLtIchrmizeuzaB/0sVyTR6YQbLoUJYjtjChO7pCZ4ffdj/N7fnFOpnyV9i511XGK8i9NTh8T9ON/v56RJnu76iNkDGIurQUmzjKpSEcrE/cIg6EMb66tFBPmPcekqis301z5keyRIso1YfdB26DcMowj2uva+OuivOuiMQT5CAOUNbHVEqrxgPKt/+IDQ7OGrSfW6ci383kH9fY2a/Q9A1jdTG50XA7Y6WjnEsh18KZKJ4SCTkSES9LtHiWrEH3B5PdhoS33UUKt4TQ2cPI9FGPqln4= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230031)(4636009)(376002)(346002)(39860400002)(396003)(136003)(230273577357003)(230173577357003)(230922051799003)(64100799003)(82310400011)(186009)(451199024)(1800799012)(36840700001)(46966006)(40470700004)(70586007)(70206006)(54906003)(316002)(6916009)(478600001)(40460700003)(6666004)(30864003)(5660300002)(41300700001)(36756003)(2906002)(86362001)(4326008)(8676002)(8936002)(107886003)(1076003)(2616005)(36860700001)(83380400001)(40480700001)(47076005)(7636003)(55016003)(356005)(26005)(6286002)(336012)(426003)(82740400003)(7696005)(21314003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2023 11:26:37.8540 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ee3fbf73-dd9b-4484-1b18-08dbf3f2b6f1 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.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000042AC.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB6020 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 Add a new private API to create/destroy parser for GENEVE TLV options. Signed-off-by: Michael Baum Signed-off-by: Viacheslav Ovsiienko --- doc/guides/nics/mlx5.rst | 122 ++++++ doc/guides/platform/mlx5.rst | 6 +- drivers/net/mlx5/meson.build | 1 + drivers/net/mlx5/mlx5.c | 30 +- drivers/net/mlx5/mlx5.h | 8 + drivers/net/mlx5/mlx5_flow.c | 30 ++ drivers/net/mlx5/mlx5_flow.h | 18 + drivers/net/mlx5/mlx5_flow_geneve.c | 627 ++++++++++++++++++++++++++++ drivers/net/mlx5/rte_pmd_mlx5.h | 102 +++++ drivers/net/mlx5/version.map | 3 + 10 files changed, 945 insertions(+), 2 deletions(-) create mode 100644 drivers/net/mlx5/mlx5_flow_geneve.c diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst index 6b52fb93c5..80446d8d82 100644 --- a/doc/guides/nics/mlx5.rst +++ b/doc/guides/nics/mlx5.rst @@ -2298,6 +2298,128 @@ and disables ``avail_thresh_triggered``. testpmd> mlx5 set port 1 host_shaper avail_thresh_triggered 0 rate 50 +.. _geneve_parser_api: + +GENEVE TLV options parser +------------------------- + +NVIDIA ConnectX and BlueField devices support configure flex parser for +`GENEVE TLV options `_. + +Each physical device has 7 DWs for GENEVE TLV options. +Partial option configuration is supported, mask for data is provided in parser +creation indicating which DWs configuration is requested. Only masked data DWs +can be matched later as item field using flow API. + +Matching of ``type`` field is supported for each configured option. +However, for matching ``class` field, the option should be configured with +``match_on_class_mode=2``. Matching on ``length`` field is not supported. +When ``match_on_class_mode=2`` is requested, one extra DW is consumed for it. + +Parser API +~~~~~~~~~~ + +An API to create/destroy GENEVE TLV parser is added. +Although the parser is created per physical device, this API is port oriented. +Each port should call this API before using GENEVE OPT item, +but its configuration must use the same options list with same internal order +configured by first port. + +Calling this API for different ports under same physical device doesn't consume +more DWs, the first one creates the parser and the rest use same configuration. + +``struct rte_pmd_mlx5_geneve_tlv`` is used for single option configuration: + +.. _table_rte_pmd_mlx5_geneve_tlv: + +.. table:: GENEVE TLV + + +-------------------------+-------------------------------------------------+ + | Field | Value | + +=========================+=================================================+ + | ``option_class`` | class | + +-------------------------+-------------------------------------------------+ + | ``option_type`` | type | + +-------------------------+-------------------------------------------------+ + | ``option_len`` | data length in DW granularity | + +-------------------------+-------------------------------------------------+ + | ``match_on_class_mode`` | indicator about class field role in this option | + +-------------------------+-------------------------------------------------+ + | ``offset`` | offset of the first sample in DW granularity | + +-------------------------+-------------------------------------------------+ + | ``sample_len`` | number of DW to sample | + +-------------------------+-------------------------------------------------+ + | ``match_data_mask`` | array of DWs which each bit marks if this bit | + | | should be sampled | + +-------------------------+-------------------------------------------------+ + +Creation +^^^^^^^^ + +Creates GENEVE TLV parser for the selected port. +This function must be called before first use of GENEVE option. + +.. code-block:: c + + void * + rte_pmd_mlx5_create_geneve_tlv_parser(uint16_t port_id, + const struct rte_pmd_mlx5_geneve_tlv tlv_list[], + uint8_t nb_options); + +The parser creation is done once for all GENEVE TLV options. +For adding a new option, the exist parser should be destroyed first. + +Arguments: + +- ``port_id``: port identifier of Ethernet device. +- ``tlv_list``: list of GENEVE TLV options to create parser for them. +- ``nb_options``: number of options in TLV list. + +Return values: + +- A valid handle in case of success, NULL otherwise (``rte_errno`` is also set), + the following errors are defined. +- ``ENODEV``: there is no Ethernet device for this port id. +- ``EINVAL``: invalid GENEVE TLV option requested. +- ``ENOTSUP``: the port doesn't support GENEVE TLV parsing. +- ``EEXIST``: this port already has GENEVE TLV parser or another port under same + physical device has already prepared a different parser. +- ``ENOMEM``: not enough memory to execute the function, or resource limitation + on the device. + + +Destruction +^^^^^^^^^^^ + +Destroy GENEVE TLV parser created by ``rte_pmd_mlx5_create_geneve_tlv_parser()``. +This function must be called after last use of GENEVE option and before port +closing. + +.. code-block:: c + + int + rte_pmd_mlx5_destroy_geneve_tlv_parser(void *handle); + +Failure to destroy a parser handle may occur when one of the options is used by +valid template table. + +Arguments: + +- ``handle``: handle for the GENEVE TLV parser object to be destroyed. + +Return values: + +- 0 on success, a negative errno value otherwise and ``rte_errno`` is set. + + +Limitations +~~~~~~~~~~~ + +* Supported only in HW steering (``dv_flow_en`` = 2). +* Supported only when ``FLEX_PARSER_PROFILE_ENABLE`` = 8. +* Supported for FW version **xx.37.0142** and above. + + Testpmd driver specific commands -------------------------------- diff --git a/doc/guides/platform/mlx5.rst b/doc/guides/platform/mlx5.rst index 400000e284..d16508d0da 100644 --- a/doc/guides/platform/mlx5.rst +++ b/doc/guides/platform/mlx5.rst @@ -536,10 +536,14 @@ Below are some firmware configurations listed. or FLEX_PARSER_PROFILE_ENABLE=1 -- enable Geneve TLV option flow matching:: +- enable Geneve TLV option flow matching in SW steering:: FLEX_PARSER_PROFILE_ENABLE=0 +- enable Geneve TLV option flow matching in HW steering:: + + FLEX_PARSER_PROFILE_ENABLE=8 + - enable GTP flow matching:: FLEX_PARSER_PROFILE_ENABLE=3 diff --git a/drivers/net/mlx5/meson.build b/drivers/net/mlx5/meson.build index 69771c63ab..d705fe21bb 100644 --- a/drivers/net/mlx5/meson.build +++ b/drivers/net/mlx5/meson.build @@ -46,6 +46,7 @@ sources = files( if is_linux sources += files( + 'mlx5_flow_geneve.c', 'mlx5_flow_hw.c', 'mlx5_hws_cnt.c', 'mlx5_flow_quota.c', diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index f9fc652136..5f8af31aea 100644 --- a/drivers/net/mlx5/mlx5.c +++ b/drivers/net/mlx5/mlx5.c @@ -1722,6 +1722,19 @@ mlx5_get_physical_device(struct mlx5_common_device *cdev) return phdev; } +struct mlx5_physical_device * +mlx5_get_locked_physical_device(struct mlx5_priv *priv) +{ + pthread_mutex_lock(&mlx5_dev_ctx_list_mutex); + return priv->sh->phdev; +} + +void +mlx5_unlock_physical_device(void) +{ + pthread_mutex_unlock(&mlx5_dev_ctx_list_mutex); +} + static void mlx5_physical_device_destroy(struct mlx5_physical_device *phdev) { @@ -2278,6 +2291,7 @@ int mlx5_dev_close(struct rte_eth_dev *dev) { struct mlx5_priv *priv = dev->data->dev_private; + struct mlx5_dev_ctx_shared *sh = priv->sh; unsigned int i; int ret; @@ -2290,7 +2304,7 @@ mlx5_dev_close(struct rte_eth_dev *dev) rte_eth_dev_release_port(dev); return 0; } - if (!priv->sh) + if (!sh) return 0; if (priv->shared_refcnt) { DRV_LOG(ERR, "port %u is shared host in use (%u)", @@ -2298,6 +2312,15 @@ mlx5_dev_close(struct rte_eth_dev *dev) rte_errno = EBUSY; return -EBUSY; } +#ifdef HAVE_MLX5_HWS_SUPPORT + /* Check if shared GENEVE options created on context being closed. */ + ret = mlx5_geneve_tlv_options_check_busy(priv); + if (ret) { + DRV_LOG(ERR, "port %u maintains shared GENEVE TLV options", + dev->data->port_id); + return ret; + } +#endif DRV_LOG(DEBUG, "port %u closing device \"%s\"", dev->data->port_id, ((priv->sh->cdev->ctx != NULL) ? @@ -2330,6 +2353,11 @@ mlx5_dev_close(struct rte_eth_dev *dev) flow_hw_destroy_vport_action(dev); flow_hw_resource_release(dev); flow_hw_clear_port_info(dev); + if (priv->tlv_options != NULL) { + /* Free the GENEVE TLV parser resource. */ + claim_zero(mlx5_geneve_tlv_options_destroy(priv->tlv_options, sh->phdev)); + priv->tlv_options = NULL; + } #endif if (priv->rxq_privs != NULL) { /* XXX race condition if mlx5_rx_burst() is still running. */ diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index 6a82c38cf4..2e0d71a12c 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -1419,6 +1419,8 @@ struct mlx5_dev_registers { #define HAVE_MLX5_DR_CREATE_ACTION_ASO_EXT #endif +struct mlx5_geneve_tlv_options; + /** * Physical device structure. * This device is created once per NIC to manage recourses shared by all ports @@ -1428,6 +1430,7 @@ struct mlx5_physical_device { LIST_ENTRY(mlx5_physical_device) next; struct mlx5_dev_ctx_shared *sh; /* Created on sherd context. */ uint64_t guid; /* System image guid, the uniq ID of physical device. */ + struct mlx5_geneve_tlv_options *tlv_options; uint32_t refcnt; }; @@ -1949,6 +1952,8 @@ struct mlx5_priv { /* Action template list. */ LIST_HEAD(flow_hw_at, rte_flow_actions_template) flow_hw_at; struct mlx5dr_context *dr_ctx; /**< HW steering DR context. */ + /* Pointer to the GENEVE TLV options. */ + struct mlx5_geneve_tlv_options *tlv_options; /* HW steering queue polling mechanism job descriptor LIFO. */ uint32_t hws_strict_queue:1; /**< Whether all operations strictly happen on the same HWS queue. */ @@ -2087,6 +2092,9 @@ void mlx5_flow_counter_mode_config(struct rte_eth_dev *dev); int mlx5_flow_aso_age_mng_init(struct mlx5_dev_ctx_shared *sh); int mlx5_aso_flow_mtrs_mng_init(struct mlx5_dev_ctx_shared *sh); int mlx5_flow_aso_ct_mng_init(struct mlx5_dev_ctx_shared *sh); +struct mlx5_physical_device * +mlx5_get_locked_physical_device(struct mlx5_priv *priv); +void mlx5_unlock_physical_device(void); /* mlx5_ethdev.c */ diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c index 85e8c77c81..ae53cc8e74 100644 --- a/drivers/net/mlx5/mlx5_flow.c +++ b/drivers/net/mlx5/mlx5_flow.c @@ -12476,3 +12476,33 @@ mlx5_flow_pick_transfer_proxy(struct rte_eth_dev *dev, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL, "unable to find a proxy port"); } + +void * +rte_pmd_mlx5_create_geneve_tlv_parser(uint16_t port_id, + const struct rte_pmd_mlx5_geneve_tlv tlv_list[], + uint8_t nb_options) +{ +#ifdef HAVE_MLX5_HWS_SUPPORT + return mlx5_geneve_tlv_parser_create(port_id, tlv_list, nb_options); +#else + (void)port_id; + (void)tlv_list; + (void)nb_options; + DRV_LOG(ERR, "%s is not supported.", __func__); + rte_errno = ENOTSUP; + return NULL; +#endif +} + +int +rte_pmd_mlx5_destroy_geneve_tlv_parser(void *handle) +{ +#ifdef HAVE_MLX5_HWS_SUPPORT + return mlx5_geneve_tlv_parser_destroy(handle); +#else + (void)handle; + DRV_LOG(ERR, "%s is not supported.", __func__); + rte_errno = ENOTSUP; + return -rte_errno; +#endif +} diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h index 6dde9de688..4bfc218175 100644 --- a/drivers/net/mlx5/mlx5_flow.h +++ b/drivers/net/mlx5/mlx5_flow.h @@ -1330,6 +1330,8 @@ struct mlx5_action_construct_data { }; }; +#define MAX_GENEVE_OPTIONS_RESOURCES 7 + /* Flow item template struct. */ struct rte_flow_pattern_template { LIST_ENTRY(rte_flow_pattern_template) next; @@ -1644,6 +1646,11 @@ struct mlx5_flow_split_info { uint64_t prefix_layers; /**< Prefix subflow layers. */ }; +struct mlx5_hl_data { + uint8_t dw_offset; + uint32_t dw_mask; +}; + struct flow_hw_port_info { uint32_t regc_mask; uint32_t regc_value; @@ -1759,6 +1766,12 @@ flow_hw_get_reg_id_from_ctx(void *dr_ctx, return REG_NON; } +void * +mlx5_geneve_tlv_parser_create(uint16_t port_id, + const struct rte_pmd_mlx5_geneve_tlv tlv_list[], + uint8_t nb_options); +int mlx5_geneve_tlv_parser_destroy(void *handle); + void flow_hw_set_port_info(struct rte_eth_dev *dev); void flow_hw_clear_port_info(struct rte_eth_dev *dev); int flow_hw_create_vport_action(struct rte_eth_dev *dev); @@ -2803,6 +2816,11 @@ mlx5_get_tof(const struct rte_flow_item *items, enum mlx5_tof_rule_type *rule_type); void flow_hw_resource_release(struct rte_eth_dev *dev); +int +mlx5_geneve_tlv_options_destroy(struct mlx5_geneve_tlv_options *options, + struct mlx5_physical_device *phdev); +int +mlx5_geneve_tlv_options_check_busy(struct mlx5_priv *priv); void flow_hw_rxq_flag_set(struct rte_eth_dev *dev, bool enable); int flow_dv_action_validate(struct rte_eth_dev *dev, diff --git a/drivers/net/mlx5/mlx5_flow_geneve.c b/drivers/net/mlx5/mlx5_flow_geneve.c new file mode 100644 index 0000000000..f23fb31aa0 --- /dev/null +++ b/drivers/net/mlx5/mlx5_flow_geneve.c @@ -0,0 +1,627 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) 2022 NVIDIA Corporation & Affiliates + */ + +#include + +#include +#include + +#include "generic/rte_byteorder.h" +#include "mlx5.h" +#include "mlx5_flow.h" +#include "rte_pmd_mlx5.h" + +#if defined(HAVE_IBV_FLOW_DV_SUPPORT) || !defined(HAVE_INFINIBAND_VERBS_H) + +#define MAX_GENEVE_OPTION_DATA_SIZE 32 +#define MAX_GENEVE_OPTION_TOTAL_DATA_SIZE \ + (MAX_GENEVE_OPTION_DATA_SIZE * MAX_GENEVE_OPTIONS_RESOURCES) + +/** + * Single DW inside GENEVE TLV option. + */ +struct mlx5_geneve_tlv_resource { + struct mlx5_devx_obj *obj; /* FW object returned in parser creation. */ + uint32_t modify_field; /* Modify field ID for this DW. */ + uint8_t offset; /* Offset used in obj creation, from option start. */ +}; + +/** + * Single GENEVE TLV option context. + * May include some FW objects for different DWs in same option. + */ +struct mlx5_geneve_tlv_option { + uint8_t type; + uint16_t class; + uint8_t class_mode; + struct mlx5_hl_data match_data[MAX_GENEVE_OPTION_DATA_SIZE]; + uint32_t match_data_size; + struct mlx5_hl_data hl_ok_bit; + struct mlx5_geneve_tlv_resource resources[MAX_GENEVE_OPTIONS_RESOURCES]; + RTE_ATOMIC(uint32_t) refcnt; +}; + +/** + * List of GENEVE TLV options. + */ +struct mlx5_geneve_tlv_options { + /* List of configured GENEVE TLV options. */ + struct mlx5_geneve_tlv_option options[MAX_GENEVE_OPTIONS_RESOURCES]; + /* + * Copy of list given in parser creation, use to compare with new + * configuration. + */ + struct rte_pmd_mlx5_geneve_tlv spec[MAX_GENEVE_OPTIONS_RESOURCES]; + rte_be32_t buffer[MAX_GENEVE_OPTION_TOTAL_DATA_SIZE]; + uint8_t nb_options; /* Number entries in above lists. */ + RTE_ATOMIC(uint32_t) refcnt; +}; + +/** + * Create single GENEVE TLV option sample. + * + * @param ctx + * Context returned from mlx5 open_device() glue function. + * @param attr + * Pointer to GENEVE TLV option attributes structure. + * @param query_attr + * Pointer to match sample info attributes structure. + * @param match_data + * Pointer to header layout structure to update. + * @param resource + * Pointer to single sample context to fill. + * + * @return + * 0 on success, a negative errno otherwise and rte_errno is set. + */ +static int +mlx5_geneve_tlv_option_create_sample(void *ctx, + struct mlx5_devx_geneve_tlv_option_attr *attr, + struct mlx5_devx_match_sample_info_query_attr *query_attr, + struct mlx5_hl_data *match_data, + struct mlx5_geneve_tlv_resource *resource) +{ + struct mlx5_devx_obj *obj; + int ret; + + obj = mlx5_devx_cmd_create_geneve_tlv_option(ctx, attr); + if (obj == NULL) + return -rte_errno; + ret = mlx5_devx_cmd_query_geneve_tlv_option(ctx, obj, query_attr); + if (ret) { + claim_zero(mlx5_devx_cmd_destroy(obj)); + return ret; + } + resource->obj = obj; + resource->offset = attr->sample_offset; + resource->modify_field = query_attr->modify_field_id; + match_data->dw_offset = query_attr->sample_dw_data; + match_data->dw_mask = 0xffffffff; + return 0; +} + +/** + * Destroy single GENEVE TLV option sample. + * + * @param resource + * Pointer to single sample context to clean. + */ +static void +mlx5_geneve_tlv_option_destroy_sample(struct mlx5_geneve_tlv_resource *resource) +{ + claim_zero(mlx5_devx_cmd_destroy(resource->obj)); + resource->obj = NULL; +} + +/** + * Create single GENEVE TLV option. + * + * @param ctx + * Context returned from mlx5 open_device() glue function. + * @param spec + * Pointer to user configuration. + * @param option + * Pointer to single GENEVE TLV option to fill. + * + * @return + * 0 on success, a negative errno otherwise and rte_errno is set. + */ +static int +mlx5_geneve_tlv_option_create(void *ctx, const struct rte_pmd_mlx5_geneve_tlv *spec, + struct mlx5_geneve_tlv_option *option) +{ + struct mlx5_devx_geneve_tlv_option_attr attr = { + .option_class = spec->option_class, + .option_type = spec->option_type, + .option_data_len = spec->option_len, + .option_class_ignore = spec->match_on_class_mode == 1 ? 0 : 1, + .offset_valid = 1, + }; + struct mlx5_devx_match_sample_info_query_attr query_attr = {0}; + struct mlx5_geneve_tlv_resource *resource; + uint8_t i, resource_id = 0; + int ret; + + if (spec->match_on_class_mode == 2) { + /* Header is matchable, create sample for DW0. */ + attr.sample_offset = 0; + resource = &option->resources[resource_id]; + ret = mlx5_geneve_tlv_option_create_sample(ctx, &attr, + &query_attr, + &option->match_data[0], + resource); + if (ret) + return ret; + resource_id++; + } + /* + * Create FW object for each DW request by user. + * Starting from 1 since FW offset starts from header. + */ + for (i = 1; i <= spec->sample_len; ++i) { + if (spec->match_data_mask[i - 1] == 0) + continue; + /* offset of data + offset inside data = specific DW offset. */ + attr.sample_offset = spec->offset + i; + resource = &option->resources[resource_id]; + ret = mlx5_geneve_tlv_option_create_sample(ctx, &attr, + &query_attr, + &option->match_data[i], + resource); + if (ret) + goto error; + resource_id++; + } + /* + * Update the OK bit information according to last query. + * It should be same for each query under same option. + */ + option->hl_ok_bit.dw_offset = query_attr.sample_dw_ok_bit; + option->hl_ok_bit.dw_mask = 1 << query_attr.sample_dw_ok_bit_offset; + option->match_data_size = spec->sample_len + 1; + option->type = spec->option_type; + option->class = spec->option_class; + option->class_mode = spec->match_on_class_mode; + rte_atomic_store_explicit(&option->refcnt, 0, rte_memory_order_relaxed); + return 0; +error: + for (i = 0; i < resource_id; ++i) { + resource = &option->resources[i]; + mlx5_geneve_tlv_option_destroy_sample(resource); + } + return ret; +} + +/** + * Destroy single GENEVE TLV option. + * + * @param option + * Pointer to single GENEVE TLV option to destroy. + * + * @return + * 0 on success, a negative errno otherwise and rte_errno is set. + */ +static int +mlx5_geneve_tlv_option_destroy(struct mlx5_geneve_tlv_option *option) +{ + uint8_t i; + + if (rte_atomic_load_explicit(&option->refcnt, rte_memory_order_relaxed)) { + DRV_LOG(ERR, + "Option type %u class %u is still in used by %u tables.", + option->type, option->class, option->refcnt); + rte_errno = EBUSY; + return -rte_errno; + } + for (i = 0; option->resources[i].obj != NULL; ++i) + mlx5_geneve_tlv_option_destroy_sample(&option->resources[i]); + return 0; +} + +/** + * Copy the GENEVE TLV option user configuration for future comparing. + * + * @param dst + * Pointer to internal user configuration copy. + * @param src + * Pointer to user configuration. + * @param match_data_mask + * Pointer to allocated data array. + */ +static void +mlx5_geneve_tlv_option_copy(struct rte_pmd_mlx5_geneve_tlv *dst, + const struct rte_pmd_mlx5_geneve_tlv *src, + rte_be32_t *match_data_mask) +{ + uint8_t i; + + dst->option_type = src->option_type; + dst->option_class = src->option_class; + dst->option_len = src->option_len; + dst->offset = src->offset; + dst->match_on_class_mode = src->match_on_class_mode; + dst->sample_len = src->sample_len; + for (i = 0; i < dst->sample_len; ++i) + match_data_mask[i] = src->match_data_mask[i]; + dst->match_data_mask = match_data_mask; +} + +/** + * Create list of GENEVE TLV options according to user configuration list. + * + * @param sh + * Shared context the options are being created on. + * @param tlv_list + * A list of GENEVE TLV options to create parser for them. + * @param nb_options + * The number of options in TLV list. + * + * @return + * A pointer to GENEVE TLV options parser structure on success, + * NULL otherwise and rte_errno is set. + */ +static struct mlx5_geneve_tlv_options * +mlx5_geneve_tlv_options_create(struct mlx5_dev_ctx_shared *sh, + const struct rte_pmd_mlx5_geneve_tlv tlv_list[], + uint8_t nb_options) +{ + struct mlx5_geneve_tlv_options *options; + const struct rte_pmd_mlx5_geneve_tlv *spec; + rte_be32_t *data_mask; + uint8_t i, j; + int ret; + + options = mlx5_malloc(MLX5_MEM_ZERO | MLX5_MEM_RTE, + sizeof(struct mlx5_geneve_tlv_options), + RTE_CACHE_LINE_SIZE, SOCKET_ID_ANY); + if (options == NULL) { + DRV_LOG(ERR, + "Failed to allocate memory for GENEVE TLV options."); + rte_errno = ENOMEM; + return NULL; + } + for (i = 0; i < nb_options; ++i) { + spec = &tlv_list[i]; + ret = mlx5_geneve_tlv_option_create(sh->cdev->ctx, spec, + &options->options[i]); + if (ret < 0) + goto error; + /* Copy the user list for comparing future configuration. */ + data_mask = options->buffer + i * MAX_GENEVE_OPTION_DATA_SIZE; + mlx5_geneve_tlv_option_copy(&options->spec[i], spec, data_mask); + } + MLX5_ASSERT(sh->phdev->sh == NULL); + sh->phdev->sh = sh; + options->nb_options = nb_options; + options->refcnt = 1; + return options; +error: + for (j = 0; j < i; ++j) + mlx5_geneve_tlv_option_destroy(&options->options[j]); + mlx5_free(options); + return NULL; +} + +/** + * Destroy GENEVE TLV options structure. + * + * @param options + * Pointer to GENEVE TLV options structure to destroy. + * @param phdev + * Pointer physical device options were created on. + * + * @return + * 0 on success, a negative errno otherwise and rte_errno is set. + */ +int +mlx5_geneve_tlv_options_destroy(struct mlx5_geneve_tlv_options *options, + struct mlx5_physical_device *phdev) +{ + uint8_t i; + int ret; + + if (--options->refcnt) + return 0; + for (i = 0; i < options->nb_options; ++i) { + ret = mlx5_geneve_tlv_option_destroy(&options->options[i]); + if (ret < 0) { + DRV_LOG(ERR, + "Failed to destroy option %u, %u/%u is already destroyed.", + i, i, options->nb_options); + return ret; + } + } + mlx5_free(options); + phdev->tlv_options = NULL; + phdev->sh = NULL; + return 0; +} + +/** + * Check if GENEVE TLV options are hosted on the current port + * and the port can be closed + * + * @param priv + * Device private data. + * + * @return + * 0 on success, a negative EBUSY and rte_errno is set. + */ +int +mlx5_geneve_tlv_options_check_busy(struct mlx5_priv *priv) +{ + struct mlx5_physical_device *phdev = mlx5_get_locked_physical_device(priv); + struct mlx5_dev_ctx_shared *sh = priv->sh; + + if (!phdev || phdev->sh != sh) { + mlx5_unlock_physical_device(); + return 0; + } + if (!sh->phdev->tlv_options || sh->phdev->tlv_options->refcnt == 1) { + /* Mark port as being closed one */ + sh->phdev->sh = NULL; + mlx5_unlock_physical_device(); + return 0; + } + mlx5_unlock_physical_device(); + rte_errno = EBUSY; + return -EBUSY; +} + +/** + * Validate GENEVE TLV option user request structure. + * + * @param attr + * Pointer to HCA attribute structure. + * @param option + * Pointer to user configuration. + * + * @return + * 0 on success, a negative errno otherwise and rte_errno is set. + */ +static int +mlx5_geneve_tlv_option_validate(struct mlx5_hca_attr *attr, + const struct rte_pmd_mlx5_geneve_tlv *option) +{ + if (option->option_len > attr->max_geneve_tlv_option_data_len) { + DRV_LOG(ERR, + "GENEVE TLV option length (%u) exceeds the limit (%u).", + option->option_len, + attr->max_geneve_tlv_option_data_len); + rte_errno = ENOTSUP; + return -rte_errno; + } + if (option->option_len < option->offset + option->sample_len) { + DRV_LOG(ERR, + "GENEVE TLV option length is smaller than (offset + sample_len)."); + rte_errno = EINVAL; + return -rte_errno; + } + if (option->match_on_class_mode > 2) { + DRV_LOG(ERR, + "GENEVE TLV option match_on_class_mode is invalid."); + rte_errno = EINVAL; + return -rte_errno; + } + return 0; +} + +/** + * Get the number of requested DWs in given GENEVE TLV option. + * + * @param option + * Pointer to user configuration. + * + * @return + * Number of requested DWs for given GENEVE TLV option. + */ +static uint8_t +mlx5_geneve_tlv_option_get_nb_dws(const struct rte_pmd_mlx5_geneve_tlv *option) +{ + uint8_t nb_dws = 0; + uint8_t i; + + if (option->match_on_class_mode == 2) + nb_dws++; + for (i = 0; i < option->sample_len; ++i) { + if (option->match_data_mask[i] == 0xffffffff) + nb_dws++; + } + return nb_dws; +} + +/** + * Compare GENEVE TLV option user request structure. + * + * @param option1 + * Pointer to first user configuration. + * @param option2 + * Pointer to second user configuration. + * + * @return + * True if the options are equal, false otherwise. + */ +static bool +mlx5_geneve_tlv_option_compare(const struct rte_pmd_mlx5_geneve_tlv *option1, + const struct rte_pmd_mlx5_geneve_tlv *option2) +{ + uint8_t i; + + if (option1->option_type != option2->option_type || + option1->option_class != option2->option_class || + option1->option_len != option2->option_len || + option1->offset != option2->offset || + option1->match_on_class_mode != option2->match_on_class_mode || + option1->sample_len != option2->sample_len) + return false; + for (i = 0; i < option1->sample_len; ++i) { + if (option1->match_data_mask[i] != option2->match_data_mask[i]) + return false; + } + return true; +} + +/** + * Check whether the given GENEVE TLV option list is equal to internal list. + * The lists are equal when they have same size and same options in the same + * order inside the list. + * + * @param options + * Pointer to GENEVE TLV options structure. + * @param tlv_list + * A list of GENEVE TLV options to compare. + * @param nb_options + * The number of options in TLV list. + * + * @return + * True if the lists are equal, false otherwise. + */ +static bool +mlx5_is_same_geneve_tlv_options(const struct mlx5_geneve_tlv_options *options, + const struct rte_pmd_mlx5_geneve_tlv tlv_list[], + uint8_t nb_options) +{ + const struct rte_pmd_mlx5_geneve_tlv *spec = options->spec; + uint8_t i; + + if (options->nb_options != nb_options) + return false; + for (i = 0; i < nb_options; ++i) { + if (!mlx5_geneve_tlv_option_compare(&spec[i], &tlv_list[i])) + return false; + } + return true; +} + +void * +mlx5_geneve_tlv_parser_create(uint16_t port_id, + const struct rte_pmd_mlx5_geneve_tlv tlv_list[], + uint8_t nb_options) +{ + struct mlx5_geneve_tlv_options *options = NULL; + struct mlx5_physical_device *phdev; + struct rte_eth_dev *dev; + struct mlx5_priv *priv; + struct mlx5_hca_attr *attr; + uint8_t total_dws = 0; + uint8_t i; + + /* + * Validate the input before taking a lock and before any memory + * allocation. + */ + if (rte_eth_dev_is_valid_port(port_id) < 0) { + DRV_LOG(ERR, "There is no Ethernet device for port %u.", + port_id); + rte_errno = ENODEV; + return NULL; + } + dev = &rte_eth_devices[port_id]; + priv = dev->data->dev_private; + if (priv->tlv_options) { + DRV_LOG(ERR, "Port %u already has GENEVE TLV parser.", port_id); + rte_errno = EEXIST; + return NULL; + } + if (priv->sh->config.dv_flow_en < 2) { + DRV_LOG(ERR, + "GENEVE TLV parser is only supported for HW steering."); + rte_errno = ENOTSUP; + return NULL; + } + attr = &priv->sh->cdev->config.hca_attr; + MLX5_ASSERT(MAX_GENEVE_OPTIONS_RESOURCES <= + attr->max_geneve_tlv_options); + if (!attr->geneve_tlv_option_offset || !attr->geneve_tlv_sample || + !attr->query_match_sample_info || !attr->geneve_tlv_opt) { + DRV_LOG(ERR, "Not enough capabilities to support GENEVE TLV parser, maybe old FW version"); + rte_errno = ENOTSUP; + return NULL; + } + if (nb_options > MAX_GENEVE_OPTIONS_RESOURCES) { + DRV_LOG(ERR, + "GENEVE TLV option number (%u) exceeds the limit (%u).", + nb_options, MAX_GENEVE_OPTIONS_RESOURCES); + rte_errno = EINVAL; + return NULL; + } + for (i = 0; i < nb_options; ++i) { + if (mlx5_geneve_tlv_option_validate(attr, &tlv_list[i]) < 0) { + DRV_LOG(ERR, "GENEVE TLV option %u is invalid.", i); + return NULL; + } + total_dws += mlx5_geneve_tlv_option_get_nb_dws(&tlv_list[i]); + } + if (total_dws > MAX_GENEVE_OPTIONS_RESOURCES) { + DRV_LOG(ERR, + "Total requested DWs (%u) exceeds the limit (%u).", + total_dws, MAX_GENEVE_OPTIONS_RESOURCES); + rte_errno = EINVAL; + return NULL; + } + /* Take lock for this physical device and manage the options. */ + phdev = mlx5_get_locked_physical_device(priv); + options = priv->sh->phdev->tlv_options; + if (options) { + if (!mlx5_is_same_geneve_tlv_options(options, tlv_list, + nb_options)) { + mlx5_unlock_physical_device(); + DRV_LOG(ERR, "Another port has already prepared different GENEVE TLV parser."); + rte_errno = EEXIST; + return NULL; + } + if (phdev->sh == NULL) { + mlx5_unlock_physical_device(); + DRV_LOG(ERR, "GENEVE TLV options are hosted on port being closed."); + rte_errno = EBUSY; + return NULL; + } + /* Use existing options. */ + options->refcnt++; + goto exit; + } + /* Create GENEVE TLV options for this physical device. */ + options = mlx5_geneve_tlv_options_create(priv->sh, tlv_list, nb_options); + if (!options) { + mlx5_unlock_physical_device(); + return NULL; + } + phdev->tlv_options = options; +exit: + mlx5_unlock_physical_device(); + priv->tlv_options = options; + return priv; +} + +int +mlx5_geneve_tlv_parser_destroy(void *handle) +{ + struct mlx5_priv *priv = (struct mlx5_priv *)handle; + struct mlx5_physical_device *phdev; + int ret; + + if (priv == NULL) { + DRV_LOG(ERR, "Handle input is invalid (NULL)."); + rte_errno = EINVAL; + return -rte_errno; + } + if (priv->tlv_options == NULL) { + DRV_LOG(ERR, "This parser has been already released."); + rte_errno = ENOENT; + return -rte_errno; + } + /* Take lock for this physical device and manage the options. */ + phdev = mlx5_get_locked_physical_device(priv); + /* Destroy the options */ + ret = mlx5_geneve_tlv_options_destroy(phdev->tlv_options, phdev); + if (ret < 0) { + mlx5_unlock_physical_device(); + return ret; + } + priv->tlv_options = NULL; + mlx5_unlock_physical_device(); + return 0; +} + +#endif /* defined(HAVE_IBV_FLOW_DV_SUPPORT) || !defined(HAVE_INFINIBAND_VERBS_H) */ diff --git a/drivers/net/mlx5/rte_pmd_mlx5.h b/drivers/net/mlx5/rte_pmd_mlx5.h index 654dd3cff3..004be0eea1 100644 --- a/drivers/net/mlx5/rte_pmd_mlx5.h +++ b/drivers/net/mlx5/rte_pmd_mlx5.h @@ -229,6 +229,108 @@ enum rte_pmd_mlx5_flow_engine_mode { __rte_experimental int rte_pmd_mlx5_flow_engine_set_mode(enum rte_pmd_mlx5_flow_engine_mode mode, uint32_t flags); +/** + * User configuration structure using to create parser for single GENEVE TLV option. + */ +struct rte_pmd_mlx5_geneve_tlv { + /** + * The class of the GENEVE TLV option. + * Relevant only when 'match_on_class_mode' is 1. + */ + rte_be16_t option_class; + /** + * The type of the GENEVE TLV option. + * This field is the identifier of the option. + */ + uint8_t option_type; + /** + * The length of the GENEVE TLV option data excluding the option header + * in DW granularity. + */ + uint8_t option_len; + /** + * Indicator about class field role in this option: + * 0 - class is ignored. + * 1 - class is fixed (the class defines the option along with the type). + * 2 - class matching per flow. + */ + uint8_t match_on_class_mode; + /** + * The offset of the first sample in DW granularity. + * This offset is relative to first of option data. + * The 'match_data_mask' corresponds to option data since this offset. + */ + uint8_t offset; + /** + * The number of DW to sample. + * This field describes the length of 'match_data_mask' in DW + * granularity. + */ + uint8_t sample_len; + /** + * Array of DWs which each bit marks if this bit should be sampled. + * Each nonzero DW consumes one DW from maximum 7 DW in total. + */ + rte_be32_t *match_data_mask; +}; + +/** + * Creates GENEVE TLV parser for the selected port. + * This function must be called before first use of GENEVE option. + * + * This API is port oriented, but the configuration is done once for all ports + * under the same physical device. Each port should call this API before using + * GENEVE OPT item, but it must use the same options in the same order inside + * the list. + * + * Each physical device has 7 DWs for GENEVE TLV options. Each nonzero element + * in 'match_data_mask' array consumes one DW, and choosing matchable mode for + * class consumes additional one. + * Calling this API for second port under same physical device doesn't consume + * more DW, it uses same configuration. + * + * @param[in] port_id + * The port identifier of the Ethernet device. + * @param[in] tlv_list + * A list of GENEVE TLV options to create parser for them. + * @param[in] nb_options + * The number of options in TLV list. + * + * @return + * A pointer to TLV handle on success, NULL otherwise and rte_errno is set. + * Possible values for rte_errno: + * - ENOMEM - not enough memory to create GENEVE TLV parser. + * - EEXIST - this port already has GENEVE TLV parser or another port under + * same physical device has already prepared a different parser. + * - EINVAL - invalid GENEVE TLV requested. + * - ENODEV - there is no Ethernet device for this port id. + * - ENOTSUP - the port doesn't support GENEVE TLV parsing. + */ +__rte_experimental +void * +rte_pmd_mlx5_create_geneve_tlv_parser(uint16_t port_id, + const struct rte_pmd_mlx5_geneve_tlv tlv_list[], + uint8_t nb_options); + +/** + * Destroy GENEVE TLV parser for the selected port. + * This function must be called after last use of GENEVE option and before port + * closing. + * + * @param[in] handle + * Handle for the GENEVE TLV parser object to be destroyed. + * + * @return + * 0 on success, a negative errno value otherwise and rte_errno is set. + * Possible values for rte_errno: + * - EINVAL - invalid handle. + * - ENOENT - there is no valid GENEVE TLV parser in this handle. + * - EBUSY - one of options is in used by template table. + */ +__rte_experimental +int +rte_pmd_mlx5_destroy_geneve_tlv_parser(void *handle); + #ifdef __cplusplus } #endif diff --git a/drivers/net/mlx5/version.map b/drivers/net/mlx5/version.map index 99f5ab754a..8fb0e07303 100644 --- a/drivers/net/mlx5/version.map +++ b/drivers/net/mlx5/version.map @@ -17,4 +17,7 @@ EXPERIMENTAL { rte_pmd_mlx5_external_sq_enable; # added in 23.03 rte_pmd_mlx5_flow_engine_set_mode; + # added in 24.03 + rte_pmd_mlx5_create_geneve_tlv_parser; + rte_pmd_mlx5_destroy_geneve_tlv_parser; }; From patchwork Sun Dec 3 11:25:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 134759 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 1CE994365F; Sun, 3 Dec 2023 12:27:51 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B2B5240E01; Sun, 3 Dec 2023 12:26:40 +0100 (CET) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2067.outbound.protection.outlook.com [40.107.220.67]) by mails.dpdk.org (Postfix) with ESMTP id 2597840DDC for ; Sun, 3 Dec 2023 12:26:38 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=atFGc5r1dioI3GYQfUXwUIbR8H10Y4ybOZAK40js9t70P0gT7wVMsEcYR8aVSKnqfNI5UNjxkCc/gW+iEdojDY1FopJ+FvcvAsKUymy4Zk+Qp2lzjP0i1Jn/X7Al5OS6s/iwAdnC/Wr/Tp0hInwfdqN4a2WJ7vQvOT52MwEJQxFqiRTeYSKvsJdzDARl1ZLdTA06es0DBtkS7gyKB7KFo6tcfTJTZcnUmrw1An2bB/P4sUhp6oBSLkuMD0I9bKWSYLQ5RxZ2C1oTP6C/wSZcH/mLtgft3FRR8eES9bf5XaJwxoCLFMgJKFSueE4l1j/EbXR9uHVOG8+1dH4kY2viFA== 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=HsSC3rHsHGHv/twaBB1CQjQo+QB07d1vTBAPlJpC0As=; b=kds+dIm8bdR6ynTvEJYwJDve053JhNxKMMq3pIek/fr4P64X8JiGj97VIqhwbwQ7rbdk/3ibtTwSOlhLE0Fzf9l6BTQa36Km8OE/hU0JGYuquh7Cbovg9w4VD6T5CZIlEuD7OD40t8UCJVMUD6+k695ksntVHf1GG2Nc2Mz6nwwpSwh5l5lUsTlSnwkh/J77Mv69RtdkLcbM8NVD+67qYGwYY631Sukwi+Dx6Ayl0Y9dp0GeaBSlh+Cmx69UMuCH148CmUkGcWdQ3wFAKBtRRxzkeSYHSH9eG2AE4GB6XqwG2C8H1yjlT3UHScewoTVvJe8Qgbv4W2vNmBASXFLZVw== 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 (0) 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=HsSC3rHsHGHv/twaBB1CQjQo+QB07d1vTBAPlJpC0As=; b=G5MjgKyDMr4URkqNw36IXBRumIObGqJ3wdGdopuE4odiV7SLkdxz0XW6OW1gQh66cE9hI0L2vnfFHpdX3nem3RaFZ5fvt0F+rK4NqTU5lItb0rLV6prZN4u5/lwWOZabBfcbxNhOkwzOslvzPdMcdhFRHgJgutXkyhDwYqMk0XYS5v5ZVtxjIg95KXRtWYCuPUPoU3H/Ql4JiF0hYgtKyjXhiZ6J39m3TtQwam/K+POz2vYF/p724FAbGltPKFgZXqTvl1AGzGiINB6+gypl4sujfyUMX2z5luJuzVqcYKbrXdAk/Mwm+QGthFmTq8imqAkXeMjqZcHQY7PygUodfg== Received: from DS7PR03CA0014.namprd03.prod.outlook.com (2603:10b6:5:3b8::19) by LV2PR12MB5944.namprd12.prod.outlook.com (2603:10b6:408:14f::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7025.27; Sun, 3 Dec 2023 11:26:35 +0000 Received: from DS1PEPF0001709B.namprd05.prod.outlook.com (2603:10b6:5:3b8:cafe::51) by DS7PR03CA0014.outlook.office365.com (2603:10b6:5:3b8::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7002.17 via Frontend Transport; Sun, 3 Dec 2023 11:26:34 +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 DS1PEPF0001709B.mail.protection.outlook.com (10.167.18.105) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.20 via Frontend Transport; Sun, 3 Dec 2023 11:26:34 +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.41; Sun, 3 Dec 2023 03:26:24 -0800 Received: from rnnvmail205.nvidia.com (10.129.68.10) 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.41; Sun, 3 Dec 2023 03:26:23 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41 via Frontend Transport; Sun, 3 Dec 2023 03:26:22 -0800 From: Michael Baum To: CC: Matan Azrad , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou Subject: [PATCH v1 14/23] net/mlx5: add API to expose GENEVE option FW information Date: Sun, 3 Dec 2023 13:25:34 +0200 Message-ID: <20231203112543.844014-15-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231203112543.844014-1-michaelba@nvidia.com> References: <20231203112543.844014-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF0001709B:EE_|LV2PR12MB5944:EE_ X-MS-Office365-Filtering-Correlation-Id: 6bcf0374-1ea8-467f-ef10-08dbf3f2b4c7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Iwq3wzTk2ylyu7CbLJOkI228n+GSiwg52cGkq8fvzXNbXcTzJFT/4zQFGN3nEAyVsyHCD3yppo/sfQW0+KyiHaZsnW+06N5smShAphoRUW26HEwSpkSg1hoiluO/bTxoDh245xGSSrruilXZ+27vs5Y932oiiVMAXMAnePvC85JfGtD0XKYrE4roQdX33HNu2s1X5NRBMlWKMQGzK4vixEYftGx4cyusRBhNldcrZqHu+bVcgak85PqhSPZYIaeYatSXEs9cY5zoVJAPya6CI/imo5bYjTs3Kubf8oPI5FltwkTPB517JEKnsolw1KnBU0fR+OoKRgjdowL7HhEpEiPhjuo/3FnLxqeDxdr9NGUIeyEf1+VcJMtVEYK2gWzozGQutAuGZGQFMw4JMFqInMDyZ1j/a71XWJCnNaDZAJO8ETq5SgDSp3SKkgRGwZdRHho21ukP9pY6pX7sE11+LvSC0ZoiajKl+JL/PQxHIb8BkcBXvxP7npHHyCXK+/Q9OpocLZ9JaufHyM2pMhcsNYSNdt/GWdYikXggLhLhM1j1Rty21yeaCD3nLyWx9triqVVcci2n19OIUDfffOy6DTH6/k1yaEpGNEc2k1jc4dV1z+5nYWAhqlACF6CkEKQ9nhALUN8nkgvhoDChbPDzd8Bz5F2VmHx3fjhvz783qMc2kHAo3nlcPVrgFK+fpHGISd8ajAv0QVYL0S2aRq9Hn4I6by9J1CDjkPv9x2eSgG7DipqdMtmuzXvLg7U1h6U6 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:(13230031)(4636009)(346002)(39860400002)(136003)(376002)(396003)(230922051799003)(451199024)(186009)(64100799003)(82310400011)(1800799012)(40470700004)(36840700001)(46966006)(6666004)(4326008)(8936002)(8676002)(7696005)(478600001)(6916009)(316002)(54906003)(40460700003)(107886003)(36860700001)(86362001)(6286002)(55016003)(1076003)(356005)(47076005)(7636003)(26005)(36756003)(40480700001)(2616005)(41300700001)(70586007)(2906002)(82740400003)(70206006)(426003)(336012)(5660300002); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2023 11:26:34.2287 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6bcf0374-1ea8-467f-ef10-08dbf3f2b4c7 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: DS1PEPF0001709B.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV2PR12MB5944 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 Add a new API to expose GENEVE option FW information to DR layer. Signed-off-by: Michael Baum --- drivers/net/mlx5/mlx5_flow.h | 28 +++++++++ drivers/net/mlx5/mlx5_flow_geneve.c | 94 +++++++++++++++++++++++++++++ 2 files changed, 122 insertions(+) diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h index 4bfc218175..dca3cacb65 100644 --- a/drivers/net/mlx5/mlx5_flow.h +++ b/drivers/net/mlx5/mlx5_flow.h @@ -1766,6 +1766,34 @@ flow_hw_get_reg_id_from_ctx(void *dr_ctx, return REG_NON; } +/** + * Get GENEVE TLV option FW information according type and class. + * + * @param[in] dr_ctx + * Pointer to HW steering DR context. + * @param[in] type + * GENEVE TLV option type. + * @param[in] class + * GENEVE TLV option class. + * @param[out] hl_ok_bit + * Pointer to header layout structure describing OK bit FW information. + * @param[out] num_of_dws + * Pointer to fill inside the size of 'hl_dws' array. + * @param[out] hl_dws + * Pointer to header layout array describing data DWs FW information. + * @param[out] ok_bit_on_class + * Pointer to an indicator whether OK bit includes class along with type. + * + * @return + * 0 on success, negative errno otherwise and rte_errno is set. + */ +int +mlx5_get_geneve_hl_data(const void *dr_ctx, uint8_t type, uint16_t class, + struct mlx5_hl_data ** const hl_ok_bit, + uint8_t *num_of_dws, + struct mlx5_hl_data ** const hl_dws, + bool *ok_bit_on_class); + void * mlx5_geneve_tlv_parser_create(uint16_t port_id, const struct rte_pmd_mlx5_geneve_tlv tlv_list[], diff --git a/drivers/net/mlx5/mlx5_flow_geneve.c b/drivers/net/mlx5/mlx5_flow_geneve.c index f23fb31aa0..2d593b70ba 100644 --- a/drivers/net/mlx5/mlx5_flow_geneve.c +++ b/drivers/net/mlx5/mlx5_flow_geneve.c @@ -58,6 +58,100 @@ struct mlx5_geneve_tlv_options { RTE_ATOMIC(uint32_t) refcnt; }; +/** + * Check if type and class is matching to given GENEVE TLV option. + * + * @param type + * GENEVE option type. + * @param class + * GENEVE option class. + * @param option + * Pointer to GENEVE TLV option structure. + * + * @return + * True if this type and class match to this option, false otherwise. + */ +static inline bool +option_match_type_and_class(uint8_t type, uint16_t class, + struct mlx5_geneve_tlv_option *option) +{ + if (type != option->type) + return false; + if (option->class_mode == 1 && option->class != class) + return false; + return true; +} + +/** + * Get GENEVE TLV option matching to given type and class. + * + * @param priv + * Pointer to port's private data. + * @param type + * GENEVE option type. + * @param class + * GENEVE option class. + * + * @return + * Pointer to option structure if exist, NULL otherwise and rte_errno is set. + */ +static struct mlx5_geneve_tlv_option * +mlx5_geneve_tlv_option_get(const struct mlx5_priv *priv, uint8_t type, + uint16_t class) +{ + struct mlx5_geneve_tlv_options *options; + uint8_t i; + + if (priv->tlv_options == NULL) { + DRV_LOG(ERR, + "Port %u doesn't have configured GENEVE TLV options.", + priv->dev_data->port_id); + rte_errno = EINVAL; + return NULL; + } + options = priv->tlv_options; + MLX5_ASSERT(options != NULL); + for (i = 0; i < options->nb_options; ++i) { + struct mlx5_geneve_tlv_option *option = &options->options[i]; + + if (option_match_type_and_class(type, class, option)) + return option; + } + DRV_LOG(ERR, "TLV option type %u class %u doesn't exist.", type, class); + rte_errno = ENOENT; + return NULL; +} + +int +mlx5_get_geneve_hl_data(const void *dr_ctx, uint8_t type, uint16_t class, + struct mlx5_hl_data ** const hl_ok_bit, + uint8_t *num_of_dws, + struct mlx5_hl_data ** const hl_dws, + bool *ok_bit_on_class) +{ + uint16_t port_id; + + MLX5_ETH_FOREACH_DEV(port_id, NULL) { + struct mlx5_priv *priv; + struct mlx5_geneve_tlv_option *option; + + priv = rte_eth_devices[port_id].data->dev_private; + if (priv->dr_ctx != dr_ctx) + continue; + /* Find specific option inside list. */ + option = mlx5_geneve_tlv_option_get(priv, type, class); + if (option == NULL) + return -rte_errno; + *hl_ok_bit = &option->hl_ok_bit; + *hl_dws = option->match_data; + *num_of_dws = option->match_data_size; + *ok_bit_on_class = !!(option->class_mode == 1); + return 0; + } + DRV_LOG(ERR, "DR CTX %p doesn't belong to any DPDK port.", dr_ctx); + return -EINVAL; +} + /** * Create single GENEVE TLV option sample. * From patchwork Sun Dec 3 11:25:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 134764 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 0A7564365F; Sun, 3 Dec 2023 12:28:27 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B424F40ECF; Sun, 3 Dec 2023 12:26:49 +0100 (CET) Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2041.outbound.protection.outlook.com [40.107.236.41]) by mails.dpdk.org (Postfix) with ESMTP id 03D4940E4A for ; Sun, 3 Dec 2023 12:26:46 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UlYFPBexMYgF72VGdSvBLY3bo8Pfxo5nVM6mcqN8StOpcn6lvk+Zc0HpKjdcHByGvlEpYj+JcFCPMMZ5M7Eig8Mc/cYNb8k0IEYLbc8Mc6LukJq64EZDSJJKGVaxa/aLgb3K6q4azSW40wtamwTHJ2EiHL3zzhY6sbi4WiaIw0JnL2ZG2PSfdpfVP6/Xrhm54+C21s9wTkd+25vONutiIk43oa84F8lun2Z9W32mXwSHQL5lviKxzZ7ylOFYh3A3r2tgBmjaaGPqhJlaO41K7dt8vVWHBQTGCM++b07rao9/aQz7mVJijvfAwoeuRw9ksgMMXaqnAYEhjjtLx5FZHw== 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=/OXEZhUM1KNWjVpUhxJ3s4NM4gAJlHiGl1U7lEUBY5s=; b=nyxfUPG+qUufoaSGVrGYugktlUOie/XMBxziMWM/O1xiu3/Tj/xbVdsEMWbbTdU3HuGWXQSwbg1q5tnzvR+/BQmDYkBhj1fyARxBO6XKoWHYq1M4aMDpffzy3/0prNuvtUUuODi1lxk7CCAEoOftebHqC4KxeirBQxGnNwmqk9CA+KobQhAJKTvspN/iMUkK6DBYOr92oIhdFoEJnmImY5ZN3b+Be5ZF3Pn5XmR09slOJSZqGvZVK3r7EoOYYdEw4F/MK9RwLoq8CxE7w5a4+sb6bC/0qDkhziUxAIlSUnzf3pVl6zu4KAF63OCm1p8uhg/5EANQPzXeLD9q/xAASQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) 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 (0) 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=/OXEZhUM1KNWjVpUhxJ3s4NM4gAJlHiGl1U7lEUBY5s=; b=GkuYTamozroCHBZvYd+B91+1IhGh+RSrXoahV83MSCOtUP1pn1nqXJv9xXterAzto5UaG0s7ejul4XJTrg8Zu8Kfu8BwoPw+Gfip2Wpc+mHxemJtij9Js9j8GTZftKbKO1HNn7JeyhRR2stfzz1dfrrSc0J7bVJoiJ6saoE3ZJhUv8PryQsZ1VEWNFUV+tjiIBDQZvdW6+QHHV9sdcp3Jx4ET+xC8T1UaHFIztUMui5v9pLdTKdnO2loujDlexOT8Z+hmmBtSWoF6HbrPrYyZXuifup64bYNNLm9S1ExZYLbB0SMI7WjS+6InMvFPQch9YGbQV5WgIDcpp7rsempUQ== Received: from SJ0PR05CA0177.namprd05.prod.outlook.com (2603:10b6:a03:339::32) by MN2PR12MB4438.namprd12.prod.outlook.com (2603:10b6:208:267::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32; Sun, 3 Dec 2023 11:26:44 +0000 Received: from CO1PEPF000042AE.namprd03.prod.outlook.com (2603:10b6:a03:339:cafe::a7) by SJ0PR05CA0177.outlook.office365.com (2603:10b6:a03:339::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.21 via Frontend Transport; Sun, 3 Dec 2023 11:26:44 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CO1PEPF000042AE.mail.protection.outlook.com (10.167.243.43) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.20 via Frontend Transport; Sun, 3 Dec 2023 11:26:43 +0000 Received: from rnnvmail204.nvidia.com (10.129.68.6) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:26:27 -0800 Received: from rnnvmail205.nvidia.com (10.129.68.10) by rnnvmail204.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:26:26 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41 via Frontend Transport; Sun, 3 Dec 2023 03:26:24 -0800 From: Michael Baum To: CC: Matan Azrad , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou Subject: [PATCH v1 15/23] net/mlx5: add testpmd support for GENEVE TLV parser Date: Sun, 3 Dec 2023 13:25:35 +0200 Message-ID: <20231203112543.844014-16-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231203112543.844014-1-michaelba@nvidia.com> References: <20231203112543.844014-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000042AE:EE_|MN2PR12MB4438:EE_ X-MS-Office365-Filtering-Correlation-Id: 8b04bafa-bc45-4233-6dc1-08dbf3f2ba7f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: XVvfcBpLV4auvRpmkA6XPaBI7gMfFMZTZ+khm4RKEml0PFal98jpyHRHEckuM93oDCe+Oid1k7TR/i2hvSpopVWKKI79S4dP/sMYdV8MPrLOrCVaIcQLQCp6TSQwH/UPh8dTD3rAmv1wSZCcN4a4M6GLqGy3ctJYbp6o7QFMsUAOHAZyi0wa5n7aPFibeagQc2Sm/eztudpNMuJt8MJqg/pspc9CAwbh+Zy6lU/LHJj6/kMTPs0z0/4bfvdAOh/Zwq3plFL58KpH0JZrpxeXYh1NASwryxBe/6pAvJRf/k/Pdog4doYGB8Qxfs4rlkpMPof3F3mRmhclr2mRE9dArf62O8h00/1mEBCz1a44rJ1NLMErd2//wLgsPuSNN7HUOz3wc2SmR6CiN0ILY0ouyEHWbHnNRZjzdQ82scWH97/3rsWkixNTZqf2SzKNnJjdDI48fO9jAYYSL8+Sh4DOsv20WZQji1tuhNbsZaNtaQtK6SjK48Y9Re7lp1D4XwZljBb5shl9M0vt+Be1R+dCTAtg2qqnBoBugvfZoS2joD/QfWW8uf/r646BmBg6ZRkSii2GMGOqDBNbehtGRRmTSpc9qqzKMjMBvJg0IPaL24SasQE9aaBUXQhA+pd3gL+NFj02qGOM1IJrvXbKZuCYXghnBdPx6JDWqsGNnrVCBF0ktPPe7UaOBfGE/s/+ECCBlnZbTA43NCjQH7EQPcRUCVeu3zFQetmrmUKzmjEObWWgs2RZv6vjGzgcwIR5Y9zP X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230031)(4636009)(376002)(346002)(39860400002)(396003)(136003)(230922051799003)(64100799003)(82310400011)(186009)(451199024)(1800799012)(36840700001)(46966006)(40470700004)(70586007)(70206006)(54906003)(316002)(6916009)(478600001)(40460700003)(6666004)(30864003)(5660300002)(41300700001)(36756003)(2906002)(86362001)(4326008)(8676002)(8936002)(107886003)(1076003)(2616005)(36860700001)(83380400001)(40480700001)(47076005)(7636003)(55016003)(356005)(26005)(6286002)(336012)(426003)(82740400003)(7696005); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2023 11:26:43.8199 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8b04bafa-bc45-4233-6dc1-08dbf3f2ba7f 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.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000042AE.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4438 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 Add GENEVE TLV parser support for mlx5 testpmd using following commands: 1. Add single option to the global option list: testpmd> mlx5 set tlv_option class (class) type (type) len (length) \ offset (sample_offset) sample_len (sample_len) \ class_mode (ignore|fixed|matchable) \ data (0xffffffff|0x0 [0xffffffff|0x0]*) 2. Remove several options from the global option list: testpmd> mlx5 flush tlv_options max (nb_option) 3. Print all options which are set in the global option list so far: testpmd> mlx5 list tlv_options 4. Create GENEVE TLV parser for specific port using option list which are set so far: testpmd> mlx5 port (port_id) apply tlv_options 5. Destroy GENEVE TLV parser for specific port: testpmd> mlx5 port (port_id) destroy tlv_options Signed-off-by: Michael Baum --- doc/guides/nics/mlx5.rst | 97 ++++++ drivers/net/mlx5/mlx5_testpmd.c | 556 +++++++++++++++++++++++++++++++- 2 files changed, 652 insertions(+), 1 deletion(-) diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst index 80446d8d82..b0f2cdcd62 100644 --- a/doc/guides/nics/mlx5.rst +++ b/doc/guides/nics/mlx5.rst @@ -2499,3 +2499,100 @@ This command is used for testing live migration, and works for software steering only. Default FDB jump should be disabled if switchdev is enabled. The mode will propagate to all the probed ports. + +GENEVE TLV options parser +~~~~~~~~~~~~~~~~~~~~~~~~~ + +GENEVE TLV options parser management. +See :ref:`options parser API ` for more information. + +Setting Option +^^^^^^^^^^^^^^ + +Add single option to the global option list:: + + testpmd> mlx5 set tlv_option class (class) type (type) len (length) \ + offset (sample_offset) sample_len (sample_len) \ + class_mode (ignore|fixed|matchable) data (0xffffffff|0x0 [0xffffffff|0x0]*) + +where: + +* ``class``: option class. +* ``type``: option type. +* ``length``: option data length in 4 bytes granularity. +* ``sample_offset``: offset to data list related to option data start. + The offset is in 4 bytes granularity. +* ``sample_len``: length data list in 4 bytes granularity. +* ``ignore``: ignore ``class`` field. +* ``fixed``: option class is fixed and defines the option along with the type. +* ``matchable``: ``class`` field is matchable. +* ``data``: list of masks indicating which DW should be configure. + The size of list should be equal to ``sample_len``. +* ``0xffffffff``: this DW should be configure. +* ``0x0``: this DW shouldn't be configure. + + +Flushing Options +^^^^^^^^^^^^^^^^ + +Remove several options from the global option list:: + + testpmd> mlx5 flush tlv_options max (nb_option) + +where: + +* ``nb_option``: maximum number of option to remove from list. The order is LIFO. + + +Listing Options +^^^^^^^^^^^^^^^ + +Print all options which are set in the global option list so far:: + + testpmd> mlx5 list tlv_options + +Output contains the values of each option, one per line. +There is no output at all when no options are configured on the global list:: + + ID Type Class Class_mode Len Offset Sample_len Data + [...] [...] [...] [...] [...] [...] [...] [...] + +Setting several options and listing them:: + + testpmd> mlx5 set tlv_option class 1 type 1 len 4 offset 1 sample_len 3 + class_mode fixed data 0xffffffff 0x0 0xffffffff + testpmd: set new option in global list, now it has 1 options + testpmd> mlx5 set tlv_option class 1 type 2 len 2 offset 0 sample_len 2 + class_mode fixed data 0xffffffff 0xffffffff + testpmd: set new option in global list, now it has 2 options + testpmd> mlx5 set tlv_option class 1 type 3 len 5 offset 4 sample_len 1 + class_mode fixed data 0xffffffff + testpmd: set new option in global list, now it has 3 options + testpmd> mlx5 list tlv_options + ID Type Class Class_mode Len Offset Sample_len Data + 0 1 1 fixed 4 1 3 0xffffffff 0x0 0xffffffff + 1 2 1 fixed 2 0 2 0xffffffff 0xffffffff + 2 3 1 fixed 5 4 1 0xffffffff + testpmd> + + +Applying Options +^^^^^^^^^^^^^^^^ + +Create GENEVE TLV parser for specific port using option list which are set so +far:: + + testpmd> mlx5 port (port_id) apply tlv_options + +The same global option list can used by several ports. + + +Destroying Options +^^^^^^^^^^^^^^^^^^ + +Destroy GENEVE TLV parser for specific port:: + + testpmd> mlx5 port (port_id) destroy tlv_options + +This command doesn't destroy the global list, +For releasing options, ``flush`` command should be used. diff --git a/drivers/net/mlx5/mlx5_testpmd.c b/drivers/net/mlx5/mlx5_testpmd.c index 403f3a8f83..5bc4dd0551 100644 --- a/drivers/net/mlx5/mlx5_testpmd.c +++ b/drivers/net/mlx5/mlx5_testpmd.c @@ -23,9 +23,25 @@ #include "mlx5_testpmd.h" #include "testpmd.h" -static uint8_t host_shaper_avail_thresh_triggered[RTE_MAX_ETHPORTS]; #define SHAPER_DISABLE_DELAY_US 100000 /* 100ms */ +#define MAX_GENEVE_OPTIONS_RESOURCES 7 #define PARSE_DELIMITER " \f\n\r\t\v" +#define SPACE_DELIMITER (" ") + +static uint8_t host_shaper_avail_thresh_triggered[RTE_MAX_ETHPORTS]; + +struct mlx5_port { + void *geneve_tlv_parser_handle; +}; + +static struct mlx5_port private_port[RTE_MAX_ETHPORTS] = {{0}}; + +struct tlv_list_manager { + uint8_t nb_options; + struct rte_pmd_mlx5_geneve_tlv tlv_list[MAX_GENEVE_OPTIONS_RESOURCES]; +}; + +static struct tlv_list_manager tlv_mng = {.nb_options = 0}; static int parse_uint(uint64_t *value, const char *str) @@ -304,6 +320,88 @@ mlx5_test_attach_port_extend_devargs(char *identifier) } #endif +static inline const char * +mode2string(uint8_t mode) +{ + switch (mode) { + case 0: + return "ignored\t"; + case 1: + return "fixed\t"; + case 2: + return "matchable"; + default: + break; + } + return "unknown"; +} + +static inline uint8_t +string2mode(const char *mode) +{ + if (strcmp(mode, "ignored") == 0) + return 0; + if (strcmp(mode, "fixed") == 0) + return 1; + if (strcmp(mode, "matchable") == 0) + return 2; + return UINT8_MAX; +} + +static int +mlx5_test_parse_geneve_option_data(const char *buff, uint8_t data_len, + rte_be32_t **match_data_mask) +{ + rte_be32_t *data; + char *buff2; + char *token; + uint8_t i = 0; + + if (data_len == 0) { + *match_data_mask = NULL; + return 0; + } + + data = calloc(data_len, sizeof(rte_be32_t)); + if (data == NULL) { + TESTPMD_LOG(ERR, "Fail to allocate memory for GENEVE TLV option data\n"); + return -ENOMEM; + } + + buff2 = strdup(buff); + if (buff2 == NULL) { + TESTPMD_LOG(ERR, + "Fail to duplicate GENEVE TLV option data string (%s)\n", + buff); + free(data); + return -ENOMEM; + } + + token = strtok(buff2, SPACE_DELIMITER); + while (token != NULL) { + if (i == data_len) { + TESTPMD_LOG(ERR, + "GENEVE TLV option has more data then given data length %u\n", + data_len); + free(buff2); + free(data); + return -EINVAL; + } + + if (strcmp(token, "0xffffffff") == 0) + data[i] = 0xffffffff; + else + data[i] = 0x0; + + token = strtok(NULL, SPACE_DELIMITER); + i++; + } + + free(buff2); + *match_data_mask = data; + return 0; +} + /* *** SET HOST_SHAPER FOR A PORT *** */ struct cmd_port_host_shaper_result { cmdline_fixed_string_t mlx5; @@ -680,6 +778,429 @@ cmdline_parse_inst_t mlx5_cmd_set_flow_engine_mode = { } }; +/* Prepare single GENEVE TLV option and add it into global option list. */ +struct mlx5_cmd_set_tlv_option { + cmdline_fixed_string_t mlx5; + cmdline_fixed_string_t set; + cmdline_fixed_string_t tlv_option; + cmdline_fixed_string_t class; + uint16_t class_id; + cmdline_fixed_string_t type; + uint8_t type_id; + cmdline_fixed_string_t len; + uint8_t option_len; + cmdline_fixed_string_t offset; + uint8_t off; + cmdline_fixed_string_t sample_len; + uint8_t length; + cmdline_fixed_string_t class_mode; + cmdline_fixed_string_t cmode; + cmdline_fixed_string_t data; + cmdline_fixed_string_t data_mask; +}; + +cmdline_parse_token_string_t mlx5_cmd_set_tlv_option_mlx5 = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_set_tlv_option, mlx5, "mlx5"); +cmdline_parse_token_string_t mlx5_cmd_set_tlv_option_set = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_set_tlv_option, set, "set"); +cmdline_parse_token_string_t mlx5_cmd_set_tlv_option_tlv_option = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_set_tlv_option, tlv_option, + "tlv_option"); +cmdline_parse_token_string_t mlx5_cmd_set_tlv_option_class = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_set_tlv_option, class, + "class"); +cmdline_parse_token_num_t mlx5_cmd_set_tlv_option_class_id = + TOKEN_NUM_INITIALIZER(struct mlx5_cmd_set_tlv_option, class_id, + RTE_UINT16); +cmdline_parse_token_string_t mlx5_cmd_set_tlv_option_type = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_set_tlv_option, type, "type"); +cmdline_parse_token_num_t mlx5_cmd_set_tlv_option_type_id = + TOKEN_NUM_INITIALIZER(struct mlx5_cmd_set_tlv_option, type_id, + RTE_UINT8); +cmdline_parse_token_string_t mlx5_cmd_set_tlv_option_len = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_set_tlv_option, len, "len"); +cmdline_parse_token_num_t mlx5_cmd_set_tlv_option_option_len = + TOKEN_NUM_INITIALIZER(struct mlx5_cmd_set_tlv_option, option_len, + RTE_UINT8); +cmdline_parse_token_string_t mlx5_cmd_set_tlv_option_offset = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_set_tlv_option, offset, + "offset"); +cmdline_parse_token_num_t mlx5_cmd_set_tlv_option_off = + TOKEN_NUM_INITIALIZER(struct mlx5_cmd_set_tlv_option, off, RTE_UINT8); +cmdline_parse_token_string_t mlx5_cmd_set_tlv_option_sample_len = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_set_tlv_option, sample_len, + "sample_len"); +cmdline_parse_token_num_t mlx5_cmd_set_tlv_option_length = + TOKEN_NUM_INITIALIZER(struct mlx5_cmd_set_tlv_option, length, + RTE_UINT8); +cmdline_parse_token_string_t mlx5_cmd_set_tlv_option_class_mode = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_set_tlv_option, class_mode, + "class_mode"); +cmdline_parse_token_string_t mlx5_cmd_set_tlv_option_cmode = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_set_tlv_option, cmode, + "ignored#fixed#matchable"); +cmdline_parse_token_string_t mlx5_cmd_set_tlv_option_data = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_set_tlv_option, data, "data"); +cmdline_parse_token_string_t mlx5_cmd_set_tlv_option_data_mask = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_set_tlv_option, data_mask, ""); + +static void +mlx5_cmd_set_tlv_option_parsed(void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) +{ + struct mlx5_cmd_set_tlv_option *res = parsed_result; + struct rte_pmd_mlx5_geneve_tlv *option; + uint8_t class_mode; + int ret; + + if (tlv_mng.nb_options == MAX_GENEVE_OPTIONS_RESOURCES) { + fprintf(stderr, "GENEVE TLV option list is full\n"); + return; + } + + if (res->option_len < res->length + res->off) { + fprintf(stderr, + "GENEVE TLV option length (%u) cannot be less than offset (%u) + sample_len (%u)\n", + res->option_len, res->length, res->off); + return; + } + + if (res->option_len > 32) { + fprintf(stderr, + "GENEVE TLV option length (%u) must be less than 32\n", + res->option_len); + return; + } + + class_mode = string2mode(res->cmode); + if (class_mode == UINT8_MAX) { + fprintf(stderr, "Invalid class mode \"%s\"\n", res->cmode); + return; + } + + if (res->length > 0) { + if (strcmp(res->data, "data") || !strcmp(res->data_mask, "")) { + fprintf(stderr, + "sample_len is %u but any data isn't provided\n", + res->length); + return; + } + } else { + if (!strcmp(res->data, "data") && strcmp(res->data_mask, "")) { + fprintf(stderr, + "sample_len is 0 but data is provided (%s)\n", + res->data_mask); + return; + } + } + + option = &tlv_mng.tlv_list[tlv_mng.nb_options]; + ret = mlx5_test_parse_geneve_option_data(res->data_mask, res->length, + &option->match_data_mask); + if (ret < 0) + return; + + option->match_on_class_mode = class_mode; + option->option_class = rte_cpu_to_be_16(res->class_id); + option->option_type = res->type_id; + option->option_len = res->option_len; + option->offset = res->off; + option->sample_len = res->length; + tlv_mng.nb_options++; + + TESTPMD_LOG(DEBUG, + "set new option in global list, now it has %u options\n", + tlv_mng.nb_options); +} + +cmdline_parse_inst_t mlx5_cmd_set_tlv_option = { + .f = mlx5_cmd_set_tlv_option_parsed, + .data = NULL, + .help_str = "mlx5 set tlv_option class type len " + " offset sample_len " + " class_mode data ", + .tokens = { + (void *)&mlx5_cmd_set_tlv_option_mlx5, + (void *)&mlx5_cmd_set_tlv_option_set, + (void *)&mlx5_cmd_set_tlv_option_tlv_option, + (void *)&mlx5_cmd_set_tlv_option_class, + (void *)&mlx5_cmd_set_tlv_option_class_id, + (void *)&mlx5_cmd_set_tlv_option_type, + (void *)&mlx5_cmd_set_tlv_option_type_id, + (void *)&mlx5_cmd_set_tlv_option_len, + (void *)&mlx5_cmd_set_tlv_option_option_len, + (void *)&mlx5_cmd_set_tlv_option_offset, + (void *)&mlx5_cmd_set_tlv_option_off, + (void *)&mlx5_cmd_set_tlv_option_sample_len, + (void *)&mlx5_cmd_set_tlv_option_length, + (void *)&mlx5_cmd_set_tlv_option_class_mode, + (void *)&mlx5_cmd_set_tlv_option_cmode, + (void *)&mlx5_cmd_set_tlv_option_data, + (void *)&mlx5_cmd_set_tlv_option_data_mask, + NULL, + } +}; + +/* Print all GENEVE TLV options which are configured so far. */ +struct mlx5_cmd_list_tlv_options { + cmdline_fixed_string_t mlx5; + cmdline_fixed_string_t list; + cmdline_fixed_string_t tlv_options; +}; + +cmdline_parse_token_string_t mlx5_cmd_list_tlv_options_mlx5 = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_list_tlv_options, mlx5, + "mlx5"); +cmdline_parse_token_string_t mlx5_cmd_list_tlv_options_list = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_list_tlv_options, list, + "list"); +cmdline_parse_token_string_t mlx5_cmd_list_tlv_options_tlv_options = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_list_tlv_options, tlv_options, + "tlv_options"); + +static void +mlx5_cmd_list_tlv_options_parsed(__rte_unused void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) +{ + struct rte_pmd_mlx5_geneve_tlv *option; + uint8_t i, j; + + printf("ID\tType\tClass\tClass_mode\tLen\tOffset\tSample_len\tData\n"); + for (i = 0; i < tlv_mng.nb_options; ++i) { + option = &tlv_mng.tlv_list[i]; + printf("%u\t%u\t%u\t%s\t%u\t%u\t%u\t\t", i, + option->option_type, rte_be_to_cpu_16(option->option_class), + mode2string(option->match_on_class_mode), + option->option_len, + option->offset, option->sample_len); + for (j = 0; j < option->sample_len; ++j) + printf("0x%x ", option->match_data_mask[j]); + printf("\n"); + } +} + +cmdline_parse_inst_t mlx5_cmd_list_tlv_options = { + .f = mlx5_cmd_list_tlv_options_parsed, + .data = NULL, + .help_str = "mlx5 list tlv_options", + .tokens = { + (void *)&mlx5_cmd_list_tlv_options_mlx5, + (void *)&mlx5_cmd_list_tlv_options_list, + (void *)&mlx5_cmd_list_tlv_options_tlv_options, + NULL, + } +}; + +/* Clear all GENEVE TLV options which are configured so far. */ +struct mlx5_cmd_flush_tlv_options { + cmdline_fixed_string_t mlx5; + cmdline_fixed_string_t flush; + cmdline_fixed_string_t tlv_options; + cmdline_fixed_string_t max; + uint8_t number; +}; + +cmdline_parse_token_string_t mlx5_cmd_flush_tlv_options_mlx5 = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_flush_tlv_options, mlx5, + "mlx5"); +cmdline_parse_token_string_t mlx5_cmd_flush_tlv_options_flush = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_flush_tlv_options, flush, + "flush"); +cmdline_parse_token_string_t mlx5_cmd_flush_tlv_options_tlv_options = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_flush_tlv_options, tlv_options, + "tlv_options"); +cmdline_parse_token_string_t mlx5_cmd_flush_tlv_options_max = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_flush_tlv_options, max, "max"); +cmdline_parse_token_num_t mlx5_cmd_flush_tlv_options_number = + TOKEN_NUM_INITIALIZER(struct mlx5_cmd_flush_tlv_options, number, + RTE_UINT8); + +static void +mlx5_cmd_flush_tlv_options_parsed(void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) +{ + struct mlx5_cmd_flush_tlv_options *res = parsed_result; + struct rte_pmd_mlx5_geneve_tlv *option; + uint8_t nb_options_flush = tlv_mng.nb_options; + uint8_t nb_options_left = 0; + + if (strcmp(res->max, "max") == 0 && res->number < tlv_mng.nb_options) { + nb_options_left = tlv_mng.nb_options - res->number; + nb_options_flush = RTE_MIN(res->number, nb_options_flush); + } + + while (tlv_mng.nb_options > nb_options_left) { + tlv_mng.nb_options--; + option = &tlv_mng.tlv_list[tlv_mng.nb_options]; + if (option->match_data_mask) { + free(option->match_data_mask); + option->match_data_mask = NULL; + } + } + + TESTPMD_LOG(DEBUG, "Flush %u latest configured GENEVE TLV options, " + "current number of options in the list is %u\n", + nb_options_flush, nb_options_left); +} + +cmdline_parse_inst_t mlx5_cmd_flush_tlv_options = { + .f = mlx5_cmd_flush_tlv_options_parsed, + .data = NULL, + .help_str = "mlx5 flush tlv_options max ", + .tokens = { + (void *)&mlx5_cmd_flush_tlv_options_mlx5, + (void *)&mlx5_cmd_flush_tlv_options_flush, + (void *)&mlx5_cmd_flush_tlv_options_tlv_options, + (void *)&mlx5_cmd_flush_tlv_options_max, + (void *)&mlx5_cmd_flush_tlv_options_number, + NULL, + } +}; + +/* Create GENEVE TLV parser using option list which is configured before. */ +struct mlx5_cmd_apply_tlv_options { + cmdline_fixed_string_t mlx5; + cmdline_fixed_string_t port; + portid_t port_id; + cmdline_fixed_string_t apply; + cmdline_fixed_string_t tlv_options; +}; + +cmdline_parse_token_string_t mlx5_cmd_apply_tlv_options_mlx5 = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_apply_tlv_options, mlx5, + "mlx5"); +cmdline_parse_token_string_t mlx5_cmd_apply_tlv_options_port = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_apply_tlv_options, port, + "port"); +cmdline_parse_token_num_t mlx5_cmd_apply_tlv_options_port_id = + TOKEN_NUM_INITIALIZER(struct mlx5_cmd_apply_tlv_options, port_id, + RTE_UINT16); +cmdline_parse_token_string_t mlx5_cmd_apply_tlv_options_apply = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_apply_tlv_options, apply, + "apply"); +cmdline_parse_token_string_t mlx5_cmd_apply_tlv_options_tlv_options = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_apply_tlv_options, tlv_options, + "tlv_options"); + +static void +mlx5_cmd_apply_tlv_options_parsed(void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) +{ + struct mlx5_cmd_apply_tlv_options *res = parsed_result; + struct mlx5_port *port; + void *handle; + + if (port_id_is_invalid(res->port_id, ENABLED_WARN)) + return; + + if (tlv_mng.nb_options == 0) { + fprintf(stderr, "The option list is empty, please set options\n"); + return; + } + + handle = rte_pmd_mlx5_create_geneve_tlv_parser(res->port_id, + tlv_mng.tlv_list, + tlv_mng.nb_options); + if (handle == NULL) { + fprintf(stderr, + "Fail to create GENEVE TLV parser, nb_option=%u: %s\n", + tlv_mng.nb_options, strerror(rte_errno)); + return; + } + + TESTPMD_LOG(DEBUG, "GENEVE TLV options parser is successfully created:" + " nb_option=%u, handle=%p\n", tlv_mng.nb_options, handle); + + port = &private_port[res->port_id]; + port->geneve_tlv_parser_handle = handle; +} + +cmdline_parse_inst_t mlx5_cmd_apply_tlv_options = { + .f = mlx5_cmd_apply_tlv_options_parsed, + .data = NULL, + .help_str = "mlx5 port apply tlv_options", + .tokens = { + (void *)&mlx5_cmd_apply_tlv_options_mlx5, + (void *)&mlx5_cmd_apply_tlv_options_port, + (void *)&mlx5_cmd_apply_tlv_options_port_id, + (void *)&mlx5_cmd_apply_tlv_options_apply, + (void *)&mlx5_cmd_apply_tlv_options_tlv_options, + NULL, + } +}; + +/* Destroy GENEVE TLV parser created by apply command. */ +struct mlx5_cmd_destroy_tlv_options { + cmdline_fixed_string_t mlx5; + cmdline_fixed_string_t port; + portid_t port_id; + cmdline_fixed_string_t destroy; + cmdline_fixed_string_t tlv_options; +}; + +cmdline_parse_token_string_t mlx5_cmd_destroy_tlv_options_mlx5 = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_destroy_tlv_options, mlx5, + "mlx5"); +cmdline_parse_token_string_t mlx5_cmd_destroy_tlv_options_port = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_destroy_tlv_options, port, + "port"); +cmdline_parse_token_num_t mlx5_cmd_destroy_tlv_options_port_id = + TOKEN_NUM_INITIALIZER(struct mlx5_cmd_destroy_tlv_options, port_id, + RTE_UINT16); +cmdline_parse_token_string_t mlx5_cmd_destroy_tlv_options_destroy = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_destroy_tlv_options, destroy, + "destroy"); +cmdline_parse_token_string_t mlx5_cmd_destroy_tlv_options_tlv_options = + TOKEN_STRING_INITIALIZER(struct mlx5_cmd_destroy_tlv_options, tlv_options, + "tlv_options"); + +static void +mlx5_cmd_destroy_tlv_options_parsed(void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) +{ + struct mlx5_cmd_destroy_tlv_options *res = parsed_result; + struct mlx5_port *port; + int ret; + + if (port_id_is_invalid(res->port_id, ENABLED_WARN)) + return; + + port = &private_port[res->port_id]; + if (!port->geneve_tlv_parser_handle) + return; + + ret = rte_pmd_mlx5_destroy_geneve_tlv_parser(port->geneve_tlv_parser_handle); + if (ret < 0) { + fprintf(stderr, "Fail to destroy GENEVE TLV parser: %s\n", + strerror(-ret)); + return; + } + + TESTPMD_LOG(DEBUG, "GENEVE TLV options parser is successfully released:" + " handle=%p\n", port->geneve_tlv_parser_handle); + + port->geneve_tlv_parser_handle = NULL; +} + +cmdline_parse_inst_t mlx5_cmd_destroy_tlv_options = { + .f = mlx5_cmd_destroy_tlv_options_parsed, + .data = NULL, + .help_str = "mlx5 port destroy tlv_options", + .tokens = { + (void *)&mlx5_cmd_destroy_tlv_options_mlx5, + (void *)&mlx5_cmd_destroy_tlv_options_port, + (void *)&mlx5_cmd_destroy_tlv_options_port_id, + (void *)&mlx5_cmd_destroy_tlv_options_destroy, + (void *)&mlx5_cmd_destroy_tlv_options_tlv_options, + NULL, + } +}; + static struct testpmd_driver_commands mlx5_driver_cmds = { .commands = { { @@ -712,6 +1233,39 @@ static struct testpmd_driver_commands mlx5_driver_cmds = { .help = "mlx5 set flow_engine (active|standby) [(flag)]\n" " Set flow_engine to the specific mode with flag.\n\n" }, + { + .ctx = &mlx5_cmd_set_tlv_option, + .help = "mlx5 set tlv_option class (class_id) type " + "(type_id) len (option_length) offset " + "(sample_offset) sample_len (sample_length) " + "class_mode (ignored|fixed|matchable) " + "data (mask1) [(mask2) [...]]\n" + " Set single GENEVE TLV option inside global list " + "using later by apply command\n\n", + }, + { + .ctx = &mlx5_cmd_list_tlv_options, + .help = "mlx5 list tlv_options\n" + " Print all GENEVE TLV options which are configured " + "so far by TLV option set command\n\n", + }, + { + .ctx = &mlx5_cmd_flush_tlv_options, + .help = "mlx5 flush tlv_options [max (number options)]\n" + " Clear all GENEVE TLV options which are configured " + "so far by TLV option set command\n\n", + }, + { + .ctx = &mlx5_cmd_apply_tlv_options, + .help = "mlx5 port (port_id) apply tlv_options\n" + " Create GENEVE TLV parser using option list which is " + "configured before by TLV option set command\n\n", + }, + { + .ctx = &mlx5_cmd_destroy_tlv_options, + .help = "mlx5 port (port_id) destroy tlv_options\n" + " Destroy GENEVE TLV parser\n\n", + }, { .ctx = NULL, }, From patchwork Sun Dec 3 11:25:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 134760 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 D9D1B4365F; Sun, 3 Dec 2023 12:27:56 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 05F0A402C5; Sun, 3 Dec 2023 12:26:44 +0100 (CET) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2062.outbound.protection.outlook.com [40.107.92.62]) by mails.dpdk.org (Postfix) with ESMTP id 4360E402BB for ; Sun, 3 Dec 2023 12:26:42 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LlucizaAvb8oQIh2PcxprdKZAS+HBqD2oxyTSGDAyEhSE/mOva8uK0H3AI5ec/UIdOffMdfC3JsuUj6H5KCQXuwCw4czPkdZLlRQXKNKnPpGJ70WDpiDKIgKGqQPaDHpasF+MlIzgzoYxDIzU+MM8SCiWxLKmXzLJhMOLj+yGXfZIi6nl4ZHjoKNCxOpeUTIlMtT+AShMobBq1nbc9npMMtGGf72b+wmX9Yxxlyq+h1lo0GxSnEUavPGR5N845BA/re9zWdwQLENhAOoJr/bxTE/OArBiBtYgmk+HIovZiCcxyzmIkUnjf4gZqdlV4HM8PgXsERV9w9TIR3vuFHWZw== 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=tmYXiuThzPCAtUAA3OYyyNDf6H+Bsy2KjniDC8KPr2M=; b=BF8S4B4ukfikU/uyp2VVWfDBHw0JSyGvk8ATQQaTD5s+gEcIPCV4qNRoTnzsgafUNDWPDJ4iSL5kvaCK6cms9Bjk8fKQZF9XSwYw22boW4UoHYNZwjll6aKciwVyxkUlzrvTpryW9C8ICPt+iacLilctCHmkQSU2x4J5e7Rn6AMGP7z6Tq5/ac97/gryZBmEYLxrYHqdAgwxd4c+yS6ql88QLrDibOlRsgFvsTZ3WYCMXIfNU5WPkPSYpqHx32hwy5do52MFpP7+vIM530AM5r+CdsPXWaSeILmW3NiSpPTlhLmuGrQaSbhBWy9EzvoeymPvdwDKkftitVGvfKk3zA== 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 (0) 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=tmYXiuThzPCAtUAA3OYyyNDf6H+Bsy2KjniDC8KPr2M=; b=SAXWjc96DCfhD3khvEgDjDWFzP0Ay2cezYc6oh1qcEVxGnXJNFk0Cq7Qy5vlIOTeJRQEkjm8wVWI8xDj7Ubmy24RmjL2QvQPjeIGEO6DpwJ3EolCze5Re5ZnuQMjKwD+u8cI2ioSoXOjrtnDqCzfcco8qlPvTucVrFk4FkJuz5ehLeFTqzVhAaxdBx0VzXvYDGUPq2PZiZtoHXU3FXrTIbVkL0GdP+v9y1UKxrzhN39jdtp1modg5W0fi9gEHzGAarcLZG4rRtP2Qek5TQa3ivM7KctGStyN5XjzdFpSvUMbYzEN6UDNHdqCwXgSx53TBWkRL1QUiOgNl5lFP6vSZw== Received: from DS7PR03CA0022.namprd03.prod.outlook.com (2603:10b6:5:3b8::27) by LV8PR12MB9134.namprd12.prod.outlook.com (2603:10b6:408:180::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.33; Sun, 3 Dec 2023 11:26:39 +0000 Received: from DS1PEPF0001709B.namprd05.prod.outlook.com (2603:10b6:5:3b8:cafe::b0) by DS7PR03CA0022.outlook.office365.com (2603:10b6:5:3b8::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6977.31 via Frontend Transport; Sun, 3 Dec 2023 11:26:39 +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 DS1PEPF0001709B.mail.protection.outlook.com (10.167.18.105) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.20 via Frontend Transport; Sun, 3 Dec 2023 11:26:39 +0000 Received: from rnnvmail203.nvidia.com (10.129.68.9) 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.41; Sun, 3 Dec 2023 03:26:29 -0800 Received: from rnnvmail205.nvidia.com (10.129.68.10) by rnnvmail203.nvidia.com (10.129.68.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:26:29 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41 via Frontend Transport; Sun, 3 Dec 2023 03:26:27 -0800 From: Michael Baum To: CC: Matan Azrad , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou , Alex Vesker Subject: [PATCH v1 16/23] net/mlx5/hws: increase hl size for future compatibility Date: Sun, 3 Dec 2023 13:25:36 +0200 Message-ID: <20231203112543.844014-17-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231203112543.844014-1-michaelba@nvidia.com> References: <20231203112543.844014-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF0001709B:EE_|LV8PR12MB9134:EE_ X-MS-Office365-Filtering-Correlation-Id: 5f94b61b-6b40-4b29-56d3-08dbf3f2b7d8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: I1lhrrSj7lqSKqUndpJb9A39csFhLd2AoJrfHSMSbo9OheyzRBnB6Y/2OuvD4hM4fg+RfK+wyWbC3HOAACebMlXhkMZLBIZ1Hee8y23oToIsXXDCRHSY1nd2Wdq5oxMc17wdLXTfhCDI0/s8ZV3KuwIEfne910291VgxBibbRmrth5NUvcUm3eYQHA0TqOy25jRCUdA9zuXriQsyj5FuYYnc99TfLaBLPfAtwbLM4Q2j6aM40Qw5fve8NJG0E+47WYBJx7QFNUkli8dsZWiytkpNUPY/+jHmIC6V6D+M9GASJqRSaFARGXUyRIJrL/VisL+oyrI0sfS4nCGBHv4GEprYWfNM+cEuSUQLu7HG6TeNLzkY9i/yb8GTIACPGlZkSGCmmZ6l6jRieGTfAZHH92l2DKQtd/8Jf62wOz7x837vQHRJWlB8q2Z4P6HdNC3rrais3R3yhDRFzvkdQ9+GMnfIXx9Z/ntli6E/VrXosmrDZ+S7XhfkTYVVK3vn6zScZ/bueijaMDaB6lx0uR9FeCESJzA2dx8AFtvIhrjZFjOAI/BsYNNht1sPISLoERsLMB0Pg4MuJe8RiYVk3lf0+w4nyxSfR8lmm+t9yAiEkruoeQVyGqD6TIyuNkeo1DdHWoGHXLTOTGogHXCqPuBXmzTD9re+1+3SR9K2reWNcZznMjEZ52A/lMHZsUsNZ+X7TS3RM66umHJNxmspTwJOqwMl7DQe24Gki5+zaKEi6RRO+thx/VZwSrRPmRJGT6QO 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:(13230031)(4636009)(136003)(39860400002)(346002)(396003)(376002)(230922051799003)(1800799012)(64100799003)(82310400011)(186009)(451199024)(40470700004)(46966006)(36840700001)(54906003)(6916009)(70586007)(70206006)(4326008)(8676002)(8936002)(316002)(478600001)(40460700003)(6666004)(5660300002)(36756003)(41300700001)(2906002)(86362001)(40480700001)(47076005)(356005)(82740400003)(426003)(83380400001)(2616005)(26005)(336012)(6286002)(107886003)(1076003)(7636003)(55016003)(36860700001)(7696005); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2023 11:26:39.3694 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5f94b61b-6b40-4b29-56d3-08dbf3f2b7d8 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: DS1PEPF0001709B.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR12MB9134 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: Alex Vesker In some cases we rely on header layout DW offset from FW caps, this is done in case of future HW which may support current flex fields natively, for this we must increase header layout to 255 DWs, which is the limit in current definer creation. Signed-off-by: Alex Vesker --- drivers/net/mlx5/hws/mlx5dr_definer.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/net/mlx5/hws/mlx5dr_definer.h b/drivers/net/mlx5/hws/mlx5dr_definer.h index 6f1c99e37a..e2be579303 100644 --- a/drivers/net/mlx5/hws/mlx5dr_definer.h +++ b/drivers/net/mlx5/hws/mlx5dr_definer.h @@ -523,10 +523,8 @@ struct mlx5_ifc_definer_hl_bits { u8 unsupported_free_running_timestamp[0x40]; struct mlx5_ifc_definer_hl_flex_parser_bits flex_parser; struct mlx5_ifc_definer_hl_registers_bits registers; - /* struct x ib_l3_extended; */ - /* struct x rwh */ - /* struct x dcceth */ - /* struct x dceth */ + /* Reserved in case header layout on future HW */ + u8 unsupported_reserved[0xd40]; }; enum mlx5dr_definer_gtp { From patchwork Sun Dec 3 11:25:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 134762 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 AFFDA4365F; Sun, 3 Dec 2023 12:28:13 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 97FB140E4A; Sun, 3 Dec 2023 12:26:47 +0100 (CET) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2049.outbound.protection.outlook.com [40.107.244.49]) by mails.dpdk.org (Postfix) with ESMTP id B856440395 for ; Sun, 3 Dec 2023 12:26:44 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=F4DbrtnlVMT+byZri2xVqxGodH5uYxBZ8XaafNl/ewPwnexmmxBnpj67dD5K/tWcQ626Rjhqd315M8+54693XEofdWN9lCGwC/qh1DlpMSDOZFQ5vShbyTvJ2CVFEe8AEMQkyJ1H5Dz/W3h7FUY8iHgoBeKTTP5ZtXq1yzQfrB5mxHDzvv15yoMbrqHfqeS6oQVqj++qkEFTUXCpEFvFR69+FeiEj7828QRyRFY3FwzY/yLZUJdjtodWg8idL5/S0fYiBae0Gf337+lhcbW9ru+6GKEDA7ktLJ3FNfIjJrtmpyLEstwoUEQg74h36IpI3UhJD9MjVFO+vkaR9/nW4w== 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=tBG0V/8MiN4JTlioMg5mvFV75quZcuCOWuiUmjGoQ3M=; b=T9NC+7O4v2ZuF9tmVGiKj1x0QhbOSOYdjiXW/7GVbDsEieK8XOb8dhIwKDjAxyFEicHdfLWvRCzTGpDHu1/ElAcKOrT3/xfwnwnczPjS2Erti7QWryYQb148+GBmcgqiX2eWnOwxjY6gTvPsQTLdWpqMRMg2e2f5AHj7vpirsJ9pm5uINmOVAvEY2AP8kia6uBDO4pKQHSkNePzbwvAs8P99ctZZIeXXtu0HYiO3R4+gSClrXCnTMigzeQhozI1JvscX/x8+RYtUzIejCb2eEQQa4J+U/czTO1qP0uWRun2JyCbjDOXALaSGXWaatYUWyG+bM1RJMXmYbvKVj7T/PQ== 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 (0) 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=tBG0V/8MiN4JTlioMg5mvFV75quZcuCOWuiUmjGoQ3M=; b=NZnCtveIgjazVrexlxuwT41gFtW2knp2e3Ht0MGldtz4dNg/ndNgCZWVluRzELbmu/ptLMmRb+Dtk1nvhfFb4Pvhk4YeNZ7ffkngNOimQagCJY/ANFdHshsQv6HlQIlee+ouv0C6SatlFgITaeJH30jVFXcQHZwvy68XcdlHkFpCFG5AhqFBkvbl7JmMcpUWlZk9fuaoNqoe9G19/Ajk54mx8OB1cWcUsBNZ7vOMrhEEVXR1HTX8JHjTCyuevWYKQBR2GaSCBAlDj0r4mSKf1OG2wNkiD5DPg7Uu4//nRWcvNyeUu6RPr3MJ+t0/5XoetVZiMW/nchIwpeO708eE7Q== Received: from DS7PR03CA0019.namprd03.prod.outlook.com (2603:10b6:5:3b8::24) by SN7PR12MB8772.namprd12.prod.outlook.com (2603:10b6:806:341::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32; Sun, 3 Dec 2023 11:26:42 +0000 Received: from DS1PEPF0001709B.namprd05.prod.outlook.com (2603:10b6:5:3b8:cafe::1a) by DS7PR03CA0019.outlook.office365.com (2603:10b6:5:3b8::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6977.31 via Frontend Transport; Sun, 3 Dec 2023 11:26:41 +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 DS1PEPF0001709B.mail.protection.outlook.com (10.167.18.105) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.20 via Frontend Transport; Sun, 3 Dec 2023 11:26:41 +0000 Received: from rnnvmail205.nvidia.com (10.129.68.10) 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.41; Sun, 3 Dec 2023 03:26:31 -0800 Received: from rnnvmail205.nvidia.com (10.129.68.10) by rnnvmail205.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:26:31 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41 via Frontend Transport; Sun, 3 Dec 2023 03:26:29 -0800 From: Michael Baum To: CC: Matan Azrad , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou , Alex Vesker Subject: [PATCH v1 17/23] net/mlx5/hws: support GENEVE matching Date: Sun, 3 Dec 2023 13:25:37 +0200 Message-ID: <20231203112543.844014-18-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231203112543.844014-1-michaelba@nvidia.com> References: <20231203112543.844014-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF0001709B:EE_|SN7PR12MB8772:EE_ X-MS-Office365-Filtering-Correlation-Id: 12b699e5-4ea5-4d41-6f3b-08dbf3f2b934 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: uNmzjb8gwUxQ47Ws1DgJMph0ev7Mp96LFeq7E8l5F/j+iDNb2rWXTzTquDjcDDURjni9sOMUYEeYzWCgPaWOV1LfdLKGpLEj7T+oNtFjsquIZRk/Sq8oSU9Rl5hcAa9crIdsWUciFU1nh27O3yj9rr5R5aWWbcjLDMVDREDObSMuGO/MkHs6ZNqkRGkNwwCKdNjLm+xCLSlbD7REk50qGBTk+R9y+qnMcwNWJ6/cBpJCHP8EjRBqqvfh8tIW5qx+6IgldAmPw8QCqnyVAcuOK/3Qdysg/ycJDy7Hul0I4gQMOEXU5nwUTGH0dLtZxtI5nE3LA2b3uZYWKpmPXzWOpLYushsshz8LTn1fyCQlTDYyJYqCP1W1b8Pr7KdBuv8482fQ27hWNQMuOfo76Mrfh+YeDoS4RotbPVUVNPj0ksLl31n9B6vWK/X+jlW43uJeqSK4CTCpja4ormxqhxlGrV35ErFHPOAUwlEWKq+BB3IV/WOpqLdNtxLsX6rsTOgtYE0vgFy9OkS+TWFwTNJOJV9kDnh7xoBUoUphKImowFPjMXZoU9/Qk1wbO+QbN4XIRYFKYoWcHvMcYjZBnvWCPrbkXS16mRI0l/9tDdvfHaZwhOhZTWjCjpEM720RRhVBVvkQ6AwB7wxGhjtTyGy+WTm40rsI1N9KuQ27VS7y2QqxMCzimt0Y50OgEWA4v28NoCDATvwGmMeyJYjXe7dv48kMzKPnyBKnt4SqC2YjPIaX2mOTvW2m4BibRy8s7VIL 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:(13230031)(4636009)(39860400002)(396003)(136003)(376002)(346002)(230922051799003)(186009)(64100799003)(82310400011)(451199024)(1800799012)(36840700001)(40470700004)(46966006)(70586007)(70206006)(54906003)(316002)(6916009)(478600001)(40460700003)(6666004)(5660300002)(41300700001)(36756003)(2906002)(86362001)(4326008)(8676002)(8936002)(107886003)(1076003)(2616005)(36860700001)(83380400001)(40480700001)(47076005)(356005)(7636003)(55016003)(26005)(6286002)(336012)(82740400003)(426003)(7696005); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2023 11:26:41.6507 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 12b699e5-4ea5-4d41-6f3b-08dbf3f2b934 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: DS1PEPF0001709B.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB8772 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: Alex Vesker Add matching for GENEVE tunnel header. Signed-off-by: Alex Vesker --- drivers/net/mlx5/hws/mlx5dr_definer.c | 91 +++++++++++++++++++++++++++ drivers/net/mlx5/hws/mlx5dr_definer.h | 19 ++++++ 2 files changed, 110 insertions(+) diff --git a/drivers/net/mlx5/hws/mlx5dr_definer.c b/drivers/net/mlx5/hws/mlx5dr_definer.c index bab1869369..141941c309 100644 --- a/drivers/net/mlx5/hws/mlx5dr_definer.c +++ b/drivers/net/mlx5/hws/mlx5dr_definer.c @@ -11,6 +11,7 @@ #define UDP_GTPU_PORT 2152 #define UDP_VXLAN_PORT 4789 #define UDP_PORT_MPLS 6635 +#define UDP_GENEVE_PORT 6081 #define UDP_ROCEV2_PORT 4791 #define DR_FLOW_LAYER_TUNNEL_NO_MPLS (MLX5_FLOW_LAYER_TUNNEL & ~MLX5_FLOW_LAYER_MPLS) @@ -172,6 +173,9 @@ struct mlx5dr_definer_conv_data { X(SET, source_qp, v->queue, mlx5_rte_flow_item_sq) \ X(SET, tag, v->data, rte_flow_item_tag) \ X(SET, metadata, v->data, rte_flow_item_meta) \ + X(SET_BE16, geneve_protocol, v->protocol, rte_flow_item_geneve) \ + X(SET, geneve_udp_port, UDP_GENEVE_PORT, rte_flow_item_geneve) \ + X(SET_BE16, geneve_ctrl, v->ver_opt_len_o_c_rsvd0, rte_flow_item_geneve) \ X(SET_BE16, gre_c_ver, v->c_rsvd0_ver, rte_flow_item_gre) \ X(SET_BE16, gre_protocol_type, v->protocol, rte_flow_item_gre) \ X(SET, ipv4_protocol_gre, IPPROTO_GRE, rte_flow_item_gre) \ @@ -682,6 +686,16 @@ mlx5dr_definer_mpls_label_set(struct mlx5dr_definer_fc *fc, memcpy(tag + fc->byte_off + sizeof(v->label_tc_s), &v->ttl, sizeof(v->ttl)); } +static void +mlx5dr_definer_geneve_vni_set(struct mlx5dr_definer_fc *fc, + const void *item_spec, + uint8_t *tag) +{ + const struct rte_flow_item_geneve *v = item_spec; + + memcpy(tag + fc->byte_off, v->vni, sizeof(v->vni)); +} + static void mlx5dr_definer_ib_l4_qp_set(struct mlx5dr_definer_fc *fc, const void *item_spec, @@ -2172,6 +2186,79 @@ mlx5dr_definer_conv_item_ipv6_routing_ext(struct mlx5dr_definer_conv_data *cd, return 0; } +static int +mlx5dr_definer_conv_item_geneve(struct mlx5dr_definer_conv_data *cd, + struct rte_flow_item *item, + int item_idx) +{ + const struct rte_flow_item_geneve *m = item->mask; + struct mlx5dr_definer_fc *fc; + bool inner = cd->tunnel; + + if (inner) { + DR_LOG(ERR, "Inner GENEVE item not supported"); + rte_errno = ENOTSUP; + return rte_errno; + } + + /* In order to match on Geneve we must match on ip_protocol and l4_dport */ + if (!cd->relaxed) { + fc = &cd->fc[DR_CALC_FNAME(IP_PROTOCOL, inner)]; + if (!fc->tag_set) { + fc->item_idx = item_idx; + fc->tag_mask_set = &mlx5dr_definer_ones_set; + fc->tag_set = &mlx5dr_definer_udp_protocol_set; + DR_CALC_SET(fc, eth_l2, l4_type_bwc, inner); + } + + fc = &cd->fc[DR_CALC_FNAME(L4_DPORT, inner)]; + if (!fc->tag_set) { + fc->item_idx = item_idx; + fc->tag_mask_set = &mlx5dr_definer_ones_set; + fc->tag_set = &mlx5dr_definer_geneve_udp_port_set; + DR_CALC_SET(fc, eth_l4, destination_port, inner); + } + } + + if (!m) + return 0; + + if (m->rsvd1) { + rte_errno = ENOTSUP; + return rte_errno; + } + + if (m->ver_opt_len_o_c_rsvd0) { + fc = &cd->fc[MLX5DR_DEFINER_FNAME_GENEVE_CTRL]; + fc->item_idx = item_idx; + fc->tag_set = &mlx5dr_definer_geneve_ctrl_set; + DR_CALC_SET_HDR(fc, tunnel_header, tunnel_header_0); + fc->bit_mask = __mlx5_mask(header_geneve, ver_opt_len_o_c_rsvd); + fc->bit_off = __mlx5_dw_bit_off(header_geneve, ver_opt_len_o_c_rsvd); + } + + if (m->protocol) { + fc = &cd->fc[MLX5DR_DEFINER_FNAME_GENEVE_PROTO]; + fc->item_idx = item_idx; + fc->tag_set = &mlx5dr_definer_geneve_protocol_set; + DR_CALC_SET_HDR(fc, tunnel_header, tunnel_header_0); + fc->byte_off += MLX5_BYTE_OFF(header_geneve, protocol_type); + fc->bit_mask = __mlx5_mask(header_geneve, protocol_type); + fc->bit_off = __mlx5_dw_bit_off(header_geneve, protocol_type); + } + + if (!is_mem_zero(m->vni, 3)) { + fc = &cd->fc[MLX5DR_DEFINER_FNAME_GENEVE_VNI]; + fc->item_idx = item_idx; + fc->tag_set = &mlx5dr_definer_geneve_vni_set; + DR_CALC_SET_HDR(fc, tunnel_header, tunnel_header_1); + fc->bit_mask = __mlx5_mask(header_geneve, vni); + fc->bit_off = __mlx5_dw_bit_off(header_geneve, vni); + } + + return 0; +} + static int mlx5dr_definer_mt_set_fc(struct mlx5dr_match_template *mt, struct mlx5dr_definer_fc *fc, @@ -2528,6 +2615,10 @@ mlx5dr_definer_conv_items_to_hl(struct mlx5dr_context *ctx, item_flags |= MLX5_FLOW_LAYER_MPLS; cd.mpls_idx++; break; + case RTE_FLOW_ITEM_TYPE_GENEVE: + ret = mlx5dr_definer_conv_item_geneve(&cd, items, i); + item_flags |= MLX5_FLOW_LAYER_GENEVE; + break; case RTE_FLOW_ITEM_TYPE_IB_BTH: ret = mlx5dr_definer_conv_item_ib_l4(&cd, items, i); item_flags |= MLX5_FLOW_ITEM_IB_BTH; diff --git a/drivers/net/mlx5/hws/mlx5dr_definer.h b/drivers/net/mlx5/hws/mlx5dr_definer.h index e2be579303..c09c0be62e 100644 --- a/drivers/net/mlx5/hws/mlx5dr_definer.h +++ b/drivers/net/mlx5/hws/mlx5dr_definer.h @@ -91,6 +91,9 @@ enum mlx5dr_definer_fname { MLX5DR_DEFINER_FNAME_VPORT_REG_C_0, MLX5DR_DEFINER_FNAME_VXLAN_FLAGS, MLX5DR_DEFINER_FNAME_VXLAN_VNI, + MLX5DR_DEFINER_FNAME_GENEVE_CTRL, + MLX5DR_DEFINER_FNAME_GENEVE_PROTO, + MLX5DR_DEFINER_FNAME_GENEVE_VNI, MLX5DR_DEFINER_FNAME_SOURCE_QP, MLX5DR_DEFINER_FNAME_REG_0, MLX5DR_DEFINER_FNAME_REG_1, @@ -608,6 +611,22 @@ struct mlx5_ifc_header_gre_bits { u8 reserved_at_30[0x10]; }; +struct mlx5_ifc_header_geneve_bits { + union { + u8 ver_opt_len_o_c_rsvd[0x10]; + struct { + u8 version[0x2]; + u8 opt_len[0x6]; + u8 o_flag[0x1]; + u8 c_flag[0x1]; + u8 reserved_at_a[0x6]; + }; + }; + u8 protocol_type[0x10]; + u8 vni[0x18]; + u8 reserved_at_38[0x8]; +}; + struct mlx5_ifc_header_icmp_bits { union { u8 icmp_dw1[0x20]; From patchwork Sun Dec 3 11:25:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 134763 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 6E9DA4365F; Sun, 3 Dec 2023 12:28:20 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A760B40EAB; Sun, 3 Dec 2023 12:26:48 +0100 (CET) Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2079.outbound.protection.outlook.com [40.107.243.79]) by mails.dpdk.org (Postfix) with ESMTP id E8AAF40E40 for ; Sun, 3 Dec 2023 12:26:46 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=E8dzlJDi0t1rrZmmk4YcMI/82A1t3Dn4tcydeWVCbc2QRxOZmlUzCov7cokWSx416i1EhA3TSFlerIEfBc4iiXpHuVThLjQHQKDWvjDTjNmnh39lExYBLMlNQiJqI7aH7D+5goXNDwYFNLiX+9A8nyFieTr3ZWIpH3663eKXtlxcwCi+MvTUvol6K+qR+zDmDdZSGzjiLy5i/8ZVH3qQEG5uxFe9RaaJSYoie4T9KU8Js7ohDVxapqZ2gTS8g0Zo15KBBFpKD9cu2oZelISZi706WBO8tAItlRHVxUtD0xtmh0ptqgnC1j4/EmEgLa4DP9bhQvcKqxtluccsmQsSWw== 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=n9laKhpuqlyBjokIx0S828mGNJzPiehxz5WdleVsMdM=; b=Som10FRnyJxq6OQy4/SloNwmX7UKlyyEERTER/IeP8gg9vlfQKhUL1EfOkPI/OC4CJtDg8LYnaPUW4LjF5zVyyBwchzFy/JqNnozXVZE7zqM/NQK4q0eK87P756Owfss+yKG0L8DRUzJd0tdhtQBnbg9xQUvN3B239hQAuW+MBhk/dhX9VTzw9oqhKpwv35gpyiVgU1YwbQjslYquQ26VrZU2nnV/bf/+DT0M/F0mi7aNYdc33E5zy8jq1ZlqjFr//1CDbzO7iS7WgdCJ4qFOBMMkzyRNHGDaZw1U7Jz8opv0DUDlMZ7iXvilDa5JJielYhnlgtnoRTAnBGweQ/4lA== 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 (0) 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=n9laKhpuqlyBjokIx0S828mGNJzPiehxz5WdleVsMdM=; b=ZFhLpLii2phRM0GThUSzFwToy1z38viTypBc/e4CkInPkNGZQ5/FzJZmQs+rx6DLDGvwrI1CprRqmXkd2S8PXIDkMQQ0y+uUk7y2uzvTTyZNSll4dclfn1M1P6WkNSKGALQSVzy2EvK2SuLOvx38ytm8BcPnKYScN1nVCZU2a0rqBctI3eCttnec8LkWAbGY5B50Ap7LFAS+NaR2JWtpZQuTIQS6+GvpEizAteMYEavaVxnJJHzlAkvpJiW8qRaJBymD6zzQpEFC9oj5+Fx7NCYQ/HQ0z6O5ydrjGmvh7gvl7q+jI6ZNZAltp3KO4+bxJYzRCKDl3TMC+//dHvYdYw== Received: from DS7PR03CA0010.namprd03.prod.outlook.com (2603:10b6:5:3b8::15) by BL1PR12MB5077.namprd12.prod.outlook.com (2603:10b6:208:310::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.33; Sun, 3 Dec 2023 11:26:42 +0000 Received: from DS1PEPF0001709B.namprd05.prod.outlook.com (2603:10b6:5:3b8:cafe::c7) by DS7PR03CA0010.outlook.office365.com (2603:10b6:5:3b8::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7002.17 via Frontend Transport; Sun, 3 Dec 2023 11:26:42 +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 DS1PEPF0001709B.mail.protection.outlook.com (10.167.18.105) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.20 via Frontend Transport; Sun, 3 Dec 2023 11:26:42 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) 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.41; Sun, 3 Dec 2023 03:26:34 -0800 Received: from rnnvmail205.nvidia.com (10.129.68.10) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:26:33 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41 via Frontend Transport; Sun, 3 Dec 2023 03:26:32 -0800 From: Michael Baum To: CC: Matan Azrad , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou , Alex Vesker Subject: [PATCH v1 18/23] net/mlx5/hws: support GENEVE options header Date: Sun, 3 Dec 2023 13:25:38 +0200 Message-ID: <20231203112543.844014-19-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231203112543.844014-1-michaelba@nvidia.com> References: <20231203112543.844014-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF0001709B:EE_|BL1PR12MB5077:EE_ X-MS-Office365-Filtering-Correlation-Id: 6ecde8fc-5d0c-43a8-7c97-08dbf3f2b9c3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: HVQgrXCANcs33tQbT8fFFP7YEONz9bm8tMaGU7A4jeXEq7h2pKbJlpl4Lldtzza+EmBpSXF6s02CNQiy44vOGiJDXDKeYQbJoR/Jhdm3L+Dm7fsceZTg/Bhq7adsvaBgfXwAcQPmxOwCsZsUz2dLT0pyn41uDmHgXNDaVaF3cZeD1Hw4kxq39SV1c4ZFfSO6k4HZiJEyIEDKMwJu5dLqmEryvAlnAYHZ12FzBNBIfwHlnX9ZDM1XNwZO29Ecna50sA3nouiemEFh3A5E3txK+Ga2NWsiYin5Yvkq7yfe4yGbdRaohEk6ervy1xtMocO+esVP4t243WLg0Wd4p805g4avRJovjd61pjnfqv4bv0ieD1Zt61GjHWJp4+ZBoZB03r9tpMjvT+tGgUDLEvKExMRWJGVh2jFtspZKMMEXHqE3i+p4vJjkq4BR2wNmfLVHC9SWrrgsk2jxAJLa1bIfw9dx/5QipTXGYIr7Pj50Ie1xU5r825zeDZ4Xc0pMN2OnCizc9K5HZqtzswXPpoheNg5cwOAH3uBC95E5pf1FuITRNc5js04cBM+skw9MR/ZGIqappY5pT6U+8Y0dg9ZJ0L+tJsQBoyJhJk8yBkgF1IAffmqBHXe5iQTUrBv9otd5kc7XhN8icHemUj8zQJUbqrn1rUgDz863n/wRz9pGMKg9NOrBGhRq3UjV8OsGXhLiv1iyq3sSTztupGbnVIK9cfDwJ7zpN1x1fUKxY3LGkOFvomyLzjZlcKAl/mG99Q+a 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:(13230031)(4636009)(376002)(346002)(39860400002)(396003)(136003)(230922051799003)(64100799003)(82310400011)(186009)(451199024)(1800799012)(36840700001)(46966006)(40470700004)(70586007)(70206006)(54906003)(316002)(6916009)(478600001)(40460700003)(5660300002)(41300700001)(36756003)(2906002)(86362001)(4326008)(8676002)(8936002)(107886003)(1076003)(2616005)(36860700001)(83380400001)(40480700001)(47076005)(7636003)(55016003)(356005)(26005)(6286002)(336012)(426003)(82740400003)(7696005); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2023 11:26:42.5882 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6ecde8fc-5d0c-43a8-7c97-08dbf3f2b9c3 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: DS1PEPF0001709B.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5077 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: Alex Vesker Add support for matching multiple GENEVE options. Options header introduces new complexities since there can be more than one GENEVE option. This requires us to track the total DWs used for matching. Current code supports 8DWs for data including type, class, length. There is also an optimization to use a special OK bit to reduce the use of limited data DWs. Signed-off-by: Alex Vesker --- drivers/net/mlx5/hws/mlx5dr_definer.c | 147 ++++++++++++++++++++++++-- drivers/net/mlx5/hws/mlx5dr_definer.h | 24 +++++ 2 files changed, 165 insertions(+), 6 deletions(-) diff --git a/drivers/net/mlx5/hws/mlx5dr_definer.c b/drivers/net/mlx5/hws/mlx5dr_definer.c index 141941c309..126e522235 100644 --- a/drivers/net/mlx5/hws/mlx5dr_definer.c +++ b/drivers/net/mlx5/hws/mlx5dr_definer.c @@ -117,6 +117,8 @@ struct mlx5dr_definer_conv_data { uint8_t relaxed; uint8_t tunnel; uint8_t mpls_idx; + uint8_t geneve_opt_ok_idx; + uint8_t geneve_opt_data_idx; enum rte_flow_item_type last_item; }; @@ -696,6 +698,29 @@ mlx5dr_definer_geneve_vni_set(struct mlx5dr_definer_fc *fc, memcpy(tag + fc->byte_off, v->vni, sizeof(v->vni)); } +static void +mlx5dr_definer_geneve_opt_ctrl_set(struct mlx5dr_definer_fc *fc, + const void *item_spec, + uint8_t *tag) +{ + const struct rte_flow_item_geneve_opt *v = item_spec; + uint32_t dw0 = 0; + + dw0 |= v->option_type << __mlx5_dw_bit_off(header_geneve_opt, type); + dw0 |= rte_cpu_to_be_16(v->option_class) << __mlx5_dw_bit_off(header_geneve_opt, class); + DR_SET(tag, dw0, fc->byte_off, fc->bit_off, fc->bit_mask); +} + +static void +mlx5dr_definer_geneve_opt_data_set(struct mlx5dr_definer_fc *fc, + const void *item_spec, + uint8_t *tag) +{ + const struct rte_flow_item_geneve_opt *v = item_spec; + + DR_SET_BE32(tag, v->data[fc->extra_data], fc->byte_off, fc->bit_off, fc->bit_mask); +} + static void mlx5dr_definer_ib_l4_qp_set(struct mlx5dr_definer_fc *fc, const void *item_spec, @@ -1328,7 +1353,6 @@ mlx5dr_definer_conv_item_port(struct mlx5dr_definer_conv_data *cd, struct mlx5dr_cmd_query_caps *caps = cd->ctx->caps; const struct rte_flow_item_ethdev *m = item->mask; struct mlx5dr_definer_fc *fc; - uint8_t bit_offset = 0; if (m->port_id) { if (!caps->wire_regc_mask) { @@ -1337,16 +1361,13 @@ mlx5dr_definer_conv_item_port(struct mlx5dr_definer_conv_data *cd, return rte_errno; } - while (!(caps->wire_regc_mask & (1 << bit_offset))) - bit_offset++; - fc = &cd->fc[MLX5DR_DEFINER_FNAME_VPORT_REG_C_0]; fc->item_idx = item_idx; fc->tag_set = &mlx5dr_definer_vport_set; fc->tag_mask_set = &mlx5dr_definer_ones_set; DR_CALC_SET_HDR(fc, registers, register_c_0); - fc->bit_off = bit_offset; - fc->bit_mask = caps->wire_regc_mask >> bit_offset; + fc->bit_off = __builtin_ctz(caps->wire_regc_mask); + fc->bit_mask = caps->wire_regc_mask >> fc->bit_off; } else { DR_LOG(ERR, "Pord ID item mask must specify ID mask"); rte_errno = EINVAL; @@ -2259,6 +2280,116 @@ mlx5dr_definer_conv_item_geneve(struct mlx5dr_definer_conv_data *cd, return 0; } +static int +mlx5dr_definer_conv_item_geneve_opt(struct mlx5dr_definer_conv_data *cd, + struct rte_flow_item *item, + int item_idx) +{ + const struct rte_flow_item_geneve_opt *m = item->mask; + const struct rte_flow_item_geneve_opt *v = item->spec; + struct mlx5_hl_data *hl_ok_bit, *hl_dws; + struct mlx5dr_definer_fc *fc; + uint8_t num_of_dws, i; + bool ok_bit_on_class; + int ret; + + if (!m || !(m->option_class || m->option_type || m->data)) + return 0; + + if (!v || m->option_type != 0xff) { + DR_LOG(ERR, "Cannot match geneve opt without valid opt type"); + goto out_not_supp; + } + + if (m->option_class && m->option_class != RTE_BE16(UINT16_MAX)) { + DR_LOG(ERR, "Geneve option class has invalid mask"); + goto out_not_supp; + } + + ret = mlx5_get_geneve_hl_data(cd->ctx, + v->option_type, + v->option_class, + &hl_ok_bit, + &num_of_dws, + &hl_dws, + &ok_bit_on_class); + if (ret) { + DR_LOG(ERR, "Geneve opt type and class %d not supported", v->option_type); + goto out_not_supp; + } + + if (!ok_bit_on_class && m->option_class) { + /* DW0 is used, we will match type, class */ + if (!num_of_dws || hl_dws[0].dw_mask != UINT32_MAX) { + DR_LOG(ERR, "Geneve opt type %d DW0 not supported", v->option_type); + goto out_not_supp; + } + + if (MLX5DR_DEFINER_FNAME_GENEVE_OPT_DW_0 + cd->geneve_opt_data_idx > + MLX5DR_DEFINER_FNAME_GENEVE_OPT_DW_7) { + DR_LOG(ERR, "Max match geneve opt DWs reached"); + goto out_not_supp; + } + + fc = &cd->fc[MLX5DR_DEFINER_FNAME_GENEVE_OPT_DW_0 + cd->geneve_opt_data_idx++]; + fc->item_idx = item_idx; + fc->tag_set = &mlx5dr_definer_geneve_opt_ctrl_set; + fc->byte_off = hl_dws[0].dw_offset * DW_SIZE; + fc->bit_mask = UINT32_MAX; + } else { + /* DW0 is not used, we must verify geneve opt type exists in packet */ + if (!hl_ok_bit->dw_mask) { + DR_LOG(ERR, "Geneve opt OK bits not supported"); + goto out_not_supp; + } + + if (MLX5DR_DEFINER_FNAME_GENEVE_OPT_OK_0 + cd->geneve_opt_ok_idx > + MLX5DR_DEFINER_FNAME_GENEVE_OPT_OK_7) { + DR_LOG(ERR, "Max match geneve opt reached"); + goto out_not_supp; + } + + fc = &cd->fc[MLX5DR_DEFINER_FNAME_GENEVE_OPT_OK_0 + cd->geneve_opt_ok_idx++]; + fc->item_idx = item_idx; + fc->tag_set = &mlx5dr_definer_ones_set; + fc->byte_off = hl_ok_bit->dw_offset * DW_SIZE + + __builtin_clz(hl_ok_bit->dw_mask) / 8; + fc->bit_off = __builtin_ctz(hl_ok_bit->dw_mask); + fc->bit_mask = 0x1; + } + + for (i = 1; i < num_of_dws; i++) { + /* Process each valid geneve option data DW1..N */ + if (!m->data[i - 1]) + continue; + + if (hl_dws[i].dw_mask != UINT32_MAX) { + DR_LOG(ERR, "Matching Geneve opt data[%d] not supported", i - 1); + goto out_not_supp; + } + + if (MLX5DR_DEFINER_FNAME_GENEVE_OPT_DW_0 + cd->geneve_opt_data_idx > + MLX5DR_DEFINER_FNAME_GENEVE_OPT_DW_7) { + DR_LOG(ERR, "Max match geneve options DWs reached"); + goto out_not_supp; + } + + fc = &cd->fc[MLX5DR_DEFINER_FNAME_GENEVE_OPT_DW_0 + cd->geneve_opt_data_idx++]; + fc->item_idx = item_idx; + fc->tag_set = &mlx5dr_definer_geneve_opt_data_set; + fc->byte_off = hl_dws[i].dw_offset * DW_SIZE; + fc->bit_mask = m->data[i - 1]; + /* Use extra_data for data[] set offset */ + fc->extra_data = i - 1; + } + + return 0; + +out_not_supp: + rte_errno = ENOTSUP; + return rte_errno; +} + static int mlx5dr_definer_mt_set_fc(struct mlx5dr_match_template *mt, struct mlx5dr_definer_fc *fc, @@ -2619,6 +2750,10 @@ mlx5dr_definer_conv_items_to_hl(struct mlx5dr_context *ctx, ret = mlx5dr_definer_conv_item_geneve(&cd, items, i); item_flags |= MLX5_FLOW_LAYER_GENEVE; break; + case RTE_FLOW_ITEM_TYPE_GENEVE_OPT: + ret = mlx5dr_definer_conv_item_geneve_opt(&cd, items, i); + item_flags |= RTE_FLOW_ITEM_TYPE_GENEVE_OPT; + break; case RTE_FLOW_ITEM_TYPE_IB_BTH: ret = mlx5dr_definer_conv_item_ib_l4(&cd, items, i); item_flags |= MLX5_FLOW_ITEM_IB_BTH; diff --git a/drivers/net/mlx5/hws/mlx5dr_definer.h b/drivers/net/mlx5/hws/mlx5dr_definer.h index c09c0be62e..0aaafe46de 100644 --- a/drivers/net/mlx5/hws/mlx5dr_definer.h +++ b/drivers/net/mlx5/hws/mlx5dr_definer.h @@ -141,6 +141,22 @@ enum mlx5dr_definer_fname { MLX5DR_DEFINER_FNAME_OKS2_MPLS2_I, MLX5DR_DEFINER_FNAME_OKS2_MPLS3_I, MLX5DR_DEFINER_FNAME_OKS2_MPLS4_I, + MLX5DR_DEFINER_FNAME_GENEVE_OPT_OK_0, + MLX5DR_DEFINER_FNAME_GENEVE_OPT_OK_1, + MLX5DR_DEFINER_FNAME_GENEVE_OPT_OK_2, + MLX5DR_DEFINER_FNAME_GENEVE_OPT_OK_3, + MLX5DR_DEFINER_FNAME_GENEVE_OPT_OK_4, + MLX5DR_DEFINER_FNAME_GENEVE_OPT_OK_5, + MLX5DR_DEFINER_FNAME_GENEVE_OPT_OK_6, + MLX5DR_DEFINER_FNAME_GENEVE_OPT_OK_7, + MLX5DR_DEFINER_FNAME_GENEVE_OPT_DW_0, + MLX5DR_DEFINER_FNAME_GENEVE_OPT_DW_1, + MLX5DR_DEFINER_FNAME_GENEVE_OPT_DW_2, + MLX5DR_DEFINER_FNAME_GENEVE_OPT_DW_3, + MLX5DR_DEFINER_FNAME_GENEVE_OPT_DW_4, + MLX5DR_DEFINER_FNAME_GENEVE_OPT_DW_5, + MLX5DR_DEFINER_FNAME_GENEVE_OPT_DW_6, + MLX5DR_DEFINER_FNAME_GENEVE_OPT_DW_7, MLX5DR_DEFINER_FNAME_IB_L4_OPCODE, MLX5DR_DEFINER_FNAME_IB_L4_QPN, MLX5DR_DEFINER_FNAME_IB_L4_A, @@ -165,6 +181,7 @@ enum mlx5dr_definer_type { struct mlx5dr_definer_fc { uint8_t item_idx; uint8_t is_range; + uint16_t extra_data; uint32_t byte_off; int bit_off; uint32_t bit_mask; @@ -627,6 +644,13 @@ struct mlx5_ifc_header_geneve_bits { u8 reserved_at_38[0x8]; }; +struct mlx5_ifc_header_geneve_opt_bits { + u8 class[0x10]; + u8 type[0x8]; + u8 reserved[0x3]; + u8 len[0x5]; +}; + struct mlx5_ifc_header_icmp_bits { union { u8 icmp_dw1[0x20]; From patchwork Sun Dec 3 11:25:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 134768 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 79E654365F; Sun, 3 Dec 2023 12:28:54 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6A992410E3; Sun, 3 Dec 2023 12:27:04 +0100 (CET) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2082.outbound.protection.outlook.com [40.107.94.82]) by mails.dpdk.org (Postfix) with ESMTP id AA4FE40DC9 for ; Sun, 3 Dec 2023 12:27:02 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Vpb8p6j5CpN2SUHDicjaaNQ7etI+KWVI541skX7LhjkZLnrPdilOqnOB3dklfqQB1SoG9IOV+duGIY0nq5X+kOyF7lgZHPYBMXpADJB52GFJzxdPaBrUJkCgA4QK1A6WELXubV5WtRcDMV36ayNiGOSdaHWw9bAn7OHKizPiRRTQIA4ikAGesr9MDLOJ+AHTInv0IX4y6GoVBA5BKbl61yeMW2OrB6zXr0FOeE05vNgetOPcfKVxIsPQJS39YpWxl+xsi4N8DBbFO7NQRT9902xbye4tdABO5ALh+GVlJ2j44xVRLoRZRgUtfGpZqlugmuOANggPjcmcKK3g80fV5w== 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=9s8MXa9yW/f4NxUyMrfV/85rxm0e/xzbMJlEpLSwGFs=; b=FMYK+/wHIGUbvmdh8FpAIZflQrDMv7XqWNRZeSih2xBJxOHo2eGfw7teYPcH4VYN9c4kcNJ+s+e+pQNRNsCyu3xny5j/S7qz5bCH80U0NnDrvBdezsYbypH+GZcW+wx+omd8gcC3pdiShkToItNfYQ2yl6G3YmKtv6G/hrzoawzuTmgH/ZDjVsmMAOfOuEHwdHflceYIn7xtP8X9isfpouEwwIzXlc2en1FUKHpk6cyp+5jpfDBYolTMfJ2Hnc+/IqXHuYhczEE3zAI7MKTVqS7YJR8NlrM5OfxfsUQweDzlCcj4CMVJBmDxRr0WbnAdh5Cu6Q1sVFxcETHnTMUKlQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) 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 (0) 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=9s8MXa9yW/f4NxUyMrfV/85rxm0e/xzbMJlEpLSwGFs=; b=cJ6mGce2ZTFdmSw03tSqk72AP9ccy+pfGNojYpdlZNQzWMepR0WOkuRhEhhkxKbfKEdFRVXVZeLCfuo9bCfxek5PwR+tg0i+9MtyuEg8Sngpxht28HYb6gNQCyjA9OCeprZilISJnZP8TzJVWOv+cxzoqiXaSE43r65I0UYGCVm2s6nEPHjtPcF66KlIp4Na7db6zjEsWr34Jj/zp300Uxn7DvF3PqTJ3a31vrPgmBFy65MCY+g3zu3qfJN9M1Mq57DiOlG9pyITROxXXKb1QvyFx3xUJslwsYhyrrfRk0Y6WVHwtoUGBfUjm95sCmz1sA+Myvw7BMDNavJm0cE0Bw== Received: from SJ0PR05CA0166.namprd05.prod.outlook.com (2603:10b6:a03:339::21) by IA1PR12MB6531.namprd12.prod.outlook.com (2603:10b6:208:3a4::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.33; Sun, 3 Dec 2023 11:26:54 +0000 Received: from CO1PEPF000042AE.namprd03.prod.outlook.com (2603:10b6:a03:339:cafe::b3) by SJ0PR05CA0166.outlook.office365.com (2603:10b6:a03:339::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.21 via Frontend Transport; Sun, 3 Dec 2023 11:26:54 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CO1PEPF000042AE.mail.protection.outlook.com (10.167.243.43) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.20 via Frontend Transport; Sun, 3 Dec 2023 11:26:54 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:26:36 -0800 Received: from rnnvmail205.nvidia.com (10.129.68.10) 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.41; Sun, 3 Dec 2023 03:26:36 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41 via Frontend Transport; Sun, 3 Dec 2023 03:26:34 -0800 From: Michael Baum To: CC: Matan Azrad , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou Subject: [PATCH v1 19/23] net/mlx5: add support for GENEVE and option item in HWS Date: Sun, 3 Dec 2023 13:25:39 +0200 Message-ID: <20231203112543.844014-20-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231203112543.844014-1-michaelba@nvidia.com> References: <20231203112543.844014-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000042AE:EE_|IA1PR12MB6531:EE_ X-MS-Office365-Filtering-Correlation-Id: cdab797a-8229-41df-aef6-08dbf3f2c096 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: rbP9c1rRg30POwgVvh5XdfuQlEtA8XJrMs5Ygp48QZMdPXmFNN8+aISmvzTqGuE6J8wwXLPbY74H54NorODaMf75m6wl1etyQIoMCu8pDBlBYXrUSspaPoBpBzumPgrrRJK7KMNNFONgfSBO1x4pYkstdr7BEqOFdYUxEk1a06heNA8n5UzrLgfgRU94ZOM0NntF4hj8I2axhNLfPL11IA1a3kG9RoVlyhkte7gIeX5xIEmQ2wXm3lhSdFiFUgkzI1VQWOyx2sRDkv/2vGuBbxGXmz0/oGJ7YymQxSCn1zy6tAASlog92mc4fVu1VOoN0StOjcmxhl2cwWHhHVB+16Zm+OtvlZG1QaKRHrBZ0lZkn6dQ5ZQpDEHxWepna1WSAwzplPdqtvxH6s3CuTjFEppmFmvxHQHSIIT0DCWv9GG5mc4z6pGurFsgmB1VxG80p0oa/uxFkCEct1+xJooK/rnpEtPZd3sY+sdeJQ1KetO6OKBIDfcgEhVdT3UKszcu5h+6loO27bh8lkzIbpqS+hhjw/lZ9ms+iaOYAIySh8+wWgxW2GBgO8LdPetR/oC+QzJbS/h+DgpcJvjFsSrNS+kZOde5tgSrQ/RGhTbyHMWxsz/H8V7aHeVdz8SLKY29CT/9CiMUEja2tScoFrq8HgHrCjIOPEV01afWELDDSHIPl9+m30/xn2I4HQrx2dneIANjCW62/XS/OzSVuQ87QENuqd8Sfp0rLUvHATTGQeuws1GMA138GFeY5LWAlS/tnautLGGYQo/OZKescf9ir4dfGy46IDqCC7ufu8RlcrQ= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230031)(4636009)(376002)(346002)(39860400002)(396003)(136003)(230273577357003)(230173577357003)(230922051799003)(64100799003)(82310400011)(186009)(451199024)(1800799012)(36840700001)(46966006)(40470700004)(70586007)(70206006)(54906003)(316002)(6916009)(478600001)(40460700003)(30864003)(5660300002)(41300700001)(36756003)(2906002)(86362001)(4326008)(8676002)(8936002)(107886003)(1076003)(2616005)(36860700001)(83380400001)(40480700001)(47076005)(7636003)(55016003)(356005)(26005)(6286002)(336012)(426003)(82740400003)(7696005); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2023 11:26:54.0386 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: cdab797a-8229-41df-aef6-08dbf3f2c096 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.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000042AE.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB6531 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 Add HW steering support for both "RTE_FLOW_ITEM_TYPE_GENEVE" and "RTE_FLOW_ITEM_TYPE_GENEVE_OPT". Signed-off-by: Michael Baum --- doc/guides/nics/mlx5.rst | 15 ++- doc/guides/rel_notes/release_24_03.rst | 5 + drivers/net/mlx5/mlx5_flow.h | 21 +++++ drivers/net/mlx5/mlx5_flow_geneve.c | 121 ++++++++++++++++++++++++- drivers/net/mlx5/mlx5_flow_hw.c | 44 ++++++++- 5 files changed, 199 insertions(+), 7 deletions(-) diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst index b0f2cdcd62..645b566d80 100644 --- a/doc/guides/nics/mlx5.rst +++ b/doc/guides/nics/mlx5.rst @@ -329,12 +329,25 @@ Limitations - Length - Data - Only one Class/Type/Length Geneve TLV option is supported per shared device. Class/Type/Length fields must be specified as well as masks. Class/Type/Length specified masks must be full. Matching Geneve TLV option without specifying data is not supported. Matching Geneve TLV option with ``data & mask == 0`` is not supported. + In SW steering (``dv_flow_en`` = 1): + + - Only one Class/Type/Length Geneve TLV option is supported per shared + device. + - Supported only when ``FLEX_PARSER_PROFILE_ENABLE`` = 0. + + In HW steering (``dv_flow_en`` = 2): + + - Multiple Class/Type/Length Geneve TLV option are supported per physical + device. See :ref:`geneve_parser_api` for more information. + - Multiple of same Geneve TLV option isn't supported at the same pattern + template. + - Supported only when ``FLEX_PARSER_PROFILE_ENABLE`` = 8. + - VF: flow rules created on VF devices can only match traffic targeted at the configured MAC addresses (see ``rte_eth_dev_mac_addr_add()``). diff --git a/doc/guides/rel_notes/release_24_03.rst b/doc/guides/rel_notes/release_24_03.rst index e9c9717706..bedef2a4c0 100644 --- a/doc/guides/rel_notes/release_24_03.rst +++ b/doc/guides/rel_notes/release_24_03.rst @@ -55,6 +55,11 @@ New Features Also, make sure to start the actual text at the margin. ======================================================= +* **Updated NVIDIA mlx5 net driver.** + + * Added HW steering support for ``RTE_FLOW_ITEM_TYPE_GENEVE`` flow item. + * Added HW steering support for ``RTE_FLOW_ITEM_TYPE_GENEVE_OPT`` flow item. + Removed Items ------------- diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h index dca3cacb65..04a2eb0b0c 100644 --- a/drivers/net/mlx5/mlx5_flow.h +++ b/drivers/net/mlx5/mlx5_flow.h @@ -1332,6 +1332,15 @@ struct mlx5_action_construct_data { #define MAX_GENEVE_OPTIONS_RESOURCES 7 +/* GENEVE TLV options manager structure. */ +struct mlx5_geneve_tlv_options_mng { + uint8_t nb_options; /* Number of options inside the template. */ + struct { + uint8_t opt_type; + uint16_t opt_class; + } options[MAX_GENEVE_OPTIONS_RESOURCES]; +}; + /* Flow item template struct. */ struct rte_flow_pattern_template { LIST_ENTRY(rte_flow_pattern_template) next; @@ -1351,6 +1360,8 @@ struct rte_flow_pattern_template { * tag pattern item for representor matching. */ bool implicit_tag; + /* Manages all GENEVE TLV options used by this pattern template. */ + struct mlx5_geneve_tlv_options_mng geneve_opt_mng; uint8_t flex_item; /* flex item index. */ }; @@ -1799,6 +1810,16 @@ mlx5_geneve_tlv_parser_create(uint16_t port_id, const struct rte_pmd_mlx5_geneve_tlv tlv_list[], uint8_t nb_options); int mlx5_geneve_tlv_parser_destroy(void *handle); +int mlx5_flow_geneve_tlv_option_validate(struct mlx5_priv *priv, + const struct rte_flow_item *geneve_opt, + struct rte_flow_error *error); + +struct mlx5_geneve_tlv_options_mng; +int mlx5_geneve_tlv_option_register(struct mlx5_priv *priv, + const struct rte_flow_item_geneve_opt *spec, + struct mlx5_geneve_tlv_options_mng *mng); +void mlx5_geneve_tlv_options_unregister(struct mlx5_priv *priv, + struct mlx5_geneve_tlv_options_mng *mng); void flow_hw_set_port_info(struct rte_eth_dev *dev); void flow_hw_clear_port_info(struct rte_eth_dev *dev); diff --git a/drivers/net/mlx5/mlx5_flow_geneve.c b/drivers/net/mlx5/mlx5_flow_geneve.c index 2d593b70ba..2c8dc39e74 100644 --- a/drivers/net/mlx5/mlx5_flow_geneve.c +++ b/drivers/net/mlx5/mlx5_flow_geneve.c @@ -152,6 +152,106 @@ mlx5_get_geneve_hl_data(const void *dr_ctx, uint8_t type, uint16_t class, return -EINVAL; } +/** + * Calculate total data size. + * + * @param[in] priv + * Pointer to port's private data. + * @param[in] geneve_opt + * Pointer to GENEVE option item structure. + * @param[out] error + * Pointer to error structure. + * + * @return + * 0 on success, a negative errno value otherwise and rte_errno is set. + */ +int +mlx5_flow_geneve_tlv_option_validate(struct mlx5_priv *priv, + const struct rte_flow_item *geneve_opt, + struct rte_flow_error *error) +{ + const struct rte_flow_item_geneve_opt *spec = geneve_opt->spec; + const struct rte_flow_item_geneve_opt *mask = geneve_opt->mask; + struct mlx5_geneve_tlv_option *option; + + option = mlx5_geneve_tlv_option_get(priv, spec->option_type, spec->option_class); + if (option == NULL) + return rte_flow_error_set(error, rte_errno, + RTE_FLOW_ERROR_TYPE_ITEM, NULL, + "Unregistered GENEVE option"); + if (mask->option_type != UINT8_MAX) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ITEM, NULL, + "GENEVE option type must be fully masked"); + if (option->class_mode == 1 && mask->option_class != UINT16_MAX) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ITEM, NULL, + "GENEVE option class must be fully masked"); + return 0; +} + +/** + * Register single GENEVE TLV option as used by pattern template. + * + * @param[in] priv + * Pointer to port's private data. + * @param[in] spec + * Pointer to GENEVE option item structure. + * @param[out] mng + * Pointer to GENEVE option manager. + * + * @return + * 0 on success, a negative errno value otherwise and rte_errno is set. + */ +int +mlx5_geneve_tlv_option_register(struct mlx5_priv *priv, + const struct rte_flow_item_geneve_opt *spec, + struct mlx5_geneve_tlv_options_mng *mng) +{ + struct mlx5_geneve_tlv_option *option; + + option = mlx5_geneve_tlv_option_get(priv, spec->option_type, spec->option_class); + if (option == NULL) + return -rte_errno; + /* Increase the option reference counter. */ + rte_atomic_fetch_add_explicit(&option->refcnt, 1, + rte_memory_order_relaxed); + /* Update the manager with option information. */ + mng->options[mng->nb_options].opt_type = spec->option_type; + mng->options[mng->nb_options].opt_class = spec->option_class; + mng->nb_options++; + return 0; +} + +/** + * Unregister all GENEVE TLV options used by pattern template. + * + * @param[in] priv + * Pointer to port's private data. + * @param[in] mng + * Pointer to GENEVE option manager. + */ +void +mlx5_geneve_tlv_options_unregister(struct mlx5_priv *priv, + struct mlx5_geneve_tlv_options_mng *mng) +{ + struct mlx5_geneve_tlv_option *option; + uint8_t i; + + for (i = 0; i < mng->nb_options; ++i) { + option = mlx5_geneve_tlv_option_get(priv, + mng->options[i].opt_type, + mng->options[i].opt_class); + MLX5_ASSERT(option != NULL); + /* Decrease the option reference counter. */ + rte_atomic_fetch_sub_explicit(&option->refcnt, 1, + rte_memory_order_relaxed); + mng->options[i].opt_type = 0; + mng->options[i].opt_class = 0; + } + mng->nb_options = 0; +} + /** * Create single GENEVE TLV option sample. * @@ -208,6 +308,24 @@ mlx5_geneve_tlv_option_destroy_sample(struct mlx5_geneve_tlv_resource *resource) resource->obj = NULL; } +/* + * Sample for DW0 are created when one of two conditions is met: + * 1. Header is matchable. + * 2. This option doesn't configure any data DW. + */ +static bool +should_configure_sample_for_dw0(const struct rte_pmd_mlx5_geneve_tlv *spec) +{ + uint8_t i; + + if (spec->match_on_class_mode == 2) + return true; + for (i = 0; i < spec->sample_len; ++i) + if (spec->match_data_mask[i] != 0) + return false; + return true; +} + /** * Create single GENEVE TLV option. * @@ -237,8 +355,7 @@ mlx5_geneve_tlv_option_create(void *ctx, const struct rte_pmd_mlx5_geneve_tlv *s uint8_t i, resource_id = 0; int ret; - if (spec->match_on_class_mode == 2) { - /* Header is matchable, create sample for DW0. */ + if (should_configure_sample_for_dw0(spec)) { attr.sample_offset = 0; resource = &option->resources[resource_id]; ret = mlx5_geneve_tlv_option_create_sample(ctx, &attr, diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c index da873ae2e2..7c786c432f 100644 --- a/drivers/net/mlx5/mlx5_flow_hw.c +++ b/drivers/net/mlx5/mlx5_flow_hw.c @@ -6781,6 +6781,17 @@ flow_hw_pattern_validate(struct rte_eth_dev *dev, " attribute"); break; } + case RTE_FLOW_ITEM_TYPE_GENEVE_OPT: + { + int ret; + + ret = mlx5_flow_geneve_tlv_option_validate(priv, + &items[i], + error); + if (ret < 0) + return ret; + break; + } case RTE_FLOW_ITEM_TYPE_VOID: case RTE_FLOW_ITEM_TYPE_ETH: case RTE_FLOW_ITEM_TYPE_VLAN: @@ -6792,6 +6803,7 @@ flow_hw_pattern_validate(struct rte_eth_dev *dev, case RTE_FLOW_ITEM_TYPE_GTP_PSC: case RTE_FLOW_ITEM_TYPE_VXLAN: case RTE_FLOW_ITEM_TYPE_MPLS: + case RTE_FLOW_ITEM_TYPE_GENEVE: case MLX5_RTE_FLOW_ITEM_TYPE_SQ: case RTE_FLOW_ITEM_TYPE_GRE: case RTE_FLOW_ITEM_TYPE_GRE_KEY: @@ -6959,24 +6971,45 @@ flow_hw_pattern_template_create(struct rte_eth_dev *dev, } } for (i = 0; items[i].type != RTE_FLOW_ITEM_TYPE_END; ++i) { - if (items[i].type == RTE_FLOW_ITEM_TYPE_FLEX) { + switch (items[i].type) { + case RTE_FLOW_ITEM_TYPE_FLEX: { const struct rte_flow_item_flex *spec = (const struct rte_flow_item_flex *)items[i].spec; struct rte_flow_item_flex_handle *handle = spec->handle; if (flow_hw_flex_item_acquire(dev, handle, &it->flex_item)) { - claim_zero(mlx5dr_match_template_destroy(it->mt)); - mlx5_free(it); rte_flow_error_set(error, rte_errno, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL, "Failed to acquire flex item"); - return NULL; + goto error; } + break; + } + case RTE_FLOW_ITEM_TYPE_GENEVE_OPT: { + const struct rte_flow_item_geneve_opt *spec = items[i].spec; + + if (mlx5_geneve_tlv_option_register(priv, spec, + &it->geneve_opt_mng)) { + rte_flow_error_set(error, rte_errno, + RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL, + "Failed to register GENEVE TLV option"); + goto error; + } + break; + } + default: + break; } } __atomic_fetch_add(&it->refcnt, 1, __ATOMIC_RELAXED); LIST_INSERT_HEAD(&priv->flow_hw_itt, it, next); return it; +error: + flow_hw_flex_item_release(dev, &it->flex_item); + mlx5_geneve_tlv_options_unregister(priv, &it->geneve_opt_mng); + claim_zero(mlx5dr_match_template_destroy(it->mt)); + mlx5_free(it); + return NULL; } /** @@ -6997,6 +7030,8 @@ flow_hw_pattern_template_destroy(struct rte_eth_dev *dev, struct rte_flow_pattern_template *template, struct rte_flow_error *error __rte_unused) { + struct mlx5_priv *priv = dev->data->dev_private; + if (__atomic_load_n(&template->refcnt, __ATOMIC_RELAXED) > 1) { DRV_LOG(WARNING, "Item template %p is still in use.", (void *)template); @@ -7010,6 +7045,7 @@ flow_hw_pattern_template_destroy(struct rte_eth_dev *dev, mlx5_free_srh_flex_parser(dev); LIST_REMOVE(template, next); flow_hw_flex_item_release(dev, &template->flex_item); + mlx5_geneve_tlv_options_unregister(priv, &template->geneve_opt_mng); claim_zero(mlx5dr_match_template_destroy(template->mt)); mlx5_free(template); return 0; From patchwork Sun Dec 3 11:25:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 134765 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 779134365F; Sun, 3 Dec 2023 12:28:35 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4958D40EDF; Sun, 3 Dec 2023 12:26:51 +0100 (CET) Received: from NAM04-BN8-obe.outbound.protection.outlook.com (mail-bn8nam04on2081.outbound.protection.outlook.com [40.107.100.81]) by mails.dpdk.org (Postfix) with ESMTP id DE3E740E8A for ; Sun, 3 Dec 2023 12:26:47 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ixZ8U3mXmxU4jwfiv8/NGseKDylxnpd0f21UozvnZRGvp536AAodkscCnIRA+cf3mAUQGmUPVzvpJ1ctlBkdxqZnqnboQh5FPopRPBp4SMJLtL14c+5Ga3esOmIGy+K8KanUmbHsWUTNBKCIQ6vtHd2DlzWVaijsZLES6Ga7hpa++uMwgpfp9e6SzbdSbCbcZ9Tko+9m/uFSB+KU/hrLWLkjScUIkjcK9Z7xOpkrgQv913bpjwFH7CPfZIbm+WHIlAEWVIy5r1YddI2aQ6QYpAgpRQthH9t5avBneiWYqsOu2mUqFVL//YR5mpLiN/CdO0CfzJ/Th4mRCtIM3t08rw== 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=2ZpP9tPwjN0ZtNt1fk/wdglsPcL/PT+GaQx5g/6PkKk=; b=kwULWnaZhArup+lnoR+fJYNPSTd5NG1bGTmEMYqSnSRXW6Fvj2Y54tkTmZhPII1pWf1NZJZTZRIBkK2gthS8Moo/w5mrd2bNUvC60o9tpdbrbGgkjzy6cVb519MKIQNFTnI5yG7C84KdOdjFyfcaiu7RaGz5vYoUM+NS+y1ufzoj/GAjA7hKAZKCDtzGncSk597pfYDLoIdz4KtUrocXcDSsV4u5DWySo15/oKCTHpe3LBXcm+pSTdkPWGbSt6D3qTC6hIyH7MviuSnE8wgtwV86q6IsYYkjBTZjwh15lP60yCiWGJPhRR7wosGXPKQeGbpLaxPDewZlLdXbtzTTlw== 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 (0) 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=2ZpP9tPwjN0ZtNt1fk/wdglsPcL/PT+GaQx5g/6PkKk=; b=akDQAcQEzK+OLrIvdF+K7PIeep4sjbHsv8GkwvVHjzdmORZXGgRZRSZoWFp/92pD1TQKEnSn3spZAYDAhqVGZ9kUtzIlBHJtnURNd3/qN3K3lse3BBHtKew83AqXESaL/rnNZq5eE/59orhm2T7BGBzm26JpWa6FEe6ex1HbnO2xbR1ZUX6dRYv5CKpqqQHgtw6av0qK8DZaOxHIHUSlXxFOZmkPfEQLOURMZbETLsXXEG+GktobCZA9ZutgLiBWpNCQW44z37iU6mQuSU2gLnzUQXV3M8DxlfIO/bDDD+2C4mJT1ihzKSc/L8df3bMqR0X7dDByubHipsyftdoR5g== Received: from DS7PR03CA0018.namprd03.prod.outlook.com (2603:10b6:5:3b8::23) by CH3PR12MB9220.namprd12.prod.outlook.com (2603:10b6:610:198::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32; Sun, 3 Dec 2023 11:26:45 +0000 Received: from DS1PEPF0001709B.namprd05.prod.outlook.com (2603:10b6:5:3b8:cafe::9c) by DS7PR03CA0018.outlook.office365.com (2603:10b6:5:3b8::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6977.31 via Frontend Transport; Sun, 3 Dec 2023 11:26:45 +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 DS1PEPF0001709B.mail.protection.outlook.com (10.167.18.105) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.20 via Frontend Transport; Sun, 3 Dec 2023 11:26:45 +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.41; Sun, 3 Dec 2023 03:26:39 -0800 Received: from rnnvmail205.nvidia.com (10.129.68.10) 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.41; Sun, 3 Dec 2023 03:26:38 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41 via Frontend Transport; Sun, 3 Dec 2023 03:26:37 -0800 From: Michael Baum To: CC: Matan Azrad , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou Subject: [PATCH v1 20/23] net/mlx5: add GENEVE option support for profile 0 Date: Sun, 3 Dec 2023 13:25:40 +0200 Message-ID: <20231203112543.844014-21-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231203112543.844014-1-michaelba@nvidia.com> References: <20231203112543.844014-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF0001709B:EE_|CH3PR12MB9220:EE_ X-MS-Office365-Filtering-Correlation-Id: f48325a8-9904-42a6-bcef-08dbf3f2bb64 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: wofpGsOj/OKth+rCPxfN0UHk9jqHo2qNGzDvO+t+Vo0wIBKjZDzJplFkmbbojBwQ/CTMQWKmaTULEVBnxePIoHjgr3dG+IWnpuf/ml0+1YfXSGH5oQYbZhEF+ipEwNijFgN2JvDZbGuI0nl/m8CAo+apQM5IcL/2B+Jp84g4cE1m5zsW7/LqO5LVc7LTK48F6uZqSIW9+rGY/zxzO3UDh5QWaEMSlez/+cunPftvUewh6371fzzMIchXTB7Tb7pNTZmW5zn20EOHA9gHblnfBDKosnfY3pQW/wyyArzAg1/MVOxpcSFp6PhDyQ4F/OVEEcW1yM5VNh5hpMLTHLoK4miABASutR7a8oufh+7NhiWJKpeVu82GMNr82148JMUUYd+EvbdW+9ABIkEro7bf1hIQr3QNCSEC2qgCXHrHrlBjyQKaU3gZj45hwZ0C3cmaAXTH1vHyKJW1Kde+FEDAr1zbMT5QX8Dw/9GLCIEt9EAVyXDoTB56TUm6MLgYT7M7BHEwgyNJ/m3gMP16+2IR18EEsfoaE+IA64LkQclMdLc9gpIRn2U/SPmfTL3N9EMl5P2+apHbUHgU6hckd5Hzp7JqMvOZyS2D095Fol0YNltgfHVuGRBy/DXqwR/LSqxkN6hhdsebVLnImfT6/LKkXrGCA7FYC5SghEky4DDqaMJ+iPAvkrXJ6q2dHxAjvaehL5AB7pRUH1Yyaj77uPAP5jMFP3m9wcMY73bUWsNaFVd5lb5i4MMCvcgqkjpxDvEG 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:(13230031)(4636009)(346002)(376002)(39860400002)(396003)(136003)(230922051799003)(82310400011)(1800799012)(64100799003)(186009)(451199024)(46966006)(40470700004)(36840700001)(478600001)(26005)(83380400001)(7636003)(336012)(6286002)(47076005)(6666004)(7696005)(356005)(1076003)(40480700001)(82740400003)(426003)(36756003)(107886003)(2616005)(316002)(6916009)(54906003)(70206006)(70586007)(36860700001)(55016003)(5660300002)(4326008)(86362001)(2906002)(8936002)(8676002)(40460700003)(41300700001)(30864003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2023 11:26:45.3226 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f48325a8-9904-42a6-bcef-08dbf3f2bb64 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: DS1PEPF0001709B.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB9220 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 Add support for matching and modifying GENEVE option for FLEX_PARSER_PROFILE_ENABLE=0. Before this patch it is supported when FLEX_PARSER_PROFILE_ENABLE=8 in HW steering and when FLEX_PARSER_PROFILE_ENABLE=0 in SW steering. Signed-off-by: Michael Baum --- doc/guides/nics/mlx5.rst | 9 ++- doc/guides/platform/mlx5.rst | 6 +- drivers/net/mlx5/mlx5_flow_geneve.c | 114 +++++++++++++++++++++------- 3 files changed, 95 insertions(+), 34 deletions(-) diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst index 645b566d80..b946ce00c2 100644 --- a/doc/guides/nics/mlx5.rst +++ b/doc/guides/nics/mlx5.rst @@ -347,6 +347,7 @@ Limitations - Multiple of same Geneve TLV option isn't supported at the same pattern template. - Supported only when ``FLEX_PARSER_PROFILE_ENABLE`` = 8. + - Supported also when ``FLEX_PARSER_PROFILE_ENABLE`` = 0 for single DW only. - VF: flow rules created on VF devices can only match traffic targeted at the configured MAC addresses (see ``rte_eth_dev_mac_addr_add()``). @@ -2429,8 +2430,14 @@ Limitations ~~~~~~~~~~~ * Supported only in HW steering (``dv_flow_en`` = 2). -* Supported only when ``FLEX_PARSER_PROFILE_ENABLE`` = 8. * Supported for FW version **xx.37.0142** and above. +* Parser creation can be done only for E-Switch manager. +* Supported for multiple DW only when ``FLEX_PARSER_PROFILE_ENABLE`` = 8. +* Supported for single DW also when ``FLEX_PARSER_PROFILE_ENABLE`` = 0 with some limitations: + + - ``sample_len`` must be equal to ``option_len`` and not bigger than 1. + - ``match_on_class_mode`` different than 1 is not supported. + - ``offset`` must be 0. Testpmd driver specific commands diff --git a/doc/guides/platform/mlx5.rst b/doc/guides/platform/mlx5.rst index d16508d0da..a66cf778d1 100644 --- a/doc/guides/platform/mlx5.rst +++ b/doc/guides/platform/mlx5.rst @@ -536,12 +536,10 @@ Below are some firmware configurations listed. or FLEX_PARSER_PROFILE_ENABLE=1 -- enable Geneve TLV option flow matching in SW steering:: +- enable Geneve TLV option flow matching:: FLEX_PARSER_PROFILE_ENABLE=0 - -- enable Geneve TLV option flow matching in HW steering:: - + or FLEX_PARSER_PROFILE_ENABLE=8 - enable GTP flow matching:: diff --git a/drivers/net/mlx5/mlx5_flow_geneve.c b/drivers/net/mlx5/mlx5_flow_geneve.c index 2c8dc39e74..f3ee414d02 100644 --- a/drivers/net/mlx5/mlx5_flow_geneve.c +++ b/drivers/net/mlx5/mlx5_flow_geneve.c @@ -18,6 +18,8 @@ #define MAX_GENEVE_OPTION_TOTAL_DATA_SIZE \ (MAX_GENEVE_OPTION_DATA_SIZE * MAX_GENEVE_OPTIONS_RESOURCES) +#define INVALID_SAMPLE_ID (UINT8_MAX) + /** * Single DW inside GENEVE TLV option. */ @@ -265,6 +267,8 @@ mlx5_geneve_tlv_options_unregister(struct mlx5_priv *priv, * Pointer to header layout structure to update. * @param resource * Pointer to single sample context to fill. + * @param sample_id + * The flex parser id for single DW or UINT8_MAX for multiple DWs. * * @return * 0 on success, a negative errno otherwise and rte_errno is set. @@ -274,7 +278,7 @@ mlx5_geneve_tlv_option_create_sample(void *ctx, struct mlx5_devx_geneve_tlv_option_attr *attr, struct mlx5_devx_match_sample_info_query_attr *query_attr, struct mlx5_hl_data *match_data, - struct mlx5_geneve_tlv_resource *resource) + struct mlx5_geneve_tlv_resource *resource, uint8_t sample_id) { struct mlx5_devx_obj *obj; int ret; @@ -282,7 +286,10 @@ mlx5_geneve_tlv_option_create_sample(void *ctx, obj = mlx5_devx_cmd_create_geneve_tlv_option(ctx, attr); if (obj == NULL) return -rte_errno; - ret = mlx5_devx_cmd_query_geneve_tlv_option(ctx, obj, query_attr); + if (sample_id == INVALID_SAMPLE_ID) + ret = mlx5_devx_cmd_query_geneve_tlv_option(ctx, obj, query_attr); + else + ret = mlx5_devx_cmd_match_sample_info_query(ctx, sample_id, query_attr); if (ret) { claim_zero(mlx5_devx_cmd_destroy(obj)); return ret; @@ -335,20 +342,22 @@ should_configure_sample_for_dw0(const struct rte_pmd_mlx5_geneve_tlv *spec) * Pointer to user configuration. * @param option * Pointer to single GENEVE TLV option to fill. + * @param sample_id + * The flex parser id for single DW or UINT8_MAX for multiple DWs. * * @return * 0 on success, a negative errno otherwise and rte_errno is set. */ static int mlx5_geneve_tlv_option_create(void *ctx, const struct rte_pmd_mlx5_geneve_tlv *spec, - struct mlx5_geneve_tlv_option *option) + struct mlx5_geneve_tlv_option *option, uint8_t sample_id) { struct mlx5_devx_geneve_tlv_option_attr attr = { .option_class = spec->option_class, .option_type = spec->option_type, .option_data_len = spec->option_len, .option_class_ignore = spec->match_on_class_mode == 1 ? 0 : 1, - .offset_valid = 1, + .offset_valid = sample_id == INVALID_SAMPLE_ID ? 1 : 0, }; struct mlx5_devx_match_sample_info_query_attr query_attr = {0}; struct mlx5_geneve_tlv_resource *resource; @@ -356,12 +365,14 @@ mlx5_geneve_tlv_option_create(void *ctx, const struct rte_pmd_mlx5_geneve_tlv *s int ret; if (should_configure_sample_for_dw0(spec)) { + MLX5_ASSERT(sample_id == INVALID_SAMPLE_ID); attr.sample_offset = 0; resource = &option->resources[resource_id]; ret = mlx5_geneve_tlv_option_create_sample(ctx, &attr, &query_attr, &option->match_data[0], - resource); + resource, + INVALID_SAMPLE_ID); if (ret) return ret; resource_id++; @@ -379,7 +390,8 @@ mlx5_geneve_tlv_option_create(void *ctx, const struct rte_pmd_mlx5_geneve_tlv *s ret = mlx5_geneve_tlv_option_create_sample(ctx, &attr, &query_attr, &option->match_data[i], - resource); + resource, + sample_id); if (ret) goto error; resource_id++; @@ -467,6 +479,8 @@ mlx5_geneve_tlv_option_copy(struct rte_pmd_mlx5_geneve_tlv *dst, * A list of GENEVE TLV options to create parser for them. * @param nb_options * The number of options in TLV list. + * @param sample_id + * The flex parser id for single DW or UINT8_MAX for multiple DWs. * * @return * A pointer to GENEVE TLV options parser structure on success, @@ -475,7 +489,7 @@ mlx5_geneve_tlv_option_copy(struct rte_pmd_mlx5_geneve_tlv *dst, static struct mlx5_geneve_tlv_options * mlx5_geneve_tlv_options_create(struct mlx5_dev_ctx_shared *sh, const struct rte_pmd_mlx5_geneve_tlv tlv_list[], - uint8_t nb_options) + uint8_t nb_options, uint8_t sample_id) { struct mlx5_geneve_tlv_options *options; const struct rte_pmd_mlx5_geneve_tlv *spec; @@ -495,7 +509,7 @@ mlx5_geneve_tlv_options_create(struct mlx5_dev_ctx_shared *sh, for (i = 0; i < nb_options; ++i) { spec = &tlv_list[i]; ret = mlx5_geneve_tlv_option_create(sh->cdev->ctx, spec, - &options->options[i]); + &options->options[i], sample_id); if (ret < 0) goto error; /* Copy the user list for comparing future configuration. */ @@ -705,6 +719,12 @@ mlx5_is_same_geneve_tlv_options(const struct mlx5_geneve_tlv_options *options, return true; } +static inline bool +multiple_dws_supported(struct mlx5_hca_attr *attr) +{ + return attr->geneve_tlv_option_offset && attr->geneve_tlv_sample; +} + void * mlx5_geneve_tlv_parser_create(uint16_t port_id, const struct rte_pmd_mlx5_geneve_tlv tlv_list[], @@ -715,8 +735,7 @@ mlx5_geneve_tlv_parser_create(uint16_t port_id, struct rte_eth_dev *dev; struct mlx5_priv *priv; struct mlx5_hca_attr *attr; - uint8_t total_dws = 0; - uint8_t i; + uint8_t sample_id; /* * Validate the input before taking a lock and before any memory @@ -742,34 +761,71 @@ mlx5_geneve_tlv_parser_create(uint16_t port_id, return NULL; } attr = &priv->sh->cdev->config.hca_attr; - MLX5_ASSERT(MAX_GENEVE_OPTIONS_RESOURCES <= - attr->max_geneve_tlv_options); - if (!attr->geneve_tlv_option_offset || !attr->geneve_tlv_sample || - !attr->query_match_sample_info || !attr->geneve_tlv_opt) { - DRV_LOG(ERR, "Not enough capabilities to support GENEVE TLV parser, maybe old FW version"); + if (!attr->query_match_sample_info || !attr->geneve_tlv_opt) { + DRV_LOG(ERR, "Not enough capabilities to support GENEVE TLV parser, is this device eswitch manager?"); rte_errno = ENOTSUP; return NULL; } - if (nb_options > MAX_GENEVE_OPTIONS_RESOURCES) { + DRV_LOG(DEBUG, "Max DWs supported for GENEVE TLV option is %u", + attr->max_geneve_tlv_options); + if (nb_options > attr->max_geneve_tlv_options) { DRV_LOG(ERR, "GENEVE TLV option number (%u) exceeds the limit (%u).", - nb_options, MAX_GENEVE_OPTIONS_RESOURCES); + nb_options, attr->max_geneve_tlv_options); rte_errno = EINVAL; return NULL; } - for (i = 0; i < nb_options; ++i) { - if (mlx5_geneve_tlv_option_validate(attr, &tlv_list[i]) < 0) { - DRV_LOG(ERR, "GENEVE TLV option %u is invalid.", i); + if (multiple_dws_supported(attr)) { + uint8_t total_dws = 0; + uint8_t i; + + MLX5_ASSERT(attr->max_geneve_tlv_options >= MAX_GENEVE_OPTIONS_RESOURCES); + for (i = 0; i < nb_options; ++i) { + if (mlx5_geneve_tlv_option_validate(attr, &tlv_list[i]) < 0) { + DRV_LOG(ERR, "GENEVE TLV option %u is invalid.", i); + return NULL; + } + total_dws += mlx5_geneve_tlv_option_get_nb_dws(&tlv_list[i]); + } + if (total_dws > MAX_GENEVE_OPTIONS_RESOURCES) { + DRV_LOG(ERR, + "Total requested DWs (%u) exceeds the limit (%u).", + total_dws, MAX_GENEVE_OPTIONS_RESOURCES); + rte_errno = EINVAL; return NULL; } - total_dws += mlx5_geneve_tlv_option_get_nb_dws(&tlv_list[i]); - } - if (total_dws > MAX_GENEVE_OPTIONS_RESOURCES) { - DRV_LOG(ERR, - "Total requested DWs (%u) exceeds the limit (%u).", - total_dws, MAX_GENEVE_OPTIONS_RESOURCES); - rte_errno = EINVAL; - return NULL; + /* Multiple DWs is supported, each of the has sample ID given later. */ + sample_id = INVALID_SAMPLE_ID; + DRV_LOG(DEBUG, "GENEVE TLV parser supports multiple DWs, FLEX_PARSER_PROFILE_ENABLE == 8"); + } else { + const struct rte_pmd_mlx5_geneve_tlv *option = &tlv_list[0]; + + if (option->offset != 0) { + DRV_LOG(ERR, + "GENEVE TLV option offset %u is required but not supported.", + option->offset); + rte_errno = ENOTSUP; + return NULL; + } + if (option->sample_len != option->option_len) { + DRV_LOG(ERR, + "GENEVE TLV option length (%u) should be equal to sample length (%u).", + option->option_len, option->sample_len); + rte_errno = ENOTSUP; + return NULL; + } + if (option->match_on_class_mode != 1) { + DRV_LOG(ERR, + "GENEVE TLV option match_on_class_mode %u is invalid for flex parser profile 0.", + option->match_on_class_mode); + rte_errno = EINVAL; + return NULL; + } + if (mlx5_geneve_tlv_option_validate(attr, option) < 0) + return NULL; + /* Single DW is supported, its sample ID is given. */ + sample_id = attr->geneve_tlv_option_sample_id; + DRV_LOG(DEBUG, "GENEVE TLV parser supports only single DW, FLEX_PARSER_PROFILE_ENABLE == 0"); } /* Take lock for this physical device and manage the options. */ phdev = mlx5_get_locked_physical_device(priv); @@ -793,7 +849,7 @@ mlx5_geneve_tlv_parser_create(uint16_t port_id, goto exit; } /* Create GENEVE TLV options for this physical device. */ - options = mlx5_geneve_tlv_options_create(priv->sh, tlv_list, nb_options); + options = mlx5_geneve_tlv_options_create(priv->sh, tlv_list, nb_options, sample_id); if (!options) { mlx5_unlock_physical_device(); return NULL; From patchwork Sun Dec 3 11:25:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 134766 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 939174365F; Sun, 3 Dec 2023 12:28:41 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7207B4069D; Sun, 3 Dec 2023 12:27:01 +0100 (CET) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2051.outbound.protection.outlook.com [40.107.244.51]) by mails.dpdk.org (Postfix) with ESMTP id 643A340648 for ; Sun, 3 Dec 2023 12:26:59 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XEsAYhsiY3XKQ2/RoKPgLIAQW09A7PyCRohTtLnTvIZfPHfEdYkUdG2BjQi0p0GaB8vKNwEg5tCBDkmb+mliYOsj1PgidLAaaA1QCvh7LPnvnmfPI3Xkm8/LO4z9Py8NM57aosNESDGL9sx9As0gD7wQoArxvQb03Khkis3P/et12viqirceiZhfx3uRyweNi5pYU9lrm0DMHYL2RPS4FFlgkdovxULOIQxnq+v6dRZqYSeM6HEQnYHMPLL/eLnCqTNKIicl0CHfL0AYxB1roQ1o/+LizG/x+JE9fp4hvcxGqXxsjkQbT6JyEGPQGjxU6KAYN1q6erTNFC10gBx6fA== 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=oz+CEA34dJNh8ORA+SYwWXkTD50y9YpZt/zLKN/sc04=; b=HY2VGRkUuDrJJbNegQ5OGBWvQQQ/uLTdMteHsc7DCkUCVnea3v8ocAlqhqlD6VE9iDEGWMDbKOS2KgMKGFdKcvhb7qEn2o+DKN6jeOOzNjdgv3rsU6+w693D/zuT3EWMbvCHKf0ixQ41QaeVOZRhGN85crvMm+QWNkKbrN7KzNtcEyj3RnK9jsr8GiKVnU4CAcPz5RQai09nUPWiRyRJMUWy0Q/gqk6kbnq7cJN2MLGhtAiEwSSmXQNsf7x/H+bwMZfMZKEr6Bf29pXTaGLi+I/I+FukiYfaP6MwPEQvMYoBgfUOYwQpDzXGBK88UsljTaDlc9Erhzk3dBt3NxoDaw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) 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 (0) 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=oz+CEA34dJNh8ORA+SYwWXkTD50y9YpZt/zLKN/sc04=; b=TLrUDWeIQswnZPSkgX3im9o0Xv6e9jrnSsWF3A28sKjouI4iYuY4jpMjTFMQOvUw4sGNsO8tMyuYf3YOiXNhYxCZokh/sLg58pC7Y/dBsoKF4z+mcWNILb2sceDR2OIDdOLOwUBOqD12nJcrob8wkUl/ppsLouAHpt+kM9QuAJCl6fVmIYJ98j7MXG+a/K0QySsYXScw2+N+FWU7JNEyGut+9adTQvFbwOEP2Q+SmCHMzZqEziagNmBIi2dEw9bJl0Nm76SU1C6xl4MNIeO73xbsJ9nWkje+evm5/jKAg/pyQnvd9B/lDN08jghry0R1v6gLHISupqTP9WNfrsXRrQ== Received: from MW4PR04CA0247.namprd04.prod.outlook.com (2603:10b6:303:88::12) by PH7PR12MB8596.namprd12.prod.outlook.com (2603:10b6:510:1b7::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32; Sun, 3 Dec 2023 11:26:57 +0000 Received: from CO1PEPF000042A8.namprd03.prod.outlook.com (2603:10b6:303:88:cafe::77) by MW4PR04CA0247.outlook.office365.com (2603:10b6:303:88::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32 via Frontend Transport; Sun, 3 Dec 2023 11:26:57 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CO1PEPF000042A8.mail.protection.outlook.com (10.167.243.37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.20 via Frontend Transport; Sun, 3 Dec 2023 11:26:56 +0000 Received: from rnnvmail205.nvidia.com (10.129.68.10) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:26:41 -0800 Received: from rnnvmail205.nvidia.com (10.129.68.10) by rnnvmail205.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:26:41 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41 via Frontend Transport; Sun, 3 Dec 2023 03:26:39 -0800 From: Michael Baum To: CC: Matan Azrad , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou Subject: [PATCH v1 21/23] net/mlx5: add GENEVE option support for group 0 Date: Sun, 3 Dec 2023 13:25:41 +0200 Message-ID: <20231203112543.844014-22-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231203112543.844014-1-michaelba@nvidia.com> References: <20231203112543.844014-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000042A8:EE_|PH7PR12MB8596:EE_ X-MS-Office365-Filtering-Correlation-Id: 0e50d837-e835-4e62-cfd3-08dbf3f2c240 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +jhqz3Zc586XjpQGPPHo/m9A9hYJ6dCst1i3KdBCnGnkRE12E87awHoFk2LiRViYzzpsef3i6gpI5lWCHcPEkzhJ/yrJjGNiwFeGq3vekgjDP4YbKsdZLlgKdivJJI/Qyd5cSOhsns4xPH/zN79MPjfx1mDk6FVOeqO/MVjbNg6Z50mS1S3OVxFqIkVXE6NHbpBZmx7GmyYr/XxEFHYfQhrLrH2DdnG7HXG3oMKEJwwVtL9g4WJMEUZMRMnY37o3LPQJN0OKfhrdCt8bkiwOruoeODp++OOLSn2LJOcCEbePbVgAElm8pYLYpAZgI2lyr3KKm4vK7TosAmkBRPu1Uy2AHNecBEO9jJHqWEtNkp4/kmyGKcV6V6VyM2AQQjDHqJ01rpVUW0ck6NxiBqqpuQ6Z4jYJXQdSriKV7Kpfr2XZ9s1/gV1+okkv8XfCxjxxgPd1LfpkiSJ/FUHpRQ7zz5PLpiUpDAvs8fowyTd9I4SxCAF+oKPPxz80mBXBqrcgkWsqjK+/jgM4Dq2fmjzG8hy/sCvUirw3vfB60zXSOHZasJGU7XQGDNsd59UcjjbuE4uLs++D3rcF7xJUbl8Gb95T5moIxt7A6V/RvnFM+AaTpiFuqWrWoVpobDds5/TKwZBn313ecd3k3eMvpsXTVK0nA2tezSnYsKUZb7Ejxne+suTL9XopZH8JR0TQd+9WR09tFsDPCY/ztIe/AQkly8H3QOo3+Z2ZHA1Oho1gEO4CtRcXo6LZOI4o66D+aSR+ X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230031)(4636009)(346002)(376002)(396003)(39860400002)(136003)(230922051799003)(64100799003)(1800799012)(186009)(82310400011)(451199024)(36840700001)(40470700004)(46966006)(40480700001)(55016003)(40460700003)(36860700001)(356005)(47076005)(7636003)(2906002)(5660300002)(82740400003)(83380400001)(336012)(426003)(1076003)(7696005)(107886003)(6666004)(2616005)(26005)(6286002)(478600001)(36756003)(41300700001)(70206006)(54906003)(6916009)(316002)(4326008)(8676002)(8936002)(70586007)(86362001); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2023 11:26:56.8157 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0e50d837-e835-4e62-cfd3-08dbf3f2c240 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.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000042A8.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB8596 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 Add support for HWS GENEVE options for flex parser profile 0 and group 0. This patch avoids parser creation during matcher/flow preparation for HW steering (MLX5_SET_MATCHER_HS) and removes some logic done in "flow_dev_geneve_tlv_option_resource_*()" functions when dv_flow_en=2. After this change, those functions became static and they were removed from header file. Signed-off-by: Michael Baum --- drivers/net/mlx5/mlx5.c | 8 +------- drivers/net/mlx5/mlx5_flow.h | 4 ---- drivers/net/mlx5/mlx5_flow_dv.c | 24 +++++++++++------------- 3 files changed, 12 insertions(+), 24 deletions(-) diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index 5f8af31aea..881c42a97a 100644 --- a/drivers/net/mlx5/mlx5.c +++ b/drivers/net/mlx5/mlx5.c @@ -2049,13 +2049,7 @@ mlx5_free_shared_dev_ctx(struct mlx5_dev_ctx_shared *sh) } while (++i <= sh->bond.n_port); if (sh->td) claim_zero(mlx5_devx_cmd_destroy(sh->td)); -#ifdef HAVE_MLX5_HWS_SUPPORT - /* HWS manages geneve_tlv_option resource as global. */ - if (sh->config.dv_flow_en == 2) - flow_dev_geneve_tlv_option_resource_release(sh); - else -#endif - MLX5_ASSERT(sh->geneve_tlv_option_resource == NULL); + MLX5_ASSERT(sh->geneve_tlv_option_resource == NULL); pthread_mutex_destroy(&sh->txpp.mutex); mlx5_lwm_unset(sh); mlx5_physical_device_destroy(sh->phdev); diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h index 04a2eb0b0c..808f364c6c 100644 --- a/drivers/net/mlx5/mlx5_flow.h +++ b/drivers/net/mlx5/mlx5_flow.h @@ -2825,10 +2825,6 @@ void flow_hw_grp_clone_free_cb(void *tool_ctx, struct mlx5_list_entry *entry); struct mlx5_aso_age_action *flow_aso_age_get_by_idx(struct rte_eth_dev *dev, uint32_t age_idx); -int flow_dev_geneve_tlv_option_resource_register(struct rte_eth_dev *dev, - const struct rte_flow_item *item, - struct rte_flow_error *error); -void flow_dev_geneve_tlv_option_resource_release(struct mlx5_dev_ctx_shared *sh); void flow_release_workspace(void *data); int mlx5_flow_os_init_workspace_once(void); diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c index 8894f51f4c..72e0d82e7b 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -9880,7 +9880,7 @@ flow_dv_translate_item_geneve(void *key, const struct rte_flow_item *item, /** * Create Geneve TLV option resource. * - * @param dev[in, out] + * @param[in, out] dev * Pointer to rte_eth_dev structure. * @param[in] item * Flow pattern to translate. @@ -9890,8 +9890,7 @@ flow_dv_translate_item_geneve(void *key, const struct rte_flow_item *item, * @return * 0 on success otherwise -errno and errno is set. */ - -int +static int flow_dev_geneve_tlv_option_resource_register(struct rte_eth_dev *dev, const struct rte_flow_item *item, struct rte_flow_error *error) @@ -9904,6 +9903,7 @@ flow_dev_geneve_tlv_option_resource_register(struct rte_eth_dev *dev, const struct rte_flow_item_geneve_opt *geneve_opt_v = item->spec; int ret = 0; + MLX5_ASSERT(sh->config.dv_flow_en == 1); if (!geneve_opt_v) return -1; rte_spinlock_lock(&sh->geneve_tlv_opt_sl); @@ -9914,13 +9914,8 @@ flow_dev_geneve_tlv_option_resource_register(struct rte_eth_dev *dev, geneve_opt_v->option_type && geneve_opt_resource->length == geneve_opt_v->option_len) { - /* - * We already have GENEVE TLV option obj allocated. - * Increasing refcnt only in SWS. HWS uses it as global. - */ - if (priv->sh->config.dv_flow_en == 1) - __atomic_fetch_add(&geneve_opt_resource->refcnt, 1, - __ATOMIC_RELAXED); + __atomic_fetch_add(&geneve_opt_resource->refcnt, 1, + __ATOMIC_RELAXED); } else { ret = rte_flow_error_set(error, ENOMEM, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL, @@ -9999,8 +9994,11 @@ flow_dv_translate_item_geneve_opt(struct rte_eth_dev *dev, void *key, return -1; MLX5_ITEM_UPDATE(item, key_type, geneve_opt_v, geneve_opt_m, &rte_flow_item_geneve_opt_mask); - /* Register resource requires item spec. */ - if (key_type & MLX5_SET_MATCHER_V) { + /* + * Register resource requires item spec for SW steering, + * for HW steering resources is registered explicitly by user. + */ + if (key_type & MLX5_SET_MATCHER_SW_V) { ret = flow_dev_geneve_tlv_option_resource_register(dev, item, error); if (ret) { @@ -15777,7 +15775,7 @@ flow_dv_dest_array_resource_release(struct rte_eth_dev *dev, &resource->entry); } -void +static void flow_dev_geneve_tlv_option_resource_release(struct mlx5_dev_ctx_shared *sh) { struct mlx5_geneve_tlv_option_resource *geneve_opt_resource = From patchwork Sun Dec 3 11:25:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 134767 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 4B3094365F; Sun, 3 Dec 2023 12:28:49 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2680B41060; Sun, 3 Dec 2023 12:27:03 +0100 (CET) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2068.outbound.protection.outlook.com [40.107.220.68]) by mails.dpdk.org (Postfix) with ESMTP id 2A6D640A7A for ; Sun, 3 Dec 2023 12:27:02 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VMHkHyCxkSHmcgwlUjNwnIpAv8fp2WxXEYyHWctm2DUMuXKkSOpJqO/fUIpSjqTy+M5mPBUgLMW2BByCOFokgG7wAaCjhqbvJBpoTSfAgu39ACdjV2bQyk2qOKYhNGMxfDqMmrBXYDbwZ+VVmgWTKPdZqC+z8/O/b5HICGrRruYSHHdVSuHrjXvoyjC1GtMu9VWFSb/NgCNX6NTT6SZ3yjuJNklddGLzsTzysuD0zn93+fLFCZoWqCllor1t2K61zV2NUXXjoyqpqtqfgndDzlX+5gu2aURoKRU+ZZieYkCKf1BMxOb9zMl/VjAMu9EqzMYVXeYL57aRkXm9iSrEAw== 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=iT9nR1AxSRdyNe9wBHnOoKoDxfnGwMKqQf8m/sGnsss=; b=JhcK3aIKW6aRLlFRxcPb5MOYzIrbZfvFu9RWB4YTmVvEfgyE8lUQlOEUq69uJcvqtH0BEDhsQQlMcX/Brku4wWlJYdFKL4cryNiXNn9f4TmZCI1GI/yMoyhcjPzgFgk4ZEHtwQeYXC0nNBLUrE5oZ+fG5SneJO1HuyNVCZ176wggsXdZJsRGQXUob4XvZq6WAI0OEiOGluOtv3bFwvElpQSlIZdv89fcyvzta1dDSYlK8a1u/VA4X1n1Z5u/rtw+LBAHAYB8Wbnb12BKj0XMtCaFrWH1Ud83skMR6Z8Io917AFn6F8w8DcDHZnsmlL46cWNAhpGnnjBptjIX5F2DTA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) 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 (0) 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=iT9nR1AxSRdyNe9wBHnOoKoDxfnGwMKqQf8m/sGnsss=; b=gbqOJcwzwr57qDzz9cbSgWEAAjzrvzQJN0r3VwSCRc04dLutDd7PaPq3HdaHdhJqlb/R9kb21bQq+zVpgSpMH/uXOBfJRi8PMXlGrCn9ODJqV8G0zoZ8JpwKxCIxUQkGkwTTkijLzl16mAK7Ny2WUVLoo2J63IpD7VLvl5or7RPtGxMM0rPWgUVRvFRlMApITcqu7wX2LzD2I8ZhqnFjDKYLCXg7y7uMqWvlkWeJb9xnQbuBtVwit54Zkb6+dwtu5JALiFYegoM1T0gTLDTvExuP5JHeGXJDINW396kDcrEZfwNwcTBiHdHybGwe4/gZ8jCe3xEliPV00bHnGc9amw== Received: from MW4PR04CA0181.namprd04.prod.outlook.com (2603:10b6:303:86::6) by CH3PR12MB9025.namprd12.prod.outlook.com (2603:10b6:610:129::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32; Sun, 3 Dec 2023 11:26:59 +0000 Received: from CO1PEPF000042AB.namprd03.prod.outlook.com (2603:10b6:303:86:cafe::6f) by MW4PR04CA0181.outlook.office365.com (2603:10b6:303:86::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.33 via Frontend Transport; Sun, 3 Dec 2023 11:26:59 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CO1PEPF000042AB.mail.protection.outlook.com (10.167.243.40) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.20 via Frontend Transport; Sun, 3 Dec 2023 11:26:59 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:26:43 -0800 Received: from rnnvmail205.nvidia.com (10.129.68.10) 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.41; Sun, 3 Dec 2023 03:26:43 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41 via Frontend Transport; Sun, 3 Dec 2023 03:26:41 -0800 From: Michael Baum To: CC: Matan Azrad , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou Subject: [PATCH v1 22/23] net/mlx5: add support for GENEVE VNI modify field Date: Sun, 3 Dec 2023 13:25:42 +0200 Message-ID: <20231203112543.844014-23-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231203112543.844014-1-michaelba@nvidia.com> References: <20231203112543.844014-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000042AB:EE_|CH3PR12MB9025:EE_ X-MS-Office365-Filtering-Correlation-Id: b0c1ff68-d1e4-486d-e8e2-08dbf3f2c3ad X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: pBBC91eilTJcsWeOwftUGSKytsBd0t2tpB/d0+3bSyPNuz4/+6s4Q4l7ydV3dyQDDp8/KAr6mdgANVGeXf3TiJcq9/AeZDrUtxm69+5jGGJfoJ4th0A3hszgEFv5kt9OW0s5ANnnfE7hSDvH0n4hf2o42qW6B4Ua8QDT8csVLeJwxsWnzKLzGsn5VTzbzvAfZhYArJokDLIG7BcVsqWxCe2sgthh97s8Q11K6GwdfIDjXV+l2S44WSVfhEO3WkkEA0AZfuE35M+A6zKmkPh3qTw90qdBIRZ/Zb2TxOLEm1ooysIfkOsQpfSZEFkM8Vftc1kUWGgaeWoTSMVi0Q/Vuc7AtjWzmLICE5GlUyLpa1BEtOfDhrrgid34SxgFLT+pTLIFWxpQiH1u93c4l04CImKbEUyn9YxuDU3oLtE4a27o4R0H5iZ1J7Jwg2Ku0Q+k6IZ/957QpYbd6vqTGkhFJj+XbJIVSVs6SJ8hXTBSJo9nVQSwbkDADcg8u23ZhskOqHcqIZrF/NFnIEoAACTZNV2HDzuNgkDWu7bQ/Op7dwI4n95z8kIXNRZstANCnaZ2Yor3KF79uzPAHBx6rS4qcjSnFeoohdkUcQhUk6U7+vZZuwnfpZRx8dvTDnOX8wNJE1GeW/IP0zvog+SOn9lWOSn9j9bqbEaO8NptrNAWn5ZvcqiAz4y6PNmLe4TXTU3g633O0btOaJ2SGExcU1pu6gCPgW6UFmIOiixNGdj9TsX0ItRjmspnA9rI7Nj1uC6o X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230031)(4636009)(346002)(376002)(39860400002)(396003)(136003)(230922051799003)(82310400011)(1800799012)(64100799003)(186009)(451199024)(46966006)(40470700004)(36840700001)(478600001)(26005)(83380400001)(7636003)(336012)(6286002)(47076005)(7696005)(356005)(1076003)(40480700001)(82740400003)(426003)(36756003)(107886003)(2616005)(316002)(6916009)(54906003)(70206006)(70586007)(36860700001)(55016003)(5660300002)(4326008)(86362001)(2906002)(8936002)(8676002)(40460700003)(41300700001); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2023 11:26:59.2240 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b0c1ff68-d1e4-486d-e8e2-08dbf3f2c3ad 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.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000042AB.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB9025 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 Add support for GENEVE VNI field modification. The support is only using HW steering. Signed-off-by: Michael Baum --- doc/guides/nics/mlx5.rst | 6 +++++- doc/guides/rel_notes/release_24_03.rst | 1 + drivers/net/mlx5/mlx5_flow_dv.c | 4 +--- drivers/net/mlx5/mlx5_flow_hw.c | 12 ++++++++++-- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst index b946ce00c2..fceb5bd58b 100644 --- a/doc/guides/nics/mlx5.rst +++ b/doc/guides/nics/mlx5.rst @@ -577,7 +577,11 @@ Limitations - Modification of an arbitrary place in a packet via the special ``RTE_FLOW_FIELD_START`` Field ID is not supported. - Modification of the MPLS header is supported only in HWS and only to copy from, the encapsulation level is always 0. - - Modification of the 802.1Q Tag, VXLAN Network or GENEVE Network ID's is not supported. + - Modification of the 802.1Q Tag is not supported. + - Modification of VXLAN Network or GENEVE Network ID's is supported only for HW steering. + - Modification of GENEVE Network ID's is not supported when configured + ``FLEX_PARSER_PROFILE_ENABLE`` supports Geneve TLV options. + See :ref:`mlx5_firmware_config` for more flex parser information. - Encapsulation levels are not supported, can modify outermost header fields only. - Offsets cannot skip past the boundary of a field. - If the field type is ``RTE_FLOW_FIELD_MAC_TYPE`` diff --git a/doc/guides/rel_notes/release_24_03.rst b/doc/guides/rel_notes/release_24_03.rst index bedef2a4c0..8a99d6bfa4 100644 --- a/doc/guides/rel_notes/release_24_03.rst +++ b/doc/guides/rel_notes/release_24_03.rst @@ -59,6 +59,7 @@ New Features * Added HW steering support for ``RTE_FLOW_ITEM_TYPE_GENEVE`` flow item. * Added HW steering support for ``RTE_FLOW_ITEM_TYPE_GENEVE_OPT`` flow item. + * Added HW steering support for modify field ``RTE_FLOW_FIELD_GENEVE_VNI`` flow action. Removed Items diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c index 72e0d82e7b..bb3d7ddc3c 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -1881,6 +1881,7 @@ mlx5_flow_field_id_to_modify_info info[idx].offset = off_be; break; case RTE_FLOW_FIELD_VXLAN_VNI: + case RTE_FLOW_FIELD_GENEVE_VNI: MLX5_ASSERT(data->offset + width <= 24); /* VNI is on bits 31-8 of TUNNEL_HDR_DW_1. */ off_be = 24 - (data->offset + width) + 8; @@ -1891,9 +1892,6 @@ mlx5_flow_field_id_to_modify_info else info[idx].offset = off_be; break; - case RTE_FLOW_FIELD_GENEVE_VNI: - /* not supported yet*/ - break; case RTE_FLOW_FIELD_GTP_TEID: MLX5_ASSERT(data->offset + width <= 32); off_be = 32 - (data->offset + width); diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c index 7c786c432f..22ac4e0a7c 100644 --- a/drivers/net/mlx5/mlx5_flow_hw.c +++ b/drivers/net/mlx5/mlx5_flow_hw.c @@ -4952,6 +4952,8 @@ flow_hw_validate_action_modify_field(struct rte_eth_dev *dev, { const struct rte_flow_action_modify_field *action_conf = action->conf; const struct rte_flow_action_modify_field *mask_conf = mask->conf; + struct mlx5_priv *priv = dev->data->dev_private; + struct mlx5_hca_attr *attr = &priv->sh->cdev->config.hca_attr; int ret; if (!mask_conf) @@ -5047,10 +5049,16 @@ flow_hw_validate_action_modify_field(struct rte_eth_dev *dev, return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION, action, "modifying vlan_type is not supported"); - if (flow_hw_modify_field_is_used(action_conf, RTE_FLOW_FIELD_GENEVE_VNI)) + /** + * Geneve VNI modification is supported only when Geneve header is + * parsed natively. When GENEVE options are supported, they both Geneve + * and options headers are parsed as a flex parser. + */ + if (flow_hw_modify_field_is_used(action_conf, RTE_FLOW_FIELD_GENEVE_VNI) && + attr->geneve_tlv_opt) return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION, action, - "modifying Geneve VNI is not supported"); + "modifying Geneve VNI is not supported when GENEVE opt is supported"); /* Due to HW bug, tunnel MPLS header is read only. */ if (action_conf->dst.field == RTE_FLOW_FIELD_MPLS) return rte_flow_error_set(error, EINVAL, From patchwork Sun Dec 3 11:25:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Baum X-Patchwork-Id: 134769 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 152B64365F; Sun, 3 Dec 2023 12:29:02 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0BEEB410F6; Sun, 3 Dec 2023 12:27:06 +0100 (CET) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2046.outbound.protection.outlook.com [40.107.244.46]) by mails.dpdk.org (Postfix) with ESMTP id D575D410D3 for ; Sun, 3 Dec 2023 12:27:04 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SUGSsat8mSENkDXm6DObmf3hxPBDxWfRRRo9l1ufcrKcPGRVSbUG/3w81p/rAdJRx/WRUEmhRn0507bW7gSl4DmY1RUaxAu5r8c33nFqBnWBZvOk5itxpzEHki4Br/l+mmmrHsXwEqyjSAAYMJdeq3DFsA7ggEZwWz0U7b3Up19QrtTX+TvcXrDBXXMeHoQDrAQKItmcIwTadEP44T1fp0co7WdfmLSbcse+0bPyqruDLqxh7BB8SfCalEBm5XU7KTbNNxi56nz1DPZjYOSdBbxxpiq74Ela/F4MBIDWs+4T9NcPwVOohp3rZSQ74TUwlDXW6qYSCYxZTW+gJDqPQA== 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=vHb8vwA5hxnDpVrorNzrufO+TMJxDfIj0X5VV+YogdM=; b=TUE9Rc/TeT8OrSBesm4ph4fE0Q7XeVoSFpT36FMLxjQ2+9rOxlatMyDrXoOMEGLUhBevJwdVsagvGt6245HuniJherdxrWtbn7f5WMUVJCIhmlJaLNvWCudQVt4vp7upewY856DnpVs8Nrz8z645ezlIS9NMo9+Q0UedZBU2SpIFib6JTJeN42mWk0KaN16Aj1/EDtHCAekyV4y2pERORlI6AUblQIZLVahbGY44ppPItKBM8P6saE2kMMMolgoYFvn7yYoBA+MJzQWjGR4JiUYeeUoLVhmQsTj2FbLMj+hrwh75bXcE+jlbMB7IqbAyjL8hIsLWPigCCfVh74a19Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) 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 (0) 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=vHb8vwA5hxnDpVrorNzrufO+TMJxDfIj0X5VV+YogdM=; b=ZYf0UaIZZVESeqn2juOGVO6dm8t9vRny8EI2THsh+XAQht+lQ2nVf5cqLkwAkiokIxl94HQiyiJMe/0Ir/wL/XoFdkjOnD9Qsk5uz6HwD9ynH1swf2iwG1KGquk7OydMl02uKUNbjYpitvxX/2FEwXAAmQ7ts2ylAs86deHxuFFpsXRBsGNYkBLdLleX4ZEjwuuiQuxvpTFCr8+DPXLe5n8/ajkQ7woNH6GGvAKHu/goPSqUvq1KQOKlIsydcvgdmHBXife2lm/C8UXQPA1qoeJCSayU/3JOMaBTDTpJZWvtdc7e/7rm+yjLMMlHfuHYT5SFvpyafbUppAD8R8/Ihg== Received: from MW4PR04CA0181.namprd04.prod.outlook.com (2603:10b6:303:86::6) by PH0PR12MB7958.namprd12.prod.outlook.com (2603:10b6:510:285::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.32; Sun, 3 Dec 2023 11:27:02 +0000 Received: from CO1PEPF000042AB.namprd03.prod.outlook.com (2603:10b6:303:86:cafe::a0) by MW4PR04CA0181.outlook.office365.com (2603:10b6:303:86::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.33 via Frontend Transport; Sun, 3 Dec 2023 11:27:01 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CO1PEPF000042AB.mail.protection.outlook.com (10.167.243.40) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.20 via Frontend Transport; Sun, 3 Dec 2023 11:27:01 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Sun, 3 Dec 2023 03:26:46 -0800 Received: from rnnvmail205.nvidia.com (10.129.68.10) 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.41; Sun, 3 Dec 2023 03:26:45 -0800 Received: from nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41 via Frontend Transport; Sun, 3 Dec 2023 03:26:44 -0800 From: Michael Baum To: CC: Matan Azrad , Raslan Darawsheh , Viacheslav Ovsiienko , Ori Kam , Suanming Mou Subject: [PATCH v1 23/23] net/mlx5: add support for modify GENEVE option header Date: Sun, 3 Dec 2023 13:25:43 +0200 Message-ID: <20231203112543.844014-24-michaelba@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231203112543.844014-1-michaelba@nvidia.com> References: <20231203112543.844014-1-michaelba@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000042AB:EE_|PH0PR12MB7958:EE_ X-MS-Office365-Filtering-Correlation-Id: 41c79ece-988e-4620-4dfc-08dbf3f2c537 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9cVtvPmPgIzbTnSFTSZ79XVRLsLbVxnB44dUDGWMl76kzSAycP6xgWZKfkXaE7mc8cEPCSWmKmhyXLKUYgTrJRvctqJA3846gItOHvfOWQiVvU0qnp4gzf1MS64BLXfaUkMs0f+tMKMx5ORif+oP3GCiW9HJCwOHlsqktY7agRu1CsIzi3zILnnE3ZxFdnNqmSr+U3k1ghyqkWpU0nLG4rRRB4AiY25TQvS9NZo9hzCAPldkxXd9AEXQJ1NTkkatvnY9d7OROL1QdfaO0g7rVkMGLqBi3nHJDnj16F8Pt7uFTic2H0vqNoYzWg+BDV3C/hXIFYWsQoUWgLQ7W4s1pbp24fTyzXhysaROEFP7AESBmpL35ul+7qKavkROutVOL4YRH+QLxImNFg7KOdR+dh9/0YkMsEYTK6ZN786ioij+etMg4sL/U0Oe+HFellvy0A5HgD2R6XRjQtTQMzwzW+rVsJ/wDHmg5KdRHW0eZar+LJxx0D5LADeyCT5RQOlbtouAdeNSAP8NbntjQIb65WPPpKSiJr+t9pKw+IuCtu5fYs8hsInvd+dgE2ExfdNztCB2NT6sCSngGPay74rJd/fB2mieqKwdogqylzzKQX/CK3z66sFGqJSPdqWP/p994J54wPhFokaFXyyl7ncs4LsC1dzOwdeMYJ3t3taoAyRjuCMp9jBLiG7ZIEcrbsd/F/FEVT++o2HRry89Q5A1CagMrD2ca0M14vhIuzxfgQq2tn/SsojL8MPa08DPsV2F X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230031)(4636009)(39860400002)(396003)(376002)(346002)(136003)(230922051799003)(1800799012)(64100799003)(451199024)(82310400011)(186009)(46966006)(40470700004)(36840700001)(70586007)(70206006)(356005)(2616005)(55016003)(336012)(6286002)(26005)(7636003)(40480700001)(4326008)(478600001)(316002)(54906003)(36860700001)(6916009)(7696005)(82740400003)(1076003)(426003)(83380400001)(47076005)(107886003)(8936002)(8676002)(86362001)(5660300002)(40460700003)(36756003)(41300700001)(2906002)(30864003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2023 11:27:01.7865 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 41c79ece-988e-4620-4dfc-08dbf3f2c537 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.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000042AB.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB7958 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 Add support for GENEVE option fields modification. Only fields configured in parser creation can be modified. Signed-off-by: Michael Baum --- doc/guides/nics/mlx5.rst | 4 + doc/guides/rel_notes/release_24_03.rst | 3 + drivers/net/mlx5/mlx5_flow.h | 21 +++++ drivers/net/mlx5/mlx5_flow_dv.c | 78 ++++++++++++++++- drivers/net/mlx5/mlx5_flow_geneve.c | 117 +++++++++++++++++++++++++ drivers/net/mlx5/mlx5_flow_hw.c | 71 ++++++++++----- 6 files changed, 268 insertions(+), 26 deletions(-) diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst index fceb5bd58b..85820d7931 100644 --- a/doc/guides/nics/mlx5.rst +++ b/doc/guides/nics/mlx5.rst @@ -582,6 +582,10 @@ Limitations - Modification of GENEVE Network ID's is not supported when configured ``FLEX_PARSER_PROFILE_ENABLE`` supports Geneve TLV options. See :ref:`mlx5_firmware_config` for more flex parser information. + - Modification of GENEVE TLV option fields is supported only for HW steering. + Only DWs configured in :ref:`parser creation ` can be modified, + 'type' and 'class' fields can be modified when ``match_on_class_mode=2``. + - Modification of GENEVE TLV option data supports one DW per action. - Encapsulation levels are not supported, can modify outermost header fields only. - Offsets cannot skip past the boundary of a field. - If the field type is ``RTE_FLOW_FIELD_MAC_TYPE`` diff --git a/doc/guides/rel_notes/release_24_03.rst b/doc/guides/rel_notes/release_24_03.rst index 8a99d6bfa4..f8d87c8a3c 100644 --- a/doc/guides/rel_notes/release_24_03.rst +++ b/doc/guides/rel_notes/release_24_03.rst @@ -60,6 +60,9 @@ New Features * Added HW steering support for ``RTE_FLOW_ITEM_TYPE_GENEVE`` flow item. * Added HW steering support for ``RTE_FLOW_ITEM_TYPE_GENEVE_OPT`` flow item. * Added HW steering support for modify field ``RTE_FLOW_FIELD_GENEVE_VNI`` flow action. + * Added HW steering support for modify field ``RTE_FLOW_FIELD_GENEVE_OPT_TYPE`` flow action. + * Added HW steering support for modify field ``RTE_FLOW_FIELD_GENEVE_OPT_CLASS`` flow action. + * Added HW steering support for modify field ``RTE_FLOW_FIELD_GENEVE_OPT_DATA`` flow action. Removed Items diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h index 808f364c6c..65fe5be2fd 100644 --- a/drivers/net/mlx5/mlx5_flow.h +++ b/drivers/net/mlx5/mlx5_flow.h @@ -1805,6 +1805,25 @@ mlx5_get_geneve_hl_data(const void *dr_ctx, uint8_t type, uint16_t class, struct mlx5_hl_data ** const hl_dws, bool *ok_bit_on_class); +/** + * Get modify field ID for single DW inside configured GENEVE TLV option. + * + * @param[in] dr_ctx + * Pointer to HW steering DR context. + * @param[in] type + * GENEVE TLV option type. + * @param[in] class + * GENEVE TLV option class. + * @param[in] dw_offset + * Offset of DW inside the option. + * + * @return + * Modify field ID on success, negative errno otherwise and rte_errno is set. + */ +int +mlx5_get_geneve_option_modify_field_id(const void *dr_ctx, uint8_t type, + uint16_t class, uint8_t dw_offset); + void * mlx5_geneve_tlv_parser_create(uint16_t port_id, const struct rte_pmd_mlx5_geneve_tlv tlv_list[], @@ -1813,6 +1832,8 @@ int mlx5_geneve_tlv_parser_destroy(void *handle); int mlx5_flow_geneve_tlv_option_validate(struct mlx5_priv *priv, const struct rte_flow_item *geneve_opt, struct rte_flow_error *error); +int mlx5_geneve_opt_modi_field_get(struct mlx5_priv *priv, + const struct rte_flow_action_modify_data *data); struct mlx5_geneve_tlv_options_mng; int mlx5_geneve_tlv_option_register(struct mlx5_priv *priv, diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c index bb3d7ddc3c..2a7ee4e91f 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -1446,6 +1446,21 @@ mlx5_mpls_modi_field_get(const struct rte_flow_action_modify_data *data) return MLX5_MODI_IN_MPLS_LABEL_0 + data->tag_index; } +static __rte_always_inline int +flow_geneve_opt_modi_field_get(struct mlx5_priv *priv, + const struct rte_flow_action_modify_data *data) +{ +#ifdef HAVE_MLX5_HWS_SUPPORT + return mlx5_geneve_opt_modi_field_get(priv, data); +#else + (void)priv; + (void)data; + DRV_LOG(ERR, "GENEVE option modification is not supported."); + rte_errno = ENOTSUP; + return -rte_errno; +#endif +} + static void mlx5_modify_flex_item(const struct rte_eth_dev *dev, const struct mlx5_flex_item *flex, @@ -1579,9 +1594,11 @@ mlx5_flow_field_id_to_modify_info const struct rte_flow_attr *attr, struct rte_flow_error *error) { struct mlx5_priv *priv = dev->data->dev_private; + enum mlx5_modification_field modi_id; uint32_t idx = 0; uint32_t off_be = 0; uint32_t length = 0; + switch ((int)data->field) { case RTE_FLOW_FIELD_START: /* not supported yet */ @@ -1892,6 +1909,48 @@ mlx5_flow_field_id_to_modify_info else info[idx].offset = off_be; break; + case RTE_FLOW_FIELD_GENEVE_OPT_TYPE: + MLX5_ASSERT(data->offset + width <= 8); + modi_id = flow_geneve_opt_modi_field_get(priv, data); + if (modi_id < 0) + return; + /* Type is on bits 16-8 of GENEVE option header (DW0). */ + off_be = 32 - (16 + data->offset + width); + info[idx] = (struct field_modify_info){4, 0, modi_id}; + if (mask) + mask[idx] = flow_modify_info_mask_32(width, off_be); + else + info[idx].offset = off_be; + break; + case RTE_FLOW_FIELD_GENEVE_OPT_CLASS: + MLX5_ASSERT(data->offset + width <= 16); + modi_id = flow_geneve_opt_modi_field_get(priv, data); + if (modi_id < 0) + return; + /* Class is on bits 31-16 of GENEVE option header (DW0). */ + off_be = 32 - (data->offset + width); + info[idx] = (struct field_modify_info){4, 0, modi_id}; + if (mask) + mask[idx] = flow_modify_info_mask_32(width, off_be); + else + info[idx].offset = off_be; + break; + case RTE_FLOW_FIELD_GENEVE_OPT_DATA: + if ((data->offset % 32) + width > 32) { + DRV_LOG(ERR, "Geneve TLV option data is per DW."); + return; + } + modi_id = flow_geneve_opt_modi_field_get(priv, data); + if (modi_id < 0) + return; + /* Use offset inside DW. */ + off_be = 32 - ((data->offset % 32) + width); + info[idx] = (struct field_modify_info){4, 0, modi_id}; + if (mask) + mask[idx] = flow_modify_info_mask_32(width, off_be); + else + info[idx].offset = off_be; + break; case RTE_FLOW_FIELD_GTP_TEID: MLX5_ASSERT(data->offset + width <= 32); off_be = 32 - (data->offset + width); @@ -1905,8 +1964,8 @@ mlx5_flow_field_id_to_modify_info case RTE_FLOW_FIELD_MPLS: MLX5_ASSERT(data->offset + width <= 32); off_be = 32 - (data->offset + width); - info[idx] = (struct field_modify_info){4, 0, - mlx5_mpls_modi_field_get(data)}; + modi_id = mlx5_mpls_modi_field_get(data); + info[idx] = (struct field_modify_info){4, 0, modi_id}; if (mask) mask[idx] = flow_modify_info_mask_32(width, off_be); else @@ -5388,6 +5447,21 @@ flow_dv_validate_action_modify_field(struct rte_eth_dev *dev, RTE_FLOW_ERROR_TYPE_ACTION, action, "modifications of the GENEVE Network" " Identifier is not supported"); + if (dst_data->field == RTE_FLOW_FIELD_GENEVE_OPT_TYPE || + src_data->field == RTE_FLOW_FIELD_GENEVE_OPT_TYPE) + return rte_flow_error_set(error, ENOTSUP, + RTE_FLOW_ERROR_TYPE_ACTION, action, + "modifications of the GENEVE option type is not supported"); + if (dst_data->field == RTE_FLOW_FIELD_GENEVE_OPT_CLASS || + src_data->field == RTE_FLOW_FIELD_GENEVE_OPT_CLASS) + return rte_flow_error_set(error, ENOTSUP, + RTE_FLOW_ERROR_TYPE_ACTION, action, + "modifications of the GENEVE option class is not supported"); + if (dst_data->field == RTE_FLOW_FIELD_GENEVE_OPT_DATA || + src_data->field == RTE_FLOW_FIELD_GENEVE_OPT_DATA) + return rte_flow_error_set(error, ENOTSUP, + RTE_FLOW_ERROR_TYPE_ACTION, action, + "modifications of the GENEVE option data is not supported"); if (dst_data->field == RTE_FLOW_FIELD_MPLS || src_data->field == RTE_FLOW_FIELD_MPLS) return rte_flow_error_set(error, ENOTSUP, diff --git a/drivers/net/mlx5/mlx5_flow_geneve.c b/drivers/net/mlx5/mlx5_flow_geneve.c index f3ee414d02..d5847a60e9 100644 --- a/drivers/net/mlx5/mlx5_flow_geneve.c +++ b/drivers/net/mlx5/mlx5_flow_geneve.c @@ -254,6 +254,123 @@ mlx5_geneve_tlv_options_unregister(struct mlx5_priv *priv, mng->nb_options = 0; } +/** + * Get single DW resource from given option. + * + * @param option + * Pointer to single GENEVE TLV option. + * @param offset + * Offset of DW related to option start. + * + * @return + * DW resource on success, NULL otherwise and rte_errno is set. + */ +static struct mlx5_geneve_tlv_resource * +mlx5_geneve_tlv_option_get_resource_by_offset(struct mlx5_geneve_tlv_option *option, + uint8_t offset) +{ + uint8_t i; + + for (i = 0; option->resources[i].obj != NULL; ++i) { + if (option->resources[i].offset < offset) + continue; + if (option->resources[i].offset == offset) + return &option->resources[i]; + break; + } + DRV_LOG(ERR, "The DW in offset %u wasn't configured.", offset); + rte_errno = EINVAL; + return NULL; +} + +int +mlx5_get_geneve_option_modify_field_id(const void *dr_ctx, uint8_t type, + uint16_t class, uint8_t dw_offset) +{ + uint16_t port_id; + + MLX5_ETH_FOREACH_DEV(port_id, NULL) { + struct mlx5_priv *priv; + struct mlx5_geneve_tlv_option *option; + struct mlx5_geneve_tlv_resource *resource; + + priv = rte_eth_devices[port_id].data->dev_private; + if (priv->dr_ctx != dr_ctx) + continue; + /* Find specific option inside list. */ + option = mlx5_geneve_tlv_option_get(priv, type, class); + if (option == NULL) + return -rte_errno; + /* Find specific FW object inside option resources. */ + resource = mlx5_geneve_tlv_option_get_resource_by_offset(option, + dw_offset); + if (resource == NULL) + return -rte_errno; + return resource->modify_field; + } + DRV_LOG(ERR, "DR CTX %p doesn't belong to any DPDK port.", dr_ctx); + rte_errno = EINVAL; + return -rte_errno; +} + +/** + * Get modify field ID for single DW inside configured GENEVE TLV option. + * + * @param[in] priv + * Pointer to port's private data. + * @param[in] data + * Pointer to modify field data structure. + * + * @return + * Modify field ID on success, negative errno otherwise and rte_errno is set. + */ +int +mlx5_geneve_opt_modi_field_get(struct mlx5_priv *priv, + const struct rte_flow_action_modify_data *data) +{ + uint16_t class = data->class_id; + uint8_t type = data->type; + struct mlx5_geneve_tlv_option *option; + struct mlx5_geneve_tlv_resource *resource; + uint8_t offset; + + option = mlx5_geneve_tlv_option_get(priv, type, class); + if (option == NULL) + return -rte_errno; + switch (data->field) { + case RTE_FLOW_FIELD_GENEVE_OPT_TYPE: + case RTE_FLOW_FIELD_GENEVE_OPT_CLASS: + if (!option->match_data[0].dw_mask) { + DRV_LOG(ERR, "DW0 isn't configured"); + rte_errno = EINVAL; + return -rte_errno; + } + resource = &option->resources[0]; + MLX5_ASSERT(resource->offset == 0); + break; + case RTE_FLOW_FIELD_GENEVE_OPT_DATA: + /* + * Convert offset twice: + * - First conversion from bit offset to DW offset. + * - Second conversion is to be related to data start instead + * of option start. + */ + offset = (data->offset >> 5) + 1; + resource = mlx5_geneve_tlv_option_get_resource_by_offset(option, + offset); + break; + default: + DRV_LOG(ERR, + "Field ID %u doesn't describe GENEVE option header.", + data->field); + rte_errno = EINVAL; + return -rte_errno; + } + if (resource == NULL) + return -rte_errno; + return resource->modify_field; +} + /** * Create single GENEVE TLV option sample. * diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c index 22ac4e0a7c..692bbe063e 100644 --- a/drivers/net/mlx5/mlx5_flow_hw.c +++ b/drivers/net/mlx5/mlx5_flow_hw.c @@ -1254,10 +1254,12 @@ flow_hw_modify_field_compile(struct rte_eth_dev *dev, else value = rte_cpu_to_be_32(value); item.spec = &value; - } else if (conf->dst.field == RTE_FLOW_FIELD_GTP_PSC_QFI) { + } else if (conf->dst.field == RTE_FLOW_FIELD_GTP_PSC_QFI || + conf->dst.field == RTE_FLOW_FIELD_GENEVE_OPT_TYPE) { /* - * QFI is passed as an uint8_t integer, but it is accessed through - * a 2nd least significant byte of a 32-bit field in modify header command. + * Both QFI and Geneve option type are passed as an uint8_t integer, + * but it is accessed through a 2nd least significant byte of a 32-bit + * field in modify header command. */ value = *(const uint8_t *)item.spec; value = rte_cpu_to_be_32(value << 8); @@ -2825,12 +2827,14 @@ flow_hw_modify_field_construct(struct mlx5_hw_q_job *job, *value_p = rte_cpu_to_be_32(*value_p << 16); else *value_p = rte_cpu_to_be_32(*value_p); - } else if (mhdr_action->dst.field == RTE_FLOW_FIELD_GTP_PSC_QFI) { + } else if (mhdr_action->dst.field == RTE_FLOW_FIELD_GTP_PSC_QFI || + mhdr_action->dst.field == RTE_FLOW_FIELD_GENEVE_OPT_TYPE) { uint32_t tmp; /* - * QFI is passed as an uint8_t integer, but it is accessed through - * a 2nd least significant byte of a 32-bit field in modify header command. + * Both QFI and Geneve option type are passed as an uint8_t integer, + * but it is accessed through a 2nd least significant byte of a 32-bit + * field in modify header command. */ tmp = values[0]; value_p = (unaligned_uint32_t *)values; @@ -4944,6 +4948,14 @@ flow_hw_modify_field_is_used(const struct rte_flow_action_modify_field *action, return action->src.field == field || action->dst.field == field; } +static bool +flow_hw_modify_field_is_geneve_opt(enum rte_flow_field_id field) +{ + return field == RTE_FLOW_FIELD_GENEVE_OPT_TYPE || + field == RTE_FLOW_FIELD_GENEVE_OPT_CLASS || + field == RTE_FLOW_FIELD_GENEVE_OPT_DATA; +} + static int flow_hw_validate_action_modify_field(struct rte_eth_dev *dev, const struct rte_flow_action *action, @@ -4977,15 +4989,17 @@ flow_hw_validate_action_modify_field(struct rte_eth_dev *dev, ret = flow_validate_modify_field_level(&action_conf->dst, error); if (ret) return ret; - if (action_conf->dst.tag_index && - !flow_modify_field_support_tag_array(action_conf->dst.field)) - return rte_flow_error_set(error, EINVAL, - RTE_FLOW_ERROR_TYPE_ACTION, action, - "destination tag index is not supported"); - if (action_conf->dst.class_id) - return rte_flow_error_set(error, EINVAL, - RTE_FLOW_ERROR_TYPE_ACTION, action, - "destination class id is not supported"); + if (!flow_hw_modify_field_is_geneve_opt(action_conf->dst.field)) { + if (action_conf->dst.tag_index && + !flow_modify_field_support_tag_array(action_conf->dst.field)) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ACTION, action, + "destination tag index is not supported"); + if (action_conf->dst.class_id) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ACTION, action, + "destination class id is not supported"); + } if (mask_conf->dst.level != UINT8_MAX) return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION, action, @@ -5000,15 +5014,17 @@ flow_hw_validate_action_modify_field(struct rte_eth_dev *dev, "destination field mask and template are not equal"); if (action_conf->src.field != RTE_FLOW_FIELD_POINTER && action_conf->src.field != RTE_FLOW_FIELD_VALUE) { - if (action_conf->src.tag_index && - !flow_modify_field_support_tag_array(action_conf->src.field)) - return rte_flow_error_set(error, EINVAL, - RTE_FLOW_ERROR_TYPE_ACTION, action, - "source tag index is not supported"); - if (action_conf->src.class_id) - return rte_flow_error_set(error, EINVAL, - RTE_FLOW_ERROR_TYPE_ACTION, action, - "source class id is not supported"); + if (!flow_hw_modify_field_is_geneve_opt(action_conf->src.field)) { + if (action_conf->src.tag_index && + !flow_modify_field_support_tag_array(action_conf->src.field)) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ACTION, action, + "source tag index is not supported"); + if (action_conf->src.class_id) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ACTION, action, + "source class id is not supported"); + } if (mask_conf->src.level != UINT8_MAX) return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION, action, @@ -5059,6 +5075,13 @@ flow_hw_validate_action_modify_field(struct rte_eth_dev *dev, return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION, action, "modifying Geneve VNI is not supported when GENEVE opt is supported"); + if (priv->tlv_options == NULL && + (flow_hw_modify_field_is_used(action_conf, RTE_FLOW_FIELD_GENEVE_OPT_TYPE) || + flow_hw_modify_field_is_used(action_conf, RTE_FLOW_FIELD_GENEVE_OPT_CLASS) || + flow_hw_modify_field_is_used(action_conf, RTE_FLOW_FIELD_GENEVE_OPT_DATA))) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ACTION, action, + "modifying Geneve TLV option is supported only after parser configuration"); /* Due to HW bug, tunnel MPLS header is read only. */ if (action_conf->dst.field == RTE_FLOW_FIELD_MPLS) return rte_flow_error_set(error, EINVAL,