On Thu, Oct 8, 2020 at 5:19 PM David Marchand <david.march...@redhat.com> wrote: > > On Wed, Sep 30, 2020 at 3:14 PM Ciara Power <ciara.po...@intel.com> wrote: > > > > When choosing the vector path, max SIMD bitwidth is now checked to > > ensure a vector path is allowable. To do this, rather than the vector > > lookup functions being called directly from apps, a generic lookup > > function is called which will call the vector functions if suitable. > > > > Signed-off-by: Ciara Power <ciara.po...@intel.com> > > Got a build error on this patch with ./devtools/test-meson-builds.sh > ("gcc-shared" target): > > [2/3] Compiling C object > 'examples/c590b3c@@dpdk-l3fwd-thread@exe/performance-thread_l3fwd-thread_main.c.o'. > FAILED: > examples/c590b3c@@dpdk-l3fwd-thread@exe/performance-thread_l3fwd-thread_main.c.o > ccache gcc -Iexamples/c590b3c@@dpdk-l3fwd-thread@exe -Iexamples > -I../../dpdk/examples -Iexamples/performance-thread/l3fwd-thread > -I../../dpdk/examples/performance-thread/l3fwd-thread > -I../../dpdk/examples/performance-thread/l3fwd-thread/../common > -I../../dpdk/examples/performance-thread/l3fwd-thread/../common/arch/x86 > -I. -I../../dpdk/ -Iconfig -I../../dpdk/config > -Ilib/librte_eal/include -I../../dpdk/lib/librte_eal/include > -Ilib/librte_eal/linux/include > -I../../dpdk/lib/librte_eal/linux/include -Ilib/librte_eal/x86/include > -I../../dpdk/lib/librte_eal/x86/include -Ilib/librte_eal/common > -I../../dpdk/lib/librte_eal/common -Ilib/librte_eal > -I../../dpdk/lib/librte_eal -Ilib/librte_kvargs > -I../../dpdk/lib/librte_kvargs > -Ilib/librte_telemetry/../librte_metrics > -I../../dpdk/lib/librte_telemetry/../librte_metrics > -Ilib/librte_telemetry -I../../dpdk/lib/librte_telemetry > -Ilib/librte_mempool -I../../dpdk/lib/librte_mempool -Ilib/librte_ring > -I../../dpdk/lib/librte_ring -Ilib/librte_net > -I../../dpdk/lib/librte_net -Ilib/librte_mbuf > -I../../dpdk/lib/librte_mbuf -Ilib/librte_ethdev > -I../../dpdk/lib/librte_ethdev -Ilib/librte_meter > -I../../dpdk/lib/librte_meter -Ilib/librte_cmdline > -I../../dpdk/lib/librte_cmdline -Ilib/librte_timer > -I../../dpdk/lib/librte_timer -Ilib/librte_lpm > -I../../dpdk/lib/librte_lpm -Ilib/librte_hash > -I../../dpdk/lib/librte_hash -Ilib/librte_rcu > -I../../dpdk/lib/librte_rcu > -I/home/dmarchan/intel-ipsec-mb/install/include > -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall > -Winvalid-pch -Werror -O2 -g -include rte_config.h -Wextra -Wcast-qual > -Wdeprecated -Wformat-nonliteral -Wformat-security > -Wmissing-declarations -Wmissing-prototypes -Wnested-externs > -Wold-style-definition -Wpointer-arith -Wsign-compare > -Wstrict-prototypes -Wundef -Wwrite-strings > -Wno-address-of-packed-member -Wno-packed-not-aligned > -Wno-missing-field-initializers -D_GNU_SOURCE -march=native > -Wno-format-truncation -DALLOW_EXPERIMENTAL_API -MD -MQ > 'examples/c590b3c@@dpdk-l3fwd-thread@exe/performance-thread_l3fwd-thread_main.c.o' > -MF > 'examples/c590b3c@@dpdk-l3fwd-thread@exe/performance-thread_l3fwd-thread_main.c.o.d' > -o > 'examples/c590b3c@@dpdk-l3fwd-thread@exe/performance-thread_l3fwd-thread_main.c.o' > -c ../../dpdk/examples/performance-thread/l3fwd-thread/main.c > #‘target_mem_ref’ not supported by expression#’In file included from > ../../dpdk/examples/performance-thread/l3fwd-thread/main.c:133: > ../../dpdk/examples/performance-thread/l3fwd-thread/main.c: In > function ‘process_burst’: > ../../dpdk/lib/librte_lpm/rte_lpm.h:435:7: error: may be used > uninitialized in this function [-Werror=maybe-uninitialized] > 435 | if (rte_lpm_lookup(lpm, ((uint32_t *) &ip)[i], &hop[i]) < 0) > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > cc1: all warnings being treated as errors > ninja: build stopped: subcommand failed. > > gcc (GCC) 9.3.1 20200408 (Red Hat 9.3.1-2)
On the build issue, I guess you can use a rte_xmm_t passe-plat. diff --git a/lib/librte_lpm/rte_lpm.h b/lib/librte_lpm/rte_lpm.h index edba7cafd5..43db784a76 100644 --- a/lib/librte_lpm/rte_lpm.h +++ b/lib/librte_lpm/rte_lpm.h @@ -430,10 +430,14 @@ static inline void rte_lpm_lookupx4_scalar(struct rte_lpm *lpm, xmm_t ip, uint32_t hop[4], uint32_t defv) { - int i; - for (i = 0; i < 4; i++) - if (rte_lpm_lookup(lpm, ((uint32_t *) &ip)[i], &hop[i]) < 0) + unsigned int i; + rte_xmm_t _ip; + + _ip.x = ip; + for (i = 0; i < RTE_DIM(_ip.u32); i++) { + if (rte_lpm_lookup(lpm, _ip.u32[i], &hop[i]) < 0) hop[i] = defv; /* lookupx4 expected to set on failure */ + } } /** -- David Marchand