On Wed, Dec 21, 2022 at 1:42 PM Ilya Maximets <[email protected]> wrote: > On 12/20/22 15:38, Ilya Maximets wrote: > > On 12/20/22 14:14, Eelco Chaudron wrote: > >> On 20 Dec 2022, at 14:06, David Marchand wrote: > >>> On Tue, Dec 20, 2022 at 2:01 PM Eelco Chaudron <[email protected]> > >>> wrote: > >>>> I have problems building this on my fedora35 system with > >>>> gcc-11.3.1-3.fc35.x86_64: > >>>> > >>>> libtool: link: ( cd "include/openvswitch/.libs" && rm -f "libcxxtest.la" > >>>> && ln -s "../libcxxtest.la" "libcxxtest.la" ) > >>>> In file included from lib/netdev-linux-private.h:30, > >>>> from lib/netdev-afxdp.c:19: > >>>> In function ‘dp_packet_delete’, > >>>> inlined from ‘dp_packet_delete’ at lib/dp-packet.h:246:1, > >>>> inlined from ‘dp_packet_batch_add__’ at lib/dp-packet.h:775:9, > >>>> inlined from ‘dp_packet_batch_add’ at lib/dp-packet.h:783:5, > >>>> inlined from ‘netdev_afxdp_rxq_recv’ at lib/netdev-afxdp.c:894:9: > >>>> lib/dp-packet.h:260:9: error: ‘free’ called on pointer > >>>> ‘*umem.xpool.array’ with nonzero offset [8, 2558044588346441168] > >>>> [-Werror=free-nonheap-object] > >>>> 260 | free(b); > >>>> | ^~~~~~~ > >>>> > >>>> Guess it does not recognise the (b->source == DPBUF_AFXDP) statement… > >>>> > >>>> This is my build config: > >>>> > >>>> ./configure --enable-Werror --enable-usdt-probes --localstatedir=/var > >>>> --prefix=/usr --sysconfdir=/etc --enable-afxdp > >>>> > >>>> Guess this should be fixed before we enable afxdp by default? > >>> > >>> Same for me. > >>> I have been scratching my head over this report... I wonder if this is > >>> a compiler bug. > >> > >> I guess the compiler does not understand that we will always call > >> dp_packet_delete() with the source being DPBUF_AFXDP, and don’t hit the > >> free(). > >> Guess we should probably disable the warning in this specific code path. > >> > >> //Eelco > >> > > > > Meanwhile I opened a GCC bug: > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108187 > > So, AFAICT, the issue is that implementation of the dp_packet_use_afxdp() > is part of a different translation unit (dp-packet.c) and GCC has no access > to it while processing netdev-afxdp.c, so it doesn't know that packet > source is set to DPBUF_AFXDP. Hence the warning. There are still a few > misteries around this, e.g. why the issue is not seen with -O0, but they > will likely not very important. > > I don't see a good way to fix that. We could inline a bunch of functions > from dp-packet.c, or explicitly set the source to DPBUF_AFXDP somewhere in > the realm of netdev-afxdp.c module, but I don't think that any of that is > a good solution. > > I'll add a patch to disable the warning with #pragma GCC here around the > dp_packet_batch_add() call in netdev-afxdp.c for now, unless there are > better suggestions. Clang doesn't emit this warning, so we don't need > to have a workaround for it.
+1. Thanks. -- David Marchand _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
