eal: compute IOVA mode based on PA availability
authorBen Walker <benjamin.walker@intel.com>
Fri, 14 Jun 2019 09:39:16 +0000 (11:39 +0200)
committerThomas Monjalon <thomas@monjalon.net>
Fri, 5 Jul 2019 14:55:44 +0000 (16:55 +0200)
commitc2361bab70c56f64e50f07946b1b20bf688d782a
tree3469230539b638b2235bcb4b1089289e6a1cb292
parentfe8fc6b0b7eaf9078d804d57221000a494753997
eal: compute IOVA mode based on PA availability

Currently, if the bus selects IOVA as PA, the memory init can fail when
lacking access to physical addresses.
This can be quite hard for normal users to understand what is wrong
since this is the default behavior.

Catch this situation earlier in eal init by validating physical addresses
availability, or select IOVA when no clear preferrence had been expressed.

The bus code is changed so that it reports when it does not care about
the IOVA mode and let the eal init decide.

In Linux implementation, rework rte_eal_using_phys_addrs() so that it can
be called earlier but still avoid a circular dependency with
rte_mem_virt2phys().
In FreeBSD implementation, rte_eal_using_phys_addrs() always returns
false, so the detection part is left as is.

If librte_kni is compiled in and the KNI kmod is loaded,
- if the buses requested VA, force to PA if physical addresses are
  available as it was done before,
- else, keep iova as VA, KNI init will fail later.

Signed-off-by: Ben Walker <benjamin.walker@intel.com>
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
lib/librte_eal/common/eal_common_bus.c
lib/librte_eal/common/include/rte_bus.h
lib/librte_eal/freebsd/eal/eal.c
lib/librte_eal/linux/eal/eal.c
lib/librte_eal/linux/eal/eal_memory.c