On 11/05/2021 12:44, Ferruh Yigit wrote: > Reproduced with '--buildtype=debugoptimized' config, > compiler version: gcc (GCC) 12.0.0 20210509 (experimental) > > Build error: > In file included from ../drivers/net/bnx2x/bnx2x_rxtx.c:8: > ../drivers/net/bnx2x/bnx2x_rxtx.c: In function ‘bnx2x_upd_rx_prod_fast’: > ../drivers/net/bnx2x/bnx2x.h:1528:35: > warning: ‘rx_prods’ is used uninitialized [-Wuninitialized] > #define REG_WR32(sc, offset, val) bnx2x_reg_write32(sc, (offset), val) > ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > ../drivers/net/bnx2x/bnx2x.h:1531:33: > note: in expansion of macro ‘REG_WR32’ > 1531 | #define REG_WR(sc, offset, val) REG_WR32(sc, offset, val) > | ^~~~~~~~ > ../drivers/net/bnx2x/bnx2x_rxtx.c:331:9: > note: in expansion of macro ‘REG_WR’ > 331 | REG_WR(sc, fp->ustorm_rx_prods_offset, val[0]); > | ^~~~~~ > ../drivers/net/bnx2x/bnx2x_rxtx.c:324:40: note: ‘rx_prods’ declared here > 324 | struct ustorm_eth_rx_producers rx_prods = { 0 }; > | ^~~~~~~~ > > REG_WR32 requires 'uint32_t', use union instead of cast to 'uint32_t'. >
Bugzilla ID: 692 > Fixes: 38dff79ba736 ("net/bnx2x: update HSI") > Cc: sta...@dpdk.org > > Signed-off-by: Ferruh Yigit <ferruh.yi...@intel.com> Acked-by: Kevin Traynor <ktray...@redhat.com> > --- > Cc: rm...@marvell.com > Cc: Kevin Traynor <ktray...@redhat.com> > Cc: Ajit Khaparde <ajit.khapa...@broadcom.com> > > v2: > * fix struct initialization as '{0}' -> '{{0}}' (I won't be surprised if some compiler in the ci complains, but ok on F34, gcc 11.1.1 and RHEL8.3, gcc 8.3.1) > --- > drivers/net/bnx2x/bnx2x_rxtx.c | 13 +++++++------ > 1 file changed, 7 insertions(+), 6 deletions(-) > > diff --git a/drivers/net/bnx2x/bnx2x_rxtx.c b/drivers/net/bnx2x/bnx2x_rxtx.c > index 57e2ce504587..2b1760229051 100644 > --- a/drivers/net/bnx2x/bnx2x_rxtx.c > +++ b/drivers/net/bnx2x/bnx2x_rxtx.c > @@ -321,14 +321,15 @@ static inline void > bnx2x_upd_rx_prod_fast(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp, > uint16_t rx_bd_prod, uint16_t rx_cq_prod) > { > - struct ustorm_eth_rx_producers rx_prods = { 0 }; > - uint32_t *val = NULL; > + union { > + struct ustorm_eth_rx_producers rx_prods; > + uint32_t val; > + } val = { {0} }; > > - rx_prods.bd_prod = rx_bd_prod; > - rx_prods.cqe_prod = rx_cq_prod; > + val.rx_prods.bd_prod = rx_bd_prod; > + val.rx_prods.cqe_prod = rx_cq_prod; > > - val = (uint32_t *)&rx_prods; > - REG_WR(sc, fp->ustorm_rx_prods_offset, val[0]); > + REG_WR(sc, fp->ustorm_rx_prods_offset, val.val); > } > > static uint16_t >