From: Ferruh Yigit Date: Tue, 11 May 2021 13:14:32 +0000 (+0100) Subject: net/bnx2x: fix build with GCC 11 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=b3c740e03751215ab01841975b8f5764023f953b;p=dpdk.git net/bnx2x: fix build with GCC 11 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: stable@dpdk.org Signed-off-by: Ferruh Yigit Acked-by: Kevin Traynor --- diff --git a/drivers/net/bnx2x/bnx2x_rxtx.c b/drivers/net/bnx2x/bnx2x_rxtx.c index 57e2ce5045..2b17602290 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