From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 27C6EA054A; Fri, 23 Sep 2022 16:46:41 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0AFEB42C1D; Fri, 23 Sep 2022 16:44:42 +0200 (CEST) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2064.outbound.protection.outlook.com [40.107.92.64]) by mails.dpdk.org (Postfix) with ESMTP id 0D6E142BB3 for ; Fri, 23 Sep 2022 16:44:41 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AN1s3roCSfRmR1TKnMF8rQutG63v4F/3DR0Q7X2pTjU7NzM8JyKu076cPaXImNzql+aYbaa47okzG4Vbr/XcjoxRmpO7FL1Sl092MCh4RV4AaFhDju7+7M5hLjF4gqjYzRU5fvG8baZwGewiapawc2SIEwGi7P2Ju3WJ4M1TQcCp3sQRK8/ggSaQrD7YefvbxslqbNY+o/rw2w9OZrKLZraz3o63L27mYyuXbXcOrJocQdsqlKEVCPh4xEi17bzRGvgETPyFrzcgGJO6r7vS3wASSEYB0HRYrfNC6/ExX1LTnnJQlQIGQHqrORNohcYUtULo17fGkDue/86Y60H/nw== 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=2NQylTZzjHyk4qvmD4//J49OJhUwS3IFWRU+SgRibF0=; b=I7gOOxn3xHsvYLkQdajHVwwmdIRGxuxdq0WsnrlFBy/kmTn4Xkxbx6G7Wlq+tXSaU/Mc5iQ43gh+u3hbzcrS8pPHEROpJHxoKUBXZQaD9NH696+92tyRRbWZHezkdWzxmXalXv0+D6ITjrSsspILYzzBksZu7cBrRTLCQkq3OeSLwNqf2iljNbxZxIKdYStCRDXZWkekrni2FUcFYonc0kxtX8YdA7VbsfLh4SaDkDTbcLgcx3gtiNf73BBeMczn5tVCqyIi0a2TNBle+wWThJE/Txv8eINR5QGxYusu20QC/t3QVHZiSqWeLq+d/FmB2/+sdvELWK/leTNE53YluQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=dpdk.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2NQylTZzjHyk4qvmD4//J49OJhUwS3IFWRU+SgRibF0=; b=OeJI7dYDFaJ9oEnSvp1vwRc2GqCpbtQRxbmWQPkjvYSXt22KpoYzAAdSm8nBq81CE+1EmwrzrMixSEnvVzm+xAohbLI7Dzm5jkslmzyLM2lWRE9NOue9O/R3Tjhlieb6WaLdpq8u85IgIw7Bu7r5QuhCSqDh1ZReVKEYJLMkfvbaP0CHCi/PDw2EO6F3mcY9ttvfPTHrXDEUdO+BFpSrVhJAP4sAgiSGSz/Ddqxl+L0JfrZyJu/PkPHGbZpvj+WUwFe+maS/aFs5GZsHPeXIHWImcPUWNqXww7ppFzlE2YgiIv+E6ERWXlN+hm3TvTtqNhrDEykeMXutNWa8sOcLVA== Received: from MW4PR03CA0239.namprd03.prod.outlook.com (2603:10b6:303:b9::34) by BY5PR12MB4968.namprd12.prod.outlook.com (2603:10b6:a03:1d2::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.20; Fri, 23 Sep 2022 14:44:39 +0000 Received: from CO1NAM11FT026.eop-nam11.prod.protection.outlook.com (2603:10b6:303:b9:cafe::bb) by MW4PR03CA0239.outlook.office365.com (2603:10b6:303:b9::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.20 via Frontend Transport; Fri, 23 Sep 2022 14:44: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 CO1NAM11FT026.mail.protection.outlook.com (10.13.175.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.14 via Frontend Transport; Fri, 23 Sep 2022 14:44:38 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.26; Fri, 23 Sep 2022 07:44:21 -0700 Received: from nvidia.com (10.126.231.35) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.29; Fri, 23 Sep 2022 07:44:19 -0700 From: Suanming Mou To: Matan Azrad , Viacheslav Ovsiienko CC: , Dariusz Sosnowski Subject: [PATCH 18/27] net/mlx5: add meta item support in egress Date: Fri, 23 Sep 2022 17:43:25 +0300 Message-ID: <20220923144334.27736-19-suanmingm@nvidia.com> X-Mailer: git-send-email 2.18.1 In-Reply-To: <20220923144334.27736-1-suanmingm@nvidia.com> References: <20220923144334.27736-1-suanmingm@nvidia.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.126.231.35] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1NAM11FT026:EE_|BY5PR12MB4968:EE_ X-MS-Office365-Filtering-Correlation-Id: c096da16-689d-4684-dd68-08da9d722473 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: jkItnJbsPZG1DXsSeBTacNKbXB5bVQzE8GfLXyAsAJ99F/2MU2bVByZXn9xEAsl104Dcfl5GmFKMkYmEFTaQpjNfm5bHx5gMLPQFDTk0pBDV2xwlmDmI2csI2SgpANzXMuUdl4QsloKNCuH3/mypsOSTSpXIBn15h/TkF3PIlZ9NXPNT94bqB1Imrh0qYkaLINy4OkvJadN5JWAo3SkK+F2kBFipWf4HPfUNb9IlDw9iCU7RkYuJ48sNXa46QnXU2Z2KmuR6t2Rofuie26KpK1GihbPLoFZZsFSI60S4SmRP8gdKV2ZIGUqg8p0UdNW55OJ9UJ+1dyb/J1136eILeQw+SvmeI63Df+MI96JWI/mPrKjIU81GrKMNBms0Y+8p7aKcUPzokjqEXM9crXvdEl1WOyNIzZhZUSUppGT42MYPmhl4tmpeasEMkviWmLtF3r2ppUcGfSdcglD9PoXkFPpjqOAbH1DUlU+0feC/b71++gA8Ku+EAEIq/vsm8czEDTVIIAFCVyJ7fFGRPYorKNYsP56zQWlvr4RHVAACpCejQEN9tdJiYccLdXUQB0Ru2j9DHC/Ywj5SoEMGU4vTJj+gpBw+Jg/2YPalmClk/j9VNIswrLm2twuJkoKvp3njzYbVIhNKH0S084tLJmVp7WLyt9r4n5918swIr7xGNzIz1MGBe5dqFvgwiKCE0qMoH1Uzm/ndhAiQiZIPMh62zQlGbtyg4H6mU1USZIlisqdQm8y59fEuVu/m0tBNPsP+9KStbmW+htPzSVNEvIQsWX3Bd8j+86WEPJr497vf3wI= X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230022)(4636009)(396003)(136003)(39860400002)(346002)(376002)(451199015)(40470700004)(36840700001)(46966006)(186003)(356005)(82310400005)(6636002)(336012)(16526019)(7636003)(54906003)(110136005)(1076003)(47076005)(426003)(316002)(82740400003)(5660300002)(7696005)(40460700003)(4326008)(8676002)(107886003)(6666004)(478600001)(86362001)(55016003)(8936002)(36756003)(2616005)(26005)(2906002)(70206006)(70586007)(6286002)(40480700001)(83380400001)(41300700001)(36860700001)(21314003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Sep 2022 14:44:38.8189 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c096da16-689d-4684-dd68-08da9d722473 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT026.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4968 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: Dariusz Sosnowski This patch adds support for META item in HW Steering mode, in NIC TX domain. Due to API limitations, usage of META item requires that all mlx5 ports use the same configuration of dv_esw_en and dv_xmeta_en device arguments in order to consistently translate META item to appropriate register. If mlx5 ports use different configurations, then configuration of the first probed device is used. Signed-off-by: Dariusz Sosnowski --- drivers/net/mlx5/linux/mlx5_os.c | 1 + drivers/net/mlx5/mlx5.c | 4 ++- drivers/net/mlx5/mlx5_flow.h | 22 +++++++++++- drivers/net/mlx5/mlx5_flow_hw.c | 61 ++++++++++++++++++++++++++++++-- 4 files changed, 84 insertions(+), 4 deletions(-) diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c index 41940d7ce7..54e7164663 100644 --- a/drivers/net/mlx5/linux/mlx5_os.c +++ b/drivers/net/mlx5/linux/mlx5_os.c @@ -1563,6 +1563,7 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, } /* Only HWS requires this information. */ flow_hw_init_tags_set(eth_dev); + flow_hw_init_flow_metadata_config(eth_dev); if (priv->sh->config.dv_esw_en && flow_hw_create_vport_action(eth_dev)) { DRV_LOG(ERR, "port %u failed to create vport action", diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index 314176022a..87cbcd473d 100644 --- a/drivers/net/mlx5/mlx5.c +++ b/drivers/net/mlx5/mlx5.c @@ -1970,8 +1970,10 @@ mlx5_dev_close(struct rte_eth_dev *dev) flow_hw_resource_release(dev); #endif flow_hw_clear_port_info(dev); - if (priv->sh->config.dv_flow_en == 2) + if (priv->sh->config.dv_flow_en == 2) { + flow_hw_clear_flow_metadata_config(); flow_hw_clear_tags_set(dev); + } if (priv->rxq_privs != NULL) { /* XXX race condition if mlx5_rx_burst() is still running. */ rte_delay_us_sleep(1000); diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h index a39dacc60a..dae2fe6b37 100644 --- a/drivers/net/mlx5/mlx5_flow.h +++ b/drivers/net/mlx5/mlx5_flow.h @@ -1485,6 +1485,13 @@ flow_hw_get_wire_port(struct ibv_context *ibctx) return NULL; } +extern uint32_t mlx5_flow_hw_flow_metadata_config_refcnt; +extern uint8_t mlx5_flow_hw_flow_metadata_esw_en; +extern uint8_t mlx5_flow_hw_flow_metadata_xmeta_en; + +void flow_hw_init_flow_metadata_config(struct rte_eth_dev *dev); +void flow_hw_clear_flow_metadata_config(void); + /* * Convert metadata or tag to the actual register. * META: Can only be used to match in the FDB in this stage, fixed C_1. @@ -1496,7 +1503,20 @@ flow_hw_get_reg_id(enum rte_flow_item_type type, uint32_t id) { switch (type) { case RTE_FLOW_ITEM_TYPE_META: - return REG_C_1; + if (mlx5_flow_hw_flow_metadata_esw_en && + mlx5_flow_hw_flow_metadata_xmeta_en == MLX5_XMETA_MODE_META32_HWS) { + return REG_C_1; + } + /* + * On root table - PMD allows only egress META matching, thus + * REG_A matching is sufficient. + * + * On non-root tables - REG_A corresponds to general_purpose_lookup_field, + * which translates to REG_A in NIC TX and to REG_B in NIC RX. + * However, current FW does not implement REG_B case right now, so + * REG_B case should be rejected on pattern template validation. + */ + return REG_A; case RTE_FLOW_ITEM_TYPE_TAG: MLX5_ASSERT(id < MLX5_FLOW_HW_TAGS_MAX); return mlx5_flow_hw_avl_tags[id]; diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c index dfbc434d54..55a14d39eb 100644 --- a/drivers/net/mlx5/mlx5_flow_hw.c +++ b/drivers/net/mlx5/mlx5_flow_hw.c @@ -3332,7 +3332,6 @@ flow_hw_pattern_validate(struct rte_eth_dev *dev, { const struct rte_flow_item_tag *tag = (const struct rte_flow_item_tag *)items[i].spec; - struct mlx5_priv *priv = dev->data->dev_private; uint8_t regcs = (uint8_t)priv->sh->cdev->config.hca_attr.set_reg_c; if (!((1 << (tag->index - REG_C_0)) & regcs)) @@ -3349,6 +3348,17 @@ flow_hw_pattern_validate(struct rte_eth_dev *dev, "represented port item cannot be used" " when transfer attribute is set"); break; + case RTE_FLOW_ITEM_TYPE_META: + if (!priv->sh->config.dv_esw_en || + priv->sh->config.dv_xmeta_en != MLX5_XMETA_MODE_META32_HWS) { + if (attr->ingress) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ITEM, NULL, + "META item is not supported" + " on current FW with ingress" + " attribute"); + } + break; case RTE_FLOW_ITEM_TYPE_VOID: case RTE_FLOW_ITEM_TYPE_ETH: case RTE_FLOW_ITEM_TYPE_VLAN: @@ -3360,7 +3370,6 @@ flow_hw_pattern_validate(struct rte_eth_dev *dev, case RTE_FLOW_ITEM_TYPE_GTP_PSC: case RTE_FLOW_ITEM_TYPE_VXLAN: case MLX5_RTE_FLOW_ITEM_TYPE_TX_QUEUE: - case RTE_FLOW_ITEM_TYPE_META: case RTE_FLOW_ITEM_TYPE_GRE: case RTE_FLOW_ITEM_TYPE_GRE_KEY: case RTE_FLOW_ITEM_TYPE_GRE_OPTION: @@ -4938,6 +4947,54 @@ void flow_hw_clear_tags_set(struct rte_eth_dev *dev) sizeof(enum modify_reg) * MLX5_FLOW_HW_TAGS_MAX); } +uint32_t mlx5_flow_hw_flow_metadata_config_refcnt; +uint8_t mlx5_flow_hw_flow_metadata_esw_en; +uint8_t mlx5_flow_hw_flow_metadata_xmeta_en; + +/** + * Initializes static configuration of META flow items. + * + * As a temporary workaround, META flow item is translated to a register, + * based on statically saved dv_esw_en and dv_xmeta_en device arguments. + * It is a workaround for flow_hw_get_reg_id() where port specific information + * is not available at runtime. + * + * Values of dv_esw_en and dv_xmeta_en device arguments are taken from the first opened port. + * This means that each mlx5 port will use the same configuration for translation + * of META flow items. + * + * @param[in] dev + * Pointer to Ethernet device. + */ +void +flow_hw_init_flow_metadata_config(struct rte_eth_dev *dev) +{ + uint32_t refcnt; + + refcnt = __atomic_fetch_add(&mlx5_flow_hw_flow_metadata_config_refcnt, 1, + __ATOMIC_RELAXED); + if (refcnt > 0) + return; + mlx5_flow_hw_flow_metadata_esw_en = MLX5_SH(dev)->config.dv_esw_en; + mlx5_flow_hw_flow_metadata_xmeta_en = MLX5_SH(dev)->config.dv_xmeta_en; +} + +/** + * Clears statically stored configuration related to META flow items. + */ +void +flow_hw_clear_flow_metadata_config(void) +{ + uint32_t refcnt; + + refcnt = __atomic_sub_fetch(&mlx5_flow_hw_flow_metadata_config_refcnt, 1, + __ATOMIC_RELAXED); + if (refcnt > 0) + return; + mlx5_flow_hw_flow_metadata_esw_en = 0; + mlx5_flow_hw_flow_metadata_xmeta_en = 0; +} + /** * Create shared action. * -- 2.25.1