get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 119824,
    "url": "https://patches.dpdk.org/api/patches/119824/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20221114120238.2143832-4-jerinj@marvell.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": "<20221114120238.2143832-4-jerinj@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20221114120238.2143832-4-jerinj@marvell.com",
    "date": "2022-11-14T12:02:29",
    "name": "[v1,03/12] mldev: support device handling functions",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "fc6e34431bc578b8fbfe7d1917335f1a6ad6bf15",
    "submitter": {
        "id": 1188,
        "url": "https://patches.dpdk.org/api/people/1188/?format=api",
        "name": "Jerin Jacob Kollanukkaran",
        "email": "jerinj@marvell.com"
    },
    "delegate": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20221114120238.2143832-4-jerinj@marvell.com/mbox/",
    "series": [
        {
            "id": 25753,
            "url": "https://patches.dpdk.org/api/series/25753/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=25753",
            "date": "2022-11-14T12:02:26",
            "name": "mldev: introduce machine learning device library",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/25753/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/119824/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/119824/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 5642BA00C4;\n\tMon, 14 Nov 2022 13:07:00 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 38D7342D1A;\n\tMon, 14 Nov 2022 13:06:57 +0100 (CET)",
            "from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com\n [67.231.156.173])\n by mails.dpdk.org (Postfix) with ESMTP id 1F02D4014F\n for <dev@dpdk.org>; Mon, 14 Nov 2022 13:06:56 +0100 (CET)",
            "from pps.filterd (m0045851.ppops.net [127.0.0.1])\n by mx0b-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id\n 2AE6h1dm008489; Mon, 14 Nov 2022 04:04:37 -0800",
            "from dc5-exch01.marvell.com ([199.233.59.181])\n by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3kugnb0wry-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);\n Mon, 14 Nov 2022 04:04:37 -0800",
            "from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH01.marvell.com\n (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.2;\n Mon, 14 Nov 2022 04:04:35 -0800",
            "from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com\n (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.2 via Frontend\n Transport; Mon, 14 Nov 2022 04:04:34 -0800",
            "from jerin-lab.marvell.com (jerin-lab.marvell.com [10.28.34.14])\n by maili.marvell.com (Postfix) with ESMTP id 1E2495C68E2;\n Mon, 14 Nov 2022 04:04:09 -0800 (PST)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com;\n h=from : to : cc :\n subject : date : message-id : in-reply-to : references : mime-version :\n content-transfer-encoding : content-type; s=pfpt0220;\n bh=Ix4V0fCZs0JuxpigVkb+12Xzjfxa8DNlNeAxrAsQ0Pc=;\n b=VYfi2lkaTvt/HCjL22mRVbXtmWhr5P35mEcDT39g119dHHgW/XxN+F2k019ihNU7aA3y\n YhljPdX5JDr/6H1dhI83m5PUALMpygYh+a0vWVkhSGT01Z+nml4Cac+t9PMcE2qflusm\n s3jvYCFkqWEBQEkVMQ34Oqik+NqdyblA3LgdSHxb7ROfj/d9ibpotSH/TqO47WAjx+k/\n xf6ZKQpHMamrEmjc9uutepYChoI8NvoZ42Ofn/9pisJwEU6MeRK42uceEKpNvqYWVQZh\n bgm6JVj284HD9H0HwLnNwBMlbavn7bXxRi4DGt9z0L6g2UiVl8e2/zg6RyXnT0ZJZzwd 1A==",
        "From": "<jerinj@marvell.com>",
        "To": "<dev@dpdk.org>, Srikanth Yalavarthi <syalavarthi@marvell.com>",
        "CC": "<thomas@monjalon.net>, <ferruh.yigit@xilinx.com>,\n <ajit.khaparde@broadcom.com>, <aboyer@pensando.io>,\n <andrew.rybchenko@oktetlabs.ru>, <beilei.xing@intel.com>,\n <bruce.richardson@intel.com>, <chas3@att.com>, <chenbo.xia@intel.com>,\n <ciara.loftus@intel.com>, <dsinghrawat@marvell.com>,\n <ed.czeck@atomicrules.com>, <evgenys@amazon.com>, <grive@u256.net>,\n <g.singh@nxp.com>, <zhouguoyang@huawei.com>, <haiyue.wang@intel.com>,\n <hkalra@marvell.com>, <heinrich.kuhn@corigine.com>,\n <hemant.agrawal@nxp.com>, <hyonkim@cisco.com>, <igorch@amazon.com>,\n <irusskikh@marvell.com>, <jgrajcia@cisco.com>,\n <jasvinder.singh@intel.com>, <jianwang@trustnetic.com>,\n <jiawenwu@trustnetic.com>, <jingjing.wu@intel.com>,\n <johndale@cisco.com>, <john.miller@atomicrules.com>,\n <linville@tuxdriver.com>, <keith.wiles@intel.com>,\n <kirankumark@marvell.com>, <oulijun@huawei.com>, <lironh@marvell.com>,\n <longli@microsoft.com>, <mw@semihalf.com>, <spinler@cesnet.cz>,\n <matan@nvidia.com>, <matt.peters@windriver.com>,\n <maxime.coquelin@redhat.com>, <mk@semihalf.com>, <humin29@huawei.com>,\n <pnalla@marvell.com>, <ndabilpuram@marvell.com>,\n <qiming.yang@intel.com>, <qi.z.zhang@intel.com>, <radhac@marvell.com>,\n <rahul.lakkireddy@chelsio.com>, <rmody@marvell.com>,\n <rosen.xu@intel.com>, <sachin.saxena@oss.nxp.com>,\n <skoteshwar@marvell.com>, <shshaikh@marvell.com>,\n <shaibran@amazon.com>, <shepard.siegel@atomicrules.com>,\n <asomalap@amd.com>, <somnath.kotur@broadcom.com>,\n <sthemmin@microsoft.com>, <steven.webster@windriver.com>,\n <skori@marvell.com>, <mtetsuyah@gmail.com>, <vburru@marvell.com>,\n <viacheslavo@nvidia.com>, <xiao.w.wang@intel.com>,\n <cloud.wangxiaoyun@huawei.com>, <yisen.zhuang@huawei.com>,\n <yongwang@vmware.com>, <xuanziyang2@huawei.com>, <pkapoor@marvell.com>,\n <nadavh@marvell.com>, <sburla@marvell.com>, <pathreya@marvell.com>,\n <gakhil@marvell.com>, <mdr@ashroe.eu>, <dmitry.kozliuk@gmail.com>,\n <anatoly.burakov@intel.com>, <cristian.dumitrescu@intel.com>,\n <honnappa.nagarahalli@arm.com>, <mattias.ronnblom@ericsson.com>,\n <ruifeng.wang@arm.com>, <drc@linux.vnet.ibm.com>,\n <konstantin.ananyev@intel.com>, <olivier.matz@6wind.com>,\n <jay.jayatheerthan@intel.com>, <asekhar@marvell.com>,\n <pbhagavatula@marvell.com>, <eagostini@nvidia.com>,\n <dchickles@marvell.com>, <sshankarnara@marvell.com>,\n Jerin Jacob <jerinj@marvell.com>",
        "Subject": "[dpdk-dev] [PATCH v1 03/12] mldev: support device handling functions",
        "Date": "Mon, 14 Nov 2022 17:32:29 +0530",
        "Message-ID": "<20221114120238.2143832-4-jerinj@marvell.com>",
        "X-Mailer": "git-send-email 2.38.1",
        "In-Reply-To": "<20221114120238.2143832-1-jerinj@marvell.com>",
        "References": "<20220803132839.2747858-2-jerinj@marvell.com>\n <20221114120238.2143832-1-jerinj@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-ORIG-GUID": "fbUNtr5-GCUCzw8Va_rsjHF-JGJc0iXU",
        "X-Proofpoint-GUID": "fbUNtr5-GCUCzw8Va_rsjHF-JGJc0iXU",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.219,Aquarius:18.0.895,Hydra:6.0.545,FMLib:17.11.122.1\n definitions=2022-11-14_10,2022-11-11_01,2022-06-22_01",
        "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"
    },
    "content": "From: Srikanth Yalavarthi <syalavarthi@marvell.com>\n\nAdded device handling APIs. These APIs are used to get device\ninformation, configure, start, stop and close ML devices. Added\nfunction prototypes to PMD layer which are used by the ML driver\nimplementations in the poll mode driver.\n\nSigned-off-by: Srikanth Yalavarthi <syalavarthi@marvell.com>\nSigned-off-by: Jerin Jacob <jerinj@marvell.com>\n---\n lib/mldev/rte_mldev.c      | 175 +++++++++++++++++++++++++++++++++++++\n lib/mldev/rte_mldev_core.h | 107 +++++++++++++++++++++++\n lib/mldev/version.map      |  11 +++\n 3 files changed, 293 insertions(+)",
    "diff": "diff --git a/lib/mldev/rte_mldev.c b/lib/mldev/rte_mldev.c\nindex a4e0b5f94f..651f8b2f7c 100644\n--- a/lib/mldev/rte_mldev.c\n+++ b/lib/mldev/rte_mldev.c\n@@ -131,3 +131,178 @@ rte_ml_dev_pmd_release(struct rte_ml_dev *dev)\n \n \treturn ret;\n }\n+\n+uint16_t\n+rte_ml_dev_count(void)\n+{\n+\treturn ml_dev_globals.nb_devs;\n+}\n+\n+int\n+rte_ml_dev_is_valid_dev(int16_t dev_id)\n+{\n+\tstruct rte_ml_dev *dev = NULL;\n+\n+\tif (dev_id >= ml_dev_globals.max_devs || ml_devices[dev_id].data == NULL)\n+\t\treturn 0;\n+\n+\tdev = rte_ml_dev_pmd_get_dev(dev_id);\n+\tif (dev->attached != ML_DEV_ATTACHED)\n+\t\treturn 0;\n+\telse\n+\t\treturn 1;\n+}\n+\n+int\n+rte_ml_dev_socket_id(int16_t dev_id)\n+{\n+\tstruct rte_ml_dev *dev;\n+\n+\tif (!rte_ml_dev_is_valid_dev(dev_id)) {\n+\t\tML_DEV_LOG(ERR, \"Invalid dev_id = %d\\n\", dev_id);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tdev = rte_ml_dev_pmd_get_dev(dev_id);\n+\n+\treturn dev->data->socket_id;\n+}\n+\n+int\n+rte_ml_dev_info_get(int16_t dev_id, struct rte_ml_dev_info *dev_info)\n+{\n+\tstruct rte_ml_dev *dev;\n+\n+\tif (!rte_ml_dev_is_valid_dev(dev_id)) {\n+\t\tML_DEV_LOG(ERR, \"Invalid dev_id = %d\\n\", dev_id);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tdev = rte_ml_dev_pmd_get_dev(dev_id);\n+\tif (*dev->dev_ops->dev_info_get == NULL)\n+\t\treturn -ENOTSUP;\n+\n+\tif (dev_info == NULL) {\n+\t\tML_DEV_LOG(ERR, \"Dev %d, dev_info cannot be NULL\\n\", dev_id);\n+\t\treturn -EINVAL;\n+\t}\n+\tmemset(dev_info, 0, sizeof(struct rte_ml_dev_info));\n+\n+\treturn (*dev->dev_ops->dev_info_get)(dev, dev_info);\n+}\n+\n+int\n+rte_ml_dev_configure(int16_t dev_id, const struct rte_ml_dev_config *config)\n+{\n+\tstruct rte_ml_dev_info dev_info;\n+\tstruct rte_ml_dev *dev;\n+\tint ret;\n+\n+\tif (!rte_ml_dev_is_valid_dev(dev_id)) {\n+\t\tML_DEV_LOG(ERR, \"Invalid dev_id = %d\\n\", dev_id);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tdev = rte_ml_dev_pmd_get_dev(dev_id);\n+\tif (*dev->dev_ops->dev_configure == NULL)\n+\t\treturn -ENOTSUP;\n+\n+\tif (dev->data->dev_started) {\n+\t\tML_DEV_LOG(ERR, \"Device %d must be stopped to allow configuration\", dev_id);\n+\t\treturn -EBUSY;\n+\t}\n+\n+\tif (config == NULL) {\n+\t\tML_DEV_LOG(ERR, \"Dev %d, config cannot be NULL\\n\", dev_id);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tret = rte_ml_dev_info_get(dev_id, &dev_info);\n+\tif (ret < 0)\n+\t\treturn ret;\n+\n+\tif (config->nb_queue_pairs > dev_info.max_queue_pairs) {\n+\t\tML_DEV_LOG(ERR, \"Device %d num of queues %u > %u\\n\", dev_id, config->nb_queue_pairs,\n+\t\t\t   dev_info.max_queue_pairs);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\treturn (*dev->dev_ops->dev_configure)(dev, config);\n+}\n+\n+int\n+rte_ml_dev_close(int16_t dev_id)\n+{\n+\tstruct rte_ml_dev *dev;\n+\n+\tif (!rte_ml_dev_is_valid_dev(dev_id)) {\n+\t\tML_DEV_LOG(ERR, \"Invalid dev_id = %d\\n\", dev_id);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tdev = rte_ml_dev_pmd_get_dev(dev_id);\n+\tif (*dev->dev_ops->dev_close == NULL)\n+\t\treturn -ENOTSUP;\n+\n+\t/* Device must be stopped before it can be closed */\n+\tif (dev->data->dev_started == 1) {\n+\t\tML_DEV_LOG(ERR, \"Device %d must be stopped before closing\", dev_id);\n+\t\treturn -EBUSY;\n+\t}\n+\n+\treturn (*dev->dev_ops->dev_close)(dev);\n+}\n+\n+int\n+rte_ml_dev_start(int16_t dev_id)\n+{\n+\tstruct rte_ml_dev *dev;\n+\tint ret;\n+\n+\tif (!rte_ml_dev_is_valid_dev(dev_id)) {\n+\t\tML_DEV_LOG(ERR, \"Invalid dev_id = %d\\n\", dev_id);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tdev = rte_ml_dev_pmd_get_dev(dev_id);\n+\tif (*dev->dev_ops->dev_start == NULL)\n+\t\treturn -ENOTSUP;\n+\n+\tif (dev->data->dev_started != 0) {\n+\t\tML_DEV_LOG(ERR, \"Device %d is already started\", dev_id);\n+\t\treturn -EBUSY;\n+\t}\n+\n+\tret = (*dev->dev_ops->dev_start)(dev);\n+\tif (ret == 0)\n+\t\tdev->data->dev_started = 1;\n+\n+\treturn ret;\n+}\n+\n+int\n+rte_ml_dev_stop(int16_t dev_id)\n+{\n+\tstruct rte_ml_dev *dev;\n+\tint ret;\n+\n+\tif (!rte_ml_dev_is_valid_dev(dev_id)) {\n+\t\tML_DEV_LOG(ERR, \"Invalid dev_id = %d\\n\", dev_id);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tdev = rte_ml_dev_pmd_get_dev(dev_id);\n+\tif (*dev->dev_ops->dev_stop == NULL)\n+\t\treturn -ENOTSUP;\n+\n+\tif (dev->data->dev_started == 0) {\n+\t\tML_DEV_LOG(ERR, \"Device %d is not started\", dev_id);\n+\t\treturn -EBUSY;\n+\t}\n+\n+\tret = (*dev->dev_ops->dev_stop)(dev);\n+\tif (ret == 0)\n+\t\tdev->data->dev_started = 0;\n+\n+\treturn ret;\n+}\ndiff --git a/lib/mldev/rte_mldev_core.h b/lib/mldev/rte_mldev_core.h\nindex b5cb69c5fb..1405cce7f7 100644\n--- a/lib/mldev/rte_mldev_core.h\n+++ b/lib/mldev/rte_mldev_core.h\n@@ -35,6 +35,110 @@ extern \"C\" {\n #define ML_DEV_DETACHED (0)\n #define ML_DEV_ATTACHED (1)\n \n+struct rte_ml_dev;\n+\n+/**\n+ * Definitions of all functions exported by a driver through the generic structure of type\n+ * *ml_dev_ops* supplied in the *rte_ml_dev* structure associated with a device.\n+ */\n+\n+/**\n+ * @internal\n+ *\n+ * Function used to get device information.\n+ *\n+ * @param dev\n+ *\tML device pointer.\n+ * @param dev_info\n+ *\tPointer to info structure.\n+ *\n+ * @return\n+ *\t- 0 on success.\n+ *\t- < 0, error code on failure.\n+ */\n+typedef int (*mldev_info_get_t)(struct rte_ml_dev *dev, struct rte_ml_dev_info *dev_info);\n+\n+/**\n+ * @internal\n+ *\n+ * Function used to configure device.\n+ *\n+ * @param dev\n+ *\tML device pointer.\n+ * @param config\n+ *\tML device configurations.\n+ *\n+ * @return\n+ *\t- 0 on success\n+ *\t- < 0, error code on failure.\n+ */\n+typedef int (*mldev_configure_t)(struct rte_ml_dev *dev, const struct rte_ml_dev_config *config);\n+\n+/**\n+ * @internal\n+ *\n+ * Function used to close a configured device.\n+ *\n+ * @param dev\n+ *\tML device pointer.\n+ *\n+ * @return\n+ *\t- 0 on success.\n+ *\t- -EAGAIN if can't close as device is busy.\n+ *\t- < 0, error code on failure, other than busy.\n+ */\n+typedef int (*mldev_close_t)(struct rte_ml_dev *dev);\n+\n+/**\n+ * @internal\n+ *\n+ * Function used to start a configured device.\n+ *\n+ * @param dev\n+ *\tML device pointer.\n+ *\n+ * @return\n+ *\t- 0 on success.\n+ *\t- < 0, error code on failure.\n+ */\n+typedef int (*mldev_start_t)(struct rte_ml_dev *dev);\n+\n+/**\n+ * @internal\n+ *\n+ * Function used to stop a configured device.\n+ *\n+ * @param dev\n+ *\tML device pointer.\n+ *\n+ * @return\n+ *\t- 0 on success.\n+ *\t- < 0, error code on failure.\n+ */\n+typedef int (*mldev_stop_t)(struct rte_ml_dev *dev);\n+\n+/**\n+ * @internal\n+ *\n+ * ML device operations function pointer table.\n+ */\n+struct rte_ml_dev_ops {\n+\t/** Get device information. */\n+\tmldev_info_get_t dev_info_get;\n+\n+\t/** Configure device. */\n+\tmldev_configure_t dev_configure;\n+\n+\t/** Close device. */\n+\tmldev_close_t dev_close;\n+\n+\t/** Start device. */\n+\tmldev_start_t dev_start;\n+\n+\t/** Stop device. */\n+\tmldev_stop_t dev_stop;\n+};\n+\n /**\n  * @internal\n  *\n@@ -82,6 +186,9 @@ struct rte_ml_dev {\n \t/** Pointer to device data. */\n \tstruct rte_ml_dev_data *data;\n \n+\t/** Functions exported by PMD. */\n+\tstruct rte_ml_dev_ops *dev_ops;\n+\n \t/** Backing RTE device. */\n \tstruct rte_device *device;\n \ndiff --git a/lib/mldev/version.map b/lib/mldev/version.map\nindex 82eedfada4..1be508ab5f 100644\n--- a/lib/mldev/version.map\n+++ b/lib/mldev/version.map\n@@ -1,4 +1,15 @@\n EXPERIMENTAL {\n+\tglobal:\n+\n+\trte_ml_dev_close;\n+\trte_ml_dev_configure;\n+\trte_ml_dev_count;\n+\trte_ml_dev_info_get;\n+\trte_ml_dev_is_valid_dev;\n+\trte_ml_dev_socket_id;\n+\trte_ml_dev_start;\n+\trte_ml_dev_stop;\n+\n \tlocal: *;\n };\n \n",
    "prefixes": [
        "v1",
        "03/12"
    ]
}