[v2,2/4] net/bnx2x: fix build with gcc11

Message ID 20210511114454.3923410-2-ferruh.yigit@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Ferruh Yigit
Headers
Series [v2,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, 11:44 a.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.c:16:
../drivers/net/bnx2x/bnx2x.c: In function ‘bnx2x_hc_ack_sb’:
../drivers/net/bnx2x/bnx2x.h:1528:35:
         warning: ‘igu_ack’ 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.h:1916:9: note: in expansion of macro ‘REG_WR’
 1916 |         REG_WR(sc, hc_addr, *val);
      |         ^~~~~~
../drivers/net/bnx2x/bnx2x.h:1905:33: note: ‘igu_ack’ declared here
 1905 |         struct igu_ack_register igu_ack;
      |                                 ^~~~~~~

REG_WR32 requires 'uint32_t', use union instead of cast to 'uint32_t'.

Fixes: 38dff79ba736 ("net/bnx2x: update HSI")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
Cc: rmody@marvell.com
Cc: Kevin Traynor <ktraynor@redhat.com>
Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>
---
 drivers/net/bnx2x/bnx2x.h | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)
  

Comments

Kevin Traynor May 11, 2021, 12:27 p.m. UTC | #1
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.c:16:
> ../drivers/net/bnx2x/bnx2x.c: In function ‘bnx2x_hc_ack_sb’:
> ../drivers/net/bnx2x/bnx2x.h:1528:35:
>          warning: ‘igu_ack’ 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.h:1916:9: note: in expansion of macro ‘REG_WR’
>  1916 |         REG_WR(sc, hc_addr, *val);
>       |         ^~~~~~
> ../drivers/net/bnx2x/bnx2x.h:1905:33: note: ‘igu_ack’ declared here
>  1905 |         struct igu_ack_register igu_ack;
>       |                                 ^~~~~~~
> 
> 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>
> ---
>  drivers/net/bnx2x/bnx2x.h | 13 +++++++------
>  1 file changed, 7 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h
> index e13ab1557418..80d19cbfd665 100644
> --- a/drivers/net/bnx2x/bnx2x.h
> +++ b/drivers/net/bnx2x/bnx2x.h
> @@ -1902,18 +1902,19 @@ bnx2x_hc_ack_sb(struct bnx2x_softc *sc, uint8_t sb_id, uint8_t storm,
>  {
>  	uint32_t hc_addr = (HC_REG_COMMAND_REG + SC_PORT(sc) * 32 +
>  			COMMAND_REG_INT_ACK);
> -	struct igu_ack_register igu_ack;
> -	uint32_t *val = NULL;
> +	union {
> +		struct igu_ack_register igu_ack;
> +		uint32_t val;
> +	} val;
>  
> -	igu_ack.status_block_index = index;
> -	igu_ack.sb_id_and_flags =
> +	val.igu_ack.status_block_index = index;
> +	val.igu_ack.sb_id_and_flags =
>  		((sb_id << IGU_ACK_REGISTER_STATUS_BLOCK_ID_SHIFT) |
>  		 (storm << IGU_ACK_REGISTER_STORM_ID_SHIFT) |
>  		 (update << IGU_ACK_REGISTER_UPDATE_INDEX_SHIFT) |
>  		 (op << IGU_ACK_REGISTER_INTERRUPT_MODE_SHIFT));
>  
> -	val = (uint32_t *)&igu_ack;
> -	REG_WR(sc, hc_addr, *val);
> +	REG_WR(sc, hc_addr, val.val);
>  
>  	/* Make sure that ACK is written */
>  	mb();
>
  

Patch

diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h
index e13ab1557418..80d19cbfd665 100644
--- a/drivers/net/bnx2x/bnx2x.h
+++ b/drivers/net/bnx2x/bnx2x.h
@@ -1902,18 +1902,19 @@  bnx2x_hc_ack_sb(struct bnx2x_softc *sc, uint8_t sb_id, uint8_t storm,
 {
 	uint32_t hc_addr = (HC_REG_COMMAND_REG + SC_PORT(sc) * 32 +
 			COMMAND_REG_INT_ACK);
-	struct igu_ack_register igu_ack;
-	uint32_t *val = NULL;
+	union {
+		struct igu_ack_register igu_ack;
+		uint32_t val;
+	} val;
 
-	igu_ack.status_block_index = index;
-	igu_ack.sb_id_and_flags =
+	val.igu_ack.status_block_index = index;
+	val.igu_ack.sb_id_and_flags =
 		((sb_id << IGU_ACK_REGISTER_STATUS_BLOCK_ID_SHIFT) |
 		 (storm << IGU_ACK_REGISTER_STORM_ID_SHIFT) |
 		 (update << IGU_ACK_REGISTER_UPDATE_INDEX_SHIFT) |
 		 (op << IGU_ACK_REGISTER_INTERRUPT_MODE_SHIFT));
 
-	val = (uint32_t *)&igu_ack;
-	REG_WR(sc, hc_addr, *val);
+	REG_WR(sc, hc_addr, val.val);
 
 	/* Make sure that ACK is written */
 	mb();