From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 11261A04B6; Mon, 12 Oct 2020 10:12:47 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C787C1D609; Mon, 12 Oct 2020 10:12:45 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by dpdk.org (Postfix) with ESMTP id 7425D1D5E3 for ; Mon, 12 Oct 2020 10:12:43 +0200 (CEST) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 09C8B7DJ020244; Mon, 12 Oct 2020 01:12:42 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : mime-version : content-type; s=pfpt0220; bh=7KcJy8R4C50y6EuBffJIsKk7Y0oM2uQOQHNZV89DKuM=; b=Mr31jQdIj+tqaC8gjvKpG32KT7OnFSdb+bpA2qb6QoapxatY7E62PJvXBfgXpGr/lG95 L1FyQA7E6ToOZzw4FKHNWcjSkfeF/pKh7827PeDP1eORC7gqwsHs6Hh18soNtNjoI0so Xo25cTAU1FUq1q4ulGRjvEsj3afo9DoBI0W5AwEUv7QQhwxbzeCXliNCsxb7zVWa9RSM knPodctdRNGlHg7XgMaIXgAspnRyq3nqVkSey3q1zJ/EX6KFXADJaE3blAUohNLm7YNW MkQkw0LS75K4VYb1LlEkPXhaLTycYmew1Bi50YjaKFYhlZZzaZiE+fYcZjKnvLJY054D VA== Received: from sc-exch01.marvell.com ([199.233.58.181]) by mx0b-0016f401.pphosted.com with ESMTP id 343cfj4tgy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 12 Oct 2020 01:12:42 -0700 Received: from DC5-EXCH01.marvell.com (10.69.176.38) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 12 Oct 2020 01:12:41 -0700 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 12 Oct 2020 01:12:40 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 12 Oct 2020 01:12:40 -0700 Received: from hyd1588t430.marvell.com (unknown [10.29.52.204]) by maili.marvell.com (Postfix) with ESMTP id C6BB63F703F; Mon, 12 Oct 2020 01:12:38 -0700 (PDT) From: Nithin Dabilpuram To: CC: , , Nithin Dabilpuram Date: Mon, 12 Oct 2020 13:41:04 +0530 Message-ID: <20201012081106.10610-1-ndabilpuram@marvell.com> X-Mailer: git-send-email 2.8.4 MIME-Version: 1.0 Content-Type: text/plain X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.235, 18.0.687 definitions=2020-10-12_03:2020-10-12, 2020-10-12 signatures=0 Subject: [dpdk-dev] [PATCH 0/2] fix issue with partial DMA unmap X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 fixe 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() Nithin Dabilpuram (2): test: add test case to validate VFIO DMA map/unmap vfio: fix partial DMA unmapping for VFIO type1 app/test/test_memory.c | 79 +++++++++++++++++++++++++++++++++++++++++ lib/librte_eal/linux/eal_vfio.c | 34 ++++++++++++++---- lib/librte_eal/linux/eal_vfio.h | 1 + 3 files changed, 108 insertions(+), 6 deletions(-) -- 2.8.4