> From: Honnappa Nagarahalli <honnappa.nagaraha...@arm.com> > Sent: Monday 9 November 2020 17:24 > 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 > > <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. > > > > > > <snip> > > > > > 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? > > > > I commented out all occurrences of that line in > test_ring_mt_peek_stess_zc.c > > and the build is still failing. > > Trace at end of email. > Thanks for checking the suggestion. Can you provide your setup details? OS > and gcc version would be good. I would like to try it.
Sure no problem, the error doesn't seem to affect gcc versions > 8. My setup is CentOS8.2 with kernel 4.18.0-193.28.1.el8_2.x86_64 and gcc 8.3.1. > > <snip> > > > > > [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 > > ../app/test/test_ring_mt_peek_stress_zc.c: In function > > '_st_ring_dequeue_bulk': > > ../app/test/test_ring_mt_peek_stress_zc.c:13:11: error: variable 'm' set > but > > not used [-Werror=unused-but-set-variable] > > uint32_t m; > > ^ > > ../app/test/test_ring_mt_peek_stress_zc.c: In function > > '_st_ring_enqueue_bulk': > > ../app/test/test_ring_mt_peek_stress_zc.c:31:11: error: variable 'm' set > but > > not used [-Werror=unused-but-set-variable] > > uint32_t m; > > ^ > I am not sure why you are seeing the above error. m is being set but is only being used in the line that I commented out, if that line needs to be removed then m doesn't need to be set or declared. E.g. below. test_ring_mt_peek_stress_zc.c:9 static inline uint32_t _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; m = rte_ring_dequeue_zc_bulk_start(r, n, &zcd, avail); //n = (m == n) ? n : 0; if (n != 0) { /* Copy the data from the ring */ test_ring_copy_from(&zcd, obj, -1, n); rte_ring_dequeue_zc_finish(r, n); } return n; } Thanks for looking into this. > > <snip>