> -----Original Message----- > From: Robin Jarry <rja...@redhat.com> > Sent: Wednesday, September 25, 2024 6:41 PM > To: dev@dpdk.org > Subject: [PATCH dpdk v2] mbuf: fix strict aliasing error in allocator > > When building an application with -fstrict-aliasing -Wstrict-aliasing=2, > we get errors triggered by rte_mbuf_raw_alloc() which is called inline > from rte_pktmbuf_alloc(). > > ../dpdk/lib/mbuf/rte_mbuf.h: In function ‘rte_mbuf_raw_alloc’: > ../dpdk/lib/mbuf/rte_mbuf.h:600:42: error: dereferencing type-punned > pointer might break strict-aliasing rules [-Werror=strict-aliasing] > 600 | if (rte_mempool_get(mp, (void **)&m) < 0) > | ^~ > > Avoid incorrect casting by using an inline union variable. > > Signed-off-by: Robin Jarry <rja...@redhat.com> > --- > > Notes: > v2: use inline union to fix -Wincompatible-pointer-types > > lib/mbuf/rte_mbuf.h | 11 +++++++---- > 1 file changed, 7 insertions(+), 4 deletions(-) > > diff --git a/lib/mbuf/rte_mbuf.h b/lib/mbuf/rte_mbuf.h > index babe16c72ccb..0d2e0e64b3ce 100644 > --- a/lib/mbuf/rte_mbuf.h > +++ b/lib/mbuf/rte_mbuf.h > @@ -595,12 +595,15 @@ __rte_mbuf_raw_sanity_check(__rte_unused const > struct rte_mbuf *m) > */ > static inline struct rte_mbuf *rte_mbuf_raw_alloc(struct rte_mempool *mp) > { > - struct rte_mbuf *m; > + union { > + void *ptr; > + struct rte_mbuf *m; > + } ret; > > - if (rte_mempool_get(mp, (void **)&m) < 0) > + if (rte_mempool_get(mp, &ret.ptr) < 0) > return NULL; > - __rte_mbuf_raw_sanity_check(m); > - return m; > + __rte_mbuf_raw_sanity_check(ret.m); > + return ret.m; > } > > /** > -- > 2.46.1
Hello, We noticed the failure in ci/iol-mellanox-Performance and ran a few performance test cases on NVIDIA hardware and found no regressions. Additionally ran build and functional test cases that also passed. Tested-by: Ali Alnubani <alia...@nvidia.com> Regards, Ali