<snip> > > Hi Honnappa, > > Sorry about the delayed reply. No problem, thank you.
> The build error trace is below, the build command used was: CC=gcc meson -- > optimization=1 --werror build1; ninja -C build1 I am not sure how I could fix > this issue without initialising zcd. > > [2339/2407] Compiling C object app/test/dpdk- > test.p/test_ring_mt_peek_stress_zc.c.o > FAILED: app/test/dpdk-test.p/test_ring_mt_peek_stress_zc.c.o > gcc -Iapp/test/dpdk-test.p -Iapp/test -I../app/test -Ilib/librte_acl - > I../lib/librte_acl -I. -I.. -Iconfig -I../config -Ilib/librte_eal/include - > I../lib/librte_eal/include -Ilib/librte_eal/linux/include - > I../lib/librte_eal/linux/include -Ilib/librte_eal/x86/include - > I../lib/librte_eal/x86/include -Ilib/librte_eal/common - > I../lib/librte_eal/common -Ilib/librte_eal -I../lib/librte_eal > -Ilib/librte_kvargs - > I../lib/librte_kvargs -Ilib/librte_metrics -I../lib/librte_metrics - > Ilib/librte_telemetry -I../lib/librte_telemetry -Idrivers/bus/pci - > I../drivers/bus/pci -I../drivers/bus/pci/linux -Ilib/librte_pci > -I../lib/librte_pci - > Idrivers/bus/vdev -I../drivers/bus/vdev -Ilib/librte_bitratestats - > I../lib/librte_bitratestats -Ilib/librte_ethdev -I../lib/librte_ethdev - > Ilib/librte_net -I../lib/librte_net -Ilib/librte_mbuf -I../lib/librte_mbuf - > Ilib/librte_mempool -I../lib/librte_mempool -Ilib/librte_ring > -I../lib/librte_ring > -Ilib/librte_meter -I../lib/librte_meter -Ilib/librte_bpf -I../lib/librte_bpf > - > Ilib/librte_cfgfile -I../lib/librte_cfgfile -Ilib/librte_cmdline > -I../lib/librte_cmdline > -Ilib/librte_cryptodev -I../lib/librte_cryptodev -Ilib/librte_distributor - > I../lib/librte_distributor -Ilib/librte_efd -I../lib/librte_efd > -Ilib/librte_hash - > I../lib/librte_hash -Ilib/librte_rcu -I../lib/librte_rcu > -Ilib/librte_eventdev - > I../lib/librte_eventdev -Ilib/librte_timer -I../lib/librte_timer > -Ilib/librte_fib - > I../lib/librte_fib -Ilib/librte_rib -I../lib/librte_rib > -Ilib/librte_flow_classify - > I../lib/librte_flow_classify -Ilib/librte_table -I../lib/librte_table > -Ilib/librte_port > -I../lib/librte_port -Ilib/librte_sched -I../lib/librte_sched > -Ilib/librte_ip_frag - > I../lib/librte_ip_frag -Ilib/librte_kni -I../lib/librte_kni -Ilib/librte_lpm - > I../lib/librte_lpm -Ilib/librte_graph -I../lib/librte_graph > -Ilib/librte_ipsec - > I../lib/librte_ipsec -Ilib/librte_security -I../lib/librte_security - > Ilib/librte_latencystats -I../lib/librte_latencystats -Ilib/librte_member - > I../lib/librte_member -Ilib/librte_node -I../lib/librte_node > -Ilib/librte_pipeline > -I../lib/librte_pipeline -Ilib/librte_rawdev -I../lib/librte_rawdev - > Ilib/librte_reorder -I../lib/librte_reorder -Ilib/librte_stack > -I../lib/librte_stack - > Idrivers/mempool/ring -I../drivers/mempool/ring -Idrivers/mempool/stack - > I../drivers/mempool/stack -Idrivers/event/skeleton - > I../drivers/event/skeleton -Idrivers/net/bonding -I../drivers/net/bonding - > Idrivers/net/ring -I../drivers/net/ring -Ilib/librte_power > -I../lib/librte_power - > Ilib/librte_pdump -I../lib/librte_pdump -Idrivers/crypto/scheduler - > I../drivers/crypto/scheduler -fdiagnostics-color=always -pipe - > D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Werror -O1 -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-packed-not-aligned -Wno-missing- > field-initializers -march=native -mno-avx512f -DALLOW_EXPERIMENTAL_API - > Wno-format-truncation -D_GNU_SOURCE -fno-strict-aliasing - > DALLOW_INTERNAL_API -MD -MQ app/test/dpdk- > test.p/test_ring_mt_peek_stress_zc.c.o -MF app/test/dpdk- > test.p/test_ring_mt_peek_stress_zc.c.o.d -o app/test/dpdk- > test.p/test_ring_mt_peek_stress_zc.c.o -c > ../app/test/test_ring_mt_peek_stress_zc.c > In file included from ../app/test/test_ring_mt_peek_stress_zc.c:5: > ../app/test/test_ring_stress_impl.h: In function 'test_worker': > ../app/test/test_ring.h:82:3: error: 'zcd.n1' may be used uninitialized in > this > function [-Werror=maybe-uninitialized] > test_ring_mem_copy(zcd->ptr2, src, > ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > esize, num - zcd->n1); > ~~~~~~~~~~~~~~~~~~~~~ > ../app/test/test_ring_mt_peek_stress_zc.c:32:26: note: 'zcd.n1' was declared > here > struct rte_ring_zc_data zcd; > ^~~ > In file included from ../app/test/test_ring_mt_peek_stress_zc.c:5: > ../app/test/test_ring.h:67:2: error: '*((void *)&zcd+8)' may be used > uninitialized in this function [-Werror=maybe-uninitialized] > memcpy(dst, src, sz); > ^~~~~~~~~~~~~~~~~~~~ > ../app/test/test_ring_mt_peek_stress_zc.c:32:26: note: '*((void *)&zcd+8)' > was declared here I remember seeing a similar error in test_ring_st_peek_stress_zc.c. In the file test_ring_mt_peek_stress_zc.c, after the call to enqueue/dequeue API calls, we have: "n = (m == n) ? n : 0;" This is present as the code was copied from existing code. I do not see why this line is required. Can you please try to remove this line and see if it works? > struct rte_ring_zc_data zcd; > ^~~ > In file included from ../app/test/test_ring_mt_peek_stress_zc.c:5: > ../app/test/test_ring.h:67:2: error: 'zcd' may be used uninitialized in this > function [-Werror=maybe-uninitialized] > memcpy(dst, src, sz); > ^~~~~~~~~~~~~~~~~~~~ > ../app/test/test_ring_mt_peek_stress_zc.c:32:26: note: 'zcd' was declared > here > struct rte_ring_zc_data zcd; > ^~~ > In file included from ../app/test/test_ring_mt_peek_stress_zc.c:5: > ../app/test/test_ring.h:63:11: error: 'zcd.n1' may be used uninitialized in > this > function [-Werror=maybe-uninitialized] > sz = num * sizeof(void *); > ~~~~^~~~~~~~~~~~~~~~ > ../app/test/test_ring_mt_peek_stress_zc.c:14:26: note: 'zcd.n1' was declared > here > struct rte_ring_zc_data zcd; > ^~~ > In file included from ../app/test/test_ring_mt_peek_stress_zc.c:5: > ../app/test/test_ring.h:67:2: error: '*((void *)&zcd+8)' may be used > uninitialized in this function [-Werror=maybe-uninitialized] > memcpy(dst, src, sz); > ^~~~~~~~~~~~~~~~~~~~ > ../app/test/test_ring_mt_peek_stress_zc.c:14:26: note: '*((void *)&zcd+8)' > was declared here > struct rte_ring_zc_data zcd; > ^~~ > In file included from ../app/test/test_ring_mt_peek_stress_zc.c:5: > ../app/test/test_ring.h:67:2: error: 'zcd' may be used uninitialized in this > function [-Werror=maybe-uninitialized] > memcpy(dst, src, sz); > ^~~~~~~~~~~~~~~~~~~~ > ../app/test/test_ring_mt_peek_stress_zc.c:14:26: note: 'zcd' was declared > here > struct rte_ring_zc_data zcd; > ^~~ > cc1: all warnings being treated as errors [2340/2407] Compiling C object > drivers/libtmp_...ontx2.a.p/event_octeontx2_otx2_worker_dual.c.o > ninja: build stopped: subcommand failed. > > Thanks, > Conor. > > > From: Honnappa Nagarahalli <honnappa.nagaraha...@arm.com> > > Sent: Wednesday 4 November 2020 18:48 > > To: Walsh, Conor <conor.wa...@intel.com>; Ananyev, Konstantin > > <konstantin.anan...@intel.com> > > Cc: dev@dpdk.org; Chen, LingliX <linglix.c...@intel.com>; nd > > <n...@arm.com>; Honnappa Nagarahalli <honnappa.nagaraha...@arm.com>; > nd > > <n...@arm.com> > > Subject: RE: [PATCH v1] app/test: zcd needs to be initialised to fix > > gcc compile error > > > > Hi Conor, > > Thanks for the patch. > > > > <snip> > > > > > > > > When DPDK is compiled with gcc < 9 with the optimization level set > > > to 1 gcc sees zcd in test_ring.h as possibly being uninitialised. To > > > correct this error > > zcd > > > has been initialised to {0} in test_ring_mt_peek_stress_zc.c. > > > > > > Signed-off-by: Conor Walsh <conor.wa...@intel.com> > > > --- > > > app/test/test_ring_mt_peek_stress_zc.c | 4 ++-- > > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > > > diff --git a/app/test/test_ring_mt_peek_stress_zc.c > > > b/app/test/test_ring_mt_peek_stress_zc.c > > > index 7e0bd511a7..ba0acf237c 100644 > > > --- a/app/test/test_ring_mt_peek_stress_zc.c > > > +++ b/app/test/test_ring_mt_peek_stress_zc.c > > > @@ -11,7 +11,7 @@ _st_ring_dequeue_bulk(struct rte_ring *r, void > > > **obj, uint32_t n, > > > uint32_t *avail) > > > { > > > uint32_t m; > > > - struct rte_ring_zc_data zcd; > > > + struct rte_ring_zc_data zcd = {0}; > > I faced similar problems when I created this test case. I refrained > > from doing this initialization as it might mask the problems in the > > library. Is it possible to identify which path in the library is > > actually resulting in this error? I would prefer to fix that instead. > > > > > > > > m = rte_ring_dequeue_zc_bulk_start(r, n, &zcd, avail); > > > n = (m == n) ? n : 0; > > > @@ -29,7 +29,7 @@ _st_ring_enqueue_bulk(struct rte_ring *r, void * > > const > > > *obj, uint32_t n, > > > uint32_t *free) > > > { > > > uint32_t m; > > > - struct rte_ring_zc_data zcd; > > > + struct rte_ring_zc_data zcd = {0}; > > > > > > m = rte_ring_enqueue_zc_bulk_start(r, n, &zcd, free); > > > n = (m == n) ? n : 0; > > > -- > > > 2.25.1