On Fri, Feb 21, 2020 at 4:22 AM David Wilder <dwil...@us.ibm.com> wrote: > > If --no-huge is set and iova-mode has not been specified force VA mode. > If --no-huge and --iova-mode=PA is requested error out as this is > an impossible configuration. > > Signed-off-by: David Wilder <dwil...@us.ibm.com> > --- > lib/librte_eal/linux/eal/eal.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/lib/librte_eal/linux/eal/eal.c b/lib/librte_eal/linux/eal/eal.c > index 9530ee55f..d3a0a1731 100644 > --- a/lib/librte_eal/linux/eal/eal.c > +++ b/lib/librte_eal/linux/eal/eal.c > @@ -1062,9 +1062,16 @@ rte_eal_init(int argc, char **argv) > > /* if no EAL option "--iova-mode=<pa|va>", use bus IOVA scheme */ > if (internal_config.iova_mode == RTE_IOVA_DC) { > + > /* autodetect the IOVA mapping mode */ > enum rte_iova_mode iova_mode = rte_bus_get_iommu_class(); > > + if (iova_mode == RTE_IOVA_PA && !rte_eal_has_hugepages()) { > + iova_mode = RTE_IOVA_VA;
What if igb_uio or vfio_nommu has been loaded(i.e no iommu support enabled from the driver)? This would fail. > + RTE_LOG(WARNING, EAL, "Some buses want 'PA' but > forcing 'VA' because --no-huge is requested.\n"); > + RTE_LOG(WARNING, EAL, "Not all buses may be able to > initialize.\n"); > + } > + > if (iova_mode == RTE_IOVA_DC) { > RTE_LOG(DEBUG, EAL, "Buses did not request a specific > IOVA mode.\n"); > > @@ -1111,6 +1118,13 @@ rte_eal_init(int argc, char **argv) > internal_config.iova_mode; > } > > + if (rte_eal_iova_mode() == RTE_IOVA_PA && > + rte_eal_has_hugepages() == 0) { > + rte_eal_init_alert("Cannot use IOVA as 'PA' with --no-huge"); Top of the tree already detecting this case. am I missing anything? [master]dell[dpdk.org] $ sudo ./build/app/test/dpdk-test -c 0x3 --no-huge --iova-mode=pa EAL: Detected 56 lcore(s) EAL: Detected 2 NUMA nodes EAL: Static memory layout is selected, amount of reserved memory can be adjusted with -m or --socket-mem EAL: Multi-process socket /var/run/dpdk/rte/mp_socket EAL: FATAL: Cannot use IOVA as 'PA' since physical addresses are not available EAL: Cannot use IOVA as 'PA' since physical addresses are not available > + rte_errno = EINVAL; > + return -1; > + } > + > if (rte_eal_iova_mode() == RTE_IOVA_PA && !phys_addrs) { > rte_eal_init_alert("Cannot use IOVA as 'PA' since physical > addresses are not available"); > rte_errno = EINVAL; > -- > 2.25.0 >