On Mon, Aug 29, 2022 at 08:18:56PM +0200, Morten Brørup wrote: > > From: Shijith Thotton [mailto:sthot...@marvell.com] > > Sent: Monday, 29 August 2022 17.16 > > > > IOVA mode in DPDK is either PA or VA. The new build option iova_as_va > > configures the mode to VA at compile time and prevents setting it to PA > > at runtime. For now, all drivers which are not always enabled are > > disabled with this option. Supported driver can set the flag > > pmd_iova_as_va in its build file to enable build. > > > > mbuf structure holds the physical (PA) and virtual address (VA) of a > > buffer. if IOVA mode is set to VA, PA is redundant as it is the same as > > VA. So PA field need not be updated and marked invalid if the build is > > configured to use only VA. > > > > Signed-off-by: Shijith Thotton <sthot...@marvell.com> > > --- > > [...] > > > diff --git a/app/test/test_mbuf.c b/app/test/test_mbuf.c > > index e09b2549ca..992b8c64ab 100644 > > --- a/app/test/test_mbuf.c > > +++ b/app/test/test_mbuf.c > > @@ -1232,11 +1232,13 @@ test_failing_mbuf_sanity_check(struct > > rte_mempool *pktmbuf_pool) > > return -1; > > } > > > > - badbuf = *buf; > > - badbuf.buf_iova = 0; > > - if (verify_mbuf_check_panics(&badbuf)) { > > - printf("Error with bad-physaddr mbuf test\n"); > > - return -1; > > + if (!rte_is_iova_as_va_build()) { > > + badbuf = *buf; > > + rte_mbuf_iova_set(&badbuf, 0); > > + if (verify_mbuf_check_panics(&badbuf)) { > > + printf("Error with bad-physaddr mbuf test\n"); > > + return -1; > > + } > > } > > > > badbuf = *buf; > > diff --git a/config/meson.build b/config/meson.build > > index 7f7b6c92fd..1ff1cd774b 100644 > > --- a/config/meson.build > > +++ b/config/meson.build > > @@ -309,6 +309,9 @@ endif > > if get_option('mbuf_refcnt_atomic') > > dpdk_conf.set('RTE_MBUF_REFCNT_ATOMIC', true) > > endif > > +if get_option('iova_as_va') > > + dpdk_conf.set('RTE_IOVA_AS_VA', true) > > +endif > > > > compile_time_cpuflags = [] > > subdir(arch_subdir) > > diff --git a/drivers/meson.build b/drivers/meson.build > > index b22c2adda7..469e60f1fa 100644 > > --- a/drivers/meson.build > > +++ b/drivers/meson.build > > @@ -103,6 +103,7 @@ foreach subpath:subdirs > > ext_deps = [] > > pkgconfig_extra_libs = [] > > testpmd_sources = [] > > + pmd_iova_as_va = false > > > > if not enable_drivers.contains(drv_path) > > build = false > > @@ -120,6 +121,11 @@ foreach subpath:subdirs > > # pull in driver directory which should update all the > > local variables > > subdir(drv_path) > > > > + if dpdk_conf.has('RTE_IOVA_AS_VA') and not pmd_iova_as_va > > and not always_enable.contains(drv_path) > > + build = false > > + reason = 'driver does not support IOVA as VA mode' > > + endif > > + > > # get dependency objs from strings > > shared_deps = ext_deps > > static_deps = ext_deps > > diff --git a/lib/eal/include/rte_common.h > > b/lib/eal/include/rte_common.h > > index a96cc2a138..0010ad7c7d 100644 > > --- a/lib/eal/include/rte_common.h > > +++ b/lib/eal/include/rte_common.h > > @@ -921,6 +921,23 @@ __rte_noreturn void > > rte_exit(int exit_code, const char *format, ...) > > __rte_format_printf(2, 3); > > > > +/** > > + * Check if build is configured to use IOVA as VA. > > + * > > + * @return > > + * 1 if true, 0 otherwise > > + * > > + */ > > +static inline int > > +rte_is_iova_as_va_build(void) > > +{ > > +#ifdef RTE_IOVA_AS_VA > > + return 1; > > +#else > > + return 0; > > +#endif > > +} > > The rte_is_iova_as_va_build() function is effectively a shadow of the > RTE_IOVA_AS_VA definition. Why the need to camouflage RTE_IOVA_AS_VA through > a function, instead of just using RTE_IOVA_AS_VA everywhere? > My reading is that it's not quite equivalent, and in the undef case it can't be directly used in C code. You can't do "if (RTE_IOVA_AS_VA)", for example. However, rather than adding a function, in meson you could also add "dpdk_conf.set10(RTE_IOVA....)" to define a second macro that is 0 in the undef case, and which therefore could be used in C conditionals.
/Bruce