From mboxrd@z Thu Jan 1 00:00:00 1970 From: Olivier Matz Subject: Re: [PATCH 1/8] eal: expose rte_eal_using_phys_addrs Date: Mon, 3 Jul 2017 10:25:00 +0200 Message-ID: <20170703102500.75cf7cd7@platinum> References: <138ba842ce615de6a6895f0ca74b5645aad48ad9.1496308649.git.gaetan.rivet@6wind.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Cc: Gaetan Rivet , dev To: Jan Blunck Return-path: Received: from mail-wm0-f41.google.com (mail-wm0-f41.google.com [74.125.82.41]) by dpdk.org (Postfix) with ESMTP id D7E0B2B99 for ; Mon, 3 Jul 2017 10:25:06 +0200 (CEST) Received: by mail-wm0-f41.google.com with SMTP id z75so36233186wmc.0 for ; Mon, 03 Jul 2017 01:25:06 -0700 (PDT) In-Reply-To: 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, On Fri, 30 Jun 2017 21:05:47 +0200, Jan Blunck wrot= e: > On Thu, Jun 1, 2017 at 12:14 PM, Gaetan Rivet wr= ote: > > This function was previously private to the EAL layer. > > Other subsystems requires it, such as the PCI bus. > > > > This function is only exposed for linuxapps. > > > > In order not to force other components to include stdbool, which is > > incompatible with several NIC drivers, the return type has > > been changed from bool to int. > > > > Signed-off-by: Gaetan Rivet > > --- > > lib/librte_eal/common/eal_private.h | 11 ----- > > lib/librte_eal/linuxapp/eal/Makefile | 2 + > > lib/librte_eal/linuxapp/eal/eal_memory.c | 3 +- > > lib/librte_eal/linuxapp/eal/eal_pci.c | 1 + > > lib/librte_eal/linuxapp/eal/rte_eal_version.map | 1 + > > lib/librte_eal/linuxapp/eal/rte_memory_linux.h | 64 +++++++++++++++++= ++++++++ > > 6 files changed, 70 insertions(+), 12 deletions(-) > > create mode 100644 lib/librte_eal/linuxapp/eal/rte_memory_linux.h > > > > diff --git a/lib/librte_eal/common/eal_private.h b/lib/librte_eal/commo= n/eal_private.h > > index 6d2206a..b7e4cc6 100644 > > --- a/lib/librte_eal/common/eal_private.h > > +++ b/lib/librte_eal/common/eal_private.h > > @@ -327,17 +327,6 @@ int rte_eal_hugepage_init(void); > > */ > > int rte_eal_hugepage_attach(void); > > > > -/** > > - * Returns true if the system is able to obtain > > - * physical addresses. Return false if using DMA > > - * addresses through an IOMMU. > > - * > > - * Drivers based on uio will not load unless physical > > - * addresses are obtainable. It is only possible to get > > - * physical addresses when running as a privileged user. > > - */ > > -bool rte_eal_using_phys_addrs(void); > > - > > /* > > * Validate a bus name. > > * > > diff --git a/lib/librte_eal/linuxapp/eal/Makefile b/lib/librte_eal/linu= xapp/eal/Makefile > > index 640afd0..530e286 100644 > > --- a/lib/librte_eal/linuxapp/eal/Makefile > > +++ b/lib/librte_eal/linuxapp/eal/Makefile > > @@ -131,4 +131,6 @@ INC :=3D rte_interrupts.h rte_kni_common.h rte_dom0= _common.h > > SYMLINK-$(CONFIG_RTE_EXEC_ENV_LINUXAPP)-include/exec-env :=3D \ > > $(addprefix include/exec-env/,$(INC)) > > > > +SYMLINK-$(CONFIG_RTE_EXEC_ENV_LINUXAPP)-include +=3D rte_memory_linux.h > > + > > include $(RTE_SDK)/mk/rte.lib.mk > > diff --git a/lib/librte_eal/linuxapp/eal/eal_memory.c b/lib/librte_eal/= linuxapp/eal/eal_memory.c > > index ebe0683..072bfe4 100644 > > --- a/lib/librte_eal/linuxapp/eal/eal_memory.c > > +++ b/lib/librte_eal/linuxapp/eal/eal_memory.c > > @@ -99,6 +99,7 @@ > > #include "eal_internal_cfg.h" > > #include "eal_filesystem.h" > > #include "eal_hugepages.h" > > +#include "rte_memory_linux.h" > > > > #define PFN_MASK_SIZE 8 > > > > @@ -1472,7 +1473,7 @@ rte_eal_hugepage_attach(void) > > return -1; > > } > > > > -bool > > +int > > rte_eal_using_phys_addrs(void) > > { > > return phys_addrs_available; > > diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c b/lib/librte_eal/lin= uxapp/eal/eal_pci.c > > index 595622b..9d5b051 100644 > > --- a/lib/librte_eal/linuxapp/eal/eal_pci.c > > +++ b/lib/librte_eal/linuxapp/eal/eal_pci.c > > @@ -45,6 +45,7 @@ > > #include "eal_filesystem.h" > > #include "eal_private.h" > > #include "eal_pci_init.h" > > +#include "rte_memory_linux.h" > > > > /** > > * @file > > diff --git a/lib/librte_eal/linuxapp/eal/rte_eal_version.map b/lib/libr= te_eal/linuxapp/eal/rte_eal_version.map > > index a5127d6..8916520 100644 > > --- a/lib/librte_eal/linuxapp/eal/rte_eal_version.map > > +++ b/lib/librte_eal/linuxapp/eal/rte_eal_version.map > > @@ -207,5 +207,6 @@ DPDK_17.08 { > > > > rte_bus_from_name; > > rte_bus_from_dev; > > + rte_eal_using_phys_addrs; =20 >=20 > Is this only for the UIO mapping? Would it be better to let UIO skip > (and warn?) over RTE_BAD_PHYS_ADDR mappings? That way we don't need > this export and its probably more resilient to bad mappings. >=20 > Thoughts? Olivier? =46rom what I see, rte_eal_using_phys_addrs() is used by: rte_eal_pci_map_device(struct rte_pci_device *dev) { ... case RTE_KDRV_IGB_UIO: case RTE_KDRV_UIO_GENERIC: if (rte_eal_using_phys_addrs()) { /* map resources for devices that use uio */ ret =3D pci_uio_map_resource(dev); } Looking at pci_uio_map_resource() and its callees, I'm not sure it's easy to replace it something else. The functions that would return RTE_BAD_PHYS_ADDR (virt2phy-like) are not called there.