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 B88E2A04B6; Mon, 12 Oct 2020 10:13:05 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 213551D62A; Mon, 12 Oct 2020 10:12:49 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by dpdk.org (Postfix) with ESMTP id 1117A1D625 for ; Mon, 12 Oct 2020 10:12:45 +0200 (CEST) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 09C8BO8s002106; Mon, 12 Oct 2020 01:12:44 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=pfpt0220; bh=BrXrRx2I1yTRHodasPH2Jg8cJ7EmlEFVrY/o3Ah+ngA=; b=Igh4wmcCtbvwlFcZlVkh7WABqUWZ2MZkWeyWYVT5xW7Ai51wdPvPjYI2H8OuvEH4E21X 8ujsXFLVs+c+jDIgo1O0lIM3wkaO4SLAqXgJFjYL9gQeRfR9BsUqcc+ABcTtf8rPGG3d 5YIlRnH4v/mBPHuelo4SAy6iIMydjxGkH9T2u6VO3XZrIrutAiSXPl2RV8K256QytEBG yuvzlWKvdimNF5Zm5OEehMFF4spJNkTZK7jZL6RH/HUcd0+dBz7jdr+ZCCctbTxx2ked e2OogvhFlWPVzIJ7SDONLqnVAbqJRhZVUnODNHcVCyySqg5nENzOHb3iBkImLZWZWmfw kg== Received: from sc-exch01.marvell.com ([199.233.58.181]) by mx0a-0016f401.pphosted.com with ESMTP id 343aand9gm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 12 Oct 2020 01:12:44 -0700 Received: from DC5-EXCH02.marvell.com (10.69.176.39) 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:43 -0700 Received: from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 12 Oct 2020 01:12:42 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 12 Oct 2020 01:12:42 -0700 Received: from hyd1588t430.marvell.com (unknown [10.29.52.204]) by maili.marvell.com (Postfix) with ESMTP id F27083F7041; Mon, 12 Oct 2020 01:12:40 -0700 (PDT) From: Nithin Dabilpuram To: CC: , , Nithin Dabilpuram Date: Mon, 12 Oct 2020 13:41:05 +0530 Message-ID: <20201012081106.10610-2-ndabilpuram@marvell.com> X-Mailer: git-send-email 2.8.4 In-Reply-To: <20201012081106.10610-1-ndabilpuram@marvell.com> References: <20201012081106.10610-1-ndabilpuram@marvell.com> 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 1/2] test: add test case to validate VFIO DMA map/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" Add test case in test_memory to test VFIO DMA map/unmap. Signed-off-by: Nithin Dabilpuram --- app/test/test_memory.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/app/test/test_memory.c b/app/test/test_memory.c index 7d5ae99..1c56455 100644 --- a/app/test/test_memory.c +++ b/app/test/test_memory.c @@ -4,11 +4,16 @@ #include #include +#include +#include +#include #include +#include #include #include #include +#include #include "test.h" @@ -70,6 +75,71 @@ check_seg_fds(const struct rte_memseg_list *msl, const struct rte_memseg *ms, } static int +test_memory_vfio_dma_map(void) +{ + uint64_t sz = 2 * sysconf(_SC_PAGESIZE), sz1, sz2; + uint64_t unmap1, unmap2; + uint8_t *mem; + int ret; + + /* Check if vfio is enabled in both kernel and eal */ + ret = rte_vfio_is_enabled("vfio"); + if (!ret) + return 1; + + /* 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, + (uint64_t)mem, (rte_iova_t)mem, sz); + if (ret) { + printf("Failed to dma map whole region, ret=%d\n", ret); + 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 send half region, ret=%d(%d)\n", + ret, 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(%d)\n", ret, + rte_errno); + goto fail; + } + +fail: + munmap(mem, sz); + return ret; +} + +static int test_memory(void) { uint64_t s; @@ -101,6 +171,15 @@ test_memory(void) return -1; } + /* 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; } -- 2.8.4