get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 101312,
    "url": "http://patches.dpdk.org/api/patches/101312/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20211013102214.108814-1-rebecca.troy@intel.com/",
    "project": {
        "id": 1,
        "url": "http://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": "<20211013102214.108814-1-rebecca.troy@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20211013102214.108814-1-rebecca.troy@intel.com",
    "date": "2021-10-13T10:22:14",
    "name": "[v4] cryptodev: add telemetry callbacks",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "13ba50475929f6ae8e28000fb77e429370ac130f",
    "submitter": {
        "id": 2273,
        "url": "http://patches.dpdk.org/api/people/2273/?format=api",
        "name": "Rebecca Troy",
        "email": "rebecca.troy@intel.com"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20211013102214.108814-1-rebecca.troy@intel.com/mbox/",
    "series": [
        {
            "id": 19591,
            "url": "http://patches.dpdk.org/api/series/19591/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=19591",
            "date": "2021-10-13T10:22:14",
            "name": "[v4] cryptodev: add telemetry callbacks",
            "version": 4,
            "mbox": "http://patches.dpdk.org/series/19591/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/101312/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/101312/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 6E574A0C55;\n\tWed, 13 Oct 2021 12:22:32 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id D9FB4410DA;\n\tWed, 13 Oct 2021 12:22:31 +0200 (CEST)",
            "from mga05.intel.com (mga05.intel.com [192.55.52.43])\n by mails.dpdk.org (Postfix) with ESMTP id A8E6040E64\n for <dev@dpdk.org>; Wed, 13 Oct 2021 12:22:30 +0200 (CEST)",
            "from orsmga007.jf.intel.com ([10.7.209.58])\n by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 13 Oct 2021 03:22:29 -0700",
            "from silpixa00400904.ir.intel.com ([10.243.23.83])\n by orsmga007.jf.intel.com with ESMTP; 13 Oct 2021 03:22:27 -0700"
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6200,9189,10135\"; a=\"313595401\"",
            "E=Sophos;i=\"5.85,370,1624345200\"; d=\"scan'208\";a=\"313595401\"",
            "E=Sophos;i=\"5.85,370,1624345200\"; d=\"scan'208\";a=\"480737095\""
        ],
        "X-ExtLoop1": "1",
        "From": "Rebecca Troy <rebecca.troy@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "ciara.power@intel.com, roy.fan.zhang@intel.com,\n Rebecca Troy <rebecca.troy@intel.com>, Akhil Goyal <gakhil@marvell.com>,\n Declan Doherty <declan.doherty@intel.com>",
        "Date": "Wed, 13 Oct 2021 10:22:14 +0000",
        "Message-Id": "<20211013102214.108814-1-rebecca.troy@intel.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20211007141110.569739-1-rebecca.troy@intel.com>",
        "References": "<20211007141110.569739-1-rebecca.troy@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH v4] cryptodev: add telemetry callbacks",
        "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": "The cryptodev library now registers commands with telemetry, and\nimplements the corresponding callback functions. These commands\nallow a list of cryptodevs to be queried, as well as info and stats\nfor the corresponding cryptodev.\n\nAn example usage can be seen below:\n\nConnecting to /var/run/dpdk/rte/dpdk_telemetry.v2\n{\"version\": \"DPDK 21.11.0-rc0\", \"pid\": 1135019, \"max_output_len\": 16384}\n--> /\n{\"/\": [\"/\", \"/cryptodev/info\", \"/cryptodev/list\", \"/cryptodev/stats\", ...]}\n--> /cryptodev/list\n{\"/cryptodev/list\": [0,1,2,3]}\n--> /cryptodev/info,0\n{\"/cryptodev/info\": {\"device_name\": \"0000:1c:01.0_qat_sym\", \\\n\t \"max_nb_queue_pairs\": 2}}\n--> /cryptodev/stats,0\n{\"/cryptodev/stats\": {\"enqueued_count\": 0, \"dequeued_count\": 0, \\\n\t\"enqueue_err_count\": 0, \"dequeue_err_count\": 0}}\n\nSigned-off-by: Rebecca Troy <rebecca.troy@intel.com>\n\n---\nv4:\n  - Corrected doc heading underline and link\n  - Replaced remaining -1 return values with -EINVAL\nv3:\n  - Added missing version tag to patch.\nv2:\n  - Added documentation and release notes.\n  - Changed the /cryptodev/list command to list the devices as an\n\tarray of IDs, rather than as names and IDs.\n  - Added the /cryptodev/info command as described above.\n---\n doc/guides/prog_guide/cryptodev_lib.rst | 28 ++++++++\n doc/guides/rel_notes/release_21_11.rst  |  5 ++\n lib/cryptodev/rte_cryptodev.c           | 92 +++++++++++++++++++++++++\n 3 files changed, 125 insertions(+)",
    "diff": "diff --git a/doc/guides/prog_guide/cryptodev_lib.rst b/doc/guides/prog_guide/cryptodev_lib.rst\nindex 9b1cf8d49f..25663e552e 100644\n--- a/doc/guides/prog_guide/cryptodev_lib.rst\n+++ b/doc/guides/prog_guide/cryptodev_lib.rst\n@@ -1282,3 +1282,31 @@ Asymmetric Crypto Device API\n \n The cryptodev Library API is described in the\n `DPDK API Reference <https://doc.dpdk.org/api/>`_\n+\n+\n+Device Statistics\n+-----------------\n+\n+The Cryptodev library has support for displaying Crypto device information\n+through the Telemetry interface. Telemetry commands that can be used\n+are shown below.\n+\n+#. Get the list of available Crypto devices by ID::\n+\n+     --> /cryptodev/list\n+     {\"/cryptodev/list\": [0, 1, 2, 3]}\n+\n+#. Get general information from a Crypto device::\n+\n+     --> /cryptodev/info,0\n+     {\"/cryptodev/info\": {\"device_name\": \"0000:1c:01.0_qat_sym\",\n+     \"max_nb_queue_pairs\": 2}}\n+\n+#. Get the statistics for a particular Crypto device::\n+\n+     --> /cryptodev/stats,0\n+     {\"/cryptodev/stats\": {\"enqueued_count\": 0, \"dequeued_count\": 0,\n+     \"enqueue_err_count\": 0, \"dequeue_err_count\": 0}}\n+\n+For more information on how to use the Telemetry interface, see\n+the :doc:`../howto/telemetry`.\ndiff --git a/doc/guides/rel_notes/release_21_11.rst b/doc/guides/rel_notes/release_21_11.rst\nindex f643a61f44..f3242acb15 100644\n--- a/doc/guides/rel_notes/release_21_11.rst\n+++ b/doc/guides/rel_notes/release_21_11.rst\n@@ -137,6 +137,11 @@ New Features\n \n   Added support for more comprehensive CRC options.\n \n+* **Added Telemetry callbacks to Cryptodev library.**\n+\n+  Added Telemetry callback functions which allow a list of Crypto devices,\n+  stats for a Crypto device, and other device information to be queried.\n+\n * **Added multi-process support for testpmd.**\n \n   Added command-line options to specify total number of processes and\ndiff --git a/lib/cryptodev/rte_cryptodev.c b/lib/cryptodev/rte_cryptodev.c\nindex b913c434c5..52066a953b 100644\n--- a/lib/cryptodev/rte_cryptodev.c\n+++ b/lib/cryptodev/rte_cryptodev.c\n@@ -35,6 +35,7 @@\n #include <rte_errno.h>\n #include <rte_spinlock.h>\n #include <rte_string_fns.h>\n+#include <rte_telemetry.h>\n \n #include \"rte_crypto.h\"\n #include \"rte_cryptodev.h\"\n@@ -2426,3 +2427,94 @@ rte_cryptodev_allocate_driver(struct cryptodev_driver *crypto_drv,\n \n \treturn nb_drivers++;\n }\n+\n+static int\n+cryptodev_handle_dev_list(const char *cmd __rte_unused,\n+\t\tconst char *params __rte_unused,\n+\t\tstruct rte_tel_data *d)\n+{\n+\tint dev_id;\n+\n+\tif (rte_cryptodev_count() < 1)\n+\t\treturn -1;\n+\n+\trte_tel_data_start_array(d, RTE_TEL_INT_VAL);\n+\tfor (dev_id = 0; dev_id < RTE_CRYPTO_MAX_DEVS; dev_id++)\n+\t\tif (rte_cryptodev_is_valid_dev(dev_id))\n+\t\t\trte_tel_data_add_array_int(d, dev_id);\n+\n+\treturn 0;\n+}\n+\n+static int\n+cryptodev_handle_dev_info(const char *cmd __rte_unused,\n+\t\tconst char *params, struct rte_tel_data *d)\n+{\n+\tstruct rte_cryptodev_info cryptodev_info;\n+\tint dev_id;\n+\tchar *end_param;\n+\n+\tif (params == NULL || strlen(params) == 0 || !isdigit(*params))\n+\t\treturn -EINVAL;\n+\n+\tdev_id = strtoul(params, &end_param, 0);\n+\tif (*end_param != '\\0')\n+\t\tCDEV_LOG_ERR(\"Extra parameters passed to command, ignoring\");\n+\tif (!rte_cryptodev_is_valid_dev(dev_id))\n+\t\treturn -EINVAL;\n+\n+\trte_cryptodev_info_get(dev_id, &cryptodev_info);\n+\n+\trte_tel_data_start_dict(d);\n+\trte_tel_data_add_dict_string(d, \"device_name\",\n+\t\tcryptodev_info.device->name);\n+\trte_tel_data_add_dict_int(d, \"max_nb_queue_pairs\",\n+\t\tcryptodev_info.max_nb_queue_pairs);\n+\n+\treturn 0;\n+}\n+\n+#define ADD_DICT_STAT(s) rte_tel_data_add_dict_u64(d, #s, cryptodev_stats.s)\n+\n+static int\n+cryptodev_handle_dev_stats(const char *cmd __rte_unused,\n+\t\tconst char *params,\n+\t\tstruct rte_tel_data *d)\n+{\n+\tstruct rte_cryptodev_stats cryptodev_stats;\n+\tint dev_id, ret;\n+\tchar *end_param;\n+\n+\tif (params == NULL || strlen(params) == 0 || !isdigit(*params))\n+\t\treturn -EINVAL;\n+\n+\tdev_id = strtoul(params, &end_param, 0);\n+\tif (*end_param != '\\0')\n+\t\tCDEV_LOG_ERR(\"Extra parameters passed to command, ignoring\");\n+\tif (!rte_cryptodev_is_valid_dev(dev_id))\n+\t\treturn -EINVAL;\n+\n+\tret = rte_cryptodev_stats_get(dev_id, &cryptodev_stats);\n+\tif (ret < 0)\n+\t\treturn ret;\n+\n+\trte_tel_data_start_dict(d);\n+\tADD_DICT_STAT(enqueued_count);\n+\tADD_DICT_STAT(dequeued_count);\n+\tADD_DICT_STAT(enqueue_err_count);\n+\tADD_DICT_STAT(dequeue_err_count);\n+\n+\treturn 0;\n+}\n+\n+RTE_INIT(cryptodev_init_telemetry)\n+{\n+\trte_telemetry_register_cmd(\"/cryptodev/info\", cryptodev_handle_dev_info,\n+\t\t\t\"Returns information for a cryptodev. Parameters: int dev_id\");\n+\trte_telemetry_register_cmd(\"/cryptodev/list\",\n+\t\t\tcryptodev_handle_dev_list,\n+\t\t\t\"Returns list of available crypto devices by IDs. No parameters.\");\n+\trte_telemetry_register_cmd(\"/cryptodev/stats\",\n+\t\t\tcryptodev_handle_dev_stats,\n+\t\t\t\"Returns the stats for a cryptodev. Parameters: int dev_id\");\n+}\n",
    "prefixes": [
        "v4"
    ]
}