Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/101383/?format=api
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" ] }{ "id": 101383, "url": "