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 B2247A09F6; Thu, 17 Dec 2020 20:11:01 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 300EECA4C; Thu, 17 Dec 2020 20:11:00 +0100 (CET) Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) by dpdk.org (Postfix) with ESMTP id C3228CA49 for ; Thu, 17 Dec 2020 20:10:56 +0100 (CET) Received: by mail-pf1-f175.google.com with SMTP id 11so19617081pfu.4 for ; Thu, 17 Dec 2020 11:10:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=I3+Rn0DsA7joc6F6NobYfXx5lENDtY2qzauj3Gg2wZQ=; b=HFDaP8AO+8WFTd349KV83fAtLnOFOR95nyPlzfLLK9S6C9CDrn7mTNqWGSljMStQlj QAQcV1SLQACwfGn+LQijoP0dCQ1buDEHtdst9bKXBEsBaBRJ5PNDg4E720wHZzD2qFma PLBnQElnUcM63sph5VcoNwvTvVlyY63PD2hYeOVInlZGE89F9z/5I2sx1865OPKEGvnV Gcvw8l7ebeTO7fWe9gm05OokhOgToipsnWkUSQnCT0OMo0HssMDPnJRY+2QN6Ck+U4uc 84HKjBU0QHGbZS7avP+b0BJm8ikMAdN4+TbnEEQYwoxlXadBid+ahie2aoJpbD3SYCA1 jeAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=I3+Rn0DsA7joc6F6NobYfXx5lENDtY2qzauj3Gg2wZQ=; b=VFYad+DIUQXUhfsmMm/edkXukuaAEeZF5kFuOFIoSGCVdUeCC9WCZjeMt63U1dtJiL bGclCJzllod7my5yz0SLGcCyiWKbCaZoOn5lsI9sPJeaHmu3L7EBbk1upfgTRMKTBPI5 cUDVayEyTx1Rju1pUN/H8dwW/Du6JAtGtF3wjwAS8GMyiB3tq0lkQdbD4W8orXcBEywp lq2qELBOW0btzvqhQavGuI8XFAZ2MTmEepEhacUswIcAv48n0Me7GIbl4vm/46I6Y2WA iPQtoDnI7j9ZpmQphMzOLBvXlr5Tux5WbhABTd4lSU6G0ia/tmPzy7aeH9FThjYTQAas 6S7g== X-Gm-Message-State: AOAM532WLK8qwRldacPnqTZRIhaNbf2cAuRXeUsp4BOXYIT6NVx2JmJS pklS1PsWxTURkdvNCQpx0mfXwYNXliTKBQ== X-Google-Smtp-Source: ABdhPJwMLWyAp6oINgEhtqyeZnZTAa3Ocu0o6An/gIQqDCYEifb/YgXK41n39tiDHqHTR+wlYbtvJw== X-Received: by 2002:a62:15d2:0:b029:1a1:c2f2:e851 with SMTP id 201-20020a6215d20000b02901a1c2f2e851mr693466pfv.7.1608232256028; Thu, 17 Dec 2020 11:10:56 -0800 (PST) Received: from gmail.com ([1.6.215.26]) by smtp.gmail.com with ESMTPSA id f7sm5557641pjs.25.2020.12.17.11.10.53 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 17 Dec 2020 11:10:55 -0800 (PST) Date: Fri, 18 Dec 2020 00:40:51 +0530 From: Nithin Dabilpuram To: anatoly.burakov@intel.com, David Christensen , david.marchand@redhat.com Cc: jerinj@marvell.com, dev@dpdk.org Message-ID: References: <20201012081106.10610-1-ndabilpuram@marvell.com> <20201217190604.29803-1-ndabilpuram@marvell.com> <20201217190604.29803-4-ndabilpuram@marvell.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20201217190604.29803-4-ndabilpuram@marvell.com> Subject: Re: [dpdk-dev] [PATCH v6 3/4] 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" Hi David Christensen, Ping. Let me know if this way of allocation from heap is fine with POWER9 system. On Fri, Dec 18, 2020 at 12:36:03AM +0530, Nithin Dabilpuram wrote: > Test case alloc's system pages and tries to performs a user > DMA map and unmap both partially and fully. > > Signed-off-by: Nithin Dabilpuram > Acked-by: Anatoly Burakov > --- > app/test/meson.build | 1 + > app/test/test_vfio.c | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 108 insertions(+) > create mode 100644 app/test/test_vfio.c > > diff --git a/app/test/meson.build b/app/test/meson.build > index 94fd39f..d9eedb6 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..c35efed > --- /dev/null > +++ b/app/test/test_vfio.c > @@ -0,0 +1,107 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright(C) 2020 Marvell. > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > + > +#include > +#include > +#include > +#include > +#include > +#include > + > +#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 *alloc_mem; > + uint8_t *mem; > + int ret; > + > + /* Allocate twice size of requirement from heap to align later */ > + alloc_mem = malloc(sz * 2); > + if (!alloc_mem) { > + printf("Skipping test as unable to alloc %"PRIx64"B from heap\n", > + sz * 2); > + return 1; > + } > + > + /* Force page allocation */ > + memset(alloc_mem, 0, sz * 2); > + > + mem = RTE_PTR_ALIGN(alloc_mem, rte_mem_page_size()); > + > + /* 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: > + free(alloc_mem); > + 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 >