get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 101383,
    "url": "http://patches.dpdk.org/api/patches/101383/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20211013163053.1033998-5-kevin.laatz@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": "<20211013163053.1033998-5-kevin.laatz@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20211013163053.1033998-5-kevin.laatz@intel.com",
    "date": "2021-10-13T16:30:41",
    "name": "[v7,04/16] dma/idxd: create dmadev instances on bus probe",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "82ffb588611b4ec65aaa931caaff3058e94e7be8",
    "submitter": {
        "id": 921,
        "url": "http://patches.dpdk.org/api/people/921/?format=api",
        "name": "Kevin Laatz",
        "email": "kevin.laatz@intel.com"
    },
    "delegate": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20211013163053.1033998-5-kevin.laatz@intel.com/mbox/",
    "series": [
        {
            "id": 19603,
            "url": "http://patches.dpdk.org/api/series/19603/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=19603",
            "date": "2021-10-13T16:30:37",
            "name": "add dmadev driver for idxd devices",
            "version": 7,
            "mbox": "http://patches.dpdk.org/series/19603/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/101383/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/101383/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 5F94CA0C55;\n\tWed, 13 Oct 2021 18:31:36 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 6C5F741159;\n\tWed, 13 Oct 2021 18:31:11 +0200 (CEST)",
            "from mga05.intel.com (mga05.intel.com [192.55.52.43])\n by mails.dpdk.org (Postfix) with ESMTP id EB09C4113E\n for <dev@dpdk.org>; Wed, 13 Oct 2021 18:31:07 +0200 (CEST)",
            "from orsmga008.jf.intel.com ([10.7.209.65])\n by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 13 Oct 2021 09:31:07 -0700",
            "from silpixa00401122.ir.intel.com ([10.55.128.10])\n by orsmga008.jf.intel.com with ESMTP; 13 Oct 2021 09:31:06 -0700"
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6200,9189,10136\"; a=\"313670752\"",
            "E=Sophos;i=\"5.85,371,1624345200\"; d=\"scan'208\";a=\"313670752\"",
            "E=Sophos;i=\"5.85,371,1624345200\"; d=\"scan'208\";a=\"491541252\""
        ],
        "X-ExtLoop1": "1",
        "From": "Kevin Laatz <kevin.laatz@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "bruce.richardson@intel.com, fengchengwen@huawei.com, jerinj@marvell.com,\n conor.walsh@intel.com, Kevin Laatz <kevin.laatz@intel.com>",
        "Date": "Wed, 13 Oct 2021 16:30:41 +0000",
        "Message-Id": "<20211013163053.1033998-5-kevin.laatz@intel.com>",
        "X-Mailer": "git-send-email 2.30.2",
        "In-Reply-To": "<20211013163053.1033998-1-kevin.laatz@intel.com>",
        "References": "<20210827172048.558704-1-kevin.laatz@intel.com>\n <20211013163053.1033998-1-kevin.laatz@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH v7 04/16] dma/idxd: create dmadev instances on\n bus probe",
        "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": "When a suitable device is found during the bus scan/probe, create a dmadev\ninstance for each HW queue. Internal structures required for device\ncreation are also added.\n\nSigned-off-by: Bruce Richardson <bruce.richardson@intel.com>\nSigned-off-by: Kevin Laatz <kevin.laatz@intel.com>\nReviewed-by: Conor Walsh <conor.walsh@intel.com>\n---\n drivers/dma/idxd/idxd_bus.c      | 19 +++++++++\n drivers/dma/idxd/idxd_common.c   | 72 ++++++++++++++++++++++++++++++++\n drivers/dma/idxd/idxd_internal.h | 40 ++++++++++++++++++\n drivers/dma/idxd/meson.build     |  1 +\n 4 files changed, 132 insertions(+)\n create mode 100644 drivers/dma/idxd/idxd_common.c",
    "diff": "diff --git a/drivers/dma/idxd/idxd_bus.c b/drivers/dma/idxd/idxd_bus.c\nindex ef589af30e..b48fa954ed 100644\n--- a/drivers/dma/idxd/idxd_bus.c\n+++ b/drivers/dma/idxd/idxd_bus.c\n@@ -85,6 +85,18 @@ dsa_get_sysfs_path(void)\n \treturn path ? path : DSA_SYSFS_PATH;\n }\n \n+static int\n+idxd_dev_close(struct rte_dma_dev *dev)\n+{\n+\tstruct idxd_dmadev *idxd = dev->data->dev_private;\n+\tmunmap(idxd->portal, 0x1000);\n+\treturn 0;\n+}\n+\n+static const struct rte_dma_dev_ops idxd_bus_ops = {\n+\t\t.dev_close = idxd_dev_close,\n+};\n+\n static void *\n idxd_bus_mmap_wq(struct rte_dsa_device *dev)\n {\n@@ -206,6 +218,7 @@ idxd_probe_dsa(struct rte_dsa_device *dev)\n \t\treturn -1;\n \tidxd.max_batch_size = ret;\n \tidxd.qid = dev->addr.wq_id;\n+\tidxd.u.bus.dsa_id = dev->addr.device_id;\n \tidxd.sva_support = 1;\n \n \tidxd.portal = idxd_bus_mmap_wq(dev);\n@@ -214,6 +227,12 @@ idxd_probe_dsa(struct rte_dsa_device *dev)\n \t\treturn -ENOENT;\n \t}\n \n+\tret = idxd_dmadev_create(dev->wq_name, &dev->device, &idxd, &idxd_bus_ops);\n+\tif (ret) {\n+\t\tIDXD_PMD_ERR(\"Failed to create rawdev %s\", dev->wq_name);\n+\t\treturn ret;\n+\t}\n+\n \treturn 0;\n }\n \ndiff --git a/drivers/dma/idxd/idxd_common.c b/drivers/dma/idxd/idxd_common.c\nnew file mode 100644\nindex 0000000000..be8f684bd5\n--- /dev/null\n+++ b/drivers/dma/idxd/idxd_common.c\n@@ -0,0 +1,72 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright 2021 Intel Corporation\n+ */\n+\n+#include <rte_dmadev_pmd.h>\n+#include <rte_malloc.h>\n+#include <rte_common.h>\n+\n+#include \"idxd_internal.h\"\n+\n+#define IDXD_PMD_NAME_STR \"dmadev_idxd\"\n+\n+int\n+idxd_dmadev_create(const char *name, struct rte_device *dev,\n+\t\t   const struct idxd_dmadev *base_idxd,\n+\t\t   const struct rte_dma_dev_ops *ops)\n+{\n+\tstruct idxd_dmadev *idxd = NULL;\n+\tstruct rte_dma_dev *dmadev = NULL;\n+\tint ret = 0;\n+\n+\tif (!name) {\n+\t\tIDXD_PMD_ERR(\"Invalid name of the device!\");\n+\t\tret = -EINVAL;\n+\t\tgoto cleanup;\n+\t}\n+\n+\t/* Allocate device structure */\n+\tdmadev = rte_dma_pmd_allocate(name, dev->numa_node, sizeof(struct idxd_dmadev));\n+\tif (dmadev == NULL) {\n+\t\tIDXD_PMD_ERR(\"Unable to allocate raw device\");\n+\t\tret = -ENOMEM;\n+\t\tgoto cleanup;\n+\t}\n+\tdmadev->dev_ops = ops;\n+\tdmadev->device = dev;\n+\n+\tidxd = dmadev->data->dev_private;\n+\t*idxd = *base_idxd; /* copy over the main fields already passed in */\n+\tidxd->dmadev = dmadev;\n+\n+\t/* allocate batch index ring and completion ring.\n+\t * The +1 is because we can never fully use\n+\t * the ring, otherwise read == write means both full and empty.\n+\t */\n+\tidxd->batch_comp_ring = rte_zmalloc(NULL, (sizeof(idxd->batch_idx_ring[0]) +\n+\t\t\tsizeof(idxd->batch_comp_ring[0]))\t* (idxd->max_batches + 1),\n+\t\t\tsizeof(idxd->batch_comp_ring[0]));\n+\tif (idxd->batch_comp_ring == NULL) {\n+\t\tIDXD_PMD_ERR(\"Unable to reserve memory for batch data\\n\");\n+\t\tret = -ENOMEM;\n+\t\tgoto cleanup;\n+\t}\n+\tidxd->batch_idx_ring = (void *)&idxd->batch_comp_ring[idxd->max_batches+1];\n+\tidxd->batch_iova = rte_mem_virt2iova(idxd->batch_comp_ring);\n+\n+\tdmadev->fp_obj->dev_private = idxd;\n+\n+\tidxd->dmadev->state = RTE_DMA_DEV_READY;\n+\n+\treturn 0;\n+\n+cleanup:\n+\tif (dmadev)\n+\t\trte_dma_pmd_release(name);\n+\n+\treturn ret;\n+}\n+\n+int idxd_pmd_logtype;\n+\n+RTE_LOG_REGISTER_DEFAULT(idxd_pmd_logtype, WARNING);\ndiff --git a/drivers/dma/idxd/idxd_internal.h b/drivers/dma/idxd/idxd_internal.h\nindex c6a7dcd72f..fa6f053f72 100644\n--- a/drivers/dma/idxd/idxd_internal.h\n+++ b/drivers/dma/idxd/idxd_internal.h\n@@ -24,4 +24,44 @@ extern int idxd_pmd_logtype;\n #define IDXD_PMD_ERR(fmt, args...)    IDXD_PMD_LOG(ERR, fmt, ## args)\n #define IDXD_PMD_WARN(fmt, args...)   IDXD_PMD_LOG(WARNING, fmt, ## args)\n \n+struct idxd_dmadev {\n+\t/* counters to track the batches */\n+\tunsigned short max_batches;\n+\tunsigned short batch_idx_read;\n+\tunsigned short batch_idx_write;\n+\n+\t/* track descriptors and handles */\n+\tunsigned short desc_ring_mask;\n+\tunsigned short ids_avail; /* handles for ops completed */\n+\tunsigned short ids_returned; /* the read pointer for hdls/desc rings */\n+\tunsigned short batch_start; /* start+size == write pointer for hdls/desc */\n+\tunsigned short batch_size;\n+\n+\tvoid *portal; /* address to write the batch descriptor */\n+\n+\tstruct idxd_completion *batch_comp_ring;\n+\tunsigned short *batch_idx_ring; /* store where each batch ends */\n+\n+\tstruct rte_dma_stats stats;\n+\n+\trte_iova_t batch_iova; /* base address of the batch comp ring */\n+\trte_iova_t desc_iova; /* base address of desc ring, needed for completions */\n+\n+\tunsigned short max_batch_size;\n+\n+\tstruct rte_dma_dev *dmadev;\n+\tstruct rte_dma_vchan_conf qcfg;\n+\tuint8_t sva_support;\n+\tuint8_t qid;\n+\n+\tunion {\n+\t\tstruct {\n+\t\t\tunsigned int dsa_id;\n+\t\t} bus;\n+\t} u;\n+};\n+\n+int idxd_dmadev_create(const char *name, struct rte_device *dev,\n+\t\tconst struct idxd_dmadev *base_idxd, const struct rte_dma_dev_ops *ops);\n+\n #endif /* _IDXD_INTERNAL_H_ */\ndiff --git a/drivers/dma/idxd/meson.build b/drivers/dma/idxd/meson.build\nindex 45418077f4..da5dc2b019 100644\n--- a/drivers/dma/idxd/meson.build\n+++ b/drivers/dma/idxd/meson.build\n@@ -8,5 +8,6 @@ endif\n deps += ['bus_pci']\n sources = files(\n         'idxd_bus.c',\n+        'idxd_common.c',\n         'idxd_pci.c'\n )\n",
    "prefixes": [
        "v7",
        "04/16"
    ]
}