Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/103525/?format=api
https://patches.dpdk.org/api/patches/103525/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/patch/20211102170135.959380-6-dkozlyuk@nvidia.com/", "project": { "id": 1, "url": "https://patches.dpdk.org/api/projects/1/?format=api", "name": "DPDK", "link_name": "dpdk", "list_id": "dev.dpdk.org", "list_email": "dev@dpdk.org", "web_url": "http://core.dpdk.org", "scm_url": "git://dpdk.org/dpdk", "webscm_url": "http://git.dpdk.org/dpdk", "list_archive_url": "https://inbox.dpdk.org/dev", "list_archive_url_format": "https://inbox.dpdk.org/dev/{}", "commit_url_format": "" }, "msgid": "<20211102170135.959380-6-dkozlyuk@nvidia.com>", "list_archive_url": "https://inbox.dpdk.org/dev/20211102170135.959380-6-dkozlyuk@nvidia.com", "date": "2021-11-02T17:01:34", "name": "[v6,5/6] net/mlx5: create drop queue using DevX", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": true, "hash": "af704afe17dfb1799ddced8a054bb43b77576fa3", "submitter": { "id": 2367, "url": "https://patches.dpdk.org/api/people/2367/?format=api", "name": "Dmitry Kozlyuk", "email": "dkozlyuk@oss.nvidia.com" }, "delegate": { "id": 319, "url": "https://patches.dpdk.org/api/users/319/?format=api", "username": "fyigit", "first_name": "Ferruh", "last_name": "Yigit", "email": "ferruh.yigit@amd.com" }, "mbox": "https://patches.dpdk.org/project/dpdk/patch/20211102170135.959380-6-dkozlyuk@nvidia.com/mbox/", "series": [ { "id": 20232, "url": "https://patches.dpdk.org/api/series/20232/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=20232", "date": "2021-11-02T17:01:29", "name": "Flow entites behavior on port restart", "version": 6, "mbox": "https://patches.dpdk.org/series/20232/mbox/" } ], "comments": "https://patches.dpdk.org/api/patches/103525/comments/", "check": "warning", "checks": "https://patches.dpdk.org/api/patches/103525/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dev-bounces@dpdk.org>", "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])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 32E35A0C4E;\n\tTue, 2 Nov 2021 18:02:42 +0100 (CET)", "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id DB1964114B;\n\tTue, 2 Nov 2021 18:02:13 +0100 (CET)", "from AZHDRRW-EX02.NVIDIA.COM (azhdrrw-ex02.nvidia.com\n [20.64.145.131])\n by mails.dpdk.org (Postfix) with ESMTP id 0520B41124;\n Tue, 2 Nov 2021 18:02:12 +0100 (CET)", "from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.169)\n by mxs.oss.nvidia.com (10.13.234.37) with Microsoft SMTP Server\n (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.2.858.15; Tue, 2 Nov 2021 10:02:11 -0700", "from BN6PR2001CA0036.namprd20.prod.outlook.com\n (2603:10b6:405:16::22) by CH0PR12MB5235.namprd12.prod.outlook.com\n (2603:10b6:610:d2::5) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4649.15; Tue, 2 Nov\n 2021 17:02:08 +0000", "from BN8NAM11FT044.eop-nam11.prod.protection.outlook.com\n (2603:10b6:405:16:cafe::f3) by BN6PR2001CA0036.outlook.office365.com\n (2603:10b6:405:16::22) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4649.15 via Frontend\n Transport; Tue, 2 Nov 2021 17:02:08 +0000", "from mail.nvidia.com (216.228.112.34) by\n BN8NAM11FT044.mail.protection.outlook.com (10.13.177.219) with Microsoft SMTP\n Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id\n 15.20.4649.14 via Frontend Transport; Tue, 2 Nov 2021 17:02:08 +0000", "from nvidia.com (172.20.187.5) by HQMAIL107.nvidia.com\n (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.18; Tue, 2 Nov\n 2021 17:02:04 +0000" ], "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=fMCPzqj+dyW2PFZ7TmW8mjJeCyb2525ZzJ8/ZDQ3g/M+pX1gSe3XA37qaaKtoiFLmN6xM6poBu6PPjLUE5duJw+JsE1WlrqbK9AByoLX8h4WSLhkrimkTC3idsAFayAiF5xtWwRh76VeF7P+0wEE2ZI+ItfM9mUETq1QIz/ZUVCdAlI6Chn08Yr7H3Hn8uRf9FsKPMIuOfvByud73Bs31vEXjknhCqncyY17404EmCBKV8aR7AMHO3AboT3UzTEqTm+UhPrMvHp19m/Y7r4i0ItwBnfw/qZqC25ykExpVUbIyYrsNRfcIv30198jVM9+QtEoNPTPbyKfvrfXTUK7WA==", "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n 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;\n bh=Sh+VIihifOl+K1wn0m3vejK/+na2y2lgW0ODIIVLl9A=;\n b=bXrAfStvhM2QkKfdavnL4gCBzRABIh8ZQ3UqqcHqwvLAPrP6hyBTUUb+OpDTXb0cAzht4sDJB2hwV1C0xxLV0iMgcUZ/wkEBMutaaqleHZ12XUYiuv2f6YwRJl2+eUKdn5KB3b+ysBtq8D0m1pRvXLx/RlsvPyDaTZvUWAvrBdKByhD4MAf+3p6wcUNfy4c6NxNMyg+z4uiAxJYe3UOVzRiNTv4N1VcSzuy+QAoRP3cZZ6N9fMtvZbRAeuDv7aLnBY07v8b3MDBEKi6hr8MHJ/wE+q0I73ohd4RhBWg/53ZmT9z0zKvYJUkul3FlPcL6V15TcpuYiHHwsbCoDtDxTg==", "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 216.228.112.34) smtp.rcpttodomain=dpdk.org smtp.mailfrom=nvidia.com;\n dmarc=pass (p=quarantine sp=quarantine pct=100) action=none\n header.from=nvidia.com; dkim=none (message not signed); arc=none", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com;\n s=selector2;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=Sh+VIihifOl+K1wn0m3vejK/+na2y2lgW0ODIIVLl9A=;\n b=DozJe5DkQfZ/32HQx9HoeVkyuFH6asu5j7cHywn42pnWpU8bXadkVrq6RvsulEa1TrZpK0/XQkyIJR+qaznXV8a9Ag856Z43V28JLCso27UDjGusLN+gbUVnxuXXRN0iocOhY4BKagzT66P6/5rxvZqABP5Uu9stMP0lQQjRtGH6/WMgdETNKxBZkAZu3u6aTxPP7euxdzqpAxsrhaoWPD/8Tplv4aa1cz0mia7q7+XMqe+XeF+aqxYmZp4/jT9E99KYpj1uL4f/N2be2JtY6799LbJ3DiRQgbFFQZX55HA8JvYhwUw5e3gAr9s3jTZHrxq7ruRMJfqZxex41OHvZA==", "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 216.228.112.34)\n smtp.mailfrom=nvidia.com; dpdk.org; dkim=none (message not signed)\n header.d=none;dpdk.org; dmarc=pass action=none header.from=nvidia.com;", "Received-SPF": "Pass (protection.outlook.com: domain of nvidia.com designates\n 216.228.112.34 as permitted sender) receiver=protection.outlook.com;\n client-ip=216.228.112.34; helo=mail.nvidia.com;", "From": "Dmitry Kozlyuk <dkozlyuk@oss.nvidia.com>", "To": "<dev@dpdk.org>", "CC": "<stable@dpdk.org>, Matan Azrad <matan@oss.nvidia.com>, Viacheslav\n Ovsiienko <viacheslavo@oss.nvidia.com>", "Date": "Tue, 2 Nov 2021 19:01:34 +0200", "Message-ID": "<20211102170135.959380-6-dkozlyuk@nvidia.com>", "X-Mailer": "git-send-email 2.25.1", "In-Reply-To": "<20211102170135.959380-1-dkozlyuk@nvidia.com>", "References": "<20211102135415.944050-1-dkozlyuk@nvidia.com>\n <20211102170135.959380-1-dkozlyuk@nvidia.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Content-Type": "text/plain", "X-Originating-IP": "[172.20.187.5]", "X-ClientProxiedBy": "HQMAIL105.nvidia.com (172.20.187.12) To\n HQMAIL107.nvidia.com (172.20.187.13)", "X-EOPAttributedMessage": "0", "X-MS-PublicTrafficType": "Email", "X-MS-Office365-Filtering-Correlation-Id": "1fa3c76b-2e85-4e19-1019-08d99e228173", "X-MS-TrafficTypeDiagnostic": "CH0PR12MB5235:", "X-Microsoft-Antispam-PRVS": "\n <CH0PR12MB52353EA32CD2F8E849D440A7B98B9@CH0PR12MB5235.namprd12.prod.outlook.com>", "X-MS-Oob-TLC-OOBClassifiers": "OLM:3276;", "X-MS-Exchange-SenderADCheck": "1", "X-MS-Exchange-AntiSpam-Relay": "0", "X-Microsoft-Antispam": "BCL:0;", "X-Microsoft-Antispam-Message-Info": "\n rkdi1kPe0Z5vd1b4UCLwL8M418VeC6giAj31ujs44QUdJNxEvSNHeENyfZ5FwyKooDQDbZSuZpd47u04BZxfQhrmiLrhImRnuhbxNkVjxXx0i0LI/q5c8IW3tQSHCg3GccRHJXFtW/IFxDd2BreBYdYBUEq1JAoJAT9q238EClN6HV4ZfawNnO+xtPa3Vn9UQ346U7LQVGbo5U77nUiUSagqlqy5p8uI0HNUv1+1oFYUk5ZvUoeWy83NBcHogjt8rbcAnGPTOV1E1Ntw9HUpFPnl2DJNz/UN5ZIbVWlFYxb6jRyFtvyyGz0zCpn4Cj1LY8CRBuZrcHXFH4N03vMfZLukqL55fhPpPkgE6CtqhY4D6xL6E3/4d5LABqGoaG0xGbQpUaPYck87ZLHBodtn2Tc6Zb30RmzkAgyZmEr33EI83Vk20ffZNffNfzJRGqa34542ABBYL1OMZEUwm+siEdQtrdTIwCNIm9L3pSmrWVfDyeLDOTtAfG0hOulm/sBjl/1JwXNm65hak4BEK/JRhCP26VnOt/PnaRGTJbRWIHG8mRr8JO5ZVMjQpcHyWcNACyyOuT6cX5oMAxLU3QzAnkDRhIxMouqNZ/a2wWiN7vcs7oziXoC3TiY7s6kLEQk7ljGQuZmwf6K5SU6nylWpGt1G1Wf0Bk5vxg1jEgvosfEZPlxgRi1YrwdsIsJ3wyO7lfbG297spTApFpkRb2e1Hw==", "X-Forefront-Antispam-Report": "CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1;\n SRV:;\n IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE;\n SFS:(4636009)(36840700001)(46966006)(6916009)(186003)(83380400001)(55016002)(508600001)(2906002)(16526019)(1076003)(54906003)(8676002)(7696005)(6666004)(36756003)(8936002)(2616005)(86362001)(6286002)(70206006)(4326008)(316002)(426003)(30864003)(36906005)(450100002)(336012)(7636003)(36860700001)(26005)(5660300002)(47076005)(70586007)(82310400003)(356005)(107886003);\n DIR:OUT; SFP:1101;", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "02 Nov 2021 17:02:08.5855 (UTC)", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 1fa3c76b-2e85-4e19-1019-08d99e228173", "X-MS-Exchange-CrossTenant-Id": "43083d15-7273-40c1-b7db-39efd9ccc17a", "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34];\n Helo=[mail.nvidia.com]", "X-MS-Exchange-CrossTenant-AuthSource": "\n BN8NAM11FT044.eop-nam11.prod.protection.outlook.com", "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous", "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "CH0PR12MB5235", "Subject": "[dpdk-dev] [PATCH v6 5/6] net/mlx5: create drop queue using DevX", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "DPDK patches and discussions <dev.dpdk.org>", "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://mails.dpdk.org/archives/dev/>", "List-Post": "<mailto:dev@dpdk.org>", "List-Help": "<mailto:dev-request@dpdk.org?subject=help>", "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org", "Sender": "\"dev\" <dev-bounces@dpdk.org>" }, "content": "Drop queue creation and destruction were not implemented for DevX\nflow engine and Verbs engine methods were used as a workaround.\nImplement these methods for DevX so that there is a valid queue ID\nthat can be used regardless of queue configuration via API.\n\nCc: stable@dpdk.org\n\nSigned-off-by: Dmitry Kozlyuk <dkozlyuk@nvidia.com>\nAcked-by: Matan Azrad <matan@nvidia.com>\n---\n drivers/net/mlx5/linux/mlx5_os.c | 4 -\n drivers/net/mlx5/mlx5_devx.c | 211 ++++++++++++++++++++++++++-----\n 2 files changed, 180 insertions(+), 35 deletions(-)", "diff": "diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c\nindex f31f1e96c6..dd4fc0c716 100644\n--- a/drivers/net/mlx5/linux/mlx5_os.c\n+++ b/drivers/net/mlx5/linux/mlx5_os.c\n@@ -1690,10 +1690,6 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,\n \t}\n \tif (sh->devx && config->dv_flow_en && config->dest_tir) {\n \t\tpriv->obj_ops = devx_obj_ops;\n-\t\tpriv->obj_ops.drop_action_create =\n-\t\t\t\t\t\tibv_obj_ops.drop_action_create;\n-\t\tpriv->obj_ops.drop_action_destroy =\n-\t\t\t\t\t\tibv_obj_ops.drop_action_destroy;\n \t\tmlx5_queue_counter_id_prepare(eth_dev);\n \t\tpriv->obj_ops.lb_dummy_queue_create =\n \t\t\t\t\tmlx5_rxq_ibv_obj_dummy_lb_create;\ndiff --git a/drivers/net/mlx5/mlx5_devx.c b/drivers/net/mlx5/mlx5_devx.c\nindex 7ed774e804..424f77be79 100644\n--- a/drivers/net/mlx5/mlx5_devx.c\n+++ b/drivers/net/mlx5/mlx5_devx.c\n@@ -226,18 +226,18 @@ mlx5_rx_devx_get_event(struct mlx5_rxq_obj *rxq_obj)\n *\n * @param dev\n * Pointer to Ethernet device.\n- * @param idx\n- * Queue index in DPDK Rx queue array.\n+ * @param rxq_data\n+ * RX queue data.\n *\n * @return\n * 0 on success, a negative errno value otherwise and rte_errno is set.\n */\n static int\n-mlx5_rxq_create_devx_rq_resources(struct rte_eth_dev *dev, uint16_t idx)\n+mlx5_rxq_create_devx_rq_resources(struct rte_eth_dev *dev,\n+\t\t\t\t struct mlx5_rxq_data *rxq_data)\n {\n \tstruct mlx5_priv *priv = dev->data->dev_private;\n \tstruct mlx5_common_device *cdev = priv->sh->cdev;\n-\tstruct mlx5_rxq_data *rxq_data = (*priv->rxqs)[idx];\n \tstruct mlx5_rxq_ctrl *rxq_ctrl =\n \t\tcontainer_of(rxq_data, struct mlx5_rxq_ctrl, rxq);\n \tstruct mlx5_devx_create_rq_attr rq_attr = { 0 };\n@@ -290,20 +290,20 @@ mlx5_rxq_create_devx_rq_resources(struct rte_eth_dev *dev, uint16_t idx)\n *\n * @param dev\n * Pointer to Ethernet device.\n- * @param idx\n- * Queue index in DPDK Rx queue array.\n+ * @param rxq_data\n+ * RX queue data.\n *\n * @return\n * 0 on success, a negative errno value otherwise and rte_errno is set.\n */\n static int\n-mlx5_rxq_create_devx_cq_resources(struct rte_eth_dev *dev, uint16_t idx)\n+mlx5_rxq_create_devx_cq_resources(struct rte_eth_dev *dev,\n+\t\t\t\t struct mlx5_rxq_data *rxq_data)\n {\n \tstruct mlx5_devx_cq *cq_obj = 0;\n \tstruct mlx5_devx_cq_attr cq_attr = { 0 };\n \tstruct mlx5_priv *priv = dev->data->dev_private;\n \tstruct mlx5_dev_ctx_shared *sh = priv->sh;\n-\tstruct mlx5_rxq_data *rxq_data = (*priv->rxqs)[idx];\n \tstruct mlx5_rxq_ctrl *rxq_ctrl =\n \t\tcontainer_of(rxq_data, struct mlx5_rxq_ctrl, rxq);\n \tunsigned int cqe_n = mlx5_rxq_cqe_num(rxq_data);\n@@ -498,13 +498,13 @@ mlx5_rxq_devx_obj_new(struct rte_eth_dev *dev, uint16_t idx)\n \t\ttmpl->fd = mlx5_os_get_devx_channel_fd(tmpl->devx_channel);\n \t}\n \t/* Create CQ using DevX API. */\n-\tret = mlx5_rxq_create_devx_cq_resources(dev, idx);\n+\tret = mlx5_rxq_create_devx_cq_resources(dev, rxq_data);\n \tif (ret) {\n \t\tDRV_LOG(ERR, \"Failed to create CQ.\");\n \t\tgoto error;\n \t}\n \t/* Create RQ using DevX API. */\n-\tret = mlx5_rxq_create_devx_rq_resources(dev, idx);\n+\tret = mlx5_rxq_create_devx_rq_resources(dev, rxq_data);\n \tif (ret) {\n \t\tDRV_LOG(ERR, \"Port %u Rx queue %u RQ creation failure.\",\n \t\t\tdev->data->port_id, idx);\n@@ -537,6 +537,11 @@ mlx5_rxq_devx_obj_new(struct rte_eth_dev *dev, uint16_t idx)\n * Pointer to Ethernet device.\n * @param log_n\n * Log of number of queues in the array.\n+ * @param queues\n+ * List of RX queue indices or NULL, in which case\n+ * the attribute will be filled by drop queue ID.\n+ * @param queues_n\n+ * Size of @p queues array or 0 if it is NULL.\n * @param ind_tbl\n * DevX indirection table object.\n *\n@@ -564,6 +569,11 @@ mlx5_devx_ind_table_create_rqt_attr(struct rte_eth_dev *dev,\n \t}\n \trqt_attr->rqt_max_size = priv->config.ind_table_max_size;\n \trqt_attr->rqt_actual_size = rqt_n;\n+\tif (queues == NULL) {\n+\t\tfor (i = 0; i < rqt_n; i++)\n+\t\t\trqt_attr->rq_list[i] = priv->drop_queue.rxq->rq->id;\n+\t\treturn rqt_attr;\n+\t}\n \tfor (i = 0; i != queues_n; ++i) {\n \t\tstruct mlx5_rxq_data *rxq = (*priv->rxqs)[queues[i]];\n \t\tstruct mlx5_rxq_ctrl *rxq_ctrl =\n@@ -596,11 +606,12 @@ mlx5_devx_ind_table_new(struct rte_eth_dev *dev, const unsigned int log_n,\n {\n \tstruct mlx5_priv *priv = dev->data->dev_private;\n \tstruct mlx5_devx_rqt_attr *rqt_attr = NULL;\n+\tconst uint16_t *queues = dev->data->dev_started ? ind_tbl->queues :\n+\t\t\t\t\t\t\t NULL;\n \n \tMLX5_ASSERT(ind_tbl);\n-\trqt_attr = mlx5_devx_ind_table_create_rqt_attr(dev, log_n,\n-\t\t\t\t\t\t\tind_tbl->queues,\n-\t\t\t\t\t\t\tind_tbl->queues_n);\n+\trqt_attr = mlx5_devx_ind_table_create_rqt_attr(dev, log_n, queues,\n+\t\t\t\t\t\t ind_tbl->queues_n);\n \tif (!rqt_attr)\n \t\treturn -rte_errno;\n \tind_tbl->rqt = mlx5_devx_cmd_create_rqt(priv->sh->cdev->ctx, rqt_attr);\n@@ -671,7 +682,8 @@ mlx5_devx_ind_table_destroy(struct mlx5_ind_table_obj *ind_tbl)\n * @param[in] hash_fields\n * Verbs protocol hash field to make the RSS on.\n * @param[in] ind_tbl\n- * Indirection table for TIR.\n+ * Indirection table for TIR. If table queues array is NULL,\n+ * a TIR for drop queue is assumed.\n * @param[in] tunnel\n * Tunnel type.\n * @param[out] tir_attr\n@@ -687,19 +699,27 @@ mlx5_devx_tir_attr_set(struct rte_eth_dev *dev, const uint8_t *rss_key,\n \t\t int tunnel, struct mlx5_devx_tir_attr *tir_attr)\n {\n \tstruct mlx5_priv *priv = dev->data->dev_private;\n-\tstruct mlx5_rxq_data *rxq_data = (*priv->rxqs)[ind_tbl->queues[0]];\n-\tstruct mlx5_rxq_ctrl *rxq_ctrl =\n-\t\tcontainer_of(rxq_data, struct mlx5_rxq_ctrl, rxq);\n-\tenum mlx5_rxq_type rxq_obj_type = rxq_ctrl->type;\n+\tenum mlx5_rxq_type rxq_obj_type;\n \tbool lro = true;\n \tuint32_t i;\n \n-\t/* Enable TIR LRO only if all the queues were configured for. */\n-\tfor (i = 0; i < ind_tbl->queues_n; ++i) {\n-\t\tif (!(*priv->rxqs)[ind_tbl->queues[i]]->lro) {\n-\t\t\tlro = false;\n-\t\t\tbreak;\n+\t/* NULL queues designate drop queue. */\n+\tif (ind_tbl->queues != NULL) {\n+\t\tstruct mlx5_rxq_data *rxq_data =\n+\t\t\t\t\t(*priv->rxqs)[ind_tbl->queues[0]];\n+\t\tstruct mlx5_rxq_ctrl *rxq_ctrl =\n+\t\t\tcontainer_of(rxq_data, struct mlx5_rxq_ctrl, rxq);\n+\t\trxq_obj_type = rxq_ctrl->type;\n+\n+\t\t/* Enable TIR LRO only if all the queues were configured for. */\n+\t\tfor (i = 0; i < ind_tbl->queues_n; ++i) {\n+\t\t\tif (!(*priv->rxqs)[ind_tbl->queues[i]]->lro) {\n+\t\t\t\tlro = false;\n+\t\t\t\tbreak;\n+\t\t\t}\n \t\t}\n+\t} else {\n+\t\trxq_obj_type = priv->drop_queue.rxq->rxq_ctrl->type;\n \t}\n \tmemset(tir_attr, 0, sizeof(*tir_attr));\n \ttir_attr->disp_type = MLX5_TIRC_DISP_TYPE_INDIRECT;\n@@ -858,7 +878,7 @@ mlx5_devx_hrxq_modify(struct rte_eth_dev *dev, struct mlx5_hrxq *hrxq,\n }\n \n /**\n- * Create a DevX drop action for Rx Hash queue.\n+ * Create a DevX drop Rx queue.\n *\n * @param dev\n * Pointer to Ethernet device.\n@@ -867,14 +887,99 @@ mlx5_devx_hrxq_modify(struct rte_eth_dev *dev, struct mlx5_hrxq *hrxq,\n * 0 on success, a negative errno value otherwise and rte_errno is set.\n */\n static int\n-mlx5_devx_drop_action_create(struct rte_eth_dev *dev)\n+mlx5_rxq_devx_obj_drop_create(struct rte_eth_dev *dev)\n {\n-\t(void)dev;\n-\tDRV_LOG(ERR, \"DevX drop action is not supported yet.\");\n-\trte_errno = ENOTSUP;\n+\tstruct mlx5_priv *priv = dev->data->dev_private;\n+\tint socket_id = dev->device->numa_node;\n+\tstruct mlx5_rxq_ctrl *rxq_ctrl;\n+\tstruct mlx5_rxq_data *rxq_data;\n+\tstruct mlx5_rxq_obj *rxq = NULL;\n+\tint ret;\n+\n+\t/*\n+\t * Initialize dummy control structures.\n+\t * They are required to hold pointers for cleanup\n+\t * and are only accessible via drop queue DevX objects.\n+\t */\n+\trxq_ctrl = mlx5_malloc(MLX5_MEM_ZERO, sizeof(*rxq_ctrl),\n+\t\t\t 0, socket_id);\n+\tif (rxq_ctrl == NULL) {\n+\t\tDRV_LOG(ERR, \"Port %u could not allocate drop queue control\",\n+\t\t\tdev->data->port_id);\n+\t\trte_errno = ENOMEM;\n+\t\tgoto error;\n+\t}\n+\trxq = mlx5_malloc(MLX5_MEM_ZERO, sizeof(*rxq), 0, socket_id);\n+\tif (rxq == NULL) {\n+\t\tDRV_LOG(ERR, \"Port %u could not allocate drop queue object\",\n+\t\t\tdev->data->port_id);\n+\t\trte_errno = ENOMEM;\n+\t\tgoto error;\n+\t}\n+\trxq->rxq_ctrl = rxq_ctrl;\n+\trxq_ctrl->type = MLX5_RXQ_TYPE_STANDARD;\n+\trxq_ctrl->priv = priv;\n+\trxq_ctrl->obj = rxq;\n+\trxq_data = &rxq_ctrl->rxq;\n+\t/* Create CQ using DevX API. */\n+\tret = mlx5_rxq_create_devx_cq_resources(dev, rxq_data);\n+\tif (ret != 0) {\n+\t\tDRV_LOG(ERR, \"Port %u drop queue CQ creation failed.\",\n+\t\t\tdev->data->port_id);\n+\t\tgoto error;\n+\t}\n+\t/* Create RQ using DevX API. */\n+\tret = mlx5_rxq_create_devx_rq_resources(dev, rxq_data);\n+\tif (ret != 0) {\n+\t\tDRV_LOG(ERR, \"Port %u drop queue RQ creation failed.\",\n+\t\t\tdev->data->port_id);\n+\t\trte_errno = ENOMEM;\n+\t\tgoto error;\n+\t}\n+\t/* Change queue state to ready. */\n+\tret = mlx5_devx_modify_rq(rxq, MLX5_RXQ_MOD_RST2RDY);\n+\tif (ret != 0)\n+\t\tgoto error;\n+\t/* Initialize drop queue. */\n+\tpriv->drop_queue.rxq = rxq;\n+\treturn 0;\n+error:\n+\tret = rte_errno; /* Save rte_errno before cleanup. */\n+\tif (rxq != NULL) {\n+\t\tif (rxq->rq_obj.rq != NULL)\n+\t\t\tmlx5_devx_rq_destroy(&rxq->rq_obj);\n+\t\tif (rxq->cq_obj.cq != NULL)\n+\t\t\tmlx5_devx_cq_destroy(&rxq->cq_obj);\n+\t\tif (rxq->devx_channel)\n+\t\t\tmlx5_os_devx_destroy_event_channel\n+\t\t\t\t\t\t\t(rxq->devx_channel);\n+\t\tmlx5_free(rxq);\n+\t}\n+\tif (rxq_ctrl != NULL)\n+\t\tmlx5_free(rxq_ctrl);\n+\trte_errno = ret; /* Restore rte_errno. */\n \treturn -rte_errno;\n }\n \n+/**\n+ * Release drop Rx queue resources.\n+ *\n+ * @param dev\n+ * Pointer to Ethernet device.\n+ */\n+static void\n+mlx5_rxq_devx_obj_drop_release(struct rte_eth_dev *dev)\n+{\n+\tstruct mlx5_priv *priv = dev->data->dev_private;\n+\tstruct mlx5_rxq_obj *rxq = priv->drop_queue.rxq;\n+\tstruct mlx5_rxq_ctrl *rxq_ctrl = rxq->rxq_ctrl;\n+\n+\tmlx5_rxq_devx_obj_release(rxq);\n+\tmlx5_free(rxq);\n+\tmlx5_free(rxq_ctrl);\n+\tpriv->drop_queue.rxq = NULL;\n+}\n+\n /**\n * Release a drop hash Rx queue.\n *\n@@ -884,9 +989,53 @@ mlx5_devx_drop_action_create(struct rte_eth_dev *dev)\n static void\n mlx5_devx_drop_action_destroy(struct rte_eth_dev *dev)\n {\n-\t(void)dev;\n-\tDRV_LOG(ERR, \"DevX drop action is not supported yet.\");\n-\trte_errno = ENOTSUP;\n+\tstruct mlx5_priv *priv = dev->data->dev_private;\n+\tstruct mlx5_hrxq *hrxq = priv->drop_queue.hrxq;\n+\n+\tif (hrxq->tir != NULL)\n+\t\tmlx5_devx_tir_destroy(hrxq);\n+\tif (hrxq->ind_table->ind_table != NULL)\n+\t\tmlx5_devx_ind_table_destroy(hrxq->ind_table);\n+\tif (priv->drop_queue.rxq->rq != NULL)\n+\t\tmlx5_rxq_devx_obj_drop_release(dev);\n+}\n+\n+/**\n+ * Create a DevX drop action for Rx Hash queue.\n+ *\n+ * @param dev\n+ * Pointer to Ethernet device.\n+ *\n+ * @return\n+ * 0 on success, a negative errno value otherwise and rte_errno is set.\n+ */\n+static int\n+mlx5_devx_drop_action_create(struct rte_eth_dev *dev)\n+{\n+\tstruct mlx5_priv *priv = dev->data->dev_private;\n+\tstruct mlx5_hrxq *hrxq = priv->drop_queue.hrxq;\n+\tint ret;\n+\n+\tret = mlx5_rxq_devx_obj_drop_create(dev);\n+\tif (ret != 0) {\n+\t\tDRV_LOG(ERR, \"Cannot create drop RX queue\");\n+\t\treturn ret;\n+\t}\n+\t/* hrxq->ind_table queues are NULL, drop RX queue ID will be used */\n+\tret = mlx5_devx_ind_table_new(dev, 0, hrxq->ind_table);\n+\tif (ret != 0) {\n+\t\tDRV_LOG(ERR, \"Cannot create drop hash RX queue indirection table\");\n+\t\tgoto error;\n+\t}\n+\tret = mlx5_devx_hrxq_new(dev, hrxq, /* tunnel */ false);\n+\tif (ret != 0) {\n+\t\tDRV_LOG(ERR, \"Cannot create drop hash RX queue\");\n+\t\tgoto error;\n+\t}\n+\treturn 0;\n+error:\n+\tmlx5_devx_drop_action_destroy(dev);\n+\treturn ret;\n }\n \n /**\n", "prefixes": [ "v6", "5/6" ] }{ "id": 103525, "url": "