On Thu, Jun 1, 2017 at 12:14 PM, Gaetan Rivet <gaetan.ri...@6wind.com> wrote: > 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 <gaetan.ri...@6wind.com> > --- > 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/common/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/linuxapp/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 := rte_interrupts.h rte_kni_common.h rte_dom0_common.h > SYMLINK-$(CONFIG_RTE_EXEC_ENV_LINUXAPP)-include/exec-env := \ > $(addprefix include/exec-env/,$(INC)) > > +SYMLINK-$(CONFIG_RTE_EXEC_ENV_LINUXAPP)-include += 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/linuxapp/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/librte_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;
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. Thoughts? Olivier? > > } DPDK_17.05; > diff --git a/lib/librte_eal/linuxapp/eal/rte_memory_linux.h > b/lib/librte_eal/linuxapp/eal/rte_memory_linux.h > new file mode 100644 > index 0000000..0400711 > --- /dev/null > +++ b/lib/librte_eal/linuxapp/eal/rte_memory_linux.h > @@ -0,0 +1,64 @@ > +/*- > + * BSD LICENSE > + * > + * Copyright(c) 2017 6WIND S.A. All rights reserved. > + * All rights reserved. > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * > + * * Redistributions of source code must retain the above copyright > + * notice, this list of conditions and the following disclaimer. > + * * Redistributions in binary form must reproduce the above copyright > + * notice, this list of conditions and the following disclaimer in > + * the documentation and/or other materials provided with the > + * distribution. > + * * Neither the name of 6WIND nor the names of its > + * contributors may be used to endorse or promote products derived > + * from this software without specific prior written permission. > + * > + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR > + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT > + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, > + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT > + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, > + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY > + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + */ > + > +#ifndef _RTE_MEMORY_LINUX_H_ > +#define _RTE_MEMORY_LINUX_H_ > + > +/** > + * @file > + * > + * Memory-related Linux-specific RTE API. > + */ > + > +#include <rte_memory.h> > + > +#ifdef __cplusplus > +extern "C" { > +#endif > + > +/** > + * 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. > + * > + * @return > + * 1 if the system is able to obtain physical addresses. > + * 0 if using DMA addresses through an IOMMU. > + */ > +int rte_eal_using_phys_addrs(void); > + > +#ifdef __cplusplus > +} > +#endif > + > +#endif /* _RTE_MEMORY_LINUX_H_ */ > -- > 2.1.4 >