From: Nithin Dabilpuram <ndabilpuram@marvell.com> To: <anatoly.burakov@intel.com> Cc: <jerinj@marvell.com>, <dev@dpdk.org>, Nithin Dabilpuram <ndabilpuram@marvell.com> Subject: [dpdk-dev] [PATCH v2 3/3] test: add test case to validate VFIO DMA map/unmap Date: Thu, 5 Nov 2020 14:34:23 +0530 Message-ID: <20201105090423.11954-4-ndabilpuram@marvell.com> (raw) In-Reply-To: <20201105090423.11954-1-ndabilpuram@marvell.com> Test case mmap's system pages and tries to performs a user DMA map and unmap both partially and fully. Signed-off-by: Nithin Dabilpuram <ndabilpuram@marvell.com> --- app/test/meson.build | 1 + app/test/test_vfio.c | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 app/test/test_vfio.c diff --git a/app/test/meson.build b/app/test/meson.build index 88c831a..b0411ee 100644 --- a/app/test/meson.build +++ b/app/test/meson.build @@ -139,6 +139,7 @@ test_sources = files('commands.c', 'test_trace_register.c', 'test_trace_perf.c', 'test_version.c', + 'test_vfio.c', 'virtual_pmd.c' ) diff --git a/app/test/test_vfio.c b/app/test/test_vfio.c new file mode 100644 index 0000000..00626d4 --- /dev/null +++ b/app/test/test_vfio.c @@ -0,0 +1,103 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2020 Marvell. + */ + +#include <stdio.h> +#include <stdint.h> +#include <string.h> +#include <sys/mman.h> +#include <unistd.h> + +#include <rte_common.h> +#include <rte_eal.h> +#include <rte_eal_paging.h> +#include <rte_errno.h> +#include <rte_memory.h> +#include <rte_vfio.h> + +#include "test.h" + +static int +test_memory_vfio_dma_map(void) +{ + uint64_t sz1, sz2, sz = 2 * rte_mem_page_size(); + uint64_t unmap1, unmap2; + uint8_t *mem; + int ret; + + /* Allocate twice size of page */ + mem = mmap(NULL, sz, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + if (mem == MAP_FAILED) { + printf("Failed to allocate memory for external heap\n"); + return -1; + } + + /* Force page allocation */ + memset(mem, 0, sz); + + /* map the whole region */ + ret = rte_vfio_container_dma_map(RTE_VFIO_DEFAULT_CONTAINER_FD, + (uintptr_t)mem, (rte_iova_t)mem, sz); + if (ret) { + /* Check if VFIO is not available or no device is probed */ + if (rte_errno == ENOTSUP || rte_errno == ENODEV) { + ret = 1; + goto fail; + } + printf("Failed to dma map whole region, ret=%d(%s)\n", + ret, rte_strerror(rte_errno)); + goto fail; + } + + unmap1 = (uint64_t)mem + (sz / 2); + sz1 = sz / 2; + unmap2 = (uint64_t)mem; + sz2 = sz / 2; + /* unmap the partial region */ + ret = rte_vfio_container_dma_unmap(RTE_VFIO_DEFAULT_CONTAINER_FD, + unmap1, (rte_iova_t)unmap1, sz1); + if (ret) { + if (rte_errno == ENOTSUP) { + printf("Partial dma unmap not supported\n"); + unmap2 = (uint64_t)mem; + sz2 = sz; + } else { + printf("Failed to unmap second half region, ret=%d(%s)\n", + ret, rte_strerror(rte_errno)); + goto fail; + } + } + + /* unmap the remaining region */ + ret = rte_vfio_container_dma_unmap(RTE_VFIO_DEFAULT_CONTAINER_FD, + unmap2, (rte_iova_t)unmap2, sz2); + if (ret) { + printf("Failed to unmap remaining region, ret=%d(%s)\n", ret, + rte_strerror(rte_errno)); + goto fail; + } + +fail: + munmap(mem, sz); + return ret; +} + +static int +test_vfio(void) +{ + int ret; + + /* test for vfio dma map/unmap */ + ret = test_memory_vfio_dma_map(); + if (ret == 1) { + printf("VFIO dma map/unmap unsupported\n"); + } else if (ret < 0) { + printf("Error vfio dma map/unmap, ret=%d\n", ret); + return -1; + } + + return 0; +} + +REGISTER_TEST_COMMAND(vfio_autotest, test_vfio); -- 2.8.4
next prev parent reply other threads:[~2020-11-05 9:05 UTC|newest] Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-10-12 8:11 [dpdk-dev] [PATCH 0/2] fix issue with partial DMA unmap Nithin Dabilpuram 2020-10-12 8:11 ` [dpdk-dev] [PATCH 1/2] test: add test case to validate VFIO DMA map/unmap Nithin Dabilpuram 2020-10-14 14:39 ` Burakov, Anatoly 2020-10-15 9:54 ` [dpdk-dev] [EXT] " Nithin Dabilpuram 2020-10-12 8:11 ` [dpdk-dev] [PATCH 2/2] vfio: fix partial DMA unmapping for VFIO type1 Nithin Dabilpuram 2020-10-14 15:07 ` Burakov, Anatoly 2020-10-15 6:09 ` [dpdk-dev] [EXT] " Nithin Dabilpuram 2020-10-15 10:00 ` Burakov, Anatoly 2020-10-15 11:38 ` Nithin Dabilpuram 2020-10-15 11:50 ` Nithin Dabilpuram 2020-10-15 11:57 ` Nithin Dabilpuram 2020-10-15 15:10 ` Burakov, Anatoly 2020-10-16 7:10 ` Nithin Dabilpuram 2020-10-17 16:14 ` Burakov, Anatoly 2020-10-19 9:43 ` Nithin Dabilpuram 2020-10-22 12:13 ` Nithin Dabilpuram 2020-10-28 13:04 ` Burakov, Anatoly 2020-10-28 14:17 ` Nithin Dabilpuram 2020-10-28 16:07 ` Burakov, Anatoly 2020-10-28 16:31 ` Nithin Dabilpuram 2020-11-05 9:04 ` [dpdk-dev] [PATCH v2 0/3] fix issue with partial DMA unmap Nithin Dabilpuram 2020-11-05 9:04 ` [dpdk-dev] [PATCH v2 1/3] vfio: revert changes for map contiguous areas in one go Nithin Dabilpuram 2020-11-05 9:04 ` [dpdk-dev] [PATCH v2 2/3] vfio: fix DMA mapping granularity for type1 iova as va Nithin Dabilpuram 2020-11-10 14:04 ` Burakov, Anatoly 2020-11-10 14:22 ` Burakov, Anatoly 2020-11-10 14:17 ` Burakov, Anatoly 2020-11-11 5:08 ` Nithin Dabilpuram 2020-11-11 10:00 ` Burakov, Anatoly 2020-11-05 9:04 ` Nithin Dabilpuram [this message] 2020-12-01 19:32 ` [dpdk-dev] [PATCH v3 0/4] fix issue with partial DMA unmap Nithin Dabilpuram 2020-12-01 19:32 ` [dpdk-dev] [PATCH v3 1/4] vfio: revert changes for map contiguous areas in one go Nithin Dabilpuram 2020-12-01 19:33 ` [dpdk-dev] [PATCH v3 2/4] vfio: fix DMA mapping granularity for type1 IOVA as VA Nithin Dabilpuram 2020-12-01 19:33 ` [dpdk-dev] [PATCH v3 3/4] test: add test case to validate VFIO DMA map/unmap Nithin Dabilpuram 2020-12-01 19:33 ` [dpdk-dev] [PATCH v3 4/4] test: change external memory test to use system page sz Nithin Dabilpuram 2020-12-01 23:23 ` David Christensen 2020-12-02 5:40 ` Nithin Dabilpuram 2020-12-02 5:46 ` [dpdk-dev] [PATCH v4 0/4] fix issue with partial DMA unmap Nithin Dabilpuram 2020-12-02 5:46 ` [dpdk-dev] [PATCH v4 1/4] vfio: revert changes for map contiguous areas in one go Nithin Dabilpuram 2020-12-02 18:36 ` David Christensen 2020-12-02 5:46 ` [dpdk-dev] [PATCH v4 2/4] vfio: fix DMA mapping granularity for type1 IOVA as VA Nithin Dabilpuram 2020-12-02 18:38 ` David Christensen 2020-12-02 5:46 ` [dpdk-dev] [PATCH v4 3/4] test: add test case to validate VFIO DMA map/unmap Nithin Dabilpuram 2020-12-02 19:23 ` David Christensen 2020-12-03 7:14 ` Nithin Dabilpuram 2020-12-14 8:24 ` Nithin Dabilpuram 2020-12-02 5:46 ` [dpdk-dev] [PATCH v4 4/4] test: change external memory test to use system page sz Nithin Dabilpuram 2020-12-14 8:19 ` [dpdk-dev] [PATCH v5 0/4] fix issue with partial DMA unmap Nithin Dabilpuram 2020-12-14 8:19 ` [dpdk-dev] [PATCH v5 1/4] vfio: revert changes for map contiguous areas in one go Nithin Dabilpuram 2020-12-14 8:19 ` [dpdk-dev] [PATCH v5 2/4] vfio: fix DMA mapping granularity for type1 IOVA as VA Nithin Dabilpuram 2020-12-14 8:19 ` [dpdk-dev] [PATCH v5 3/4] test: add test case to validate VFIO DMA map/unmap Nithin Dabilpuram 2020-12-14 8:19 ` [dpdk-dev] [PATCH v5 4/4] test: change external memory test to use system page sz Nithin Dabilpuram 2020-12-17 19:06 ` [dpdk-dev] [PATCH v6 0/4] fix issue with partial DMA unmap Nithin Dabilpuram 2020-12-17 19:06 ` [dpdk-dev] [PATCH v6 1/4] vfio: revert changes for map contiguous areas in one go Nithin Dabilpuram 2020-12-17 19:06 ` [dpdk-dev] [PATCH v6 2/4] vfio: fix DMA mapping granularity for type1 IOVA as VA Nithin Dabilpuram 2020-12-17 19:06 ` [dpdk-dev] [PATCH v6 3/4] test: add test case to validate VFIO DMA map/unmap Nithin Dabilpuram 2020-12-17 19:10 ` Nithin Dabilpuram 2021-01-05 19:33 ` David Christensen 2021-01-06 8:40 ` Nithin Dabilpuram 2021-01-06 21:20 ` David Christensen 2020-12-17 19:06 ` [dpdk-dev] [PATCH v6 4/4] test: change external memory test to use system page sz Nithin Dabilpuram 2020-12-23 5:13 ` [dpdk-dev] [PATCH v6 0/4] fix issue with partial DMA unmap Nithin Dabilpuram 2021-01-04 22:29 ` David Christensen 2021-01-12 17:39 ` [dpdk-dev] [PATCH v7 0/3] " Nithin Dabilpuram 2021-01-12 17:39 ` [dpdk-dev] [PATCH v7 1/3] vfio: revert changes for map contiguous areas in one go Nithin Dabilpuram 2021-01-12 17:39 ` [dpdk-dev] [PATCH v7 2/3] vfio: fix DMA mapping granularity for type1 IOVA as VA Nithin Dabilpuram 2021-01-12 17:39 ` [dpdk-dev] [PATCH v7 3/3] test: change external memory test to use system page sz Nithin Dabilpuram 2021-01-14 16:30 ` David Marchand 2021-01-15 6:57 ` Nithin Dabilpuram 2021-01-15 7:32 ` [dpdk-dev] [PATCH v8 0/3] fix issue with partial DMA unmap Nithin Dabilpuram 2021-01-15 7:32 ` [dpdk-dev] [PATCH v8 1/3] vfio: revert changes for map contiguous areas in one go Nithin Dabilpuram 2021-01-15 7:32 ` [dpdk-dev] [PATCH v8 2/3] vfio: fix DMA mapping granularity for type1 IOVA as VA Nithin Dabilpuram 2021-01-15 7:32 ` [dpdk-dev] [PATCH v8 3/3] test: change external memory test to use system page sz Nithin Dabilpuram
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20201105090423.11954-4-ndabilpuram@marvell.com \ --to=ndabilpuram@marvell.com \ --cc=anatoly.burakov@intel.com \ --cc=dev@dpdk.org \ --cc=jerinj@marvell.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
DPDK patches and discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://inbox.dpdk.org/dev/0 dev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 dev dev/ http://inbox.dpdk.org/dev \ dev@dpdk.org public-inbox-index dev Example config snippet for mirrors. Newsgroup available over NNTP: nntp://inbox.dpdk.org/inbox.dpdk.dev AGPL code for this site: git clone https://public-inbox.org/public-inbox.git