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 0/3] fix issue with partial DMA unmap Date: Thu, 5 Nov 2020 14:34:20 +0530 Message-ID: <20201105090423.11954-1-ndabilpuram@marvell.com> (raw) In-Reply-To: <20201012081106.10610-1-ndabilpuram@marvell.com> Partial DMA unmap is not supported by VFIO type1 IOMMU in Linux. Though the return value is zero, the returned DMA unmap size is not same as expected size. So add test case and fix to both heap triggered DMA mapping and user triggered DMA mapping/unmapping. Refer vfio_dma_do_unmap() in drivers/vfio/vfio_iommu_type1.c Snippet of comment is below. /* * vfio-iommu-type1 (v1) - User mappings were coalesced together to * avoid tracking individual mappings. This means that the granularity * of the original mapping was lost and the user was allowed to attempt * to unmap any range. Depending on the contiguousness of physical * memory and page sizes supported by the IOMMU, arbitrary unmaps may * or may not have worked. We only guaranteed unmap granularity * matching the original mapping; even though it was untracked here, * the original mappings are reflected in IOMMU mappings. This * resulted in a couple unusual behaviors. First, if a range is not * able to be unmapped, ex. a set of 4k pages that was mapped as a * 2M hugepage into the IOMMU, the unmap ioctl returns success but with * a zero sized unmap. Also, if an unmap request overlaps the first * address of a hugepage, the IOMMU will unmap the entire hugepage. * This also returns success and the returned unmap size reflects the * actual size unmapped. * We attempt to maintain compatibility with this "v1" interface, but * we take control out of the hands of the IOMMU. Therefore, an unmap * request offset from the beginning of the original mapping will * return success with zero sized unmap. And an unmap request covering * the first iova of mapping will unmap the entire range. This behavior can be verified by using first patch and add return check for dma_unmap.size != len in vfio_type1_dma_mem_map() v2: - Reverted earlier commit that enables mergin contiguous mapping for IOVA as PA. (see 1/3) - Updated documentation about kernel dma mapping limits and vfio module parameter. - Moved vfio test to test_vfio.c and handled comments from Anatoly. Nithin Dabilpuram (3): vfio: revert changes for map contiguous areas in one go vfio: fix DMA mapping granularity for type1 iova as va test: add test case to validate VFIO DMA map/unmap app/test/meson.build | 1 + app/test/test_vfio.c | 103 +++++++++++++++++++++++++++++++++ doc/guides/linux_gsg/linux_drivers.rst | 10 ++++ lib/librte_eal/linux/eal_vfio.c | 93 ++++++++++++----------------- lib/librte_eal/linux/eal_vfio.h | 1 + 5 files changed, 151 insertions(+), 57 deletions(-) create mode 100644 app/test/test_vfio.c -- 2.8.4
next prev parent reply other threads:[~2020-11-05 9:04 UTC|newest] Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-10-12 8:11 [dpdk-dev] [PATCH 0/2] " 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 ` Nithin Dabilpuram [this message] 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 ` [dpdk-dev] [PATCH v2 3/3] test: add test case to validate VFIO DMA map/unmap Nithin Dabilpuram 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-1-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