[v3,1/4] net/bnx2x: fix build with gcc11

Message ID 20210511131435.1226820-1-ferruh.yigit@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers
Series [v3,1/4] net/bnx2x: fix build with gcc11 |

Checks

Context Check Description
ci/checkpatch warning coding style issues

Commit Message

Ferruh Yigit May 11, 2021, 1:14 p.m. UTC
  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 <ferruh.yigit@intel.com>
Acked-by: Kevin Traynor <ktraynor@redhat.com>
---
Cc: rmody@marvell.com
Cc: Kevin Traynor <ktraynor@redhat.com>
Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>

v2:
* fix struct initialization as '{0}' -> '{{0}}'

v3:
* Add missing Bugzilla tag
---
 drivers/net/bnx2x/bnx2x_rxtx.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)
  

Comments

Ferruh Yigit May 12, 2021, 1:04 p.m. UTC | #1
On 5/11/2021 2:14 PM, 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: stable@dpdk.org
> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> Acked-by: Kevin Traynor <ktraynor@redhat.com>

Series applied to dpdk-next-net/main, thanks.
  

Patch

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