get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/103525/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 103525,
    "url": "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"
    ]
}