get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 119158,
    "url": "http://patches.dpdk.org/api/patches/119158/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20221026105429.1899867-3-zhangfei.gao@linaro.org/",
    "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": "<20221026105429.1899867-3-zhangfei.gao@linaro.org>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20221026105429.1899867-3-zhangfei.gao@linaro.org",
    "date": "2022-10-26T10:54:25",
    "name": "[v6,2/6] crypto/uadk: support basic operations",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "34960a5fd5a0d61aa7226d306a0589154d06cc32",
    "submitter": {
        "id": 2701,
        "url": "http://patches.dpdk.org/api/people/2701/?format=api",
        "name": "Zhangfei Gao",
        "email": "zhangfei.gao@linaro.org"
    },
    "delegate": {
        "id": 6690,
        "url": "http://patches.dpdk.org/api/users/6690/?format=api",
        "username": "akhil",
        "first_name": "akhil",
        "last_name": "goyal",
        "email": "gakhil@marvell.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20221026105429.1899867-3-zhangfei.gao@linaro.org/mbox/",
    "series": [
        {
            "id": 25440,
            "url": "http://patches.dpdk.org/api/series/25440/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=25440",
            "date": "2022-10-26T10:54:23",
            "name": "crypto/uadk: introduce uadk crypto driver",
            "version": 6,
            "mbox": "http://patches.dpdk.org/series/25440/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/119158/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/119158/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 0EDC6A04FD;\n\tWed, 26 Oct 2022 13:01:32 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 3EC0742B8E;\n\tWed, 26 Oct 2022 13:01:23 +0200 (CEST)",
            "from mail-wm1-f53.google.com (mail-wm1-f53.google.com\n [209.85.128.53]) by mails.dpdk.org (Postfix) with ESMTP id 3E3BF40041\n for <dev@dpdk.org>; Wed, 26 Oct 2022 13:01:19 +0200 (CEST)",
            "by mail-wm1-f53.google.com with SMTP id t4so9896352wmj.5\n for <dev@dpdk.org>; Wed, 26 Oct 2022 04:01:19 -0700 (PDT)",
            "from localhost.localdomain ([213.146.143.36])\n by smtp.gmail.com with ESMTPSA id\n h14-20020a5d688e000000b0023660f6cecfsm4856094wru.80.2022.10.26.04.01.18\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Wed, 26 Oct 2022 04:01:18 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=3dWeuK1LQWnCrDceoCT+coyKRdO+N1O756x/1vJeQaQ=;\n b=gLvEJxfr3Eo4bYExAfSTQaWHJiIodlpbZFkuo8mjziOOI2HhyetTXt6fGfEFFivFqt\n vaJW7anYWV56x2z4KI+CBZcT2+5U3GmmDtkH1JCiuN4EL/0qadci6Vl5/JxruS85Gjiw\n 4RHX8eeYAUNr7AQfL2vgtYhWnnjwCmlLGb/p2X31gsBqKUjLnZ6uy270h1bPB+ZjKYyl\n EURBQT/NsEIr2yKnxBxlSFimtpVSzvKMohI5n/FSMSxOGCH5tOnR+/f6/U03BANTKkRU\n G2i+VuGSP76BDDFHyYL3LQd2o5TTT47w0Fh8IbbHacUWCivHfGGYrAckVGLfYxhE0fQ5\n YxHg==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20210112;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc\n :subject:date:message-id:reply-to;\n bh=3dWeuK1LQWnCrDceoCT+coyKRdO+N1O756x/1vJeQaQ=;\n b=Vc+J/BpQtGnffBdlfsgb/OaN+F9k/pC8Uy32XBjy4aj7hUZZSvLGPOGO9viPVi3xAB\n /HAo0S6/8tfGZusrmaKNcQoV1oXKGH+k8FY36+4SQR3MOuzXbsykVJ9ImDG44mYN1teL\n XZKdhNGmK5SYEFcFphGu7klAFIw8XFQpMYRX0M1gduCThoK/+DnvnA8d7C4o96XrQNK9\n qben6II0cMJLKtXCiJpV2zzIqbc1v+o716MYClFILd7+gIillmuxCi6Wk1IDCMUYdO/j\n f+5qkqTFegnLhW/01yQXFFiRTekXNyI2WX5SHHbKGkFh5TJF7PVmMrVntAjROWuaeE07\n /jIA==",
        "X-Gm-Message-State": "ACrzQf0SQnXJC7qWU5hX6yp9IYbWXoaYIMvDwQN6JsTP6ctP74n99KJL\n hsTdh32Zgop1DH46YwXnEXgFfA==",
        "X-Google-Smtp-Source": "\n AMsMyM5XBvSlw9aFgkI/y4ZinKHNEI0bcn7szAQgV2C/XyoOJMMtQ/dkjdSqm1qo5na40NLbZUBbMg==",
        "X-Received": "by 2002:a05:600c:4ed0:b0:3cd:3422:62d8 with SMTP id\n g16-20020a05600c4ed000b003cd342262d8mr1990745wmq.154.1666782078867;\n Wed, 26 Oct 2022 04:01:18 -0700 (PDT)",
        "From": "Zhangfei Gao <zhangfei.gao@linaro.org>",
        "To": "Akhil Goyal <gakhil@marvell.com>,\n Declan Doherty <declan.doherty@intel.com>,\n Fan Zhang <royzhang1980@gmail.com>,\n Ashish Gupta <ashish.gupta@marvell.com>, Ray Kinsella <mdr@ashroe.eu>,\n \"thomas@monjalon.net\" <thomas@monjalon.net>",
        "Cc": "dev@dpdk.org,\n\tacc@openeuler.org,\n\tZhangfei Gao <zhangfei.gao@linaro.org>",
        "Subject": "[PATCH v6 2/6] crypto/uadk: support basic operations",
        "Date": "Wed, 26 Oct 2022 18:54:25 +0800",
        "Message-Id": "<20221026105429.1899867-3-zhangfei.gao@linaro.org>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20221026105429.1899867-1-zhangfei.gao@linaro.org>",
        "References": "<20221026105429.1899867-1-zhangfei.gao@linaro.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "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": "Support the basic dev control operations: configure, close, start,\nstop and get info, as well as queue pairs operations.\n\nSigned-off-by: Zhangfei Gao <zhangfei.gao@linaro.org>\n---\n drivers/crypto/uadk/uadk_crypto_pmd.c         | 194 +++++++++++++++++-\n drivers/crypto/uadk/uadk_crypto_pmd_private.h |  19 ++\n 2 files changed, 204 insertions(+), 9 deletions(-)",
    "diff": "diff --git a/drivers/crypto/uadk/uadk_crypto_pmd.c b/drivers/crypto/uadk/uadk_crypto_pmd.c\nindex 34df3ccbb9..b383029a45 100644\n--- a/drivers/crypto/uadk/uadk_crypto_pmd.c\n+++ b/drivers/crypto/uadk/uadk_crypto_pmd.c\n@@ -17,16 +17,192 @@\n \n static uint8_t uadk_cryptodev_driver_id;\n \n+static const struct rte_cryptodev_capabilities uadk_crypto_v2_capabilities[] = {\n+\t/* End of capabilities */\n+\tRTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()\n+};\n+\n+/* Configure device */\n+static int\n+uadk_crypto_pmd_config(struct rte_cryptodev *dev __rte_unused,\n+\t\t       struct rte_cryptodev_config *config __rte_unused)\n+{\n+\treturn 0;\n+}\n+\n+/* Start device */\n+static int\n+uadk_crypto_pmd_start(struct rte_cryptodev *dev __rte_unused)\n+{\n+\treturn 0;\n+}\n+\n+/* Stop device */\n+static void\n+uadk_crypto_pmd_stop(struct rte_cryptodev *dev __rte_unused)\n+{\n+}\n+\n+/* Close device */\n+static int\n+uadk_crypto_pmd_close(struct rte_cryptodev *dev __rte_unused)\n+{\n+\treturn 0;\n+}\n+\n+/* Get device statistics */\n+static void\n+uadk_crypto_pmd_stats_get(struct rte_cryptodev *dev,\n+\t\t\t  struct rte_cryptodev_stats *stats)\n+{\n+\tint qp_id;\n+\n+\tfor (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) {\n+\t\tstruct uadk_qp *qp = dev->data->queue_pairs[qp_id];\n+\n+\t\tstats->enqueued_count += qp->qp_stats.enqueued_count;\n+\t\tstats->dequeued_count += qp->qp_stats.dequeued_count;\n+\t\tstats->enqueue_err_count += qp->qp_stats.enqueue_err_count;\n+\t\tstats->dequeue_err_count += qp->qp_stats.dequeue_err_count;\n+\t}\n+}\n+\n+/* Reset device statistics */\n+static void\n+uadk_crypto_pmd_stats_reset(struct rte_cryptodev *dev __rte_unused)\n+{\n+\tint qp_id;\n+\n+\tfor (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) {\n+\t\tstruct uadk_qp *qp = dev->data->queue_pairs[qp_id];\n+\n+\t\tmemset(&qp->qp_stats, 0, sizeof(qp->qp_stats));\n+\t}\n+}\n+\n+/* Get device info */\n+static void\n+uadk_crypto_pmd_info_get(struct rte_cryptodev *dev,\n+\t\t\t struct rte_cryptodev_info *dev_info)\n+{\n+\tstruct uadk_crypto_priv *priv = dev->data->dev_private;\n+\n+\tif (dev_info != NULL) {\n+\t\tdev_info->driver_id = dev->driver_id;\n+\t\tdev_info->driver_name = dev->device->driver->name;\n+\t\tdev_info->max_nb_queue_pairs = 128;\n+\t\t/* No limit of number of sessions */\n+\t\tdev_info->sym.max_nb_sessions = 0;\n+\t\tdev_info->feature_flags = dev->feature_flags;\n+\n+\t\tif (priv->version == UADK_CRYPTO_V2)\n+\t\t\tdev_info->capabilities = uadk_crypto_v2_capabilities;\n+\t}\n+}\n+\n+/* Release queue pair */\n+static int\n+uadk_crypto_pmd_qp_release(struct rte_cryptodev *dev, uint16_t qp_id)\n+{\n+\tstruct uadk_qp *qp = dev->data->queue_pairs[qp_id];\n+\n+\tif (qp) {\n+\t\trte_ring_free(qp->processed_pkts);\n+\t\trte_free(qp);\n+\t\tdev->data->queue_pairs[qp_id] = NULL;\n+\t}\n+\n+\treturn 0;\n+}\n+\n+/* set a unique name for the queue pair based on its name, dev_id and qp_id */\n+static int\n+uadk_pmd_qp_set_unique_name(struct rte_cryptodev *dev,\n+\t\t\t    struct uadk_qp *qp)\n+{\n+\tunsigned int n = snprintf(qp->name, sizeof(qp->name),\n+\t\t\t\t  \"uadk_crypto_pmd_%u_qp_%u\",\n+\t\t\t\t  dev->data->dev_id, qp->id);\n+\n+\tif (n >= sizeof(qp->name))\n+\t\treturn -EINVAL;\n+\n+\treturn 0;\n+}\n+\n+/* Create a ring to place process packets on */\n+static struct rte_ring *\n+uadk_pmd_qp_create_processed_pkts_ring(struct uadk_qp *qp,\n+\t\t\t\t       unsigned int ring_size, int socket_id)\n+{\n+\tstruct rte_ring *r = qp->processed_pkts;\n+\n+\tif (r) {\n+\t\tif (rte_ring_get_size(r) >= ring_size) {\n+\t\t\tUADK_LOG(INFO, \"Reusing existing ring %s for processed packets\",\n+\t\t\t\t qp->name);\n+\t\t\treturn r;\n+\t\t}\n+\n+\t\tUADK_LOG(ERR, \"Unable to reuse existing ring %s for processed packets\",\n+\t\t\t qp->name);\n+\t\treturn NULL;\n+\t}\n+\n+\treturn rte_ring_create(qp->name, ring_size, socket_id,\n+\t\t\t       RING_F_EXACT_SZ);\n+}\n+\n+static int\n+uadk_crypto_pmd_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id,\n+\t\t\t const struct rte_cryptodev_qp_conf *qp_conf,\n+\t\t\t int socket_id)\n+{\n+\tstruct uadk_qp *qp;\n+\n+\t/* Free memory prior to re-allocation if needed. */\n+\tif (dev->data->queue_pairs[qp_id] != NULL)\n+\t\tuadk_crypto_pmd_qp_release(dev, qp_id);\n+\n+\t/* Allocate the queue pair data structure. */\n+\tqp = rte_zmalloc_socket(\"uadk PMD Queue Pair\", sizeof(*qp),\n+\t\t\t\tRTE_CACHE_LINE_SIZE, socket_id);\n+\tif (qp == NULL)\n+\t\treturn (-ENOMEM);\n+\n+\tqp->id = qp_id;\n+\tdev->data->queue_pairs[qp_id] = qp;\n+\n+\tif (uadk_pmd_qp_set_unique_name(dev, qp))\n+\t\tgoto qp_setup_cleanup;\n+\n+\tqp->processed_pkts = uadk_pmd_qp_create_processed_pkts_ring(qp,\n+\t\t\t\tqp_conf->nb_descriptors, socket_id);\n+\tif (qp->processed_pkts == NULL)\n+\t\tgoto qp_setup_cleanup;\n+\n+\tmemset(&qp->qp_stats, 0, sizeof(qp->qp_stats));\n+\n+\treturn 0;\n+\n+qp_setup_cleanup:\n+\tif (qp) {\n+\t\trte_free(qp);\n+\t\tqp = NULL;\n+\t}\n+\treturn -EINVAL;\n+}\n+\n static struct rte_cryptodev_ops uadk_crypto_pmd_ops = {\n-\t\t.dev_configure\t\t= NULL,\n-\t\t.dev_start\t\t= NULL,\n-\t\t.dev_stop\t\t= NULL,\n-\t\t.dev_close\t\t= NULL,\n-\t\t.stats_get\t\t= NULL,\n-\t\t.stats_reset\t\t= NULL,\n-\t\t.dev_infos_get\t\t= NULL,\n-\t\t.queue_pair_setup\t= NULL,\n-\t\t.queue_pair_release\t= NULL,\n+\t\t.dev_configure\t\t= uadk_crypto_pmd_config,\n+\t\t.dev_start\t\t= uadk_crypto_pmd_start,\n+\t\t.dev_stop\t\t= uadk_crypto_pmd_stop,\n+\t\t.dev_close\t\t= uadk_crypto_pmd_close,\n+\t\t.stats_get\t\t= uadk_crypto_pmd_stats_get,\n+\t\t.stats_reset\t\t= uadk_crypto_pmd_stats_reset,\n+\t\t.dev_infos_get\t\t= uadk_crypto_pmd_info_get,\n+\t\t.queue_pair_setup\t= uadk_crypto_pmd_qp_setup,\n+\t\t.queue_pair_release\t= uadk_crypto_pmd_qp_release,\n \t\t.sym_session_get_size\t= NULL,\n \t\t.sym_session_configure\t= NULL,\n \t\t.sym_session_clear\t= NULL,\ndiff --git a/drivers/crypto/uadk/uadk_crypto_pmd_private.h b/drivers/crypto/uadk/uadk_crypto_pmd_private.h\nindex c4090f6119..3060583b54 100644\n--- a/drivers/crypto/uadk/uadk_crypto_pmd_private.h\n+++ b/drivers/crypto/uadk/uadk_crypto_pmd_private.h\n@@ -6,6 +6,25 @@\n #ifndef _UADK_CRYPTO_PMD_PRIVATE_H_\n #define _UADK_CRYPTO_PMD_PRIVATE_H_\n \n+/* Maximum length for digest (SHA-512 needs 64 bytes) */\n+#define DIGEST_LENGTH_MAX 64\n+\n+struct uadk_qp {\n+\t/* Ring for placing process packets */\n+\tstruct rte_ring *processed_pkts;\n+\t/* Queue pair statistics */\n+\tstruct rte_cryptodev_stats qp_stats;\n+\t/* Queue Pair Identifier */\n+\tuint16_t id;\n+\t/* Unique Queue Pair Name */\n+\tchar name[RTE_CRYPTODEV_NAME_MAX_LEN];\n+\t/* Buffer used to store the digest generated\n+\t * by the driver when verifying a digest provided\n+\t * by the user (using authentication verify operation)\n+\t */\n+\tuint8_t temp_digest[DIGEST_LENGTH_MAX];\n+} __rte_cache_aligned;\n+\n enum uadk_crypto_version {\n \tUADK_CRYPTO_V2,\n \tUADK_CRYPTO_V3,\n",
    "prefixes": [
        "v6",
        "2/6"
    ]
}