* [dpdk-test-report] |WARNING| pw98589 [PATCH] [v1, 1/1] vfio: add page-by-page mapping API
@ 2021-09-10 13:28 dpdklab
0 siblings, 0 replies; only message in thread
From: dpdklab @ 2021-09-10 13:28 UTC (permalink / raw)
To: test-report; +Cc: dpdk-test-reports
[-- Attachment #1: Type: text/plain, Size: 5669 bytes --]
Test-Label: iol-testing
Test-Status: WARNING
http://dpdk.org/patch/98589
_apply patch failure_
Submitter: Burakov, Anatoly <anatoly.burakov@intel.com>
Date: Friday, September 10 2021 11:27:35
Applied on: CommitID:b344eb5d941a7522ff27b6b7b5419f68c3fea9a0
Apply patch set 98589 failed:
Checking patch lib/eal/freebsd/eal.c...
Checking patch lib/eal/include/rte_vfio.h...
Checking patch lib/eal/linux/eal_vfio.c...
error: while searching for:
static int
container_dma_map(struct vfio_config *vfio_cfg, uint64_t vaddr, uint64_t iova,
uint64_t len)
{
struct user_mem_map *new_map;
struct user_mem_maps *user_mem_maps;
bool has_partial_unmap;
int ret = 0;
user_mem_maps = &vfio_cfg->mem_maps;
error: patch failed: lib/eal/linux/eal_vfio.c:1872
error: while searching for:
ret = -1;
goto out;
}
/* map the entry */
if (vfio_dma_mem_map(vfio_cfg, vaddr, iova, len, 1)) {
/* technically, this will fail if there are currently no devices
* plugged in, even if a device were added later, this mapping
* might have succeeded. however, since we cannot verify if this
* is a valid mapping without having a device attached, consider
* this to be unsupported, because we can't just store any old
* mapping and pollute list of active mappings willy-nilly.
*/
RTE_LOG(ERR, EAL, "Couldn't map new region for DMA\n");
ret = -1;
goto out;
}
/* do we have partial unmap support? */
has_partial_unmap = vfio_cfg->vfio_iommu_type->partial_unmap;
error: patch failed: lib/eal/linux/eal_vfio.c:1887
error: while searching for:
new_map->addr = vaddr;
new_map->iova = iova;
new_map->len = len;
/* for IOMMU types supporting partial unmap, we don't need chunking */
new_map->chunk = has_partial_unmap ? 0 : len;
compact_user_maps(user_mem_maps);
out:
error: patch failed: lib/eal/linux/eal_vfio.c:1908
Hunk #4 succeeded at 2061 (offset -147 lines).
Hunk #5 succeeded at 2203 (offset -147 lines).
Checking patch lib/eal/version.map...
Checking patch lib/eal/windows/eal.c...
Applied patch lib/eal/freebsd/eal.c cleanly.
Applied patch lib/eal/include/rte_vfio.h cleanly.
Applying patch lib/eal/linux/eal_vfio.c with 3 rejects...
Rejected hunk #1.
Rejected hunk #2.
Rejected hunk #3.
Hunk #4 applied cleanly.
Hunk #5 applied cleanly.
Applied patch lib/eal/version.map cleanly.
Applied patch lib/eal/windows/eal.c cleanly.
diff a/lib/eal/linux/eal_vfio.c b/lib/eal/linux/eal_vfio.c (rejected hunks)
@@ -1872,11 +1872,12 @@ vfio_dma_mem_map(struct vfio_config *vfio_cfg, uint64_t vaddr, uint64_t iova,
static int
container_dma_map(struct vfio_config *vfio_cfg, uint64_t vaddr, uint64_t iova,
- uint64_t len)
+ uint64_t len, uint64_t pagesz)
{
struct user_mem_map *new_map;
struct user_mem_maps *user_mem_maps;
bool has_partial_unmap;
+ uint64_t chunk_size;
int ret = 0;
user_mem_maps = &vfio_cfg->mem_maps;
@@ -1887,19 +1888,37 @@ container_dma_map(struct vfio_config *vfio_cfg, uint64_t vaddr, uint64_t iova,
ret = -1;
goto out;
}
- /* map the entry */
- if (vfio_dma_mem_map(vfio_cfg, vaddr, iova, len, 1)) {
- /* technically, this will fail if there are currently no devices
- * plugged in, even if a device were added later, this mapping
- * might have succeeded. however, since we cannot verify if this
- * is a valid mapping without having a device attached, consider
- * this to be unsupported, because we can't just store any old
- * mapping and pollute list of active mappings willy-nilly.
- */
- RTE_LOG(ERR, EAL, "Couldn't map new region for DMA\n");
- ret = -1;
- goto out;
+
+ /* technically, mapping will fail if there are currently no devices
+ * plugged in, even if a device were added later, this mapping might
+ * have succeeded. however, since we cannot verify if this is a valid
+ * mapping without having a device attached, consider this to be
+ * unsupported, because we can't just store any old mapping and pollute
+ * list of active mappings willy-nilly.
+ */
+
+ /* if page size was not specified, map the entire segment in one go */
+ if (pagesz == 0) {
+ if (vfio_dma_mem_map(vfio_cfg, vaddr, iova, len, 1)) {
+ RTE_LOG(ERR, EAL, "Couldn't map new region for DMA\n");
+ ret = -1;
+ goto out;
+ }
+ } else {
+ /* otherwise, do mappings page-by-page */
+ uint64_t offset;
+
+ for (offset = 0; offset < len; offset += pagesz) {
+ uint64_t va = vaddr + offset;
+ uint64_t io = iova + offset;
+ if (vfio_dma_mem_map(vfio_cfg, va, io, pagesz, 1)) {
+ RTE_LOG(ERR, EAL, "Couldn't map new region for DMA\n");
+ ret = -1;
+ goto out;
+ }
+ }
}
+
/* do we have partial unmap support? */
has_partial_unmap = vfio_cfg->vfio_iommu_type->partial_unmap;
@@ -1908,8 +1927,18 @@ container_dma_map(struct vfio_config *vfio_cfg, uint64_t vaddr, uint64_t iova,
new_map->addr = vaddr;
new_map->iova = iova;
new_map->len = len;
- /* for IOMMU types supporting partial unmap, we don't need chunking */
- new_map->chunk = has_partial_unmap ? 0 : len;
+
+ /*
+ * Chunking essentially serves largely the same purpose as page sizes,
+ * so for the purposes of this calculation, we treat them as the same.
+ * The reason we have page sizes is because we want to map things in a
+ * way that allows us to partially unmap later. Therefore, when IOMMU
+ * supports partial unmap, page size is irrelevant and can be ignored.
+ * For IOMMU that don't support partial unmap, page size is equivalent
+ * to chunk size.
+ */
+ chunk_size = pagesz == 0 ? len : pagesz;
+ new_map->chunk = has_partial_unmap ? 0 : chunk_size;
compact_user_maps(user_mem_maps);
out:
https://lab.dpdk.org/results/dashboard/patchsets/18675/
UNH-IOL DPDK Community Lab
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2021-09-10 13:28 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-10 13:28 [dpdk-test-report] |WARNING| pw98589 [PATCH] [v1, 1/1] vfio: add page-by-page mapping API dpdklab
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).